Skip to content

Commit 3647317

Browse files
[IMP] l10n_br_cte: _export_fields_cte_40_tcte_imp
1 parent 16d8784 commit 3647317

File tree

1 file changed

+68
-0
lines changed

1 file changed

+68
-0
lines changed

l10n_br_cte/models/document.py

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717
# TODO: precisa tratar
1818
from lxml import etree
1919
from nfelib.cte.bindings.v4_0.cte_v4_00 import Cte
20+
from nfelib.cte.bindings.v4_0.dfe_tipos_basicos_v1_00 import Tcibs as CTeTcibs
21+
from nfelib.cte.bindings.v4_0.dfe_tipos_basicos_v1_00 import TtribCte
2022
from nfelib.cte.bindings.v4_0.proc_cte_v4_00 import CteProc
2123

2224
# TODO: precisa tratar nfelib
@@ -734,6 +736,72 @@ def _export_fields_cte_40_timp(self, xsd_fields, class_obj, export_dict):
734736
}
735737
export_dict[icms_tag.upper()] = icms_binding(**sliced_icms_dict)
736738

739+
def _export_fields_cte_40_tcte_imp(self, xsd_fields, class_obj, export_dict):
740+
"""Export IBS/CBS group for CT-e."""
741+
self.ensure_one()
742+
743+
lines = self.fiscal_line_ids
744+
if not lines:
745+
return
746+
747+
first = lines[0]
748+
749+
total_ibs = sum(lines.mapped("ibs_value"))
750+
total_cbs = sum(lines.mapped("cbs_value"))
751+
if not total_ibs and not total_cbs:
752+
return
753+
754+
c_class_trib = (
755+
first.tax_classification_id.code.zfill(6)
756+
if first.tax_classification_id and first.tax_classification_id.code
757+
else "000001"
758+
)
759+
cst = (
760+
first.ibs_cst_id.code
761+
if first.ibs_cst_id and first.ibs_cst_id.code
762+
else (
763+
first.cbs_cst_id.code
764+
if first.cbs_cst_id and first.cbs_cst_id.code
765+
else "000"
766+
)
767+
)
768+
769+
v_bc = sum(
770+
(line.ibs_base or line.cbs_base or line.price_gross or 0.0)
771+
for line in lines
772+
)
773+
774+
p_ibs_uf = first.ibs_percent or 0.0
775+
v_ibs_uf = total_ibs or (v_bc * p_ibs_uf / 100 if p_ibs_uf and v_bc else 0.0)
776+
777+
p_ibs_mun = 0.0
778+
v_ibs_mun = 0.0
779+
v_ibs = v_ibs_uf + v_ibs_mun
780+
781+
p_cbs = first.cbs_percent or 0.0
782+
v_cbs = total_cbs or (v_bc * p_cbs / 100 if p_cbs and v_bc else 0.0)
783+
784+
export_dict["IBSCBS"] = TtribCte(
785+
CST=cst,
786+
cClassTrib=c_class_trib,
787+
gIBSCBS=CTeTcibs(
788+
vBC=f"{v_bc:.2f}",
789+
gIBSUF=CTeTcibs.GIbsuf(
790+
pIBSUF=f"{p_ibs_uf:.4f}",
791+
vIBSUF=f"{v_ibs_uf:.2f}",
792+
),
793+
gIBSMun=CTeTcibs.GIbsmun(
794+
pIBSMun=f"{p_ibs_mun:.4f}",
795+
vIBSMun=f"{v_ibs_mun:.2f}",
796+
),
797+
vIBS=f"{v_ibs:.2f}",
798+
gCBS=CTeTcibs.GCbs(
799+
pCBS=f"{p_cbs:.4f}",
800+
vCBS=f"{v_cbs:.2f}",
801+
),
802+
),
803+
)
804+
737805
# ##########################
738806
# # CT-e tag: ICMSUFFim
739807
# ##########################

0 commit comments

Comments
 (0)