# 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-36` `FIRME` - 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-128` `setUpClass` - extrage fiecare PDF in temp, verifica, ruleaza `genereaza.py`, anonimizeaza cu `tests/anonimizeaza_etalon.py` (functie importabila, tabela comisa) in temp. - `:148-194` `_verifica_etalon` - comparatie pe **valori de celula** cu `tests/golden/`; mesajul de esec da fisierul, randul, coloana (numar si litera), asteptat, gasit. `skipTest` la 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.pdf` vs `balanta_FUNDATIA.csv` -> **0 diferente**; vs `balanta_MASTERJOB.csv` -> 570. - `MJC 31.12.2025.pdf` vs `balanta_MASTERJOB.csv` -> **0 diferente**; vs `balanta_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 py extrage.py --sursa pdf --fisier "MJC 31.12.2025.pdf" --firma MASTER --an 2025 --luna 12 --dir py genereaza.py --firma FUNDATIA --an 2025 --luna 12 --dir py genereaza.py --firma MASTER --an 2025 --luna 12 --dir 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.py` nu are un flag care sa impuna absenta corectiilor pre-existente; testul ruleaza in temp gol, deci `corectii_.xlsx` se 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.