bdpformulas 1.0.49 → 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/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 +10 -6
- package/build/strategies/eeff/admFinanciera.strategy.js +126 -86
- 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;
|
|
@@ -1,10 +1,14 @@
|
|
|
1
|
+
import { AdministracionFinancieraCalcData, AdministracionFinancieraData } from "../../models/eeff/admFinanciera";
|
|
1
2
|
import { Strategy } from "../../strategy.interface";
|
|
2
3
|
export default class AdmFinancieraStrategy implements Strategy {
|
|
3
|
-
data:
|
|
4
|
+
data: AdministracionFinancieraCalcData | null;
|
|
4
5
|
constructor();
|
|
5
|
-
execute(data:
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
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;
|
|
10
14
|
}
|
|
@@ -1,99 +1,139 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
result[`Monto${i}`] = 0;
|
|
12
|
-
}
|
|
13
|
-
return result;
|
|
14
|
-
};
|
|
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");
|
|
15
11
|
class AdmFinancieraStrategy {
|
|
12
|
+
data;
|
|
16
13
|
constructor() {
|
|
17
|
-
this.
|
|
18
|
-
let result = [];
|
|
19
|
-
const proyeccionBase = getProyeccionBase(this.data.CantidadProyeccion, this.data.InicioProyeccion);
|
|
20
|
-
const clasificaciones = [
|
|
21
|
-
'KO - Línea de Crédito 100% KO',
|
|
22
|
-
'KO - Prestamo Directo',
|
|
23
|
-
'KI - Prestamo Directo',
|
|
24
|
-
'MIXTO - Pagares, Bonos, Etc.',
|
|
25
|
-
'KI - Leasing Financiero',
|
|
26
|
-
'KI - KO - Línea de Crédito Mixta'
|
|
27
|
-
];
|
|
28
|
-
for (let i = 0; i < clasificaciones.length; i++) {
|
|
29
|
-
result.push(Object.assign({ id: i, Descripcion: clasificaciones[i] }, proyeccionBase));
|
|
30
|
-
}
|
|
31
|
-
return result;
|
|
32
|
-
};
|
|
33
|
-
this.data = {};
|
|
14
|
+
this.data = null;
|
|
34
15
|
}
|
|
35
16
|
execute(data) {
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
this.data.ProyeccionPrestamosDirectos = this.proyeccionPrestamosDirectos();
|
|
39
|
-
this.data.ProyeccionAplicaciones = this.proyeccionAplicaciones();
|
|
40
|
-
return data;
|
|
41
|
-
}
|
|
42
|
-
proyeccionLineasMixtas() {
|
|
43
|
-
let result = [];
|
|
44
|
-
const proyeccionBase = getProyeccionBase(this.data.CantidadProyeccion, this.data.InicioProyeccion);
|
|
45
|
-
const clasificaciones = [
|
|
46
|
-
'Total Vencimiento Corriente de Deuda de Largo Plazo',
|
|
47
|
-
'Total Deuda financiera de largo plazo',
|
|
48
|
-
'Total Gastos Financieros y Comisiones',
|
|
49
|
-
];
|
|
50
|
-
for (let i = 0; i < clasificaciones.length; i++) {
|
|
51
|
-
result.push(Object.assign({ id: i, Descripcion: clasificaciones[i] }, proyeccionBase));
|
|
17
|
+
if (!data || !data?.CantidadProyeccion || !data?.InicioProyeccion) {
|
|
18
|
+
throw new Error('La data o Cantidad Proyeccion o Inicio Proyeccion no estan definidos');
|
|
52
19
|
}
|
|
53
|
-
|
|
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;
|
|
54
36
|
}
|
|
55
|
-
|
|
56
|
-
let
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
});
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
}
|
|
66
|
-
|
|
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
|
+
});
|
|
67
74
|
}
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
const
|
|
71
|
-
const
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
'
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
'TOTAL PORCIÓN LP - BDP SAM',
|
|
92
|
-
'TOTAL PORCIÓN LP - Otras EIFs'];
|
|
93
|
-
for (let i = 0; i < clasificaciones.length; i++) {
|
|
94
|
-
result.push(Object.assign({ id: i, Descripcion: clasificaciones[i] }, proyeccionBase));
|
|
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;
|
|
95
98
|
}
|
|
96
|
-
|
|
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();
|
|
97
137
|
}
|
|
98
138
|
}
|
|
99
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++) {
|