Esempio n. 1
0
    def parse_xml_to_dict(xml_em: XmlElement) -> Mapping[str, object]:
        """
        Parse XML element and return a dictionary.
        """
        # XPath: /AEC/DocumentoAEC/Caratula
        caratula_em = xml_em.find('sii-dte:Caratula', namespaces=DTE_XMLNS_MAP)
        caratula_dict = _Caratula.parse_xml_to_dict(caratula_em)

        # XPath: /AEC/DocumentoAEC/Cesiones
        cesiones_em = xml_em.find('sii-dte:Cesiones', namespaces=DTE_XMLNS_MAP)

        # XPath: /AEC/DocumentoAEC/Cesiones/DTECedido
        dte_cedido_em = cesiones_em.find('sii-dte:DTECedido',
                                         namespaces=DTE_XMLNS_MAP)
        dte_cedido_dict = _DteCedido.parse_xml_to_dict(dte_cedido_em)

        # XPath: /AEC/DocumentoAEC/Cesiones/Cesion
        cesion_em_list: Sequence[XmlElement] = cesiones_em.findall(
            'sii-dte:Cesion',
            namespaces=DTE_XMLNS_MAP,
        )
        cesion_dict_list: Sequence[Mapping[str, object]]
        cesion_dict_list = [
            _Cesion.parse_xml_to_dict(cesion_em)
            for cesion_em in cesion_em_list
        ]

        # XPath: /AEC/DocumentoAEC
        return dict(
            # id=xml_em.get('ID'),
            caratula=caratula_dict,
            cesiones_dte_cedido=dte_cedido_dict,
            cesiones_cesion=cesion_dict_list,
        )
Esempio n. 2
0
    def parse_xml_to_dict(xml_em: XmlElement) -> Mapping[str, object]:
        """
        Parse XML element and return a dictionary.
        """
        # XPath: //Signature/KeyInfo
        key_info_em = xml_em.find('ds:KeyInfo',
                                  namespaces=xml_utils.XML_DSIG_NS_MAP)

        # XPath: //Signature/KeyInfo/X509Data
        key_info_x509_data_em = (key_info_em.find(
            'ds:X509Data', namespaces=xml_utils.XML_DSIG_NS_MAP))

        # XPath: //Signature
        return dict(
            # XPath: //Signature/SignatureValue
            signature_value=xml_em.findtext(
                'ds:SignatureValue',
                namespaces=xml_utils.XML_DSIG_NS_MAP,
            ),

            # XPath: //Signature/KeyInfo/X509Data/X509Certificate
            key_info_x509_data_x509_cert=key_info_x509_data_em.findtext(
                'ds:X509Certificate',
                namespaces=xml_utils.XML_DSIG_NS_MAP,
            ),
        )
Esempio n. 3
0
 def parse_xml_to_dict(xml_em: XmlElement) -> Mapping[str, object]:
     """
     Parse XML element and return a dictionary.
     """
     # XPath: /AEC/DocumentoAEC/Cesiones/Cesion/DocumentoCesion/Cedente/RUTAutorizado
     return dict(
         rut=xml_em.findtext('sii-dte:RUT', namespaces=DTE_XMLNS_MAP),
         nombre=xml_em.findtext('sii-dte:Nombre', namespaces=DTE_XMLNS_MAP),
     )
Esempio n. 4
0
def _remove_dte_xml_doc_personalizado(xml_doc: XmlElement) -> Tuple[XmlElement, bool]:
    # Remove non-standard but popular element 'DocPersonalizado', it if exists.

    modified = False
    em_path = 'sii-dte:DocPersonalizado'

    xml_em = xml_doc.getroottree().find(em_path, namespaces=DTE_XMLNS_MAP)
    if xml_em is not None:
        modified = True
        xml_doc.remove(xml_em)

    return xml_doc, modified
Esempio n. 5
0
 def parse_xml_to_dict(xml_em: XmlElement) -> Mapping[str, object]:
     """
     Parse XML element and return a dictionary.
     """
     # XPath: /AEC/DocumentoAEC/Cesiones/Cesion/DocumentoCesion/Cesionario
     return dict(
         rut=xml_em.findtext('sii-dte:RUT', namespaces=DTE_XMLNS_MAP),
         razon_social=xml_em.findtext('sii-dte:RazonSocial',
                                      namespaces=DTE_XMLNS_MAP),
         direccion=xml_em.findtext('sii-dte:Direccion',
                                   namespaces=DTE_XMLNS_MAP),
         email=xml_em.findtext('sii-dte:eMail', namespaces=DTE_XMLNS_MAP),
     )
