feat(scripts): line-level residual check in relink_manual_invoices
Linking the VANZARI header (ID_COMANDA) makes the app dashboard show an order facturat, but ROA decides facturat at the LINE level (PACK_FACTURARE.cursor_comanda matches invoiced qty on ID_ARTICOL + exact PRET). When a manual invoice represented lines differently than the order (e.g. per-VAT-rate discounts consolidated into one 0%-TVA line), the order stays nefacturat in ROA despite the header link. Add order_line_residual(): predicts the residual before --apply (via extra_idv) and re-verifies after linking. Warns in the plan, the summary counter, and post-apply when an order will still show nefacturat. The script never touches COMENZI_ELEMENTE — those need a manual line fix. Surfaced by orders 5419/5423 (web 492710430/492710513) on 2026-06-26. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -61,6 +61,26 @@ Verifica si ca acea comanda e activa in ROA (`sters=0`) si **nu** are deja factu
|
||||
La aplicare: `UPDATE VANZARI SET ID_COMANDA = <comanda>` + populeaza
|
||||
`orders.factura_*` in SQLite, exact ca aplicatia (`update_order_invoice`).
|
||||
|
||||
### ⚠ Verificare reziduu de linie (legatura header nu e mereu suficienta)
|
||||
|
||||
Aplicatia / dashboard-ul marcheaza o comanda „Facturat" doar dupa **legatura header**
|
||||
(`VANZARI.ID_COMANDA`). **ROA insa verifica la nivel de linie**: in
|
||||
`PACK_FACTURARE.cursor_comanda`, cantitatea facturata se potriveste cu comanda pe
|
||||
**`ID_ARTICOL` + `PRET` exact**, iar o linie e „de facturat" cand
|
||||
`SIGN(CANTITATE) * (CANTITATE − NVL(facturat,0)) > 0`.
|
||||
|
||||
Daca factura manuala a reprezentat liniile **altfel** decat comanda — tipic discounturi
|
||||
comasate (ex. discounturile pe cote de TVA 11%/21% puse intr-o singura linie la 0% TVA) —
|
||||
preturile nu se mai potrivesc, deci ROA arata comanda **tot nefacturata** desi headerul
|
||||
e legat si dashboard-ul o vede facturata.
|
||||
|
||||
Scriptul **prezice** acest reziduu inainte de `--apply` (functia `order_line_residual`,
|
||||
simuland factura ce urmeaza a fi legata) si il **re-verifica** dupa legare. Cand exista,
|
||||
afiseaza `!! ATENTIE ...` cu liniile reziduale (ART / cantitate comanda / pret / facturat)
|
||||
si un contor in rezumat. **Scriptul NU atinge `COMENZI_ELEMENTE`** — aceste cazuri se
|
||||
corecteaza **manual in ROA** (aliniezi liniile comenzii la factura, ex. comasezi liniile
|
||||
de discount ca in factura, pastrand valoarea totala).
|
||||
|
||||
## Utilizare
|
||||
|
||||
Ruleaza **pe serverul de productie VENDING** (are nevoie de Oracle prod +
|
||||
@@ -102,5 +122,12 @@ Codifica reconcilierea din **2026-06-26** (pana de curent la VENDING): pool cazu
|
||||
legate; 3 facturi de depozit corect excluse (CRISS VENDING, COFEE SEVEN TO GO,
|
||||
PANDELE MIOARA); 2 parteneri duplicati semnalati (CERBU, MILITARU).
|
||||
|
||||
**Follow-up 2026-06-26 (reziduu de linie):** 2 din cele 12 comenzi (5419/web 492710430,
|
||||
5423/web 492710513) au ramas nefacturate **in ROA** desi headerul era legat — factura
|
||||
manuala comasase cele 2 linii de discount (ART 2077, split pe TVA 11%/21%) intr-una la
|
||||
0% TVA, deci nu se potriveau pe `ID_ARTICOL+PRET`. Reparate manual prin alinierea
|
||||
liniilor comenzii la factura (comasare in `COMENZI_ELEMENTE`, valoare discount pastrata).
|
||||
De aici provine verificarea de reziduu de linie adaugata in script.
|
||||
|
||||
Vezi si: [oracle-schema-notes.md](oracle-schema-notes.md) (tabele `COMENZI`/`VANZARI`),
|
||||
sectiunea „Facturi & Cache" din [README](../README.md).
|
||||
|
||||
Reference in New Issue
Block a user