|
17 | 17 | # TODO: precisa tratar |
18 | 18 | from lxml import etree |
19 | 19 | 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 |
20 | 22 | from nfelib.cte.bindings.v4_0.proc_cte_v4_00 import CteProc |
21 | 23 |
|
22 | 24 | # TODO: precisa tratar nfelib |
@@ -734,6 +736,72 @@ def _export_fields_cte_40_timp(self, xsd_fields, class_obj, export_dict): |
734 | 736 | } |
735 | 737 | export_dict[icms_tag.upper()] = icms_binding(**sliced_icms_dict) |
736 | 738 |
|
| 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 | + |
737 | 805 | # ########################## |
738 | 806 | # # CT-e tag: ICMSUFFim |
739 | 807 | # ########################## |
|
0 commit comments