Files
roafacturare/docs/plan_10_integrare_contracte.md
Marius Mutu d9f5ca4226 docs: planurile, proiectarile si rapoartele de lucru intra in versionare
Folderul docs\ era pana acum in afara oricarui control de versiuni - nici git,
nici SVN - desi contine planurile pe puncte, proiectarile si rapoartele de
cercetare pe care se sprijina modificarile din cod. O stergere acolo era
definitiva.

Fisierele intermediare (handoff-uri intre sesiuni, diff-uri deja aplicate) au
fost sterse inainte, nu versionate: ce era durabil in ele a intrat in antetele
fisierelor de test la care se refereau.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SN8snvkk94KuhWwoXUUey3
2026-08-11 22:17:17 +03:00

6.1 KiB

Plan #10 — integrarea paginii de contracte in ROAFACTURARE

Sursa: COMUN\docs\todos.txt punctul 10. Ordine de executie: ultimul. Marius si-a exprimat indoiala asupra utilitatii; planul incepe cu o decizie go/no-go, nu cu implementarea. Stare: propunere, neinceput.

Constatarea care pune sub semnul intrebarii lucrarea

Motorul de facturare pe baza de contract exista deja si e complet functional in ROAFACTURARE. Nu e o functionalitate lipsa, ci una care merge azi fara pagina de contracte:

  • facturare_contracte(tcTip) (COMUN\programe\oproceduri_facturare.prg:119-136) — primeste "FACTURA LEI" / "INVOICE" / "FACTURA VALUTA" si apeleaza factureaza(2) / (6) / (52).
  • Buton deja pe pagina de fundal: Page2.Cw2.do_actiune (Clase\ofundal_facturare.vc2:886-897), meniu cu cele 3 optiuni.
  • Cautarea contractului facturabil: caut_contract_facturare(tnIdPart, tcSirTipFacturare) (COMUN\programe\oproceduri_facturare.prg:1986-2021), din view-ul Oracle fact_vcontracte (:2001).
  • Alegerea contractului pe factura: frm_date_factura.do_cauta_contract (COMUN\clase\ofacturare.vc2:9067-9115) si frm_date_aviz.do_cauta_contract (:7049-7051).
  • Tab/grid dedicat pe editorul de articole: grd_contracte, cb_contracte, cursor crscontracte (COMUN\clase\ofacturare.vc2:15069-15107).
  • Exista si aviz "catre clienti din contract", tip 26 (oproceduri_facturare.prg:207, :2045).
  • Ratele de contract se scriu la emitere: finalizeaza_factura cheama scrie_rate_factura pentru ntip in (2,6,52) (ff_2026_03_23_04_COMUN_PACK_FACTURARE.sql:14785-14786).

Ce lipseste efectiv, fata de cerinta:

  1. pagina de editare CRUD a contractelor in ROAFACTURARE (azi doar in exe-ul separat D:\ROA\ROACONTRACTE, cu Clase\ferestre_contracte.vcx);
  2. rapoarte de contracte (glob *contract* in ROAFACTURARE\Rapoarte\ nu intoarce niciun .frx — doar meniu si iconite);
  3. comasarea drepturilor pe obiectele din ROACONTRACTE cu cele noi din ROAFACTURARE.

Observatie: ROAFACTURARE\Meniuri\contracte.mnx exista deja, dar e un popup de facturare (lei / invoice / valuta), nu un meniu de administrare — deci numele e ocupat, continutul nu.

Intrebarea de decis inainte de orice cod

Cine editeaza azi contractele si cat de des? Daca persoana care factureaza nu e si cea care intocmeste contractele, integrarea CRUD in ROAFACTURARE nu scade nimic din efortul zilnic — motorul de facturare merge deja. In cazul asta lucrarea se reduce eventual la punctul 2 (rapoarte), care e mult mai ieftin.

Stories

S0 — Decizie go/no-go — DATE CULESE, 05.08.2026

Rulat read-only pe schema de productie VENDING:

