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
This commit is contained in:
2026-09-27 16:43:54 +03:00
parent 99d9cf0aff
commit b5773c9822
11 changed files with 71 additions and 35 deletions

View File

@@ -11,6 +11,7 @@ sar, nu esueaza.
Rulare: py -m unittest discover -s tests -v
"""
import os
import subprocess
import pathlib
import shutil
import sys
@@ -110,6 +111,15 @@ class TestCitireFdb(unittest.TestCase):
# singura factura din firma de joaca are SCADENT NULL in INTRD
self.assertEqual(rows[0]["scadent"], asteptat)
def test_fbk_identic_cu_fdb(self):
"""Backupul gbak (.fbk) se restaureaza in temporar si da aceleasi fisiere."""
fbk = os.path.join(self.dir, "firma.fbk")
subprocess.run([citire_fdb.GBAK, "-b", self.baza, fbk, "-user",
citire_fdb.UTILIZATOR, "-password", citire_fdb.PAROLA], check=True)
a = citire_fdb.produce(self.baza, "A", AN, LUNA, os.path.join(self.dir, "a"))
b = citire_fdb.produce(fbk, "B", AN, LUNA, os.path.join(self.dir, "b"))
self.assertEqual(a, b)
def test_cont_colector_exclus(self):
rows = citire_fdb.citeste_balanta(self.baza, AN, LUNA)
self.assertNotIn("%", [r["cont"] for r in rows])

View File

@@ -37,7 +37,8 @@ AN, LUNA = 2026, 6
# deciziile de mapare din REF, pentru analiticele care nu intra in acont
CORECTII = [
["419.NETOPIA", "419", "2", None, "ca in REF"],
["4428.TOATE", "4428", None, None, "ca in REF"],
# REF are un singur rand 4428; 01 ca sa iasa frunze curate langa diferenta 4428/99
["4428.TOATE", "4428", "01", None, "decizie 26.09.2026"],
]
# frunza -> (REF, NOI), cu (totdeb, totcred); None = frunza lipseste
@@ -49,18 +50,15 @@ DIFERENTE_ASTEPTATE = {
("4092", "1"): ((2606.86, 0.0), None),
# nota de 900 direct pe 419: analitic de diferenta; REF a pierdut-o
("419", "9999"): (None, (0.0, 900.0)),
# 4428: postarile direct pe sintetic -> analitic de diferenta; totalul coincide
("4428", ""): ((1749.68, 0.0), (373.14, 0.0)),
# 4428: analiticele M/TI/TP pe 01 (corectie), postarile direct pe sintetic pe 99;
# totalul coincide cu randul unic din REF
("4428", ""): ((1749.68, 0.0), None),
("4428", "01"): (None, (373.14, 0.0)),
("4428", "99"): (None, (1376.54, 0.0)),
# 5121: regula de banca (BALANTA cu acont per cont bancar), validata la MASTER
("5121", ""): ((40801.41, 35876.25), None),
("5121", "1"): (None, (40601.41, 35876.25)),
("5121", "2"): (None, (200.0, 0.0)),
# 542 nu e cont cu parteneri in config: analitice + diferenta
("542", ""): ((2243.57, 1824.07), None),
("542", "01"): (None, (1828.77, 1824.07)),
("542", "02"): (None, (124.74, 0.0)),
("542", "99"): (None, (290.06, 0.0)),
# 891 are rulaj zero; REF nu-l scrie
("891", ""): (None, (0.0, 0.0)),
}
@@ -148,7 +146,8 @@ class TestLacerta(unittest.TestCase):
s[str(r["cont"])] += _v(r["sold"])
self.assertEqual({k: (c[k], round(s[k], 2)) for k in c}, {
"401": (12, 9220.75), "4092": (1, 2606.86), "4111": (1, 90.0),
"4551": (3, 3023583.0), "461": (1, 2250.0), "5121": (2, 4925.16)})
"4551": (3, 3023583.0), "461": (1, 2250.0), "5121": (2, 4925.16),
"542": (2, 129.44)})
if __name__ == "__main__":