Files
solduri2roa/docs/raport_lane_mapare.md
Marius Mutu ba4cbbf62c Lane-urile citire-xlsx si mapare: cititorul de foaie SAGA si pasul de mapare
citire_xlsx.py citeste .xlsx (openpyxl) si .xls (xlrd) in acelasi contract intern
ca extract_balanta.py. Prima foaie, nu dupa nume; potrivire exacta a coloanelor,
niciodata pe substring (TOTAL_DEB vs TOTAL_DEB_1); CONT ramane text.

mapare.py: propunere automata, corectii_<FIRMA>.xlsx detinut de utilizator si
mapare_<FIRMA>.xlsx regenerat de unealta, .TOATE/.RESTUL in ordinea exact ->
RESTUL -> TOATE, redenumirea sinteticului. Se opreste cu eroare la cont/acont
peste 4 caractere, coliziune accidentala si cont_saga inexistent in corectii.

Corectat in orchestrare: .xls-ul SAGA nu are inregistrare CODEPAGE, deci xlrd
cadea pe iso-8859-1 si strica denumirile ("FURNIZORI \x97 DEBITORI"). Citirea se
face cu encoding_override="cp1250", cu o verificare in test care pica daca revine.

18 teste trec, inclusiv poarta de regresie pe etalon.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EYeAtVxeS8m4oXekjX8Am2
2026-09-21 15:59:56 +03:00

3.2 KiB

Raport lane mapare - solduri2roa etapa 2

1. Facut

Doua fisiere noi, nimic altceva atins.

mapare.py (nou):

  • mapare.py:33-48 contractul: coloanele mapare_ / corectii_, sursele, regex .TOATE/.RESTUL, config parteneri, randul-exemplu comentat.
  • mapare.py:55-65 citeste_parteneri - doar citire din config/conturi_parteneri.csv.
  • mapare.py:68-79 separa / propune - propunerea automata; partener -> acont gol.
  • mapare.py:99-106 creeaza_corectii - fisier gol + antet + exemplu comentat.
  • mapare.py:109-139 citeste_corectii - antet exact, randurile # ignorate, duplicat = Stop.
  • mapare.py:142-151 _regula - ordinea exact -> .RESTUL -> .TOATE.
  • mapare.py:167-176 _verifica_corectii - cheie fara cont in balanta = Stop.
  • mapare.py:179-194 _verifica_coliziuni - colaps legal doar sub acelasi .TOATE/.RESTUL; partenerii si randurile exclus sunt in afara verificarilor.
  • mapare.py:197-236 aplica - merge-ul; lungimi > 4 = Stop.
  • mapare.py:239-260 scrie_mapare / genereaza_mapare - scrie maparea, creeaza corectiile doar daca lipsesc.

tests/test_mapare.py (nou): 10 teste (vezi 2).

2. Verificari

  • Comanda: py -m unittest discover -s tests -v
    • Rezultat: Ran 18 tests in 0.853s / OK (exit 0).
    • Include tests/test_regresie.py (2/2 OK) si tests/test_citire_xlsx.py al lane-ului paralel (6/6 OK). Zero esecuri.
  • Cens octeti > 0x7F: mapare.py 0, tests/test_mapare.py 0. LF, ca restul .py din proiect (genereaza_xlsx.py tot LF) - nu am introdus CRLF si nici diacritice.
  • Smoke pe date reale (in temp, fara sa scriu in radacina): mapare.aplica pe balanta_FUNDATIA.csv (82 conturi) si balanta_MASTERJOB.csv (81) - fara Stop, fara coliziuni.
  • git status: doar mapare.py si tests/test_mapare.py adaugate de mine (restul untracked sunt ale lane-ului citire-xlsx). Fara commit, fara git add.

3. Decizii si intrebari deschise

  • Propunerea automata: cont = sinteticul dinaintea punctului, acont = analiticul concatenat (toate caracterele, nu doar cifre - conturi_roa.dbf are acont2 alfanumeric X/PG). Peste 4 caractere -> Stop (ca genereaza_xlsx.py:196), nu trunchiere. Nu am preluat literal "primele max 4 caractere" din plan, care ar include punctul la sintetici de 3 cifre.
  • .TOATE/.RESTUL se aplica si randului sintetic (parinte), altfel o redenumire 409 -> 4091 ar cere doua corectii. Fara efect pe colaps: toate au aceeasi regula.
  • Coliziunea e permisa doar cand toate conturile au aceeasi cheie .TOATE/.RESTUL; un amestec exact + .TOATE pe aceeasi pereche da Stop.
  • exclus se intoarce in rezultatul structurat (pentru integrare), dar nu are coloana in mapare_ - contractul are exact 6 coloane.
  • cont gol intr-o corectie = pastreaza propunerea automata; acont gol = fara analitic.
  • PLANCONT nu se preia (cerut).

Nefacut: integrarea in generator (lane integrare). Nu am adaugat citire_balanta in modul; integrarea va pasa rows din genereaza_xlsx.citeste_balanta (suporta sold sau total_d/total_c).

4. Stare periculoasa

Niciuna: fara binar editat/write-back, fara procese ramase, fara fisiere scrise in radacina (maparile de test au fost doar in temp). Fara commit.