facturacionelectronicapy-xmlgen
Version:
API Node JS para generar el archivo XML del Documento electrónico exigido por SIFEN en base a JSON
416 lines • 37.8 kB
JavaScript
;
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) {
let moneda = data['moneda'];
if (!moneda && config.defaultValues === true) {
moneda = 'PYG';
}
let dSubExe = 0, dSubExo = 0, dSub5 = 0, dSub10 = 0, dTotOpeSinDescuento = 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 (exenta o iva parcial)
if (item['gCamIVA']['iAfecIVA'] == 3 || item['gCamIVA']['iAfecIVA'] == 4) {
//E731==3
let sumaExenta = 0;
if (item['gCamIVA']['iAfecIVA'] == 3) {
sumaExenta += item['gValorItem']['gValorRestaItem']['dTotOpeItem']; //Suma de EA008
}
if (item['gCamIVA']['iAfecIVA'] == 4) {
sumaExenta += item['gCamIVA']['dBasExe']; //Suma de E737
}
dSubExe += sumaExenta; //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)) {
if (data['tipoImpuesto'] == 1 || data['tipoImpuesto'] == 5) {
//Esta condicion se repite en linea 219
//No debe existir si D013 != 1
if (item['gCamIVA']['dTasaIVA'] == 5) {
//E734
let sumaGrav5 = 0;
if (item['gCamIVA']['iAfecIVA'] == 1) {
sumaGrav5 += item['gValorItem']['gValorRestaItem']['dTotOpeItem']; //EA008
}
if (item['gCamIVA']['iAfecIVA'] == 4) {
sumaGrav5 += item['gCamIVA']['dBasGravIVA'] + item['gCamIVA']['dLiqIVAItem']; //E735 + E736. NT 13
}
dSub5 += sumaGrav5;
}
if (item['gCamIVA']['dTasaIVA'] == 10) {
let sumaGrav10 = 0;
if (item['gCamIVA']['iAfecIVA'] == 1) {
sumaGrav10 += item['gValorItem']['gValorRestaItem']['dTotOpeItem']; //EA008
}
if (item['gCamIVA']['iAfecIVA'] == 4) {
sumaGrav10 += item['gCamIVA']['dBasGravIVA'] + item['gCamIVA']['dLiqIVAItem']; //E735 + E736. NT 13
}
dSub10 += sumaGrav10;
//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'];
}
//Ahora mismo dTotOpeSinDescuento solo es el precio por la cantidad y se usa para calcular mas adelante
//dPorcDescTotal (OJO: Si dPorcDescTotal solo debe estar relacionado al total, entonces al dPUniProSer
//hay que restarle el dDescItem antes de multiplicar por la cantidad)
dTotOpeSinDescuento += item['gValorItem']['dPUniProSer'] * item['dCantProSer'];
dTotDesc += (item['gValorItem']['gValorRestaItem']['dDescItem'] || 0) * item['dCantProSer'];
//Este calculo no sale exactamente igual por la diferencia de decimales, entonces usa directo en enviado por el usuario.
//Ya no suma el descuento global calculado
//dTotDescGlotem += (item.gValorItem?.gValorRestaItem?.dDescGloItem || 0) * item['dCantProSer'];
dTotAntItem += (item['gValorItem']['gValorRestaItem']['dAntPreUniIt'] || 0) * item['dCantProSer'];
dTotAnt += (item['gValorItem']['gValorRestaItem']['dAntGloPreUniIt'] || 0) * item['dCantProSer'];
//Ya no suma el descuento global calculado
//dDescTotal = dTotDesc + dTotDescGlotem;
dAnticipo = dTotAntItem + dTotAnt;
dTotOpeGs += item['gValorItem']['gValorRestaItem']['dTotOpeGs']; //Suma del monto total en Gs.
} //end-for
//Finalmente sobreescribe de vuelta con el que paso el usuario.
dTotDescGlotem = +data.descuentoGlobal || 0;
dDescTotal = dTotDesc + dTotDescGlotem;
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);*/
dLiqTotIVA5 = dRedon / 1.05; //Consultar
dLiqTotIVA5 = Math.round(dLiqTotIVA5);
dLiqTotIVA5 = 0;
}
if (dIVA10 > 0) {
/*dLiqTotIVA10 = dRedon / 1.1;
dLiqTotIVA10 = Math.round(dLiqTotIVA10);*/
dLiqTotIVA10 = dRedon / 1.1;
dLiqTotIVA10 = Math.round(dLiqTotIVA10);
dLiqTotIVA10 = 0;
}
}
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));
}
else {
dTotGralOpe = parseFloat(dTotGralOpe.toFixed(config.pygDecimals));
}
//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
if (data.moneda != 'PYG') {
dSubExe = parseFloat(dSubExe.toFixed(config.taxDecimals));
dSubExo = parseFloat(dSubExo.toFixed(config.taxDecimals));
}
else {
dSubExe = parseFloat(dSubExe.toFixed(config.pygTaxDecimals));
dSubExo = parseFloat(dSubExo.toFixed(config.pygTaxDecimals));
}
let jsonResult = {
dSubExe: dSubExe,
dSubExo: dSubExo,
};
if (agregarDSub) {
//if (!(data['tipoImpuesto'] != 1)) {
if (data['tipoImpuesto'] == 1 || data['tipoImpuesto'] == 5) {
//Esta condicion se repite en linea 64
//No debe existir si D013 != 1 if (dSub5 > 0) {
if (dSub5 > 0) {
jsonResult['dSub5'] = dSub5;
if (data.moneda !== 'PYG') {
jsonResult['dSub5'] = parseFloat(dSub5.toFixed(config.taxDecimals));
}
else {
jsonResult['dSub5'] = parseFloat(dSub5.toFixed(config.pygTaxDecimals));
}
}
else {
jsonResult['dSub5'] = 0;
}
if (dSub10 > 0) {
jsonResult['dSub10'] = dSub10;
if (data.moneda !== 'PYG') {
//Redondea el tax, independiente a la moneda
jsonResult['dSub10'] = parseFloat(dSub10.toFixed(config.taxDecimals));
}
else {
jsonResult['dSub10'] = parseFloat(dSub10.toFixed(config.pygTaxDecimals));
}
}
else {
jsonResult['dSub10'] = 0;
}
}
}
if (data.moneda != 'PYG') {
dTotOpe = parseFloat(dTotOpe.toFixed(config.decimals));
}
else {
dTotOpe = parseFloat(dTotOpe.toFixed(config.pygDecimals));
}
if (data.moneda != 'PYG') {
dTotDesc = parseFloat(dTotDesc.toFixed(config.decimals));
}
else {
dTotDesc = parseFloat(dTotDesc.toFixed(config.pygDecimals));
}
if (data.moneda != 'PYG') {
dTotDescGlotem = parseFloat(dTotDescGlotem.toFixed(config.decimals));
}
else {
dTotDescGlotem = parseFloat(dTotDescGlotem.toFixed(config.pygDecimals));
}
if (data.moneda != 'PYG') {
dDescTotal = parseFloat(dDescTotal.toFixed(config.decimals));
}
else {
dDescTotal = parseFloat(dDescTotal.toFixed(config.pygDecimals));
}
if (data.moneda != 'PYG') {
dTotOpe = parseFloat(dTotOpe.toFixed(config.decimals)); //Este esta repetido en la linea 218, verificar
}
else {
dTotOpe = parseFloat(dTotOpe.toFixed(config.pygDecimals));
}
//---
if (data.moneda != 'PYG') {
dTotAntItem = parseFloat(dTotAntItem.toFixed(config.decimals));
}
else {
dTotAntItem = parseFloat(dTotAntItem.toFixed(config.pygDecimals));
}
if (data.moneda != 'PYG') {
dTotAnt = parseFloat(dTotAnt.toFixed(config.decimals));
}
else {
dTotAnt = parseFloat(dTotAnt.toFixed(config.pygDecimals));
}
if (data.moneda != 'PYG') {
dAnticipo = parseFloat(dAnticipo.toFixed(config.decimals));
}
else {
dAnticipo = parseFloat(dAnticipo.toFixed(config.pygDecimals));
}
jsonResult = Object.assign(jsonResult, {
dTotOpe: dTotOpe,
dTotDesc: dTotDesc,
dTotDescGlotem: dTotDescGlotem,
dTotAntItem: dTotAntItem,
dTotAnt: dTotAnt,
dPorcDescTotal: 0,
dDescTotal: dDescTotal,
dAnticipo: dAnticipo,
dRedon: dRedon,
});
if (data['comision'] > 0) {
jsonResult['dComi'] = data['comision'];
}
jsonResult = Object.assign(jsonResult, {
dTotGralOpe: dTotGralOpe,
});
//Redondeo
//No se por que se puso este pero genera error en los redondeos al calcular, HB
//Deshabilitado 05 05 23
//Redondeo
if (data.moneda !== 'PYG') {
dIVA5 = parseFloat(dIVA5.toFixed(config.taxDecimals));
dIVA10 = parseFloat(dIVA10.toFixed(config.taxDecimals));
dLiqTotIVA5 = parseFloat(dLiqTotIVA5.toFixed(config.taxDecimals));
dLiqTotIVA10 = parseFloat(dLiqTotIVA10.toFixed(config.taxDecimals));
}
else {
//Si la moneda es PYG, no asignar decimales en los impuestos previos de iva.
dIVA5 = parseFloat(dIVA5.toFixed(config.pygTaxDecimals));
dIVA10 = parseFloat(dIVA10.toFixed(config.pygTaxDecimals));
dLiqTotIVA5 = parseFloat(dLiqTotIVA5.toFixed(config.pygTaxDecimals));
dLiqTotIVA10 = parseFloat(dLiqTotIVA10.toFixed(config.pygTaxDecimals));
}
if (agregarDSub) {
if (data.tipoImpuesto == 1 || data.tipoImpuesto == 5) {
//D013
jsonResult['dIVA5'] = dIVA5;
jsonResult['dIVA10'] = dIVA10;
jsonResult['dLiqTotIVA5'] = dLiqTotIVA5;
jsonResult['dLiqTotIVA10'] = dLiqTotIVA10;
}
}
if (comisionLiquid > 0) {
jsonResult = Object.assign(jsonResult, {
dIVAComi: comisionLiquid,
});
}
if (agregarDSub) {
if (data.tipoImpuesto == 1 || data.tipoImpuesto == 5) {
//D013
//dTotIva: No debe existir el campo si D013 ≠ 1 o D013≠5
if (dIVA5 > 0 || dIVA10 > 0 || dLiqTotIVA5 > 0 || dLiqTotIVA10 > 0 || comisionLiquid > 0) {
jsonResult['dTotIVA'] = dIVA5 + dIVA10 - dLiqTotIVA5 - dLiqTotIVA10 + comisionLiquid;
//Redondeo
if (data.moneda !== 'PYG') {
jsonResult['dTotIVA'] = parseFloat(jsonResult['dTotIVA'].toFixed(config.taxDecimals));
}
else {
jsonResult['dTotIVA'] = parseFloat(jsonResult['dTotIVA'].toFixed(config.pygTaxDecimals));
}
}
else {
jsonResult['dTotIVA'] = 0;
}
if (dBaseGrav5 > 0) {
//Redondeo
if (data.moneda !== 'PYG') {
dBaseGrav5 = parseFloat(dBaseGrav5.toFixed(config.taxDecimals));
}
else {
dBaseGrav5 = parseFloat(dBaseGrav5.toFixed(config.pygTaxDecimals));
}
jsonResult['dBaseGrav5'] = dBaseGrav5;
}
else {
jsonResult['dBaseGrav5'] = 0;
}
if (dBaseGrav10 > 0) {
//Redondeo
if (data.moneda !== 'PYG') {
dBaseGrav10 = parseFloat(dBaseGrav10.toFixed(config.taxDecimals));
}
else {
dBaseGrav10 = parseFloat(dBaseGrav10.toFixed(config.pygTaxDecimals));
}
jsonResult['dBaseGrav10'] = dBaseGrav10;
}
else {
jsonResult['dBaseGrav10'] = 0;
}
if (dBaseGrav5 > 0 || dBaseGrav10 > 0) {
let toFixed = config.taxDecimals;
if (moneda == 'PYG') {
toFixed = config.pygTaxDecimals;
}
jsonResult['dTBasGraIVA'] = parseFloat(((dBaseGrav5 > 0 ? dBaseGrav5 : 0) + (dBaseGrav10 > 0 ? dBaseGrav10 : 0)).toFixed(toFixed));
}
else {
jsonResult['dTBasGraIVA'] = 0;
}
}
}
if (moneda != 'PYG') {
//Si es en otra moneda que no sea PYG
//Utiliza el Decimales en Guaranies pygDecimals
if (data['condicionTipoCambio'] == 1) {
//Por el Global
jsonResult['dTotalGs'] = parseFloat((dTotGralOpe * data['cambio']).toFixed(config.pygDecimals));
}
else {
//TODO Este hay que ver la forma de que el totalGS sea por la multiplicacion con el cambio de cada item, al final
// o ver como seria, hacer pruebas
jsonResult['dTotalGs'] = parseFloat((dTotGralOpe * data['cambio']).toFixed(config.pygDecimals));
}
}
else {
//No informar si D015 = PYG
}
//Calculo del % de descuento Global
if (jsonResult['dTotDescGlotem'] > 0) {
jsonResult['dPorcDescTotal'] = ((dTotDescGlotem * 100) / dTotOpeSinDescuento).toFixed(8); //Maximo permitido
}
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNvbkR0ZVRvdGFsZXMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJ2aWNlcy9qc29uRHRlVG90YWxlcy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBRUEsTUFBTSxxQkFBcUI7SUFDekI7Ozs7OztPQU1HO0lBQ0ksb0JBQW9CLENBQUMsTUFBVyxFQUFFLElBQVMsRUFBRSxLQUFZLEVBQUUsTUFBb0I7UUFDcEYsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzVCLElBQUksQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDLGFBQWEsS0FBSyxJQUFJLEVBQUU7WUFDNUMsTUFBTSxHQUFHLEtBQUssQ0FBQztTQUNoQjtRQUVELElBQUksT0FBTyxHQUFHLENBQUMsRUFDYixPQUFPLEdBQUcsQ0FBQyxFQUNYLEtBQUssR0FBRyxDQUFDLEVBQ1QsTUFBTSxHQUFHLENBQUMsRUFDVixtQkFBbUIsR0FBRyxDQUFDLEVBQ3ZCLE9BQU8sR0FBRyxDQUFDLEVBQ1gsUUFBUSxHQUFHLENBQUMsRUFDWixjQUFjLEdBQUcsQ0FBQyxFQUNsQixXQUFXLEdBQUcsQ0FBQyxFQUNmLE9BQU8sR0FBRyxDQUFDLEVBQ1gsVUFBVSxHQUFHLENBQUMsRUFDZCxTQUFTLEdBQUcsQ0FBQyxFQUNiLFNBQVMsR0FBRyxDQUFDLEVBQ2IsS0FBSyxHQUFHLENBQUMsRUFDVCxNQUFNLEdBQUcsQ0FBQyxFQUNWLFdBQVcsR0FBRyxDQUFDLEVBQ2YsWUFBWSxHQUFHLENBQUMsRUFDaEIsVUFBVSxHQUFHLENBQUMsRUFDZCxXQUFXLEdBQUcsQ0FBQyxDQUFDO1FBRWxCLElBQUksV0FBVyxHQUFHLEtBQUssQ0FBQztRQUN4QixxQkFBcUI7UUFDckIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDckMsTUFBTSxJ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