Lane contract: config/conturi_parteneri.csv, divergenta Oracle, poarta de regresie

Setul de conturi cu parteneri iese din literali si trece in
config/conturi_parteneri.csv, cu categorie si motiv. Comportamentul e neschimbat;
lipsa fisierului opreste cu eroare, nu cade pe set gol.

CONFIG_CONT_IREG ramane consultativ: tools/divergenta_parteneri.py raporteaza
divergenta, nu o aplica. Constatarea (27 conturi in Oracle si nu la noi, 3 la noi
si nu in Oracle - 5121, 5124, 5311) e scrisa in docs/decizii_import.md.

tests/test_regresie.py compara iesirea codului de azi cu tests/golden/ pe valori
de celula, prin anonimizatorul refolosit ca functie. Trece pe FUNDATIA si MASTER;
verificat ca pica la o schimbare reala de set de conturi.

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 15:53:00 +03:00
parent 15bb26ac15
commit f23b3367d8
9 changed files with 477 additions and 49 deletions

View File

@@ -42,13 +42,39 @@ TEMPLATE = "init_facturi_balanta_note.xlsx"
# conturile din lista merg pe CREDIT, tot restul pe DEBIT.
LATURA_CREDIT = {"401", "404", "462", "419", "408", "4551"}
# 5121/5124: analiticele raman analitice SI primesc partener (BALANTA + FACTURA
# pe acelasi acont).
PARTENER_BANCA = {"5121", "5124"}
# Conturi cu parteneri, un singur BALANTA agregat pe sintetic + FACTURA per analitic.
PARTENER_SINTETIC = {"401", "4092", "4111", "461", "462", "4551"}
# Casa: fara analitice, BALANTA + FACTURA pe sintetic.
PARTENER_FARA_ANALITICE = {"5311"}
# Setul operational de conturi cu parteneri: config/conturi_parteneri.csv (validat
# in productie; CONFIG_CONT_IREG e doar consultativ, vezi docs/decizii_import.md).
# Categoriile CSV corespund celor trei seturi: BANCA, SINTETIC, FARA_ANALITICE.
CONFIG_PARTENERI = os.path.join(os.path.dirname(os.path.abspath(__file__)),
"config", "conturi_parteneri.csv")
class Stop(Exception):
"""Conditie neprevazuta: nu ghicim, raportam."""
def citeste_conturi_parteneri(path=CONFIG_PARTENERI):
"""(BANCA, SINTETIC, FARA_ANALITICE) din CSV; fisier lipsa = eroare, nu set gol."""
if not os.path.exists(path):
raise Stop(f"lipseste fisierul de configurare a partenerilor: {path}")
seturi = {"BANCA": set(), "SINTETIC": set(), "FARA_ANALITICE": set()}
with open(path, encoding="utf-8-sig", newline="") as f:
for r in csv.DictReader(f):
cont = (r.get("cont") or "").strip()
categorie = (r.get("categorie") or "").strip()
if not cont:
continue
if categorie not in seturi:
raise Stop(f"categorie necunoscuta in {path}: {categorie!r}")
seturi[categorie].add(cont)
return seturi["BANCA"], seturi["SINTETIC"], seturi["FARA_ANALITICE"]
# BANCA (5121/5124): analiticele raman analitice SI primesc partener.
# SINTETIC: un singur BALANTA agregat pe sintetic + FACTURA per analitic.
# FARA_ANALITICE (5311): fara analitice, BALANTA + FACTURA pe sintetic.
(PARTENER_BANCA, PARTENER_SINTETIC,
PARTENER_FARA_ANALITICE) = citeste_conturi_parteneri()
PARTENER = PARTENER_BANCA | PARTENER_SINTETIC | PARTENER_FARA_ANALITICE
@@ -58,10 +84,6 @@ FIRME = [
]
class Stop(Exception):
"""Conditie neprevazuta: nu ghicim, raportam."""
def citeste_header():
wb = load_workbook(TEMPLATE, read_only=True)
ws = wb.active