- 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
89 lines
2.9 KiB
Python
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()
|