UNPKG

@nodecfdi/cfdi-cleaner

Version:

Librería para limpiar comprobantes fiscales digitales v3.3 y v4.0

131 lines (130 loc) 12.2 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const ts_mixer_1 = require("ts-mixer"); const xpath_1 = __importDefault(require("xpath")); const cfdi_x_path_1 = __importDefault(require("#src/internal/cfdi_x_path")); const schema_location_1 = __importDefault(require("#src/internal/schema_location")); const xml_attribute_methods_1 = __importDefault(require("#src/mixins/xml_attribute_methods")); const xml_namespace_methods_1 = __importDefault(require("#src/mixins/xml_namespace_methods")); class SetKnownSchemaLocations extends (0, ts_mixer_1.Mixin)(xml_namespace_methods_1.default, xml_attribute_methods_1.default) { /** * List of known namespace # version xsd locations as key value map * @see https://github.com/phpcfdi/sat-ns-registry */ static KNOWN_NAMESPACES = { 'http://www.sat.gob.mx/cfd/4#4.0': 'http://www.sat.gob.mx/sitio_internet/cfd/4/cfdv40.xsd', 'http://www.sat.gob.mx/cfd/3#3.3': 'http://www.sat.gob.mx/sitio_internet/cfd/3/cfdv33.xsd', 'http://www.sat.gob.mx/cfd/3#3.2': 'http://www.sat.gob.mx/sitio_internet/cfd/3/cfdv32.xsd', 'http://www.sat.gob.mx/cfd/3#3.0': 'http://www.sat.gob.mx/sitio_internet/cfd/3/cfdv3.xsd', 'http://www.sat.gob.mx/cfd/2#2.2': 'http://www.sat.gob.mx/sitio_internet/cfd/2/cfdv22.xsd', 'http://www.sat.gob.mx/cfd/2#2.0': 'http://www.sat.gob.mx/sitio_internet/cfd/2/cfdv2.xsd', 'http://www.sat.gob.mx/esquemas/retencionpago/2#2.0': 'http://www.sat.gob.mx/esquemas/retencionpago/2/retencionpagov2.xsd', 'http://www.sat.gob.mx/esquemas/retencionpago/1#1.0': 'http://www.sat.gob.mx/esquemas/retencionpago/1/retencionpagov1.xsd', 'http://www.sat.gob.mx/TimbreFiscalDigital#1.0': 'http://www.sat.gob.mx/sitio_internet/cfd/TimbreFiscalDigital/TimbreFiscalDigital.xsd', 'http://www.sat.gob.mx/TimbreFiscalDigital#1.1': 'http://www.sat.gob.mx/sitio_internet/cfd/TimbreFiscalDigital/TimbreFiscalDigitalv11.xsd', 'http://www.sat.gob.mx/ecb#1.0': 'http://www.sat.gob.mx/sitio_internet/cfd/ecb/ecb.xsd', 'http://www.sat.gob.mx/ecc#1.0': 'http://www.sat.gob.mx/sitio_internet/cfd/ecc/ecc.xsd', 'http://www.sat.gob.mx/EstadoDeCuentaCombustible#1.1': 'http://www.sat.gob.mx/sitio_internet/cfd/EstadoDeCuentaCombustible/ecc11.xsd', 'http://www.sat.gob.mx/EstadoDeCuentaCombustible12#1.2': 'http://www.sat.gob.mx/sitio_internet/cfd/EstadoDeCuentaCombustible/ecc12.xsd', 'http://www.sat.gob.mx/donat#1.0': 'http://www.sat.gob.mx/sitio_internet/cfd/donat/donat.xsd', 'http://www.sat.gob.mx/donat#1.1': 'http://www.sat.gob.mx/sitio_internet/cfd/donat/donat11.xsd', 'http://www.sat.gob.mx/divisas#1.0': 'http://www.sat.gob.mx/sitio_internet/cfd/divisas/divisas.xsd', 'http://www.sat.gob.mx/implocal#1.0': 'http://www.sat.gob.mx/sitio_internet/cfd/implocal/implocal.xsd', 'http://www.sat.gob.mx/leyendasFiscales#1.0': 'http://www.sat.gob.mx/sitio_internet/cfd/leyendasFiscales/leyendasFisc.xsd', 'http://www.sat.gob.mx/pfic#1.0': 'http://www.sat.gob.mx/sitio_internet/cfd/pfic/pfic.xsd', 'http://www.sat.gob.mx/TuristaPasajeroExtranjero#1.0': 'http://www.sat.gob.mx/sitio_internet/cfd/TuristaPasajeroExtranjero/TuristaPasajeroExtranjero.xsd', 'http://www.sat.gob.mx/spei#': 'http://www.sat.gob.mx/sitio_internet/cfd/spei/spei.xsd', 'http://www.sat.gob.mx/detallista#': 'http://www.sat.gob.mx/sitio_internet/cfd/detallista/detallista.xsd', 'http://www.sat.gob.mx/ registrofiscal#1.0': 'http://www.sat.gob.mx/sitio_internet/cfd/cfdiregistrofiscal/cfdiregistrofiscal.xsd', 'http://www.sat.gob.mx/nomina#1.1': 'http://www.sat.gob.mx/sitio_internet/cfd/nomina/nomina11.xsd', 'http://www.sat.gob.mx/nomina12#1.2': 'http://www.sat.gob.mx/sitio_internet/cfd/nomina/nomina12.xsd', 'http://www.sat.gob.mx/pagoenespecie#1.0': 'http://www.sat.gob.mx/sitio_internet/cfd/pagoenespecie/pagoenespecie.xsd', 'http://www.sat.gob.mx/valesdedespensa#1.0': 'http://www.sat.gob.mx/sitio_internet/cfd/valesdedespensa/valesdedespensa.xsd', 'http://www.sat.gob.mx/ConsumoDeCombustibles11#1.1': 'http://www.sat.gob.mx/sitio_internet/cfd/consumodecombustibles/consumodeCombustibles11.xsd', 'http://www.sat.gob.mx/consumodecombustibles#1.0': 'http://www.sat.gob.mx/sitio_internet/cfd/consumodecombustibles/consumodecombustibles.xsd', 'http://www.sat.gob.mx/aerolineas#1.0': 'http://www.sat.gob.mx/sitio_internet/cfd/aerolineas/aerolineas.xsd', 'http://www.sat.gob.mx/notariospublicos#1.0': 'http://www.sat.gob.mx/sitio_internet/cfd/notariospublicos/notariospublicos.xsd', 'http://www.sat.gob.mx/vehiculousado#1.0': 'http://www.sat.gob.mx/sitio_internet/cfd/vehiculousado/vehiculousado.xsd', 'http://www.sat.gob.mx/servicioparcialconstruccion#1.0': 'http://www.sat.gob.mx/sitio_internet/cfd/servicioparcialconstruccion/servicioparcialconstruccion.xsd', 'http://www.sat.gob.mx/renovacionysustitucionvehiculos#1.0': 'http://www.sat.gob.mx/sitio_internet/cfd/renovacionysustitucionvehiculos/renovacionysustitucionvehiculos.xsd', 'http://www.sat.gob.mx/certificadodestruccion#1.0': 'http://www.sat.gob.mx/sitio_internet/cfd/certificadodestruccion/certificadodedestruccion.xsd', 'http://www.sat.gob.mx/arteantiguedades#1.0': 'http://www.sat.gob.mx/sitio_internet/cfd/arteantiguedades/obrasarteantiguedades.xsd', 'http://www.sat.gob.mx/ine#1.1': 'http://www.sat.gob.mx/sitio_internet/cfd/ine/ine11.xsd', 'http://www.sat.gob.mx/ine#1.0': 'http://www.sat.gob.mx/sitio_internet/cfd/ine/ine10.xsd', 'http://www.sat.gob.mx/ComercioExterior20#2.0': 'http://www.sat.gob.mx/sitio_internet/cfd/ComercioExterior20/ComercioExterior20.xsd', 'http://www.sat.gob.mx/ComercioExterior11#1.1': 'http://www.sat.gob.mx/sitio_internet/cfd/ComercioExterior11/ComercioExterior11.xsd', 'http://www.sat.gob.mx/ComercioExterior#1.0': 'http://www.sat.gob.mx/sitio_internet/cfd/ComercioExterior/ComercioExterior10.xsd', 'http://www.sat.gob.mx/Pagos20#2.0': 'http://www.sat.gob.mx/sitio_internet/cfd/Pagos/Pagos20.xsd', 'http://www.sat.gob.mx/Pagos#1.0': 'http://www.sat.gob.mx/sitio_internet/cfd/Pagos/Pagos10.xsd', 'http://www.sat.gob.mx/GastosHidrocarburos10#1.0': 'http://www.sat.gob.mx/sitio_internet/cfd/GastosHidrocarburos10/GastosHidrocarburos10.xsd', 'http://www.sat.gob.mx/IngresosHidrocarburos10#1.0': 'http://www.sat.gob.mx/sitio_internet/cfd/IngresosHidrocarburos10/IngresosHidrocarburos.xsd', 'http://www.sat.gob.mx/CartaPorte#1.0': 'http://www.sat.gob.mx/sitio_internet/cfd/CartaPorte/CartaPorte.xsd', 'http://www.sat.gob.mx/CartaPorte20#2.0': 'http://www.sat.gob.mx/sitio_internet/cfd/CartaPorte/CartaPorte20.xsd', 'http://www.sat.gob.mx/CartaPorte30#3.0': 'http://www.sat.gob.mx/sitio_internet/cfd/CartaPorte/CartaPorte30.xsd', 'http://www.sat.gob.mx/CartaPorte31#3.1': 'http://www.sat.gob.mx/sitio_internet/cfd/CartaPorte/CartaPorte31.xsd', 'http://www.sat.gob.mx/iedu#1.0': 'http://www.sat.gob.mx/sitio_internet/cfd/iedu/iedu.xsd', 'http://www.sat.gob.mx/ventavehiculos#1.1': 'http://www.sat.gob.mx/sitio_internet/cfd/ventavehiculos/ventavehiculos11.xsd', 'http://www.sat.gob.mx/ventavehiculos#1.0': 'http://www.sat.gob.mx/sitio_internet/cfd/ventavehiculos/ventavehiculos.xsd', 'http://www.sat.gob.mx/terceros#1.1': 'http://www.sat.gob.mx/sitio_internet/cfd/terceros/terceros11.xsd', 'http://www.sat.gob.mx/acreditamiento#1.0': 'http://www.sat.gob.mx/sitio_internet/cfd/acreditamiento/AcreditamientoIEPS10.xsd', 'http://www.sat.gob.mx/esquemas/retencionpago/1/arrendamientoenfideicomiso#1.0': 'http://www.sat.gob.mx/esquemas/retencionpago/1/arrendamientoenfideicomiso/arrendamientoenfideicomiso.xsd', 'http://www.sat.gob.mx/esquemas/retencionpago/1/dividendos#1.0': 'http://www.sat.gob.mx/esquemas/retencionpago/1/dividendos/dividendos.xsd', 'http://www.sat.gob.mx/esquemas/retencionpago/1/enajenaciondeacciones#1.0': 'http://www.sat.gob.mx/esquemas/retencionpago/1/enajenaciondeacciones/enajenaciondeacciones.xsd', 'http://www.sat.gob.mx/esquemas/retencionpago/1/fideicomisonoempresarial#1.0': 'http://www.sat.gob.mx/esquemas/retencionpago/1/fideicomisonoempresarial/fideicomisonoempresarial.xsd', 'http://www.sat.gob.mx/esquemas/retencionpago/1/intereses#1.0': 'http://www.sat.gob.mx/esquemas/retencionpago/1/intereses/intereses.xsd', 'http://www.sat.gob.mx/esquemas/retencionpago/1/intereseshipotecarios#1.0': 'http://www.sat.gob.mx/esquemas/retencionpago/1/intereseshipotecarios/intereseshipotecarios.xsd', 'http://www.sat.gob.mx/esquemas/retencionpago/1/operacionesconderivados#1.0': 'http://www.sat.gob.mx/esquemas/retencionpago/1/operacionesconderivados/operacionesconderivados.xsd', 'http://www.sat.gob.mx/esquemas/retencionpago/1/pagosaextranjeros#1.0': 'http://www.sat.gob.mx/esquemas/retencionpago/1/pagosaextranjeros/pagosaextranjeros.xsd', 'http://www.sat.gob.mx/esquemas/retencionpago/1/planesderetiro11#1.1': 'http://www.sat.gob.mx/esquemas/retencionpago/1/planesderetiro11/planesderetiro11.xsd', 'http://www.sat.gob.mx/esquemas/retencionpago/1/planesderetiro#1.0': 'http://www.sat.gob.mx/esquemas/retencionpago/1/planesderetiro/planesderetiro.xsd', 'http://www.sat.gob.mx/esquemas/retencionpago/1/premios#1.0': 'http://www.sat.gob.mx/esquemas/retencionpago/1/premios/premios.xsd', 'http://www.sat.gob.mx/esquemas/retencionpago/1/sectorfinanciero#1.0': 'http://www.sat.gob.mx/esquemas/retencionpago/1/sectorfinanciero/sectorfinanciero.xsd', 'http://www.sat.gob.mx/esquemas/retencionpago/1/PlataformasTecnologicas10#1.0': 'http://www.sat.gob.mx/esquemas/retencionpago/1/PlataformasTecnologicas10/ServiciosPlataformasTecnologicas10.xsd', }; /** * Pairs of key-value of namespace and version to XSD locations * Key: namespace#version * Value: location * @returns Record */ static getKnowNamespaces() { return SetKnownSchemaLocations.KNOWN_NAMESPACES; } clean(document) { const xpathX = cfdi_x_path_1.default.createFromDocument(document); const schemaLocationAttributes = xpathX.querySchemaLocations(); for (const schemaLocationAttribute of schemaLocationAttributes) { this.cleanNodeAttribute(document, schemaLocationAttribute); } } cleanNodeAttribute(document, attribute) { const schemaLocation = schema_location_1.default.createFromValue(attribute.nodeValue); for (const [namespace, location] of Object.entries(schemaLocation.getPairs())) { const version = this.obtainVersionOfNamespace(document, namespace); const temporaryLocation = this.obtainLocationForNamespaceVersion(namespace, version, location); schemaLocation.setPair(namespace, temporaryLocation); } attribute.nodeValue = schemaLocation.asValue(); attribute.value = schemaLocation.asValue(); } obtainVersionOfNamespace(document, namespace) { return (this.obtainAttributeValueFromFirstNodeOfNamespace(document, namespace, 'Version') || this.obtainAttributeValueFromFirstNodeOfNamespace(document, namespace, 'version')); } obtainAttributeValueFromFirstNodeOfNamespace(document, namespace, attributeName) { const selectXpath = xpath_1.default.useNamespaces({ q: namespace }); // @ts-expect-error misssing Node properties are not needed const nodes = selectXpath(`//q:*[@${attributeName}]`, document); if (nodes.length === 0) { return ''; } return nodes[0].attributes.getNamedItem(attributeName)?.nodeValue ?? ''; } obtainLocationForNamespaceVersion(namespace, version, defaultV) { return SetKnownSchemaLocations.KNOWN_NAMESPACES[`${namespace}#${version}`] || defaultV; } } exports.default = SetKnownSchemaLocations;