diff --git a/facho/fe/fe.py b/facho/fe/fe.py index 0e15c53..23f5448 100644 --- a/facho/fe/fe.py +++ b/facho/fe/fe.py @@ -122,8 +122,7 @@ class DianXMLExtensionCUDFE(FachoXMLExtension): fachoxml.set_element('./cbc:UUID', cufe, schemeID=self.tipo_ambiente, schemeName=self.schemeName()) - #DIAN 1.8.-2021: FAD03 - fachoxml.set_element('./cbc:ProfileID', 'DIAN 2.1: Factura Electrónica de Venta') + fachoxml.set_element('./cbc:ProfileExecutionID', self._tipo_ambiente_int()) #DIAN 1.7.-2020: FAB36 fachoxml.set_element('./ext:UBLExtensions/ext:UBLExtension/ext:ExtensionContent/sts:DianExtensions/sts:QRCode', diff --git a/facho/fe/form_xml/credit_note.py b/facho/fe/form_xml/credit_note.py index 89820c0..be887d4 100644 --- a/facho/fe/form_xml/credit_note.py +++ b/facho/fe/form_xml/credit_note.py @@ -18,3 +18,6 @@ class DIANCreditNoteXML(DIANInvoiceXML): def tag_document_concilied(fexml): return 'Credited' + + def post_attach_invoice(fexml, invoice): + fexml.set_element('./cbc:ProfileID', 'DIAN 2.1: Nota Crédito de Factura Electrónica de Venta') diff --git a/facho/fe/form_xml/debit_note.py b/facho/fe/form_xml/debit_note.py index 1ba42b6..4fe5838 100644 --- a/facho/fe/form_xml/debit_note.py +++ b/facho/fe/form_xml/debit_note.py @@ -13,6 +13,9 @@ class DIANDebitNoteXML(DIANInvoiceXML): def __init__(self, invoice): super().__init__(invoice, 'DebitNote') + def post_attach_invoice(fexml, invoice): + fexml.set_element('./cbc:ProfileID', 'DIAN 2.1 Nota Débito de Factura Electrónica de Venta') + def tag_document(fexml): return 'DebitNote' diff --git a/facho/fe/form_xml/invoice.py b/facho/fe/form_xml/invoice.py index 42b277a..44a724a 100644 --- a/facho/fe/form_xml/invoice.py +++ b/facho/fe/form_xml/invoice.py @@ -21,6 +21,7 @@ class DIANInvoiceXML(fe.FeXML): ublextension = self.fragment('./ext:UBLExtensions/ext:UBLExtension', append=True) extcontent = ublextension.find_or_create_element('/ext:UBLExtension/ext:ExtensionContent') self.attach_invoice(invoice) + self.post_attach_invoice(invoice) def set_supplier(fexml, invoice): fexml.placeholder_for('./cac:AccountingSupplierParty') @@ -415,7 +416,6 @@ class DIANInvoiceXML(fe.FeXML): return fexml._set_debit_note_document_reference(reference) if isinstance(reference, CreditNoteDocumentReference): return fexml._set_credit_note_document_reference(reference) - if isinstance(reference, InvoiceDocumentReference): return fexml._set_invoice_document_reference(reference) @@ -566,7 +566,11 @@ class DIANInvoiceXML(fe.FeXML): line.set_element('./cbc:MultiplierFactorNumeric', str(round(charge.multiplier_factor_numeric, 2))) fexml.set_element_amount_for(line, './cbc:Amount', charge.amount) fexml.set_element_amount_for(line, './cbc:BaseAmount', charge.base_amount) - + + def post_attach_invoice(fexml, invoice): + #DIAN 1.8.-2021: FAD03 + fexml.set_element('./cbc:ProfileID', 'DIAN 2.1: Factura Electrónica de Venta') + def attach_invoice(fexml, invoice): """adiciona etiquetas a FEXML y retorna FEXML en caso de fallar validacion retorna None""" diff --git a/tests/test_fe_form.py b/tests/test_fe_form.py index ca7f4b9..f5f6683 100644 --- a/tests/test_fe_form.py +++ b/tests/test_fe_form.py @@ -33,7 +33,24 @@ def test_invoicesimple_build_with_cufe(simple_invoice): cufe = xml.get_element_text('/fe:Invoice/cbc:UUID') assert cufe != '' +def test_invoice_profile_id(simple_invoice): + xml = DIANInvoiceXML(simple_invoice) + cufe_extension = fe.DianXMLExtensionCUFE(simple_invoice) + xml.add_extension(cufe_extension) + assert xml.get_element_text('/fe:Invoice/cbc:ProfileID') == 'DIAN 2.1: Factura Electrónica de Venta' +def test_debit_note_profile_id(simple_invoice): + xml = DIANDebitNoteXML(simple_invoice) + cufe_extension = fe.DianXMLExtensionCUFE(simple_invoice) + xml.add_extension(cufe_extension) + assert xml.get_element_text('/fe:DebitNote/cbc:ProfileID') == 'DIAN 2.1 Nota Débito de Factura Electrónica de Venta' + +def test_credit_note_profile_id(simple_invoice): + xml = DIANCreditNoteXML(simple_invoice) + cufe_extension = fe.DianXMLExtensionCUFE(simple_invoice) + xml.add_extension(cufe_extension) + assert xml.get_element_text('/fe:CreditNote/cbc:ProfileID') == 'DIAN 2.1: Nota Crédito de Factura Electrónica de Venta' + def test_invoicesimple_xml_signed(monkeypatch, simple_invoice): xml = DIANInvoiceXML(simple_invoice)