Esempio n. 6
0
def _set_dte_xml_missing_xmlns(xml_doc: XmlElement) -> Tuple[XmlElement, bool]:

    # source: name of the XML element without namespace.
    #   cl_sii/data/ref/factura_electronica/schemas-xml/DTE_v10.xsd#L22 (f57a326)
    #   cl_sii/data/ref/factura_electronica/schemas-xml/EnvioDTE_v10.xsd#L92 (f57a326)
    em_tag_simple = 'DTE'

    em_namespace = DTE_XMLNS
    em_tag_namespaced = '{%s}%s' % (em_namespace, em_tag_simple)

    # Tag of 'DTE' should be ...
    assert em_tag_namespaced == '{http://www.sii.cl/SiiDte}DTE'

    modified = False

    root_em = xml_doc.getroottree().getroot()
    root_em_tag = root_em.tag

    if root_em_tag == em_tag_namespaced:
        pass
    elif root_em_tag == em_tag_simple:
        modified = True
        root_em.set('xmlns', em_namespace)
        f = io.BytesIO()
        xml_utils.write_xml_doc(xml_doc, f)
        new_xml_doc_bytes = f.getvalue()
        xml_doc = xml_utils.parse_untrusted_xml(new_xml_doc_bytes)
    else:
        exc_msg = "XML root element tag does not match the expected simple or namespaced name."
        raise Exception(exc_msg, em_tag_simple, em_tag_namespaced, root_em_tag)

    return xml_doc, modified
Esempio n. 7
0
    def parse_xml_to_dict(xml_em: XmlElement) -> Mapping[str, object]:
        """
        Parse XML element and return a dictionary.
        """
        # XPath: /AEC/DocumentoAEC/Cesiones/DTECedido/DocumentoDTECedido
        doc_dte_cedido_em = xml_em.find(
            'sii-dte:DocumentoDTECedido',
            namespaces=DTE_XMLNS_MAP,
        )

        # Signature over 'DocumentoDTECedido'
        # XPath: /AEC/DocumentoAEC/Cesiones/DTECedido/Signature
        # signature_over_doc_dte_cedido_em = xml_em.find(
        #     'ds:Signature',
        #     namespaces=xml_utils.XML_DSIG_NS_MAP,
        # )
        # signature_over_doc_dte_cedido_dict = _XmlSignature.parse_xml_to_dict(
        #     signature_over_doc_dte_cedido_em,
        # )

        # XPath: /AEC/DocumentoAEC/Cesiones/DTECedido/DocumentoDTECedido
        doc_dte_cedido_dict = _DocumentoDteCedido.parse_xml_to_dict(
            doc_dte_cedido_em)

        # XPath: /AEC/DocumentoAEC/Cesiones/DTECedido
        return dict(documento_dte_cedido=doc_dte_cedido_dict,
                    # signature=signature_over_doc_dte_cedido_dict,
                    )
Esempio n. 8
0
    def parse_xml_to_dict(xml_em: XmlElement) -> Mapping[str, object]:
        """
        Parse XML element and return a dictionary.
        """
        # XPath: /AEC/DocumentoAEC/Cesiones/Cesion/DocumentoCesion/Cedente/RUTAutorizado
        cedente_personas_autorizadas_em = xml_em.findall(
            'sii-dte:RUTAutorizado',
            namespaces=DTE_XMLNS_MAP,
        )
        cedente_persona_autorizada_dict_list = [
            _RutAutorizado.parse_xml_to_dict(cedente_persona_autorizada)
            for cedente_persona_autorizada in cedente_personas_autorizadas_em
        ]

        # XPath: /AEC/DocumentoAEC/Cesiones/Cesion/DocumentoCesion/Cedente
        return dict(
            rut=xml_em.findtext('sii-dte:RUT', namespaces=DTE_XMLNS_MAP),
            razon_social=xml_em.findtext('sii-dte:RazonSocial',
                                         namespaces=DTE_XMLNS_MAP),
            direccion=xml_em.findtext('sii-dte:Direccion',
                                      namespaces=DTE_XMLNS_MAP),
            email=xml_em.findtext('sii-dte:eMail', namespaces=DTE_XMLNS_MAP),
            declaracion_jurada=xml_em.findtext(
                'sii-dte:DeclaracionJurada',
                namespaces=DTE_XMLNS_MAP,
            ) or None,
            ruts_autorizados=cedente_persona_autorizada_dict_list,
        )
Esempio n. 9
0
    def parse_xml_to_dict(xml_em: XmlElement) -> Mapping[str, object]:
        """
        Parse XML element and return a dictionary.
        """
        # XPath: /AEC/DocumentoAEC/Cesiones/DTECedido/DocumentoDTECedido/DTE
        dte_em = xml_em.find('sii-dte:DTE', namespaces=DTE_XMLNS_MAP)

        # XPath: /AEC/DocumentoAEC/Cesiones/DTECedido/DocumentoDTECedido
        return dict(
            # id=xml_em.get('ID'),
            dte=dte_em,
            # tmst_firma=xml_em.findtext('sii-dte:TmstFirma', namespaces=DTE_XMLNS_MAP),
        )
