diff --git a/utile/Teste/storno/mock_anaf_server_storno.prg b/utile/Teste/storno/mock_anaf_server_storno.prg
index 8b60952..82afff1 100644
--- a/utile/Teste/storno/mock_anaf_server_storno.prg
+++ b/utile/Teste/storno/mock_anaf_server_storno.prg
@@ -32,12 +32,28 @@ DEFINE CLASS MockAnafServerStorno AS Custom
LOCAL loReturn
This.RegMock('TrimiteFacturaXML', tcFile, TRANSFORM(tlB2C))
loReturn = CREATEOBJECT('Empty')
- ADDPROPERTY(loReturn, 'lSucces', .T.)
- ADDPROPERTY(loReturn, 'cIdIncarcare', 'MOCK-ID-STORNO-12345')
- ADDPROPERTY(loReturn, 'cMesaj', '')
- ADDPROPERTY(loReturn, 'cResponse', '')
- ADDPROPERTY(loReturn, 'nStatus', 200)
ADDPROPERTY(loReturn, 'cFile', TRANSFORM(tcFile))
+ * gnMockTrimiteMod (test_storno_e2e.prg): 0=succes, 1=ANAF a raspuns clar cu eroare (HTTP 200), 2=eroare de retea (HTTP 0)
+ DO CASE
+ CASE TYPE('gnMockTrimiteMod') = 'N' AND gnMockTrimiteMod = 1
+ ADDPROPERTY(loReturn, 'lSucces', .T.)
+ ADDPROPERTY(loReturn, 'cIdIncarcare', '')
+ ADDPROPERTY(loReturn, 'cMesaj', 'TEST ANAF a respins incarcarea: A aparut o eroare tehnica. Cod: 1814')
+ ADDPROPERTY(loReturn, 'cResponse', '')
+ ADDPROPERTY(loReturn, 'nStatus', 200)
+ CASE TYPE('gnMockTrimiteMod') = 'N' AND gnMockTrimiteMod = 2
+ ADDPROPERTY(loReturn, 'lSucces', .F.)
+ ADDPROPERTY(loReturn, 'cIdIncarcare', '')
+ ADDPROPERTY(loReturn, 'cMesaj', 'Eroare de comunicare cu ANAF - Http Status: 0. Raspuns: ')
+ ADDPROPERTY(loReturn, 'cResponse', '')
+ ADDPROPERTY(loReturn, 'nStatus', 0)
+ OTHERWISE
+ ADDPROPERTY(loReturn, 'lSucces', .T.)
+ ADDPROPERTY(loReturn, 'cIdIncarcare', 'MOCK-ID-STORNO-12345')
+ ADDPROPERTY(loReturn, 'cMesaj', '')
+ ADDPROPERTY(loReturn, 'cResponse', '')
+ ADDPROPERTY(loReturn, 'nStatus', 200)
+ ENDCASE
RETURN loReturn
ENDPROC
diff --git a/utile/Teste/storno/test5_1814_e1.prg b/utile/Teste/storno/test5_1814_e1.prg
new file mode 100644
index 0000000..8b4c8be
--- /dev/null
+++ b/utile/Teste/storno/test5_1814_e1.prg
@@ -0,0 +1,124 @@
+* test5_1814_e1.prg
+* E1 (docs\storno_eroare_1814_diagnostic.md): retrimite pe ANAF TEST EXACT fisierul storno SSS 1156-S
+* care a primit "Cod: 1814" la Marius (19.09.2026 17:45), fara regenerare. Scop: 1814 e determinist?
+* Un singur upload. Garzi: sha1 fisier, lTest, token, CIF - inainte de TrimiteFacturaXML.
+*
+* Rulare: powershell -ExecutionPolicy Bypass -File D:\ROA\ROACONT\COMUN\utile\Teste\watchdog_vfp.ps1 -Script D:\ROA\ROACONT\COMUN\utile\Teste\storno\test5_1814_e1.prg -AutoDismiss -TimeoutSec 240
+* Iesire: test5_1814_e1_log.txt (+ test5_1814_e1_golog.txt cu liniile SendEFactura), acelasi folder
+
+SET SAFETY OFF
+SET TALK OFF
+SET DELETED ON
+SET EXACT ON
+SET CENTURY ON
+SET DATE DMY
+SET NULLDISPLAY TO ''
+CLOSE DATABASES
+
+PUBLIC gcUILog, gcDir
+gcDir = "D:\ROA\ROACONT\COMUN\utile\Teste\storno\"
+gcUILog = gcDir + "test5_1814_e1_log.txt"
+STRTOFILE("START " + TTOC(DATETIME()) + CHR(13) + CHR(10), gcUILog)
+
+ON ERROR DO PrErrLocal WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
+ON SHUTDOWN QUIT
+
+TRY
+ DO "D:\ROA\ROACONT\COMUN\utile\Teste\test_init_env_auto.prg" WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
+ IF gnHandle <= 0
+ DO PrLogLocal WITH 'FAIL: conectare Oracle esuata (gnHandle=' + TRANSFORM(gnHandle) + ')'
+ QUIT
+ ENDIF
+ DO PrLogLocal WITH 'mediu initializat, gnHandle=' + TRANSFORM(gnHandle)
+
+ * SendEFactura scrie URL-ul si raspunsul prin goLog; Log_Mesaje nu scrie daca fisierul lipseste
+ goLog.cLogFile = gcDir + "test5_1814_e1_golog.txt"
+ STRTOFILE('', goLog.cLogFile)
+
+ LOCAL lcFile, lcSha1Asteptat, lcSha1
+ lcFile = "D:\ROA\Efactura\2026_09\MARIUSM_AUTO_SUC_1_TEXT_LUNG_IN_DENUMIERA_FIRMEI_SRL\TRIMISE\storno_SSS 1156-S_1879855.xml"
+ lcSha1Asteptat = 'e14d55f8fa7824529f0f03ff1724c5c3dedb1867'
+
+ IF !FILE(lcFile)
+ DO PrLogLocal WITH 'BLOCAT: nu exista fisierul: ' + lcFile
+ QUIT
+ ENDIF
+ lcSha1 = Sha1Fisier(lcFile)
+ DO PrLogLocal WITH 'fisier=' + lcFile + ' len=' + TRANSFORM(LEN(FILETOSTR(lcFile))) + ' sha1=' + lcSha1
+ IF !(lcSha1 == lcSha1Asteptat)
+ DO PrLogLocal WITH 'BLOCAT: sha1 diferit de ' + lcSha1Asteptat + ' - fisierul a fost regenerat, opresc'
+ QUIT
+ ENDIF
+
+ LOCAL loAnaf As 'AnafeFacturaServer'
+ loAnaf = CREATEOBJECT('AnafeFacturaServer', .F., '', gcS, '')
+ loAnaf.lTest = .T.
+ loAnaf.RefreshTokenAuto()
+ DO PrLogLocal WITH 'CIF=' + loAnaf.cCodFiscal + ' lTest=' + TRANSFORM(loAnaf.lTest) + ' tokenExp=' + DTOC(loAnaf.dTokenExpdate) + ' tokenGol=' + TRANSFORM(EMPTY(loAnaf.cToken))
+
+ * garzi finale, imediat inainte de upload
+ IF VARTYPE(loAnaf.lTest) <> 'L' OR !loAnaf.lTest
+ DO PrLogLocal WITH 'BLOCAT: lTest nu e .T.'
+ QUIT
+ ENDIF
+ IF EMPTY(loAnaf.cToken) OR loAnaf.dTokenExpdate <= DATE()
+ DO PrLogLocal WITH 'BLOCAT: token gol sau expirat'
+ QUIT
+ ENDIF
+ IF !(ALLTRIM(loAnaf.cCodFiscal) == '1879855')
+ DO PrLogLocal WITH 'BLOCAT: CIF neasteptat: ' + loAnaf.cCodFiscal
+ QUIT
+ ENDIF
+ IF !FILE(lcFile) OR !(Sha1Fisier(lcFile) == lcSha1Asteptat)
+ DO PrLogLocal WITH 'BLOCAT: fisierul lipseste sau s-a schimbat chiar inainte de upload'
+ QUIT
+ ENDIF
+
+ DO PrLogLocal WITH '=== UPLOAD 1/1: storno SSS 1156-S byte-identic pe TEST ==='
+ LOCAL loRet
+ loRet = loAnaf.TrimiteFacturaXML(lcFile, .F., .F., .F., .F., .F.)
+ DO PrLogLocal WITH 'upload: lSucces=' + TRANSFORM(loRet.lSucces) + ' status=' + TRANSFORM(loRet.nStatus) + ' idIncarcare=' + ALLTRIM(NVL(loRet.cIdIncarcare,'')) + ' mesaj=[' + ALLTRIM(NVL(loRet.cMesaj,'')) + ']'
+ DO PrLogLocal WITH 'raspuns brut: ' + NVL(loRet.cResponse,'')
+ DO PrLogLocal WITH 'TOTAL: test terminat fara exceptie'
+CATCH TO loEx
+ DO PrLogLocal WITH 'EXCEPTIE: ' + loEx.Message + ' (' + TRANSFORM(loEx.LineNo) + ') ' + loEx.Procedure
+ENDTRY
+
+QUIT
+
+**********************************************************
+* sha1 prin certutil (sincron, fereastra ascunsa)
+FUNCTION Sha1Fisier
+ LPARAMETERS tcFile
+ LOCAL loSh, lcOut, lcTxt, lcHash, lnI
+ lcOut = ADDBS(SYS(2023)) + 'test5_sha1_' + SYS(2015) + '.txt'
+ loSh = CREATEOBJECT('WScript.Shell')
+ loSh.Run('cmd /c certutil -hashfile "' + tcFile + '" SHA1 > "' + lcOut + '"', 0, .T.)
+ lcHash = ''
+ IF FILE(lcOut)
+ lcTxt = FILETOSTR(lcOut)
+ DELETE FILE (lcOut)
+ FOR lnI = 1 TO GETWORDCOUNT(lcTxt, CHR(13) + CHR(10))
+ IF LEN(CHRTRAN(GETWORDNUM(lcTxt, lnI, CHR(13) + CHR(10)), ' ', '')) = 40
+ lcHash = LOWER(CHRTRAN(GETWORDNUM(lcTxt, lnI, CHR(13) + CHR(10)), ' ', ''))
+ EXIT
+ ENDIF
+ ENDFOR
+ ENDIF
+ RETURN lcHash
+ENDFUNC
+
+**********************************************************
+PROCEDURE PrLogLocal
+ LPARAMETERS tcMsg
+ LOCAL lcL
+ SET SAFETY OFF
+ lcL = IIF(FILE(gcUILog), FILETOSTR(gcUILog), '')
+ STRTOFILE(lcL + TTOC(DATETIME()) + ' ' + TRANSFORM(tcMsg) + CHR(13) + CHR(10), gcUILog)
+ENDPROC
+
+**********************************************************
+PROCEDURE PrErrLocal
+ LPARAMETERS tnError, tcMessage, tcProgram, tnLineNo
+ DO PrLogLocal WITH 'EROARE ' + TRANSFORM(tnError) + ' ' + TRANSFORM(tcMessage) + ' in ' + TRANSFORM(tcProgram) + ' linia ' + TRANSFORM(tnLineNo)
+ENDPROC
diff --git a/utile/Teste/storno/test5_1814_e2.prg b/utile/Teste/storno/test5_1814_e2.prg
new file mode 100644
index 0000000..f59ae96
--- /dev/null
+++ b/utile/Teste/storno/test5_1814_e2.prg
@@ -0,0 +1,124 @@
+* test5_1814_e2.prg
+* E2 (docs\storno_eroare_1814_diagnostic.md), DOAR daca E1 a primit din nou 1814: storno SSS 1156-S identic
+* cu fisierul din E1, minus blocul cac:BillingReference (singura diferenta). Acelasi numar, o singura variabila.
+* Un singur upload. Garzi: sha1 fisier, lTest, token, CIF - inainte de TrimiteFacturaXML.
+*
+* Rulare: powershell -ExecutionPolicy Bypass -File D:\ROA\ROACONT\COMUN\utile\Teste\watchdog_vfp.ps1 -Script D:\ROA\ROACONT\COMUN\utile\Teste\storno\test5_1814_e2.prg -AutoDismiss -TimeoutSec 240
+* Iesire: test5_1814_e2_log.txt (+ test5_1814_e2_golog.txt cu liniile SendEFactura), acelasi folder
+
+SET SAFETY OFF
+SET TALK OFF
+SET DELETED ON
+SET EXACT ON
+SET CENTURY ON
+SET DATE DMY
+SET NULLDISPLAY TO ''
+CLOSE DATABASES
+
+PUBLIC gcUILog, gcDir
+gcDir = "D:\ROA\ROACONT\COMUN\utile\Teste\storno\"
+gcUILog = gcDir + "test5_1814_e2_log.txt"
+STRTOFILE("START " + TTOC(DATETIME()) + CHR(13) + CHR(10), gcUILog)
+
+ON ERROR DO PrErrLocal WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
+ON SHUTDOWN QUIT
+
+TRY
+ DO "D:\ROA\ROACONT\COMUN\utile\Teste\test_init_env_auto.prg" WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
+ IF gnHandle <= 0
+ DO PrLogLocal WITH 'FAIL: conectare Oracle esuata (gnHandle=' + TRANSFORM(gnHandle) + ')'
+ QUIT
+ ENDIF
+ DO PrLogLocal WITH 'mediu initializat, gnHandle=' + TRANSFORM(gnHandle)
+
+ * SendEFactura scrie URL-ul si raspunsul prin goLog; Log_Mesaje nu scrie daca fisierul lipseste
+ goLog.cLogFile = gcDir + "test5_1814_e2_golog.txt"
+ STRTOFILE('', goLog.cLogFile)
+
+ LOCAL lcFile, lcSha1Asteptat, lcSha1
+ lcFile = gcDir + "out\test5_e2_storno_SSS1156-S_fara_billingref.xml"
+ lcSha1Asteptat = 'fb9b05149316c056b61f0cdbe3a2c7612f06812b'
+
+ IF !FILE(lcFile)
+ DO PrLogLocal WITH 'BLOCAT: nu exista fisierul: ' + lcFile
+ QUIT
+ ENDIF
+ lcSha1 = Sha1Fisier(lcFile)
+ DO PrLogLocal WITH 'fisier=' + lcFile + ' len=' + TRANSFORM(LEN(FILETOSTR(lcFile))) + ' sha1=' + lcSha1
+ IF !(lcSha1 == lcSha1Asteptat)
+ DO PrLogLocal WITH 'BLOCAT: sha1 diferit de ' + lcSha1Asteptat + ' - fisierul E2 a fost modificat, opresc'
+ QUIT
+ ENDIF
+
+ LOCAL loAnaf As 'AnafeFacturaServer'
+ loAnaf = CREATEOBJECT('AnafeFacturaServer', .F., '', gcS, '')
+ loAnaf.lTest = .T.
+ loAnaf.RefreshTokenAuto()
+ DO PrLogLocal WITH 'CIF=' + loAnaf.cCodFiscal + ' lTest=' + TRANSFORM(loAnaf.lTest) + ' tokenExp=' + DTOC(loAnaf.dTokenExpdate) + ' tokenGol=' + TRANSFORM(EMPTY(loAnaf.cToken))
+
+ * garzi finale, imediat inainte de upload
+ IF VARTYPE(loAnaf.lTest) <> 'L' OR !loAnaf.lTest
+ DO PrLogLocal WITH 'BLOCAT: lTest nu e .T.'
+ QUIT
+ ENDIF
+ IF EMPTY(loAnaf.cToken) OR loAnaf.dTokenExpdate <= DATE()
+ DO PrLogLocal WITH 'BLOCAT: token gol sau expirat'
+ QUIT
+ ENDIF
+ IF !(ALLTRIM(loAnaf.cCodFiscal) == '1879855')
+ DO PrLogLocal WITH 'BLOCAT: CIF neasteptat: ' + loAnaf.cCodFiscal
+ QUIT
+ ENDIF
+ IF !FILE(lcFile) OR !(Sha1Fisier(lcFile) == lcSha1Asteptat)
+ DO PrLogLocal WITH 'BLOCAT: fisierul lipseste sau s-a schimbat chiar inainte de upload'
+ QUIT
+ ENDIF
+
+ DO PrLogLocal WITH '=== UPLOAD 1/1: storno SSS 1156-S FARA BillingReference pe TEST ==='
+ LOCAL loRet
+ loRet = loAnaf.TrimiteFacturaXML(lcFile, .F., .F., .F., .F., .F.)
+ DO PrLogLocal WITH 'upload: lSucces=' + TRANSFORM(loRet.lSucces) + ' status=' + TRANSFORM(loRet.nStatus) + ' idIncarcare=' + ALLTRIM(NVL(loRet.cIdIncarcare,'')) + ' mesaj=[' + ALLTRIM(NVL(loRet.cMesaj,'')) + ']'
+ DO PrLogLocal WITH 'raspuns brut: ' + NVL(loRet.cResponse,'')
+ DO PrLogLocal WITH 'TOTAL: test terminat fara exceptie'
+CATCH TO loEx
+ DO PrLogLocal WITH 'EXCEPTIE: ' + loEx.Message + ' (' + TRANSFORM(loEx.LineNo) + ') ' + loEx.Procedure
+ENDTRY
+
+QUIT
+
+**********************************************************
+* sha1 prin certutil (sincron, fereastra ascunsa)
+FUNCTION Sha1Fisier
+ LPARAMETERS tcFile
+ LOCAL loSh, lcOut, lcTxt, lcHash, lnI
+ lcOut = ADDBS(SYS(2023)) + 'test5_sha1_' + SYS(2015) + '.txt'
+ loSh = CREATEOBJECT('WScript.Shell')
+ loSh.Run('cmd /c certutil -hashfile "' + tcFile + '" SHA1 > "' + lcOut + '"', 0, .T.)
+ lcHash = ''
+ IF FILE(lcOut)
+ lcTxt = FILETOSTR(lcOut)
+ DELETE FILE (lcOut)
+ FOR lnI = 1 TO GETWORDCOUNT(lcTxt, CHR(13) + CHR(10))
+ IF LEN(CHRTRAN(GETWORDNUM(lcTxt, lnI, CHR(13) + CHR(10)), ' ', '')) = 40
+ lcHash = LOWER(CHRTRAN(GETWORDNUM(lcTxt, lnI, CHR(13) + CHR(10)), ' ', ''))
+ EXIT
+ ENDIF
+ ENDFOR
+ ENDIF
+ RETURN lcHash
+ENDFUNC
+
+**********************************************************
+PROCEDURE PrLogLocal
+ LPARAMETERS tcMsg
+ LOCAL lcL
+ SET SAFETY OFF
+ lcL = IIF(FILE(gcUILog), FILETOSTR(gcUILog), '')
+ STRTOFILE(lcL + TTOC(DATETIME()) + ' ' + TRANSFORM(tcMsg) + CHR(13) + CHR(10), gcUILog)
+ENDPROC
+
+**********************************************************
+PROCEDURE PrErrLocal
+ LPARAMETERS tnError, tcMessage, tcProgram, tnLineNo
+ DO PrLogLocal WITH 'EROARE ' + TRANSFORM(tnError) + ' ' + TRANSFORM(tcMessage) + ' in ' + TRANSFORM(tcProgram) + ' linia ' + TRANSFORM(tnLineNo)
+ENDPROC
diff --git a/utile/Teste/storno/test5_1814_e3.prg b/utile/Teste/storno/test5_1814_e3.prg
new file mode 100644
index 0000000..3180798
--- /dev/null
+++ b/utile/Teste/storno/test5_1814_e3.prg
@@ -0,0 +1,136 @@
+* test5_1814_e3.prg
+* E3 (docs\storno_1814_traseu_ui_vs_script.md): ca E1 + O SINGURA variabila noua: ValidareEFacturaANAF
+* (/prod/validare, ca Valideaza() din forma) imediat inainte de upload pe TEST. Storno nou SSS 1156-S3.
+* Un singur upload. Garzi: sha1 fisier, lTest, token, CIF - inainte de TrimiteFacturaXML.
+*
+* Rulare: powershell -ExecutionPolicy Bypass -File D:\ROA\ROACONT\COMUN\utile\Teste\watchdog_vfp.ps1 -Script D:\ROA\ROACONT\COMUN\utile\Teste\storno\test5_1814_e3.prg -AutoDismiss -TimeoutSec 240
+* Iesire: test5_1814_e3_log.txt (+ test5_1814_e3_golog.txt cu liniile SendEFactura), acelasi folder
+
+SET SAFETY OFF
+SET TALK OFF
+SET DELETED ON
+SET EXACT ON
+SET CENTURY ON
+SET DATE DMY
+SET NULLDISPLAY TO ''
+CLOSE DATABASES
+
+PUBLIC gcUILog, gcDir
+gcDir = "D:\ROA\ROACONT\COMUN\utile\Teste\storno\"
+gcUILog = gcDir + "test5_1814_e3_log.txt"
+STRTOFILE("START " + TTOC(DATETIME()) + CHR(13) + CHR(10), gcUILog)
+
+ON ERROR DO PrErrLocal WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
+ON SHUTDOWN QUIT
+
+TRY
+ DO "D:\ROA\ROACONT\COMUN\utile\Teste\test_init_env_auto.prg" WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
+ IF gnHandle <= 0
+ DO PrLogLocal WITH 'FAIL: conectare Oracle esuata (gnHandle=' + TRANSFORM(gnHandle) + ')'
+ QUIT
+ ENDIF
+ DO PrLogLocal WITH 'mediu initializat, gnHandle=' + TRANSFORM(gnHandle)
+
+ * SendEFactura scrie URL-ul si raspunsul prin goLog; Log_Mesaje nu scrie daca fisierul lipseste
+ goLog.cLogFile = gcDir + "test5_1814_e3_golog.txt"
+ STRTOFILE('', goLog.cLogFile)
+
+ LOCAL lcFile, lcSha1Asteptat, lcSha1
+ lcFile = gcDir + "out\storno_SSS 1156-S3_1879855.xml"
+ lcSha1Asteptat = 'c407f69020b8d30f2c298e294f9fd1ad60ee96d4'
+
+ IF !FILE(lcFile)
+ DO PrLogLocal WITH 'BLOCAT: nu exista fisierul: ' + lcFile
+ QUIT
+ ENDIF
+ lcSha1 = Sha1Fisier(lcFile)
+ DO PrLogLocal WITH 'fisier=' + lcFile + ' len=' + TRANSFORM(LEN(FILETOSTR(lcFile))) + ' sha1=' + lcSha1
+ IF !(lcSha1 == lcSha1Asteptat)
+ DO PrLogLocal WITH 'BLOCAT: sha1 diferit de ' + lcSha1Asteptat + ' - fisierul a fost regenerat, opresc'
+ QUIT
+ ENDIF
+
+ LOCAL loAnaf As 'AnafeFacturaServer'
+ loAnaf = CREATEOBJECT('AnafeFacturaServer', .F., '', gcS, '')
+ loAnaf.lTest = .T.
+ loAnaf.RefreshTokenAuto()
+ DO PrLogLocal WITH 'CIF=' + loAnaf.cCodFiscal + ' lTest=' + TRANSFORM(loAnaf.lTest) + ' tokenExp=' + DTOC(loAnaf.dTokenExpdate) + ' tokenGol=' + TRANSFORM(EMPTY(loAnaf.cToken))
+
+ * garzi finale, imediat inainte de upload
+ IF VARTYPE(loAnaf.lTest) <> 'L' OR !loAnaf.lTest
+ DO PrLogLocal WITH 'BLOCAT: lTest nu e .T.'
+ QUIT
+ ENDIF
+ IF EMPTY(loAnaf.cToken) OR loAnaf.dTokenExpdate <= DATE()
+ DO PrLogLocal WITH 'BLOCAT: token gol sau expirat'
+ QUIT
+ ENDIF
+ IF !(ALLTRIM(loAnaf.cCodFiscal) == '1879855')
+ DO PrLogLocal WITH 'BLOCAT: CIF neasteptat: ' + loAnaf.cCodFiscal
+ QUIT
+ ENDIF
+ IF !FILE(lcFile) OR !(Sha1Fisier(lcFile) == lcSha1Asteptat)
+ DO PrLogLocal WITH 'BLOCAT: fisierul lipseste sau s-a schimbat chiar inainte de upload'
+ QUIT
+ ENDIF
+
+ IF !("XMLEFACTURA" $ UPPER(SET("PROCEDURE")))
+ SET PROCEDURE TO xmlefactura ADDITIVE
+ ENDIF
+ LOCAL loExport, llValid, lcMesajValid
+ lcMesajValid = ""
+ DO PrLogLocal WITH "=== VALIDARE /prod/validare (ca Valideaza din forma) ==="
+ loExport = CREATEOBJECT("ExportEFactura", .T., loAnaf.cToken)
+ llValid = loExport.ValidareEFacturaANAF(lcFile, @lcMesajValid)
+ DO PrLogLocal WITH "validare: llValid=" + TRANSFORM(llValid) + " mesaj=[" + TRANSFORM(lcMesajValid) + "] sha1dupa=" + Sha1Fisier(lcFile)
+ IF !(Sha1Fisier(lcFile) == lcSha1Asteptat)
+ DO PrLogLocal WITH "ATENTIE: validarea a modificat fisierul - continui (asta e traseul UI)"
+ ENDIF
+ DO PrLogLocal WITH '=== UPLOAD 1/1: storno SSS 1156-S3 dupa validare, pe TEST ==='
+ LOCAL loRet
+ loRet = loAnaf.TrimiteFacturaXML(lcFile, .F., .F., .F., .F., .F.)
+ DO PrLogLocal WITH 'upload: lSucces=' + TRANSFORM(loRet.lSucces) + ' status=' + TRANSFORM(loRet.nStatus) + ' idIncarcare=' + ALLTRIM(NVL(loRet.cIdIncarcare,'')) + ' mesaj=[' + ALLTRIM(NVL(loRet.cMesaj,'')) + ']'
+ DO PrLogLocal WITH 'raspuns brut: ' + NVL(loRet.cResponse,'')
+ DO PrLogLocal WITH 'TOTAL: test terminat fara exceptie'
+CATCH TO loEx
+ DO PrLogLocal WITH 'EXCEPTIE: ' + loEx.Message + ' (' + TRANSFORM(loEx.LineNo) + ') ' + loEx.Procedure
+ENDTRY
+
+QUIT
+
+**********************************************************
+* sha1 prin certutil (sincron, fereastra ascunsa)
+FUNCTION Sha1Fisier
+ LPARAMETERS tcFile
+ LOCAL loSh, lcOut, lcTxt, lcHash, lnI
+ lcOut = ADDBS(SYS(2023)) + 'test5_sha1_' + SYS(2015) + '.txt'
+ loSh = CREATEOBJECT('WScript.Shell')
+ loSh.Run('cmd /c certutil -hashfile "' + tcFile + '" SHA1 > "' + lcOut + '"', 0, .T.)
+ lcHash = ''
+ IF FILE(lcOut)
+ lcTxt = FILETOSTR(lcOut)
+ DELETE FILE (lcOut)
+ FOR lnI = 1 TO GETWORDCOUNT(lcTxt, CHR(13) + CHR(10))
+ IF LEN(CHRTRAN(GETWORDNUM(lcTxt, lnI, CHR(13) + CHR(10)), ' ', '')) = 40
+ lcHash = LOWER(CHRTRAN(GETWORDNUM(lcTxt, lnI, CHR(13) + CHR(10)), ' ', ''))
+ EXIT
+ ENDIF
+ ENDFOR
+ ENDIF
+ RETURN lcHash
+ENDFUNC
+
+**********************************************************
+PROCEDURE PrLogLocal
+ LPARAMETERS tcMsg
+ LOCAL lcL
+ SET SAFETY OFF
+ lcL = IIF(FILE(gcUILog), FILETOSTR(gcUILog), '')
+ STRTOFILE(lcL + TTOC(DATETIME()) + ' ' + TRANSFORM(tcMsg) + CHR(13) + CHR(10), gcUILog)
+ENDPROC
+
+**********************************************************
+PROCEDURE PrErrLocal
+ LPARAMETERS tnError, tcMessage, tcProgram, tnLineNo
+ DO PrLogLocal WITH 'EROARE ' + TRANSFORM(tnError) + ' ' + TRANSFORM(tcMessage) + ' in ' + TRANSFORM(tcProgram) + ' linia ' + TRANSFORM(tnLineNo)
+ENDPROC
diff --git a/utile/Teste/storno/test5_1814_e4.prg b/utile/Teste/storno/test5_1814_e4.prg
new file mode 100644
index 0000000..a60d814
--- /dev/null
+++ b/utile/Teste/storno/test5_1814_e4.prg
@@ -0,0 +1,123 @@
+* test5_1814_e4.prg
+* E4: acelasi fisier S3 ca E3 (care a primit 1814), FARA validare /prod/validare. Izoleaza validarea.
+* Un singur upload. Garzi: sha1 fisier, lTest, token, CIF - inainte de TrimiteFacturaXML.
+*
+* Rulare: powershell -ExecutionPolicy Bypass -File D:\ROA\ROACONT\COMUN\utile\Teste\watchdog_vfp.ps1 -Script D:\ROA\ROACONT\COMUN\utile\Teste\storno\test5_1814_e4.prg -AutoDismiss -TimeoutSec 240
+* Iesire: test5_1814_e4_log.txt (+ test5_1814_e4_golog.txt cu liniile SendEFactura), acelasi folder
+
+SET SAFETY OFF
+SET TALK OFF
+SET DELETED ON
+SET EXACT ON
+SET CENTURY ON
+SET DATE DMY
+SET NULLDISPLAY TO ''
+CLOSE DATABASES
+
+PUBLIC gcUILog, gcDir
+gcDir = "D:\ROA\ROACONT\COMUN\utile\Teste\storno\"
+gcUILog = gcDir + "test5_1814_e4_log.txt"
+STRTOFILE("START " + TTOC(DATETIME()) + CHR(13) + CHR(10), gcUILog)
+
+ON ERROR DO PrErrLocal WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
+ON SHUTDOWN QUIT
+
+TRY
+ DO "D:\ROA\ROACONT\COMUN\utile\Teste\test_init_env_auto.prg" WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
+ IF gnHandle <= 0
+ DO PrLogLocal WITH 'FAIL: conectare Oracle esuata (gnHandle=' + TRANSFORM(gnHandle) + ')'
+ QUIT
+ ENDIF
+ DO PrLogLocal WITH 'mediu initializat, gnHandle=' + TRANSFORM(gnHandle)
+
+ * SendEFactura scrie URL-ul si raspunsul prin goLog; Log_Mesaje nu scrie daca fisierul lipseste
+ goLog.cLogFile = gcDir + "test5_1814_e4_golog.txt"
+ STRTOFILE('', goLog.cLogFile)
+
+ LOCAL lcFile, lcSha1Asteptat, lcSha1
+ lcFile = gcDir + "out\storno_SSS 1156-S3_1879855.xml"
+ lcSha1Asteptat = 'c407f69020b8d30f2c298e294f9fd1ad60ee96d4'
+
+ IF !FILE(lcFile)
+ DO PrLogLocal WITH 'BLOCAT: nu exista fisierul: ' + lcFile
+ QUIT
+ ENDIF
+ lcSha1 = Sha1Fisier(lcFile)
+ DO PrLogLocal WITH 'fisier=' + lcFile + ' len=' + TRANSFORM(LEN(FILETOSTR(lcFile))) + ' sha1=' + lcSha1
+ IF !(lcSha1 == lcSha1Asteptat)
+ DO PrLogLocal WITH 'BLOCAT: sha1 diferit de ' + lcSha1Asteptat + ' - fisierul a fost regenerat, opresc'
+ QUIT
+ ENDIF
+
+ LOCAL loAnaf As 'AnafeFacturaServer'
+ loAnaf = CREATEOBJECT('AnafeFacturaServer', .F., '', gcS, '')
+ loAnaf.lTest = .T.
+ loAnaf.RefreshTokenAuto()
+ DO PrLogLocal WITH 'CIF=' + loAnaf.cCodFiscal + ' lTest=' + TRANSFORM(loAnaf.lTest) + ' tokenExp=' + DTOC(loAnaf.dTokenExpdate) + ' tokenGol=' + TRANSFORM(EMPTY(loAnaf.cToken))
+
+ * garzi finale, imediat inainte de upload
+ IF VARTYPE(loAnaf.lTest) <> 'L' OR !loAnaf.lTest
+ DO PrLogLocal WITH 'BLOCAT: lTest nu e .T.'
+ QUIT
+ ENDIF
+ IF EMPTY(loAnaf.cToken) OR loAnaf.dTokenExpdate <= DATE()
+ DO PrLogLocal WITH 'BLOCAT: token gol sau expirat'
+ QUIT
+ ENDIF
+ IF !(ALLTRIM(loAnaf.cCodFiscal) == '1879855')
+ DO PrLogLocal WITH 'BLOCAT: CIF neasteptat: ' + loAnaf.cCodFiscal
+ QUIT
+ ENDIF
+ IF !FILE(lcFile) OR !(Sha1Fisier(lcFile) == lcSha1Asteptat)
+ DO PrLogLocal WITH 'BLOCAT: fisierul lipseste sau s-a schimbat chiar inainte de upload'
+ QUIT
+ ENDIF
+
+ DO PrLogLocal WITH '=== UPLOAD 1/1: storno SSS 1156-S3 FARA validare, pe TEST ==='
+ LOCAL loRet
+ loRet = loAnaf.TrimiteFacturaXML(lcFile, .F., .F., .F., .F., .F.)
+ DO PrLogLocal WITH 'upload: lSucces=' + TRANSFORM(loRet.lSucces) + ' status=' + TRANSFORM(loRet.nStatus) + ' idIncarcare=' + ALLTRIM(NVL(loRet.cIdIncarcare,'')) + ' mesaj=[' + ALLTRIM(NVL(loRet.cMesaj,'')) + ']'
+ DO PrLogLocal WITH 'raspuns brut: ' + NVL(loRet.cResponse,'')
+ DO PrLogLocal WITH 'TOTAL: test terminat fara exceptie'
+CATCH TO loEx
+ DO PrLogLocal WITH 'EXCEPTIE: ' + loEx.Message + ' (' + TRANSFORM(loEx.LineNo) + ') ' + loEx.Procedure
+ENDTRY
+
+QUIT
+
+**********************************************************
+* sha1 prin certutil (sincron, fereastra ascunsa)
+FUNCTION Sha1Fisier
+ LPARAMETERS tcFile
+ LOCAL loSh, lcOut, lcTxt, lcHash, lnI
+ lcOut = ADDBS(SYS(2023)) + 'test5_sha1_' + SYS(2015) + '.txt'
+ loSh = CREATEOBJECT('WScript.Shell')
+ loSh.Run('cmd /c certutil -hashfile "' + tcFile + '" SHA1 > "' + lcOut + '"', 0, .T.)
+ lcHash = ''
+ IF FILE(lcOut)
+ lcTxt = FILETOSTR(lcOut)
+ DELETE FILE (lcOut)
+ FOR lnI = 1 TO GETWORDCOUNT(lcTxt, CHR(13) + CHR(10))
+ IF LEN(CHRTRAN(GETWORDNUM(lcTxt, lnI, CHR(13) + CHR(10)), ' ', '')) = 40
+ lcHash = LOWER(CHRTRAN(GETWORDNUM(lcTxt, lnI, CHR(13) + CHR(10)), ' ', ''))
+ EXIT
+ ENDIF
+ ENDFOR
+ ENDIF
+ RETURN lcHash
+ENDFUNC
+
+**********************************************************
+PROCEDURE PrLogLocal
+ LPARAMETERS tcMsg
+ LOCAL lcL
+ SET SAFETY OFF
+ lcL = IIF(FILE(gcUILog), FILETOSTR(gcUILog), '')
+ STRTOFILE(lcL + TTOC(DATETIME()) + ' ' + TRANSFORM(tcMsg) + CHR(13) + CHR(10), gcUILog)
+ENDPROC
+
+**********************************************************
+PROCEDURE PrErrLocal
+ LPARAMETERS tnError, tcMessage, tcProgram, tnLineNo
+ DO PrLogLocal WITH 'EROARE ' + TRANSFORM(tnError) + ' ' + TRANSFORM(tcMessage) + ' in ' + TRANSFORM(tcProgram) + ' linia ' + TRANSFORM(tnLineNo)
+ENDPROC
diff --git a/utile/Teste/storno/test6_raspunsuri_1zi.prg b/utile/Teste/storno/test6_raspunsuri_1zi.prg
new file mode 100644
index 0000000..aa3331c
--- /dev/null
+++ b/utile/Teste/storno/test6_raspunsuri_1zi.prg
@@ -0,0 +1,29 @@
+* test6_raspunsuri_1zi.prg - DOAR CITIRE: listaMesajePaginatieFactura pe ANAF TEST, ultima zi (ca "Raspunsuri > Ultima zi").
+* Scop: textul exact din "eroare" cand nu sunt mesaje (Marius vede "Nimic"). Fara upload, fara procesare in baza.
+SET SAFETY OFF
+SET TALK OFF
+CLOSE DATABASES
+PUBLIC gcUILog
+gcUILog = "D:\ROA\ROACONT\COMUN\utile\Teste\storno\test6_raspunsuri_1zi_log.txt"
+STRTOFILE("START " + TTOC(DATETIME()) + CHR(13) + CHR(10), gcUILog)
+ON ERROR STRTOFILE('EROARE ' + TRANSFORM(ERROR()) + ' ' + MESSAGE() + ' ' + PROGRAM() + ' ' + TRANSFORM(LINENO()) + CHR(13) + CHR(10), gcUILog, 1)
+ON SHUTDOWN QUIT
+TRY
+ DO "D:\ROA\ROACONT\COMUN\utile\Teste\test_init_env_auto.prg" WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
+ LOCAL loAnaf, loHTTP, ltEnd, ltStart, lcUrl, lnZile
+ loAnaf = CREATEOBJECT('AnafeFacturaServer', .F., '', gcS, '')
+ loAnaf.lTest = .T.
+ loAnaf.RefreshTokenAuto()
+ ltEnd = GetUtcTime(DATETIME()-60)
+ ltStart = ltEnd - 1*24*60*60
+ lcUrl = 'https://api.anaf.ro/test/FCTEL/rest/listaMesajePaginatieFactura?startTime=' + ALLTRIM(STR(Datetime2UnixTime(ltStart))) + '000&endTime=' + ALLTRIM(STR(Datetime2UnixTime(ltEnd))) + '000&cif=' + ALLTRIM(loAnaf.cCodFiscal) + '&pagina=1'
+ STRTOFILE('cUser=[' + TRANSFORM(loAnaf.cUser) + '] url=' + lcUrl + CHR(13) + CHR(10), gcUILog, 1)
+ loHTTP = CREATEOBJECT('winHTTP.winHTTPrequest.5.1')
+ loHTTP.Open('GET', lcUrl, .F.)
+ loHTTP.setRequestHeader('Authorization', 'Bearer ' + loAnaf.cToken)
+ loHTTP.Send()
+ STRTOFILE('status=' + TRANSFORM(loHTTP.Status) + CHR(13) + CHR(10) + loHTTP.ResponseText + CHR(13) + CHR(10), gcUILog, 1)
+CATCH TO loEx
+ STRTOFILE('EXCEPTIE ' + loEx.Message + CHR(13) + CHR(10), gcUILog, 1)
+ENDTRY
+QUIT
diff --git a/utile/Teste/storno/test7_raspunsuri_dupa_upload.prg b/utile/Teste/storno/test7_raspunsuri_dupa_upload.prg
new file mode 100644
index 0000000..8390ecf
--- /dev/null
+++ b/utile/Teste/storno/test7_raspunsuri_dupa_upload.prg
@@ -0,0 +1,63 @@
+* test7_raspunsuri_dupa_upload.prg - ANAF TEST (acord Marius 19.09): upload storno SSS 1156-S4, apoi imediat
+* Raspunsuri "Ultima zi" (efactura_client -> Run(1, .F.)), ca sa prindem mesajul "(nimic)".
+* AMESSAGEBOX mock: textul exact ajunge in log. goLog redirectat in test7_..._golog.txt.
+SET SAFETY OFF
+SET TALK OFF
+SET DELETED ON
+SET CENTURY ON
+SET DATE DMY
+CLOSE DATABASES
+PUBLIC gcUILog, gcDir, gnAmsgCalls, gaAmsgCalls[1,2]
+gnAmsgCalls = 0
+gcDir = "D:\ROA\ROACONT\COMUN\utile\Teste\storno\"
+gcUILog = gcDir + "test7_raspunsuri_dupa_upload_log.txt"
+STRTOFILE("START " + TTOC(DATETIME()) + CHR(13) + CHR(10), gcUILog)
+ON ERROR DO PrErrLocal WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
+ON SHUTDOWN QUIT
+SET PROCEDURE TO (gcDir + 'mock_amessagebox_storno.prg') ADDITIVE
+TRY
+ DO "D:\ROA\ROACONT\COMUN\utile\Teste\test_init_env_auto.prg" WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
+ IF gnHandle <= 0
+ DO PrLogLocal WITH 'FAIL: conectare Oracle'
+ QUIT
+ ENDIF
+ goLog.cLogFile = gcDir + "test7_raspunsuri_dupa_upload_golog.txt"
+ STRTOFILE('', goLog.cLogFile)
+
+ LOCAL lcFile, loAnaf, loRet, loAnaf2, llSucces
+ lcFile = gcDir + "out\storno_SSS 1156-S4_1879855.xml"
+ loAnaf = CREATEOBJECT('AnafeFacturaServer', .F., '', gcS, '')
+ loAnaf.lTest = .T.
+ loAnaf.RefreshTokenAuto()
+ IF !loAnaf.lTest OR EMPTY(loAnaf.cToken) OR !(ALLTRIM(loAnaf.cCodFiscal) == '1879855') OR !FILE(lcFile)
+ DO PrLogLocal WITH 'BLOCAT: garzi (lTest/token/CIF/fisier)'
+ QUIT
+ ENDIF
+ DO PrLogLocal WITH '=== UPLOAD 1/1 pe TEST: SSS 1156-S4 ==='
+ loRet = loAnaf.TrimiteFacturaXML(lcFile, .F., .F., .F., .F., .F.)
+ DO PrLogLocal WITH 'upload: status=' + TRANSFORM(loRet.nStatus) + ' idIncarcare=' + ALLTRIM(NVL(loRet.cIdIncarcare,'')) + ' mesaj=[' + ALLTRIM(NVL(loRet.cMesaj,'')) + ']'
+
+ DO PrLogLocal WITH '=== RASPUNSURI ultima zi (efactura_client 1, .F., .T.) ==='
+ loAnaf2 = CREATEOBJECT('AnafeFacturaServer', .F., '', gcS, '')
+ loAnaf2.lTest = .T.
+ llSucces = loAnaf2.Run(1, .F.)
+ DO PrLogLocal WITH 'Run: llSucces=' + TRANSFORM(llSucces) + ' lError=' + TRANSFORM(loAnaf2.lError) + ' cErrorMessage=[' + TRANSFORM(loAnaf2.cErrorMessage) + '] cSaveLogsPath=[' + TRANSFORM(loAnaf2.cSaveLogsPath) + '] dirExista=' + TRANSFORM(DIRECTORY(loAnaf2.cSaveLogsPath))
+ DO PrLogLocal WITH 'AMESSAGEBOX apeluri: ' + TRANSFORM(gnAmsgCalls)
+ DO PrLogLocal WITH 'TOTAL: terminat'
+CATCH TO loEx
+ DO PrLogLocal WITH 'EXCEPTIE: ' + loEx.Message + ' (' + TRANSFORM(loEx.LineNo) + ') ' + loEx.Procedure
+ENDTRY
+QUIT
+
+PROCEDURE PrLogLocal
+ LPARAMETERS tcMsg
+ LOCAL lcL
+ SET SAFETY OFF
+ lcL = IIF(FILE(gcUILog), FILETOSTR(gcUILog), '')
+ STRTOFILE(lcL + TTOC(DATETIME()) + ' ' + TRANSFORM(tcMsg) + CHR(13) + CHR(10), gcUILog)
+ENDPROC
+
+PROCEDURE PrErrLocal
+ LPARAMETERS tnError, tcMessage, tcProgram, tnLineNo
+ DO PrLogLocal WITH 'EROARE ' + TRANSFORM(tnError) + ' ' + TRANSFORM(tcMessage) + ' in ' + TRANSFORM(tcProgram) + ' linia ' + TRANSFORM(tnLineNo)
+ENDPROC
diff --git a/utile/Teste/storno/test8_raspunsuri_fara_nimic.prg b/utile/Teste/storno/test8_raspunsuri_fara_nimic.prg
new file mode 100644
index 0000000..5297728
--- /dev/null
+++ b/utile/Teste/storno/test8_raspunsuri_fara_nimic.prg
@@ -0,0 +1,50 @@
+* test8_raspunsuri_fara_nimic.prg - verificare fix SaveFile log json: doar Raspunsuri "Ultima zi" pe TEST (fara upload).
+* Asteptat: niciun AMESSAGEBOX, Run llSucces=.T.
+SET SAFETY OFF
+SET TALK OFF
+SET DELETED ON
+SET CENTURY ON
+SET DATE DMY
+CLOSE DATABASES
+PUBLIC gcUILog, gcDir, gnAmsgCalls, gaAmsgCalls[1,2]
+gnAmsgCalls = 0
+gcDir = "D:\ROA\ROACONT\COMUN\utile\Teste\storno\"
+gcUILog = gcDir + "test8_raspunsuri_fara_nimic_log.txt"
+STRTOFILE("START " + TTOC(DATETIME()) + CHR(13) + CHR(10), gcUILog)
+ON ERROR DO PrErrLocal WITH ERROR(), MESSAGE(), PROGRAM(), LINENO()
+ON SHUTDOWN QUIT
+SET PROCEDURE TO (gcDir + 'mock_amessagebox_storno.prg') ADDITIVE
+TRY
+ DO "D:\ROA\ROACONT\COMUN\utile\Teste\test_init_env_auto.prg" WITH 'CENTRAL', 'MARIUSM_AUTO', 'ROMFASTSOFT'
+ IF gnHandle <= 0
+ DO PrLogLocal WITH 'FAIL: conectare Oracle'
+ QUIT
+ ENDIF
+ goLog.cLogFile = gcDir + "test8_raspunsuri_fara_nimic_golog.txt"
+ STRTOFILE('', goLog.cLogFile)
+
+ LOCAL loAnaf2, llSucces
+ DO PrLogLocal WITH '=== RASPUNSURI ultima zi (efactura_client 1, .F., .T.) ==='
+ loAnaf2 = CREATEOBJECT('AnafeFacturaServer', .F., '', gcS, '')
+ loAnaf2.lTest = .T.
+ llSucces = loAnaf2.Run(1, .F.)
+ DO PrLogLocal WITH 'Run: llSucces=' + TRANSFORM(llSucces) + ' lError=' + TRANSFORM(loAnaf2.lError) + ' cErrorMessage=[' + TRANSFORM(loAnaf2.cErrorMessage) + '] cSaveLogsPath=[' + TRANSFORM(loAnaf2.cSaveLogsPath) + '] dirExista=' + TRANSFORM(DIRECTORY(loAnaf2.cSaveLogsPath))
+ DO PrLogLocal WITH 'AMESSAGEBOX apeluri: ' + TRANSFORM(gnAmsgCalls)
+ DO PrLogLocal WITH 'TOTAL: terminat'
+CATCH TO loEx
+ DO PrLogLocal WITH 'EXCEPTIE: ' + loEx.Message + ' (' + TRANSFORM(loEx.LineNo) + ') ' + loEx.Procedure
+ENDTRY
+QUIT
+
+PROCEDURE PrLogLocal
+ LPARAMETERS tcMsg
+ LOCAL lcL
+ SET SAFETY OFF
+ lcL = IIF(FILE(gcUILog), FILETOSTR(gcUILog), '')
+ STRTOFILE(lcL + TTOC(DATETIME()) + ' ' + TRANSFORM(tcMsg) + CHR(13) + CHR(10), gcUILog)
+ENDPROC
+
+PROCEDURE PrErrLocal
+ LPARAMETERS tnError, tcMessage, tcProgram, tnLineNo
+ DO PrLogLocal WITH 'EROARE ' + TRANSFORM(tnError) + ' ' + TRANSFORM(tcMessage) + ' in ' + TRANSFORM(tcProgram) + ' linia ' + TRANSFORM(tnLineNo)
+ENDPROC
diff --git a/utile/Teste/storno/test_storno_e2e.prg b/utile/Teste/storno/test_storno_e2e.prg
index 717af45..b096358 100644
--- a/utile/Teste/storno/test_storno_e2e.prg
+++ b/utile/Teste/storno/test_storno_e2e.prg
@@ -22,7 +22,7 @@ SET NULLDISPLAY TO ''
CLOSE DATABASES
PUBLIC gcUILog, gcTestDir, gcTesteDir
-PUBLIC gnPass, gnFail, gnMockRaspuns, gnAmsgCalls, gnMockApeluri, gnXmenuCalls, gnXmenuQueuePos
+PUBLIC gnPass, gnFail, gnMockRaspuns, gnAmsgCalls, gnMockApeluri, gnXmenuCalls, gnXmenuQueuePos, gnMockTrimiteMod
PUBLIC loAnaf, loForm, loMockSrv, loStornoForm, lnLastErrorNo, lcLastErrorMsg
DECLARE gaAmsgCalls[1,2]
DECLARE gaMockApeluri[1,3]
@@ -36,6 +36,7 @@ gnMockRaspuns = 6
gnXmenuCalls = 0
gnXmenuQueuePos = 1
gaXmenuQueue[1] = 0
+gnMockTrimiteMod = 0
lnLastErrorNo = 0
lcLastErrorMsg = ''
@@ -394,6 +395,9 @@ DEFINE CLASS DriverStorno AS Custom
DO TVerdict WITH lnPadFail = 0, 'fara padding pe original/nou (V(250), sumele nu mai ies din coloana)', 'randuri cu padding=' + TRANSFORM(lnPadFail) + ' ' + lcPadDetail
DO TVerdict WITH EMPTY(loStorno.txtMotiv.Value), 'txtMotiv fara apostrofuri la init', 'value=[' + TRANSFORM(loStorno.txtMotiv.Value) + ']'
+ * lblAvertisment gol -> ascuns si gridul muta in sus; nu gol -> vizibil pe pozitia initiala (invariant, indiferent de fixtura)
+ DO TVerdict WITH (EMPTY(loStorno.lblAvertisment.Caption) AND !loStorno.lblAvertisment.Visible AND loStorno.grdModificari.Top < 134) OR (!EMPTY(loStorno.lblAvertisment.Caption) AND loStorno.lblAvertisment.Visible AND loStorno.grdModificari.Top = 134), ;
+ 'lblAvertisment gol -> ascuns si gridul mutat in sus', 'avertisment=[' + loStorno.lblAvertisment.Caption + '] vizibil=' + TRANSFORM(loStorno.lblAvertisment.Visible) + ' grid_top=' + TRANSFORM(loStorno.grdModificari.Top)
This.nState = 1
CASE This.nState = 1
@@ -417,7 +421,24 @@ DEFINE CLASS DriverStorno AS Custom
loStorno.cmdTrimite.Click()
DO TVerdict WITH UPPER(ALLTRIM(loStorno.lblStare.Caption)) == 'VALID', 'renuntare xmenu -> starea nu se schimba', 'stare=[' + loStorno.lblStare.Caption + ']'
+ * eroare ANAF clara (HTTP 200, Cod 1814) - fara "TEST TEST" dublat, fara "Verificati in Trimise" (raspuns primit)
+ gnMockTrimiteMod = 1
+ gaXmenuQueue[1] = 2
+ gnXmenuQueuePos = 1
+ loStorno.cmdTrimite.Click()
+ DO TVerdict WITH loStorno.pnStare = 0, 'eroare ANAF clara -> starea ramane Nevalidat/eroare, nu Trimis', 'pnStare=' + TRANSFORM(loStorno.pnStare)
+ DO TVerdict WITH !('TEST TEST' $ loStorno.lblStare.Caption), 'fara TEST TEST dublat in mesaj', 'caption=[' + loStorno.lblStare.Caption + ']'
+ DO TVerdict WITH 'Cod: 1814' $ loStorno.lblStare.Caption AND 'TEST ANAF a respins incarcarea' $ loStorno.lblStare.Caption AND !('in Trimise' $ loStorno.lblStare.Caption), 'eroare ANAF clara (200) -> fara indemn Verificati in Trimise', 'caption=[' + loStorno.lblStare.Caption + ']'
+
+ * eroare de retea (HTTP 0, raspuns neclar) - Verificati in Trimise ramane
+ gnMockTrimiteMod = 2
+ gaXmenuQueue[1] = 2
+ gnXmenuQueuePos = 1
+ loStorno.cmdTrimite.Click()
+ DO TVerdict WITH 'in Trimise' $ loStorno.lblStare.Caption, 'eroare de retea (status<>200) -> pastreaza indemnul Verificati in Trimise', 'caption=[' + loStorno.lblStare.Caption + ']'
+
* optiunea 2 (trimite fara validare, cf. instructiuni: fara Valideaza/retea reala)
+ gnMockTrimiteMod = 0
gaXmenuQueue[1] = 2
gnXmenuQueuePos = 1
loStorno.cmdTrimite.Click()