|
|
|
|
@@ -0,0 +1,233 @@
|
|
|
|
|
# Precompletarea la importul de eFacturi
|
|
|
|
|
|
|
|
|
|
Directia, dupa masuratorile din 07-08.09.2026 pe toata productia (cabinetul `ROA_ROMFAST`, 21 de
|
|
|
|
|
scheme, si `VENDING`), read-only, backtest cronologic fata de ce a facut operatorul in realitate.
|
|
|
|
|
|
|
|
|
|
Principiul, si singurul criteriu de acceptare a oricarei propuneri de aici: **liniile vin completate,
|
|
|
|
|
fara niciun click, ecran sau formular nou.** Importul nu e adoptat pentru ca nu aduce inca un
|
|
|
|
|
beneficiu; orice adaugam trebuie sa scada munca, nu s-o mute.
|
|
|
|
|
|
|
|
|
|
Dovezile: `ROACONT\docs\backtest_precompletare_cont.md`, `backtest_precompletare_runda2.md`,
|
|
|
|
|
`inventar_campuri_de_retinut.md`, `masuratori_romfast_efactura.md`, `masuratori_vending_efactura.md`,
|
|
|
|
|
`profilare_semafor_vending.md`. Scripturi: `ROACONT\docs\cercetare\piata_ai_2026_09\sql\bt_26*`, `bt_27*`.
|
|
|
|
|
|
|
|
|
|
## 0. Ce se arunca
|
|
|
|
|
|
|
|
|
|
**Unde**: `COMUN\programe\semafor_contabilizare_ef.prg`, coloana de semafor din `frm_import_efactura`.
|
|
|
|
|
|
|
|
|
|
**Cum e azi**: o interogare mare calculeaza per factura o culoare (verde/galben/gri/articol nou) din
|
|
|
|
|
stabilitatea istoricului de conturi al furnizorului.
|
|
|
|
|
|
|
|
|
|
**Ce se schimba**: dispare, cu totul.
|
|
|
|
|
|
|
|
|
|
**Ce se castiga**: 36s per rulare la VENDING, 4,2s pe cabinet, la deschiderea ecranului si la fiecare
|
|
|
|
|
cautare (`masurat`). Profilarea arata ca timpul nu vine din scanarea lui `ACT` (0,6s) ci din combinatia
|
|
|
|
|
catalog + cascada normalizata din aceeasi interogare (35,3s izolat).
|
|
|
|
|
|
|
|
|
|
**Ce risc**: niciunul functional. Culoarea nu schimba nicio decizie a operatorului: pe cabinet 77,7%
|
|
|
|
|
din facturi ies "articol nou" si doar 3,8% verzi, iar relaxarea pragului de stabilitate de la 5 la 3
|
|
|
|
|
documente aduce +13 facturi din 924 (`masurat`).
|
|
|
|
|
|
|
|
|
|
Ramane din runda 18 doar verificarea locala a lipsurilor (`CoadaContabilizareEF.LipsuriDetalii`, fara
|
|
|
|
|
Oracle), ca sa nu iasa tacit documente cu cont gol pe ruta `ImportGeneral`.
|
|
|
|
|
|
|
|
|
|
**Coada de import ramane**, dar numai pentru facturile complet completate: o factura careia ii lipseste
|
|
|
|
|
ceva nu intra in lot, se debifeaza singura si motivul se vede pe rand. Regula e deja scrisa (runda 18) si
|
|
|
|
|
nu depinde de semafor - lipsurile se calculeaza local, pe liniile facturii. Dupa precompletare lotul
|
|
|
|
|
devine util de la sine: 9,0% -> 66,5% din facturi fara nicio lipsa pe cabinet (`masurat`).
|
|
|
|
|
|
|
|
|
|
## 1. Contul si analiticul pe linie
|
|
|
|
|
|
|
|
|
|
**Unde**: `COMUN\programe\recunoastere_articol_ef.prg`, folosit din
|
|
|
|
|
`frm_import_efactura.completeazaDetaliiFactura` (`COMUN\clase\anaf_efactura.vc2`).
|
|
|
|
|
|
|
|
|
|
**Cum e azi**: contul se cauta in catalogul de articole (denumire/codbare/codmat/codmatf,
|
|
|
|
|
`oproceduri_comune.prg:7267`) si in istoricul **aceluiasi furnizor pe acelasi articol**, text exact si
|
|
|
|
|
cheie normalizata. Ce nu prinde, ramane gol.
|
|
|
|
|
|
|
|
|
|
**Ce se schimba**: doua surse noi, dupa cele existente, doar pentru liniile ramase goale:
|
|
|
|
|
1. **articolul contat oriunde in firma**, indiferent de furnizor, pe cheia normalizata, cu garda de
|
|
|
|
|
unicitate la 70% si fereastra **ultima factura**;
|
|
|
|
|
2. **contul dominant al furnizorului**, indiferent de articol, cu garda la 90%, fereastra **ultimele
|
|
|
|
|
trei facturi**, si **doar contul sintetic** - analiticul ramane al operatorului;
|
|
|
|
|
3. ce mai ramane ia **contul majoritar al celorlalte linii ale aceleiasi facturi**, fara prag.
|
|
|
|
|
|
|
|
|
|
Analiticul liniei (`3xxx.xxx`, `6xxx.xxxx`) se propune doar din sursa 1 (94,3% precizie), niciodata din
|
|
|
|
|
sursa 2 (79,3%).
|
|
|
|
|
|
|
|
|
|
Analiticul contului de furnizor si de client din antet (`401.xxxx`, `4111.xxxx`) nu intra: exista ca
|
|
|
|
|
mecanism (`IREG_PARTENERI`/`BALANTA_PARTENERI`, cu partener + cont + analitic), dar nu e folosit - vezi
|
|
|
|
|
respinse.
|
|
|
|
|
|
|
|
|
|
**Ce se castiga** (`masurat`, cabinet, 15.828 linii/an): acoperire pe linie 77,8% -> 97,7%; facturi fara
|
|
|
|
|
nicio lipsa de cont 9,0% -> 66,5%; la VENDING 2,5% -> 69,2%. Fereastra conteaza mult: pe sursa 1,
|
|
|
|
|
ultima factura da 85,0% acoperire cu 93,7% precizie, fata de 60,5% / 90,1% la 36 de luni, iar castigul
|
|
|
|
|
e cel mai mare la furnizorii care factureaza lunar (>=8 facturi/an).
|
|
|
|
|
|
|
|
|
|
**Ce risc**: precizia propunerilor scade de la 89,5% la 84,9% (`masurat` cu ferestrele vechi; de
|
|
|
|
|
recalculat la implementare, cifra e un plafon pesimist - treptele noi masurate cu fereastra corecta dau
|
|
|
|
|
93-94%). Practic: din 100 de linii precompletate circa 15 se corecteaza, fata de 22 care azi se scriu
|
|
|
|
|
de la zero. Mitigare fara UI nou: `sursa_cont` exista deja pe linie si arata de unde vine propunerea.
|
|
|
|
|
|
|
|
|
|
## 2. Gestiunea pe linie
|
|
|
|
|
|
|
|
|
|
**Unde**: aceeasi cascada; azi gestiunea vine doar din istoricul (furnizor, articol), altfel din optiunea
|
|
|
|
|
globala `EFACTURA_ID_GESTIUNE_P`.
|
|
|
|
|
|
|
|
|
|
**Cum e azi**: la firmele cu mai multe gestiuni, optiunea globala e practic inutila - niciuna din cele
|
|
|
|
|
21 de firme nu are o singura gestiune activa (au intre 2 si 467), deci nu exista implicit cinstit.
|
|
|
|
|
|
|
|
|
|
**Ce se schimba**: gestiunea trece prin aceleasi surse noi, cheia fiind partener+articol, fereastra
|
|
|
|
|
ultima factura.
|
|
|
|
|
|
|
|
|
|
**Ce se castiga** (`masurat`): facturi complet rezolvate la VENDING 23,3% -> 86,0% (acoperire 97,2%,
|
|
|
|
|
precizie 98,1%); pe cabinet 53,0% -> 89,1%. Conteaza aproape numai la firmele cu stoc: acolo gestiunea
|
|
|
|
|
e 38,7% din blocaje, la cabinet 4,2%.
|
|
|
|
|
|
|
|
|
|
**Ce risc**: stabilitatea per (partener, articol) e 64% - mai mica decat la cont. Ramane peste alternativa
|
|
|
|
|
de azi (o gestiune unica pe toata firma), dar merita marcata ca propunere, nu ca certitudine.
|
|
|
|
|
|
|
|
|
|
## 3. Data scadentei
|
|
|
|
|
|
|
|
|
|
**Unde**: `crsFacturi.data_scad`, `frm_import_efactura.completeazaFactura`.
|
|
|
|
|
|
|
|
|
|
**Cum e azi**: se scrie de mana la fiecare factura.
|
|
|
|
|
|
|
|
|
|
**Ce se schimba**: se propune scadenta de pe ultima factura a aceluiasi partener.
|
|
|
|
|
|
|
|
|
|
**Ce se castiga** (`masurat`): se completeaza la 86,1% din facturi si coincide cu ultima factura a
|
|
|
|
|
aceluiasi partener in 87,3% din cazuri.
|
|
|
|
|
|
|
|
|
|
**Ce risc**: cel mai mare din tot pachetul. O scadenta gresita nu se vede pe ecran, dar ajunge in balanta
|
|
|
|
|
si in raportarile de plati. Se propune doar cand campul din eFactura e gol, niciodata peste o valoare
|
|
|
|
|
venita din XML.
|
|
|
|
|
|
|
|
|
|
## 4. Contractul
|
|
|
|
|
|
|
|
|
|
**Unde**: `crsFacturi.Id_Ctr`.
|
|
|
|
|
|
|
|
|
|
**Cum e azi**: ales de mana, cand se foloseste.
|
|
|
|
|
|
|
|
|
|
**Ce se schimba**: se propune contractul de pe ultima factura a aceluiasi partener.
|
|
|
|
|
|
|
|
|
|
**Ce se castiga** (`masurat`): se completeaza rar (16,8% din facturi), dar cand se completeaza e acelasi
|
|
|
|
|
in 93,8% din cazuri - deci ieftin si sigur, pentru firmele care lucreaza pe contracte.
|
|
|
|
|
|
|
|
|
|
**Ce risc**: mic; camp fara efect contabil direct.
|
|
|
|
|
|
|
|
|
|
## 5. Alegerile din antet care azi se pierd: deducerea, discountul, contul si analiticul partenerului
|
|
|
|
|
|
|
|
|
|
**Unde**: `cboDeducere` (`COMUN\clase\anaf_efactura.vc2:9672`, folosit la `:13153`),
|
|
|
|
|
`chkDistribuieDiscount` (`:12254`), si campurile de antet `Cont`/`ACont` (`txtCont`/`txtAcont`,
|
|
|
|
|
cursorul `vizImportEFactura` in `COMUN\programe\import_efactura.prg:44`).
|
|
|
|
|
|
|
|
|
|
**Cum e azi**: toate patru sunt **tranzitorii**. `Cont` si `acont` vin goale din interogare (`'' as Cont,
|
|
|
|
|
'' as acont`), se completeaza la rulare si nu se scriu inapoi; deducerea si discountul merg direct in
|
|
|
|
|
nota contabila. In DDL (`anaf_efactura.sql`) nu exista nicio coloana pentru ele. Deci la fiecare factura
|
|
|
|
|
de la acelasi furnizor se aleg din nou: analiticul lui `401`, deducerea 50%, distribuirea discountului.
|
|
|
|
|
|
|
|
|
|
**Ce se schimba**: patru coloane noi pe `ANAF_EFACTURA` in care se salveaza ce a ales operatorul la
|
|
|
|
|
import (`cont`, `acont`, deducerea, distribuirea discountului), si repropunerea valorilor de la ultima
|
|
|
|
|
factura a aceluiasi partener - furnizor sau client, cu aceeasi cheie.
|
|
|
|
|
|
|
|
|
|
Asta acopera si analiticul `401.xxxx` / `4111.xxxx`: nu se deduce din balanta (vezi respinse), ci se
|
|
|
|
|
**tine minte ce a scris operatorul** si se repropune la acelasi partener. Nu depinde de faptul ca azi
|
|
|
|
|
nimeni nu foloseste analitice pe aceste conturi - daca operatorul scrie unul, se retine.
|
|
|
|
|
|
|
|
|
|
**Ce se castiga**: `nemasurat` - stabilitatea nu se poate masura azi, pentru ca valoarea nu se salveaza.
|
|
|
|
|
Se masoara dupa prima luna de date.
|
|
|
|
|
|
|
|
|
|
**Ce risc**: cere script de migrare si versiune noua de `.exe`. Deducerea gresita are efect fiscal, deci
|
|
|
|
|
se propune, nu se aplica tacit: valoarea propusa ramane vizibila in acelasi loc in care se alege azi.
|
|
|
|
|
|
|
|
|
|
## 6. Facturile emise (importate din SPV)
|
|
|
|
|
|
|
|
|
|
**Cum e azi**: masuratorile s-au facut doar pe primite; 15 din 20 de scheme au si emise importate
|
|
|
|
|
(1.680 linii / 1.456 facturi pe 12 luni).
|
|
|
|
|
|
|
|
|
|
**Ce se schimba**: aceeasi cascada, cu clientul in locul furnizorului. Codul e deja simetric
|
|
|
|
|
(`lPrimite`, perechile de optiuni `_E`/`_P`).
|
|
|
|
|
|
|
|
|
|
**Ce se castiga** (`masurat`): acoperire 98,8%, precizie 97,7% - dar spatiul de conturi de vanzare e
|
|
|
|
|
foarte ingust (unele firme folosesc un singur cont pe an), deci cifra e reala si usoara, nu comparabila
|
|
|
|
|
cu achizitiile. La VENDING sunt 22.457 de facturi emise, dar prin alt flux, fara conturi pe linii -
|
|
|
|
|
nemasurabil.
|
|
|
|
|
|
|
|
|
|
## 7. Configurarea, care azi nu se deschide niciodata
|
|
|
|
|
|
|
|
|
|
**Unde**: `frm_import_efactura.Cmd_executa2.Click` si `frm_configurare_efactura`
|
|
|
|
|
(`COMUN\clase\anaf_efactura.vc2:14615`). Analiza completa:
|
|
|
|
|
`ROACONT\docs\analiza_configurare_import_efactura.md`.
|
|
|
|
|
|
|
|
|
|
**Cum e azi**: 15 optiuni `EFACTURA_*`, dintre care doar patru schimba cu adevarat rezultatul importului
|
|
|
|
|
(contul implicit de articole si gestiunea implicita, pe primite si pe emise). Restul fie umplu un camp
|
|
|
|
|
fara nicio verificare, fie sunt comutatoare ale cascadei al caror raspuns corect e mereu acelasi.
|
|
|
|
|
Masurat pe cabinet: `EFACTURA_CONT_ART_P` e setata la **0 din 21** de firme, gestiunea implicita la 0
|
|
|
|
|
efectiv (trei firme au valoarea 0), iar comutatoarele cascadei n-au fost atinse de nimeni. Ecranul de
|
|
|
|
|
Configurare nu se deschide, deci singurele optiuni care conteaza sunt goale peste tot.
|
|
|
|
|
|
|
|
|
|
**Ce se schimba**, in aceasta ordine si abia **dupa** precompletare, pentru ca ea sterge cea mai mare
|
|
|
|
|
parte a nevoii de configurare:
|
|
|
|
|
1. **Ecranul se subtiaza**: raman doar cele patru optiuni care conteaza; cele fara efect dispar din
|
|
|
|
|
interfata, iar comutatoarele cascadei devin constante in cod (raman citite, ca sa nu se strice
|
|
|
|
|
singura firma care si-a oprit manual preluarea din facturi anterioare).
|
|
|
|
|
2. **Ce ramane urca pe ecranul de import**, pe randul liber deja masurat (`Left 130-530`, `Top 57-84`),
|
|
|
|
|
cu tiparul de camp + buton de cautare deja folosit pe forma. Dispare motivul de a deschide un ecran
|
|
|
|
|
separat.
|
|
|
|
|
3. **Optiunea se naste din lucru**: cand operatorul completeaza manual un camp pentru care exista o
|
|
|
|
|
optiune, langa el apare "foloseste asta de fiecare data", care scrie optiunea prin `scrie_optiune`
|
|
|
|
|
(`oinit_optiuni.prg:827`). Nu se cere nimic inainte si nu apare niciun ecran nou.
|
|
|
|
|
|
|
|
|
|
**Ce se castiga**: gestiunea implicita globala devine inutila dupa precompletare - nicio firma din 21 nu
|
|
|
|
|
are o singura gestiune activa, deci un implicit global nu putea fi corect (`masurat`); ramane doar contul
|
|
|
|
|
implicit, ca plasa de siguranta pentru liniile pe care nimic altceva nu le rezolva, si acolo se aplica
|
|
|
|
|
punctul 3.
|
|
|
|
|
|
|
|
|
|
**Ce risc**: un implicit scris din greseala se propaga tacit. Se previne cu eticheta explicita pe
|
|
|
|
|
alegere si cu faptul ca valoarea e mereu la vedere pe ecranul de import, nu ascunsa.
|
|
|
|
|
|
|
|
|
|
## Respinse, cu motivul
|
|
|
|
|
|
|
|
|
|
- **Potrivirea fuzzy a articolelor** (Jaro-Winkler, edit distance, `UTL_MATCH`): 80% precizie la
|
|
|
|
|
acoperire mica, sub cascada actuala (93-95%), si batuta de regula fara text "ultimele trei conturi ale
|
|
|
|
|
furnizorului", care e chiar sursa 2 de mai sus.
|
|
|
|
|
- **Deducerea analiticului `401.xxxx` / `4111.xxxx` din datele existente**: mecanismul exista
|
|
|
|
|
(`IREG_PARTENERI`/`BALANTA_PARTENERI`), dar e nefolosit - la cabinet doar 2 din 21 de firme au analitic
|
|
|
|
|
pe aceste conturi, si acolo e o categorie sau un proiect, nu identitatea partenerului (la una, un
|
|
|
|
|
singur cod acopera 98,6% din linii); la VENDING completarea e 0% si nici nu exista coduri analitice
|
|
|
|
|
definite pentru ele. Nu exista legatura partener -> analitic din care sa se deduca ceva.
|
|
|
|
|
**Respinsa e doar deducerea din balanta**; retinerea valorii scrise de operator si repropunerea ei la
|
|
|
|
|
acelasi partener sunt in plan, la punctul 5.
|
|
|
|
|
- **Valori implicite propuse din date pentru Configurare**: nicio firma din 21 nu are o singura gestiune
|
|
|
|
|
activa, iar contul de achizitie dominant e in medie 37,8% si niciodata peste 50%.
|
|
|
|
|
- **TVA la incasare**: nu e o decizie a operatorului, se verifica la ANAF; o valoare memorata ar putea
|
|
|
|
|
fi gresita.
|
|
|
|
|
- **Explicatia documentului**: completata la 18,1% din facturi si stabila doar in 50,9%.
|
|
|
|
|
- **Sectia, venitul/cheltuiala, responsabilul, lucrarea, felul documentului**: constante ale firmei, nu
|
|
|
|
|
decizii per factura - locul lor e in Configurare.
|
|
|
|
|
- **Un ecran de completare grupata pe articol** (macheta din 07.09): ar fi dus lotul de la 9% la 62%,
|
|
|
|
|
dar cu pretul unui formular in plus. Precompletarea de mai sus ajunge la 66,5% fara niciun ecran.
|
|
|
|
|
- **Index nou pe `ACT`** pentru semafor: bucata care scaneaza `ACT` costa 0,6s din 36s, deci nu ea e
|
|
|
|
|
problema; iar semaforul dispare.
|
|
|
|
|
|
|
|
|
|
## Capcane de masurare platite
|
|
|
|
|
|
|
|
|
|
- Facturile de test nu se recunosc doar dupa numar: 16 facturi aveau `TEST=1` si numar gol, si faceau ca
|
|
|
|
|
lunile recente sa para pline de date reale.
|
|
|
|
|
- `TRIM(x) = ''` e mereu fals in Oracle - a falsificat o prima rulare a backtestului.
|
|
|
|
|
- Fereastra de istoric e un parametru cu efect mare, nu un detaliu: 36 de luni fata de ultima factura
|
|
|
|
|
inseamna 25 de puncte de acoperire in minus pe sursa de articol.
|
|
|
|
|
- Timpul unei interogari nu se judeca dupa volumul de date: pe VENDING citirea costa nimic, iar 35 din
|
|
|
|
|
36 de secunde vin din combinarea a doua bucati care, separat, ruleaza sub 4s fiecare.
|
|
|
|
|
|
|
|
|
|
## Ordinea de implementare
|
|
|
|
|
|
|
|
|
|
1. Scoaterea semaforului (castig imediat de viteza, sterge cod).
|
|
|
|
|
2. Contul si analiticul pe linie, cu ferestrele masurate. Se masoara timpul de deschidere a unei
|
|
|
|
|
facturi inainte si dupa: **precompletarea trebuie sa fie instantanee**, altfel nu s-a rezolvat nimic.
|
|
|
|
|
3. Gestiunea, pe aceleasi surse.
|
|
|
|
|
4. Data scadentei si contractul.
|
|
|
|
|
5. Deducerea si distribuirea discountului (cer script de migrare).
|
|
|
|
|
6. Configurarea: subtiere, urcarea pe ecranul de import, alegerea care scrie optiunea. Abia acum, cand
|
|
|
|
|
se stie ce a mai ramas necesar dupa precompletare.
|
|
|
|
|
7. Emise, dupa ce primitele sunt livrate si verificate.
|