Masura Valoare
contracte existente 4
contracte create in ultimele 12 luni 0
facturi emise vreodata pe baza de contract (tip 2, 6, 52) 0
facturi din contract in ultimele 12 luni 0

Pentru context, din 140 656 de facturi: 116 071 pe lista de preturi, 5 608 din comanda, 11 din aviz.

La acest client contractele sunt practic nefolosite, iar mecanismul de facturare pe contract — care exista si e complet — nu a fost folosit niciodata. O pagina CRUD de contracte in ROAFACTURARE nu ar scadea niciun efort real aici.

Limitare importanta: e un singur client. Inainte de un no-go definitiv, aceleasi patru cifre trebuie luate de la 2-3 clienti care chiar lucreaza pe contracte. Daca si acolo ies zerouri, punctul #10 se inchide; daca nu, se reia de la S1 cu clientul respectiv ca referinta. Gata cand: cifrele exista de la inca 2-3 clienti si decizia e scrisa.

S1 — Inrolarea ROACONTRACTE in fluxul text

ROACONTRACTE nu are cache text generat, deci ferestre_contracte.vcx nu se poate citi in detaliu si nu se poate edita pe text. Procedura: COMUN\docs\inrolare-proiect-git-text.md. Depinde de: S0 = go.

S2 — Clasa container ct_contracte in COMUN

Dupa sablonul ct_comenzi (COMUN\clase\ocomenzi.vcx): container CRUD montabil, fisiere in COMUN\clase\, deci schimbare cross-project. Depinde de: S1.

S3 — Incarcare lazy

Aceeasi cerinta ca la #11: datele se incarca la prima activare a paginii, cautarea trimite WHERE in Oracle. Sablonul e detaliat in plan_11_integrare_politici_preturi.md (S4) — se copiaza din ocomenzi.vc2:1088-1104 / :1484-1510, nu se inventeaza un al doilea.

Atentie — capcana confirmata: ct_contracte din ROACONTRACTE (Clase\ferestre_contracte.vc2:9) mosteneste acelasi _ct_base ca ct_comenzi, dar nu suprascrie actualizeaza_cursoare/creeaza_cursoare (zero aparitii in fisier), deci foloseste stub-ul gol si nu e lazy azi — cursorul principal cContracte apare deja populat la Init (:1518-1527). Daca clasa se aduce ca atare, se aduce si incarcarea eager. Sablonul de copiat e strict cel din ocomenzi.vc2. Depinde de: S2.

S4 — Montare in fundal + entry point + drepturi

Obiect nou in Clase\ofundal_facturare.vc2 langa lb_comenzi; bloc *** CONTRACTE in Programe\roafacturare.prg (SET CLASSLIB / SET PROCEDURE, dupa modelul :180-181 si :239-242); adaugare in roafacturare.pjx. Drepturi: nid_cw libere — Page2 are deja Cw1..Cw9 ocupate (Clase\ofundal_facturare.vc2:882-926); catalogul server-side din spatele contafin_oracle.vdef_util_obiecte trebuie inspectat direct in Oracle inainte de alocare. Comasarea cu drepturile existente din ROACONTRACTE se face aici. Depinde de: S2.

S5 — Rapoarte de contracte

Poate fi livrat independent de restul, daca S0 arata ca doar rapoartele sunt cerute. .frx se editeaza doar in IDE-ul VFP. Depinde de: S0.

S6 — Testare, diff, changelog

Test UI (COMUN\docs\testare-ui-vfp.md); verificare ca ROACONTRACTE stand-alone continua sa mearga. Diff ca fisier in docs\, commit dupa aprobare, in doua repo-uri (ROAFACTURARE si COMUN).

Riscuri

  • Cel mai mare risc e sa se construiasca ceva ce nu reduce niciun efort real — de aceea S0 e blocant.
  • Comasarea drepturilor atinge un catalog Oracle nevizibil in sursa VFP; e partea cea mai putin estimabila.
  • COMUN\clase\ inseamna impact pe toate produsele.
  • Duplicarea CRUD-ului de contracte in doua exe-uri care scriu aceleasi tabele cere validari identice in ambele.