bdpformulas 1.0.48 → 1.0.50
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/context.js +1 -0
- package/build/index.d.ts +2 -0
- package/build/index.js +3 -1
- package/build/models/eeff/admFinanciera/index.d.ts +144 -0
- package/build/models/eeff/admFinanciera/index.js +26 -0
- package/build/strategies/agriculture/balanceAgr.strategy.js +1 -0
- package/build/strategies/agriculture/costos.detail/costosCalc.js +1 -1
- package/build/strategies/agriculture/flujoProyAgr.strategy.js +3 -2
- package/build/strategies/agriculture/ventas.detail/ventas.calc.js +2 -1
- package/build/strategies/analisisFinancieros.strategy.js +20 -22
- package/build/strategies/balance.strategy.js +14 -2
- package/build/strategies/common/analisisFinCalculos/analisisGrafico.calc.js +47 -45
- package/build/strategies/common/analisisFinCalculos/ratios.calc.js +158 -157
- package/build/strategies/common/balance.calc.js +3 -1
- package/build/strategies/common/balanceCalculos/balanceAux.calc.js +11 -1
- package/build/strategies/common/balanceCalculos/flujoAux.calc.js +2 -11
- package/build/strategies/common/flujoCalculos/flujoConstructor.js +313 -308
- package/build/strategies/eeff/admFinanciera/amortizaciones.d.ts +8 -0
- package/build/strategies/eeff/admFinanciera/amortizaciones.js +31 -0
- package/build/strategies/eeff/admFinanciera/aplicacionesHandler.d.ts +16 -0
- package/build/strategies/eeff/admFinanciera/aplicacionesHandler.js +175 -0
- package/build/strategies/eeff/admFinanciera/lineasMixtasHandler.d.ts +7 -0
- package/build/strategies/eeff/admFinanciera/lineasMixtasHandler.js +40 -0
- package/build/strategies/eeff/admFinanciera/prestamoBajoLineaHandler.d.ts +13 -0
- package/build/strategies/eeff/admFinanciera/prestamoBajoLineaHandler.js +75 -0
- package/build/strategies/eeff/admFinanciera/prestamoDirectoHandler.d.ts +26 -0
- package/build/strategies/eeff/admFinanciera/prestamoDirectoHandler.js +267 -0
- package/build/strategies/eeff/admFinanciera/prestamoLeasingHandler.d.ts +20 -0
- package/build/strategies/eeff/admFinanciera/prestamoLeasingHandler.js +162 -0
- package/build/strategies/eeff/admFinanciera/proyeccionPrestamosDirectosHandler.d.ts +27 -0
- package/build/strategies/eeff/admFinanciera/proyeccionPrestamosDirectosHandler.js +219 -0
- package/build/strategies/eeff/admFinanciera/utils.d.ts +96 -0
- package/build/strategies/eeff/admFinanciera/utils.js +209 -0
- package/build/strategies/eeff/admFinanciera.strategy.d.ts +14 -0
- package/build/strategies/eeff/admFinanciera.strategy.js +139 -0
- package/build/strategies/eeff/balanceEEFF.strategy.js +3 -2
- package/build/strategies/eeff/flujoProyEEFF.strategy.js +3 -2
- package/build/strategies/general/balanceGeneral.strategy.js +2 -1
- package/build/strategies/general/flujoProyGeneral.strategy.js +2 -1
- package/build/strategies/pecuary/balancePec.strategy.js +7 -6
- package/build/strategies/pecuary/desarrollo.detail/desarrolloCalc.js +11 -3
- package/build/strategies/pecuary/desarrollo.strategy.js +2 -2
- package/build/strategies/pecuary/flujoProyPec.strategy.js +7 -6
- package/build/strategies/pecuary/ventas.detail/estacionalidadCalc.js +7 -1
- package/build/strategies/pecuary/ventas.detail/ventasIngresosCalc.js +7 -1
- package/build/strategies/production/balancePrd.strategy.js +7 -6
- package/build/strategies/production/costos.detail/costosCalc.js +1 -1
- package/build/strategies/production/flujoProyPrd.strategy.js +7 -6
- package/package.json +26 -21
- package/tsconfig.json +1 -1
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.calcularPagoInteresEntre = exports.calcularPagoPrincipalEntre = exports.generatePlazos = exports.sumCorrelativeKeys = exports.getColumnSum = exports.calcularTasaInteres = exports.ourParseFloat = exports.calcularPorcionCorrientePagada = exports.simuladorCuotas = exports.frecuenciaMeses = void 0;
|
|
4
|
+
const luxon_1 = require("luxon");
|
|
5
|
+
exports.frecuenciaMeses = {
|
|
6
|
+
MENSUAL: 1,
|
|
7
|
+
BIMENSUAL: 2,
|
|
8
|
+
TRIMESTRAL: 3,
|
|
9
|
+
CUATRIMESTRAL: 4,
|
|
10
|
+
SEMESTRAL: 6,
|
|
11
|
+
ANUAL: 12,
|
|
12
|
+
};
|
|
13
|
+
function simuladorCuotas({ monto, plazo, frecuencia, tipoCuota, periodoGracia = 0, tasaInteres = 0, polizaSD = 0, plazoMeses = false }) {
|
|
14
|
+
const mesesPorFrecuencia = exports.frecuenciaMeses[frecuencia];
|
|
15
|
+
const plazoEnMeses = !plazoMeses ? plazo * 12 : plazo;
|
|
16
|
+
const cuotasTotales = Math.ceil(plazoEnMeses / mesesPorFrecuencia);
|
|
17
|
+
const tasaPorPeriodo = tasaInteres / (12 / mesesPorFrecuencia) / 100;
|
|
18
|
+
let saldoCapital = monto;
|
|
19
|
+
const cuotas = [];
|
|
20
|
+
const pagosAnuales = [];
|
|
21
|
+
let capitalAnual = 0;
|
|
22
|
+
let interesAnual = 0;
|
|
23
|
+
let cuotaAnual = 0;
|
|
24
|
+
let anioActual = 1;
|
|
25
|
+
// Calcular cuota fija si aplica
|
|
26
|
+
const cuotaFija = tipoCuota === "FIJA"
|
|
27
|
+
? (monto * tasaPorPeriodo) / (1 - Math.pow(1 + tasaPorPeriodo, -cuotasTotales))
|
|
28
|
+
: 0;
|
|
29
|
+
for (let i = 1; i <= cuotasTotales; i++) {
|
|
30
|
+
let amortizacion = 0;
|
|
31
|
+
let interes = 0;
|
|
32
|
+
let cuotaCredito = 0;
|
|
33
|
+
let tiempoDias = mesesPorFrecuencia * 30; // Aproximado.
|
|
34
|
+
if (i > Math.ceil(periodoGracia / mesesPorFrecuencia)) {
|
|
35
|
+
interes = saldoCapital * tasaPorPeriodo;
|
|
36
|
+
if (tipoCuota === "FIJA") {
|
|
37
|
+
cuotaCredito = cuotaFija;
|
|
38
|
+
amortizacion = cuotaCredito - interes;
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
amortizacion = monto / (cuotasTotales - Math.ceil(periodoGracia / mesesPorFrecuencia));
|
|
42
|
+
cuotaCredito = amortizacion + interes;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
const cuotaTotal = cuotaCredito + polizaSD;
|
|
46
|
+
cuotas.push({
|
|
47
|
+
nroCuota: i,
|
|
48
|
+
amortizacion,
|
|
49
|
+
interes,
|
|
50
|
+
cuotaCredito,
|
|
51
|
+
poliza: polizaSD,
|
|
52
|
+
cuotaTotal,
|
|
53
|
+
saldoCapital,
|
|
54
|
+
tiempoDias,
|
|
55
|
+
});
|
|
56
|
+
saldoCapital -= amortizacion;
|
|
57
|
+
// Acumular valores anuales
|
|
58
|
+
capitalAnual += amortizacion;
|
|
59
|
+
interesAnual += interes;
|
|
60
|
+
cuotaAnual += cuotaTotal;
|
|
61
|
+
const mesActual = i * mesesPorFrecuencia;
|
|
62
|
+
if (mesActual % 12 === 0 || i === cuotasTotales) {
|
|
63
|
+
pagosAnuales.push({
|
|
64
|
+
anio: anioActual,
|
|
65
|
+
capitalAnual,
|
|
66
|
+
interesAnual,
|
|
67
|
+
cuotaAnual,
|
|
68
|
+
});
|
|
69
|
+
anioActual++;
|
|
70
|
+
capitalAnual = 0;
|
|
71
|
+
interesAnual = 0;
|
|
72
|
+
cuotaAnual = 0;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return { simulador: cuotas, pagosAnuales };
|
|
76
|
+
}
|
|
77
|
+
exports.simuladorCuotas = simuladorCuotas;
|
|
78
|
+
function calcularPorcionCorrientePagada({ fechaDesembolso, fechaInicial, frecuencia, simulador }) {
|
|
79
|
+
const inicial = luxon_1.DateTime.fromISO(fechaInicial);
|
|
80
|
+
const desembolso = luxon_1.DateTime.fromISO(fechaDesembolso);
|
|
81
|
+
const mesesPorFrecuencia = exports.frecuenciaMeses[frecuencia];
|
|
82
|
+
const mesesTranscurridos = inicial.diff(desembolso, 'months').months;
|
|
83
|
+
const cuotasPagadas = Math.floor(mesesTranscurridos / mesesPorFrecuencia);
|
|
84
|
+
const cuotasPagadasArray = simulador.filter((cuota) => cuota.nroCuota <= cuotasPagadas);
|
|
85
|
+
const porcionCorrientePagada = cuotasPagadasArray.reduce((acumulado, cuota) => acumulado + cuota.amortizacion, 0);
|
|
86
|
+
return {
|
|
87
|
+
cuotasPagadas: cuotasPagadasArray.length,
|
|
88
|
+
porcionCorrientePagada,
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
exports.calcularPorcionCorrientePagada = calcularPorcionCorrientePagada;
|
|
92
|
+
function ourParseFloat(num, round = true) {
|
|
93
|
+
let parsed = parseFloat(num);
|
|
94
|
+
if (isNaN(parsed))
|
|
95
|
+
parsed = 0;
|
|
96
|
+
if (round)
|
|
97
|
+
parsed = parseFloat(parsed.toFixed(2));
|
|
98
|
+
return parsed;
|
|
99
|
+
}
|
|
100
|
+
exports.ourParseFloat = ourParseFloat;
|
|
101
|
+
/**
|
|
102
|
+
* Calcula la tasa de interés periódica (similar a la función TASA de Excel).
|
|
103
|
+
*
|
|
104
|
+
* @param params - Objeto con los parámetros necesarios.
|
|
105
|
+
* @param params.meses - Número de períodos (meses).
|
|
106
|
+
* @param params.montoCuota - Monto de la cuota por período (negativo, por ser un flujo de salida).
|
|
107
|
+
* @param params.montoOriginal - Monto original del préstamo.
|
|
108
|
+
* @param params.guess - Estimación inicial de la tasa de interés (por defecto: 0.1 o 10%).
|
|
109
|
+
* @param params.maxIteraciones - Número máximo de iteraciones para el cálculo (por defecto: 100).
|
|
110
|
+
* @param params.tolerancia - Precisión deseada para el resultado (por defecto: 1e-6).
|
|
111
|
+
* @returns La tasa de interés periódica como decimal o undefined si no converge.
|
|
112
|
+
*/
|
|
113
|
+
function calcularTasaInteres({ meses, montoCuota, montoOriginal, guess = 0.1, maxIteraciones = 100, tolerancia = 1e-10, }) {
|
|
114
|
+
let tasa = guess;
|
|
115
|
+
for (let i = 0; i < maxIteraciones; i++) {
|
|
116
|
+
let f = 0; // Función objetivo f(x)
|
|
117
|
+
let fDerivada = 0; // Derivada f'(x)
|
|
118
|
+
for (let j = 1; j <= meses; j++) {
|
|
119
|
+
const factor = Math.pow(1 + tasa, -j);
|
|
120
|
+
f += montoCuota * factor;
|
|
121
|
+
fDerivada += -j * montoCuota * factor / (1 + tasa);
|
|
122
|
+
}
|
|
123
|
+
// Sumar flujo inicial (monto original)
|
|
124
|
+
f += montoOriginal;
|
|
125
|
+
// Calcular nueva tasa usando Newton-Raphson
|
|
126
|
+
const nuevoTasa = tasa - f / fDerivada;
|
|
127
|
+
if (Math.abs(nuevoTasa - tasa) < tolerancia) {
|
|
128
|
+
return nuevoTasa;
|
|
129
|
+
}
|
|
130
|
+
tasa = nuevoTasa;
|
|
131
|
+
}
|
|
132
|
+
// Si no converge después de todas las iteraciones
|
|
133
|
+
return undefined;
|
|
134
|
+
}
|
|
135
|
+
exports.calcularTasaInteres = calcularTasaInteres;
|
|
136
|
+
function getColumnSum(data, column) {
|
|
137
|
+
return data.reduce((sum, item) => sum + ourParseFloat(item[column]), 0);
|
|
138
|
+
}
|
|
139
|
+
exports.getColumnSum = getColumnSum;
|
|
140
|
+
function sumCorrelativeKeys(params) {
|
|
141
|
+
const { baseKey, endIndex, startIndex = 1, data } = params;
|
|
142
|
+
if (endIndex < startIndex) {
|
|
143
|
+
throw new Error("El índice final no puede ser menor que el índice inicial.");
|
|
144
|
+
}
|
|
145
|
+
let sum = 0;
|
|
146
|
+
for (let i = startIndex; i <= endIndex; i++) {
|
|
147
|
+
const key = `${baseKey}${i}`;
|
|
148
|
+
if (key in data) {
|
|
149
|
+
sum += ourParseFloat(data[key]);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
return sum;
|
|
153
|
+
}
|
|
154
|
+
exports.sumCorrelativeKeys = sumCorrelativeKeys;
|
|
155
|
+
function generatePlazos({ inicio, cantidadProyeccion, valor }) {
|
|
156
|
+
const plazos = {};
|
|
157
|
+
if (inicio && valor) {
|
|
158
|
+
let valorInicial = valor;
|
|
159
|
+
if (valorInicial) {
|
|
160
|
+
for (let i = inicio; i <= cantidadProyeccion; i++) {
|
|
161
|
+
if (valorInicial > 0) {
|
|
162
|
+
plazos[`Gestion${i}`] = valorInicial;
|
|
163
|
+
valorInicial--;
|
|
164
|
+
}
|
|
165
|
+
else {
|
|
166
|
+
break;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
return plazos;
|
|
172
|
+
}
|
|
173
|
+
exports.generatePlazos = generatePlazos;
|
|
174
|
+
function calcularPagoPrincipalEntre({ tasaPeriodica, numeroPagos, montoPrestamo, periodoInicial = 1, periodoFinal, }) {
|
|
175
|
+
// Cálculo de la cuota fija periódica (PMT)
|
|
176
|
+
const cuota = (tasaPeriodica * montoPrestamo) /
|
|
177
|
+
(1 - Math.pow(1 + tasaPeriodica, -numeroPagos));
|
|
178
|
+
let saldo = montoPrestamo; // Saldo inicial
|
|
179
|
+
let totalCapitalAmortizado = 0;
|
|
180
|
+
for (let periodo = 1; periodo <= periodoFinal; periodo++) {
|
|
181
|
+
const interesPeriodo = saldo * tasaPeriodica; // Intereses del período actual
|
|
182
|
+
const capitalAmortizado = cuota - interesPeriodo; // Parte de capital de la cuota
|
|
183
|
+
if (periodo >= periodoInicial) {
|
|
184
|
+
totalCapitalAmortizado += capitalAmortizado;
|
|
185
|
+
}
|
|
186
|
+
// Reducir el saldo restante para el siguiente período
|
|
187
|
+
saldo -= capitalAmortizado;
|
|
188
|
+
}
|
|
189
|
+
return totalCapitalAmortizado;
|
|
190
|
+
}
|
|
191
|
+
exports.calcularPagoPrincipalEntre = calcularPagoPrincipalEntre;
|
|
192
|
+
function calcularPagoInteresEntre({ tasaPeriodica, numeroPagos, montoPrestamo, periodoInicial = 1, periodoFinal, }) {
|
|
193
|
+
// Cálculo de la cuota fija periódica (PMT)
|
|
194
|
+
const cuota = (tasaPeriodica * montoPrestamo) /
|
|
195
|
+
(1 - Math.pow(1 + tasaPeriodica, -numeroPagos));
|
|
196
|
+
let saldo = montoPrestamo; // Saldo inicial
|
|
197
|
+
let totalInteresesPagados = 0;
|
|
198
|
+
for (let periodo = 1; periodo <= periodoFinal; periodo++) {
|
|
199
|
+
const interesPeriodo = saldo * tasaPeriodica; // Intereses del período actual
|
|
200
|
+
if (periodo >= periodoInicial) {
|
|
201
|
+
totalInteresesPagados += interesPeriodo; // Suma intereses solo en el rango especificado
|
|
202
|
+
}
|
|
203
|
+
// Reducir el saldo restante para el siguiente período
|
|
204
|
+
const capitalAmortizado = cuota - interesPeriodo;
|
|
205
|
+
saldo -= capitalAmortizado;
|
|
206
|
+
}
|
|
207
|
+
return totalInteresesPagados; // Devuelve el valor negativo para igualar el comportamiento de Excel
|
|
208
|
+
}
|
|
209
|
+
exports.calcularPagoInteresEntre = calcularPagoInteresEntre;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { AdministracionFinancieraCalcData, AdministracionFinancieraData } from "../../models/eeff/admFinanciera";
|
|
2
|
+
import { Strategy } from "../../strategy.interface";
|
|
3
|
+
export default class AdmFinancieraStrategy implements Strategy {
|
|
4
|
+
data: AdministracionFinancieraCalcData | null;
|
|
5
|
+
constructor();
|
|
6
|
+
execute(data: AdministracionFinancieraData): AdministracionFinancieraCalcData;
|
|
7
|
+
private formatPrestamosDirectos;
|
|
8
|
+
private formatPrestamosBajoLinea;
|
|
9
|
+
private setProyeccionesBajoLinea;
|
|
10
|
+
private formatPrestamosLeasing;
|
|
11
|
+
private formatLineasMixtas;
|
|
12
|
+
private setProyeccionesPrestamosDirectos;
|
|
13
|
+
private setProyeccionesAplicaciones;
|
|
14
|
+
}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const utils_1 = require("./admFinanciera/utils");
|
|
4
|
+
const lodash_1 = require("lodash");
|
|
5
|
+
const prestamoDirectoHandler_1 = require("./admFinanciera/prestamoDirectoHandler");
|
|
6
|
+
const prestamoBajoLineaHandler_1 = require("./admFinanciera/prestamoBajoLineaHandler");
|
|
7
|
+
const proyeccionPrestamosDirectosHandler_1 = require("./admFinanciera/proyeccionPrestamosDirectosHandler");
|
|
8
|
+
const lineasMixtasHandler_1 = require("./admFinanciera/lineasMixtasHandler");
|
|
9
|
+
const prestamoLeasingHandler_1 = require("./admFinanciera/prestamoLeasingHandler");
|
|
10
|
+
const aplicacionesHandler_1 = require("./admFinanciera/aplicacionesHandler");
|
|
11
|
+
class AdmFinancieraStrategy {
|
|
12
|
+
data;
|
|
13
|
+
constructor() {
|
|
14
|
+
this.data = null;
|
|
15
|
+
}
|
|
16
|
+
execute(data) {
|
|
17
|
+
if (!data || !data?.CantidadProyeccion || !data?.InicioProyeccion) {
|
|
18
|
+
throw new Error('La data o Cantidad Proyeccion o Inicio Proyeccion no estan definidos');
|
|
19
|
+
}
|
|
20
|
+
const cloned = (0, lodash_1.cloneDeep)(data);
|
|
21
|
+
this.data = {
|
|
22
|
+
...cloned,
|
|
23
|
+
ProyeccionPrestamosDirectos: cloned.ProyeccionPrestamosDirectos ?? [],
|
|
24
|
+
ProyeccionAplicaciones: [],
|
|
25
|
+
ProyeccionPrestamosBajoLineas: [],
|
|
26
|
+
};
|
|
27
|
+
this.formatPrestamosDirectos();
|
|
28
|
+
this.formatPrestamosBajoLinea();
|
|
29
|
+
this.formatPrestamosLeasing();
|
|
30
|
+
this.formatLineasMixtas();
|
|
31
|
+
//proyecciones
|
|
32
|
+
this.setProyeccionesBajoLinea();
|
|
33
|
+
this.setProyeccionesPrestamosDirectos();
|
|
34
|
+
this.setProyeccionesAplicaciones();
|
|
35
|
+
return this.data;
|
|
36
|
+
}
|
|
37
|
+
formatPrestamosDirectos() {
|
|
38
|
+
let totalMontoOriginal = 0;
|
|
39
|
+
let totalPorcionPagada = 0;
|
|
40
|
+
this.data.PrestamoDirecto.forEach(prestamo => {
|
|
41
|
+
const handled = new prestamoDirectoHandler_1.PrestamoDirectoHandler({
|
|
42
|
+
prestamo,
|
|
43
|
+
data: this.data
|
|
44
|
+
}).handle();
|
|
45
|
+
totalMontoOriginal += (0, utils_1.ourParseFloat)(handled.MontoOriginal);
|
|
46
|
+
totalPorcionPagada += (0, utils_1.ourParseFloat)(handled.PorcionPagada);
|
|
47
|
+
});
|
|
48
|
+
this.data?.PrestamoDirecto.push({
|
|
49
|
+
Descripcion: 'TOTAL PRÉSTAMOS AMORTIZABLES BS',
|
|
50
|
+
MontoOriginal: totalMontoOriginal,
|
|
51
|
+
PorcionPagada: totalPorcionPagada,
|
|
52
|
+
Clasificador: 'T'
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
formatPrestamosBajoLinea() {
|
|
56
|
+
let totalMonto = this.data.PrestamoBajoLinea.reduce((acc, curr) => acc + (0, utils_1.ourParseFloat)(curr.MontoOriginal), 0);
|
|
57
|
+
let totalMontoUtilizado = 0;
|
|
58
|
+
let totalTasaPonderada = 0;
|
|
59
|
+
let totalSaldoLinea = 0;
|
|
60
|
+
this.data.PrestamoBajoLinea.forEach(prestamo => {
|
|
61
|
+
const handled = new prestamoBajoLineaHandler_1.PrestamoBajoLineaHandler(prestamo, this.data).handle();
|
|
62
|
+
totalMontoUtilizado += (0, utils_1.ourParseFloat)(handled.MontoUtilizado);
|
|
63
|
+
totalTasaPonderada += (0, utils_1.ourParseFloat)(handled.TasaPonderada);
|
|
64
|
+
totalSaldoLinea += (0, utils_1.ourParseFloat)(handled.SaldoLineaAplicar);
|
|
65
|
+
});
|
|
66
|
+
this.data?.PrestamoBajoLinea.push({
|
|
67
|
+
Descripcion: 'TOTAL LÍNEA DE CRÉDITO BS',
|
|
68
|
+
MontoOriginal: totalMonto,
|
|
69
|
+
MontoUtilizado: totalMontoUtilizado,
|
|
70
|
+
TasaPonderada: totalTasaPonderada,
|
|
71
|
+
SaldoLineaAplicar: totalSaldoLinea,
|
|
72
|
+
Clasificador: 'T'
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
setProyeccionesBajoLinea() {
|
|
76
|
+
const filaTotales = this.data.PrestamoBajoLinea.find(pr => pr.Clasificador == 'T');
|
|
77
|
+
const totalTasaPonderada = (0, utils_1.ourParseFloat)(filaTotales?.TasaPonderada) / 100;
|
|
78
|
+
const proyecciones = this.data.PrestamoBajoLinea.map(pr => ({
|
|
79
|
+
Descripcion: pr.Descripcion,
|
|
80
|
+
...pr.Proyecciones
|
|
81
|
+
}));
|
|
82
|
+
const pagoCostosFinancieros = {
|
|
83
|
+
id: -1,
|
|
84
|
+
Descripcion: 'Pago de Costos Financieros Bs.',
|
|
85
|
+
Clasificador: 'T'
|
|
86
|
+
};
|
|
87
|
+
for (let i = 1; i <= this.data.CantidadProyeccion; i++) {
|
|
88
|
+
let value;
|
|
89
|
+
if (i == 1) {
|
|
90
|
+
const primeraFila = this.data.PrestamoBajoLinea.at(0);
|
|
91
|
+
value = (0, utils_1.ourParseFloat)(primeraFila?.MontoUtilizado) * totalTasaPonderada;
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
const sumaColumnaAnterior = (0, utils_1.getColumnSum)(proyecciones, `Gestion${i - 1}`);
|
|
95
|
+
value = sumaColumnaAnterior * totalTasaPonderada;
|
|
96
|
+
}
|
|
97
|
+
pagoCostosFinancieros[`Gestion${i}`] = value;
|
|
98
|
+
}
|
|
99
|
+
proyecciones.push(pagoCostosFinancieros);
|
|
100
|
+
this.data.ProyeccionPrestamosBajoLineas = proyecciones;
|
|
101
|
+
}
|
|
102
|
+
formatPrestamosLeasing() {
|
|
103
|
+
let totalMonto = 0;
|
|
104
|
+
let totalCuotaPeriodo = 0;
|
|
105
|
+
let totalAporteInicial = 0;
|
|
106
|
+
let totalValorResidual = 0;
|
|
107
|
+
let totalValorBien = 0;
|
|
108
|
+
this.data.PrestamoLeasing.forEach(prestamo => {
|
|
109
|
+
const handled = new prestamoLeasingHandler_1.PrestamoLeasingHandler({ data: this.data, prestamo }).handle();
|
|
110
|
+
totalMonto += (0, utils_1.ourParseFloat)(handled.MontoOriginal);
|
|
111
|
+
totalCuotaPeriodo += (0, utils_1.ourParseFloat)(handled.MontoCuotaPeriodo);
|
|
112
|
+
totalAporteInicial += (0, utils_1.ourParseFloat)(handled.MontoAporteInicial);
|
|
113
|
+
totalValorResidual += (0, utils_1.ourParseFloat)(handled.MontoValorResidual);
|
|
114
|
+
totalValorBien += (0, utils_1.ourParseFloat)(handled.MontoValorBien);
|
|
115
|
+
});
|
|
116
|
+
this.data?.PrestamoLeasing.push({
|
|
117
|
+
Descripcion: 'TOTAL LEASING BS',
|
|
118
|
+
MontoOriginal: totalMonto,
|
|
119
|
+
MontoCuotaPeriodo: totalCuotaPeriodo,
|
|
120
|
+
MontoAporteInicial: totalAporteInicial,
|
|
121
|
+
MontoValorResidual: totalValorResidual,
|
|
122
|
+
MontoValorBien: totalValorBien,
|
|
123
|
+
Clasificador: 'T'
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
formatLineasMixtas() {
|
|
127
|
+
new lineasMixtasHandler_1.LineasMixtasHandler(this.data).handle();
|
|
128
|
+
}
|
|
129
|
+
setProyeccionesPrestamosDirectos() {
|
|
130
|
+
const handler = new proyeccionPrestamosDirectosHandler_1.ProyeccionPrestamosDirectosHandler({
|
|
131
|
+
data: this.data
|
|
132
|
+
});
|
|
133
|
+
this.data.ProyeccionPrestamosDirectos = handler.handle();
|
|
134
|
+
}
|
|
135
|
+
setProyeccionesAplicaciones() {
|
|
136
|
+
new aplicacionesHandler_1.AplicacionesHandler({ data: this.data }).handle();
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
exports.default = AdmFinancieraStrategy;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
class BalanceEEFFStrategy {
|
|
4
|
+
actividades;
|
|
4
5
|
constructor() {
|
|
5
6
|
this.actividades = [];
|
|
6
7
|
}
|
|
@@ -81,7 +82,7 @@ const anadirGrupoBalance = (actividad, rubros, grupoActividad, rubroDestino, dat
|
|
|
81
82
|
}, null);
|
|
82
83
|
for (let i = 1; i <= rango; i++) {
|
|
83
84
|
const cuenta = data.find((item) => item.RubroId == rubroDestino);
|
|
84
|
-
let copy =
|
|
85
|
+
let copy = { ...cuenta };
|
|
85
86
|
copy.RubroId = (esDetalle ? `${rubroDestino}` : `${rubroDestino}.1`);
|
|
86
87
|
copy.Descripcion = `${cuenta.Descripcion} ${actividad.ActividadEconomicaId} ${actividad.Descripcion}`;
|
|
87
88
|
copy.UUID = `${rubroDestino}_${actividad.ActividadEconomicaId}_${i}`;
|
|
@@ -124,7 +125,7 @@ const getCuentasCopy = (data, rubroId, map) => {
|
|
|
124
125
|
let cuentaIngreso = map.get(`${rubroId}_${i}`);
|
|
125
126
|
cuentaIngreso.MontoEmpresa = Math.round(parseFloat(cuentaIngreso.MontoEmpresa) * 100) / 100;
|
|
126
127
|
cuentaIngreso.MontoFamiliar = Math.round(parseFloat(cuentaIngreso.MontoFamiliar) * 100) / 100;
|
|
127
|
-
originalData.set(`${rubroId}_${i}`,
|
|
128
|
+
originalData.set(`${rubroId}_${i}`, { ...cuentaIngreso });
|
|
128
129
|
}
|
|
129
130
|
return originalData;
|
|
130
131
|
};
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
class FlujoProyectadoEEFFStrategy {
|
|
4
|
+
actividades;
|
|
4
5
|
constructor() {
|
|
5
6
|
this.actividades = [];
|
|
6
7
|
}
|
|
@@ -53,7 +54,7 @@ const agregarGrupo = (rubros, actividad, grupoActividad, rubroDestino, data) =>
|
|
|
53
54
|
return acc;
|
|
54
55
|
}, null);
|
|
55
56
|
const rubro = data.FlujoProyectadoAnual[0];
|
|
56
|
-
let row =
|
|
57
|
+
let row = { ...rubro };
|
|
57
58
|
row.RubroId = rubroDestino;
|
|
58
59
|
row.Clasificador = 'CT';
|
|
59
60
|
row.Descripcion = `Actividad: ${actividad.Descripcion}`;
|
|
@@ -79,5 +80,5 @@ const sumarizarCuenta = (rubroId, data) => {
|
|
|
79
80
|
};
|
|
80
81
|
const getCuentaCopy = (rubroId, data) => {
|
|
81
82
|
const cuenta = data.FlujoProyectadoAnualMap.get(`${rubroId}_0`);
|
|
82
|
-
return
|
|
83
|
+
return { ...cuenta };
|
|
83
84
|
};
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
class BalanceGeneralStrategy {
|
|
4
|
+
actividades;
|
|
4
5
|
constructor() {
|
|
5
6
|
this.actividades = {};
|
|
6
7
|
}
|
|
@@ -25,7 +26,7 @@ const procesarConsolidado = (consolidado, data, tipoConsolidado) => {
|
|
|
25
26
|
for (const rubro of rubros) {
|
|
26
27
|
for (let i = 1; i <= rango; i++) {
|
|
27
28
|
const cuenta = data.find((item) => item.RubroId == rubro.RubroId);
|
|
28
|
-
let copy =
|
|
29
|
+
let copy = { ...cuenta };
|
|
29
30
|
copy.RubroId = (rubro.Clasificador == 'HABM' ? `${rubro.RubroId}` : `${rubro.RubroId}.1`);
|
|
30
31
|
copy.Descripcion = `${cuenta.Descripcion} - Consolidado ${tipoConsolidado} `;
|
|
31
32
|
copy.UUID = `${rubro.RubroId}_${tipoConsolidado}_${i}`;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
class FlujoProyectadoBalanceStrategy {
|
|
4
|
+
actividades;
|
|
4
5
|
constructor() {
|
|
5
6
|
this.actividades = {};
|
|
6
7
|
}
|
|
@@ -21,7 +22,7 @@ const procesarAnual = (consolidado, data, tipoConsolidado) => {
|
|
|
21
22
|
if (rubros.length == 0) {
|
|
22
23
|
for (const rubroItem of rubros) {
|
|
23
24
|
const rubro = data.FlujoProyectadoAnual[0];
|
|
24
|
-
let row =
|
|
25
|
+
let row = { ...rubro };
|
|
25
26
|
row.Clasificador = 'CT';
|
|
26
27
|
row.Descripcion = `${rubroItem.Descripcion} - ${tipoConsolidado}`;
|
|
27
28
|
row.Editable = false;
|
|
@@ -5,6 +5,7 @@ const gCuentaCosto = 'ACT_CN_41002';
|
|
|
5
5
|
const gCuentaGasto = 'ACT_CN_43002';
|
|
6
6
|
const gCuentaOtrosIngresosDet = 'ACT_CN_45001';
|
|
7
7
|
class BalancePecStrategy {
|
|
8
|
+
actividades;
|
|
8
9
|
constructor() {
|
|
9
10
|
this.actividades = [];
|
|
10
11
|
}
|
|
@@ -37,7 +38,7 @@ const getCuentasCopy = (data, rubroId) => {
|
|
|
37
38
|
let cuentaIngreso = data.eerrMap.get(`${rubroId}_${i}`);
|
|
38
39
|
cuentaIngreso.MontoEmpresa = Math.round(parseFloat(cuentaIngreso.MontoEmpresa) * 100) / 100;
|
|
39
40
|
cuentaIngreso.MontoFamiliar = Math.round(parseFloat(cuentaIngreso.MontoFamiliar) * 100) / 100;
|
|
40
|
-
originalData.set(`${rubroId}_${i}`,
|
|
41
|
+
originalData.set(`${rubroId}_${i}`, { ...cuentaIngreso });
|
|
41
42
|
}
|
|
42
43
|
return originalData;
|
|
43
44
|
};
|
|
@@ -45,7 +46,7 @@ const anadirIngresosAuxPec = (actividad, data) => {
|
|
|
45
46
|
const rango = data.eerr[0].Rango;
|
|
46
47
|
for (let i = 1; i <= rango - 1; i++) {
|
|
47
48
|
const cuentaIngreso = data.eerrMap.get(`${gCuentaIngreso}_${i}`);
|
|
48
|
-
let copy =
|
|
49
|
+
let copy = { ...cuentaIngreso };
|
|
49
50
|
copy.RubroId = `${gCuentaIngreso}.1`;
|
|
50
51
|
copy.Descripcion = `Ingresos por Ventas ${actividad.Desarrollo.ActividadGanadera}`;
|
|
51
52
|
copy.UUID = `${gCuentaIngreso}_${actividad.AuxPec.ActividadEconomicaId}_${i}`;
|
|
@@ -64,7 +65,7 @@ const anadirIngresosAuxPec = (actividad, data) => {
|
|
|
64
65
|
const anadirIngresoVenta = (actividad, data) => {
|
|
65
66
|
const rango = data.eerr[0].Rango;
|
|
66
67
|
const cuentaIngreso = data.eerrMap.get(`${gCuentaIngreso}${rango}`);
|
|
67
|
-
let copy =
|
|
68
|
+
let copy = { ...cuentaIngreso };
|
|
68
69
|
copy.RubroId = `${gCuentaIngreso}.1`;
|
|
69
70
|
copy.Descripcion = `Ingresos por Ventas ${actividad.Desarrollo.ActividadGanadera}`;
|
|
70
71
|
copy.UUID = `${gCuentaIngreso}_${actividad.AuxPec.ActividadEconomicaId}_${rango}`;
|
|
@@ -84,7 +85,7 @@ const anadirCosto = (actividad, data) => {
|
|
|
84
85
|
const rango = data.eerr[0].Rango;
|
|
85
86
|
const cuentaCosto = data.eerrMap.get(`${gCuentaCosto}_${rango}`);
|
|
86
87
|
for (let i = 1; i <= rango; i++) {
|
|
87
|
-
let copy =
|
|
88
|
+
let copy = { ...cuentaCosto };
|
|
88
89
|
copy.RubroId = `${gCuentaCosto}.1`;
|
|
89
90
|
copy.Descripcion = `Costos de Ventas ${actividad.Desarrollo.ActividadGanadera}`;
|
|
90
91
|
copy.UUID = `${gCuentaCosto}_${actividad.AuxPec.ActividadEconomicaId}_${i}`;
|
|
@@ -105,7 +106,7 @@ const anadirGasto = (actividad, data) => {
|
|
|
105
106
|
const rango = data.eerr[0].Rango;
|
|
106
107
|
const cuentaGasto = data.eerrMap.get(`${gCuentaGasto}_${rango}`);
|
|
107
108
|
for (let i = 1; i <= rango; i++) {
|
|
108
|
-
let copy =
|
|
109
|
+
let copy = { ...cuentaGasto };
|
|
109
110
|
copy.RubroId = `${gCuentaGasto}.1`;
|
|
110
111
|
copy.UUID = `${gCuentaGasto}_${actividad.AuxPec.ActividadEconomicaId}_${i}`;
|
|
111
112
|
copy.Descripcion = `Gastos Administrativos Operativos ${actividad.Desarrollo.ActividadGanadera}`;
|
|
@@ -138,7 +139,7 @@ const anadirOtrosIngresos = (actividad, data) => {
|
|
|
138
139
|
const rango = data.eerr[0].Rango;
|
|
139
140
|
const cuentaOtrosIngresos = data.eerr.find((item) => item.RubroId == gCuentaOtrosIngresosDet);
|
|
140
141
|
for (let i = 1; i <= rango; i++) {
|
|
141
|
-
let copy =
|
|
142
|
+
let copy = { ...cuentaOtrosIngresos };
|
|
142
143
|
copy.UUID = `${gCuentaOtrosIngresosDet}_${actividad.AuxPec.ActividadEconomicaId}_${rango}`;
|
|
143
144
|
copy.Descripcion = `Otros Ingresos ${actividad.Desarrollo.ActividadGanadera}`;
|
|
144
145
|
copy.MontoEmpresa = 0;
|
|
@@ -17,7 +17,10 @@ const getAvaluo = (avaluo, propiedades) => {
|
|
|
17
17
|
return acc;
|
|
18
18
|
}, new Map()).values());
|
|
19
19
|
sumatoria = sumatoria.map((item) => {
|
|
20
|
-
return
|
|
20
|
+
return { ...item,
|
|
21
|
+
Cantidad: Math.round(item.Cantidad * 100) / 100,
|
|
22
|
+
PrecioVenta: Math.round(item.Precio / cantidad * 100) / 100
|
|
23
|
+
};
|
|
21
24
|
});
|
|
22
25
|
avaluo = avaluo.map((item) => {
|
|
23
26
|
item.HatoInicial = 0;
|
|
@@ -63,10 +66,15 @@ const getProyectado = (avaluo, CantidadProy, init = 1) => {
|
|
|
63
66
|
for (let i = init; i <= CantidadProy; i++) {
|
|
64
67
|
data[`C-${i}`] = 0;
|
|
65
68
|
}
|
|
66
|
-
return
|
|
69
|
+
return {
|
|
70
|
+
RubroId: item.RubroId,
|
|
71
|
+
Descripcion: item.Descripcion,
|
|
72
|
+
Orden: (0, Constantes_1.getOrden)(item.RubroId),
|
|
73
|
+
...data
|
|
74
|
+
};
|
|
67
75
|
});
|
|
68
76
|
result = result.reduce((acc, item) => {
|
|
69
|
-
acc.set(item.RubroId,
|
|
77
|
+
acc.set(item.RubroId, { ...item });
|
|
70
78
|
return acc;
|
|
71
79
|
}, new Map());
|
|
72
80
|
return result;
|
|
@@ -41,11 +41,11 @@ const getProyDesarrollo = (avaluos, parametros, CantidadProy, CantidadHectareas)
|
|
|
41
41
|
let ventasCantidad = desarrolloCalc.getProyectado(avaluos, CantidadProy);
|
|
42
42
|
let ventasAnuales = desarrolloCalc.getProyectado(avaluos, CantidadProy);
|
|
43
43
|
const paramsMap = parametros.reduce((acc, item) => {
|
|
44
|
-
acc.set(item.RubroId,
|
|
44
|
+
acc.set(item.RubroId, { ...item });
|
|
45
45
|
return acc;
|
|
46
46
|
}, new Map());
|
|
47
47
|
const avaluosMap = avaluos.reduce((acc, item) => {
|
|
48
|
-
acc.set(item.RubroId,
|
|
48
|
+
acc.set(item.RubroId, { ...item });
|
|
49
49
|
return acc;
|
|
50
50
|
}, new Map());
|
|
51
51
|
for (let i = 0; i <= CantidadProy; i++) {
|
|
@@ -6,6 +6,7 @@ const RUBRO_GASTOS = 'ACT_CNFL_60001';
|
|
|
6
6
|
const RUBRO_OTROS_INGRESOS = 'ACT_CNFL_70001';
|
|
7
7
|
const RUBRO_GASTOS_FAMILIARES = 'ACT_CNFL_70002';
|
|
8
8
|
class FlujoProyectadoPecStrategy {
|
|
9
|
+
actividades;
|
|
9
10
|
constructor() {
|
|
10
11
|
this.actividades = [];
|
|
11
12
|
}
|
|
@@ -41,7 +42,7 @@ class FlujoProyectadoPecStrategy {
|
|
|
41
42
|
exports.default = FlujoProyectadoPecStrategy;
|
|
42
43
|
const getCuentaCopy = (rubroId, data) => {
|
|
43
44
|
const cuenta = data.FlujoProyectadoMensualMap.get(`${rubroId}_0`);
|
|
44
|
-
return
|
|
45
|
+
return { ...cuenta };
|
|
45
46
|
};
|
|
46
47
|
const sumarizarCuenta = (rubroId, data, copia) => {
|
|
47
48
|
const cuenta = data.FlujoProyectadoMensualMap.get(`${rubroId}_0`);
|
|
@@ -79,7 +80,7 @@ const addIngresosM = (actividad, data) => {
|
|
|
79
80
|
const ingresos = actividad.Ventas.EstacionalidadCalc.find((item) => item.RubroId == 'TOT01');
|
|
80
81
|
if (!ingresos)
|
|
81
82
|
throw new Error('No se encontro la estacionalidad Calc de la actividad');
|
|
82
|
-
let row =
|
|
83
|
+
let row = { ...rubro };
|
|
83
84
|
row.Descripcion = `Ingresos ${actividad.Desarrollo.ActividadGanadera}`;
|
|
84
85
|
row.Clasificador = 'CT';
|
|
85
86
|
row.Editable = false;
|
|
@@ -95,7 +96,7 @@ const addCostosM = (actividad, data) => {
|
|
|
95
96
|
const costos = actividad.Costos.Calculo.find((item) => item.RubroId == 'TOT01');
|
|
96
97
|
if (!costos)
|
|
97
98
|
throw new Error('No se encontro el costo cálculo de la actividad');
|
|
98
|
-
let row =
|
|
99
|
+
let row = { ...rubro };
|
|
99
100
|
row.Descripcion = `(-) Costos de Ventas ${actividad.Desarrollo.ActividadGanadera}`;
|
|
100
101
|
row.Clasificador = 'CT';
|
|
101
102
|
row.Editable = false;
|
|
@@ -111,7 +112,7 @@ const addGastosM = (actividad, data) => {
|
|
|
111
112
|
const otrosGastos = calcularOtrosGastos(actividad.OtrosGastos);
|
|
112
113
|
if (!otrosGastos)
|
|
113
114
|
throw new Error('No se encontro los gastos de la actividad');
|
|
114
|
-
let row =
|
|
115
|
+
let row = { ...rubro };
|
|
115
116
|
row.Descripcion = `(-) Gastos Operativo ${actividad.Desarrollo.ActividadGanadera}`;
|
|
116
117
|
row.Clasificador = 'CT';
|
|
117
118
|
row.Editable = false;
|
|
@@ -127,7 +128,7 @@ const otrosIngresoM = (actividad, data) => {
|
|
|
127
128
|
const otrosIngresos = actividad.Ventas.OtrosIngresos;
|
|
128
129
|
if (!otrosIngresos)
|
|
129
130
|
throw new Error('No se encontro la estacionalidad Calc de la actividad');
|
|
130
|
-
let row =
|
|
131
|
+
let row = { ...rubro };
|
|
131
132
|
row.Descripcion = `Otros Ingresos Familiares ${actividad.Desarrollo.ActividadGanadera}`;
|
|
132
133
|
row.Clasificador = 'CT';
|
|
133
134
|
row.Editable = false;
|
|
@@ -154,7 +155,7 @@ const gastosFamiliaresM = (actividad, data) => {
|
|
|
154
155
|
const otrosGastos = calcularOtrosGastos(actividad.OtrosGastos);
|
|
155
156
|
if (!otrosGastos)
|
|
156
157
|
throw new Error('No se encontro los gastos de la actividad');
|
|
157
|
-
let row =
|
|
158
|
+
let row = { ...rubro };
|
|
158
159
|
row.Descripcion = `(-) Gastos Familiares ${actividad.Desarrollo.ActividadGanadera}`;
|
|
159
160
|
row.Clasificador = 'CT';
|
|
160
161
|
row.Editable = false;
|
|
@@ -5,7 +5,13 @@ const Constantes_1 = require("../Constantes");
|
|
|
5
5
|
const estacionalidadCalc = (ventasPrimitivo, ventasIngresos) => {
|
|
6
6
|
const ingresosMap = (0, Constantes_1.getMap)(ventasIngresos, 'RubroId');
|
|
7
7
|
const ventasCalc = ventasPrimitivo.Estacionalidad.map((item) => {
|
|
8
|
-
return
|
|
8
|
+
return {
|
|
9
|
+
...item,
|
|
10
|
+
Monto: parseFloat(item.Monto),
|
|
11
|
+
IngresoTotal: ingresosMap.get(item.RubroId).IngresoTotal,
|
|
12
|
+
CalculoIngreso: ingresosMap.get(item.RubroId).IngresoTotal * parseFloat(item.Monto),
|
|
13
|
+
Orden: (0, Constantes_1.getOrden)(item.RubroId)
|
|
14
|
+
};
|
|
9
15
|
});
|
|
10
16
|
return ventasCalc;
|
|
11
17
|
};
|
|
@@ -10,7 +10,13 @@ const calcular = (ventasPrimitivo, auxiliarPrimitivo, desarrolloCalculado) => {
|
|
|
10
10
|
return ventasPrimitivo.Ingresos.map((item) => {
|
|
11
11
|
const cantidad = parseFloat(hatoMap.get(item.RubroId).CantidadCabezas);
|
|
12
12
|
const precio = parseFloat(avaluoMap.get(item.RubroId).PrecioVenta);
|
|
13
|
-
return
|
|
13
|
+
return {
|
|
14
|
+
...item,
|
|
15
|
+
Animales: cantidad,
|
|
16
|
+
Precio: precio,
|
|
17
|
+
IngresoTotal: cantidad * precio,
|
|
18
|
+
Orden: (0, Constantes_1.getOrden)(item.RubroId)
|
|
19
|
+
};
|
|
14
20
|
});
|
|
15
21
|
};
|
|
16
22
|
exports.calcular = calcular;
|