Cache ANAF: ordine explicita pe rapoartele de incasari, changelog 2.11.68-2.11.69

- Programe/orapoarte.prg:1994 - verificarea split TVA pe o data din trecut
  cere explicit ordinea MASA (cache intai); :2312 - varianta pe data curenta
  cere UNIC (ANAF intai, cache-ul ramane plasa de siguranta).
- changelog_roacont.txt - intrarile 2.11.68 si 2.11.69.
- versiune_db.txt - 2026_08_01_02.
- CLAUDE.md - regula de continut pentru changelog si stilul de raspuns cerut.
- TODOS.md - amanarile din review-ul transei cache ANAF, P4 marcat preluat.
- roacont.pj2 - resincronizat cu git_sync.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JCzVWfqscv1xyo5uvJiWiW
This commit is contained in:
2026-08-02 01:32:00 +03:00
parent 265ba78b0a
commit ea977c7bfc
6 changed files with 155 additions and 5 deletions

View File

@@ -170,6 +170,10 @@ ROACONT - X.Y.Z
--> -->
``` ```
Regula de continut: changelog-ul e pentru utilizatori — se scrie **doar ce vede utilizatorul**,
scurt si compact. Erorile introduse si reparate in aceeasi versiune nelivrata **nu se trec**
(clientul nu le-a vazut niciodata); intrarea versiunii curente se rescrie, nu se acumuleaza.
Tags in use: `:nou:` (new feature), `:modificare:` (change/fix to existing behavior), Tags in use: `:nou:` (new feature), `:modificare:` (change/fix to existing behavior),
`:eroare:` (bug fix), `:adaugare:` (addition). Version numbers increment per entry (current `:eroare:` (bug fix), `:adaugare:` (addition). Version numbers increment per entry (current
series is `2.11.x`). When asked to log a change, follow this exact format/tag set rather than series is `2.11.x`). When asked to log a change, follow this exact format/tag set rather than
@@ -215,6 +219,29 @@ Preferintele lui Marius pentru sesiunile pe acest proiect:
(`.vcx`/`.scx`), diff-ul lizibil se face pe forma text `.vc2`/`.sc2` regenerata cu (`.vcx`/`.scx`), diff-ul lizibil se face pe forma text `.vc2`/`.sc2` regenerata cu
`git_sync.ps1`, inainte de write-back cu `txt2vcx.ps1`. `git_sync.ps1`, inainte de write-back cu `txt2vcx.ps1`.
## Stil de raspuns: scurt si concret
Marius vrea raspunsuri **clare, concise, fara vorbarie**. Regula, nu preferinta.
- **Starea si ce urmeaza, nu povestea.** Ce e gata, ce e stricat, ce trebuie decis, ce urmeaza —
in liste scurte, cu fisier si linie. Fara reconstituirea drumului pana la rezultat.
- **Fara naratiune de proces**: ce a raportat fiecare agent, cine ce a corectat, cum au fost
coordonate benzile. Intra in `docs/`, nu in raspuns.
- **Fara laude si fara reluari.** Nu repeta ce s-a spus deja in conversatie.
- Detaliile tehnice lungi (dovezi, iesiri de test, metodologie) se scriu in fisier si se
**trimite la el**, nu se copiaza in raspuns.
- Cand e ceva de decis: enunta decizia si optiunile in cateva randuri, cu recomandarea ta.
**Formatul obligatoriu al raspunsului**, in aceasta ordine, maxim cateva randuri fiecare:
1. **Am facut:** ce e gata (fisier:linie).
2. **Urmeaza:** ce fac mai departe.
3. **De la tine:** intrebarea, clar si simpla, cu recomandarea mea.
Explicatiile, dovezile si descoperirile colaterale merg in `docs/`, cu un link. Nu se reia in
raspuns rationamentul, nu se explica de ce a fost greu, nu se justifica alegerile decat daca
sunt cerute.
## Skill routing ## Skill routing
When the user's request matches an available skill, invoke it via the Skill tool. When in doubt, invoke the skill. When the user's request matches an available skill, invoke it via the Skill tool. When in doubt, invoke the skill.

