UNPKG

nodefact

Version:

Biblioteca para facturación electrónica en Perú con Node.js. Compatible con UBL 2.1 y servicios web de SUNAT.

188 lines (187 loc) 10.3 kB
"use strict"; /** * Módulo de Plantillas XML - Exportación de plantillas para documentos XML * * Este módulo exporta todas las plantillas XML para la generación de documentos * electrónicos según los esquemas UBL 2.1 requeridos por SUNAT. */ Object.defineProperty(exports, "__esModule", { value: true }); exports.namespaces = exports.voidedTemplate = exports.summaryTemplate = exports.retentionTemplate = exports.perceptionTemplate = exports.embededDispatchTemplate = exports.dispatch2022Template = exports.dispatchTemplate = exports.debitNoteTemplate = exports.creditNoteTemplate = exports.invoiceTemplate = void 0; exports.getTemplateByDocumentType = getTemplateByDocumentType; // Definir plantillas como strings exports.invoiceTemplate = `<?xml version="1.0" encoding="UTF-8"?> <Invoice xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2" xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2" xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:ext="urn:oasis:names:specification:ubl:schema:xsd:CommonExtensionComponents-2"> <!-- Plantilla UBL 2.1 para Factura --> <ext:UBLExtensions> <ext:UBLExtension> <ext:ExtensionContent/> </ext:UBLExtension> </ext:UBLExtensions> <!-- Resto de la plantilla --> </Invoice>`; exports.creditNoteTemplate = `<?xml version="1.0" encoding="UTF-8"?> <CreditNote xmlns="urn:oasis:names:specification:ubl:schema:xsd:CreditNote-2" xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2" xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:ext="urn:oasis:names:specification:ubl:schema:xsd:CommonExtensionComponents-2"> <!-- Plantilla UBL 2.1 para Nota de Crédito --> <ext:UBLExtensions> <ext:UBLExtension> <ext:ExtensionContent/> </ext:UBLExtension> </ext:UBLExtensions> <!-- Resto de la plantilla --> </CreditNote>`; exports.debitNoteTemplate = `<?xml version="1.0" encoding="UTF-8"?> <DebitNote xmlns="urn:oasis:names:specification:ubl:schema:xsd:DebitNote-2" xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2" xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:ext="urn:oasis:names:specification:ubl:schema:xsd:CommonExtensionComponents-2"> <!-- Plantilla UBL 2.1 para Nota de Débito --> <ext:UBLExtensions> <ext:UBLExtension> <ext:ExtensionContent/> </ext:UBLExtension> </ext:UBLExtensions> <!-- Resto de la plantilla --> </DebitNote>`; exports.dispatchTemplate = `<?xml version="1.0" encoding="UTF-8"?> <DespatchAdvice xmlns="urn:oasis:names:specification:ubl:schema:xsd:DespatchAdvice-2" xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2" xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:ext="urn:oasis:names:specification:ubl:schema:xsd:CommonExtensionComponents-2"> <!-- Plantilla UBL para Guía de Remisión --> <ext:UBLExtensions> <ext:UBLExtension> <ext:ExtensionContent/> </ext:UBLExtension> </ext:UBLExtensions> <!-- Resto de la plantilla --> </DespatchAdvice>`; exports.dispatch2022Template = `<?xml version="1.0" encoding="UTF-8"?> <DespatchAdvice xmlns="urn:oasis:names:specification:ubl:schema:xsd:DespatchAdvice-2" xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2" xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:ext="urn:oasis:names:specification:ubl:schema:xsd:CommonExtensionComponents-2"> <!-- Plantilla UBL 2022 para Guía de Remisión --> <ext:UBLExtensions> <ext:UBLExtension> <ext:ExtensionContent/> </ext:UBLExtension> </ext:UBLExtensions> <!-- Resto de la plantilla --> </DespatchAdvice>`; exports.embededDispatchTemplate = `<?xml version="1.0" encoding="UTF-8"?> <DespatchAdvice xmlns="urn:oasis:names:specification:ubl:schema:xsd:DespatchAdvice-2" xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2" xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:ext="urn:oasis:names:specification:ubl:schema:xsd:CommonExtensionComponents-2"> <!-- Plantilla UBL para Guía de Remisión Embebida --> <ext:UBLExtensions> <ext:UBLExtension> <ext:ExtensionContent/> </ext:UBLExtension> </ext:UBLExtensions> <!-- Resto de la plantilla --> </DespatchAdvice>`; exports.perceptionTemplate = `<?xml version="1.0" encoding="UTF-8"?> <Perception xmlns="urn:sunat:names:specification:ubl:peru:schema:xsd:Perception-1" xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2" xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:ext="urn:oasis:names:specification:ubl:schema:xsd:CommonExtensionComponents-2" xmlns:sac="urn:sunat:names:specification:ubl:peru:schema:xsd:SunatAggregateComponents-1"> <!-- Plantilla UBL para Comprobante de Percepción --> <ext:UBLExtensions> <ext:UBLExtension> <ext:ExtensionContent/> </ext:UBLExtension> </ext:UBLExtensions> <!-- Resto de la plantilla --> </Perception>`; exports.retentionTemplate = `<?xml version="1.0" encoding="UTF-8"?> <Retention xmlns="urn:sunat:names:specification:ubl:peru:schema:xsd:Retention-1" xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2" xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:ext="urn:oasis:names:specification:ubl:schema:xsd:CommonExtensionComponents-2" xmlns:sac="urn:sunat:names:specification:ubl:peru:schema:xsd:SunatAggregateComponents-1"> <!-- Plantilla UBL para Comprobante de Retención --> <ext:UBLExtensions> <ext:UBLExtension> <ext:ExtensionContent/> </ext:UBLExtension> </ext:UBLExtensions> <!-- Resto de la plantilla --> </Retention>`; exports.summaryTemplate = `<?xml version="1.0" encoding="UTF-8"?> <SummaryDocuments xmlns="urn:sunat:names:specification:ubl:peru:schema:xsd:SummaryDocuments-1" xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2" xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:ext="urn:oasis:names:specification:ubl:schema:xsd:CommonExtensionComponents-2" xmlns:sac="urn:sunat:names:specification:ubl:peru:schema:xsd:SunatAggregateComponents-1"> <!-- Plantilla UBL para Resumen Diario --> <ext:UBLExtensions> <ext:UBLExtension> <ext:ExtensionContent/> </ext:UBLExtension> </ext:UBLExtensions> <!-- Resto de la plantilla --> </SummaryDocuments>`; exports.voidedTemplate = `<?xml version="1.0" encoding="UTF-8"?> <VoidedDocuments xmlns="urn:sunat:names:specification:ubl:peru:schema:xsd:VoidedDocuments-1" xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2" xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:ext="urn:oasis:names:specification:ubl:schema:xsd:CommonExtensionComponents-2" xmlns:sac="urn:sunat:names:specification:ubl:peru:schema:xsd:SunatAggregateComponents-1"> <!-- Plantilla UBL para Comunicación de Baja --> <ext:UBLExtensions> <ext:UBLExtension> <ext:ExtensionContent/> </ext:UBLExtension> </ext:UBLExtensions> <!-- Resto de la plantilla --> </VoidedDocuments>`; exports.namespaces = { ubl: 'urn:oasis:names:specification:ubl:schema:xsd:Invoice-2', cac: 'urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2', cbc: 'urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2', ds: 'http://www.w3.org/2000/09/xmldsig#', ext: 'urn:oasis:names:specification:ubl:schema:xsd:CommonExtensionComponents-2', sac: 'urn:sunat:names:specification:ubl:peru:schema:xsd:SunatAggregateComponents-1' }; // Función para obtener una plantilla por tipo de documento function getTemplateByDocumentType(documentType) { switch (documentType) { case '01': // Factura case '03': // Boleta return exports.invoiceTemplate; case '07': // Nota de crédito return exports.creditNoteTemplate; case '08': // Nota de débito return exports.debitNoteTemplate; case '09': // Guía de remisión return exports.dispatch2022Template; case '20': // Comprobante de retención return exports.retentionTemplate; case '40': // Comprobante de percepción return exports.perceptionTemplate; case 'RC': // Resumen diario return exports.summaryTemplate; case 'RA': // Comunicación de baja return exports.voidedTemplate; default: throw new Error(`No se encontró una plantilla para el tipo de documento: ${documentType}`); } }