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:
2026-09-21 16:42:25 +03:00
parent c6c6ebe1fe
commit 9a83e367d8
13 changed files with 48 additions and 22 deletions

View File

@@ -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)