UNPKG

facturacionelectronicapy-recibo-xmlgen

Version:

API Node JS para generar el archivo XML del Recibo similar al exigido por la SET en base a JSON

100 lines 7.9 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const StringUtil_service_1 = __importDefault(require("./StringUtil.service")); const FechaUtil_service_1 = __importDefault(require("./FechaUtil.service")); class JSonDteAlgoritmosService { /** * Calcula Digito Verificador numérico con entrada alfanumérica y basemax 11 */ calcularDigitoVerificador(cdc, baseMax = 11) { let v_total = 0; let v_resto = 0; let k = 0; let v_numero_aux = 0; let v_numero_al = ''; let v_caracter = ''; let v_digit = 0; // Cambia la ultima letra por ascii en caso que la cedula termine en letra for (let i = 0; i < cdc.length; i++) { v_caracter = cdc.toUpperCase().substring(i, i + 1); if (!(v_caracter.charCodeAt(0) >= 48 && v_caracter.charCodeAt(0) <= 57)) { v_numero_al = v_numero_al + v_caracter.charCodeAt(0); } else { v_numero_al = v_numero_al + v_caracter; } } // Calcula el DV k = 2; v_total = 0; //FOR i IN REVERSE 1 .. LENGTH(v_numero_al) LOOP for (let i = v_numero_al.length; i > 0; i--) { if (k > baseMax) { k = 2; } v_numero_aux = parseInt(v_numero_al.substring(i - 1, i)); v_total = v_total + v_numero_aux * k; k = k + 1; } v_resto = v_total % 11; if (v_resto > 1) { v_digit = 11 - v_resto; } else { v_digit = 0; } return v_digit; } /** * Generacion del codigo de control de 44 digitos * * Conformacion del CDC * 1. Tipo de Documento, iTiDE, 2, Completar con left zero hasta alcanzar 2 digit. * 2. Ruc Emisor, dRucEm, 8, Completar con left zero hasta 8 * 3. DV del Emisor, dDVEmi, 1, Digito verificador del emisor. * 4. Establecimiento, dEst, 3, Establecimiento * 5. Punto de Expedicion, dPunExp, 3, Punto de Expe. * 6. Numero de Docummento, dNumDoc, 7, Numero de DE, completar con left zero hasta 7 * 7. Tipo de Contribuyente, iTipCon, 1, Codigo del tipo de contribuyente * 8. Fecha Emision, dFeEmiDE, 8, en formato AAAAMMDD * 9. Tipo de Emision, iTipEmi, 1, Tipo de Emision * 10. Codigo de Seguridad, dCodSeg, 9, Num. Aleatorio * 11. Digito Verificador, dDVId, 1, Resultado del Algoritmo M. 11 * * @param data * @returns */ generateCodigoControl(params, data, codigoSeguridad) { if (params['ruc'].indexOf('-') == -1) { throw new Error('RUC debe contener dígito verificador en params.ruc'); } const tipoDocumento = data['tipoDocumento']; const rucEmisor = StringUtil_service_1.default.leftZero(params['ruc'].split('-')[0], 8); const dvEmisor = params['ruc'].split('-')[1]; const establecimiento = StringUtil_service_1.default.leftZero(data['establecimiento'], 3); const punto = StringUtil_service_1.default.leftZero(data['punto'], 3); const numero = StringUtil_service_1.default.leftZero(data['numero'], 7); const tipoContribuyente = params['tipoContribuyente']; const fechaEmision = FechaUtil_service_1.default.convertToAAAAMMDD(new Date(data['fecha'])); const tipoEmision = data['tipoEmision']; //1=Normal 2=Contingencia const codigoSeguridadAleatorio = codigoSeguridad; let cdc = StringUtil_service_1.default.leftZero(tipoDocumento, 2) + rucEmisor + dvEmisor + establecimiento + punto + numero + tipoContribuyente + fechaEmision + tipoEmision + codigoSeguridadAleatorio; const digitoVerificador = this.calcularDigitoVerificador(cdc, 11); cdc += digitoVerificador; return cdc; } } exports.default = new JSonDteAlgoritmosService(); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNvbkR0ZUFsZ29yaXRtb3Muc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJ2aWNlcy9qc29uRHRlQWxnb3JpdG1vcy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsOEVBQXFEO0FBQ3JELDRFQUFtRDtBQUVuRCxNQUFNLHdCQUF3QjtJQUM1Qjs7T0FFRztJQUNJLHlCQUF5QixDQUFDLEdBQVcsRUFBRSxVQUFrQixFQUFFO1FBQ2hFLElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQztRQUNoQixJQUFJLE9BQU8sR0FBRyxDQUFDLENBQUM7UUFDaEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ1YsSUFBSSxZQUFZLEdBQUcsQ0FBQyxDQUFDO1FBQ3JCLElBQUksV0FBVyxHQUFHLEVBQUUsQ0FBQztRQUNyQixJQUFJLFVBQVUsR0FBRyxFQUFFLENBQUM7UUFDcEIsSUFBSSxPQUFPLEdBQUcsQ0FBQyxDQUFDO1FBRWhCLDBFQUEwRTtRQUMxRSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNuQyxVQUFVLEdBQUcsR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ25ELElBQUksQ0FBQyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUU7Z0JBQ3ZFLFdBQVcsR0FBRyxXQUFXLEdBQUcsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUN0RDtpQkFBTTtnQkFDTCxXQUFXLEdBQUcsV0FBVyxHQUFHLFVBQVUsQ0FBQzthQUN4QztTQUNGO1FBRUQsZ0JBQWdCO1FBQ2hC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