Esempio n. 10
0
    def parse_xml_to_dict(xml_em: XmlElement) -> Mapping[str, object]:
        """
        Parse XML element and return a dictionary.
        """
        # XPath: /AEC/DocumentoAEC/Cesiones/Cesion/DocumentoCesion/IdDTE
        id_dte_em = xml_em.find('sii-dte:IdDTE', namespaces=DTE_XMLNS_MAP)
        id_dte_dict = _IdDte.parse_xml_to_dict(id_dte_em)

        # XPath: /AEC/DocumentoAEC/Cesiones/Cesion/DocumentoCesion/Cedente
        cedente_em = xml_em.find('sii-dte:Cedente', namespaces=DTE_XMLNS_MAP)
        cedente_dict = _Cedente.parse_xml_to_dict(cedente_em)

        # XPath: /AEC/DocumentoAEC/Cesiones/Cesion/DocumentoCesion/Cesionario
        cesionario_em = xml_em.find('sii-dte:Cesionario',
                                    namespaces=DTE_XMLNS_MAP)
        cesionario_dict = _Cesionario.parse_xml_to_dict(cesionario_em)

        # XPath: /AEC/DocumentoAEC/Cesiones/Cesion/DocumentoCesion
        return dict(
            # id=xml_em.get('ID'),
            seq_cesion=xml_em.findtext('sii-dte:SeqCesion',
                                       namespaces=DTE_XMLNS_MAP),
            id_dte=id_dte_dict,
            cedente=cedente_dict,
            cesionario=cesionario_dict,
            monto_cesion=xml_em.findtext('sii-dte:MontoCesion',
                                         namespaces=DTE_XMLNS_MAP),
            ultimo_vencimiento=xml_em.findtext(
                'sii-dte:UltimoVencimiento',
                namespaces=DTE_XMLNS_MAP,
            ),
            tmst_cesion=xml_em.findtext('sii-dte:TmstCesion',
                                        namespaces=DTE_XMLNS_MAP),
            email_deudor=xml_em.findtext('sii-dte:eMailDeudor',
                                         namespaces=DTE_XMLNS_MAP) or None,
        )
Esempio n. 11
0
 def parse_xml_to_dict(xml_em: XmlElement) -> Mapping[str, object]:
     """
     Parse XML element and return a dictionary.
     """
     # XPath: /AEC/DocumentoAEC/Cesiones/Cesion/DocumentoCesion/IdDTE
     return dict(
         rut_emisor=xml_em.findtext('sii-dte:RUTEmisor',
                                    namespaces=DTE_XMLNS_MAP),
         tipo_dte=xml_em.findtext('sii-dte:TipoDTE',
                                  namespaces=DTE_XMLNS_MAP),
         folio=xml_em.findtext('sii-dte:Folio', namespaces=DTE_XMLNS_MAP),
         fch_emis=xml_em.findtext('sii-dte:FchEmis',
                                  namespaces=DTE_XMLNS_MAP),
         rut_receptor=xml_em.findtext('sii-dte:RUTReceptor',
                                      namespaces=DTE_XMLNS_MAP),
         mnt_total=xml_em.findtext('sii-dte:MntTotal',
                                   namespaces=DTE_XMLNS_MAP),
     )
Esempio n. 12
0
 def parse_xml_to_dict(xml_em: XmlElement) -> Mapping[str, object]:
     """
     Parse XML element and return a dictionary.
     """
     # XPath: /AEC/DocumentoAEC/Caratula
     return dict(
         rut_cedente=xml_em.findtext('sii-dte:RutCedente',
                                     namespaces=DTE_XMLNS_MAP),
         rut_cesionario=xml_em.findtext('sii-dte:RutCesionario',
                                        namespaces=DTE_XMLNS_MAP),
         nmb_contacto=xml_em.findtext('sii-dte:NmbContacto',
                                      namespaces=DTE_XMLNS_MAP) or None,
         fono_contacto=xml_em.findtext('sii-dte:FonoContacto',
                                       namespaces=DTE_XMLNS_MAP) or None,
         mail_contacto=xml_em.findtext('sii-dte:MailContacto',
                                       namespaces=DTE_XMLNS_MAP) or None,
         tmst_firmaenvio=xml_em.findtext('sii-dte:TmstFirmaEnvio',
                                         namespaces=DTE_XMLNS_MAP),
     )