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:
@@ -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')
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user