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

290 lines 26.4 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); class JSonDteTotalesService { /** * F. Campos que describen los subtotales y totales de la transacción documentada (F001-F099) * * @param params * @param data * @param options */ generateDatosTotales(params, data, items, config) { var _a, _b; let moneda = data['moneda']; if (!moneda && config.defaultValues === true) { moneda = 'PYG'; } let dSubExe = 0, dSubExo = 0, dSub5 = 0, dSub10 = 0, dTotOpe = 0, dTotDesc = 0, dTotDescGlotem = 0, dTotAntItem = 0, dTotAnt = 0, dDescTotal = 0, dAnticipo = 0, dTotOpeGs = 0, dIVA5 = 0, dIVA10 = 0, dLiqTotIVA5 = 0, dLiqTotIVA10 = 0, dBaseGrav5 = 0, dBaseGrav10 = 0; let agregarDSub = false; //Crear las variables for (let i = 0; i < items.length; i++) { const item = items[i]; if (item['gCamIVA']) { //gCamIVA puede ser null (MT150=No informar si D013=2 y C002= 4 o 7) //Subtotal if (item['gCamIVA']['iAfecIVA'] == 3) { //E731==3 dSubExe += item['gValorItem']['gValorRestaItem']['dTotOpeItem']; //Suma de EA008 } //Exenta if (item['gCamIVA']['iAfecIVA'] == 2) { //E731==2 dSubExo += item['gValorItem']['gValorRestaItem']['dTotOpeItem']; //Suma de EA008 } //Gravadas 5 o 10 if (item['gCamIVA']['iAfecIVA'] == 1 || item['gCamIVA']['iAfecIVA'] == 4) { if (!(data['tipoImpuesto'] != 1)) { //No debe existir si D013 != 1 if (item['gCamIVA']['dTasaIVA'] == 5) { //E734 dSub5 += item['gValorItem']['gValorRestaItem']['dTotOpeItem']; } if (item['gCamIVA']['dTasaIVA'] == 10) { dSub10 += item['gValorItem']['gValorRestaItem']['dTotOpeItem']; } agregarDSub = true; } } //--- if (!(data['tipoImpuesto'] != 1 && data['tipoImpuesto'] != 5)) { //No debe existir si D013 != 1 o D013 != 5 if (item['gCamIVA']['dTasaIVA'] == 5) { //E734 dIVA5 += item['gCamIVA']['dLiqIVAItem']; //dLiqTotIVA5 = 0; //se hace mas adelante, despues de obtener el redondeo dBaseGrav5 += item['gCamIVA']['dBasGravIVA']; } if (item['gCamIVA']['dTasaIVA'] == 10) { dIVA10 += item['gCamIVA']['dLiqIVAItem']; //dLiqTotIVA10 = 0; //se hace mas adelante, despues de obtener el redondeo dBaseGrav10 += item['gCamIVA']['dBasGravIVA']; } } } //--- if (data['tipoDocumento'] == 4) { dTotOpe += item['gValorItem']['gValorRestaItem']['dTotOpeItem']; } dTotDesc += (item['gValorItem']['gValorRestaItem']['dDescItem'] || 0) * item['dCantProSer']; dTotDescGlotem += (((_b = (_a = item.gValorItem) === null || _a === void 0 ? void 0 : _a.gValorRestaItem) === null || _b === void 0 ? void 0 : _b.dDescGloItem) || 0) * item['dCantProSer']; dTotAntItem += (item['gValorItem']['gValorRestaItem']['dAntPreUniIt'] || 0) * item['dCantProSer']; dTotAnt += (item['gValorItem']['gValorRestaItem']['dAntGloPreUniIt'] || 0) * item['dCantProSer']; console.log('dTotDesc', dTotDesc, ', dTotDescGlotem', dTotDescGlotem); dDescTotal = dTotDesc + dTotDescGlotem; dAnticipo += dTotAntItem + dTotAnt; dTotOpeGs += item['gValorItem']['gValorRestaItem']['dTotOpeGs']; //Suma del monto total en Gs. } //end-for if (data['tipoImpuesto'] == 1 || data['tipoImpuesto'] == 3 || data['tipoImpuesto'] == 4 || data['tipoImpuesto'] == 5) { if (data['tipoDocumento'] != 4) { dTotOpe = dSubExe + dSubExo + dSub5 + dSub10; // Suma (F002, F003, F004 y F005) } } 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); } } } if (!(data['tipoImpuesto'] != 1 && data['tipoImpuesto'] != 5)) { //No debe existir si D013 != 1 o D013 != 5 if (dIVA5 > 0) { dLiqTotIVA5 = dRedon / 1.05; //Consultar dLiqTotIVA5 = Math.round(dLiqTotIVA5); } if (dIVA10 > 0) { dLiqTotIVA10 = dRedon / 1.1; dLiqTotIVA10 = Math.round(dLiqTotIVA10); } } let comisionLiquid = ((data['comision'] || 0) * 10) / 100; //--- //Corresponde al cálculo aritmético F008 - F013 + F025 let dTotGralOpe = dTotOpe - dRedon + (data['comision'] || 0); if (data.moneda != 'PYG') { dTotGralOpe = parseFloat(dTotGralOpe.toFixed(config.decimals)); } //dTotOpe + dRedon + dComi; //Si C002 = 1, 5 o 6, entonces dTotGralOpe(F014) = F008 - F011 - F012 - F013 /*if (data['tipoDocumento'] == 1 || data['tipoDocumento'] == 5 || data['tipoDocumento'] == 6) { dTotGralOpe = dTotOpe - dDescTotal - dAnticipo - dRedon; }*/ //--- //Asignar al JSON DATA let jsonResult = { dSubExe: dSubExe, dSubExo: dSubExo, }; if (agregarDSub) { if (!(data['tipoImpuesto'] != 1)) { //No debe existir si D013 != 1 if (dSub5 > 0) { jsonResult['dSub5'] = dSub5; if (data.moneda != 'PYG') { jsonResult['dSub5'] = parseFloat(dSub5.toFixed(config.decimals)); } } if (dSub10 > 0) { jsonResult['dSub10'] = dSub10; if (data.moneda != 'PYG') { jsonResult['dSub10'] = parseFloat(dSub10.toFixed(config.decimals)); } } } if (data.moneda != 'PYG') { dTotOpe = parseFloat(dTotOpe.toFixed(config.decimals)); } else { dTotOpe = parseFloat(dTotOpe.toFixed(0)); } if (data.moneda != 'PYG') { dTotDesc = parseFloat(dTotDesc.toFixed(config.decimals)); } else { dTotDesc = parseFloat(dTotDesc.toFixed(0)); } if (data.moneda != 'PYG') { dTotDescGlotem = parseFloat(dTotDescGlotem.toFixed(config.decimals)); } else { dTotDescGlotem = parseFloat(dTotDescGlotem.toFixed(0)); } if (data.moneda != 'PYG') { dDescTotal = parseFloat(dDescTotal.toFixed(config.decimals)); } else { dDescTotal = parseFloat(dDescTotal.toFixed(0)); } jsonResult = Object.assign(jsonResult, { dTotOpe: dTotOpe, dTotDesc: dTotDesc, dTotDescGlotem: dTotDescGlotem, dTotAntItem: dTotAntItem, dTotAnt: dTotAnt, dPorcDescTotal: data['porcentajeDescuento'] || 0, dDescTotal: dDescTotal, dAnticipo: dAnticipo, dRedon: dRedon, }); if (data['comision'] > 0) { jsonResult['dComi'] = data['comision']; } jsonResult = Object.assign(jsonResult, { dTotGralOpe: dTotGralOpe, }); //Redondeo dIVA5 = parseFloat(dIVA5.toFixed(config.decimals)); dIVA10 = parseFloat(dIVA10.toFixed(config.decimals)); dLiqTotIVA5 = parseFloat(dLiqTotIVA5.toFixed(config.decimals)); dLiqTotIVA10 = parseFloat(dLiqTotIVA10.toFixed(config.decimals)); if (data.moneda === 'PYG') { dIVA5 = parseFloat(dIVA5.toFixed(0)); dIVA10 = parseFloat(dIVA10.toFixed(0)); dLiqTotIVA5 = parseFloat(dLiqTotIVA5.toFixed(0)); dLiqTotIVA10 = parseFloat(dLiqTotIVA10.toFixed(0)); } if (agregarDSub) { jsonResult['dIVA5'] = dIVA5; jsonResult['dIVA10'] = dIVA10; jsonResult['dLiqTotIVA5'] = dLiqTotIVA5; jsonResult['dLiqTotIVA10'] = dLiqTotIVA10; } if (comisionLiquid > 0) { jsonResult = Object.assign(jsonResult, { dIVAComi: comisionLiquid, }); } if (agregarDSub) { if (dIVA5 > 0 || dIVA10 > 0 || dLiqTotIVA5 > 0 || dLiqTotIVA10 > 0 || comisionLiquid > 0) { jsonResult['dTotIVA'] = dIVA5 + dIVA10 - dLiqTotIVA5 - dLiqTotIVA10 + comisionLiquid; //Redondeo jsonResult['dTotIVA'] = parseFloat(jsonResult['dTotIVA'].toFixed(config.decimals)); if (data.moneda === 'PYG') { jsonResult['dTotIVA'] = parseFloat(jsonResult['dTotIVA'].toFixed(0)); } } if (dBaseGrav5 > 0) { dBaseGrav5 = parseFloat(dBaseGrav5.toFixed(config.decimals)); if (data.moneda === 'PYG') { dBaseGrav5 = parseFloat(dBaseGrav5.toFixed(0)); } jsonResult['dBaseGrav5'] = dBaseGrav5; } if (dBaseGrav10 > 0) { dBaseGrav10 = parseFloat(dBaseGrav10.toFixed(config.decimals)); if (data.moneda === 'PYG') { dBaseGrav10 = parseFloat(dBaseGrav10.toFixed(0)); } jsonResult['dBaseGrav10'] = dBaseGrav10; } if (dBaseGrav5 > 0 || dBaseGrav10 > 0) { let toFixed = config.decimals; if (moneda == 'PYG') { toFixed = 0; } jsonResult['dTBasGraIVA'] = parseFloat(((dBaseGrav5 > 0 ? dBaseGrav5 : 0) + (dBaseGrav10 > 0 ? dBaseGrav10 : 0)).toFixed(toFixed)); } } if (moneda != 'PYG' && data['condicionTipoCambio'] == 1) { if (!data['cambio']) { /*throw new Error( 'Debe especificar el valor del Cambio en data.cambio cuando moneda != PYG y la Cotización es Global', );*/ } //Por el Global jsonResult['dTotalGs'] = parseFloat((dTotGralOpe * data['cambio']).toFixed(0)); } 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 JSonDteTotalesService(); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNvbkR0ZVRvdGFsZXMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJ2aWNlcy9qc29uRHRlVG90YWxlcy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBRUEsTUFBTSxxQkFBcUI7SUFDekI7Ozs7OztPQU1HO0lBQ0ksb0JBQW9CLENBQUMsTUFBVyxFQUFFLElBQVMsRUFBRSxLQUFZLEVBQUUsTUFBb0I7O1FBQ3BGLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM1QixJQUFJLENBQUMsTUFBTSxJQUFJLE1BQU0sQ0FBQyxhQUFhLEtBQUssSUFBSSxFQUFFO1lBQzVDLE1BQU0sR0FBRyxLQUFLLENBQUM7U0FDaEI7UUFFRCxJQUFJLE9BQU8sR0FBRyxDQUFDLEVBQ2IsT0FBTyxHQUFHLENBQUMsRUFDWCxLQUFLLEdBQUcsQ0FBQyxFQUNULE1BQU0sR0FBRyxDQUFDLEVBQ1YsT0FBTyxHQUFHLENBQUMsRUFDWCxRQUFRLEdBQUcsQ0FBQyxFQUNaLGNBQWMsR0FBRyxDQUFDLEVBQ2xCLFdBQVcsR0FBRyxDQUFDLEVBQ2YsT0FBTyxHQUFHLENBQUMsRUFDWCxVQUFVLEdBQUcsQ0FBQyxFQUNkLFNBQVMsR0FBRyxDQUFDLEVBQ2IsU0FBUyxHQUFHLENBQUMsRUFDYixLQUFLLEdBQUcsQ0FBQyxFQUNULE1BQU0sR0FBRyxDQUFDLEVBQ1YsV0FBVyxHQUFHLENBQUMsRUFDZixZQUFZLEdBQUcsQ0FBQyxFQUNoQixVQUFVLEdBQUcsQ0FBQyxFQUNkLFdBQVcsR0FBRyxDQUFDLENBQUM7UUFFbEIsSUFBSSxXQUFXLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLHFCQUFxQjtRQUNyQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNyQyxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsQ0FB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