solduri2roa: balante SAGA PDF -> xlsx initializare ROACONT

Extragere pe coordonate (pdfplumber), generarea celor doua xlsx pentru
FUNDATIA si MASTER 12/2025, regulile de mapare si rapoartele de verificare.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BdA5a3ECKFD6Citf1ptPZu
This commit is contained in:
2026-09-21 00:02:30 +03:00
commit 92dc8c7b32
22 changed files with 1876 additions and 0 deletions

View File

@@ -0,0 +1,57 @@
# Raport pdf-extract - balante SAGA 31.12.2025
Script: `extract_balanta.py` (pdfplumber, extract_words pe coordonate; NU pdftotext).
Rulare: `py extract_balanta.py "<pdf>" "<csv>"`.
## Volum extras
| Firma | PDF | randuri CSV | conturi | randuri total |
|---|---|---|---|---|
| FUNDATIA | IBB 31.12.2025.pdf | 88 | 82 | 6 |
| MASTERJOB | MJC 31.12.2025.pdf | 88 | 81 | 7 |
Conturi duplicate: niciunul. Randuri de continuare de denumire lipite corect
(ex: `1171` = "REZULTATUL REPORTAT - PROFITUL NEREP./ PIREDERE NEACOP.").
## Rezultat verificari
`frunze` = cont care nu e parinte. `radacini` = cont al carui parinte nu apare in balanta.
SAGA neteaza D/C la conturile sintetice, deci verificarea de inchidere corecta e pe radacini.
| Verificare | FUNDATIA | MASTERJOB |
|---|---|---|
| (a) total_d = prec_d+rulaj_d si total_c = prec_c+rulaj_c | 82/82 OK | 81/81 OK |
| (b) sold_d-sold_c = total_d-total_c | 82/82 OK | 81/81 OK |
| (c) frunze: suma sold_d = suma sold_c | 6 793 548.43 = 6 793 548.43, dif 0.00 **OK** | 2 112 044.07 vs 2 114 832.10, dif **-2 788.03 ESEC** |
| (c2) radacini: suma sold_d = suma sold_c | 6 053 716.76 = 6 053 716.76, dif 0.00 OK | 2 114 811.30 = 2 114 811.30, dif 0.00 OK |
| randul "Totaluri:" din PDF | 6 053 716.76 = 6 053 716.76 | 2 114 811.30 = 2 114 811.30 |
| cross-check "Total sume clasa N" = suma radacinilor clasei | 5/5 OK | 6/6 OK |
| (d) parinte vs analitice | 6 diferente pe laturi, 0 pe net | 9 diferente pe laturi, 2 pe net |
Numerele de mai sus arata ca parsarea coordonatelor este corecta: (a) si (b) trec pentru
toate conturile, iar fiecare rand "Total sume clasa N" egaleaza exact suma radacinilor din
clasa respectiva (5/5 si 6/6), iar suma radacinilor egaleaza exact randul "Totaluri:".
## Conturi problematice si explicatie
Nu sunt erori de parsare; sunt doua comportamente reale SAGA:
1. Netare D/C la sintetice (FUNDATIA `1171.01`): parintele este prezentat net,
copiii pe laturi.
- `prec_d`: parinte 629 448.54 vs copii 1 369 280.21 (dif -739 831.67)
- `prec_c`: parinte 0.00 vs copii 739 831.67 (dif -739 831.67)
- pe NET: parinte 773 608.10 = copii 773 608.10 -> 0 diferente pe net.
De aceea suma frunzelor (6 793 548.43) difera de "Totaluri" (6 053 716.76) cu exact
739 831.67; inchiderea reala se face pe radacini si coincide cu PDF.
2. Postari directe pe conturi sintetice (MASTERJOB):
- `117`: parinte 47 431.79 vs copii 44 795.92 -> diferenta 2 635.87
- `5121`: parinte 15 730.61 vs copii net 15 578.45 -> diferenta 152.16
Suma postarilor directe = 2 635.87 + 152.16 = **2 788.03**, exact deficitul de la
verificarea (c) pe frunze (sold_c - sold_d = 2 788.03). Frunzele nu contin aceste
postari, de aceea (c) pica; incluzandu-le (c2, radacini) balanta este inchisa si
coincide cu "Totaluri:" = 2 114 811.30.
Concluzie: nu s-a ajustat nicio data. Verificarile (a), (b), (c2) si cross-check-ul pe
clase trec pentru ambele firme; (c) pe frunze pica doar la MASTERJOB din cauza postarilor
directe pe sintetice, dovedita prin relatia de mai sus.