Files
solduri2roa/extrage.py
Marius Mutu 9a83e367d8 Muta datele din radacina in date/, iesiri/ si sablon/
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
2026-09-21 16:42:25 +03:00

88 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="date",
help="unde se scrie contractul intern (implicit date/)")
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()