From 69c5290a8db62b21fed302f6f1ad4b8dd4f8ed57 Mon Sep 17 00:00:00 2001 From: Marius Mutu Date: Mon, 15 Jun 2026 13:45:20 +0300 Subject: [PATCH] Calcul tranzit: coeficient distanta rotunjit la 3 zecimale + protectie impartire la 0 Pentru distante scurte (ex. 0.2 km) coeficientul de distanta rotunjit la 2 zecimale iesea 0, deci valoarea facturata era 0. Rotunjire la 3 zecimale in do_executa si in afisarea "mod de calcul". Protectie la impartirea cu 0 la valoarea finala cand valoarea convoiului calculat este 0. Adauga docs/fluxuri_calcul_facturare.md (lant facturare end-to-end pe tipuri) si referinta in CLAUDE.md. Changelog 2.0.5. Co-Authored-By: Claude Opus 4.8 (1M context) --- CLAUDE.md | 6 + Clase/oacnpro.VCT | Bin 558457 -> 558553 bytes Clase/oacnpro.vcx | Bin 110141 -> 110141 bytes Programe/proceduri_acnpro.prg | 2 +- changelog_roaacnpro.txt | 8 + docs/fluxuri_calcul_facturare.md | 359 +++++++++++++++++++++++++++++++ roaacnpro.PJT | Bin 1739067 -> 1739067 bytes roaacnpro.PJX | Bin 72953 -> 72953 bytes 8 files changed, 374 insertions(+), 1 deletion(-) create mode 100644 docs/fluxuri_calcul_facturare.md diff --git a/CLAUDE.md b/CLAUDE.md index e4a10ac..0710501 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -120,6 +120,12 @@ throughout the codebase: the `crsFactura` structure, the VAT formulas, and which files to touch for a given task. Key rule: `PACK_FACTURARE.pck` is the source of truth; the `frm_factura` preview must mirror its formulas, and reports/list only read package-computed values. +- **`docs/fluxuri_calcul_facturare.md`** — the end-to-end billing chain (Import → Calcul → + Salvare → Listare) documented per service type (tranzit, cheiaj, chirii, penalități, apă, + diverse): where source data is imported from (RORIS/`ips_*`), the exact value/coefficient + formulas and roundings, where results are persisted, and what reports/recapitulations read + back. Read this to find which file:line computes a given value. Includes a "Capcane cunoscute" + section (e.g. the distance-coefficient rounding that zeroes sub-32m distances). - **`Programe/proceduri_acnpro_rapoarte.prg`** — report-generation procedures feeding the `Rapoarte/*.frx` layouts (factura, recapitulatie_cheiaj/tranzit/penalitati, registru tranzit). - **`Programe/importroris*.prg`** + `importroris.pjx` — a *separate* small executable diff --git a/Clase/oacnpro.VCT b/Clase/oacnpro.VCT index f672a3393865eed54d99bf1850369e4db1640146..878bf49d724d0288655f37234528f31fc8d45bb3 100644 GIT binary patch delta 2295 zcmaJ?dr(wW7(cIj?^$TY)s}eevLJ+tfC~Zv%1d0ZF}0e|wAX?gP&`~7Wo03mkDeo; zewLN#jA4^aRyJpPvSy75jY88*?}GfJf1I+W#vB#;&MrDO({yKkyT5zBbI$iWzx&p>AsP#Jgy?i|<+3Q4 z7@+f@O&O-TKSWRerb36g*x7pRy?uZF?**+!VM(ujiJvguUV@IEVm zWy8#Zl~1upp67CkFm`ZvW93Th(VT& z=cs|+)p}`=33#McM|fs$e3GZx>s z?Eyhg!Cb-JuzHB)K^~V1v$2}k8m*m`r{By*l96~ln9Q;bFNr2R0mi2EnHhAGAYrd=|T|G3+zW2g- zF-rr3^N5-~j7QYaCOChD1mo5#R@i_iSGpzbTQoU^#KK|7NT2R+;dLtFVZXwUYDGY?|Y|98fR z@k`F!jeHbw*_r3V&h%xyF}v@~jz)F%alZ5+7_|!lZy918EHXqBv=$oa8Ta5SoyQ;x zo15zIJurFeC42Er)kvXxX$8UhNXTAvj(B7TbGH>suwa0TKFHX?$3bcumoy{ zJ&mFWx-F3cw_2haikn0#lr6`aiLpev_QTwA+7jxtWek_G`~vk+wb35~uQrOW;ou6x z6?UwzCOR9+ALB9VrIp6`bl6v5bixbGhF>3|M))Tc!k2}H$M_Q!$SoII40WN!JXWfV z*;a*9`93ypsbbFO)F%hcXeYexFkSFijp=~VBj(-8S7u$e+c9JP_#YDY$+L^PSP*@Wj~un{-z}6;yGif1CA$IbDV;>FU8Vz%#N`>FkMzY-3{|y zRtf!Gt#esThHAH2J_gHr&BED&+}zl9|3RijO-u-~xV5P>bF$k-ku`012G#}YyE^?~ z!i^;|iGAe)*D6tL8^JzH@ydnVSyrLipJ6pqpO?PLuzArj)`FB z(-b-l7v$l>UyKgYgRQQI1+m$k!UCB_gFHxjFcv8kC|fO(7Wz=gA%q9TB_oEAZ^H7( zKwgY^1^M&%t}RB+(aleh&&Th<3T?mckM%R)#=|U5?YGNDw=tF2NhOTTWlpFolCdgO zAh$9VmoE=cxObj>9n$AXpE{KzD+N5BBUh<{EO|3i_BnDE)o$geeq2UjMTv}M3*6d} z*zWc~YgcP$i|+qu;FXsB<%x_%Onnibc*J6D`1La)cj5UR{^tAq?SXBRV^Z7R9_R>k zexVPFyV~@Ke~rJZ!9Qo_6+<1J0i(Sk&^=qVmB={8M@TNzmC7twSSnK;&*B5Z79Dnc z1fM}Zj4qJNj4>RZ2d^xU`LJbybi)oW!@hk37w}rC{Ggk82}wiv(ZguOGUPe=__iWX zK`cjJd>tX($i0YLkf#(8vJ-hBVm|T%h&{+l5XX_k!?@MFk;0AP*qYkdH4U zSS{f_qlmkTkX6_xm^xD?r+OjugB1%)HsPtl-*3E~qKbOtMXo%L$Y>6ut)>ZO56dw~ zZZH$z^YyZ2XHW_?-X#y4P}?Q@;pNRjs)ly?2ZP}TQ>y5otfu-SiaGPD)rN1aa;{ff zkZG5laN9=VP_;IBf&-?wO0|w!E0bxSIyPbL7U1PF)++VPwb`R=;1@C=ZHtyxE%teA O>JuTK6bcpYV*dc}pmIV0 delta 2306 zcmZ`)3v5(X8b0UT$2m+H=-Bsz&a|~6w6wGZM5MJX&=!LrvUH(Zacsvj>5HKQ1xv7q zmR2;ijPjcpNo$M`f2w6umyH4~Iiew!cfuhVCP*K-Rv?ZZhcmgiVV#NR_kEUDu6kDEWMnPd%gn zE*@cbgYA$R4<*%_ZeNQJm86bPa&ICr@J?nS7VB{37n&&D@3U8ppvY$fEQ2nDj%+Os zI!?1}s2E@m2KB^*-gcN4UXPjUqy6^HS zQ=S-NofQ6U*A~MWrcH&veaR}}kt67^_e*Anxj9-AJqFht7>4a*mS~Sdr}j=bYU2G3 z#03OLU@Bnz3zp=2VY^QM3F&EC3QRxA+Tr1Cx&^M~(pdQXFDwu4KgKxx{DOA7JbIFO zSVVmqynmXNgw$7`W=SFS4}MqAQ0mVhRGO4}AL6fw33Wm`LuvXZA}-(`0oD}qAh1xg zfiJ*vA|7PP_A~5Ke#C>7uxf^OJG3)xvUpzH|7s2@P1vDnxsaWPi(-^hVZWcbCxu$# z$AWyOX$i7H*LJbUL;+P?Ym0akyPs=?lN=i58t;fWgsXOGD?%yB?$R>hoC6Co_n+Yml+(BpoWGY9+$}$;Fy5RF zi`;qz6s5e4i(cK@*$H)#euBm@!;s? zHaM8VACUT|=GvvUOy}73afiwcsmxU9wI!zB)2`ObLYNM`;O}q-A-CbAy$*T6Ywlxm z-Z@^*Xt}&`ocB+sOu{MdqEoKg#yBY-DJGB@;5oJ!l6C8bbtH@YOo{c^QDX?d+4w{8Q^Y1b`9`GjTXaTl^zH70q%xXz2;qTV!a+;aEK}O@o@{OYuVu1=BnM| zbzWDE4{bVG-t6|Kq=rXpHnz0wvBQjNeG%|so+dpPcr#`1G5Gc(cR$jRV)2jkt<@AeWFL$)GEVlgy_$ ztQPC+v_ST57q94W-%e2{Kinz0b-3JYnzE)!1T?VMn;b5#6<+!7FmFzij~ZeYl~zrx zVQ_?rYUvr{WjbV!@p9PtD}P6xzscXCa^)!RVvsh<=c?4^$q!8tPoJEka@y*3ZLW6} zrC}_X(xAy%=iE~7eB2%~2{mi8tJUTGC_Q8e)}qzfxYfDY6@&XCR11~;wReO^sxq%k zj3(Eva%N~oEOEy*JKfD**M>U$D~0AQ&ED_tgyZY=RJJW!b_kKk>>fPiS2PbP#k%#A zU1W8TF-q}VU<-g%QDVMv1q(V4Zd$~u7*$_J=VOicp%Fiyv=D|YA`=c+#B6#N`lG}* zPmavR?>1J^i4{yjtU*3!J|V5h3lS@jpGE9Lz5sC@dG}&MUPfMncpZ5(ZjV#Q)f(Bz zM-bkMAKU%W2AEf+^kRs3W~>C|(ezg(0Cw*~l1xE1y+6JM)6WR+XX#2Ay0 Q6pJWbZL)ZnSuE!K2D_Jqi2wiq diff --git a/Clase/oacnpro.vcx b/Clase/oacnpro.vcx index 2dea02c9a019a44a751ecaf56541ae3470cb713b..6d478773101f2de20feec5f39f23806925884f5e 100644 GIT binary patch delta 787 zcmdmchi&g2HWmXZHvWw)X5CC*q&M4iZ?J6H8Q>_pD*tJmc*W&S}z&DvT1_ zRizn!vN8s4mse!`D8}@`W%9=pE|VSJacqyXV4N4EX>MR?W?^RXjER9^&pc*^4M6-2 z$OZv1DONDu6~w`yvwd>f_jsmYHjwt|3N4IWlSO~za+;b#^>6O}A;E;iUGr-pJAyks zjEOM?iF=rd@gfp;E;BNBdpQf^YDR?gc5ODsRwT2h@8m#HKADs8I2)4kWC2DyWbLa2 zQH+}&Cye5j)2Lhv5fs^_A}Ds%i=vo4{g@bvYGZL^?)C-ZsH&e!AWKgVkwi9ox}Fr{ zMSDnqTAGjW5@o`3m%|JE?SRG{p)3UrA3>$8-gV`Wr8c?3uiGktY!R?ma zj87QZL6HJ9W4cN&V;Y<@5t;K3iL*Vsk8v$Rll%mPrtLiw7#$E&mnR~mraMeRaJH|V z#5hF&X4Q6&#mEN!S;BZ3CN=%qQY6lXWk^QIE@zZtf~&Jzi6pgpC6X()e_F-Zj!@XJ HmT@lt^NiLS delta 763 zcmdmchi&g2HWmXZHm;2i#yxtu02wcFb=7$ulEO^i&< z&CExSA1(uU5v`ie&ioEfvVR zxA#>t9%nx-OBgRtx9ewQpMGsA<7Jql=^K_I>6cy3D8&SqvRjEH VwR$Cz6SjX^#n_He*szvyF931>+Fk$v diff --git a/Programe/proceduri_acnpro.prg b/Programe/proceduri_acnpro.prg index 137a849..cb8a202 100644 --- a/Programe/proceduri_acnpro.prg +++ b/Programe/proceduri_acnpro.prg @@ -5743,7 +5743,7 @@ Procedure mod_calcul_tranzit Select vye_id, intern, indicativ, tarif, valuta, cant, um, procdist, corect, procdiv, valval, Curs, valftva From (m.tcTabel) Where vye_id = m.tcVyeId Order By indicativ Into Cursor cModCalculTemp Select cModCalculTemp Scan - lcModCalcul = lcModCalcul + Alltrim(Transform(tarif, GET_MASK(10, 4))) + [ ] + Allt(valuta) + [ * ] + Allt(Str(cant, 8, 2)) + [ ] + Allt(um) + [ * ] + Allt(Str(procdist, 6, 2)) + [ * ] + Allt(Str(corect + procdiv, 5, 2)) + [ = ] + Alltrim(Transform(valval, GET_MASK(16, 2))) + [ ] + Allt(valuta) + lcModCalcul = lcModCalcul + Alltrim(Transform(tarif, GET_MASK(10, 4))) + [ ] + Allt(valuta) + [ * ] + Allt(Str(cant, 8, 2)) + [ ] + Allt(um) + [ * ] + Allt(Str(procdist, 6, 3)) + [ * ] + Allt(Str(corect + procdiv, 5, 3)) + [ = ] + Alltrim(Transform(valval, GET_MASK(16, 2))) + [ ] + Allt(valuta) llIntern = intern lnCurs = Curs If m.llIntern diff --git a/changelog_roaacnpro.txt b/changelog_roaacnpro.txt index c4e6d64..61a3d7f 100644 --- a/changelog_roaacnpro.txt +++ b/changelog_roaacnpro.txt @@ -1,3 +1,11 @@ + +