From aae23828e90c3bd0ba03049c4da4b04721bf8b85 Mon Sep 17 00:00:00 2001 From: SatCFDI Date: Mon, 8 Apr 2024 23:24:32 -0600 Subject: [PATCH] Added Contabilidad functions --- satcfdi/accounting/contabilidad.py | 59 ++++++++++++++---- tests/MOLE870717DRA202402BN.xlsx | Bin 5594 -> 5594 bytes tests/contabilidad_electronica/cuentas.yaml | 55 ++++++++++++++++ tests/test_contabilidad.py | 10 ++- .../ref/simple/MOLE870717DRA202402CT.xml | 10 ++- 5 files changed, 118 insertions(+), 16 deletions(-) create mode 100644 tests/contabilidad_electronica/cuentas.yaml diff --git a/satcfdi/accounting/contabilidad.py b/satcfdi/accounting/contabilidad.py index 68afa4a..526aebd 100644 --- a/satcfdi/accounting/contabilidad.py +++ b/satcfdi/accounting/contabilidad.py @@ -50,10 +50,42 @@ def output_file(file, folder, fiel=None, generate_pdf=False): return output_file +def calcular_saldos(cuentas, polizas): + for c in cuentas.values(): + # c['SaldoIni'] = 0 + c['Debe'] = 0 + c['Haber'] = 0 + c['SaldoFin'] = 0 + + for p in polizas: + for t in p["Transaccion"]: + num_cta = t["NumCta"] + cuenta = cuentas[num_cta] + cuenta["Debe"] += t["Debe"] + cuenta["Haber"] += t["Haber"] + + # Fill Parents + for level in range(4, 1, -1): + for k, v in cuentas.items(): + if v['Nivel'] == level: + parent = v['SubCtaDe'] + if parent: + p_cuenta = cuentas[parent] + p_cuenta['Debe'] += v['Debe'] + p_cuenta['Haber'] += v['Haber'] + + # Fill SaldoFin + for c in cuentas.values(): + if c["Natur"] == "D": + c["SaldoFin"] += c["SaldoIni"] + c["Debe"] - c["Haber"] + else: + c["SaldoFin"] += c["SaldoIni"] + c["Haber"] - c["Debe"] + + def generar_contabilidad( dp: DatePeriod, rfc_emisor: str, - ctas: dict, + cuentas: dict, polizas: Sequence[Poliza], tipo_envio='N', fecha_mod_bal=None, @@ -63,6 +95,7 @@ def generar_contabilidad( folder=None, fiel=None, generate_pdf=False): + calcular_saldos(cuentas, polizas) plz = Polizas( rfc=rfc_emisor, @@ -80,15 +113,15 @@ def generar_contabilidad( mes=str(dp.month).zfill(2), anio=dp.year, ctas=[ - Ctas( - cod_agrup=v["CodAgrup"].split("_")[0], - num_cta=k, - desc=v["Desc"], - nivel=v["Nivel"], - natur=v["Natur"], - sub_cta_de=v['SubCtaDe'], - ) for k, v in ctas.items() - ] + Ctas( + cod_agrup=v["CodAgrup"].split("_")[0], + num_cta=k, + desc=v["Desc"], + nivel=v["Nivel"], + natur=v["Natur"], + sub_cta_de=v['SubCtaDe'], + ) for k, v in cuentas.items() + ] ) output_file(cat, folder, fiel) @@ -101,7 +134,7 @@ def generar_contabilidad( ctas=[{ "NumCta": k, **v, - } for k, v in ctas.items() if v["SaldoIni"] or v["Debe"] or v["Haber"] or v["SaldoFin"]], + } for k, v in cuentas.items() if v["SaldoIni"] or v["Debe"] or v["Haber"] or v["SaldoFin"]], ) output_file(ban, folder, fiel) @@ -120,7 +153,7 @@ def generar_contabilidad( saldo_ini=v["SaldoIni"], saldo_fin=v["SaldoFin"], detalle_aux=aux_detalles[k] - ) for k, v in ctas.items() if k in aux_detalles + ) for k, v in cuentas.items() if k in aux_detalles ] ) output_file(aux, folder, fiel, generate_pdf=generate_pdf) @@ -142,7 +175,7 @@ def generar_contabilidad( archivo_excel=filename(ban)[:-4] + ".xlsx" ) - validate_saldos(ctas) + validate_saldos(cuentas) def group_aux_cuentas(polizas): diff --git a/tests/MOLE870717DRA202402BN.xlsx b/tests/MOLE870717DRA202402BN.xlsx index 55c81e062496455b6b051f55d6ff468479e357ac..62450dd4c444917074fc77f10804385ba8bf6998 100644 GIT binary patch delta 326 zcmV-M0lEI#E7~itMi2z<$sWFwN)R7^T}#6-6o&5w|3k@rn|`QhXgg5Zl>@I8W0%EWuMwJ;i%qY$hT)AUT_m=Et@JfHMp&NKoG4EXnZ6>%mGlTQDeRPAPnE zVAgsRC-=^Y$=G#W(iMX>g8=1H5O{WD+Z`8IU~#h_1e}YKEH&;wbc1l*zraH zf9!)k^L7|ytOFi}0A!4NR6dF)r|0z&)p?rV#A!GW>-3i71u62ceanmb6Hp$S{F`_L YjJYpALH!4_juFWN1n$WmzLQ%Of7h>@MgRZ+ delta 326 zcmV-M0lEI#E7~itMi2x~0_8=MN)R7^UrWO<6vf{KzeCA;o3txaL)(GMo*W2H6yHK} zw*{L&B++i)-mKla4fZ7DB{}E*?zxv#v#n~AUvOR;U86iBC;`olka}IC_vJjjM~M$i z3)UJ9HQIqkv*z}u;+Asb;MExmE=cf6Bxz5%t6Q#wiwm;?=FO zW&E410T+Z!v4X$^3k>gpsU3;vfE0X0+8@{U0KqY|pg;$Y^DM_FZvdzK)q-9*b1E5j z7Oq;4;^^LbIU2jJ%eqN#jrnu@xp;Z&M@^;P?}`IzD#0mtz=Cm2h0iZ>aV_&<5qG?j zARc#7zw&k%WT*p?!~k@NdsIFrCQr}HIcf@0lqrelVM$6_-cd6B+PA!@KLORD$-jw5 Yz>xd$6EuIbjuFWN1Wy9xMUz_ - + + + + + + + + +