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

102 lines 8.07 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 = 55; //Valor fijo para recibo 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 tipoEmision = 1; //1=Normal 2=Contingencia const codigoSeguridadAleatorio = codigoSeguridad; //const codigoSeguridadAleatorio = 111111; //Valor fijo para recibo 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjaWJvWG1sQWxnb3JpdG1vcy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcnZpY2VzL3JlY2lib1htbEFsZ29yaXRtb3Muc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDhFQUFxRDtBQUNyRCw0RUFBbUQ7QUFFbkQsTUFBTSx3QkFBd0I7SUFDNUI7O09BRUc7SUFDSSx5QkFBeUIsQ0FBQyxHQUFXLEVBQUUsVUFBa0IsRUFBRTtRQUNoRSxJQUFJLE9BQU8sR0FBRyxDQUFDLENBQUM7UUFDaEIsSUFBSSxPQUFPLEdBQUcsQ0FBQyxDQUFDO1FBQ2hCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNWLElBQUksWUFBWSxHQUFHLENBQUMsQ0FBQztRQUNyQixJQUFJLFdBQVcsR0FBRyxFQUFFLENBQUM7UUFDckIsSUFBSSxVQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ3BCLElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQztRQUVoQiwwRUFBMEU7UUFDMUUsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDbkMsVUFBVSxHQUFHLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNuRCxJQUFJLENBQUMsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFO2dCQUN2RSxXQUFXLEdBQUcsV0FBVyxHQUFHLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDdEQ7aUJBQU07Z0JBQ0wsV0FBVyxHQUFHLFdBQVcsR0FBRyxVQUFVLENBQUM7YUFDeEM7U0FDRjtRQUVELGdCQUFnQjtR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