Files
comun/utile/Teste/partener_anaf/sonda_anaf_single.prg
Marius Mutu 859e67e874 Cache ANAF pe ISTORIC_CODURI_FISCALE: verificare din memorie, plasa la tacere ANAF
Verificarile de partener nu mai depind exclusiv de raspunsul ANAF: se citeste
intai cache-ul din ISTORIC_CODURI_FISCALE (mutat in CONTAFIN_ORACLE), cu
provenienta afisata pe ecrane (sursa / data_sursa) si cu plasa de siguranta
cand ANAF tace. Ordinea cache/ANAF e configurabila; cache-ul expira.

- programe/validare.prg: verificare single si pe loturi peste cache, contract
  404 separat de caderea de serviciu, expirarea cache-ului, corectii la
  verdictul pe firma si la etichetarea CACHE_INDISP.
- programe/ocautare.prg: plasa de siguranta si banda de provenienta la cautarea
  de partener.
- programe/oproceduri_comune.prg: VERIFICA_RTVAI_DATA citeste si cache-ul.
- clase/overificari.vc2: propagarea provenientei in interfata.
- utile/Teste/: harness-uri de testare headless - echivalenta cache/ANAF pe 200
  de coduri reale, marginile pe inactiv si TVA la incasare, mock batch ANAF,
  baseline D394 si sondele de diagnostic ANAF.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JCzVWfqscv1xyo5uvJiWiW
2026-08-02 01:33:18 +03:00

150 lines
6.6 KiB
Plaintext

