Dovezile masurate pentru propunerile de directie (09.2026)

Backtest read-only pe productie: recunoasterea articolului la importul de
eFactura, contarea pe istoric de furnizor, identificarea partenerului la
importul de extrase, plafonul potrivirii facturii din textul bancii.
Include harta codului de import extrase, testul care confirma eroarea de
parsare BT si scripturile SQL reproductibile.

Propunerile care se sprijina pe ele:
COMUN/docs/cercetare/rec_directie_roacont_2026_09.md

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01T8jmGHs29e9eyLgoMiLBHW
This commit is contained in:
2026-09-03 14:19:16 +03:00
parent d4a9c800ff
commit f9af574877
12 changed files with 2088 additions and 0 deletions

View File

@@ -0,0 +1,78 @@
# Test parser extras BT (csvBT) - pozitie tert/iban in descriere
## Ce dovedeste testul
`ExtrasBanca_General::csvBT` (`Programe\oproceduri_import.prg:2923`) extrage tert si iban
din campul "Descriere" al CSV-ului BT dupa pozitie fixa (`;`, pozitia 3 = tert, pozitia 4 =
iban). Descrierea nu are acelasi numar de campuri la toate tipurile de tranzactie: la
"Plata OP inter - canal electronic" si "Comision plata OP" apare un camp in plus (numarul
OP-ului) inaintea denumirii, deci pozitia 3 ajunge sa fie numarul OP, iar pozitia 4 (IBAN-ul
real) ajunge sa fie luata drept... denumire, ramanand IBAN-ul real neluat deloc (era pe
pozitia 5, ignorata).
Test pe cele 44 de tranzactii reale ale firmei ROMFAST SRL (5 fisiere `tranzactii_*.csv`,
export BT):
| | inainte | dupa |
|---|---|---|
| Linii cu `iban` care arata a IBAN (`RO`+2 cifre+20 alfanumerice) | 8 | 18 |
| Linii cu `tert` numeric (sigur gresit - e numarul OP-ului) | 10 | 0 |
Cele 10 linii corectate sunt exact tranzactiile "Plata OP inter - canal electronic" si
"Comision plata OP". Celelalte 34 de linii (Incasare OP, Transfer intern, Plata la POS,
Pachet PJ) raman identice inainte/dupa - fix-ul nu le atinge.
## Corectia
`Programe\oproceduri_import.prg`, `Procedure csvBT` (in jurul liniei 3013): in loc de
pozitii fixe 3/4, se cauta in campurile despartite de `;` primul care trece validarea de
IBAN, cu functia deja existenta `VerifIBAN` (`COMUN\programe\oproceduri_comune.prg:7885`,
verifica cifra de control, nu doar forma). Daca se gaseste, `iban` = acel camp, `tert` =
campul dinaintea lui. Daca nu se gaseste niciun camp valid ca IBAN, comportamentul ramane
cel de azi (pozitia 3 = tert, pozitia 4 = iban) - acopera "Transfer intern", "Plata la POS",
"Pachet PJ", unde descrierea nu contine IBAN. Pozitia 2 (numerele de factura,
`lcDescriereFacturi`) nu s-a schimbat.
Capcana gasita si reparata la sursa: `VerifIBAN` (`COMUN\programe\oproceduri_comune.prg:7885`)
nu isi declara variabilele locale si le citeste/scrie neprefixate (`iban`, `mcontrol`, `miban`,
`mibansec`, `rest`, `i`, `dv`). In VFP, un nume nescris fara `m.` se rezolva mai intai la un
CAMP din alias-ul curent, abia apoi la variabila - deci atata timp cat apelantul are selectat
un cursor/tabela cu un camp `iban` (aici `c_iex.iban`, in `csvBT`), citirile si scrierile lui
`VerifIBAN` nimeresc campul, nu parametrul, si functia intoarce mereu `.F.`. Defectul afecta
orice apelant al `VerifIBAN` cu un asemenea cursor selectat - inclusiv formularele din
`onomenclatoare.vcx`/`oparteneri.vcx` care il apeleaza. Fix: `LOCAL mcontrol, miban, mibansec,
rest, i, dv` plus prefix `m.` pe toate referintele la parametru si variabile; logica
neschimbata. Diff: `docs/diff_runda1_verifiban_comun.patch` (fata de
`COMUN\programe\oproceduri_comune.prg.pre_runda1.bak`, alt depozit git decat ROACONT).
`csvBT` nu mai are nevoie de niciun ocol - apeleaza direct `VerifIBAN(m.lcCimp)`.
Diff parser: `docs/diff_runda1_parser_bt.patch` (fata de
`Programe\oproceduri_import.prg.pre_runda1.bak`).
## Cum se ruleaza testul
`teste_extras_bt.prg` (radacina proiectului) instantiaza clasa reala `ExtrasBanca_General`
si ruleaza `csvBT` peste toate fisierele `tranzactii_*.csv` dintr-un folder dat ca parametru,
fara Oracle (doar `SET PROCEDURE` pe `oproceduri_import.prg`, `COMUN\programe\oproceduri_comune.prg`,
`COMUN\programe\regex.prg`). Scrie rezultatul in `<folder>\rezultat_test_bt.txt`.
```powershell
$folder = 'D:\calea\catre\fisierele\tranzactii_bt'
$p = Start-Process 'C:\Program Files (x86)\Microsoft Visual FoxPro 9\vfp9.exe' -ArgumentList '-A','-T',"`"D:\roa\ROACONT\teste_extras_bt.prg`" $folder" -PassThru
$p.WaitForExit(120000)
```
Fisierele CSV reale folosite la test (denumiri parteneri + IBAN-uri reale ROMFAST SRL) NU
sunt in `docs/` - raman in scratchpad-ul sesiunii, nu s-au comis.
## Neacoperit
- **Fara IBAN in descriere** (26 din 44 de linii: "Transfer intern", "Plata la POS",
"Pachet PJ"): partenerul nu se poate deduce din descriere in aceste cazuri, fix-ul nu are
ce corecta - comportament identic cu inainte.
- **IBAN strain**: `VerifIBAN` cere exact 24 de caractere (lungimea IBAN romanesc), deci un
IBAN strain (alta lungime) nu e recunoscut si linia cade pe comportamentul de azi
(pozitiile fixe 3/4) - degradare sigura, nu regresie, nu era acoperit nici inainte.
- Nu s-a testat `tnTip = 2` (extras de cont final de luna, alt layout de coloane CSV) -
fisierele disponibile au fost toate `tnTip = 1` (lista de tranzactii).