from .. import fe __all__ = ['ApplicationResponse'] class ApplicationResponse: def __init__(self, invoice, tag_document='ApplicationResponse'): self.schema =\ 'urn:oasis:names:specification:ubl:schema:xsd:ApplicationResponse-2' self.tag_document = tag_document self.invoice = invoice self.fexml = fe.FeXML( self.tag_document, self.schema) self.application_response = self.application_response() def application_response(self): # DIAN 1.9.-2023: AE02 self.fexml.set_element( './cbc:UBLVersionID', 'UBL 2.1') # DIAN 1.9.-2023: AE03 self.fexml.set_element( './cbc:CustomizationID', 'Documentos adjuntos') # DIAN 1.9.-2023: AE04 self.fexml.set_element( './cbc:ProfileID', 'DIAN 2.1') # DIAN 1.9.-2023: AE04a self.fexml.set_element( './cbc:ProfileExecutionID', '1') self.fexml.set_element( './cbc:ID', '1') self.fexml.set_element( './cbc:UUID', '1', schemeName="CUDE-SHA384") self.fexml.set_element( './cbc:IssueDate', self.invoice.invoice_issue.strftime('%Y-%m-%d')) # DIAN 1.9.-2023: AE06 self.fexml.set_element( './cbc:IssueTime', self.invoice.invoice_issue.strftime( '%H:%M:%S-05:00')) self.set_sender_party() self.set_receiver_party() self.set_document_response() def set_sender_party(self): # DIAN 1.9.-2023: AE09 self.fexml.placeholder_for( './cac:SenderParty') # DIAN 1.9.-2023: AE10 self.fexml.placeholder_for( './cac:SenderParty/cac:PartyTaxScheme') # DIAN 1.9.-2023: AE11 self.fexml.set_element( './cac:SenderParty/cac:PartyTaxScheme/cbc:RegistrationName', self.invoice.invoice_supplier.name) # DIAN 1.9.-2023: AE12 # DIAN 1.9.-2023: AE13 # DIAN 1.9.-2023: AE14 # DIAN 1.9.-2023: AE15 self.fexml.set_element( './cac:SenderParty/cac:PartyTaxScheme/cbc:CompanyID', self.invoice.invoice_supplier.ident, schemeAgencyID='195', schemeID=self.invoice.invoice_supplier.ident.dv, schemeName=self.invoice.invoice_supplier.ident.type_fiscal) # DIAN 1.9.-2023: AE16 self.fexml.set_element( './cac:SenderParty/cac:PartyTaxScheme/cbc:TaxLevelCode', self.invoice.invoice_supplier.responsability_code) # DIAN 1.9.-2023: AE18 self.fexml.placeholder_for( './cac:SenderParty/cac:PartyTaxScheme/cac:TaxScheme') # DIAN 1.9.-2023: AE19 self.fexml.set_element( './cac:SenderParty/cac:PartyTaxScheme/cac:TaxScheme/cbc:ID', self.invoice.invoice_supplier.tax_scheme.code) # DIAN 1.9.-2023: AE20 self.fexml.set_element( './cac:SenderParty/cac:PartyTaxScheme/cac:TaxScheme/cbc:Name', self.invoice.invoice_supplier.tax_scheme.name) def set_receiver_party(self): # DIAN 1.9.-2023: AE21 self.fexml.placeholder_for( './cac:ReceiverParty') # DIAN 1.9.-2023: AE22 self.fexml.placeholder_for( './cac:ReceiverParty/cac:PartyTaxScheme') # DIAN 1.9.-2023: AE23 self.fexml.set_element( './cac:ReceiverParty/cac:PartyTaxScheme/cbc:RegistrationName', self.invoice.invoice_customer.name) # DIAN 1.9.-2023: AE24 # DIAN 1.9.-2023: AE25 # DIAN 1.9.-2023: AE26 # DIAN 1.9.-2023: AE27 self.fexml.set_element( './cac:ReceiverParty/cac:PartyTaxScheme/cbc:CompanyID', self.invoice.invoice_customer.ident, schemeAgencyID='195', schemeID=self.invoice.invoice_customer.ident.dv, schemeName=self.invoice.invoice_customer.ident.type_fiscal) # DIAN 1.9.-2023: AE28 self.fexml.set_element( './cac:ReceiverParty/cac:PartyTaxScheme/cbc:TaxLevelCode', self.invoice.invoice_customer.responsability_code) # DIAN 1.9.-2023: AE30 self.fexml.placeholder_for( './cac:ReceiverParty/cac:PartyTaxScheme/cac:TaxScheme') # DIAN 1.9.-2023: AE31 self.fexml.set_element( './cac:ReceiverParty/cac:PartyTaxScheme/cac:TaxScheme/cbc:ID', self.invoice.invoice_customer.tax_scheme.code) # DIAN 1.9.-2023: AE32 self.fexml.set_element( './cac:ReceiverParty/cac:PartyTaxScheme/cac:TaxScheme/cbc:Name', self.invoice.invoice_customer.tax_scheme.name) def set_document_response(self): self.fexml.placeholder_for( './cac:DocumentResponse') self.fexml.placeholder_for( './cac:DocumentResponse/cac:Response') self.fexml.set_element( './cac:DocumentResponse/cac:Response/cbc:ResponseCode', '02') self.fexml.set_element( './cac:DocumentResponse/cac:Response/cbc:Description', 'Documento validado por la DIAN') self.set_documnent_reference() def set_documnent_reference(self): self.fexml.placeholder_for( './cac:DocumentResponse/cac:DocumentReference') self.fexml.set_element( './cac:DocumentResponse/cac:DocumentReference/cbc:ID', 'FESS19566058') self.fexml.set_element( './cac:DocumentResponse/cac:DocumentReference/cbc:UUID', 'f51ee529aabd19d10e39444f2f593b94d56d5885fbf433faf718d53a7e968f64bf54a6ee43c6a2df842771b54a6aae1a', schemeName="CUFE-SHA384") self.set_response_lines() def set_response_lines(self): lines = [{ 'LineID': '1', 'ResponseCode': '0000', 'Description': '0', }] for line in lines: self.fexml.set_element( './cac:DocumentResponse/cac:LineResponse/cac:LineReference/cbc:LineID', line[ 'LineID']) self.fexml.set_element( './cac:DocumentResponse/cac:LineResponse/cac:Response/cbc:ResponseCode', line[ 'ResponseCode']) self.fexml.set_element( './cac:DocumentResponse/cac:LineResponse/cac:Response/cbc:Description', line[ 'Description']) def toFachoXML(self): return self.fexml