Files
solduri2roa/extrage.py
Marius Mutu b5773c9822 Decizii LACERTA: data = ultima zi, 542 cu parteneri, 4428/01, backup .fbk
- genereaza_xlsx: coloana data = ultima zi a lunii; etalonul de regresie
  actualizat doar pe aceasta coloana (verificat celula cu celula).
- config: 542 cont cu parteneri (acum identic cu REF); descrierea lui 4092
  corectata.
- extrage/citire_fdb: .fbk se restaureaza cu gbak -c in temporar; test ca
  da aceleasi fisiere ca FDB-ul.
- test_lacerta: 49/53 frunze identice cu REF, 4428.TOATE -> 4428/01.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EYeAtVxeS8m4oXekjX8Am2
2026-09-27 16:43:54 +03:00

89 lines
2.9 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",
".fbk": "fdb", # backup gbak; se restaureaza in temporar (citire_fdb.copie_online)
}
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, .fdb sau .fbk)"
% (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()