View File

@@ -1991,9 +1991,10 @@ select *
Use In (Select('cIncasariBanca2')) Use In (Select('cIncasariBanca2'))
*** Verific pe ANAF starea split tva la data curenta *** Verific pe ANAF starea split tva la data curenta
*!* 31.07.2026 marius.mutu: ordine explicita MASA (CACHE,ANAF) - corect pentru data trecuta pdDataI
SELECT distinct cod_fiscal FROM cFacturiTVA INTO CURSOR cCodFiscalTemp SELECT distinct cod_fiscal FROM cFacturiTVA INTO CURSOR cCodFiscalTemp
loVerificareANAF = CREATEOBJECT("VerificareANAF") loVerificareANAF = CREATEOBJECT("VerificareANAF")
loVerificareANAF.VerificaListaCIF("cCodFiscalTemp", m.pdDataI, "crsANAF") loVerificareANAF.VerificaListaCIF("cCodFiscalTemp", m.pdDataI, "crsANAF", "MASA")
USE IN (SELECT('cCodFiscalTemp')) USE IN (SELECT('cCodFiscalTemp'))
IF USED("crsAnaf") IF USED("crsAnaf")
*!* crsANAF (cui N(13), data D, denumire V(100), firma V(100), adresa C(244), scpTVA L, data_inceput_ScpTVA D, data_sfarsit_ScpTVA D, data_anul_imp_ScpTVA D, mesaj_ScpTVA C(244), ; *!* crsANAF (cui N(13), data D, denumire V(100), firma V(100), adresa C(244), scpTVA L, data_inceput_ScpTVA D, data_sfarsit_ScpTVA D, data_anul_imp_ScpTVA D, mesaj_ScpTVA C(244), ;
@@ -2308,9 +2309,10 @@ select *
Use In (Select('cIncasariBanca2')) Use In (Select('cIncasariBanca2'))
*** Verific pe ANAF starea split tva la data curenta *** Verific pe ANAF starea split tva la data curenta
*!* 31.07.2026 marius.mutu: ordine explicita UNIC (ANAF intai) - starea de azi, cache-ul ramane plasa de siguranta
SELECT distinct cod_fiscal FROM cFacturiTVA INTO CURSOR cCodFiscalTemp SELECT distinct cod_fiscal FROM cFacturiTVA INTO CURSOR cCodFiscalTemp
loVerificareANAF = CREATEOBJECT("VerificareANAF") loVerificareANAF = CREATEOBJECT("VerificareANAF")
loVerificareANAF.VerificaListaCIF("cCodFiscalTemp", Date(), "crsANAF") loVerificareANAF.VerificaListaCIF("cCodFiscalTemp", Date(), "crsANAF", "UNIC")
USE IN (SELECT('cCodFiscalTemp')) USE IN (SELECT('cCodFiscalTemp'))
IF USED("crsAnaf") IF USED("crsAnaf")
*!* crsANAF (cui N(13), data D, denumire V(100), firma V(100), adresa C(244), scpTVA L, data_inceput_ScpTVA D, data_sfarsit_ScpTVA D, data_anul_imp_ScpTVA D, mesaj_ScpTVA C(244), ; *!* crsANAF (cui N(13), data D, denumire V(100), firma V(100), adresa C(244), scpTVA L, data_inceput_ScpTVA D, data_sfarsit_ScpTVA D, data_anul_imp_ScpTVA D, mesaj_ScpTVA C(244), ;

View File

@@ -97,7 +97,8 @@ Sursa: `docs/design-alegere-partener-anaf.md`, REVIZIA 4 (implementata doar nive
4,00 s cu SetTimeouts(2000,2000,3000,3000); WinHTTP asincron `Send()` 0,009 s, 4,00 s cu SetTimeouts(2000,2000,3000,3000); WinHTTP asincron `Send()` 0,009 s,
`WaitForResponse(0)` 0 s. Ramane nemasurat comportamentul la rafale (de la al catelea 429). `WaitForResponse(0)` 0 s. Ramane nemasurat comportamentul la rafale (de la al catelea 429).
## P4 — Contract 404 pe drumul batch ANAF (D406 si sincronizari) ## P4 — Contract 404 pe drumul batch ANAF (D406 si sincronizari) — PRELUAT
Preluat 31.07.2026, povestea S5 din transa `docs/contract-cache-anaf.md` (`docs/diff-S5-contract-404-batch.md`).
- **Ce:** `validare.prg:1827` citeste corpul raspunsului doar pe `Status = 200`, la fel cum - **Ce:** `validare.prg:1827` citeste corpul raspunsului doar pe `Status = 200`, la fel cum
facea si wrapper-ul single-CUI. Pe loturi, un CUI inexistent si o cadere de serviciu ajung facea si wrapper-ul single-CUI. Pe loturi, un CUI inexistent si o cadere de serviciu ajung
la utilizator ca acelasi lucru ("nu s-a putut verifica"). la utilizator ca acelasi lucru ("nu s-a putut verifica").
@@ -129,3 +130,98 @@ Sursa: `docs/design-alegere-partener-anaf.md`, REVIZIA 4 (implementata doar nive
- **Conditie de intrare:** reclamatii pe parteneri externi marcati rosu, vizibile in logul de - **Conditie de intrare:** reclamatii pe parteneri externi marcati rosu, vizibile in logul de
discordante (`anaf_verif_cautare`). discordante (`anaf_verif_cautare`).
- **Efort:** M. **Depinde de:** masuratoarea lantului scurt. - **Efort:** M. **Depinde de:** masuratoarea lantului scurt.
## Amanari review /autoplan — cache ANAF pe ISTORIC_CODURI_FISCALE (29.07.2026)
Sursa: `docs/design-cache-anaf-istoric-coduri-fiscale.md`, sectiunea GSTACK REVIEW REPORT.
## P2 — Cascada de ferestre modale la verificarea in masa cu ANAF cazut
- **Ce:** `AMESSAGEBOX` este apelat in interiorul buclei pe grupuri din
`ANAF_SincronWebService_PlatitorTva` (`COMUN\programe\validare.prg:1968`, `:1970`, `:1976`,
`:1993`, `:1996`). La 3000 de parteneri = 30 de grupuri, deci pana la 30 de ferestre modale
de inchis manual la o singura rulare de D406.
- **De ce:** cu ANAF cazut, plasa de siguranta introdusa de proiectarea din 29.07 lucreaza in
spatele acestui zid de modale — castigul e invizibil pentru utilizator. Probabil mai valoros
decat cache-ul insusi.
- **Fix:** un singur mesaj la sfarsitul rularii (numar de grupuri esuate), nu unul per grup.
- **De ce nu acum:** atinge interpretarea raspunsului pe traseul in masa (acelasi cod ca P4 de
mai sus), deci cere runda proprie de teste pe declaratie.
- **Efort:** S-M. **Depinde de:** mock-ul pe calea batch (T1 din review).
## P3 — Bucla O(n^2) la imperecherea rezultatului ANAF cu lista de parteneri
- **Ce:** `COMUN\clase\overificari.vc2:2722` face `LOCATE FOR ...` liniar in interiorul unui
`SCAN` peste cursorul de raspuns ANAF. Costul creste cu patratul numarului de parteneri.
- **De ce:** tranșa de cache adauga peste bucla un apel de procedura Oracle per cod, deci
ambele cresc pe acelasi traseu.
- **Conditie de intrare:** masuratoarea ceruta oricum la E4, pe un lot de ~500 de coduri.
Daca timpul e acceptabil, nu se atinge.
- **Efort:** M. **Depinde de:** masuratoarea de la E4.
## P3 — Parsarea sarita cand primul rezultat nu are `dcod_judet`
- **Ce:** `COMUN\programe\validare.prg:1986-1994` — daca
`found_vfpsafe_[1].adresa_domiciliu_fiscal.dcod_judet` lipseste (cazul unui lot in care toate
codurile sunt `notFound`, deci `found` e gol), se afiseaza fereastra de eroare "Serviciul web
ANAF intors mesaj de eroare" si nu se parseaza nimic, desi raspunsul e valid.
- **De ce:** face ca un lot legitim de coduri inexistente sa arate ca o defectiune de serviciu.
- **Efort:** S. **Depinde de:** acelasi contract 404 pe calea batch (P4 de mai sus).
## P3 — `DATATVAMFIN` ramane text
- **Ce:** `VARCHAR2(30)` din 2012, afisat direct la `COMUN\programe\oproceduri_comune.prg:4783`.
Noile coloane de interval il fac redundant.
- **De ce nu acum:** decizia explicita a proiectarii din 29.07 (Intrebarea deschisa 2).
- **Efort:** S. **Depinde de:** livrarea coloanelor de interval.
## Amanari transa cache ANAF — completare (01.08.2026)
Sursa: `docs/diff-TRANSA-cache-anaf.md`, `docs/handoff_cache_anaf.md`.
## P1 — Rulare reala prin `PACK_UPDATE` pe TEST, inainte de prima livrare (decizie de EXECUTIE)
- **Ce s-a facut deja:** cele trei scripturi ale transei (`co_2026_07_30_02_RTVAI_PACK_ROARTVAI.sql`,
`co_2026_07_31_01_COMUN_ISTORIC_CF.sql`, `ff_2026_07_31_01_COMUN_ISTORIC_CF.sql`) figurau
"aplicate" in tabela `versiune` din rulari manuale sqlplus, desi coada reala `UPD_DATABASE` nu
avea niciun rand pentru ele. **Randurile s-au curatat** (`CONTAFIN_ORACLE` -9, `MARIUSM_AUTO` -7,
`ACN` -1, zero randuri ramase pentru cele trei scripturi) si **toate trei s-au dovedit
re-rulabile** (DDL gardat, inserturi `where not exists`, pachete `CREATE OR REPLACE`) — nu mai
e nicio decizie tehnica de luat.
- **Ce ramane:** doar **executia** propriu-zisa prin `PACK_UPDATE`, netrasa inca.
`SCRIPTURI_CLAR` mai contine scripturi straine de transa, neaplicate — daca motorul ia tot ce
gaseste pe disc, ar rula si munca in lucru a altcuiva pe un server de test partajat. Banda Oracle
stabileste pe sursa daca fluxul se poate limita la cele trei fisiere ale transei.
- **Efort:** S. **Depinde de:** decizia lui Marius de a executa `PACK_UPDATE` pe TEST (nimeni n-a
apasat butonul inca); detaliu complet `docs\audit-oracle-final.md`.
## P3 — Export Excel din verificarea in masa (D406/D394) nu duce mai departe provenienta cache
- **Ce:** `Programe\orapoarte.prg` (`Copy To ... Type Xl5`) nu adauga `sursa`/`data_sursa` in
fisierul exportat — un fisier trimis mai departe nu arata ca o parte din verdicte vin din cache,
nu dintr-un raspuns proaspat ANAF.
- **De ce nu acum:** cursoarele exportate (`cFacturiTVA` si perechea de la a doua raportare) ar
cere o coloana noua, iar `ALTER TABLE ADD COLUMN` pica pe cursor liber cu nume de camp peste 10
caractere (`platitortva` are 11) — ar cere rematerializarea cursorului in doua situri de
raportare, cu schimbarea formatului unui fisier care ajunge la client. Amanat explicit de
Marius, 01.08.2026.
- **Efort:** M. **Depinde de:** decizie separata daca merita rematerializarea cursoarelor.
## P2 — Clarificare cu ANAF: marginea perioadelor scpTVA/splittva/inactiv
- **Ce:** cache-ul ANAF (`ISTORIC_CODURI_FISCALE`) foloseste conventie inclusiva la sfarsitul
intervalelor `SCPTVA`/`SPLITTVA`/`INACTIV` (spre deosebire de `TVAINCASARE`, aliniat 01.08.2026
la conventia exclusiva a RTVAI). Nu exista ground truth local (registru echivalent
`rtvai_istoric`) pentru aceste trei campuri.
- **De ce:** risc de verdicte gresite cu o zi pe declaratii D394/D406 la marginea perioadelor,
acelasi tipar de defect confirmat pe `tvaincasare` (vezi `docs\handoff_cache_anaf.md`,
sectiunea A-ter).
- **Efort:** S (o intrebare catre ANAF) -> M (aplicarea raspunsului in cod, daca schimba
conventia). **Depinde de:** raspunsul ANAF.
## P3 — Test UI pe gridul de verificare parteneri (coloana de provenienta cache)
- **Ce:** confirmare vizuala (paint real, nu doar `EVALUATE` pe `ControlSource`) ca noua coloana
de provenienta (`sursa`/`data_sursa`, S8) se afiseaza corect in gridul de verificare.
- **De ce nu acum:** cere write-back `.vc2` pe `overificari.vc2`, deci dupa aprobarea lui Marius
pe diff.
- **Efort:** S. **Depinde de:** aprobarea write-back-ului `.vc2` al transei cache ANAF.
## Curatenie mediu — randuri orfane in tabela `versiune` (MARIUSM_AUTO)
- **Ce:** doua randuri `co_2026_07_30_01_COMUN_ISTORIC_CF.sql` in `MARIUSM_AUTO.versiune`, din
testarea manuala a lui S1 dinainte de redenumirea in `ff_`.
- **De ce nu acum:** fara efect (motorul `PACK_UPDATE` dispecerizeaza dupa numele fisierului de pe
disc, nu dupa stringul din `versiune`) — curatenie de mediu de test, nu de productie.
- **Efort:** S. **Depinde de:** nimic, se poate face oricand.

View File

@@ -1,3 +1,28 @@
<!--
01/08/2026
ROACONT - 2.11.69
:nou:
Verificare coduri fiscale la ANAF (alegere partener, verificare in masa la D406/D394/registre, verificare cod fiscal din meniu). Raspunsurile primite se memoreaza si se refolosesc cateva zile: verificarea in masa e mult mai rapida si merge si atunci cand serviciul ANAF nu raspunde.
:modificare:
Se vede de unde vine fiecare verdict: "ANAF" (raspuns proaspat de la ANAF) sau "CACHE <data>" (din memorie, cu data ultimei verificari reale la ANAF); "CACHE <data> (ANAF indisponibil)" cand s-a folosit memoria pentru ca ANAF nu a raspuns. La verificarea in masa, pe ultima coloana din lista, "Provenienta"; la alegerea partenerului si la verificarea unui cod fiscal, in fereastra cu datele partenerului.
:eroare:
Verificare stare TVA la incasare la o data din trecut. Ultima zi a unei perioade de TVA la incasare deja incheiate era raportata gresit ca fiind inca activa.
-->
<!--
30/07/2026
ROACONT - 2.11.68
:modificare:
D406. Se asteapta 2 secunde suplimentare fisierul de erori generat de DUKIntegrator pentru ca fisierul sa fie complet.
:eroare:
S-a corectat o eroare la verificare coduri fiscale daca nu exista internet.
-->
<!-- <!--
28/07/2026 28/07/2026
ROACONT - 2.11.67 ROACONT - 2.11.67

View File

@@ -25,7 +25,7 @@ _LegalTrademark = ""
_ProductName = "ROA - Financiar Contabilitate" _ProductName = "ROA - Financiar Contabilitate"
_MajorVer = "2" _MajorVer = "2"
_MinorVer = "11" _MinorVer = "11"
_Revision = "67" _Revision = "68"
_LanguageID = "Romana" _LanguageID = "Romana"
_AutoIncrement = "0" _AutoIncrement = "0"
*</DevInfo> *</DevInfo>

View File

@@ -1 +1 @@
2026_07_29_01 2026_08_01_02