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))
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,9 +2188,11 @@ Define Class VerificareANAF As Custom
laCoduri[lnIdx] = loCol
ENDIF
Endscan && tcCursorListaCIF
IF m.lnIdx > 0
Dimension laCoduri(lnIdx)
*!* 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')