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
28 KiB
Review CEO - planul etapei 2 (plan_etapa2_convertor.md, PROPUNERE v2)
Review de strategie, aplicat ca analiza (fara intrebari interactive). Nu s-a modificat planul.
Nu s-a scris cod. Scorurile si modurile de mai jos sunt o adaptare a skill-ului plan-ceo-review
la un plan intern, cu un singur utilizator (Marius).
Documente citite integral: plan_etapa2_convertor.md, plan_solduri2roa.md, decizii_import.md,
raport_sursa_saga_xlsx.md, raport_exporturi_saga_noua.md, raport_form_init_balanta.md,
config_cont_ireg.md, conturi_cu_analitice.md, verificare_FUNDATIA.md, CLAUDE.md,
extract_balanta.py, genereaza_xlsx.py, .gitignore.
0. Modul de review propus (Step 0F adaptat)
Skill-ul cere alegerea unui mod. Nu pot intreba, deci il propun si il justific: SELECTIVE EXPANSION cu felie de HOLD - planul e pe directia corecta, dar are 2-3 bucati care nu-si justifica existenta acum (cititorul FDB fara date reale, complexitatea merge-ului de mapare) si 1-2 bucati lipsa (contractul intermediar, sursa setului de parteneri). Nu e "go big": produsul e intern, utilizatorul e unul singur, migrarile sunt rare. Nu e nici "reduction": cateva lucruri din plan sunt chiar indispensabile (contractul de CSV, maparea per firma, regresia). Motivul principal de a nu face HOLD pur: planul nu a evaluat nicio alternativa de arhitectura (vezi C10), deci "scopul e acceptat" nu se poate sustine inca.
1. Scoruri pe dimensiunile skill-ului
| # | Dimensiune (skill) | Nota | Ce ar duce-o la 10 |
|---|---|---|---|
| 1 | Premisa corecta (0A) | 6/10 | Raspuns explicit la "cat de des migram?" si "PDF e suficient cat timp clientul nu da baza?". Planul presupune ca FDB e drumul viitor fara sa spuna cat de des ajunge acolo. |
| 2 | Refolosire cod existent (0B) | 8/10 | Nume per sub-problema la ce cod exista deja: reader PDF neatins; tot restul vine din genereaza_xlsx.py. Lipseste doar explicitarea setului de parteneri hardcodat (C1). |
| 3 | Alternative de implementare (0C-bis) | 3/10 | Planul are o singura arhitectura ("un format intern, trei cititoare"). Lipsesc varianta minima (un script --sursa) si varianta "FDB ca sursa primara". |
| 4 | Aliniere cu starea ideal 12 luni (0C) | 7/10 | O comanda migreaza.py --firma --an --luna --sursa cu mapare persistenta. Planul merge exact spre ea, dar nu scrie cum arata finalul (interfata, contract). |
| 5 | Arhitectura (S1) | 7/10 | Contractul intermediar este definit complet, negru pe alb (C4). Acum "acelasi CSV + optional doua fisiere" e o intentie, nu o specificatie. |
| 6 | Harta erorilor / rescue (S2) | 4/10 | 3 conditii de stop sunt numite (bun), dar lipsesc clasele de eroare pentru cititoare (fisier lipsa, antet schimbat, FDB blocat) si ce vede utilizatorul (C16). |
| 7 | Securitate / date de client (S3) | 6/10 | .gitignore extins pentru .FDB, parteneri_*.csv, facturi_*.csv (C8). Risc mic dar real: datele de partener sunt PII/financiar. |
| 8 | Data flow / edge cases (S4) | 6/10 | Regula de periodizare REGISTRU -> prec/rulaj/fin scrisa si testata pe o luna cu miscari inainte (C3); tratarea scadent NULL (C15). |
| 9 | Calitatea codului (S5) | 7/10 | Decizia despre complexitatea merge-ului de mapare (C6); altfel e curat si reutilizeaza ce exista. |
| 10 | Teste / porti de verificare (S6) | 6/10 | Poarta FDB-vs-xlsx declarata ca ceea ce este (nu inchide lane-ul pe date de joaca, C2) + testul de regresie rulat la fiecare lane, nu doar la final (C5). |
| 11 | Performanta (S7) | 8/10 | Nimic de facut; FDB e o copie citita o data, agregare unica. De notat doar ca firma de joaca nu spune nimic despre timp pe o baza reala. |
| 12 | Observabilitate (S8) | 6/10 | Raportul verificare_<firma>.md extins cu numar de parteneri/facturi, sursa folosita si invariantul care inlocuieste "Totaluri" pe sursele xlsx/fdb (C9). |
| 13 | Deploy / rulare la client (S9) | 5/10 | Procedura de copiere a bazei (gbak) mutata in Etapa 2 odata cu cititorul FDB, sau cititorul FDB declarat explicit "intern, nefolosibil la client" (C7/C12). |
| 14 | Traiectorie pe termen lung (S10) | 7/10 | E ok. Reversibilitate 5/5 (scripturi interne, git). Singura datorie: conturi_cu_analitice.md contrazice decizii_import.md pct.15 pe 5125 (C14). |
| 15 | Design / UX intern (S11) | 5/10 | mapare_<FIRMA>.xlsx este interfata omului: header congelat, dropdown la stare, evidentiere NOU/DISPARUT. Planul nu spune nimic despre aspectul lui. |
Scor mediu (nesponderat): ~6,1/10. Planul este peste media unui plan intern, dar isi asuma prea mult pe incredere (FDB) si prea putin pe specificatie (contract, sursa parteneri).
2. Constatari (fiecare: ce e in plan -> ce e in neregula -> ce propun)
C1. Conturile cu parteneri: planul spune "sursa de adevar = Oracle", dar codul le are hardcodate, iar cele doua liste nu coincid
In plan (sectiunea "Pasul de mapare"): "Ce NU se configureaza aici: care conturi merg pe
parteneri. Ramana CONFIG_CONT_IREG din Oracle ... e sursa de adevar a ROACONT ... Programele
vechi aveau lista hardcodata in .prg, exact ce nu repetam."
In neregula: planul nu spune NICIODATA cum ajunge configuratia Oracle in unealta. Iar codul de
azi o are hardcodata: genereaza_xlsx.py:43-53 (PARTENER_SINTETIC = {401,4092,4111,461,462,4551},
PARTENER_BANCA = {5121,5124}, PARTENER_FARA_ANALITICE = {5311}). Lista din Oracle
(config_cont_ireg.md:89-91) are 33 de conturi cu CU_INREGISTRARI=1 (403, 404, 408, 409,
4091, 4093, 4094, 4118, 413, 418, 419, 426, 4511, 456, 457, 471, 472, 4754, 542, 8051, 1621, 167,
232, 234, 261, 2678, 2691 ...). Daca unealta citeste fidel Oracle, comportamentul se schimba fata
de ce s-a validat in productie (unde doar lista mica a fost folosita). Nu e o eroare, dar este o
divergenta nerezolvata intre doua surse pe care planul le trateaza ca sinonime.
Propun: alege o singura sursa si scrie-o in plan:
(a) snapshot local versionat config/cont_ireg.csv (coloanele cont, fel_cont, cu_inregistrari),
generat de un SQL documentat, citit de unealta - fara dependinta Oracle la rulare;
(b) pastrezi setul hardcodat (dar atunci scoti din plan afirmatia "Oracle e sursa de adevar");
(c) citire live Oracle - de evitat (contra "fara alte dependinte").
Recomand (a): o sursa, zero credentiale la rulare, si se vede in git cand se schimba.
C2. Cititorul FDB e cel mai valoros si cel mai putin verificat; poarta lui de terminare e aproape vida
In plan (sectiunea "Poarta de verificare"): "cititorul 3 (FDB) si cititorul 2 (xlsx) trebuie
sa produca acelasi CSV ... Acesta este criteriul care inchide lane-ul citire-fdb, nu 'ruleaza fara
eroare'."
In neregula: planul recunoaste singur (aceeasi sectiune) ca firma de joaca "are doar conturi
sintetice, niciun analitic... 2 furnizori, 0 clienti, 1 factura". Deci poarta care "inchide"
lane-ul nu atinge exact partile riscante: analitice, parteneri, facturi per partener, cod fiscal,
scadenta. Pe 10 randuri sintetice, orice cititor plauzibil trece. Poarta e utila ca fumegatoare,
nu ca definitie de "gata". In plus, dovada din raport_exporturi_saga_noua.md C.3/C.5 arata ca
singurul rand din INTRD are SCADENT=NULL si NEACHITAT=0 - deci nici "scadenta reala" nu e
demonstrata.
Propun: muta obtinerea unei baze .FDB reale + exportul ei din Etapa 3 in Etapa 2, ca
preconditie pentru lane-ul citire-fdb (nu pentru tot planul). Cat timp nu exista, scrie in
plan ca citire-fdb se poate livra doar ca "pregatit, neverificat pe analitice". Nu numi poarta
"criteriu care inchide lane-ul".
C3. Semantica de periodizare REGISTRU -> prec/rulaj/fin nu este definita (inima corectitudinii FDB)
In plan (sectiunea "Cititorul 3 - Firebird"): "balanta: agregare pe REGISTRU la data ceruta.
... nu se citeste CONTURI.DEB_PREC, se agrega REGISTRU."
In neregula: planul nu defineste ce inseamna "la data ceruta" si cum se separa
DEB_PREC (inceput de perioada), RULAJ_D (perioada) si FIN_D (final). Exportul SAGA are
4 notiuni distincte (raport_exporturi_saga_noua.md A.1, C.4): DEB_INIT = inceput de an,
DEB_PREC = inceput de perioada, RULAJ = perioada, FIN = final. CSV-ul tinta cere
prec_d/prec_c, rulaj_d/rulaj_c, total_d/total_c, sold_d/sold_c. Daca intervalele nu sunt
definite exact, CSV-urile FDB si xlsx nu vor fi identice pe date reale - vor coincide doar pe
firma de joaca, unde toate miscarile sunt inainte de perioada (8 note in REGISTRU).
Propun: scrie in plan formulele exacte, de obicei:
prec = SUM(suma) unde DATA < prima_zi_a_lunii_cerute, rulaj = SUM unde luna_ceruta,
total = prec + rulaj, sold = total pe net; si pentru DEB_INIT separat, pentru sold_in.
Adu ca test o luna cu miscari in 3 locuri: anul precedent, inainte de luna, in luna.
C4. Contractul intermediar (CSV + parteneri + facturi) nu este specificat
In plan (sectiunea "Arhitectura"): "Toate cele trei cititoare produc acelasi CSV ... plus -
optional - doua fisiere de parteneri." Si la "Randurile FACTURA": parametrii
--furnizori <fisier>, --clienti <fisier>, --facturi <director>, --fdb <cale>.
In neregula: nu exista nume de fisiere, coloane si relatia dintre "fisierele de parteneri" ale
pasului de citire si flagurile generatorului. In plus, cititorul 2 propune TIP ca "a 13-a
coloana, optionala", in timp ce reader 1 (extract_balanta.py) ramane "nemodificat" si scrie
12 coloane (pagina, cont, denumire, prec_d, prec_c, rulaj_d, rulaj_c, total_d, total_c, sold_d, sold_c, este_total). Rezulta doua contracte care trebuie tolerate simultan, fara sa fie scris.
Propun: fixeaza in plan:
balanta_<FIRMA>.csv- exact 12 coloane, neschimbat;TIPnu se adauga (nu e nevoie in generator;genereaza_xlsx.pynu citestetip);parteneri_<FIRMA>.csv-cont_saga, denumire, cod_fiscal, analitic;facturi_<FIRMA>.csv-cont_partener, numar, data, scadent, neachitat;- preconditii de potrivire nume de coloana: exact, case-insensitive (nu substring -
TOTAL_DEBeste prefix alTOTAL_DEB_1, iar un match partial ar lua coloana gresita).
C5. Regresia pe FUNDATIA + MASTER trebuie rulata dupa fiecare lane care atinge generatorul, nu doar la final
In plan (tabelul "Ordinea de lucru"): lane regresie depinde de integrare; "Poarta finala:
lane-ul regresie. Daca noul flux nu reproduce randurile celor doua xlsx-uri validate in productie,
nu e gata."
In neregula: planul schimba doua lucruri in zona validata in productie: (1) cont/acont vin
din mapare in loc sa fie calculate, (2) setul de conturi cu parteneri (C1). Ambele pot muta cifre.
Daca regresia ruleaza doar la final, un bug introdus in lane-ul mapare se descopera dupa toate
celelalte lane-uri.
Propun: poarta de regresie FUNDATIA + MASTER se ruleaza dupa mapare si dupa integrare
(de doua ori), nu o singura data la final. Este cel mai ieftin test de siguranta din tot planul:
doua PDF-uri in git, doua xlsx de referinta pe disc.
C6. Merge-ul de mapare (MANUAL/NOU/DISPARUT + .TOATE/.RESTUL) este cea mai mare bucata de cod pentru un utilizator unic
In plan (sectiunea "Pasul de mapare"): "Merge la rulare noua, nu suprascriere: randurile
MANUAL raman intacte; analiticele disparute din balanta se pastreaza, marcate DISPARUT ...;
analiticele noi se adauga cu NOU."
In neregula: nu e gresit, dar este cea mai complexa componenta a planului (stare persistenta,
reconciliere pe 3 tranzitii, marcaje) si se justifica doar daca Marius editeaza manual maparea
des. Planul nu spune cat de des se intampla asta. Alternativa: maparea se regenereaza complet la
fiecare rulare, iar corectiile omului traiesc intr-un fisier mic separat
(mapare_<FIRMA>_manual.csv, doar randurile atinse), peste care se aplica.
Propun: decid: (a) merge complet ca in plan (accepti complexitatea, adaugi testele celor 3 tranzitii - deja in criteriu), sau (b) overlay manual separat (mai simplu de testat, dar doua fisiere). Nu am o preferinta puternica; depinde de cat de des editeaza Marius maparea.
C7. Dependinte noi nedeclarate in CLAUDE.md
In plan (antet): "Python 3.13, fara dependinte in afara de openpyxl/pdfplumber/xlrd/firebird-driver."
CLAUDE.md:6-7: "Instalate: pdfplumber, openpyxl. Fara alte dependinte."
In neregula: planul introduce xlrd si firebird-driver (si fbclient.dll dintr-o cale fixa
de masina: C:\Program Files\Firebird\Firebird30_Saga\fbclient.dll, raport_exporturi_saga_noua.md
C.2). CLAUDE.md nu le mentioneaza, iar calea fbclient nu e portabila intre masini/clienti.
Propun: adauga in CLAUDE.md (si intr-un scurt README/--help) lista de dependinte + pasul
de instalare + faptul ca fbclient.dll se descopera la rulare (nu cale fixa). Verificat: pe
masina asta toate cele 4 module se importa.
C8. .gitignore nu acopera copii .FDB si fisierele de parteneri/facturi (date de client)
In plan (sectiunea "Git"): enumera ignorarea pentru init_*.xlsx, export_*.xlsx,
mapare_*.xlsx, balanta_*.csv. .gitignore real confirma exact acestea.
In neregula: noile artefacte din plan - copii .FDB, parteneri_*.csv, facturi_*.csv,
fisiere .xls - nu sunt acoperite. O copie .FDB de client contine CUI, denumiri, IBAN, solduri.
Propun: adauga in .gitignore: *.FDB, *.fdb, parteneri_*.csv, facturi_*.csv,
config/cont_ireg.csv (daca se decide snapshot-ul, vezi C1 - sau, dimpotriva, comite-l intentionat
daca nu contine date de client). Nu e o urgenta, dar e o scapare concreta.
C9. Raportul de verificare este orientat pe PDF; pentru xlsx/fdb, verificarea cu "Totaluri" dispare tacit
In plan (sectiunea "Cititorul 2"): "este_total = gol (exportul nu are rand de totaluri)".
In neregula: genereaza_xlsx.citeste_totaluri cauta un rand cu "totaluri" in denumire si
intoarce None pe sursele xlsx/fdb (genereaza_xlsx.py:89-94). Verificarea "NET xlsx vs NET
Totaluri" (una din garzile din CLAUDE.md) nu se mai poate rula, fara ca planul sa spuna ce o
inlocuieste. Ramane doar SUM(totdeb)=SUM(totcred), care e necesara dar nu suficienta.
Propun: pentru sursele xlsx/fdb, invariantul de inlocuire se scrie in plan si in raport:
pe fiecare rand din CSV total_d = prec_d + rulaj_d, total_c = prec_c + rulaj_c,
sold_d - sold_c = total_d - total_c (exact verificarile deja rulate in cercetare, 10/10 pe
exportul nou; vezi raport_exporturi_saga_noua.md A.1).
C10. Planul nu evalueaza nicio alternativa si nu spune cat de des se migreaza (premisa)
In plan: o singura arhitectura ("Arhitectura: un format intern, trei cititoare"), 5 lane-uri.
In neregula: pentru un utilizator unic si 2 migrari facute pana acum, "5 lane-uri + 3 cititoare
- mapare persistanta + parteneri/facturi din FDB" poate fi supradimensionat. Exista o varianta mult
mai mica: un singur script care citeste PDF sau xlsx (
--sursa), fara FDB, fara mapare persistanta, cu partenerii si cod fiscal provizoriu ca azi (etapa 5b ANAF exista deja si a functionat). FDB-ul aduce valoare reala (cod fiscal real, scadenta, facturi per partener, dispare etapa 5b) - dar numai dupa ce exista o baza reala de validat (C2).
Propun: raspunde la doua intrebari in plan: cat de des se face o migrare si cat de des vine
clientul cu baza .FDB. Daca migrarile sunt rare sau FDB-ul e rar, varianta minima acopera cazul
real mai repede si mai sigur.
C11. Ordinea lane-urilor poate fi paralelizata, iar citire-fdb depinde de prea putin
In plan (tabelul "Ordinea de lucru"): citire-xlsx fara dependinte, mapare fara dependinte,
citire-fdb depinde de citire-xlsx, integrare depinde de toate.
In neregula: citire-xlsx si mapare nu depind una de alta si pot rula in paralel (planul le
pune amandoua "fara dependinte", deci e ok, dar nu o spune). citire-fdb depinde de citire-xlsx
pentru ca exportul e oracolul - corect ca tehnica, dar slab ca dovada pe date de joaca (C2).
Propun: numeste explicit citire-xlsx + mapare ca lane-uri paralele si muta citire-fdb
dupa ce exista date reale sau dupa decizia D2.
C12. Etapa 3 contine procedura de client, fara de care cititorul FDB nu se poate folosi la client
In plan (sectiunea "Etapa 3"): "procedura pentru client: cum isi face copia bazei (gbak ...
) si ca trebuie sa opreasca SAGA daca trimite fisierul direct".
In neregula: daca citire-fdb se livreaza in Etapa 2, dar procedura de obtinere a bazei ramane
in Etapa 3, unealta nu poate fi folosita la un client. Planul nu spune daca Etapa 2 FDB e "intern,
pe baza proprie" sau "folosibil la client".
Propun: fie muti procedura gbak/opreste-SAGA in Etapa 2 odata cu cititorul, fie declari
explicit ca Etapa 2 FDB este doar pe baza proprie si procedura ramane in Etapa 3.
C13. Testul de regresie: "identice" trebuie definit pe date, nu pe octeti
In plan (tabelul): "xlsx-urile noi identice cu cele importate deja in productie".
In neregula: genereaza_xlsx.scrie_xlsx re-salveaza sablonul cu openpyxl; metadate/formatari
pot diferi, deci "identic bit-cu-bit" e fragil ca test. Ce conteaza sunt valorile celulelor.
Propun: defineste poarta ca "identic pe toate celulele de date (rand >= 2), pe toate coloanele",
nu pe hash de fisier. Compara cu openpyxl.load_workbook valorile celula cu celula.
C14. conturi_cu_analitice.md contrazice decizia finala pentru 5125
In plan: planul nu mentioneaza 5125.
In neregula: conturi_cu_analitice.md:29,105 propune 5125 = PARTENER; decizii_import.md
pct.15 (revizuit 20.09.2026) decide 5125 = doar analitice, fara parteneri. Codul respecta pct.15
(5125 nu e in PARTENER, genereaza_xlsx.py:53). Un om care citeste docul de conturi rămâne cu
informatia veche. Planul nu spune care doc castiga.
Propun: o linie in plan ("pct.15 din decizii_import.md prevaleaza; conturi_cu_analitice.md
se actualizeaza") plus corectarea tabelului la urmatoarea atingere a acelui fisier.
C15. scadent din FDB poate fi NULL; planul il trateaza ca "scadenta reala"
In plan (tabelul "Randurile FACTURA"): randul "baza .FDB" -> "cu cod fiscal real si scadenta
reala".
In neregula: dovedit in raport_exporturi_saga_noua.md C.3, singurul rand din INTRD are
SCADENT=NULL; iar NEACHITAT=0. Deci "scadenta reala" si "facturi cu sold" nu sunt garantate de
baza.
Propun: in plan, regula pentru SCADENT NULL (fallback pe ultima zi a lunii, ca la exporturi)
si pentru selectia facturilor (ex. NEACHITAT <> 0), plus raportarea cazurilor.
C16. Harta erorilor nu numeste ce vede utilizatorul la esec de citire
In plan (sectiunea "Ce se pastreaza neatins"): 3 conditii de oprire ("analitic fara rand in
mapare", "cont/acont > 4", "doua randuri cu acelasi (cont,acont)"). Bun, dar sunt doar in generator.
In neregula: nu exista erori numite pentru cititoare: fisier lipsa, foaie inexistenta/redenumita,
antet fara coloana asteptata, cont citit ca numar, FDB blocat/versiune greșita/fbclient
negasit. raport_form_init_balanta.md arata ca formularul insusi e lax (rand fara an = ignorat
tacut), deci un CSV gresit poate produce un xlsx "valid" dar incomplet.
Propun: tabel de erori in plan (codepath | ce poate merge prost | clasa/exceptie | ce vede
Marius). Minim: fiecare cititor valideaza antetul prin nume exacte si se opreste cu mesaj care
spune fisierul, foaia si coloana lipsa.
3. DECIZII DE LUAT DE MARIUS
D1. Cat de mare e etapa 2: planul complet (5 lane-uri, 3 cititoare) sau o felie minima intai?
- A) Felia minima intai: un script cu
--sursa pdf|xlsx, fara FDB si fara mapare persistanta (cod fiscal provizoriu + etapa 5b ca azi); FDB cand apare un client cu baza. (uman: ~1 zi / CC: ~1h) - B) Planul complet ca acum (5 lane-uri, inclusiv FDB + parteneri/facturi).
- C) Planul complet, dar FDB ultimul si conditionat de o baza reala (hibrid cu D2).
- Recomandare: C - pastrezi valoarea FDB, dar nu blochezi livrarea pe cea mai putin verificata bucata. Rezultatul il simti imediat pe PDF/xlsx, iar FDB se adauga cand ai dovada. (Daca migrarile sunt rare si clientii nu dau baza, A devine alegerea corecta.)
D2. Cititorul FDB: il construim acum sau dupa o baza reala?
- A) Mutam obtinerea unei baze
.FDBreale + exportul ei in Etapa 2, ca preconditie. (recomandat) - B) Il construim acum pe firma de joaca si acceptam ca "verificat, nu pe analitice".
- C) Il scoatem din etapa 2 complet (revine in etapa 3).
- Recomandare: A - poarta FDB-vs-xlsx pe 10 randuri sintetice nu poate inchide un lane care promite analitice, parteneri, cod fiscal si scadenta reala.
D3. Sursa setului de conturi cu parteneri (C1)
- A) Snapshot local
config/cont_ireg.csvgenerat de SQL, citit de unealta. (recomandat) - B) Pastram setul hardcodat din
genereaza_xlsx.pysi scoatem afirmatia "Oracle e sursa de adevar". - C) Citire live Oracle la rulare.
- Recomandare: A - o singura sursa, fara credentiale si fara client Oracle la rulare, si se
vede in git cand se schimba. Important: decide daca snapshot-ul include toate cele 33 de conturi
CU_INREGISTRARI=1sau doar setul validat - altfel rezultatul pe FUNDATIA/MASTER se poate schimba.
D4. Contractul intermediar (C4)
- A) Il fixezi in plan acum: 3 fisiere, nume si coloane exacte, fara
TIP, match exact de antet. (recomandat) - B) Lasi cititoarele sa produca ce vor si adaptezi generatorul.
- Recomandare: A - e cel mai ieftin lucru de scris din tot planul si elimina cea mai frecventa sursa de buguri tacite (potrivire de coloane).
D5. Merge-ul de mapare (C6)
- A) Merge complet (
MANUAL/NOU/DISPARUT+.TOATE/.RESTUL) ca in plan. - B) Overlay manual separat peste o mapare regenerata complet. (mai simplu de testat)
- Recomandare: B daca Marius editeaza maparea rar; A daca o editeaza des. Neutral - decizia tine de cat de des corecteaza manual.
D6. Poarta de regresie (C5, C13)
- A) Rulezi regresia FUNDATIA + MASTER dupa
maparesi dupaintegrare, comparand valori de celule (nu hash de fisier). (recomandat) - B) Ramane o singura rulare la final, pe hash de fisier.
- Recomandare: A - cel mai ieftin test de siguranta, si protejeaza exact zona validata in productie pe care planul o atinge.
D7. Procedura de client pentru baza FDB (C12)
- A) O muti in Etapa 2 odata cu cititorul FDB. (recomandat daca D2 = A/B)
- B) Ramane in Etapa 3; declari Etapa 2 FDB "intern, nefolosibil la client".
- Recomandare: A - altfel livrezi un cititor pe care nu-l poti folosi in teren.
D8. Cine e "adevarul" pe 5125 si pe docurile contradictorii (C14)
- A)
decizii_import.mdpct.15 prevaleaza; actualizeziconturi_cu_analitice.md. (recomandat) - B) Lasat asa, se rezolva la urmatoarea atingere.
- Recomandare: A - o linie in plan si o corectie mica elimina o capcana pentru viitor.
4. Ce am verificat si ce NU am putut verifica
Verificat (cu dovada):
- Structura celor doua exporturi SAGA (VFP si Firebird) identica pe 35 de coloane si maparea
1:1 pe cele 8 sume -
raport_sursa_saga_xlsx.md1.5/1.6 siraport_exporturi_saga_noua.mdA.1/B.2 (relatii de sume 341/341 si 10/10). CONTURIcu solduri 0, cifrele din agregareaREGISTRU-raport_exporturi_saga_noua.mdC.4.- Firma de joaca: FDB exista (
D:\SAGA250909\0001\CONT_BAZA.FDB, 21 MB), exporturi inexemple\, 0 analitice, 2 furnizori, 0 clienti, 1 factura - planul si raportul C.3 confirma. - Setul hardcodat de parteneri din cod vs lista Oracle
CU_INREGISTRARI=1(33 conturi) - C1:genereaza_xlsx.py:43-53vsconfig_cont_ireg.md:89-91. 5125: codul respectadecizii_import.mdpct.15, doculconturi_cu_analitice.mdnu - C14..gitignorereal nu acopera.FDB/parteneri_*.csv/facturi_*.csv- C8.- Dependintele pe masina asta:
pdfplumber,openpyxl,xlrd,firebird.driverse importa toate. genereaza_xlsx.pycitestetotaluridin CSV, deci pe sursele xlsx/fdb verificarea scade - C9.extract_balanta.pyscrie 12 coloane, deciTIPca a 13-a coloana ar rupe contractul - C4.
NU am putut verifica (afirmatii neacoperite de un fisier citit):
- Cat de des se face o migrare si cat de des vine clientul cu baza
.FDB(premisa pentru D1). Nu exista niciun document cu volumul de migrari. - Daca
REGISTRUpermite reconstruirea exacta aDEB_PREC/RULAJ/FINpe analitice pe o baza reala - nu exista decat firma de joaca (8 note). C3 ramane o cerinta, nu o dovada. - Daca vreun client are baza
.FDBpe o versiune Firebird diferita (aici 3.0.7,fbclientdintr-o cale fixa) - nerezolvat, risc de deploy nenumit in plan. - Ordinea exacta de prioritate dintre
conturi_cu_analitice.md(PARTENER pe 5125) sidecizii_import.mdpct.15 (analitic) din partea lui Marius - am presupus ca pct.15, mai nou si revizuit, este cel corect. - Outside voice (Codex / subagent) NU a fost rulat: skill-ul il cere implicit, dar acest task este o analiza fara aprobare interactiva, iar rezultatul ar fi informational. De reluat manual daca Marius vrea a doua voce.
Anexa A - diagrama de arhitectura (cum e acum in plan; [?] = nespecificat)
SURSE CITITOARE CONTRACT GENERATOR IESIRE
PDF balanta ------> citire-pdf (exista) -> balanta_<F>.csv (12 col) --> genereaza -------> init_<F>_<a>_<l>.xlsx
xlsx/xls SAGA -----> citire-xlsx (NOU) -> balanta_<F>.csv
CONT_BAZA.FDB -----> citire-fdb (NOU) -> parteneri_<F>.csv [nume/coloane ?] + mapare_<F>.xlsx
facturi_<F>.csv [nume/coloane ?] + docs/verificare_<F>.md
Anexa B - registru de erori propus (S2)
| Codepath | Ce poate merge prost | Tratament propus (acum lipseste) |
|---|---|---|
| citire-pdf | PDF fara text (scanat) | Stop, mesaj "PDF fara strat de text" |
| citire-xlsx | fisier lipsa / foaie redenumita / antet schimbat | Stop cu numele foii si coloanei asteptate |
| citire-xlsx | cont citit ca numar (401.00002) |
citire ca text, verificat deja in cercetare |
| citire-fdb | fbclient.dll negasit / versiune Firebird diferita |
Stop cu calea cautata si versiunea |
| citire-fdb | CONTURI cu solduri 0 (folosire gresita) |
agregare REGISTRU, cu invariant de sume; de numit explicit |
| generator | analitic fara rand in mapare | deja in plan: Stop |
| generator | (cont,acont) duplicat |
deja in plan: Stop |
| generator | rand fara an (formular il ignora tacit) |
validare proprie, nu te baza pe formular |
Anexa C - registru de failure modes (S4)
| Codepath | Failure mode | Prins? | Test? | Marius vede? | Logat? |
|---|---|---|---|---|---|
| citire-fdb | CSV "corect" dar fara analitice (agregare sintetic) | N (C2) | N (date de joaca) | Silent | raport |
| citire-fdb | SCADENT NULL tratat ca data valida |
N (C15) | N | partial | nu |
| citire-xlsx | antet cu coloana lipsa -> 0 pe toate | N (C16) | partial | posibil Silent | nu |
| generator | Totaluri absent -> verificare sarita |
partial (C9) | da | notat in raport | da |
| deploy | fbclient lipsa la client |
N (C7) | N | Stop (daca mesaj clar) | nu |
Rândurile RESCUED=N, TEST=N, USER SEES=Silent sunt golurile critice: primul si al treilea.
Anexa D - "ce exista deja"
extract_balanta.py= cititorul PDF (reused, nemodificat; corect).genereaza_xlsx.py= toti pasii de mapare si constructie a randurilor BALANTA/FACTURA, cu verificarile din etapa 5 (reused; planul il extinde corect cu maparea siexclus).decizii_import.mdpct.11-16 = regulile validate in productie (nu se redeschid; corect).- Sablonul
init_facturi_balanta_note.xlsx(rand 1 = cap de tabel, import incepe de la rand 2).
Anexa E - "NOT in scope" (confirmat de plan, cu o exceptie)
- importul registrului jurnal, balantele de verificare lunare, nomenclatorul de parteneri lunar
(programele
saga2roa*vechi) - corect in afara scopului; - planul de conturi syntetic generat de SAGA (
PLANCONT) - corect nepreluat; - conectarea Firebird prin retea - corect amanata.
- Exceptie de re-verificat: "procedura de client pentru copia bazei" este scoasa in Etapa 3, dar daca FDB se livreaza in Etapa 2 (D2/D7), ea este in scop.