From 7abec075492629a5166b1533702efcfe0c9fe4e1 Mon Sep 17 00:00:00 2001 From: Marius Mutu Date: Sun, 2 Aug 2026 08:27:28 +0300 Subject: [PATCH] Verificare ANAF: la serviciul web ajung doar CIF-uri valide (SVN r17939) Lotul ramas pentru ANAF se construia cu un Scan fara filtru pe cui_n, deci codurile care nu sunt CUI RO valid (cod gol, alta tara, peste 10 cifre) erau retrimise la fiecare rulare - fereastra arata "Verific codurile fiscale 1..16 / 16" desi cele 903 coduri reale veneau din cache, iar cererea plecata spre ANAF era goala: {"cui":0} -> 404. - lotul ramas: Scan For cui_n <> 0. - NormalizeazaCoduriCursor: cui_n se completeaza doar daca trece si algoritmul cifrei de control (VerificareCod.VALIDARE_CIF), nu doar tara RO / numai cifre / maxim 10 caractere; plus Val() <> 0, ca un cod de zerouri sa nu ajunga la ANAF drept cui:0. VALIDARE_CIF nu s-a atins, e doar apelata. - ANAF_SincronWebService_PlatitorTva: acelasi filtru la compunerea cererii (cele doua trebuie sa ramana identice) si LOOP cand grupul nu are niciun CUI valid, deci fara cerere HTTP goala. Verificat: compilare curata; test headless pe NormalizeazaCoduriCursor (RO7320118, 7320118, RO25501, "RO 1879855" trec; 7320119 cu cifra de control gresita, 0, cod gol, BG123456789, CNP de 13 cifre sunt excluse). Fara fals-pozitive pe date reale: toate cele 903 coduri confirmate de ANAF pe ROMFAST trec algoritmul. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01JCzVWfqscv1xyo5uvJiWiW --- programe/validare.prg | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/programe/validare.prg b/programe/validare.prg index e061019..cf8d052 100644 --- a/programe/validare.prg +++ b/programe/validare.prg @@ -1946,7 +1946,8 @@ Define Class VerificareANAF As Custom Use In (Select(m.lcCursorRamas)) Create Cursor (m.lcCursorRamas) (cod_fiscal c(30) Null, data D null) Select (m.lcAliasNorm) - Scan + *!* 02.08.2026 marius.mutu: la ANAF ajung doar codurile care sunt CUI RO valid - restul nu pot fi nici in cache, nici verificate + Scan For cui_n <> 0 lnCuiCurent = cui_n lcCodFiscalCurent = cod_fiscal ldDataCurenta = data @@ -2062,7 +2063,7 @@ Define Class VerificareANAF As Custom Function NormalizeazaCoduriCursor Lparameters tcCursorListaCIF, tdData - Local loVerificareCod As "VerificareCod", lcCodFiscal, lcCodTara, lcCodFiscalFRO, lcAliasNorm, lcSelect, llDataCursor, ldDataRand, ldDataImplicit + Local loVerificareCod As "VerificareCod", lcCodFiscal, lcCodTara, lcCodFiscalFRO, lcAliasNorm, lcSelect, llDataCursor, ldDataRand, ldDataImplicit, lnCuiNorm lcSelect = Select() lcAliasNorm = 'crsCoduriNormalizate' Use In (Select(m.lcAliasNorm)) @@ -2080,8 +2081,13 @@ Define Class VerificareANAF As Custom lcCodFiscalFRO = Strtran(m.lcCodFiscal, m.lcCodTara, '') lcCodFiscalFRO = Strtran(Strtran(Strtran(m.lcCodFiscalFRO, ' ', ''), 'RO', ''), 'R', '') ldDataRand = Iif(m.llDataCursor And !Empty(Nvl(data, {})), Nvl(data, {}), m.ldDataImplicit) - Insert Into (m.lcAliasNorm) (cod_fiscal, data, cui_n) Values ; - (m.lcCodFiscal, m.ldDataRand, Iif(m.lcCodTara = 'RO' And Isdigit(m.lcCodFiscalFRO) And Len(m.lcCodFiscalFRO) <= 10, Int(Val(m.lcCodFiscalFRO)), 0)) + *!* 02.08.2026 marius.mutu: pe langa formatul de baza, si cifra de control (VALIDARE_CIF) - un CIF invalid nu are ce cauta nici in cache, nici la ANAF + lnCuiNorm = 0 + If m.lcCodTara = 'RO' And Isdigit(m.lcCodFiscalFRO) And Len(m.lcCodFiscalFRO) <= 10 ; + And Val(m.lcCodFiscalFRO) <> 0 And loVerificareCod.VALIDARE_CIF(m.lcCodFiscalFRO) + lnCuiNorm = Int(Val(m.lcCodFiscalFRO)) + Endif + Insert Into (m.lcAliasNorm) (cod_fiscal, data, cui_n) Values (m.lcCodFiscal, m.ldDataRand, m.lnCuiNorm) Select (m.tcCursorListaCIF) Endscan @@ -2173,7 +2179,8 @@ Define Class VerificareANAF As Custom lcCodFiscalFRO = Strtran(m.lcCodFiscal, m.lcCodTara, '') lcCodFiscalFRO = Strtran(Strtran(Strtran(m.lcCodFiscalFRO, ' ', ''), 'RO', ''), 'R', '') - If m.llRO AND (Isdigit(m.lcCodFiscalFRO) and Len(m.lcCodFiscalFRO) <= 10) + *!* 02.08.2026 marius.mutu: acelasi filtru ca in NormalizeazaCoduriCursor - format de baza plus cifra de control (VALIDARE_CIF) + If m.llRO AND (Isdigit(m.lcCodFiscalFRO) and Len(m.lcCodFiscalFRO) <= 10 and Val(m.lcCodFiscalFRO) <> 0 and loVerificareCod.VALIDARE_CIF(m.lcCodFiscalFRO)) loCol = Createobject("empty") AddProperty(loCol, "cui", Int(Val(m.lcCodFiscalFRO))) AddProperty(loCol, "data", m.lcDataFormatted) @@ -2181,10 +2188,12 @@ Define Class VerificareANAF As Custom laCoduri[lnIdx] = loCol ENDIF Endscan && tcCursorListaCIF - IF m.lnIdx > 0 - Dimension laCoduri(lnIdx) - ENDIF - + *!* 02.08.2026 marius.mutu: grup fara niciun CUI valid - nu se mai trimite cerere goala la ANAF + IF m.lnIdx = 0 + LOOP + ENDIF + Dimension laCoduri(lnIdx) + lcSend = nfjsoncreate(@laCoduri) goLog.Log('lcSend: ' + m.lcSend, 'ANAF_SincronWebService_PlatitorTva')