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
JavaScript
;
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjaWJvWG1sVG90YWxlcy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcnZpY2VzL3JlY2lib1htbFRvdGFsZXMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUVBLE1BQU0sdUJBQXVCO0lBQzNCOzs7Ozs7T0FNRztJQUNJLDBCQUEwQixDQUFDLE1BQVcsRUFBRSxJQUFTLEVBQUUsTUFBb0I7UUFDNUUsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzVCLElBQUksQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDLGFBQWEsS0FBSyxJQUFJLEVBQUU7WUFDNUMsTUFBTSxHQUFHLEtBQUssQ0FBQztTQUNoQjtRQUVELElBQUksVUFBVSxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUM3QixJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtZQUMxQixVQUFVLEdBQUcsQ0FBQyxDQUFDO1lBQ2YsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFO2dCQUN6QyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtvQkFDdEQsSUFBSSxhQUFhLEdBQUcsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7b0JBQ3hELFVBQVUsSUFBSSxVQUFVLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztpQkFDbEU7YUFDRjtpQkFBTTtnQkFDTCxJQUFJLGFBQWEsR0FBRyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDckQsVUFBVSxJQUFJLFVBQVUsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFD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