Conturi cu parteneri cu analitice functionale: BALANTA per acont
Cand analiticele unui cont cu parteneri primesc acont prin corectii (461.SGR -> 461/SGR, 461.RESTUL -> 461/1), generatorul scrie cate un BALANTA per (cont, acont) si FACTURA cu acelasi acont (pct. 16); postarile direct pe sintetic merg pe acontul de diferenta, ca la banca. Inainte, acontul ajungea doar pe FACTURA, nu si pe BALANTA agregat - dezacord tacut. Fara astfel de corectii, iesirea e neschimbata (etalonul trece). LACERTA: 4092.1 -> 4092/1, identic cu REF; 50/53 frunze identice. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EYeAtVxeS8m4oXekjX8Am2
This commit is contained in:
@@ -354,22 +354,58 @@ def genereaza(rows, header, an=AN, luna=LUNA, mapare=None, parteneri=None,
|
||||
|
||||
# 401/4092/4111/461/462/4551 si 5311
|
||||
if direct:
|
||||
base_d = 0.0
|
||||
base_c = 0.0
|
||||
for k in direct:
|
||||
net = round(by[k]["total_d"] - by[k]["total_c"], 2)
|
||||
if net != 0 and not este_latura_formular(net, side):
|
||||
neg = -abs(net)
|
||||
negative.append((p, k, neg, side))
|
||||
if side == "D":
|
||||
base_d += neg
|
||||
else:
|
||||
base_c += neg
|
||||
else:
|
||||
base_d += by[k]["total_d"]
|
||||
base_c += by[k]["total_c"]
|
||||
d = diff_by_parent.get(p, 0.0)
|
||||
cont_p, ac_p = _mapare_cont(p, p, None, mapare, True)
|
||||
|
||||
def baza(kids):
|
||||
"""Totalurile BALANTA pentru analiticele date; netul pe latura opusa
|
||||
intra negativ (vezi `negative`)."""
|
||||
bd = bc = 0.0
|
||||
for k in kids:
|
||||
net = round(by[k]["total_d"] - by[k]["total_c"], 2)
|
||||
if net != 0 and not este_latura_formular(net, side):
|
||||
negative.append((p, k, -abs(net), side))
|
||||
if side == "D":
|
||||
bd -= abs(net)
|
||||
else:
|
||||
bc -= abs(net)
|
||||
else:
|
||||
bd += by[k]["total_d"]
|
||||
bc += by[k]["total_c"]
|
||||
return bd, bc
|
||||
|
||||
def facturi(kids, cont_f, ac_f):
|
||||
for k in kids:
|
||||
net = round(by[k]["total_d"] - by[k]["total_c"], 2)
|
||||
if net == 0:
|
||||
leaf_rep.add(k)
|
||||
continue
|
||||
sold = abs(net) if este_latura_formular(net, side) else -abs(net)
|
||||
cont_k, kac = _mapare_cont(k, cont_f, ac_f, mapare, True)
|
||||
factura(k, cont_k, kac, by[k]["denumire"], side, net, sold, k)
|
||||
|
||||
# Analitice cu acont dat prin corectii (461.SGR functional, 461.RESTUL ->
|
||||
# 461/1 pentru parteneri): cate un BALANTA per (cont, acont) si FACTURA cu
|
||||
# ACELASI acont (pct. 16); postarile direct pe sintetic -> acont de diferenta.
|
||||
grupuri = {}
|
||||
for k in direct:
|
||||
grupuri.setdefault(_mapare_cont(k, cont_p, ac_p, mapare, True), []).append(k)
|
||||
if any(ac != ac_p for _, ac in grupuri):
|
||||
for (cont_g, ac_g), kids in sorted(grupuri.items(), key=lambda g: str(g[0])):
|
||||
bd, bc = baza(kids)
|
||||
nume = by[kids[0]]["denumire"] if len(kids) == 1 else by[p]["denumire"]
|
||||
add(rand(header, an, luna, TIP="BALANTA", cont=cont_g, acont=ac_g,
|
||||
numar=1, nume=nume, totdeb=round(bd, 2), totcred=round(bc, 2)))
|
||||
facturi(kids, cont_g, ac_g)
|
||||
if d:
|
||||
add(rand(header, an, luna, TIP="BALANTA", cont=cont_p,
|
||||
acont=acont_diferenta(p, direct), numar=1,
|
||||
nume="DIFERENTA SINTETIC SAGA",
|
||||
totdeb=d if d > 0 else None,
|
||||
totcred=-d if d < 0 else None))
|
||||
continue
|
||||
|
||||
base_d, base_c = baza(direct)
|
||||
if cont_p == p: # .TOATE/.RESTUL poate redenumi fara rand pe sintetic
|
||||
# BALANTA agregat si randurile FACTURA trebuie sa cada pe acelasi
|
||||
# cont. Daca analiticele sunt mapate pe conturi diferite, agregatul
|
||||
@@ -385,14 +421,7 @@ def genereaza(rows, header, an=AN, luna=LUNA, mapare=None, parteneri=None,
|
||||
numar=1, nume=by[p]["denumire"],
|
||||
totdeb=round(base_d + (d if d > 0 else 0.0), 2),
|
||||
totcred=round(base_c + (-d if d < 0 else 0.0), 2)))
|
||||
for k in direct:
|
||||
net = round(by[k]["total_d"] - by[k]["total_c"], 2)
|
||||
if net == 0:
|
||||
leaf_rep.add(k)
|
||||
continue
|
||||
sold = abs(net) if este_latura_formular(net, side) else -abs(net)
|
||||
cont_k, kac = _mapare_cont(k, cont_p, ac_p, mapare, True)
|
||||
factura(k, cont_k, kac, by[k]["denumire"], side, net, sold, k)
|
||||
facturi(direct, cont_p, ac_p)
|
||||
else:
|
||||
net = round(by[p]["total_d"] - by[p]["total_c"], 2)
|
||||
if net != 0 and not este_latura_formular(net, side):
|
||||
|
||||
Reference in New Issue
Block a user