Cercetare: ambele formate SAGA (VFP xls/xlsx si Firebird .FDB), cu dovezi fisier:linie in docs/raport_sursa_saga_xlsx.md si raport_exporturi_saga_noua.md. Plan v3 dupa review de strategie si arhitectura: contract intern + trei cititoare, mapare in doua fisiere cu proprietari diferiti, lane-uri. Etalon de regresie anonimizat in tests/golden/ (sume si structura neatinse, zero IBAN si zero cod fiscal real). Tabela de corespondenta ramane ignorata. Iesirile de productie ies din git (raman pe disc); .gitignore acopera si copiile de baze de client si iesirile intermediare ale convertorului. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EYeAtVxeS8m4oXekjX8Am2
25 KiB
Review eng - plan etapa 2 (docs/plan_etapa2_convertor.md, PROPUNERE v2)
Lane: review-eng. Analiza statica, read-only. Nu am modificat planul, nu am scris cod, nu am dat commit.
Am aplicat skill-ul plan-eng-review (SKILL.md + sections/review-sections.md) ca analiza: unde skill-ul
cere AskUserQuestion, am scris DECIZII DE LUAT (sectiunea 3). Sursa de adevar pentru fiecare afirmatie
de mai jos este un fisier citit; unde am presupus, scrie explicit "presupunere".
Fisiere citite: planul; raport_sursa_saga_xlsx.md; raport_exporturi_saga_noua.md; decizii_import.md;
plan_solduri2roa.md; config_cont_ireg.md; raport_form_init_balanta.md; conturi_cu_analitice.md;
extract_balanta.py; genereaza_xlsx.py; .gitignore; CLAUDE.md; git status/log.
0. Step 0 - Scope challenge (rezultat)
- Ce exista deja si e refolosit corect:
extract_balanta.py(PDF, nemodificat - bine),genereaza_xlsx.py(constructia BALANTA/FACTURA, ramane), sablonulinit_facturi_balanta_note.xlsx, conventiile.TOATE/.RESTULdinconturi_roa.dbf(raport_sursa_saga_xlsx.md2.1-2.3), regulile validatedecizii_import.md. Planul nu reconstruieste ce exista - punct bun. - Minimum set: planul e rezonabil de minimal (3 cititoare + mapare + integrare + regresie).
Nu am gasit scope creep mare. Etapa 3 (baza reala, gbak, Firebird pe retea) e corect lasata afara
(
plan_etapa2_convertor.md:172-180). - Complexity check (skill: 8+ fisiere / 2+ clase noi = smell): planul atinge ~6-8 module noi
(
citire_xlsx,citire_fdb,mapare,extrage,genereaza, test) - la limita, nu peste. Nu declanshez reducere de scope pe acest motiv. - Completeness check: planul propune varianta completa pe hartie (poarta de identitate CSV, regresie pe productie) - dar doua dintre porti nu sunt executabile cu artefactele actuale (vezi C2, C3). Deci "complet" e declarat, nu livrabil.
- Distribution check: unealta interna, rulata de Marius pe masina lui. Nu necesita pipeline de publicare. Corect lasat afara.
1. Scoruri pe dimensiunile skill-ului
| Dimensiune (din skill) | Nota | Ce ar aduce-o la maxim |
|---|---|---|
| Scope challenge | 8/10 | Sa declare explicit ce se pierde cand "un singur CSV" nu e suficient (parteneri, totaluri, rollup) - vezi C5, C11 |
| Architecture / data flow | 5/10 | Contract intern real (balanta + parteneri + facturi), nu un singur CSV; regula de rollup FDB specificata (C2, C11) |
| Code quality / DRY | 6/10 | Clarifica cine detine cont/acont (mapare vs genereaza), evita re-encodarea pct. 16 in doua locuri (C4, C9) |
| Test coverage | 4/10 | Golden fixtures comise in git + framework de test; altfel poarta de regresie si poarta FDB nu ruleaza (C3, C5, sec. 2.5) |
| Performance | 7/10 | Agregare in SQL (GROUP BY pe 3 intervale de data), nu SELECT * in Python; charset WIN1250 (C15) |
| Failure modes / esecuri tacute | 5/10 | Trateaza explicit: verificarea Totaluri care dispare tacut, SCADENT NULL, cod fiscal gol (C5, C6) |
| Diagrame | 8/10 | Diagrama de pipeline exista (:35-39); lipseste diagrama de forma a datelor per cititor (ce coloane intra/ies) |
| Outside voice (cross-model) | n/a | Nu am putut rula Codex/subagent in acest lane; nu e o nota, e o limita de mediu |
Verdict de ansamblu: plan bun ca intentie, cu 3 gauri de executie care il opresc sa fie "gata" (poarta FDB fara regula, poarta de regresie fara fixture, sursa partenerilor care contrazice productia).
2. Constatari
Format: [Px] (confidence N/10) ce e in plan / ce e in neregula / ce propun.
C1 [P1] (confidence 9/10) - CONFIG_CONT_IREG nu reproduce setul de parteneri validat
- In plan:
:119-122- "Ce NU se configureaza aici: care conturi merg pe parteneri. RamaneCONFIG_CONT_IREGdin Oracle ... e sursa de adevar a ROACONT". - In neregula: codul validat in productie foloseste alt set.
genereaza_xlsx.py:47-53:PARTENER_BANCA={5121,5124},PARTENER_SINTETIC={401,4092,4111,461,462,4551},PARTENER_FARA_ANALITICE={5311}. Inconfig_cont_ireg.md:89-91(CU_INREGISTRARI=1) nu apar 5121, 5124, 5311, iar in lista Oracle apar 404,408,4091-4094,418,419 etc. pe caregenereazaNU le trateaza ca parteneri. Deci: daca unealta decide partenerii doar din Oracle, 5121/5124/5311 (decisiuni validate,decizii_import.mdpct. 14-15) devin conturi obisnuite -> regresie tacuta pe MASTER (5121.01 PIRAEUS). - Propun: sursa de adevar operationala = o lista in repo, derivata din setul validat + reconciliata
explicit cu
CONFIG_CONT_IREG; Oracle ramane consultativ. Documenteaza divergenta (Oracle listeaza trezoreriile caCU_INREGISTRARI=0, dardecizii_import.md:52-55arata ca formularul are liste hardcodate separate:1104/:1107).
C2 [P1] (confidence 9/10) - agregarea REGISTRU pentru balanta e sub-specificata; poarta de identitate nu e demonstrabila
- In plan:
:62-64- "balanta: agregare peREGISTRUla data ceruta" si:75- "cititorul 3 (FDB) si cititorul 2 (xlsx) trebuie sa produca acelasi CSV". - In neregula: (a) balanta exportului are 4 marimi, nu una:
DEB_INIT/CRED_INIT(inceput de an),DEB_PREC/CRED_PREC(inceput de perioada),RULAJ_*(perioada),FIN_*(sold) - deci sunt necesare doua praguri de data, nu unul (raport_exporturi_saga_noua.mdC.4:288-297 o arata pe cazul641din 2025-11-30 ->DEB_INIT). (b) exportul ruleaza analiticul in sintetic:REGISTRUare401.00002, exportul are401(C.4:294,298-301), iarC.5:303-304spune explicit ca "regula exacta de includere sintetic/analitic nu se poate stabili". Fara regula de rollup, agregarea dinCONT_D/CONT_Cproduce401.00002, iar CSV-ul nu e identic - testul pica din cauza regulii lipsa, nu a unui bug de cititor. - Propun: specifica algoritmul in plan (nu in cod): grupare pe sintetic (
stanga punctului), 3 intervale de data (an, perioada, in perioada) +FIN=PREC+RULAJ; declara explicit ca testul pe firma de joaca dovedeste doar cazul sintetic (:80-82). Adauga in plan un al doilea prag (an).
C3 [P1] (confidence 9/10) - poarta regresie nu are fixture comis in git
- In plan:
:167- "xlsx-urile noi identice cu cele importate deja in productie";:154-156-.gitignoreignorainit_*.xlsxsi "fisierele de productie au fost scoase cugit rm --cached". - In neregula:
git statusarataD init_FUNDATIA_2025_12.xlsx,D init_MASTER_2025_12.xlsx, iar.gitignore:6ignorainit_*.xlsx. Criteriul de terminare al lane-ului de regresie compara cu fisiere care nu sunt in repo -> pe alt checkout/masina poarta nu se poate rula, iar rezultatul nu e reproductibil nici de autor peste o luna. - Propun: comite o copie golden sub
tests/golden/(exceptie in.gitignore), sau un manifest de hash-uri + regulile de numarare; atunci "identice" devine verificabil automat. PDF-urile sunt deja in git (bine), dar output-ul-tinta lipseste.
C4 [P1] (confidence 8/10) - "genereaza ia cont/acont din mapare" se bate cap in cap cu logica pastrata in cod
- In plan:
:143-146- "singura schimbare de fond este ca iacont/acontdin mapare in loc sa le calculeze";:103-104- pre-completarea e generica ("primele max 4 caractere" + "cifrele analiticului concatenate, max 4"). - In neregula: (a) randurile de diferenta NU exista in balanta, deci nu pot veni din mapare;
sunt calculate (
genereaza_xlsx.py:204-212,243-249) - planul nu spune cine le mai emite. (b) formaacontdepinde de categorie:401-> acont gol,5121-> acont completat identic pe BALANTA si FACTURA (decizii_import.mdpct. 16;genereaza_xlsx.py:219-249,252-283). Regula generica de pre-completare ar pune acont pe401-> chei diferite -> dublare tacuta (pct. 16). - Propun: decide cine detine
acont: ori pre-completarea din mapare e constienta de categorie (partener -> pct. 16, analitic -> regula generica), origenereazaramane singurul care decide forma pentru parteneri, iar maparea doar suprascrie. A doua e mai putin riscanta (codul deja validat).
C5 [P2] (confidence 8/10) - verificarea "Totaluri" dispare tacut pe drumurile xlsx/FDB
- In plan:
:54-este_total = golpe exportul de foaie de calcul;:56- xls/xlsx nu au rand de totaluri. - In neregula:
genereaza_xlsx.py:89-94cauta randul "Totaluri" si:330,381-390face cross-check-ul net xlsx vs net Totaluri doar daca il gaseste. Pe drumurile noiciteste_totaluriintoarceNone, deci cea mai puternica verificare cap-la-cap se omite silentios - exact tiparul de esec tacut pe care planul il interzice in alta parte. - Propun: inlocuieste verificarea pierduta cu una echivalenta: pe FDB,
SUM(REGISTRU)pe latura la data ceruta = netul balantei (cifra de control reala); pe xlsx, re-calculeaza netul din coloanele citite. Daca nu exista echivalent, scrie explicit inverificare_<firma>.md"verificare indisponibila", nu o sari.
C6 [P2] (confidence 8/10) - "cod fiscal real" si "scadenta reala" nu sunt garantate de baza
- In plan:
:65-66- "Codul fiscal real vine de aici" si:134- FDB da "cod fiscal real si scadenta reala ... nimic lipseste". - In neregula: in baza de joaca,
FURNIZORIare***('00001','ROMFAST','','401.00001')***- cod fiscal gol (raport_exporturi_saga_noua.mdC.3:264), iar singurulINTRDareSCADENT=NULL(C.3:274). Deci "real" poate insemna gol/NULL pe date reale. - Propun: pastreaza fallback-urile de azi (cod provizoriu
<cont>.<analitic>, scadenta = ultima zi a lunii) ca default cand FDB da NULL/gol, si raporteaza cate randuri au cazut pe fallback.
C7 [P2] (confidence 7/10) - semantica MANUAL in merge e nedeclarata
- In plan:
:100staree "nu" (need editabila);:114-117- "randurileMANUALraman intacte". - In neregula: nu se spune cine si cum face trecerea
AUTO -> MANUAL. Daca utilizatorul editeazacont/acont, cine observa? Cum se distinge o editare de o re-preluare a aceleiasi valori? La a doua rulare, daca regula auto ar produce exact valoarea editata, randul ramane AUTO si poate fi suprascris mai tarziu. De asemenea: un MANUAL care devineDISPARUTsi reapare - ce stare are? - Propun: defineste regula (ex.: orice modificare a
cont/acont/exclusfata de valoarea pre-completata marcheazaMANUAL;staredevineREADONLY), si trateaza revenireaDISPARUT -> MANUAL.
C8 [P2] (confidence 8/10) - regula de coliziune se bate cu .TOATE/.RESTUL
- In plan:
:148-150- opreste cu eroare daca "doua randuri produc acelasi(cont, acont)fara sa fie acelasi cont SAGA";:106-109-<sintetic>.TOATE= toate analiticele merg pe acelasi(cont, acont)ROA. - In neregula:
.TOATE/.RESTULsunt agregare intentionata a mai multor conturi SAGA pe aceeasi cheie ROA, exact ce regula de mai sus declara eroare. Asa cum e scris, tool-ul se opreste pe cazul suportat. In plus, pentru conturile-parteneraconte irelevant (pct. 16) - nu trebuie sa intre in verificarea de coliziune. - Propun: scuteste agregarea intentionata (acelasi
cont_sagade baza sub.TOATE/.RESTUL) si exclude partenerii din verificarea de coliziune; raporteaza doar coliziunile neintentionate.
C9 [P2] (confidence 7/10) - redenumirea sinteticului (409 -> 4091) nu vine din noul mapare
- In plan:
:106-112preia doar.TOATE/.RESTULdinconturi_roa.dbf; pre-completarea:103-104copiaza sinteticul SAGA. - In neregula:
raport_sursa_saga_xlsx.md2.1/2.3 arata caconturi_roa.dbfface si redenumire de sintetic (409 -> 4091,431 -> 4311,4374 -> 4371). Regula de pre-completare nu o produce, deci o firma cu409iese cucont=409in loc de4091. Ramane corectabila manual, dar planul pretinde reutilizare. - Propun: semeneaza maparea din
conturi_roa.dbfcand exista (CONT2/ACONT2), sau adauga tabela de redenumire explicita.
C10 [P2] (confidence 8/10) - selectia foii nu e specificata si difera intre surse
- In plan:
:48-56(cititorul 2) nu spune cum alege foaia;raport_sursa_saga_xlsx.mdspune ca foaia VFP se numestebalanta, iarraport_exporturi_saga_noua.mdA.2:110 spunexl(xls) vsSheet1(xlsx). - In neregula: un cititor care cauta fix
Sheet1pica pe exportul VFP; unul care iaactivepica pe fisiere cu foi ascunse. - Propun: alege prima foaie, sau cauta dupa nume in lista cunoscuta, cu eroare clara daca nu exista.
C11 [P2] (confidence 7/10) - "un singur CSV intern" nu e suficient pentru nivelul 3-4 de FACTURA
- In plan:
:41-42- "Restul lantului nu stie din ce sursa vine"; dar:136parametri--furnizori/--clienti/--facturi/--fdbintra in generator, nu in cititor. - In neregula: numele partenerului, codul fiscal real si detaliul de factura nu stau in CSV-ul de
balanta; sunt intrari separate. Diagrama
:35-39sugereaza un singur flux, iar contractul real are 3 intrari. Nu e fatal, dar planul se contrazice si ascunde o dependenta. - Propun: scrie contractul real:
balanta_<FIRMA>.csv+ optionalparteneri_<FIRMA>.csv+ optionalfacturi_<FIRMA>.csv;genereazaaccepta cele doua optionale si degradeaza la nivelul corespunzator (:124-134).
C12 [P3] (confidence 7/10) - coloana TIP (a 13-a) nu are consumator
- In plan:
:55- "ColoanaTIP(A/P) se duce in CSV ca a 13-a coloana, optionala". - In neregula:
genereaza_xlsx.pynu citeste niciodataTIP; natura D/C vine din latura hardcodata (:43) si din net. Deci coloana e greutate moarta sau scop nedeclarat. - Propun: fie o lasi afara, fie ii dai un consumator concret (ex. validare latura/cont de partener).
C13 [P3] (confidence 6/10) - facturile de clienti din FDB sunt speculativ specificate
- In plan:
:67-68-IESIRI/IES_DET-> facturi clienti. - In neregula:
raport_exporturi_saga_noua.mdC.3:280 daIESIRI(0 randuri) siIES_DETcu structura "-" (necunoscuta); firma are 0 clienti. Deci SQL-ul de facturi clienti e presupunere. - Propun: marcheaza partea de clienti ca neverificata si nu o promite ca livrabil pana nu ai o baza
reala (Etapa 3,
:175).
C14 [P3] (confidence 6/10) - Oracle (retea + credentiale) intr-un flux de fisiere offline
- In plan:
:119-122- partenerii vin dinCONFIG_CONT_IREG(Oracle local). - In neregula: aduce o dependenta de DSN/VPN/tnsnames si de parola din
D:\ROA\ROACONT\docs\oracle_parola_standard.secret(config_cont_ireg.md:7,17) intr-o unealta care altfel lucreaza doar pe fisiere. Esti pe acelasi LAN (10.0.20.121), deci e fezabil, dar adauga moduri de esec (DNS, cont SQL*Plus, parola expirata) pentru un pas care se schimba rar. - Propun: instantaneu versionat (
config/cont_ireg.csv) regenerat de un script mic cand Oracle se schimba; unealta citeste instantaneul offline. Vezi si C1.
C15 [P3] (confidence 6/10) - performanta FDB si charset
- In plan:
:58-64nu spune cum se agrega. - In neregula: la clienti cu
REGISTRUmare,SELECT *+ agregare in Python e lent si consuma memorie; iarCONT_D/CONT_Csi denumirile au diacritice/CP1250. - Propun: agregare in SQL (
GROUP BY cont, CASE pe intervale de data),charset=WIN1250(raport_exporturi_saga_noua.mdC.2:230 foloseste deja WIN1250).
C16 [P3] (confidence 5/10) - potrivirea numelor de coloane trebuie exacta, nu substring
- In plan:
:51-53compara antetul case-insensitive. - In neregula: exportul are si
DEB_PRECsiDEB_PREC_1(setul_1,raport_sursa_saga_xlsx.md1.1). O potrivire prinin/startswith poate alege coloana gresita tacut. - Propun: normalizeaza si compara egalitate exacta dupa nume; ignora explicit coloanele
_1.
2.5 Test review (per lane - ce test automat lasa fiecare)
Azi nu exista niciun test (tests/ lipseste; pytest neinstalat, verificat). Skill-ul cere 100%
acoperire; propun concret pentru fiecare lane:
| Lane | Test lasat in urma | Observatie |
|---|---|---|
citire-xlsx |
tests/test_citire_xlsx.py: CSV produs din exemple/saga-sqlite-balanta-09-2026.xlsx == CSV golden comis; + relatiile total=prec+rulaj, sold=total pe toate randurile |
Fixture e deja in git (exemple/) |
mapare |
tests/test_mapare.py pe functia de merge: MANUAL supravietuieste, analitic nou -> NOU, disparut -> DISPARUT, coliziune neintentionata -> Stop, .TOATE NU e coliziune |
Pur logic, fara dependinte |
citire-fdb |
tests/test_citire_fdb.py: CSV produs din D:\SAGA250909\0001\CONT_BAZA.FDB == CSV golden comis (inghetat o data). Live, doar daca baza exista (skip motivat) |
Baza nu e in repo -> testul depinde de mediu; de aceea ingheata CSV-ul |
integrare |
rulare cap-la-cap pe firma de joaca, comparatie cu xlsx golden | Necesita C3 |
regresie |
tests/test_regresie.py: init_FUNDATIA_2025_12.xlsx si init_MASTER_2025_12.xlsx regenerate == golden comis |
Necesita C3 (altfel nu ruleaza) |
Problema transversala: fara fixture comis (C3), 2 din 5 lane-uri nu pot demonstra criteriul de
terminare. Recomand unittest din stdlib ca sa nu adaugi dependinte (CLAUDE.md: doar pdfplumber,
openpyxl, xlrd, firebird-driver), sau pytest acceptat explicit ca dependinta dev-only.
Acoperire estimata azi: 0%. Dupa cele 5 testuri de mai sus, portile reale ale planului devin
automate. Cazurile pe care planul insusi le declara neacoperite (:80-83: 0 analitice, 2 furnizori,
0 clienti, 1 factura) raman neacoperite pana la o baza reala (Etapa 3) - corect de raportat, nu de ascuns.
2.6 Failure modes (esec + test + eroare vizibila?) - cele fara test SI fara mesaj = critical gap
| Failure mode | Test? | Eroare clara? | Verdict |
|---|---|---|---|
| Rollup FDB analitic->sintetic gresit (C2) | Nu (poarta nu are regula) | Nu, iese un CSV diferit | CRITICAL GAP |
| Verificarea Totaluri dispare tacut (C5) | Nu | Nu | CRITICAL GAP |
| Regresie fara golden -> cineva crede ca a trecut (C3) | Nu | Nu | CRITICAL GAP |
| Editare MANUAL suprascrisa la a 2-a rulare (C7) | Nu | Nu | CRITICAL GAP |
Coliziune .TOATE oprita ca eroare / coliziune reala ratata (C8) |
Nu | Da (Stop) / Nu | Risc mediu |
fbclient.dll lipsa / cale gresita |
Nu | Da (exceptie driver) | Risc mic |
| Foaie gresita aleasa (C10) | Nu | Depinde | Risc mediu |
| Cod fiscal gol / SCADENT NULL din FDB (C6) | Nu | Nu (valoare proasta) | Risc mediu |
| Facturi clienti FDB pe structura necunoscuta (C13) | Nu | Nu | Risc mediu, amanat |
2.7 Required outputs (cerute de skill)
NOT in scope (plan :16-17, :172-180): import registru jurnal; balante lunare; nomenclator
parteneri lunar; baza .FDB reala; procedura gbak pentru client; Firebird prin retea. Corect
delimitat. De adaugat explicit: pipeline de distributie (nu exista, unealta interna) si testarea pe
analitice reale (amanata la Etapa 3).
What already exists (reutilizat): extract_balanta.py (nemodificat), genereaza_xlsx.py
(constructie + verificari), sablonul, decizii_import.md, conturi_roa.dbf (conventii), baza de joaca
- exporturile din
exemple/. Planul reutilizeaza bine; singurul lucru reconstruit inutil ar fiTIP(C12) si, potential, setul de parteneri (C1).
Diagrams: exista diagrama de pipeline (:35-39). Lipseste o diagrama de forma a datelor: pentru
fiecare cititor, ce coloane intra si ce iese in CSV (utila exact pentru C5/C10/C11/C16).
Worktree parallelization:
| Step | Module | Depinde de |
|---|---|---|
| citire-xlsx | citire_xlsx |
- |
| mapare | mapare |
- |
| citire-fdb | citire_fdb |
citire-xlsx (contract CSV comun) |
| integrare | extrage, genereaza |
toate |
| regresie | tests, golden |
integrare |
Lane A: citire-xlsx -> citire-fdb (secvential, contract comun). Lane B: mapare (independent).
Apoi integrare, apoi regresie. Fara conflict de module intre A si B. Planul are deja dependenta
citire-fdb -> citire-xlsx (:165), corect.
Implementation Tasks (sinteza):
- T1 (P1) - scrie regula de agregare/rollup FDB in plan (C2).
- T2 (P1) - comite golden fixtures pentru regresie (C3).
- T3 (P1) - reconciliaza setul de parteneri cu productia (C1).
- T4 (P1) - decide proprietarul
cont/acontsi trata diferentele (C4). - T5 (P2) - inlocuieste verificarea Totaluri pe drumurile noi (C5).
- T6 (P2) - specifica merge-ul
MANUAL/coliziuni/.TOATE (C7, C8). - T7 (P2) - selectie foaie + fallback cod fiscal/scadenta (C6, C10).
3. DECIZII DE LUAT DE MARIUS
D1 - Sursa setului de conturi cu parteneri
- A) Interogare Oracle
CONFIG_CONT_IREGla fiecare rulare (retea + credentiale). - B) Instantaneu versionat in repo (
config/cont_ireg.csv), regenerat de un script mic; setul operational (5121/5124/5311 etc.) adaugat explicit langa el. (recomandat) - C) Hardcodeaza setul validat in
genereaza_xlsx.py. - Recomandare: B - offline pentru flux, dar totusi auditat si actualizabil; A aduce esecuri de
retea intr-un pas care se schimba rar; C e exact "lista hardcodata in
.prg" pe care planul (:121) vrea sa o evite. Motiv: explicitudine + portabilitate.
D2 - Regula de agregare FDB (ca sa treaca poarta de identitate)
- A) Rollup la sintetic (stanga punctului) + 3 intervale de data; test pe firma de joaca dovedeste doar sinteticul. (recomandat)
- B) Pastreaza analiticul ca atare si cere exportul SAGA tot la nivel analitic.
- C) Amaneaza FDB pana ai o baza reala cu analitice.
- Recomandare: A - e singurul mod in care poarta
:75poate pica/trece pe datele existente; C amana tot lane-ul, B muta problema la client.
D3 - Fixture pentru poarta de regresie
- A) Comite copiile
init_FUNDATIA_2025_12.xlsx/init_MASTER_2025_12.xlsxsubtests/golden/(exceptie in.gitignore). (recomandat) - B) Manifest de hash-uri + un CSV golden al continutului.
- C) Renunta la poarta de regresie.
- Recomandare: A - e poarta finala a planului (
:167-170); fara fixture nu exista; continutul e date de test validate in productie, nu secrete.
D4 - Cine detine cont/acont si randurile de diferenta
- A) Maparea pre-completeaza constient de categorie (partener pct. 16 vs analitic),
genereazadoar citeste. (planul de azi) - B)
genereazaramane singurul care decide forma pentru parteneri; maparea doar suprascrie; randurile de diferenta raman calculate in cod. (recomandat) - C) Reescrie
genereazacomplet pe mapare, inclusiv diferentele (rescriere mai mare). - Recomandare: B - codul de parteneri e deja validat in productie (
decizii_import.mdpct. 16,genereaza_xlsx.py:219-303); re-encodarea lui in generatorul de mapare dubleaza regula (DRY) si risca regresia pe MASTER.
D5 - Verificarea echivalenta "Totaluri" pe drumurile xlsx/FDB
- A) Adauga un check real:
SUM(REGISTRU)pe latura la data ceruta = netul balantei generate. (recomandat) - B) Doar avertizare explicita in raport ca verificarea nu e disponibila.
- C) Ignora.
- Recomandare: A - planul declara ca nu ajusteaza cifre ca sa treaca verificari (
CLAUDE.md); verificarea trebuie inlocuita cu una reala, nu doar scoasa.
D6 - Framework de test
- A)
unitteststdlib (fara dependinte noi). (recomandat) - B)
pytest(dependinta dev-only). - C) Scripturi shell/py ad-hoc, fara framework.
- Recomandare: A - respecta "fara alte dependinte"; C nu da raportare de totaluri/esecuri.
4. Ce am verificat si ce NU am putut verifica
Verificat (dovada in fisier):
genereaza_xlsx.pyciteste din CSV doarcont/denumire/total_d/total_c/este_total; nu citestesold_*, nu citesteTIP, iar cross-check-ul Totaluri depinde de un rand care exista doar in PDF (:65-94,196-304,321-390).extract_balanta.pyscrie 12 coloane;pagina/este_totalsunt coloanele care nu au echivalent in export (:232-237, plan:54).- Setul de parteneri din cod (5121/5124/5311) contrazice
CU_INREGISTRARIdin Oracle (genereaza_xlsx.py:47-53vsconfig_cont_ireg.md:89-91). - Baza de joaca: 0 analitice in export,
FURNIZORI.COD_FISCALgol pentruROMFAST,INTRD.SCADENT=NULL, regulile de rollup analitic->sintetic declarate necunoscute (raport_exporturi_saga_noua.mdA.1, C.3, C.4, C.5). .gitignoreignorainit_*.xlsx;git statusarata xlsx-urile de productie scoase din index.- Mediu:
xlrd 2.0.2sifirebird-driverinstalate;pytestNU;tests/NU.
Nu am putut verifica (si nu am inventat):
- Daca
409 -> 4091sau alte redenumiri sunt necesare pe firmele viitoare (nu apar in FUNDATIA/MASTER). - Structura
IES_DETdin Firebird (raportul o da ca necunoscuta) - partea de facturi clienti e presupunere pana la o baza reala. - Daca
CONFIG_CONT_IREGs-a schimbat fata de dump-ul dinconfig_cont_ireg.md(nu am interogat Oracle). - Regula exacta de includere sintetic/analitic in exportul SAGA (
C.5o declara nedeterminabila). - Comportamentul real al formularului pe combinatia "acont gol pe FACTURA + acont completat pe BALANTA"
pe alte conturi decat cele deja tratate (am luat de bun
decizii_import.mdpct. 16).
Nu am rulat Codex/outside voice (mediu de subagent, fara Codex) si nici testul real de identitate CSV (nu am voie sa rulez VFP/cod in acest lane; oricum planul nu are inca cititoarele).
Stare: niciun fisier modificat in afara acestui raport; fara commit; fara procese pornite; fara date de test consumate.