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
20 KiB
Raport sursa-saga: balanta.xls SAGA, tabela conturi_roa si exporturile folosite
Cercetare read-only. Nu s-a modificat niciun fisier din saga2roa, saga2roa_danube,
saga2roa_rompetrol. Fisierele temporare sunt in
C:\Users\mmari\AppData\Local\Temp\opencode\sursa_saga.
0. Cum am citit .xls-ul (ce a mers)
Ordinea ceruta, cu rezultatul exact:
pandas+xlrd: pandas NU e instalat (ModuleNotFoundError: No module named 'pandas'),xlrdla fel. Am instalat doarxlrd(py -m pip install xlrd-> 2.0.2). Cuxlrd.open_workbookfisierul se citeste corect.openpyxlpe.xlsesueaza (confirmat):openpyxl.utils.exceptions.InvalidFileException: openpyxl does not support the old .xls file format.- LibreOffice exista (
C:\Program Files\LibreOffice\program\soffice.exe) si conversia a mers:soffice --headless --convert-to xlsx --outdir <temp> balanta.xls-> exit 0. Fidelitate verificata: xlsx-ul convertit are tot 342 randuri x 35 coloane, sheetbalanta, acelasi antet. - Excel COM din PowerShell: nu a fost nevoie (xlrd si LibreOffice au acoperit).
Concluzie: se poate citi fie direct cu xlrd, fie prin conversie LibreOffice.
1. Structura balantei SAGA exportate in Excel (saga2roa_danube\balanta.xls)
- O singura foaie:
balanta. 342 randuri x 35 coloane. - Randul 1 (index 0) = antetul, direct pe prima linie; nu exista randuri de titlu deasupra. Datele incep la randul 2 (index 1). Ultimul rand de date = randul 342 (index 341).
- NU exista rand de totaluri. Toate cele 341 de randuri de date au
contsidenumirecompletate; ultimul rand este contul7651. Randul "Totaluri:" exista doar in raportul PDF "Balanta de verificare", nu in acest xls.
1.1 Coloanele, in ordine (litera + nume)
| Lit. | Nume | Lit. | Nume | Lit. | Nume |
|---|---|---|---|---|---|
| A | cont | M | rulajt_d | Y | rulaj_d_1 |
| B | denumire | N | rulajt_c | Z | rulaj_c_1 |
| C | categorie | O | total_deb | AA | rulajt_d_1 |
| D | tip | P | total_cred | AB | rulajt_c_1 |
| E | deb_init | Q | fin_d | AC | total_deb_1 |
| F | cred_init | R | fin_c | AD | total_cred_1 |
| G | deb_prec | S | deb_init_1 | AE | fin_d_1 |
| H | cred_prec | T | cred_init_1 | AF | fin_c_1 |
| I | sold_in_d | U | deb_prec_1 | AG | analitic |
| J | sold_in_c | V | cred_prec_1 | AH | validat |
| K | rulaj_d | W | sold_in_d_1 | AI | linie |
| L | rulaj_c | X | sold_in_c_1 |
Aceasta lista coincide exact cu structura conturi.dbf documentata in cod la
saga2roa_danube\saga2roa_danube.prg:25 (comentariul cu capul tabelei SAGA). Deci
balanta.xls este exportul in Excel al tabelei SAGA conturi (plan de conturi cu solduri),
NU raportul "Balanta de verificare". Confirmare suplimentara: saga2roa_danube.prg:30 citeste
direct conturi.dbf din directorul SAGA (K:\MARIUS\SAGA C.3.0\0001\).
1.2 Primele 10 randuri de date (Excel rand 2..11)
| cont | denumire | tip | deb_init | cred_init | deb_prec | cred_prec | rulaj_d | rulaj_c | total_deb | total_cred | fin_d | fin_c |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1012 | CAPITAL SUBSCRIS VARSAT | P | 0 | 2000.00 | 0 | 2000.00 | 0 | 0 | 0 | 2000.00 | 0 | 2000.00 |
| 105 | REZERVE DIN REEVALUARE | P | 0 | 3009833.83 | 0 | 3009833.83 | 0 | 0 | 0 | 3009833.83 | 0 | 3009833.83 |
| 105.10 | REZERVE DIN REEVALUARE CELULA INSILOZARE | P | 0 | 167629.29 | 0 | 167629.29 | 0 | 0 | 0 | 167629.29 | 0 | 167629.29 |
| 105.102 | REZERVA DIN REEVAL.TRANSPORTOR TORNADO ORIZONTAL | P | 0 | 4669.56 | 0 | 4669.56 | 0 | 0 | 0 | 4669.56 | 0 | 4669.56 |
| 105.103 | REZERVA DIN REEVAL.TRANSPOROTR TORNADO ORIZONTAL | P | 0 | 2263.31 | 0 | 2263.31 | 0 | 0 | 0 | 2263.31 | 0 | 2263.31 |
| 105.104 | REZERVA DIN REEVAL.TRANSPORTOR TORNADO ORIZONTAL | P | 0 | 4669.56 | 0 | 4669.56 | 0 | 0 | 0 | 4669.56 | 0 | 4669.56 |
| 105.105 | REZERVA DIN REEVAL TRANSPORTOR ELEVATOR TEE100 | P | 0 | 3788.75 | 0 | 3788.75 | 0 | 0 | 0 | 3788.75 | 0 | 3788.75 |
| 105.106 | REZERVA DIN REEVAL TRNASPORTOR ELEVATOR TEE100 | P | 0 | 3940.44 | 0 | 3940.44 | 0 | 0 | 0 | 3940.44 | 0 | 3940.44 |
| 105.11 | REZERVA DIN REEV.CELULA INSILOZARE | P | 0 | 167628.38 | 0 | 167628.38 | 0 | 0 | 0 | 167628.38 | 0 | 167628.38 |
| 105.17 | REZERVA DIN REEVAL.RETEA ELECTRICA | P | 0 | 12143.52 | 0 | 12143.52 | 0 | 0 | 0 | 12143.52 | 0 | 12143.52 |
1.3 Ultimele 5 randuri (Excel rand 338..342)
| cont | denumire | tip | deb_init | cred_init | deb_prec | cred_prec | rulaj_d | rulaj_c | total_deb | total_cred | fin_d | fin_c |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 6811 | CHELT. DE EXPLOATARE CU AMORTIZAREA IMOBILIZARILOR | A | 0 | 0 | 119978.76 | 119978.76 | 39992.94 | 39992.94 | 159971.70 | 159971.70 | 0 | 0 |
| 698 | CHELT. CU IMPOZITUL PE VENIT SI CU ALTE IMPOZITE | A | 0 | 0 | 1722.00 | 1722.00 | 0 | 0 | 1722.00 | 1722.00 | 0 | 0 |
| 704 | VEN. DIN SERVICII PRESTATE | P | 0 | 0 | 172156.50 | 172156.50 | 25185.81 | 25185.81 | 197342.31 | 197342.31 | 0 | 0 |
| 7584 | VEN. DIN SUBVENTII PT. INVESTITII | P | 0 | 0 | 6956.34 | 6956.34 | 2318.78 | 2318.78 | 9275.12 | 9275.12 | 0 | 0 |
| 7651 | VEN. DIN DIFERENTE FAVORABILE DE CURS VALUTAR | P | 0 | 0 | 14081.25 | 14081.25 | 7523.61 | 7523.61 | 21604.86 | 21604.86 | 0 | 0 |
Nu exista rand de totaluri dupa acestea; randul 342 este ultimul.
1.4 Sintetic vs analitic
- Nu exista indentare si nu exista o coloana separata care sa spuna sintetic/analitic.
Coloana
analitic(AG) este 1 pe toate cele 341 de randuri, deci nu distinge nimic. - Singurul criteriu real este punctul in codul de cont:
- 78 randuri fara punct (
0puncte) = conturi sintetice (ex.1012,105,1171,401); - 263 randuri cu exact 1 punct = conturi analitice (ex.
105.10,105.102,1171.100,208.500,2813.114,401.00032); - nu exista coduri cu 2 sau mai multe puncte in acest fisier.
- 78 randuri fara punct (
- Partea de analitic are lungime variabila 1..5 caractere si poate fi si alfanumerica:
in fisier apar si
105.RAI,4428.TP(litere), pe langa00001..00134(5 cifre). - Atentie: un cont sintetic fara punct poate fi si frunza (ex.
1012nu are analitice), deci "are punct" = analitic, dar "nu are punct" NU inseamna automat parinte. - Codul de analitic arata exact ca in exemplu (
401.00027), adicasintetic.<cod analitic SAGA>.
1.5 Coloanele de sume: ce sunt totaluri si ce sunt solduri
Relatii verificate pe toate cele 341 de randuri (toleranta 0.005):
| Verificare | Rezultat |
|---|---|
total_deb = deb_prec + rulaj_d si total_cred = cred_prec + rulaj_c |
341/341 OK |
fin_d - fin_c = total_deb - total_cred |
341/341 OK |
sold_in_d - sold_in_c = deb_prec - cred_prec |
341/341 OK |
Interpretare (sprijinita si de cod, saga2roa\balanta.sql:11:
deb_init+deb_prec as debit, cred_init+cred_prec as credit):
deb_prec/cred_prec= sume precedente (rulaj cumulat pana la inceputul perioadei) — corespund coloanelor "Sume precedente" din raportul PDF;rulaj_d/rulaj_c= rulaj perioada;total_deb/total_cred= sume totale = precedente + rulaj (NU sold);fin_d/fin_c= sold final;deb_init/cred_init= solduri de preluare (initial), separat de precedent;sold_in_d/sold_in_c= sold la inceput, pe netul precedentelor;rulajt_d/rulajt_c= rulaj total cumulat; in acest fisier nu este egal cutotal_deb/creddecat pe 95/341 randuri (deci nu e o simpla copie a luitotal_deb).
Setul _1 (coloanele S..AF): pe 265/341 randuri este complet zero, iar pe 78/341 randuri este
identic cu setul principal. Cele 78 sunt exact randurile sintetice (fara punct), cele 265 sunt
analiticele + 2 randuri sintetice complet zero. Nu am putut stabili din fisierele disponibile ce
reprezinta setul _1 (pare o a doua balanta / a doua perioada); nu il folosesc ca fapt dovedit.
1.6 Comparatie cu CSV-ul produs de extract_balanta.py din PDF
CSV-ul din PDF (balanta_FUNDATIA.csv) are coloanele:
pagina, cont, denumire, prec_d, prec_c, rulaj_d, rulaj_c, total_d, total_c, sold_d, sold_c, este_total.
Corespondenta de semantica (raportul PDF "Balanta de verificare" = 8 coloane numerice, vezi
si saga2roa\Balanta de verificare 16052018 1317.xls rand 7-9: Sume precedente / Rulaje perioada /
Sume totale / Solduri finale):
| CSV (PDF) | xls |
|---|---|
| prec_d / prec_c | deb_prec / cred_prec |
| rulaj_d / rulaj_c | rulaj_d / rulaj_c |
| total_d / total_c | total_deb / total_cred |
| sold_d / sold_c | fin_d / fin_c |
Coloane in CSV care lipsesc din xls: pagina (numarul paginii PDF), este_total
(markerul randului de totaluri).
Coloane in xls care nu exista in CSV: categorie, tip, deb_init, cred_init,
sold_in_d, sold_in_c, rulajt_d, rulajt_c, cele 16 coloane _1, analitic, validat, linie.
Se poate produce EXACT acelasi CSV din xls? Nu exact, dar foarte aproape:
- Coloanele de cont si de sume se pot mapa 1:1 si valorile sunt coerente (aceleasi relatii
total = prec + rulaj,sold = totalpe net); paginanu se poate reface din xls (e proprie PDF-ului, depinde de paginare si de ruperile de denumire);este_total: xls-ul nu are rand de totaluri; s-ar putea doar calcula/adapta, nu citi;- denumirea poate diferi: in PDF denumirea e recompusa din fragmente pe pagini
(
extract_balanta.py:124-126lipeste randurile de continuare), in xls e o singura celula; - setul de conturi poate diferi daca PDF-ul si xls-ul sunt din perioade/firme diferite
(in cazul de fata xls este DANUBE, CSV-urile existente sunt FUNDATIA/MASTERJOB).
Deci: da pentru conturi + cele 8 sume, nu pentru
paginasieste_total.
2. Tabela de corespondenta conturi SAGA -> conturi ROA
2.1 Cele doua fisiere, structura DBF
saga2roa\CONTURI_ROA.DBF (varianta DANUBE, 56 inregistrari, 4 campuri):
| Camp | Tip | Lungime |
|---|---|---|
| CONT | C | 20 |
| ACONT | C | 20 |
| CONT2 | C | 4 |
| ACONT2 | C | 4 |
Primele 15 randuri (CONT | ACONT | CONT2 | ACONT2):
2131 | TOATE | 2131 | (gol)
2133 | TOATE | 2133 | (gol)
214 | TOATE | 214 | (gol)
2813 | TOATE | 2813 | (gol)
2814 | TOATE | 2814 | (gol)
3024 | ATM | 3024 | 1
3024 | ATUO | 3024 | 2
3024 | (gol) | 3024 | 3
303 | TOATE | 303 | (gol)
371 | TOATE | 371 | 5
371 | MARFA | 371 | 6
371 | MCKM4-5 | 371 | 7
378 | MCKM4-5 | 378 | 7
378 | MFEN | 378 | 1
378 | (gol) | 378 | 1
Observatii: ACONT2 poate fi gol, o cifra, sau alfanumeric (X, PG, PO, TXV, ANAF,
C4-5). CONT2 poate diferi de CONT (ex. 409 -> 4091, 431 -> 4311, 4314 -> 4313,
4374 -> 4371, 4381 -> 4371). Exista un export identic ca structura in
saga2roa\conturi.csv (antet cont;acont;cont2;acont2, 56 randuri) si saga2roa\conturi.xls
(foaie Sheet1, 57 randuri cu antet) — dar acestea doua NU sunt identice bit-cu-bit cu
CONTURI_ROA.DBF: in csv/xls codul analitic e lipit in cont (707.ATM) si acont e gol,
iar unele valori difera (MCKM4-5 vs MCK4-5). Sunt variante, nu acelasi fisier.
saga2roa_rompetrol\conturi_roa.dbf (varianta ROMPETROL, 135 inregistrari, 6 campuri):
| Camp | Tip | Lungime |
|---|---|---|
| CONT2 | C | 4 |
| ACONT2 | C | 4 |
| DENUMIRE | C | 100 |
| CONT_ALT | C | 20 |
| COD | C | 20 |
| CONT | C | 20 |
Primele 15 randuri (CONT2 | ACONT2 | DENUMIRE | CONT_ALT | COD | CONT):
121 | 3001 | PROFIT SI PIERDERE | (gol) | B1203010_NG_011 | 121
167 | 5501 | GARANTIE DE BUNA EXECUTIE _NG | (gol) | B1203080_NG_081 | 167.01
201 | 1101 | CHELTUIELI DE CONSTITUIRE_SOLD INITIAL | (gol) | B1301010_NG_011 | 201
303 | 2201 | MAT. DE NATURA OB. DE INVENTAR | (gol) | B1301010_NG_022 | 303.TOATE
401 | 6301 | FURNIZORI NG | (gol) | B1301010_NG_032 | 401.RESTUL
401 | 6302 | FURNIZORI G | (gol) | B1307010_NG_011 | 401.00032
401 | 6302 | FURNIZORI G | (gol) | B1307010_KMGR_022 | 401.00005
401 | 6302 | FURNIZORI G | (gol) | B1307010_RSC_022 | 401.00018
401 | 6302 | FURNIZORI G | (gol) | B1307080_NG_081 | 401.00002
401 | 6302 | FURNIZORI G | (gol) | B1307080_NG_085 | 401.00001
404 | 6301 | FURNIZORI DE IMOBILIZARI NG | (gol) | B1311010_NG_011 | 404.RESTUL
404 | 6302 | FURNIZORI DE IMOBILIZARI G | (gol) | B1311010_NG_022 | 404.0002
404 | 6302 | FURNIZORI DE IMOBILIZARI G | (gol) | B1311010_RIV_022 | 404.00005
404 | 6302 | FURNIZORI DE IMOBILIZARI G | (gol) | B1311010_NG_032 | 404.00012
408 | 6305 | FURNIZORI - FACTURI NESOSITE IMOBILIZARI NG | (gol) | B1311090_NG_011 | PLANCONT
Aici CONT este codul SAGA complet (inclusiv analitic: 401.00032, 611.1) sau un marcaj
special (303.TOATE, 401.RESTUL, PLANCONT); CONT2/ACONT2 sunt contul sintetic/analitic
ROA; CONT_ALT = cont alternativ ROA; COD = codul suplimentar ROMPETROL (structura
B.../I..._NG_...).
2.2 Unde se foloseste tabela in cele doua .prg
Toate locurile (grep conturi_roa in *.prg):
saga2roa_danube\saga2roa_danube.prg
:30-34defineste caile;:40-44dacaconturi_roa.dbflipseste o creeaza goala (CREATE TABLE (cont C(20), acont C(20), cont2 C(4), acont2 C(4)));:79Select Cast(Alltrim(Cont) + '.' + Alltrim(acont) As C(20)) As Cont, cont2, acont2 From conturi_roa-> cheia de cautare estecont + '.' + acont;:173-203("Corectare conturi analitice") este locul de fond:lcContSintetic = Left(m.lcCont, m.lnPos - 1) lcContAnalitic = Substr(m.lcCont, m.lnPos + 1) lcContToate = m.lcContSintetic + '.TOATE' ... Locate For Alltrim(Cont) = m.lcCont If !Found() Locate For Alltrim(Cont) = m.lcContToate ... Replace cont2 With m.lcCont2, acont2 With m.lcAcont2
saga2roa_rompetrol\saga2roa_rompetrol3.prg
:59-73caile + crearea goala (6 campuri);:120-124citeste tabela si comenteaza rolul coloanelor (cont = cont saga,cont2/acont2 = conturi ROA,cont_alt = cont alternativ ROA,cod = cod suplimentar ROMPETROL);:126-169construieste planul ROA (cPlanROA): faceFull Joinintreconturi_roasi planul SAGA pecont, plus unJoinspecial pentru randurile cucont = 'PLANCONT'(:134-138), si sterge din plan conturile acoperite de unX.TOATE(:152-157);:244-306foloseste tabela la corectarea registrului jurnal, atat pe debit cat si pe credit (:262-273si:292-303), cuX.TOATEsiX.RESTUL(:265,:295);:572-575folosestecPlanROA(deci indirect tabela) pentru planul de conturi analitic.
In saga2roa\balanta.prg (versiune mai veche, firma COFFEE) tabela se foloseste identic ca in
danube (:34, :40-44, :79, :188); in saga2roa\balanta.BAK:28 apare chiar o cale fixa
E:\vali\COFFEE\conturi_roa.dbf.
2.3 Ce decide exact tabela
Tabela doar re-codeaza contul: pentru un cod SAGA dat (cont, optional cu analitic) stabileste
cont2 (sinteticul ROA, max 4 car.) si acont2 (analiticul ROA, max 4 car.). Deci:
- redenumirea sinteticului (ex. SAGA
409-> ROA4091,431->4311); - analiticul (
acont2), care poate fi gol (cont fara analitic in ROA), o cifra, sau alfanumeric; - suporta marcaje speciale in coloana
cont:X.TOATE(toate analiticele sinteticului X),X.RESTUL(restul, doar in rompetrol),PLANCONT(fallback de plan pecont2); - in rompetrol mai decide denumirea ROA (
denumire), contul alternativ (cont_alt) si codul suplimentar (cod).
Ce NU decide tabela:
- nu decide
tip(D/P): tipul vine din planul SAGA (cPlan, danube:81) si e transportat prin join-uri (:154, rompetrol:572); tabela nu are coloana de tip. - nu decide conturile cu parteneri: listele sunt hardcodate in .prg
(
lcListaConturiBalP/lcListaConturiIregP, danube:308-309, rompetrol:114-115). Partenerii vin dinclienti.dbf/furnizori.dbf, nu din tabela. - nu decide sume, doar maparea de coduri.
2.4 Completata manual sau generata automat?
Dovada: niciunul dintre .prg nu scrie in tabela. Singurele operatii pe conturi_roa sunt
Use, Select, Locate si CREATE TABLE (doar daca fisierul lipseste) — vezi
danube :36-44, :79, :188-199 si rompetrol :65-73, :120, :132-138, :262-303.
Nu exista INSERT/REPLACE/APPEND catre conturi_roa in niciun .prg.
Concluzie: tabela este completata manual (un nomenclator de corespondenta intretinut de om),
posibil pornita dintr-un export (in rompetrol coloana COD are coduri structurate de tip
B1203010_NG_011, care par generate din planul ROMPETROL) si apoi corectata/curatata manual
(valori de mana: acont2 = X, PG, PO, TXV, ANAF; randuri PLANCONT, TOATE, RESTUL).
3. Alte exporturi SAGA folosite in .prg (in afara de balanta)
Ambele .prg citesc din directorul SAGA urmatoarele tabele (danube :30-34, rompetrol :59-63):
| Fisier SAGA | Rol | Campuri folosite (din cod) | Exemplu in directoare |
|---|---|---|---|
conturi.dbf |
plan de conturi + solduri | Cont, tip, denumire, deb_init, deb_prec, cred_init, cred_prec (danube :81, :103; balanta.sql:11) |
saga2roa\conturi.dbf (864 inreg.) |
registru.dbf |
registru jurnal / note contabile | danube: cont_d, cont_c, explicatie, cod, suma, Data (:94-99); rompetrol: + id_nota, id_cont_d, id_cont_c, Curs, suma_val, cod_valuta, ndp, fel_d (:232) |
saga2roa\REGISTRU.DBF (2619 inreg.) |
clienti.dbf |
nomenclator clienti (parteneri) | cod, denumire, cod_fiscal, reg_com, analitic, judet, adresa, tara, is_tva (+ banca, cont_banca, tel, email in rompetrol) |
saga2roa\clienti.dbf (11 inreg.) |
furnizori.dbf |
nomenclator furnizori (parteneri) | aceleasi campuri | saga2roa\furnizori.dbf (76 inreg.) |
Structurile reale ale fisierelor-exemplu (format SAGA mai vechi):
conturi.dbf(15 campuri):CONT C(20), DENUMIRE C(60), TIP C(1), DEB_INIT N(15,2), CRED_INIT N(15,2), DEB_PREC N(15,2), CRED_PREC N(15,2), CONT_INCH C(20), DEB_INIT_V N(14,2), CRED_INIT_ N(14,2), DEB_PREC_V N(14,2), CRED_PREC_ N(14,2), COD_VALUTA C(3), BLOCAT N(1). Atentie: aceasta difera de structura documentata in cod (saga2roa_danube.prg:25, 35 campuri), care este formatul SAGA C.3.0 folosit de danube — si care coincide cubalanta.xls.REGISTRU.DBF(23 campuri):ID_NOTA N(10), VALIDAT C(1), CONT_D C(20), CONT_C C(20), SUMA N(15,2), COD_VALUTA C(3), CURS N(15,4), SUMA_VAL N(14,2), TVA N(15,2), EXPLICATIE C(70), DATA D(8), ID_CONT_D C(20), ID_CONT_C C(20), CATEGORIE C(16), NDP C(16), FEL_D C(20), TIP C(1), COD C(8), PLAN C(1), SECTOR C(1), SURSA C(1), CAPITOL C(1), ARTICOL C(1).clienti.dbf/furnizori.dbf: incep cuCOD C(8), DENUMIRE C(64), COD_FISCAL C(20), REG_COM C(16), ANALITIC C(20)(clienti are 31 campuri, furnizori 27).
Nu exista exporturi separate de tip "solduri furnizori" sau "solduri clienti" sau
"facturi" folosite de aceste .prg. Soldurile per partener se calculeaza in .prg din
registru.dbf + nomenclatoarele clienti/furnizori (danube :85-92, :311-343), nu se citesc
dintr-un fisier dedicat. In directoare exista si fisiere saga2roa\facturi_jurnal_tva_COFFEE*.xlsx
(coloane an, luna, cont, tip, numar, data, nume, cod_fiscal, sold, soldtvaneex, baza24, tva24, ...),
dar niciun .prg nu le refera (grep pe facturi_jurnal, balanta.xls, Balanta de verificare
in toate .prg-urile: zero rezultate). Sunt exporturi folosite de alt flux, nu de saga2roa*.
4. Raport de lucru
- Facut: cercetare read-only; citit
balanta.xls(xlrd + conversie LibreOffice), structurile DBFsaga2roa\CONTURI_ROA.DBFsisaga2roa_rompetrol\conturi_roa.dbf, toate locurileconturi_roadin cele trei .prg, plus structurileconturi/registru/clienti/furnizori.dbf. Scris acest fisier. - Verificari:
openpyxlpe.xls->InvalidFileException(confirmat);xlrd 2.0.2OK;soffice --headless --convert-to xlsx-> exit 0, fidelitate 342x35. Relatii de sume pe 341/341 randuri (tabel 1.5). Niciun fisier dinsaga2roa*modificat (doar citire); grepconturi_roa= 19 potriviri, toate citite; grep exporturi nefolosite = 0. - Nefacut / deschis: semnificatia setului
_1dinbalanta.xls(265 randuri zero, 78 identice cu setul principal) nu e dovedibila din fisierele disponibile; perioada la care se referabalanta.xls(nu exista in fisier un camp de an/luna);este_totalnu are echivalent in xls (nu exista rand de totaluri). - Stare periculoasa: niciuna. Fisierele de proiect nu au fost atinse; temporarele sunt in
Temp\opencode\sursa_saga; nu s-a facut write-back, nu au ramas procese, nu s-au consumat date.