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
60 lines
3.2 KiB
Markdown
60 lines
3.2 KiB
Markdown
# 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.
|