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
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) {
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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