bdpformulas 1.0.55 → 1.0.57

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.
Files changed (26) hide show
  1. package/build/context.d.ts +1 -1
  2. package/build/index.d.ts +32 -20
  3. package/build/strategies/agriculture/balanceAgr.strategy.d.ts +2 -1
  4. package/build/strategies/agriculture/balanceAgr.strategy.js +153 -16
  5. package/build/strategies/agriculture/flujoProyAgr.strategy.d.ts +1 -1
  6. package/build/strategies/agriculture/flujoProyAgr.strategy.js +16 -7
  7. package/build/strategies/agriculture/ventas.detail/ventas.calc.js +8 -5
  8. package/build/strategies/balance.strategy.d.ts +1 -1
  9. package/build/strategies/balance.strategy.js +117 -24
  10. package/build/strategies/common/balance.calc.js +3 -4
  11. package/build/strategies/common/balanceCalculos/balanceAux.calc.js +2 -2
  12. package/build/strategies/common/balanceCalculos/flujoAux.calc.js +6 -5
  13. package/build/strategies/common/declaracionJurada.calc.js +26 -10
  14. package/build/strategies/common/flujoCalculos/flujoConstructor.d.ts +4 -0
  15. package/build/strategies/common/flujoCalculos/flujoConstructor.js +231 -96
  16. package/build/strategies/common/flujoCalculos/supuestos.calc.js +21 -27
  17. package/build/strategies/common/flujoProyectado.calc.js +4 -1
  18. package/build/strategies/flujoProyectado.strategy.d.ts +1 -1
  19. package/build/strategies/flujoProyectado.strategy.js +2 -1
  20. package/build/strategies/general/balanceGeneral.strategy.d.ts +1 -1
  21. package/build/strategies/general/balanceGeneral.strategy.js +19 -9
  22. package/build/strategies/index.d.ts +1 -0
  23. package/build/strategies/index.js +7446 -0
  24. package/build/strategies/utils.d.ts +8 -0
  25. package/build/strategies/utils.js +39 -0
  26. package/package.json +1 -1
