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

116 lines 8.81 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); class ReciboXmlTotalesService { /** * F. Campos que describen los subtotales y totales de la transacción documentada (F001-F099) * * @param params * @param data * @param options */ generateDatosTotalesRecibo(params, data, config) { let moneda = data['moneda']; if (!moneda && config.defaultValues === true) { moneda = 'PYG'; } let sumaMontos = +data.total; if (data.documentoAsociado) { sumaMontos = 0; if (Array.isArray(data.documentoAsociado)) { for (let i = 0; i < data.documentoAsociado.length; i++) { let montoNumerico = +data.documentoAsociado[i]['monto']; sumaMontos += parseFloat(montoNumerico.toFixed(config.decimals)); } } else { let montoNumerico = +data.documentoAsociado['monto']; sumaMontos += parseFloat(montoNumerico.toFixed(config.decimals)); } } let dTotOpe = sumaMontos, dTotOpeGs = 0; console.log('dTotOpe', dTotOpe); if (data.moneda != 'PYG') { dTotOpe = parseFloat(dTotOpe.toFixed(config.decimals)); } let dRedon = 0; if (config.redondeoSedeco) { if (data.moneda === 'PYG') { dRedon = this.redondeoSedeco(dTotOpe); } else { //Observación: Para monedas extranjeras o cualquier otro cálculo que contenga decimales, las reglas de validación //aceptarán redondeos de 50 céntimos (por encima o por debajo) if (dTotOpe % 1 != 0) { //Es moneda extranjera, en decimal console.log('Moneda extranjera decimal ' + dTotOpe); } } } //--- //Corresponde al cálculo aritmético F008 - F013 + F025 let dTotGralOpe = dTotOpe - dRedon; if (data.moneda != 'PYG') { dTotGralOpe = parseFloat(dTotGralOpe.toFixed(config.decimals)); } //--- //Asignar al JSON DATA let jsonResult = {}; if (data.moneda != 'PYG') { dTotOpe = parseFloat(dTotOpe.toFixed(config.decimals)); } else { dTotOpe = parseFloat(dTotOpe.toFixed(config.pygDecimals)); } jsonResult = Object.assign(jsonResult, { dTotOpe: dTotOpe, dRedon: dRedon, }); jsonResult = Object.assign(jsonResult, { dTotGralOpe: dTotGralOpe, }); if (moneda != 'PYG' && data['condicionTipoCambio'] == 1) { //Por el Global jsonResult['dTotalGs'] = parseFloat((dTotGralOpe * data['cambio']).toFixed(config.pygDecimals)); } if (moneda != 'PYG' && data['condicionTipoCambio'] == 2) { //Por item jsonResult['dTotalGs'] = dTotOpeGs; } if (moneda != 'PYG') { if (data['tipoDocumento'] == 4) { jsonResult['dTotalGs'] = dTotGralOpe; } } return jsonResult; } /** * En consideración a la Resolución 347 del 2014 (Secretaría de Defensa del Consumidor- * SEDECO). Las reglas de redondeo aplican a múltiplos de 50 guaraníes * * Obtiene solo la parte del valor de redondeo, para obtener el monto del reondeo hay * que restar el valor de éste calculo * * @param numero * @returns */ redondeoSedeco(numero) { let parteDecimal = parseFloat((numero / 100).toFixed(2)); let parteEntera = (numero / 100.0) | 0; let resta = parseFloat((parteDecimal - parteEntera).toFixed(2)); let aComparar = parseFloat((resta * 100).toFixed(2)); if (aComparar == 50) { return 0; } else if (aComparar > 50) { var diferencia = aComparar - 50; return diferencia; } else { //Redondear a 000 var diferencia = 50 - (50 - aComparar); return diferencia; } } } exports.default = new ReciboXmlTotalesService(); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjaWJvWG1sVG90YWxlcy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcnZpY2VzL3JlY2lib1htbFRvdGFsZXMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUVBLE1BQU0sdUJBQXVCO0lBQzNCOzs7Ozs7T0FNRztJQUNJLDBCQUEwQixDQUFDLE1BQVcsRUFBRSxJQUFTLEVBQUUsTUFBb0I7UUFDNUUsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzVCLElBQUksQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDLGFBQWEsS0FBSyxJQUFJLEVBQUU7WUFDNUMsTUFBTSxHQUFHLEtBQUssQ0FBQztTQUNoQjtRQUVELElBQUksVUFBVSxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUM3QixJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtZQUMxQixVQUFVLEdBQUcsQ0FBQyxDQUFDO1lBQ2YsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFO2dCQUN6QyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtvQkFDdEQsSUFBSSxhQUFhLEdBQUcsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7b0JBQ3hELFVBQVUsSUFBSSxVQUFVLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztpQkFDbEU7YUFDRjtpQkFBTTtnQkFDTCxJQUFJLGFBQWEsR0FBRyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDckQsVUFBVSxJQUFJLFVBQVUsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO2FBQ2xFO1NBQ0Y7UUFFRCxJQUFJLE9BQU8sR0FBRyxVQUFVLEVBQ3RCLFNBQVMsR0FBRyxDQUFDLENBQUM7UUFFaEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDaEMsSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLEtBQUssRUFBRTtZQUN4QixPQUFPLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7U0FDeEQ7UUFFRCxJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDZixJQUFJLE1BQU0sQ0FBQyxjQUFjLEVBQUU7WUFDekIsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLEtBQUssRUFBRTtnQkFDekIsTUFBTSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7YUFDdkM7aUJBQU07Z0JBQ0wsaUhBQWlIO2dCQUNqSCw4REFBOEQ7Z0JBQzlELElBQUksT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7b0JBQ3BCLGtDQUFrQztvQkFDbEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyw0QkFBNEIsR0FBRyxPQUFPLENBQUMsQ0FBQztpQkFDckQ7YUFDRjtTQUNGO1FBRUQsS0FBSztRQUNMLHNEQUFzRDtRQUN0RCxJQUFJLFdBQVcsR0FBRyxPQUFPLEdBQUcsTUFBTSxDQUFDO1FBQ25DLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxLQUFLLEVBQUU7WUFDeEIsV0FBVyxHQUFHLFVBQVUsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1NBQ2hFO1FBRUQsS0FBSztRQUVMLHNCQUFzQjtRQUN0QixJQUFJLFVBQVUsR0FBUSxFQUFFLENBQUM7UUFFekIsSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLEtBQUssRUFBRTtZQUN4QixPQUFPLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7U0FDeEQ7YUFBTTtZQUNMLE9BQU8sR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztTQUMzRDtRQUVELFVBQVUsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRTtZQUNyQyxPQUFPLEVBQUUsT0FBTztZQUNoQixNQUFNLEVBQUUsTUFBTTtTQUNmLENBQUMsQ0FBQztRQUVILFVBQVUsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRTtZQUNyQyxXQUFXLEVBQUUsV0FBVztTQUN6QixDQUFDLENBQUM7UUFFSCxJQUFJLE1BQU0sSUFBSSxLQUFLLElBQUksSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3ZELGVBQWU7WUFDZixVQUFVLENBQUMsVUFBVSxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztTQUNqRztRQUNELElBQUksTUFBTSxJQUFJLEtBQUssSUFBSSxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDdkQsVUFBVTtZQUNWLFVBQVUsQ0FBQyxVQUFVLENBQUMsR0FBRyxTQUFTLENBQUM7U0FDcEM7UUFDRCxJQUFJLE1BQU0sSUFBSSxLQUFLLEVBQUU7WUFDbkIsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUM5QixVQUFVLENBQUMsVUFBVSxDQUFDLEdBQUcsV0FBVyxDQUFDO2FBQ3RDO1NBQ0Y7UUFDRCxPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDO0lBRUQ7Ozs7Ozs7OztPQVNHO0lBQ0ksY0FBYyxDQUFDLE1BQVc7UUFDL0IsSUFBSSxZQUFZLEdBQVcsVUFBVSxDQUFDLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pFLElBQUksV0FBVyxHQUFXLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMvQyxJQUFJLEtBQUssR0FBUSxVQUFVLENBQUMsQ0FBQyxZQUFZLEdBQUcsV0FBVyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFckUsSUFBSSxTQUFTLEdBQVEsVUFBVSxDQUFDLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRTFELElBQUksU0FBUyxJQUFJLEVBQUUsRUFBRTtZQUNuQixPQUFPLENBQUMsQ0FBQztTQUNWO2FBQU0sSUFBSSxTQUFTLEdBQUcsRUFBRSxFQUFFO1lBQ3pCLElBQUksVUFBVSxHQUFHLFNBQVMsR0FBRyxFQUFFLENBQUM7WUFFaEMsT0FBTyxVQUFVLENBQUM7U0FDbkI7YUFBTTtZQUNMLGlCQUFpQjtZQUNqQixJQUFJLFVBQVUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsU0FBUyxDQUFDLENBQUM7WUFFdkMsT0FBTyxVQUFVLENBQUM7U0FDbkI7SUFDSCxDQUFDO0NBQ0Y7QUFFRCxrQkFBZSxJQUFJLHVCQUF1QixFQUFFLENBQUMifQ==