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 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JCzVWfqscv1xyo5uvJiWiW
This commit is contained in:
2026-08-02 08:27:28 +03:00
parent 5c8a201438
commit 7abec07549

View File

@@ -1946,7 +1946,8 @@ Define Class VerificareANAF As Custom
Use In (Select(m.lcCursorRamas)) Use In (Select(m.lcCursorRamas))
Create Cursor (m.lcCursorRamas) (cod_fiscal c(30) Null, data D null) Create Cursor (m.lcCursorRamas) (cod_fiscal c(30) Null, data D null)
Select (m.lcAliasNorm) 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 lnCuiCurent = cui_n
lcCodFiscalCurent = cod_fiscal lcCodFiscalCurent = cod_fiscal
ldDataCurenta = data ldDataCurenta = data
@@ -2062,7 +2063,7 @@ Define Class VerificareANAF As Custom
Function NormalizeazaCoduriCursor Function NormalizeazaCoduriCursor
Lparameters tcCursorListaCIF, tdData 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() lcSelect = Select()
lcAliasNorm = 'crsCoduriNormalizate' lcAliasNorm = 'crsCoduriNormalizate'
Use In (Select(m.lcAliasNorm)) Use In (Select(m.lcAliasNorm))
@@ -2080,8 +2081,13 @@ Define Class VerificareANAF As Custom
lcCodFiscalFRO = Strtran(m.lcCodFiscal, m.lcCodTara, '') lcCodFiscalFRO = Strtran(m.lcCodFiscal, m.lcCodTara, '')
lcCodFiscalFRO = Strtran(Strtran(Strtran(m.lcCodFiscalFRO, ' ', ''), 'RO', ''), 'R', '') lcCodFiscalFRO = Strtran(Strtran(Strtran(m.lcCodFiscalFRO, ' ', ''), 'RO', ''), 'R', '')
ldDataRand = Iif(m.llDataCursor And !Empty(Nvl(data, {})), Nvl(data, {}), m.ldDataImplicit) ldDataRand = Iif(m.llDataCursor And !Empty(Nvl(data, {})), Nvl(data, {}), m.ldDataImplicit)
Insert Into (m.lcAliasNorm) (cod_fiscal, data, cui_n) Values ; *!* 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
(m.lcCodFiscal, m.ldDataRand, Iif(m.lcCodTara = 'RO' And Isdigit(m.lcCodFiscalFRO) And Len(m.lcCodFiscalFRO) <= 10, Int(Val(m.lcCodFiscalFRO)), 0)) 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) Select (m.tcCursorListaCIF)
Endscan Endscan
@@ -2173,7 +2179,8 @@ Define Class VerificareANAF As Custom
lcCodFiscalFRO = Strtran(m.lcCodFiscal, m.lcCodTara, '') lcCodFiscalFRO = Strtran(m.lcCodFiscal, m.lcCodTara, '')
lcCodFiscalFRO = Strtran(Strtran(Strtran(m.lcCodFiscalFRO, ' ', ''), 'RO', ''), 'R', '') 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") loCol = Createobject("empty")
AddProperty(loCol, "cui", Int(Val(m.lcCodFiscalFRO))) AddProperty(loCol, "cui", Int(Val(m.lcCodFiscalFRO)))
AddProperty(loCol, "data", m.lcDataFormatted) AddProperty(loCol, "data", m.lcDataFormatted)
@@ -2181,10 +2188,12 @@ Define Class VerificareANAF As Custom
laCoduri[lnIdx] = loCol laCoduri[lnIdx] = loCol
ENDIF ENDIF
Endscan && tcCursorListaCIF Endscan && tcCursorListaCIF
IF m.lnIdx > 0 *!* 02.08.2026 marius.mutu: grup fara niciun CUI valid - nu se mai trimite cerere goala la ANAF
Dimension laCoduri(lnIdx) IF m.lnIdx = 0
ENDIF LOOP
ENDIF
Dimension laCoduri(lnIdx)
lcSend = nfjsoncreate(@laCoduri) lcSend = nfjsoncreate(@laCoduri)
goLog.Log('lcSend: ' + m.lcSend, 'ANAF_SincronWebService_PlatitorTva') goLog.Log('lcSend: ' + m.lcSend, 'ANAF_SincronWebService_PlatitorTva')