@@ -1,5 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ const utils_1 = require("../../eeff/admFinanciera/utils");
4
+ const utils_2 = require("../../utils");
3
5
  class FlujoConstructor {
4
6
  tipo;
5
7
  rango;
@@ -28,9 +30,10 @@ class FlujoConstructor {
28
30
  this.proyectarCosto();
29
31
  this.proyectarGasto();
30
32
  this.agregarQuitarClones();
33
+ this.setearCamposAnual();
31
34
  // this.moverDetalledesdeMensual()
32
- this.calcularTotalDetalle(['ACT_CNFL_73000'], 'ACT_CNFL_73900');
33
- this.calcularTotalDetalle(['ACT_CNFL_61001'], 'ACT_CNFL_61900');
35
+ /* this.calcularTotalDetalle(['ACT_CNFL_73000'], 'ACT_CNFL_73900')
36
+ this.calcularTotalDetalle(['ACT_CNFL_61001'], 'ACT_CNFL_61900') */
34
37
  this.calcularOtrosIngresosAnuales();
35
38
  this.calcularGastosFamiliares();
36
39
  this.calcularFlujoInversiones();
@@ -44,18 +47,21 @@ class FlujoConstructor {
44
47
  this.calcularResta('ACT_CNFL_70001', 'ACT_CNFL_70002', 'ACT_CNFL_72000'); //Total Otros Ingresos e Egresos
45
48
  this.calcularTotal(['ACT_CNFL_73000'], 'ACT_CNFL_73900');
46
49
  this.calcularResta('ACT_CNFL_72000', 'ACT_CNFL_73900', 'ACT_CNFL_79000'); //Resultado Otros Ingresos e Egresos
47
- this.calcularResta('ACT_CNFL_69999', 'ACT_CNFL_79000', 'ACT_CNFL_79999'); //Utilidad Neta
50
+ this.calcularTotal(['ACT_CNFL_69999', 'ACT_CNFL_79000'], 'ACT_CNFL_79999'); //Utilidad Neta
51
+ if (this.tipo == 'MENSUAL') {
52
+ this.replicarCuenta('ACT_CNFL_81001', 'ACT_CNFL_80001'); //financiamiento BDP
53
+ }
48
54
  this.calcularTotal(['ACT_CNFL_80001', 'ACT_CNFL_80002'], 'ACT_CNFL_80900'); //Total Flujo de Inversión
49
55
  this.calcularTotal(['ACT_CNFL_81001'], 'ACT_CNFL_81090'); //subtotal Ingresos de Efectivo
50
56
  this.calcularTotal(['ACT_CNFL_81200'], 'ACT_CNFL_81290'); //subtotal Cuota BDP
51
57
  this.calcularResta('ACT_CNFL_81090', 'ACT_CNFL_81290', 'ACT_CNFL_82100'); //Total Flujo financiero
52
58
  if (this.tipo == 'MENSUAL') {
53
- this.calcularTotal(['ACT_CNFL_79999', 'ACT_CNFL_80900', 'ACT_CNFL_82100'], 'ACT_CNFL_82200');
59
+ this.calcularFlujoCajaMensual();
54
60
  this.calcularFlujoAcumuladoMensual(this.data);
55
61
  }
56
62
  else if (this.tipo == 'ANUAL') {
63
+ this.calcularExcedenteDeficit();
57
64
  this.calcularFlujoAcumuladoAnual();
58
- this.calcularTotal(['ACT_CNFL_79999', 'ACT_CNFL_80900', 'ACT_CNFL_82100'], 'ACT_CNFL_82110');
59
65
  this.adicionarCapacidadPago();
60
66
  this.getFlujoEfectivo();
61
67
  }
@@ -70,41 +76,100 @@ class FlujoConstructor {
70
76
  this.calcularPorcentajeIngresCostos();
71
77
  }
72
78
  };
79
+ calcularExcedenteDeficit() {
80
+ const filaUtilidad = this.data.FlujoProyectadoAnualMap.get('ACT_CNFL_79999_0');
81
+ const filaFlujoInversiones = this.data.FlujoProyectadoAnualMap.get('ACT_CNFL_80900_0');
82
+ const filaFlujoFinanciero = this.data.FlujoProyectadoAnualMap.get('ACT_CNFL_82100_0');
83
+ const filaExcedente = this.data.FlujoProyectadoAnualMap.get('ACT_CNFL_82110_0');
84
+ for (let i = 1; i <= this.rango; i++) {
85
+ filaExcedente[`Monto${i}`] =
86
+ (0, utils_1.ourParseFloat)(filaUtilidad?.[`Monto${i}`]) +
87
+ (0, utils_1.ourParseFloat)(filaFlujoFinanciero?.[`Monto${i}`]) -
88
+ (0, utils_1.ourParseFloat)(filaFlujoInversiones?.[`Monto${i}`]);
89
+ }
90
+ }
91
+ setearCamposAnual() {
92
+ const mensualFinanciamientoBdp = (0, utils_2.searchByKeyInMap)(this.data.FlujoProyectadoMensualMap, 'ACT_CNFL_81001');
93
+ const anualFinanciamientoBdp = (0, utils_2.searchByKeyInMap)(this.data.FlujoProyectadoAnualMap, 'ACT_CNFL_81001');
94
+ const anualInversionConFinanciamientoBdp = (0, utils_2.searchByKeyInMap)(this.data.FlujoProyectadoAnualMap, 'ACT_CNFL_80001');
95
+ if (mensualFinanciamientoBdp) {
96
+ const value = (0, utils_1.ourParseFloat)(mensualFinanciamientoBdp.MontoTotal);
97
+ if (anualFinanciamientoBdp)
98
+ anualFinanciamientoBdp['Monto1'] = value;
99
+ if (anualInversionConFinanciamientoBdp)
100
+ anualInversionConFinanciamientoBdp['Monto1'] = value;
101
+ }
102
+ const mensualAportePropio = (0, utils_2.searchByKeyInMap)(this.data.FlujoProyectadoMensualMap, 'ACT_CNFL_80002');
103
+ if (mensualAportePropio) {
104
+ const anualAportePropio = (0, utils_2.searchByKeyInMap)(this.data.FlujoProyectadoAnualMap, 'ACT_CNFL_80002');
105
+ if (anualAportePropio) {
106
+ anualAportePropio['Monto1'] = (0, utils_1.ourParseFloat)(mensualAportePropio.MontoTotal);
107
+ }
108
+ }
109
+ }
73
110
  limpiarCamposCalculados = () => {
74
- let filter = this.array.filter(item => item.Clasificador == 'C');
111
+ const filter = this.array.filter((item) => item.Clasificador == 'C');
75
112
  filter.forEach((item) => {
76
113
  for (let i = 1; i <= this.rango; i++) {
77
114
  item[`Monto${i}`] = 0;
78
115
  }
79
116
  });
80
117
  };
118
+ calcularFlujoCajaMensual() {
119
+ const utilidad = this.mapObject.get(`ACT_CNFL_79999_0`);
120
+ const totalFlujo = this.mapObject.get(`ACT_CNFL_82100_0`);
121
+ const totalFlujoInversiones = this.mapObject.get(`ACT_CNFL_80900_0`);
122
+ const flujoCajaMensual = this.mapObject.get(`ACT_CNFL_82200_0`);
123
+ for (let i = 1; i <= this.rango; i++) {
124
+ flujoCajaMensual[`Monto${i}`] =
125
+ (0, utils_1.ourParseFloat)(utilidad[`Monto${i}`]) +
126
+ (0, utils_1.ourParseFloat)(totalFlujo[`Monto${i}`]) -
127
+ (0, utils_1.ourParseFloat)(totalFlujoInversiones[`Monto${i}`]);
128
+ }
129
+ }
81
130
  calcularFlujoAcumuladoMensual = (data) => {
82
- let rowTotal = this.mapObject.get(`ACT_CNFL_82200_0`);
83
- let rowAcumulado = this.mapObject.get(`ACT_CNFL_82300_0`);
131
+ const rowTotal = this.mapObject.get(`ACT_CNFL_82200_0`);
132
+ const rowAcumulado = this.mapObject.get(`ACT_CNFL_82300_0`);
84
133
  for (let i = 1; i <= this.rango; i++) {
85
134
  if (i == 1) {
86
- rowAcumulado[`Monto${i}`] = parseFloat(rowTotal[`Monto${i}`]) + parseFloat(data.CajaInicial);
135
+ rowAcumulado[`Monto${i}`] =
136
+ parseFloat(rowTotal[`Monto${i}`]) +
137
+ parseFloat(data.CajaInicial);
87
138
  }
88
139
  else {
89
- rowAcumulado[`Monto${i}`] = rowTotal[`Monto${i}`] + rowAcumulado[`Monto${i - 1}`];
140
+ rowAcumulado[`Monto${i}`] =
141
+ rowTotal[`Monto${i}`] + rowAcumulado[`Monto${i - 1}`];
90
142
  }
91
- rowAcumulado[`Monto${i}`] = Math.round(rowAcumulado[`Monto${i}`] * 100) / 100;
143
+ rowAcumulado[`Monto${i}`] =
144
+ Math.round(rowAcumulado[`Monto${i}`] * 100) / 100;
92
145
  }
93
146
  };
94
147
  calcularTotal = (sumandosArray, total) => {
95
148
  const rows = this.array.filter((item) => sumandosArray.includes(item.RubroId));
96
- let destino = this.mapObject.get(`${total}_0`);
149
+ const destino = this.mapObject.get(`${total}_0`);
97
150
  rows.map((item) => {
98
151
  for (let i = 1; i <= this.rango; i++) {
99
152
  destino[`Monto${i}`] += parseFloat(item[`Monto${i}`]);
100
- destino[`Monto${i}`] = Math.round(destino[`Monto${i}`] * 100) / 100;
153
+ destino[`Monto${i}`] =
154
+ Math.round(destino[`Monto${i}`] * 100) / 100;
155
+ }
156
+ });
157
+ };
158
+ replicarCuenta = (cuentaOrigen, cuentaDestino) => {
159
+ const rows = this.array.filter((item) => item.RubroId === cuentaOrigen);
160
+ const destino = this.mapObject.get(`${cuentaDestino}_0`);
161
+ rows.map((item) => {
162
+ for (let i = 1; i <= this.rango; i++) {
163
+ destino[`Monto${i}`] = parseFloat(item[`Monto${i}`]);
164
+ destino[`Monto${i}`] =
165
+ Math.round(destino[`Monto${i}`] * 100) / 100;
101
166
  }
102
167
  });
103
168
  };
104
169
  calcularResta = (positivoRubro, negativoRubro, destinoRubro) => {
105
170
  const positivo = this.mapObject.get(`${positivoRubro}_0`);
106
171
  const negativo = this.mapObject.get(`${negativoRubro}_0`);
107
- let destino = this.mapObject.get(`${destinoRubro}_0`);
172
+ const destino = this.mapObject.get(`${destinoRubro}_0`);
108
173
  for (let i = 1; i <= this.rango; i++) {
109
174
  destino[`Monto${i}`] = positivo[`Monto${i}`] - negativo[`Monto${i}`];
110
175
  destino[`Monto${i}`] = Math.round(destino[`Monto${i}`] * 100) / 100;
@@ -116,20 +181,24 @@ class FlujoConstructor {
116
181
  const rowIngresos = this.data.FlujoProyectadoAnualMap.get('ACT_CNFL_40001_0');
117
182
  const I10 = 0;
118
183
  for (let i = 1; i <= this.rango; i++) {
184
+ const variacion = (0, utils_1.ourParseFloat)(rowVariacionIngresos[`Monto${i}`]) / 100;
119
185
  if (i == 1) {
120
- rowIngresos[`Monto${i}`] = rowTotalIngresoM[`MontoTotal`] * (1 + rowVariacionIngresos[`Monto${i}`] + I10);
186
+ const totalIngresos = (0, utils_1.ourParseFloat)(rowTotalIngresoM[`MontoTotal`]);
187
+ rowIngresos[`Monto${i}`] = totalIngresos * (1 + variacion + I10);
121
188
  }
122
189
  else {
123
- rowIngresos[`Monto${i}`] = rowIngresos[`Monto${i - 1}`] * (1 + rowVariacionIngresos[`Monto${i}`] + I10);
190
+ const anterior = (0, utils_1.ourParseFloat)(rowIngresos[`Monto${i - 1}`]);
191
+ rowIngresos[`Monto${i}`] = anterior * (1 + variacion + I10);
124
192
  }
125
- rowIngresos[`Monto${i}`] = Math.round(rowIngresos[`Monto${i}`] * 100) / 100;
126
193
  }
127
194
  if (this.data.TipoConsolidad == 'GANADERIA' &&
128
195
  this.data.ParametrosEngorde.Conclusion == 'DESARROLLO_HATO') {
129
196
  for (let i = 1; i <= this.rango; i++) {
130
- rowIngresos[`Monto${i}`] = this.data.ParametrosEngorde.SumaDesarrolloAnual[`C-${i}`] *
131
- (1 + rowVariacionIngresos[`Monto${i}`] + I10);
132
- rowIngresos[`Monto${i}`] = Math.round(rowIngresos[`Monto${i}`] * 100) / 100;
197
+ rowIngresos[`Monto${i}`] =
198
+ this.data.ParametrosEngorde.SumaDesarrolloAnual[`C-${i}`] *
199
+ (1 + rowVariacionIngresos[`Monto${i}`] + I10);
200
+ rowIngresos[`Monto${i}`] =
201
+ Math.round(rowIngresos[`Monto${i}`] * 100) / 100;
133
202
  }
134
203
  }
135
204
  };
@@ -139,24 +208,38 @@ class FlujoConstructor {
139
208
  const rowCosto = this.data.FlujoProyectadoAnualMap.get('ACT_CNFL_50001_0');
140
209
  const rowTotalIngresoM = this.data.FlujoProyectadoMensualMap.get('ACT_CNFL_49000_0');
141
210
  for (let i = 1; i <= this.rango; i++) {
211
+ const variacion = (0, utils_1.ourParseFloat)(rowVariacionCostos[`Monto${i}`]) / 100;
142
212
  if (i == 1) {
143
- rowCosto[`Monto1`] = (rowIngresos[`Monto1`] * rowCosto.MontoCajaPercent / 100) + (1 + rowVariacionCostos[`Monto${i}`]);
213
+ const valorSupuestosCosto = (0, utils_1.ourParseFloat)(this.data.Supuestos.at(0)?.ValorFlujo);
214
+ rowCosto['MontoCajaPercent'] = valorSupuestosCosto;
215
+ rowCosto[`Monto1`] =
216
+ (((0, utils_1.ourParseFloat)(rowIngresos[`Monto1`]) *
217
+ valorSupuestosCosto) /
218
+ 100) *
219
+ (1 + variacion);
144
220
  }
145
221
  else {
146
- rowCosto[`Monto${i}`] = rowIngresos[`Monto${i - 1}`] * (1 + rowVariacionCostos[`Monto${i}`]);
222
+ rowCosto[`Monto${i}`] =
223
+ (0, utils_1.ourParseFloat)(rowCosto[`Monto${i - 1}`]) * (1 + variacion);
147
224
  }
148
- rowCosto[`Monto${i}`] = Math.round(rowCosto[`Monto${i}`] * 100) / 100;
149
225
  }
150
226
  if (this.data.TipoConsolidad == 'GANADERIA' &&
151
227
  this.data.ParametrosEngorde.Conclusion != 'DESARROLLO_HATO') {
152
228
  for (let i = 1; i <= this.rango; i++) {
153
229
  if (i == 1) {
154
- rowCosto[`Monto1`] = (rowTotalIngresoM[`MontoTotal`] * rowCosto.MontoCajaPercent / 100) * (1 + rowVariacionCostos[`Monto${i}`]);
230
+ rowCosto[`Monto1`] =
231
+ ((rowTotalIngresoM[`MontoTotal`] *
232
+ rowCosto.MontoCajaPercent) /
233
+ 100) *
234
+ (1 + rowVariacionCostos[`Monto${i}`]);
155
235
  }
156
236
  else {
157
- rowCosto[`Monto${i}`] = rowIngresos[`Monto${i - 1}`] * (1 + rowVariacionCostos[`Monto${i}`]);
237
+ rowCosto[`Monto${i}`] =
238
+ rowIngresos[`Monto${i - 1}`] *
239
+ (1 + rowVariacionCostos[`Monto${i}`]);
158
240
  }
159
- rowCosto[`Monto${i}`] = Math.round(rowCosto[`Monto${i}`] * 100) / 100;
241
+ rowCosto[`Monto${i}`] =
242
+ Math.round(rowCosto[`Monto${i}`] * 100) / 100;
160
243
  }
161
244
  }
162
245
  };
@@ -165,21 +248,27 @@ class FlujoConstructor {
165
248
  const rowVariacionGastos = this.data.FlujoProyectadoAnualMap.get('ACT_CNFL_30003_0');
166
249
  const rowGasto = this.data.FlujoProyectadoAnualMap.get('ACT_CNFL_60001_0');
167
250
  for (let i = 1; i <= this.rango; i++) {
251
+ const variacion = (0, utils_1.ourParseFloat)(rowVariacionGastos[`Monto${i}`]) / 100;
168
252
  if (i == 1) {
169
- rowGasto[`Monto1`] = (rowIngresos[`Monto1`] *
170
- rowGasto.MontoCajaPercent / 100) + (1 + rowVariacionGastos[`Monto${i}`]);
253
+ const valorSupuestosGasto = (0, utils_1.ourParseFloat)(this.data.Supuestos.at(1)?.ValorFlujo);
254
+ rowGasto['MontoCajaPercent'] = valorSupuestosGasto;
255
+ rowGasto[`Monto1`] =
256
+ (((0, utils_1.ourParseFloat)(rowIngresos[`Monto1`]) *
257
+ valorSupuestosGasto) /
258
+ 100) *
259
+ (1 + variacion);
171
260
  }
172
261
  else {
173
- rowGasto[`Monto${i}`] = rowIngresos[`Monto${i - 1}`] * (1 + rowVariacionGastos[`Monto${i}`]);
262
+ rowGasto[`Monto${i}`] =
263
+ (0, utils_1.ourParseFloat)(rowGasto[`Monto${i - 1}`]) * (1 + variacion);
174
264
  }
175
- rowGasto[`Monto${i}`] = Math.round(rowGasto[`Monto${i}`] * 100) / 100;
176
265
  }
177
266
  };
178
267
  agregarQuitarClones = () => {
179
- let filter = this.data.FlujoProyectadoMensual.filter((item) => item.Clasificador == 'DETL' || item.Clasificador == 'HABM');
268
+ const filter = this.data.FlujoProyectadoMensual.filter((item) => item.Clasificador == 'DETL' || item.Clasificador == 'HABM');
180
269
  filter.map((item) => {
181
270
  if (!this.mapObject.has(`${item.RubroId}_CLONE_${item.UUID}`)) {
182
- let newItem = {
271
+ const newItem = {
183
272
  ActividadId: item.ActividadId,
184
273
  RubroId: item.RubroId,
185
274
  RubroPadreId: item.RubroPadreId,
@@ -191,7 +280,7 @@ class FlujoConstructor {
191
280
  Comprar: item.Comprar,
192
281
  Variable: item.Variable,
193
282
  IndicadorABM: item.IndicadorABM,
194
- MontoCajaPercent: item.MontoCajaPercent,
283
+ MontoCajaPercent: item.MontoCajaPercent
195
284
  };
196
285
  for (let i = 1; i <= this.rango; i++) {
197
286
  newItem[`Monto${i}`] = 0;
@@ -200,19 +289,22 @@ class FlujoConstructor {
200
289
  this.mapObject.set(`${item.RubroId}_CLONE_${item.UUID}`, newItem);
201
290
  }
202
291
  });
203
- let anuales = this.array.filter((item) => item.Clasificador == 'DETL' || item.Clasificador == 'HABM');
204
- for (let anualItem of anuales) {
205
- let key = `${anualItem.RubroId}_${anualItem.UUID}`.replace('_CLONE', '');
206
- if (!this.data.FlujoProyectadoMensualMap.has(key) && anualItem.UUID) {
207
- this.data.FlujoProyectadoAnual = this.data.FlujoProyectadoAnual.filter((item) => item.UUID != anualItem.UUID);
292
+ const anuales = this.array.filter((item) => item.Clasificador == 'DETL' || item.Clasificador == 'HABM');
293
+ for (const anualItem of anuales) {
294
+ const key = `${anualItem.RubroId}_${anualItem.UUID}`.replace('_CLONE', '');
295
+ if (!this.data.FlujoProyectadoMensualMap.has(key) &&
296
+ anualItem.UUID) {
297
+ this.data.FlujoProyectadoAnual =
298
+ this.data.FlujoProyectadoAnual.filter((item) => item.UUID != anualItem.UUID);
208
299
  }
209
300
  }
210
301
  };
211
302
  moverDetalledesdeMensual = () => {
212
- let filter = this.data.FlujoProyectadoMensual.filter((item) => item.RubroId == 'ACT_CNFL_61001' || item.RubroId == 'ACT_CNFL_73000');
303
+ const filter = this.data.FlujoProyectadoMensual.filter((item) => item.RubroId == 'ACT_CNFL_61001' ||
304
+ item.RubroId == 'ACT_CNFL_73000');
213
305
  filter.map((item) => {
214
306
  if (this.mapObject.has(`${item.RubroId}_CLONE_${item.UUID}`)) {
215
- let detalle = this.mapObject.get(`${item.RubroId}_CLONE_${item.UUID}`);
307
+ const detalle = this.mapObject.get(`${item.RubroId}_CLONE_${item.UUID}`);
216
308
  if (detalle.Monto1 == 0)
217
309
  detalle.Monto1 = item.MontoTotal;
218
310
  }
@@ -220,129 +312,172 @@ class FlujoConstructor {
220
312
  };
221
313
  calcularTotalDetalle = (sumandosArray, total) => {
222
314
  const rows = this.array.filter((item) => sumandosArray.includes(item.RubroId) && item.Comprar == 'NO');
223
- let destino = this.mapObject.get(`${total}_0`);
315
+ const destino = this.mapObject.get(`${total}_0`);
224
316
  rows.map((item) => {
225
317
  for (let i = 1; i <= this.rango; i++) {
226
318
  destino[`Monto${i}`] += parseFloat(item[`Monto${i}`]);
227
- destino[`Monto${i}`] = Math.round(destino[`Monto${i}`] * 100) / 100;
319
+ destino[`Monto${i}`] =
320
+ Math.round(destino[`Monto${i}`] * 100) / 100;
228
321
  }
229
322
  });
230
323
  };
231
324
  calcularPorcentajeIngresCostos = () => {
232
- const rowTotalIngresoM = this.data.FlujoProyectadoMensualMap.get('ACT_CNFL_49000_0');
233
- let costos = this.array.filter((item) => item.RubroId === 'ACT_CNFL_50001' || item.RubroId === 'ACT_CNFL_50002' ||
234
- item.RubroId === 'ACT_CNFL_60001' || item.RubroId === 'ACT_CNFL_60002');
235
- costos.map((item) => {
236
- if (rowTotalIngresoM.MontoTotal != 0)
237
- item.MontoCajaPercent = Math.round(parseFloat(item.MontoTotal) /
238
- parseFloat(rowTotalIngresoM.MontoTotal) * 100);
239
- else
240
- item.MontoCajaPercent = 0;
241
- if (item.RubroId == 'ACT_CNFL_50001' || item.RubroId === 'ACT_CNFL_60001') {
242
- this.data.FlujoProyectadoAnualMap.get(`${item.RubroId}_0`).MontoCajaPercent = item.MontoCajaPercent;
325
+ const filaIngresos = this.array.find((el) => el.RubroId === 'ACT_CNFL_40001');
326
+ const filaCostos = this.array.find((el) => el.RubroId === 'ACT_CNFL_50001');
327
+ const filaGastos = this.array.find((el) => el.RubroId === 'ACT_CNFL_60001');
328
+ if (filaCostos) {
329
+ filaCostos.MontoCajaPercent = Math.abs(((0, utils_1.ourParseFloat)(filaCostos.MontoTotal) /
330
+ (0, utils_1.ourParseFloat)(filaIngresos?.MontoTotal)) *
331
+ 100);
332
+ }
333
+ if (filaGastos) {
334
+ filaGastos.MontoCajaPercent = Math.abs(((0, utils_1.ourParseFloat)(filaGastos.MontoTotal) /
335
+ (0, utils_1.ourParseFloat)(filaIngresos?.MontoTotal)) *
336
+ 100);
337
+ }
338
+ const otrosIngresos = this.array.filter((el) => el.RubroId === 'ACT_CNFL_40002' && el.IndicadorABM !== 'B');
339
+ const otrosCostos = this.array.filter((el) => el.RubroId === 'ACT_CNFL_50002' && el.IndicadorABM !== 'B');
340
+ otrosCostos.forEach((el, i) => {
341
+ const otroIngresoMonto = (0, utils_1.ourParseFloat)(otrosIngresos.at(i)?.MontoTotal);
342
+ if (otroIngresoMonto > 0) {
343
+ el.MontoCajaPercent = Math.abs(((0, utils_1.ourParseFloat)(el.MontoTotal) / otroIngresoMonto) * 100);
344
+ }
345
+ });
346
+ const otrosGastos = this.array.filter((el) => el.RubroId === 'ACT_CNFL_60002' && el.IndicadorABM !== 'B');
347
+ otrosGastos.forEach((el, i) => {
348
+ const otroIngresoMonto = (0, utils_1.ourParseFloat)(otrosIngresos.at(i)?.MontoTotal);
349
+ if (otroIngresoMonto > 0) {
350
+ el.MontoCajaPercent = Math.abs(((0, utils_1.ourParseFloat)(el.MontoTotal) / otroIngresoMonto) * 100);
243
351
  }
244
352
  });
245
353
  this.data.FlujoProyectadoMensualMap.get('ACT_CNFL_82300_0').MontoCajaPercent = this.data.CajaInicial;
246
354
  };
247
355
  calcularOtrosIngresosAnuales = () => {
248
356
  const rowOtrosIngresosM = this.data.FlujoProyectadoMensualMap.get('ACT_CNFL_70001_0');
249
- let rowOtrosIngresosA = this.mapObject.get('ACT_CNFL_70001_0');
357
+ const rowOtrosIngresosA = this.mapObject.get('ACT_CNFL_70001_0');
250
358
  for (let i = 1; i <= this.rango; i++) {
251
359
  rowOtrosIngresosA[`Monto${i}`] = rowOtrosIngresosM.MontoTotal;
252
- rowOtrosIngresosA[`Monto${i}`] = Math.round(rowOtrosIngresosA[`Monto${i}`] * 100) / 100;
360
+ rowOtrosIngresosA[`Monto${i}`] =
361
+ Math.round(rowOtrosIngresosA[`Monto${i}`] * 100) / 100;
253
362
  }
254
363
  };
255
364
  calcularGastosFamiliares = () => {
256
365
  const rowOtrosIngresosM = this.data.FlujoProyectadoMensualMap.get('ACT_CNFL_70002_0');
257
- let rowGastosFamiliares = this.mapObject.get('ACT_CNFL_70002_0');
366
+ const rowGastosFamiliares = this.mapObject.get('ACT_CNFL_70002_0');
258
367
  if (!rowGastosFamiliares.MontoCajaPercent)
259
368
  rowGastosFamiliares.MontoCajaPercent = 0;
260
369
  for (let i = 1; i <= this.rango; i++) {
261
370
  if (i == 1) {
262
- rowGastosFamiliares[`Monto${i}`] = rowOtrosIngresosM.MontoTotal *
263
- (1 + (rowGastosFamiliares.MontoCajaPercent / 100));
371
+ rowGastosFamiliares[`Monto${i}`] =
372
+ rowOtrosIngresosM.MontoTotal *
373
+ (1 + rowGastosFamiliares.MontoCajaPercent / 100);
264
374
  }
265
375
  else {
266
- rowGastosFamiliares[`Monto${i}`] = rowGastosFamiliares[`Monto${i - 1}`] *
267
- (1 + (rowGastosFamiliares.MontoCajaPercent / 100));
376
+ rowGastosFamiliares[`Monto${i}`] =
377
+ rowGastosFamiliares[`Monto${i - 1}`] *
378
+ (1 + rowGastosFamiliares.MontoCajaPercent / 100);
268
379
  }
269
- rowGastosFamiliares[`Monto${i}`] = Math.round(rowGastosFamiliares[`Monto${i}`] * 100) / 100;
380
+ rowGastosFamiliares[`Monto${i}`] =
381
+ Math.round(rowGastosFamiliares[`Monto${i}`] * 100) / 100;
270
382
  }
271
383
  };
272
384
  calcularFlujoInversiones = () => {
273
385
  const rowInversionM = this.data.FlujoProyectadoMensualMap.get('ACT_CNFL_80001_0');
274
386
  const rowAportePropioM = this.data.FlujoProyectadoMensualMap.get('ACT_CNFL_80002_0');
275
- let rowInversion = this.mapObject.get('ACT_CNFL_80001_0');
276
- let rowAportePropio = this.mapObject.get('ACT_CNFL_80002_0');
387
+ const rowInversion = this.mapObject.get('ACT_CNFL_80001_0');
388
+ const rowAportePropio = this.mapObject.get('ACT_CNFL_80002_0');
277
389
  if (rowInversion.Monto1 > 0)
278
390
  rowInversion.Monto1 = rowInversionM.MontoTotal;
279
391
  if (rowAportePropio.Monto1 > 0)
280
392
  rowAportePropio.Monto1 = rowAportePropioM.MontoTotal;
281
393
  };
282
394
  calcularFlujoAcumuladoAnual = () => {
283
- let flujoAcumulado = this.mapObject.get('ACT_CNFL_82300_0');
284
- let excedente = this.mapObject.get('ACT_CNFL_82110_0');
285
- let saldoInicialCaja = this.mapObject.get('ACT_CNFL_82120_0');
395
+ const flujoAcumulado = this.mapObject.get('ACT_CNFL_82300_0');
396
+ const excedente = this.mapObject.get('ACT_CNFL_82110_0');
397
+ const saldoInicialCaja = this.mapObject.get('ACT_CNFL_82120_0');
286
398
  saldoInicialCaja.Monto1 = this.data.CajaInicial;
287
399
  for (let i = 1; i <= this.rango; i++) {
288
400
  if (i == 1) {
289
- flujoAcumulado[`Monto${i}`] = parseFloat(excedente[`Monto${i}`]) +
290
- parseFloat(saldoInicialCaja[`Monto${i}`]);
401
+ flujoAcumulado[`Monto${i}`] =
402
+ parseFloat(excedente[`Monto${i}`]) +
403
+ parseFloat(saldoInicialCaja[`Monto${i}`]);
291
404
  }
292
405
  else {
293
- flujoAcumulado[`Monto${i}`] = parseFloat(flujoAcumulado[`Monto${i - 1}`]) +
294
- parseFloat(excedente[`Monto${i}`]);
406
+ flujoAcumulado[`Monto${i}`] =
407
+ parseFloat(flujoAcumulado[`Monto${i - 1}`]) +
408
+ parseFloat(excedente[`Monto${i}`]);
295
409
  }
296
- flujoAcumulado[`Monto${i}`] = Math.round(flujoAcumulado[`Monto${i}`] * 100) / 100;
297
410
  }
298
411
  };
299
412
  adicionarCapacidadPago = () => {
300
- const utilidadNeta = this.mapObject.get('ACT_CNFL_82300_0');
301
- const cuotaBdp = this.mapObject.get('ACT_CNFL_82300_0');
302
- let result = {};
413
+ const utilidadNeta = this.mapObject.get('ACT_CNFL_79999_0');
414
+ const cuotaBdp = this.mapObject.get('ACT_CNFL_81290_0');
415
+ const result = {};
303
416
  let acumulado = 0;
417
+ let acumuladoCapacidad = 0;
304
418
  for (let i = 2; i <= this.rango; i++) {
305
- if (utilidadNeta[`Monto${i}`] && utilidadNeta[`Monto${i}`] > 0)
306
- result[`Monto${i}`] = cuotaBdp[`Monto${i}`] / utilidadNeta[`Monto${i}`];
307
- else
419
+ const utilidad = (0, utils_1.ourParseFloat)(utilidadNeta?.[`Monto${i - 1}`]);
420
+ if (utilidad) {
421
+ result[`Monto${i}`] =
422
+ Math.abs((0, utils_1.ourParseFloat)(cuotaBdp?.[`Monto${i - 1}`]) / utilidad) * 100;
423
+ }
424
+ else {
308
425
  result[`Monto${i}`] = 0;
309
- result[`Monto${i}`] = Math.round(result[`Monto${i}`] * 100) / 100;
310
- acumulado += result[`Monto${i}`];
426
+ }
427
+ if (i <= this.rango - 1)
428
+ acumulado += result[`Monto${i}`];
429
+ if (i <= 10)
430
+ acumuladoCapacidad += result[`Monto${i}`];
311
431
  }
312
- result.PorcentajePromedio = Math.round(acumulado / this.rango * 100) / 100;
313
- result.CapacidadMaxima = (acumulado / (this.rango - 1)) > 80 ? 'VERDADERO' : 'FALSO';
432
+ const plazoAños = (0, utils_1.ourParseFloat)(this.data.Parametros.PlazoCredito);
433
+ result.PorcentajePromedio = plazoAños > 0 ? acumulado / plazoAños : 0;
434
+ result.CapacidadMaxima =
435
+ acumuladoCapacidad / 10 <= 80 ? 'VERDADERO' : 'FALSO';
314
436
  this.data.Pie = result;
315
437
  };
316
438
  getFlujoEfectivo = () => {
317
- const tasaDescuento = Math.round(parseFloat(this.data.Parametros.TasaDescuento) * 100) / 100;
439
+ const tasaDescuento = (0, utils_1.ourParseFloat)(this.data.Parametros.TasaDescuento) / 100;
318
440
  const totalFlujoInversiones = this.data.FlujoProyectadoAnualMap.get('ACT_CNFL_80900_0');
319
441
  const excedente = this.data.FlujoProyectadoAnualMap.get('ACT_CNFL_82110_0');
320
- let result = [];
321
- let resultMap = new Map();
442
+ const result = [];
443
+ const resultMap = new Map();
322
444
  let indiceRentabilidad = 0;
323
445
  for (let i = 0; i <= this.rango; i++) {
324
446
  let value = {};
325
447
  if (i == 0) {
326
- value = { Anno: i, FlujoDeEfectivo: totalFlujoInversiones[`Monto1`] * -1, FlujoEfectivoDescontado: 0 };
448
+ value = {
449
+ Anno: i,
450
+ FlujoDeEfectivo: -totalFlujoInversiones[`Monto1`],
451
+ FlujoEfectivoDescontado: 0
452
+ };
327
453
  result.push(value);
328
454
  resultMap.set(i, value);
329
455
  }
330
456
  else {
331
- value = { Anno: i, FlujoDeEfectivo: excedente[`Monto${i}`], FlujoEfectivoDescontado: 0 };
457
+ value = {
458
+ Anno: i,
459
+ FlujoDeEfectivo: excedente[`Monto${i}`],
460
+ FlujoEfectivoDescontado: 0
461
+ };
332
462
  result.push(value);
333
463
  resultMap.set(i, value);
334
464
  }
335
- value.FlujoEfectivoDescontado = value.FlujoDeEfectivo / Math.pow(1 + tasaDescuento, i);
336
- indiceRentabilidad += value.FlujoDeEfectivo / Math.pow(1 + tasaDescuento, i);
465
+ const valueFlujo = value.FlujoDeEfectivo / Math.pow(1 + tasaDescuento, i);
466
+ value.FlujoEfectivoDescontado = valueFlujo;
467
+ if (i > 0) {
468
+ indiceRentabilidad += valueFlujo;
469
+ }
337
470
  }
338
- indiceRentabilidad = Math.round((indiceRentabilidad / totalFlujoInversiones[`Monto1`]) * 100) / 100;
339
- const VAN = calcularVAN(tasaDescuento, result.filter((item => item.Anno > 0)).
340
- map((item) => item.FlujoDeEfectivo), totalFlujoInversiones[`Monto1`]);
341
- const TIR = calcularTIR(result.map(item => item.FlujoDeEfectivo), totalFlujoInversiones[`Monto1`]);
342
- let vars = [{ Descripcion: 'Tasa de descuento', Valor: tasaDescuento },
471
+ indiceRentabilidad /= -totalFlujoInversiones[`Monto1`];
472
+ const VAN = calcularVAN(tasaDescuento, result
473
+ .filter((item) => item.Anno > 0)
474
+ .map((item) => item.FlujoDeEfectivo), totalFlujoInversiones[`Monto1`]);
475
+ const TIR = calcularTIR(result.map((item) => item.FlujoDeEfectivo), totalFlujoInversiones[`Monto1`]);
476
+ const vars = [
477
+ { Descripcion: 'Tasa de descuento', Valor: tasaDescuento },
343
478
  { Descripcion: 'VAN', Valor: VAN },
344
479
  { Descripcion: 'TIR', Valor: TIR },
345
- { Descripcion: 'Índice de Rentabilidad', Valor: indiceRentabilidad },
480
+ { Descripcion: 'Índice de Rentabilidad', Valor: indiceRentabilidad }
346
481
  ];
347
482
  this.data.FlujoDeEfectivo = result;
348
483
  this.data.FlujoEfectivoVars = vars;
@@ -360,8 +495,8 @@ const calcularTIR = (flujosDeCaja, inversionInicial, precision = 1e-6) => {
360
495
  let tasaMin = 0;
361
496
  let tasaMax = 1;
362
497
  let tasaMed = (tasaMin + tasaMax) / 2;
363
- while ((tasaMax - tasaMin) > precision) {
364
- let VAN = calcularVAN(tasaMed, flujosDeCaja, inversionInicial);
498
+ while (tasaMax - tasaMin > precision) {
499
+ const VAN = calcularVAN(tasaMed, flujosDeCaja, inversionInicial);
365
500
  if (VAN > 0) {
366
501
  tasaMin = tasaMed;
367
502
  }