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
JavaScript
"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 = `
<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 = `
<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 = `
<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 = `
<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 = `
<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 = `
<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 = `
<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 = `
<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 = `
<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 = `
<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}`);
}
}