Files
solduri2roa/extrage.py
Marius Mutu 82511c8adb Lane integrare: extrage.py si genereaza.py cu parametri, maparea legata
Firmele si lunile nu mai sunt hardcodate. extrage.py dispecerizeaza catre cele
trei cititoare (pdf / xlsx / fdb, dedus din extensie, extensie necunoscuta =
eroare) si scrie contractul intern; genereaza.py aplica maparea si scrie
init_<FIRMA>_<an>_<luna>.xlsx plus mapare_<FIRMA>.xlsx.

genereaza_xlsx.py devine biblioteca: an/luna parametri, data si scadenta
calculate din ele, sablonul cautat langa script. Cand exista parteneri_ si
facturi_ (drumul FDB) se emite cate un FACTURA per document, cu cod fiscal real,
si numai daca suma documentelor da netul contului; altfel ramane comportamentul
de azi, un FACTURA agregat.

Corectat in orchestrare: la redenumirea unui cont cu parteneri, generatorul lua
primul analitic ca sa afle contul sintetic. Daca analiticele erau mapate pe
conturi diferite, BALANTA agregat si randurile FACTURA cadeau pe conturi
diferite, tacut. Acum se opreste cu eroare; colapsarea pe acelasi cont ramane
legala. Doua teste acopera ambele cazuri.

29 de teste trec, inclusiv regresia pe etalon cu generatorul modificat.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EYeAtVxeS8m4oXekjX8Am2
2026-09-21 16:23:45 +03:00

87 lines
2.8 KiB
Python

"""Punct de intrare: de la sursa (PDF / foaie SAGA / Firebird) la contractul intern.
Dispecerizeaza catre cititoarele existente, fara sa le dubleze logica:
pdf -> extract_balanta.parse_pdf (raportul tiparit SAGA)
xlsx -> citire_xlsx.citeste_balanta (.xls / .xlsx SAGA)
fdb -> citire_fdb.produce (copia unei baze CONT_BAZA.FDB)
Scrie balanta_<FIRMA>.csv si, pe drumul fdb, parteneri_<FIRMA>.csv si
facturi_<FIRMA>.csv. Daca --sursa lipseste, se deduce din extensie; o extensie
necunoscuta da eroare, nu ghicit.
Utilizare:
py extrage.py --sursa pdf --fisier "<balanta.pdf>" --firma FIRMA --an 2025 --luna 12
py extrage.py --sursa xlsx --fisier "<balanta.xlsx>" --firma FIRMA --an 2026 --luna 9
py extrage.py --sursa fdb --fisier "<copie CONT_BAZA.FDB>" --firma FIRMA --an 2026 --luna 9
"""
import argparse
import os
import citire_fdb
import citire_xlsx
import extract_balanta
SURSE_DUPA_EXTENSIE = {
".pdf": "pdf",
".xls": "xlsx",
".xlsx": "xlsx",
".fdb": "fdb",
}
def deduce_sursa(fisier):
ext = os.path.splitext(fisier)[1].lower()
sursa = SURSE_DUPA_EXTENSIE.get(ext)
if sursa is None:
raise SystemExit(
"extensie necunoscuta pentru %s: %r (astept .pdf, .xls/.xlsx sau .fdb)"
% (fisier, ext))
return sursa
def extrage_pdf(fisier, cale):
rows = extract_balanta.parse_pdf(fisier)
citire_xlsx.scrie_csv(rows, cale)
return len(rows)
def extrage_xlsx(fisier, cale):
rows = citire_xlsx.citeste_balanta(fisier)
citire_xlsx.scrie_csv(rows, cale)
return len(rows)
def extrage_fdb(fisier, firma, an, luna, dir_iesire):
if an is None or luna is None:
raise SystemExit("--sursa fdb cere --an si --luna")
rez = citire_fdb.produce(fisier, firma, an, luna, dir_iesire)
return len(rez["balanta"])
def main():
parser = argparse.ArgumentParser(description=__doc__)
parser.add_argument("--sursa", choices=("pdf", "xlsx", "fdb"),
help="lipsa = dedusa din extensia --fisier")
parser.add_argument("--fisier", required=True)
parser.add_argument("--firma", required=True)
parser.add_argument("--an", type=int)
parser.add_argument("--luna", type=int)
parser.add_argument("--dir", default=".", help="directorul de iesire")
a = parser.parse_args()
sursa = a.sursa or deduce_sursa(a.fisier)
os.makedirs(a.dir, exist_ok=True)
if sursa == "fdb":
n = extrage_fdb(a.fisier, a.firma, a.an, a.luna, a.dir)
else:
cale = os.path.join(a.dir, "balanta_%s.csv" % a.firma)
n = extrage_pdf(a.fisier, cale) if sursa == "pdf" \
else extrage_xlsx(a.fisier, cale)
print("scris balanta_%s.csv: %d randuri (sursa %s)" % (a.firma, n, sursa))
if __name__ == "__main__":
main()