UNPKG

nodefact

Version:

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

184 lines (173 loc) 7.78 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.invoice20 = void 0; /** * Plantilla para Factura Electrónica (UBL 2.0) */ const namespaces_1 = require("./namespaces"); exports.invoice20 = `<?xml version="1.0" encoding="UTF-8"?> <Invoice xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2" xmlns:cac="${namespaces_1.namespaces.cac}" xmlns:cbc="${namespaces_1.namespaces.cbc}" xmlns:ccts="${namespaces_1.namespaces.ccts}" xmlns:ds="${namespaces_1.namespaces.ds}" xmlns:ext="${namespaces_1.namespaces.ext}" xmlns:qdt="${namespaces_1.namespaces.qdt}" xmlns:sac="${namespaces_1.namespaces.sac}" xmlns:udt="${namespaces_1.namespaces.udt}" xmlns:xsi="${namespaces_1.namespaces.xsi}"> <ext:UBLExtensions> <ext:UBLExtension> <ext:ExtensionContent/> </ext:UBLExtension> </ext:UBLExtensions> <!-- Versión del UBL --> <cbc:UBLVersionID>2.0</cbc:UBLVersionID> <!-- Versión de la estructura del documento --> <cbc:CustomizationID>1.0</cbc:CustomizationID> <!-- Número de documento: Serie-Correlativo --> <cbc:ID>{{serie}}-{{correlativo}}</cbc:ID> <!-- Fecha de emisión --> <cbc:IssueDate>{{fechaEmision}}</cbc:IssueDate> <!-- Tipo de documento --> <cbc:InvoiceTypeCode>{{tipoDocumento}}</cbc:InvoiceTypeCode> <!-- Moneda --> <cbc:DocumentCurrencyCode>{{moneda}}</cbc:DocumentCurrencyCode> <!-- Firma Digital --> <cac:Signature> <cbc:ID>{{signatureID}}</cbc:ID> <cac:SignatoryParty> <cac:PartyIdentification> <cbc:ID>{{emisor.ruc}}</cbc:ID> </cac:PartyIdentification> <cac:PartyName> <cbc:Name>{{emisor.razonSocial}}</cbc:Name> </cac:PartyName> </cac:SignatoryParty> <cac:DigitalSignatureAttachment> <cac:ExternalReference> <cbc:URI>{{signatureURI}}</cbc:URI> </cac:ExternalReference> </cac:DigitalSignatureAttachment> </cac:Signature> <!-- Datos del Emisor --> <cac:AccountingSupplierParty> <cbc:CustomerAssignedAccountID>{{emisor.ruc}}</cbc:CustomerAssignedAccountID> <cbc:AdditionalAccountID>6</cbc:AdditionalAccountID> <cac:Party> <cac:PartyName> <cbc:Name>{{emisor.nombreComercial}}</cbc:Name> </cac:PartyName> <cac:PostalAddress> <cbc:ID>{{emisor.direccion.ubigeo}}</cbc:ID> <cbc:StreetName>{{emisor.direccion.direccion}}</cbc:StreetName> <cbc:CitySubdivisionName>-</cbc:CitySubdivisionName> <cbc:CityName>{{emisor.direccion.provincia}}</cbc:CityName> <cbc:CountrySubentity>{{emisor.direccion.departamento}}</cbc:CountrySubentity> <cbc:District>{{emisor.direccion.distrito}}</cbc:District> <cac:Country> <cbc:IdentificationCode>PE</cbc:IdentificationCode> </cac:Country> </cac:PostalAddress> <cac:PartyLegalEntity> <cbc:RegistrationName>{{emisor.razonSocial}}</cbc:RegistrationName> </cac:PartyLegalEntity> </cac:Party> </cac:AccountingSupplierParty> <!-- Datos del Cliente --> <cac:AccountingCustomerParty> <cbc:CustomerAssignedAccountID>{{receptor.numeroDocumento}}</cbc:CustomerAssignedAccountID> <cbc:AdditionalAccountID>{{receptor.tipoDocumento}}</cbc:AdditionalAccountID> <cac:Party> <cac:PartyLegalEntity> <cbc:RegistrationName>{{receptor.razonSocial}}</cbc:RegistrationName> {{#if receptor.direccion}} <cac:RegistrationAddress> {{#if receptor.direccion.ubigeo}} <cbc:ID>{{receptor.direccion.ubigeo}}</cbc:ID> {{/if}} <cac:AddressLine> <cbc:Line>{{receptor.direccion.direccion}}</cbc:Line> </cac:AddressLine> <cac:Country> <cbc:IdentificationCode>PE</cbc:IdentificationCode> </cac:Country> </cac:RegistrationAddress> {{/if}} </cac:PartyLegalEntity> </cac:Party> </cac:AccountingCustomerParty> <!-- Información de Impuestos a nivel de documento --> <cac:TaxTotal> <cbc:TaxAmount currencyID="{{moneda}}">{{impuestos.total}}</cbc:TaxAmount> <!-- IGV --> <cac:TaxSubtotal> <cbc:TaxAmount currencyID="{{moneda}}">{{impuestos.igv}}</cbc:TaxAmount> <cac:TaxCategory> <cac:TaxScheme> <cbc:ID>1000</cbc:ID> <cbc:Name>IGV</cbc:Name> <cbc:TaxTypeCode>VAT</cbc:TaxTypeCode> </cac:TaxScheme> </cac:TaxCategory> </cac:TaxSubtotal> {{#if impuestos.isc}} <!-- ISC --> <cac:TaxSubtotal> <cbc:TaxAmount currencyID="{{moneda}}">{{impuestos.isc}}</cbc:TaxAmount> <cac:TaxCategory> <cac:TaxScheme> <cbc:ID>2000</cbc:ID> <cbc:Name>ISC</cbc:Name> <cbc:TaxTypeCode>EXC</cbc:TaxTypeCode> </cac:TaxScheme> </cac:TaxCategory> </cac:TaxSubtotal> {{/if}} </cac:TaxTotal> <!-- Información de totales --> <cac:LegalMonetaryTotal> <cbc:PayableAmount currencyID="{{moneda}}">{{totalPrecioVenta}}</cbc:PayableAmount> </cac:LegalMonetaryTotal> <!-- Detalle de ítems --> {{#each items}} <cac:InvoiceLine> <cbc:ID>{{@index}}</cbc:ID> <cbc:InvoicedQuantity unitCode="{{unidadMedida}}">{{cantidad}}</cbc:InvoicedQuantity> <cbc:LineExtensionAmount currencyID="{{../moneda}}">{{subtotal}}</cbc:LineExtensionAmount> <!-- Precio unitario --> <cac:PricingReference> <cac:AlternativeConditionPrice> <cbc:PriceAmount currencyID="{{../moneda}}">{{precioUnitario}}</cbc:PriceAmount> <cbc:PriceTypeCode>01</cbc:PriceTypeCode> </cac:AlternativeConditionPrice> </cac:PricingReference> <!-- Impuestos del ítem --> <cac:TaxTotal> <cbc:TaxAmount currencyID="{{../moneda}}">{{igv}}</cbc:TaxAmount> <cac:TaxSubtotal> <cbc:TaxAmount currencyID="{{../moneda}}">{{igv}}</cbc:TaxAmount> <cac:TaxCategory> <cbc:TaxExemptionReasonCode>{{tipoIGV}}</cbc:TaxExemptionReasonCode> <cac:TaxScheme> <cbc:ID>1000</cbc:ID> <cbc:Name>IGV</cbc:Name> <cbc:TaxTypeCode>VAT</cbc:TaxTypeCode> </cac:TaxScheme> </cac:TaxCategory> </cac:TaxSubtotal> </cac:TaxTotal> <!-- Descripción del ítem --> <cac:Item> <cbc:Description>{{descripcion}}</cbc:Description> <cac:SellersItemIdentification> <cbc:ID>{{codigo}}</cbc:ID> </cac:SellersItemIdentification> </cac:Item> <!-- Precio unitario sin impuestos --> <cac:Price> <cbc:PriceAmount currencyID="{{../moneda}}">{{valorUnitario}}</cbc:PriceAmount> </cac:Price> </cac:InvoiceLine> {{/each}} </Invoice>`;