* sonda_anaf_single.prg
* Diagnostic (NU repara nimic): pe schema MARIUSM_AUTO, ecranul de cautare partener arata
* pentru toate codurile fiscale banda "ANAF nu a raspuns - verificare sarita"
* (COMUN\programe\ocautare.prg:801), desi ANAF raspunde OK 200 la curl direct pe aceeasi masina.
* Scopul scriptului: izoleaza pasul care arunca exceptie in ANAF_VerificaCuiSingle /
* ANAF_CreeazaCerereANAF (validare.prg), pas cu pas, cu Try/Catch separat pe fiecare bucata.
*
* Rulare headless (nu tine VFP IDE sau roacont.exe deschis):
* & "C:\Program Files (x86)\Microsoft Visual FoxPro 9\vfp9.exe" -A -T ;
* "D:\ROA\ROACONT\COMUN\utile\Teste\partener_anaf\sonda_anaf_single.prg"
* Rezultatul se scrie in %TEMP%\sonda_anaf_single.txt
PUBLIC gcLogFile
gcLogFile = ADDBS(SYS(2023)) + 'sonda_anaf_single.txt'
SET SAFETY OFF
SET TALK OFF
STRTOFILE('START ' + TTOC(DATETIME()) + CHR(13)+CHR(10), gcLogFile)
DO SondaLog WITH 'SET(SAFETY)=' + SET('SAFETY') + ' SET(RESOURCE)=' + SET('RESOURCE')
ON ERROR DO SondaErr WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
ON SHUTDOWN QUIT
DO D:\ROA\ROACONT\COMUN\utile\Teste\test_init_env_auto.prg WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
IF gnHandle <= 0
DO SondaLog WITH 'EROARE: conectare Oracle esuata, gnHandle=' + TRANSFORM(gnHandle)
DO SondaLog WITH 'REZULTAT: NEDETERMINAT'
QUIT
ENDIF
DO SondaLog WITH 'mediu OK, gnAn=' + TRANSFORM(gnAn) + ' luna=' + TRANSFORM(gnLuna) + ' gcS=' + gcS
* ===== pas 0: instantiere VerificareANAF, ca in ANAF_VerificaCuiSingle - incarca =====
* ===== nfjsonread.prg / nfjsoncreate.prg ca proceduri (VerificareANAF.Init) =====
LOCAL loVerifANAF, loEx1 As Exception
TRY
loVerifANAF = CREATEOBJECT('VerificareANAF')
DO SondaLog WITH 'PAS0 CREATEOBJECT(VerificareANAF): OK, nfjsonread/nfjsoncreate incarcate'
CATCH TO loEx1
DO SondaLog WITH 'PAS0 CREATEOBJECT(VerificareANAF): EXCEPTIE ' + loEx1.Message + ' [' + loEx1.Procedure + ':' + TRANSFORM(loEx1.LineNo) + ']'
ENDTRY
* ===== pas A: doar Createobject('winHTTP.winHTTPrequest.5.1') =====
LOCAL loHttpA, loEx2 As Exception
TRY
loHttpA = CREATEOBJECT('winHTTP.winHTTPrequest.5.1')
DO SondaLog WITH 'PAS A winHTTP.winHTTPrequest.5.1: OK, VARTYPE=' + VARTYPE(loHttpA)
CATCH TO loEx2
DO SondaLog WITH 'PAS A winHTTP.winHTTPrequest.5.1: EXCEPTIE ' + loEx2.Message + ' [' + loEx2.Procedure + ':' + TRANSFORM(loEx2.LineNo) + ']'
ENDTRY
* ===== pas B: nfjsoncreate pe un array cu un obiect (cui + data), ca in ANAF_CreeazaCerereANAF =====
LOCAL loColB As "empty", laCoduriB[1], lcSendB, loEx3 As Exception
TRY
loColB = CREATEOBJECT('empty')
ADDPROPERTY(loColB, 'cui', 1879855)
ADDPROPERTY(loColB, 'data', '2026-08-01')
laCoduriB[1] = loColB
lcSendB = nfjsoncreate(@laCoduriB)
DO SondaLog WITH 'PAS B nfjsoncreate: OK, rezultat=' + TRANSFORM(lcSendB)
CATCH TO loEx3
DO SondaLog WITH 'PAS B nfjsoncreate: EXCEPTIE ' + loEx3.Message + ' [' + loEx3.Procedure + ':' + TRANSFORM(loEx3.LineNo) + ']'
ENDTRY
* ===== pas C: ANAF_CreeazaCerereANAF(1879855, Date(), .F.) direct, sincron =====
LOCAL loHttpC, loEx4 As Exception
TRY
loHttpC = ANAF_CreeazaCerereANAF(1879855, DATE(), .F.)
IF VARTYPE(loHttpC) = 'O'
DO SondaLog WITH 'PAS C ANAF_CreeazaCerereANAF: OK, Status=' + TRANSFORM(loHttpC.Status) + ' responseText(200)=' + LEFT(ALLTRIM(loHttpC.responseText), 200)
ELSE
DO SondaLog WITH 'PAS C ANAF_CreeazaCerereANAF: OK dar VARTYPE=' + VARTYPE(loHttpC) + ' (nu e obiect)'
ENDIF
CATCH TO loEx4
DO SondaLog WITH 'PAS C ANAF_CreeazaCerereANAF: EXCEPTIE ' + loEx4.Message + ' [' + loEx4.Procedure + ':' + TRANSFORM(loEx4.LineNo) + ']'
ENDTRY
* ===== pas E: nfjsonread + ParseJsonANAFv8 direct pe raspunsul de la pasul C, izolat =====
LOCAL loParsedE, loEx5 As Exception
IF VARTYPE(loHttpC) = 'O'
TRY
loParsedE = nfjsonread(ALLTRIM(loHttpC.responseText))
DO SondaLog WITH 'PAS E nfjsonread: OK, TYPE=' + TYPE('loParsedE') + ' PEMSTATUS(found_vfpsafe_)=' + TRANSFORM(PEMSTATUS(loParsedE, 'found_vfpsafe_', 5))
loVerifANAF.ParseJsonANAFv8(loParsedE, 'crsDiagE')
DO SondaLog WITH 'PAS E ParseJsonANAFv8: OK, RECCOUNT(crsDiagE)=' + TRANSFORM(RECCOUNT('crsDiagE'))
IF USED('crsDiagE') AND RECCOUNT('crsDiagE') > 0
SELECT crsDiagE
GO TOP
DO SondaLog WITH 'PAS E primul rand: cui=' + TRANSFORM(NVL(cui, 0)) + ' denumire=' + NVL(denumire, '')
ENDIF
CATCH TO loEx5
DO SondaLog WITH 'PAS E nfjsonread/ParseJsonANAFv8: EXCEPTIE ' + loEx5.Message + ' [' + loEx5.Procedure + ':' + TRANSFORM(loEx5.LineNo) + ']'
ENDTRY
ELSE
DO SondaLog WITH 'PAS E: sarit, loHttpC nu e obiect (PAS C a esuat)'
ENDIF
* ===== pas F: exact linia "Use In (Select(alias))" din ANAF_VerificaCuiSingle, pe un alias =====
* ===== care NU e deschis (ca la primul apel din sesiune) =====
LOCAL lcAliasF, lnSelF, loEx6 As Exception
lcAliasF = "crsANAFSingleTemp"
lnSelF = SELECT(m.lcAliasF)
DO SondaLog WITH 'PAS F SELECT(' + m.lcAliasF + ')=' + TRANSFORM(lnSelF) + ' inainte de orice Use'
TRY
Use In (SELECT(m.lcAliasF))
DO SondaLog WITH 'PAS F Use In (Select(alias)) pe alias neschis: OK'
CATCH TO loEx6
DO SondaLog WITH 'PAS F Use In (Select(alias)) pe alias neschis: EXCEPTIE ' + loEx6.Message + ' [' + loEx6.Procedure + ':' + TRANSFORM(loEx6.LineNo) + ']'
ENDTRY
* ===== pas D: fluxul real, ANAF_VerificaCuiSingle, pentru cele 3 coduri fiscale =====
LOCAL lcCui, loResult, llNegasit, lcClasaEsec, lnI
LOCAL ARRAY laCui[3]
laCui[1] = '1879855'
laCui[2] = '12751583'
laCui[3] = '11980333'
FOR lnI = 1 TO 3
lcCui = laCui[lnI]
llNegasit = .F.
lcClasaEsec = ''
loResult = ANAF_VerificaCuiSingle(m.lcCui, DATE(), @llNegasit, @lcClasaEsec)
IF VARTYPE(loResult) = 'O'
DO SondaLog WITH 'PAS D CUI=' + m.lcCui + ' -> OBIECT, denumire=' + NVL(loResult.denumire, '') + ' tlNegasit=' + TRANSFORM(llNegasit) + ' tcClasaEsec=' + m.lcClasaEsec
ELSE
DO SondaLog WITH 'PAS D CUI=' + m.lcCui + ' -> VARTYPE=' + VARTYPE(loResult) + ' tlNegasit=' + TRANSFORM(llNegasit) + ' tcClasaEsec=' + m.lcClasaEsec
ENDIF
IF USED('crsANAFSingleTemp')
LOCAL lnSelSaveD
lnSelSaveD = SELECT()
SELECT crsANAFSingleTemp
DO SondaLog WITH 'PAS D dupa CUI=' + m.lcCui + ': crsANAFSingleTemp deschis, RECCOUNT=' + TRANSFORM(RECCOUNT()) + ' RECNO=' + TRANSFORM(RECNO()) + ' EOF=' + TRANSFORM(EOF()) + ' denumire=[' + NVL(denumire, '<NULL>') + ']'
SELECT (m.lnSelSaveD)
ELSE
DO SondaLog WITH 'PAS D dupa CUI=' + m.lcCui + ': crsANAFSingleTemp NU e deschis'
ENDIF
ENDFOR
DO SondaLog WITH 'REZULTAT: TERMINAT ' + TTOC(DATETIME())
QUIT
PROCEDURE SondaErr
LPARAMETERS tnErr, tcMsg, tcProg, tnLine
DO SondaLog WITH 'ON ERROR ' + TRANSFORM(tnErr) + ' [' + tcProg + ':' + TRANSFORM(tnLine) + '] ' + tcMsg
ENDPROC
PROCEDURE SondaLog
LPARAMETERS tcMsg
LOCAL lcL
lcL = FILETOSTR(gcLogFile)
STRTOFILE(lcL + tcMsg + CHR(13)+CHR(10), gcLogFile)
ENDPROC