date/ - intrari de la client (PDF-urile, exportul SAGA) si balanta intermediara iesiri/ - xlsx-urile generate si verificare_<FIRMA>.md (ignorat de git) sablon/ - sablonul ROA Punctele de intrare scriu acolo implicit: extrage.py --dir=date, genereaza.py citeste din date/ si scrie in iesiri/ (--dir-iesire), ca radacina sa nu se murdareasca la fiecare rulare. Sablonul e cautat langa script, in sablon/. Actualizate: TEMPLATE, cele trei teste care tin caile, .gitignore, CLAUDE.md si handoff-ul. Poarta capat-la-capat incepuse sa sara tacut dupa mutarea PDF-urilor (skipTest pe "lipsesc PDF-urile"); acum arata din nou catre date/ si ruleaza. 33 de teste trec, zero skip-uri. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EYeAtVxeS8m4oXekjX8Am2
44 lines
2.7 KiB
Markdown
44 lines
2.7 KiB
Markdown
# solduri2roa
|
|
|
|
Convertor balante SAGA (PDF) -> xlsx de initializare solduri ROACONT.
|
|
|
|
## Mediu
|
|
- `py` (Python 3.13). Instalate: pdfplumber, openpyxl, xlrd (.xls BIFF), firebird-driver
|
|
(Firebird embedded). Fara alte dependinte; testele folosesc `unittest` din stdlib.
|
|
- Nu folosi `sed -i` (corupe fisierele). Scrie cu heredoc sau Python.
|
|
- `D:\ROA\ROACONT` = read-only. Nu comite (git/svn) fara aprobare.
|
|
|
|
## Fisiere
|
|
| | |
|
|
|---|---|
|
|
| `extrage.py` | **punctul de intrare**: sursa (pdf/xlsx/fdb) -> contractul intern |
|
|
| `genereaza.py` | **punctul de intrare**: contractul intern -> xlsx de import |
|
|
| `extract_balanta.py` | PDF -> `balanta_<FIRMA>.csv` (pdfplumber pe coordonate) |
|
|
| `citire_xlsx.py` | foaie SAGA .xls/.xlsx -> acelasi contract |
|
|
| `citire_fdb.py` | CONT_BAZA.FDB -> balanta + parteneri + facturi (verificat doar pe sintetic) |
|
|
| `mapare.py` | propunere automata + `corectii_<FIRMA>.xlsx`, .TOATE/.RESTUL |
|
|
| `config/conturi_parteneri.csv` | **conturile cu parteneri** - autoritatea, nu CONFIG_CONT_IREG |
|
|
| `date/` | intrari de la client (PDF, export SAGA) + balanta intermediara |
|
|
| `iesiri/` | xlsx-urile generate + `verificare_<FIRMA>.md` (ignorat de git) |
|
|
| `sablon/init_facturi_balanta_note.xlsx` | sablonul ROA (rand 1 = coloane) |
|
|
| `genereaza_xlsx.py` | CSV -> `init_<FIRMA>_<an>_<luna>.xlsx` |
|
|
| `init_facturi_balanta_note.xlsx` | sablonul ROA (rand 1 = coloane, 2-13 instructiuni, 20+ exemple) |
|
|
| `docs/decizii_import.md` | **regulile de mapare - citeste intai** |
|
|
| `docs/conturi_cu_analitice.md` | per cont: ANALITIC sau PARTENER (confirmat de Marius) |
|
|
| `docs/config_cont_ireg.md` | `CONFIG_CONT_IREG` din Oracle local; `CONT` e VARCHAR2(4) |
|
|
| `docs/raport_form_init_balanta.md` | semantica formularului de import ROACONT |
|
|
| `docs/plan_solduri2roa.md` | etapele |
|
|
|
|
## Reguli care se uita usor
|
|
- `pdftotext` decaleaza coloanele. Doar pdfplumber, grupare pe `top`, coloane dupa `x1`.
|
|
- `totdeb`/`totcred` = **sume totale**, nu solduri (bilantul/CPP se bazeaza pe ele).
|
|
- In xlsx intra **doar frunzele**; importul reface sinteticul din suma analiticelor.
|
|
- Conturile cu parteneri nu primesc analitice: rand `BALANTA` pe sintetic + cate un `FACTURA` per partener.
|
|
- `cont` <= 4 car., `acont` <= 4 car. Analitic SAGA lung -> cifre concatenate (`1171.01.12` -> `0112`).
|
|
- SAGA neteaza D/C la sintetice: diferentele se calculeaza **pe net**. Net != 0 -> analitic/partener de diferenta.
|
|
- Nu ajusta cifre ca sa treaca o verificare. Raporteaza.
|
|
|
|
## Verificari obligatorii inainte de a declara gata
|
|
`SUM(totdeb)=SUM(totcred)`; total = randul "Totaluri:" din PDF; fiecare frunza din CSV apare exact o data;
|
|
per cont cu parteneri `SUM(sold FACTURA)` = netul sinteticului; fara `(cont,acont)` duplicat.
|