Curatenie ceruta dupa inchiderea lui #6. Folderul cercetare\ NU se putea sterge in bloc: plan_13 se sprijina pe el cu 85 de trimiteri, deci e baza de dovezi a planului aflat in lucru. Impartirea: - 14 cercetari trans-proiect trec in COMUN\docs\cercetare\ - valuta si curs, TVA/VANZARI, consumatorii VANZARI din toata suita, integrarile #10/#11/#12, watchdog VFP, proiectarea Oracle a lui S5, view-ul VVANZARI_ARTICOLE. Nu sunt ale ROAFACTURARE, iar #10/#11/#12 se reiau chiar din ele. - 20 de rapoarte de executie ale lui #6, nereferite de nimic viu, sterse. - 91 raman, neatinse. Trimiterile catre handoff-urile si diff-urile intermediare deja desfiintate au fost curatate peste tot (39 de fisiere): 50 catre handoff-uri, 37 catre diff-uri aplicate, plus caile celor mutate in COMUN. Zero trimiteri rupte ramase. progres.md preia rolul de predare: ce ramane din #6 (cele sase documente parazite, cele doua esecuri reale din S8 pe factura din aviz), cifrele de test citite din log, si cele doua capcane de mediu platite - .FXP vechi executat in locul .prg-ului, si GETFONT() care atarna un formular instantiat fara goApp. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SN8snvkk94KuhWwoXUUey3
5.9 KiB
S4 sub-blocul C — corectie decizii 36 si 37
Runda scurta de corectie peste ActualizeazaVerdictActRul (COMUN\clase\omodificari.vc2:12978),
livrata si testata in rec_s4_runda3c2.md. Doua reguli schimbate, nimic altceva rescris.
Ce s-a schimbat
Decizia 36 — suma RUL doar pe ID_TIP_RULAJ = 0
Formula veche (SUM(cant*pretvtva) + SUM(cante*pretvtva WHERE id_tip_rulaj<>3)) inlocuita cu:
SUM (Nvl(cant,0) + Nvl(cante,0)) * Nvl(pretvtva,0) ;
TO lnTotalRul FOR Nvl(sters,0) = 0 AND Nvl(id_tip_rulaj,0) = 0
Randurile ID_TIP_RULAJ = 3 (miscari virtuale de diferenta de pret) nu mai intra deloc in suma —
nicio euristica de excludere pe potrivire de valoare, doar filtrul semantic cerut.
Decizia 37 — cont de referinta pe rate/contract accepta 4111/411/461
Adaugat un caz nou in DO CASE pe This.nTipVanzare, pentru tip 2/6/52, care seteaza lcCont
la o lista delimitata de conturi in loc de un singur cont; comparatiile Alltrim(...) == m.lcCont
au fost inlocuite cu (','+Alltrim(...)+',') $ m.lcCont (echivalent cu INLIST, dar pastreaza o
singura variabila lcCont in loc sa ramifice codul de sumare). Restul tipurilor de document
(avize 461/418, facturi obisnuite) raman pe un singur cont, neschimbate.
Cod
COMUN\clase\omodificari.vc2, metoda ActualizeazaVerdictActRul (linii 13004-13039 dupa editare):
DO CASE
CASE INLIST(This.nTipVanzare, 28, 29)
lcCont = ',461,'
CASE INLIST(This.nTipVanzare, 21, 22, 24, 26)
lcCont = ',418,'
CASE INLIST(This.nTipVanzare, 2, 6, 52)
lcCont = ',4111,411,461,'
OTHERWISE
lcCont = ',4111,'
ENDCASE
...
SUM (IIF((','+Alltrim(Nvl(scd,''))+',') $ m.lcCont, Nvl(suma,0), ;
IIF((','+Alltrim(Nvl(scc,''))+',') $ m.lcCont AND !INLIST(Alltrim(Nvl(scd,'')), '5311','5314','5121','5125','5126'), -Nvl(suma,0), 0))) ;
TO lnTotalAct FOR Nvl(sters,0) = 0
...
SUM (Nvl(cant,0) + Nvl(cante,0)) * Nvl(pretvtva,0) ;
TO lnTotalRul FOR Nvl(sters,0) = 0 AND Nvl(id_tip_rulaj,0) = 0
Diff complet: diff aplicat (sters).
Test actualizat
COMUN\utile\Teste\editare_factura\test_verdict_act_rul.prg:
- Calculul manual (SCAN independent) de Total RUL actualizat la noua formula (doar
ID_TIP_RULAJ = 0,cant+cante). - Asertia care astepta "divergent" pe
cod=1140895a fost inversata: acum verifica explicitTotal ACT == 1924.59,Total RUL == 1924.59si verdict "sincronizat" — nu doar egalitatea celor doua totaluri (o asertie care ar trece si daca ambele ar cadea pe zero). - Asertii noi, prin mutatie in memorie pe cursoarele deja incarcate (fara scriere in Oracle):
- un rand
ID_TIP_RULAJ = 3cu cantitatea marita cu 1000 nu modifica Total RUL; - un rand
ID_TIP_RULAJ = 0cu cantitatea marita cu 1 modifica Total RUL cu exactpretvtva; - pe tip=2, contul mutat pe
411intra in Total ACT (impreuna cu4111/461); - pe tip=6, contul mutat pe
461intra in Total ACT (impreuna cu4111/411); - pe tip=1 (fara rata), acelasi rand mutat pe
461NU mai intra — contul ramane strict4111, verificand ca extinderea nu s-a scapat pe tipurile obisnuite de factura.
- un rand
Diff complet: diff aplicat (sters).
Testat
Regresie, headless (vfp9.exe -A -T, watchdog, -AutoDismiss), exit 0, zero dialoguri, rulata
DUPA ultima editare de cod (verificat pe mtime: binarele si .prg-ul de test la 18:34/18:39,
logurile de test la 18:40-18:42):
| Suita | Rezultat | Baseline |
|---|---|---|
test_page3_articole.prg |
14 PASS / 2 FAIL | identic (cele 2 = artefact headless cunoscut, datoria 7) |
test_incarca_vanzare_din_nota.prg |
5 PASS / 0 FAIL | identic |
test_adauga_linie_articol.prg |
20 PASS / 0 FAIL | identic |
test_adauga_linie_valuta.prg |
6 PASS / 0 FAIL | identic |
test_ui_sterge_linie.prg |
8 PASS / 0 FAIL | identic |
test_verdict_act_rul.prg |
26 PASS / 0 FAIL | (18 inainte de runda; 8 asertii noi) |
Pe documentul de test (cod=1140895, descoperit prin DescoperaCazTest('FACTURA_ARTICOLE', ...),
deterministic pe schema MARIUSM_AUTO): Total ACT = 1924.59, Total RUL = 1924.59 (dupa
excluderea perechilor ID_TIP_RULAJ=3), verdict sincronizat — confirma exact cifra ceruta
(121.00 + 2*121.01 + 1259.07 + 302.50 = 1924.59).
Zero scrieri in Oracle (doar SELECT-uri prin goExecutor, mutatii pe cursoare in memorie
READWRITE, restaurate la valorile initiale inainte de QUIT).
Cens de octeti si write-back
- Inainte de editare:
2 aa / 2 e3 / 2 fe, zeroEF BF BD(verificat pe backupomodificari.vc2.pre_runda3c3.bak, facut inainte de prima editare). - Editarea cu Edit a stricat din nou cele doua linii cu diacritice ("Renuntare"/"Adaugare"/
"Stergere", liniile 4104 si 8670) — acelasi tipar cunoscut din runda anterioara (
FE E3 AA-> 3xEF BF BD). Reparat byte-cu-byte cu Perl, restaurand exact bytes-urile din backup-ul curat. - Dupa reparare:
2 aa / 2 e3 / 2 fe, zeroEF BF BD— identic cu baseline. - Write-back:
txt2vcx.ps1 -AllowComun, OK din prima rulare..vc2/.vcx/.VCTsincrone (acelasi mtime,18:34).
Fisiere atinse
COMUN\clase\omodificari.vc2(+.vcx/.VCT, scris in binar) — cele doua reguli dinActualizeazaVerdictActRul.COMUN\utile\Teste\editare_factura\test_verdict_act_rul.prg— formula RUL actualizata, asertia inversata pecod=1140895, 8 asertii noi (excludereID_TIP_RULAJ=3, includereID_TIP_RULAJ=0, cele trei conturi rate/contract).- Backup:
COMUN\clase\omodificari.vc2.pre_runda3c3.bak,COMUN\utile\Teste\editare_factura\test_verdict_act_rul.prg.pre_runda3c3.bak(pastrate).
Fara commit (nici git, nici SVN). Zero scrieri in Oracle in toata sesiunea.
Nimic ramas nedovedit
Ambele decizii (36 si 37) sunt implementate exact cum au fost formulate si verificate atat prin
recalcul independent (SCAN) cat si prin mutatie directa pe date reale (conturi 411/461 simulate pe
un rand existent, cantitati modificate pe rand ID_TIP_RULAJ=3/=0) — nu doar pe "zero cazuri in
date".