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
109 lines
4.7 KiB
Markdown
109 lines
4.7 KiB
Markdown
# 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 <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.py` nu are un flag care sa impuna absenta
|
|
corectiilor pre-existente; testul ruleaza in temp gol, deci `corectii_<FIRMA>.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.
|