tests/test_regresie_capat_la_capat.py ruleaza extrage.py si genereaza.py ca subprocese, pornind de la PDF-urile originale, si compara rezultatul anonimizat cu tests/golden/ pe valori de celula: 0 diferente pe ambele firme. Fluxul nou reproduce exact xlsx-urile deja importate in ROACONT. 33 de teste trec, fara niciun skip. CLAUDE.md: dependintele noi (xlrd, firebird-driver) si punctele de intrare. Handoff-ul rescris pe starea de final, cu ce NU e dovedit: cititorul FDB e verificat doar pe cazul sintetic al firmei de joaca si nu se duce la un client fara rerularea portii pe datele lui. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EYeAtVxeS8m4oXekjX8Am2
4.7 KiB
Raport lane regresie - solduri2roa etapa 2, poarta finala
Data: 21.09.2026. Director: D:\ROA\IMPORT2ROA\solduri2roa. Singurul lane activ.
Intrebarea portii: fluxul nou, pornit de la PDF-urile originale, reproduce exact cele doua xlsx-uri deja importate in ROACONT si trecute? Da.
1. Facut
tests/test_regresie_capat_la_capat.py(nou, 210 linii, ASCII, LF)::44-56_ruleaza- punctele de intrare rulate ca subprocese (sys.executable extrage.py .../genereaza.py ...), deci parsarea argumentelor e sub test; orice cod de iesire != 0 e esec.:29-36FIRME- PDF -> firma -> balanta de referinta -> etalon.:70-82_diferente_referinta- compara balanta extrasa din PDF cu balanta de referinta din radacina, ca sa confirme asocierea PDF->firma.:105-128setUpClass- extrage fiecare PDF in temp, verifica, ruleazagenereaza.py, anonimizeaza cutests/anonimizeaza_etalon.py(functie importabila, tabela comisa) in temp.:148-194_verifica_etalon- comparatie pe valori de celula cutests/golden/; mesajul de esec da fisierul, randul, coloana (numar si litera), asteptat, gasit.skipTestla PDF/tabela lipsa.- 4 teste:
test_pdf_fundatia_corespunde_referintei,test_pdf_master_corespunde_referintei,test_etalon_fundatia,test_etalon_master.
Niciun fisier de productie, niciun etalon, niciun config nu a fost modificat. Cod de productie schimbat: niciunul (diferente zero, nu a fost nevoie).
2. Verificari
2.1 Asocierea PDF -> firma (dedusa, nu ghicita)
Ambele PDF-uri extrase in temp, comparate cu balantele de referinta din radacina pe
coloanele comune (cont, denumire, prec_*, rulaj_*, total_*, sold_*, este_total):
IBB 31.12.2025.pdfvsbalanta_FUNDATIA.csv-> 0 diferente; vsbalanta_MASTERJOB.csv-> 570.MJC 31.12.2025.pdfvsbalanta_MASTERJOB.csv-> 0 diferente; vsbalanta_FUNDATIA.csv-> 570.
Concluzie: IBB = FUNDATIA, MJC = MASTER. Afirmatia e verificata si in test
(test_pdf_*_corespunde_referintei), nu doar in raport.
2.2 Comenzile rulate
py extrage.py --sursa pdf --fisier "IBB 31.12.2025.pdf" --firma FUNDATIA --an 2025 --luna 12 --dir <temp>
py extrage.py --sursa pdf --fisier "MJC 31.12.2025.pdf" --firma MASTER --an 2025 --luna 12 --dir <temp>
py genereaza.py --firma FUNDATIA --an 2025 --luna 12 --dir <temp>
py genereaza.py --firma MASTER --an 2025 --luna 12 --dir <temp>
py tests/anonimizeaza_etalon.py (functie importabila: anonimizeaza_fisier)
py -m unittest discover -s tests -v
extrage.py: 88 randuri pentru fiecare PDF. genereaza.py: FUNDATIA rows: 75 totdeb=totcred=7068369.5, toate 4 verificarile OK, exit 0; MASTER rows: 80 totdeb=totcred=2318572.11, toate 4 OK, exit 0 (un analitic negativ cunoscut:
5121.01 -20.8 D, raportat, nu normalizat).
2.3 Iesirea testului
test_etalon_fundatia (test_regresie_capat_la_capat.TestRegresieCapatLaCapat.test_etalon_fundatia) ... ok
test_etalon_master (test_regresie_capat_la_capat.TestRegresieCapatLaCapat.test_etalon_master) ... ok
test_pdf_fundatia_corespunde_referintei (...) ... ok
test_pdf_master_corespunde_referintei (...) ... ok
...
Ran 33 tests in 6.676s
OK
EXIT=0
33 = 29 existente + 4 ale acestui lane. tests/test_regresie.py trece neschimbat.
2.4 Rezultatul portii
Anonimizat vs tests/golden/, pe valori de celula:
golden_FUNDATIA_2025_12.xlsx: dimensiuni 76 x 39, 0 celule diferite.golden_MASTER_2025_12.xlsx: dimensiuni 81 x 39, 0 celule diferite.
Nu exista diferente de raportat (nici macar denumiri cu spatii in plus: zero celule).
2.5 Cens octeti / linii
tests/test_regresie_capat_la_capat.py: 0 octeti > 0x7F, CRLF=0 / LF=210 (identic cu
tests/test_regresie.py, tests/test_integrare.py). Toate iesirile testului au fost
scrise doar in directoare temporare.
3. Nefacut / blocat / intrebari deschise
- Niciun blocaj. Poarta a trecut din prima, fara ajustari de cifre.
- Observatie (nu blocant):
genereaza.pynu are un flag care sa impuna absenta corectiilor pre-existente; testul ruleaza in temp gol, decicorectii_<FIRMA>.xlsxse creeaza gol si nu influenteaza rezultatul. Daca cineva pune corectii reale in radacina, testul nu le foloseste (si nici nu trebuie).
4. Stare periculoasa
Niciuna. Fara binar VFP editat/write-back, fara procese lasate pornite, fara date de
test consumate. Fisierele din radacina (balanta_*, init_*) au timestamp neschimbat.
Fara commit, fara git add. git status --short arata un singur fisier nou:
tests/test_regresie_capat_la_capat.py.
5. Verdict
Etapa 2 este gata. Fluxul nou, pornit de la PDF-urile originale prin linia de comanda, reproduce identic (0 diferente pe valori de celula) ambele xlsx-uri de initializare deja importate in ROACONT.