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
This commit is contained in:
@@ -115,10 +115,10 @@ def anonimizeaza():
|
||||
raport = []
|
||||
|
||||
for sursa, tinta in SURSE:
|
||||
cale = RADACINA / sursa
|
||||
cale = RADACINA / "iesiri" / sursa
|
||||
if not cale.exists():
|
||||
raise SystemExit(
|
||||
"Lipseste %s. Etalonul nu se poate construi - vezi docs/handoff_etapa2_convertor.md"
|
||||
"Lipseste iesiri/%s. Etalonul nu se poate construi - vezi docs/handoff_etapa2_convertor.md"
|
||||
% sursa
|
||||
)
|
||||
shutil.copy(cale, GOLDEN / tinta)
|
||||
|
||||
@@ -48,10 +48,15 @@ def _driver_disponibil():
|
||||
|
||||
|
||||
def _ruleaza(script, arg, dir_iesire):
|
||||
"""Ruleaza un punct de intrare cu `--dir` in directorul temporar si verificat."""
|
||||
"""Ruleaza un punct de intrare cu `--dir` in directorul temporar si verificat.
|
||||
|
||||
genereaza.py scrie implicit in iesiri/; in test totul sta in acelasi temporar.
|
||||
"""
|
||||
iesire = ["--dir-iesire", str(dir_iesire)] if script.name == "genereaza.py" else []
|
||||
return subprocess.run(
|
||||
[sys.executable, str(script), "--firma", FIRMA,
|
||||
"--an", str(AN), "--luna", str(LUNA), "--dir", str(dir_iesire)] + arg,
|
||||
"--an", str(AN), "--luna", str(LUNA), "--dir", str(dir_iesire)]
|
||||
+ iesire + arg,
|
||||
cwd=str(dir_iesire), capture_output=True, text=True)
|
||||
|
||||
|
||||
|
||||
@@ -58,7 +58,7 @@ class TestRegresieEtalon(unittest.TestCase):
|
||||
try:
|
||||
header = generator.citeste_header()
|
||||
for firma, csv_nume, golden_nume in FIRME:
|
||||
rows = generator.citeste_balanta(str(RADACINA / csv_nume))
|
||||
rows = generator.citeste_balanta(str(RADACINA / "date" / csv_nume))
|
||||
out, _, _, _, _ = generator.genereaza(rows, header)
|
||||
brut = tmpdir / ("init_%s_2025_12.xlsx" % firma)
|
||||
generator.scrie_xlsx(header, out, str(brut))
|
||||
|
||||
@@ -12,7 +12,7 @@ reguli si ACEIASI tabela ca tests/anonimizeaza_etalon.py si se compara cu
|
||||
tests/golden/ pe VALORI DE CELULA, nu pe hash de fisier.
|
||||
|
||||
Asocierea PDF -> firma nu se presupune: fiecare balanta extrasa se compara cu
|
||||
balanta de referinta din radacina (balanta_FUNDATIA.csv / balanta_MASTERJOB.csv),
|
||||
balanta de referinta din date/ (balanta_FUNDATIA.csv / balanta_MASTERJOB.csv),
|
||||
care e cea folosita la constructia etalonului.
|
||||
|
||||
Daca iesirea difera de etalon, etalonul are dreptate: se raporteaza, nu se ajusteaza.
|
||||
@@ -39,13 +39,14 @@ import anonimizeaza_etalon as anonim
|
||||
|
||||
CORESP = TESTS / "_corespondenta_anonimizare.json"
|
||||
GOLDEN = TESTS / "golden"
|
||||
DATE = RADACINA / "date"
|
||||
EXTRAGE = RADACINA / "extrage.py"
|
||||
GENEREAZA = RADACINA / "genereaza.py"
|
||||
|
||||
AN, LUNA = 2025, 12
|
||||
MAX_DIFERENTE_RAPORTATE = 20
|
||||
|
||||
# PDF din radacina -> firma -> balanta de referinta din radacina -> etalon.
|
||||
# PDF din date/ -> firma -> balanta de referinta din date/ -> etalon.
|
||||
# Asocierea e verificata de test_pdf_corespunde_referintei, nu doar afirmata.
|
||||
FIRME = [
|
||||
("FUNDATIA", "IBB 31.12.2025.pdf", "balanta_FUNDATIA.csv",
|
||||
@@ -100,9 +101,9 @@ class TestRegresieCapatLaCapat(unittest.TestCase):
|
||||
|
||||
@classmethod
|
||||
def setUpClass(cls):
|
||||
lipsa = [pdf for _, pdf, _, _ in FIRME if not (RADACINA / pdf).exists()]
|
||||
lipsa = [pdf for _, pdf, _, _ in FIRME if not (DATE / pdf).exists()]
|
||||
if lipsa:
|
||||
raise unittest.SkipTest("lipsesc PDF-urile din radacina: %s"
|
||||
raise unittest.SkipTest("lipsesc PDF-urile din date/: %s"
|
||||
% ", ".join(lipsa))
|
||||
if not CORESP.exists():
|
||||
raise unittest.SkipTest(
|
||||
@@ -116,14 +117,15 @@ class TestRegresieCapatLaCapat(unittest.TestCase):
|
||||
cls.iesiri = {}
|
||||
try:
|
||||
for firma, pdf, _, _ in FIRME:
|
||||
_ruleaza(EXTRAGE, ["--sursa", "pdf", "--fisier", str(RADACINA / pdf),
|
||||
_ruleaza(EXTRAGE, ["--sursa", "pdf", "--fisier", str(DATE / pdf),
|
||||
"--firma", firma, "--an", AN, "--luna", LUNA,
|
||||
"--dir", str(tmpdir)], tmpdir)
|
||||
cls.balante[firma] = tmpdir / ("balanta_%s.csv" % firma)
|
||||
|
||||
for firma, _, _, _ in FIRME:
|
||||
_ruleaza(GENEREAZA, ["--firma", firma, "--an", AN, "--luna", LUNA,
|
||||
"--dir", str(tmpdir)], tmpdir)
|
||||
"--dir", str(tmpdir),
|
||||
"--dir-iesire", str(tmpdir)], tmpdir)
|
||||
|
||||
for firma, _, _, golden_nume in FIRME:
|
||||
brut = tmpdir / ("init_%s_%d_%d.xlsx" % (firma, AN, LUNA))
|
||||
@@ -140,7 +142,7 @@ class TestRegresieCapatLaCapat(unittest.TestCase):
|
||||
|
||||
def _verifica_referinta(self, firma):
|
||||
"""Balanta extrasa din PDF = balanta de referinta (verifica asocierea PDF->firma)."""
|
||||
referinta = RADACINA / dict(
|
||||
referinta = DATE / dict(
|
||||
(f, r) for f, _, r, _ in FIRME)[firma]
|
||||
if not referinta.exists():
|
||||
self.skipTest("lipseste referinta %s" % referinta)
|
||||
|
||||
Reference in New Issue
Block a user