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.
Files changed (50) hide show
  1. package/build/context.js +1 -0
  2. package/build/index.d.ts +2 -0
  3. package/build/index.js +3 -1
  4. package/build/models/eeff/admFinanciera/index.d.ts +144 -0
  5. package/build/models/eeff/admFinanciera/index.js +26 -0
  6. package/build/strategies/agriculture/balanceAgr.strategy.js +1 -0
  7. package/build/strategies/agriculture/costos.detail/costosCalc.js +1 -1
  8. package/build/strategies/agriculture/flujoProyAgr.strategy.js +3 -2
  9. package/build/strategies/agriculture/ventas.detail/ventas.calc.js +2 -1
  10. package/build/strategies/analisisFinancieros.strategy.js +20 -22
  11. package/build/strategies/balance.strategy.js +14 -2
  12. package/build/strategies/common/analisisFinCalculos/analisisGrafico.calc.js +47 -45
  13. package/build/strategies/common/analisisFinCalculos/ratios.calc.js +158 -157
  14. package/build/strategies/common/balance.calc.js +3 -1
  15. package/build/strategies/common/balanceCalculos/balanceAux.calc.js +11 -1
  16. package/build/strategies/common/balanceCalculos/flujoAux.calc.js +2 -11
  17. package/build/strategies/common/flujoCalculos/flujoConstructor.js +313 -308
  18. package/build/strategies/eeff/admFinanciera/amortizaciones.d.ts +8 -0
  19. package/build/strategies/eeff/admFinanciera/amortizaciones.js +31 -0
  20. package/build/strategies/eeff/admFinanciera/aplicacionesHandler.d.ts +16 -0
  21. package/build/strategies/eeff/admFinanciera/aplicacionesHandler.js +175 -0
  22. package/build/strategies/eeff/admFinanciera/lineasMixtasHandler.d.ts +7 -0
  23. package/build/strategies/eeff/admFinanciera/lineasMixtasHandler.js +40 -0
  24. package/build/strategies/eeff/admFinanciera/prestamoBajoLineaHandler.d.ts +13 -0
  25. package/build/strategies/eeff/admFinanciera/prestamoBajoLineaHandler.js +75 -0
  26. package/build/strategies/eeff/admFinanciera/prestamoDirectoHandler.d.ts +26 -0
  27. package/build/strategies/eeff/admFinanciera/prestamoDirectoHandler.js +267 -0
  28. package/build/strategies/eeff/admFinanciera/prestamoLeasingHandler.d.ts +20 -0
  29. package/build/strategies/eeff/admFinanciera/prestamoLeasingHandler.js +162 -0
  30. package/build/strategies/eeff/admFinanciera/proyeccionPrestamosDirectosHandler.d.ts +27 -0
  31. package/build/strategies/eeff/admFinanciera/proyeccionPrestamosDirectosHandler.js +219 -0
  32. package/build/strategies/eeff/admFinanciera/utils.d.ts +96 -0
  33. package/build/strategies/eeff/admFinanciera/utils.js +209 -0
  34. package/build/strategies/eeff/admFinanciera.strategy.d.ts +14 -0
  35. package/build/strategies/eeff/admFinanciera.strategy.js +139 -0
  36. package/build/strategies/eeff/balanceEEFF.strategy.js +3 -2
  37. package/build/strategies/eeff/flujoProyEEFF.strategy.js +3 -2
  38. package/build/strategies/general/balanceGeneral.strategy.js +2 -1
  39. package/build/strategies/general/flujoProyGeneral.strategy.js +2 -1
  40. package/build/strategies/pecuary/balancePec.strategy.js +7 -6
  41. package/build/strategies/pecuary/desarrollo.detail/desarrolloCalc.js +11 -3
  42. package/build/strategies/pecuary/desarrollo.strategy.js +2 -2
  43. package/build/strategies/pecuary/flujoProyPec.strategy.js +7 -6
  44. package/build/strategies/pecuary/ventas.detail/estacionalidadCalc.js +7 -1
  45. package/build/strategies/pecuary/ventas.detail/ventasIngresosCalc.js +7 -1
  46. package/build/strategies/production/balancePrd.strategy.js +7 -6
  47. package/build/strategies/production/costos.detail/costosCalc.js +1 -1
  48. package/build/strategies/production/flujoProyPrd.strategy.js +7 -6
  49. package/package.json +26 -21
  50. package/tsconfig.json +1 -1
@@ -1,347 +1,352 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  class FlujoConstructor {
4
+ tipo;
5
+ rango;
6
+ mapObject;
7
+ array;
8
+ data;
4
9
  constructor(tipo, data) {
5
- this.calcularFlujo = () => {
6
- this.limpiarCamposCalculados();
7
- if (this.tipo == 'ANUAL') {
8
- this.proyectarIngreso();
9
- this.proyectarCosto();
10
- this.proyectarGasto();
11
- this.agregarQuitarClones();
12
- // this.moverDetalledesdeMensual()
13
- this.calcularTotalDetalle(['ACT_CNFL_73000'], 'ACT_CNFL_73900');
14
- this.calcularTotalDetalle(['ACT_CNFL_61001'], 'ACT_CNFL_61900');
15
- this.calcularOtrosIngresosAnuales();
16
- this.calcularGastosFamiliares();
17
- this.calcularFlujoInversiones();
10
+ this.tipo = tipo;
11
+ if (tipo == 'MENSUAL') {
12
+ this.rango = 12;
13
+ this.mapObject = data.FlujoProyectadoMensualMap;
14
+ this.array = data.FlujoProyectadoMensual;
15
+ this.data = data;
16
+ }
17
+ else {
18
+ this.rango = data.DatosEvaluacion.CantidadProyeccion;
19
+ this.mapObject = data.FlujoProyectadoAnualMap;
20
+ this.array = data.FlujoProyectadoAnual;
21
+ this.data = data;
22
+ }
23
+ }
24
+ calcularFlujo = () => {
25
+ this.limpiarCamposCalculados();
26
+ if (this.tipo == 'ANUAL') {
27
+ this.proyectarIngreso();
28
+ this.proyectarCosto();
29
+ this.proyectarGasto();
30
+ this.agregarQuitarClones();
31
+ // this.moverDetalledesdeMensual()
32
+ this.calcularTotalDetalle(['ACT_CNFL_73000'], 'ACT_CNFL_73900');
33
+ this.calcularTotalDetalle(['ACT_CNFL_61001'], 'ACT_CNFL_61900');
34
+ this.calcularOtrosIngresosAnuales();
35
+ this.calcularGastosFamiliares();
36
+ this.calcularFlujoInversiones();
37
+ }
38
+ this.calcularTotal(['ACT_CNFL_40001', 'ACT_CNFL_40002'], 'ACT_CNFL_49000'); //Total Ingresos
39
+ this.calcularTotal(['ACT_CNFL_50001', 'ACT_CNFL_50002'], 'ACT_CNFL_59000'); //Total Costos
40
+ this.calcularResta('ACT_CNFL_49000', 'ACT_CNFL_59000', 'ACT_CNFL_59999'); //Utilidad Bruta
41
+ this.calcularTotal(['ACT_CNFL_61001'], 'ACT_CNFL_61900'); //subtotal Gastos Operativos
42
+ this.calcularTotal(['ACT_CNFL_60001', 'ACT_CNFL_60002', 'ACT_CNFL_61900'], 'ACT_CNFL_69000'); //Total Gastos Operativos
43
+ this.calcularResta('ACT_CNFL_59999', 'ACT_CNFL_69000', 'ACT_CNFL_69999'); //Utilidad Operativa
44
+ this.calcularResta('ACT_CNFL_70001', 'ACT_CNFL_70002', 'ACT_CNFL_72000'); //Total Otros Ingresos e Egresos
45
+ this.calcularTotal(['ACT_CNFL_73000'], 'ACT_CNFL_73900');
46
+ 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
48
+ this.calcularTotal(['ACT_CNFL_80001', 'ACT_CNFL_80002'], 'ACT_CNFL_80900'); //Total Flujo de Inversión
49
+ this.calcularTotal(['ACT_CNFL_81001'], 'ACT_CNFL_81090'); //subtotal Ingresos de Efectivo
50
+ this.calcularTotal(['ACT_CNFL_81200'], 'ACT_CNFL_81290'); //subtotal Cuota BDP
51
+ this.calcularResta('ACT_CNFL_81090', 'ACT_CNFL_81290', 'ACT_CNFL_82100'); //Total Flujo financiero
52
+ if (this.tipo == 'MENSUAL') {
53
+ this.calcularTotal(['ACT_CNFL_79999', 'ACT_CNFL_80900', 'ACT_CNFL_82100'], 'ACT_CNFL_82200');
54
+ this.calcularFlujoAcumuladoMensual(this.data);
55
+ }
56
+ else if (this.tipo == 'ANUAL') {
57
+ this.calcularFlujoAcumuladoAnual();
58
+ this.calcularTotal(['ACT_CNFL_79999', 'ACT_CNFL_80900', 'ACT_CNFL_82100'], 'ACT_CNFL_82110');
59
+ this.adicionarCapacidadPago();
60
+ this.getFlujoEfectivo();
61
+ }
62
+ this.array.map((item) => {
63
+ item.MontoTotal = 0;
64
+ for (let i = 1; i <= this.rango; i++) {
65
+ item.MontoTotal += parseFloat(item[`Monto${i}`]);
18
66
  }
19
- this.calcularTotal(['ACT_CNFL_40001', 'ACT_CNFL_40002'], 'ACT_CNFL_49000'); //Total Ingresos
20
- this.calcularTotal(['ACT_CNFL_50001', 'ACT_CNFL_50002'], 'ACT_CNFL_59000'); //Total Costos
21
- this.calcularResta('ACT_CNFL_49000', 'ACT_CNFL_59000', 'ACT_CNFL_59999'); //Utilidad Bruta
22
- this.calcularTotal(['ACT_CNFL_61001'], 'ACT_CNFL_61900'); //subtotal Gastos Operativos
23
- this.calcularTotal(['ACT_CNFL_60001', 'ACT_CNFL_60002', 'ACT_CNFL_61900'], 'ACT_CNFL_69000'); //Total Gastos Operativos
24
- this.calcularResta('ACT_CNFL_59999', 'ACT_CNFL_69000', 'ACT_CNFL_69999'); //Utilidad Operativa
25
- this.calcularResta('ACT_CNFL_70001', 'ACT_CNFL_70002', 'ACT_CNFL_72000'); //Total Otros Ingresos e Egresos
26
- this.calcularTotal(['ACT_CNFL_73000'], 'ACT_CNFL_73900');
27
- this.calcularResta('ACT_CNFL_72000', 'ACT_CNFL_73900', 'ACT_CNFL_79000'); //Resultado Otros Ingresos e Egresos
28
- this.calcularResta('ACT_CNFL_69999', 'ACT_CNFL_79000', 'ACT_CNFL_79999'); //Utilidad Neta
29
- this.calcularTotal(['ACT_CNFL_80001', 'ACT_CNFL_80002'], 'ACT_CNFL_80900'); //Total Flujo de Inversión
30
- this.calcularTotal(['ACT_CNFL_81001'], 'ACT_CNFL_81090'); //subtotal Ingresos de Efectivo
31
- this.calcularTotal(['ACT_CNFL_81200'], 'ACT_CNFL_81290'); //subtotal Cuota BDP
32
- this.calcularResta('ACT_CNFL_81090', 'ACT_CNFL_81290', 'ACT_CNFL_82100'); //Total Flujo financiero
33
- if (this.tipo == 'MENSUAL') {
34
- this.calcularTotal(['ACT_CNFL_79999', 'ACT_CNFL_80900', 'ACT_CNFL_82100'], 'ACT_CNFL_82200');
35
- this.calcularFlujoAcumuladoMensual(this.data);
67
+ item.MontoTotal = Math.round(item.MontoTotal * 100) / 100;
68
+ });
69
+ if (this.tipo == 'MENSUAL') {
70
+ this.calcularPorcentajeIngresCostos();
71
+ }
72
+ };
73
+ limpiarCamposCalculados = () => {
74
+ let filter = this.array.filter(item => item.Clasificador == 'C');
75
+ filter.forEach((item) => {
76
+ for (let i = 1; i <= this.rango; i++) {
77
+ item[`Monto${i}`] = 0;
36
78
  }
37
- else if (this.tipo == 'ANUAL') {
38
- this.calcularFlujoAcumuladoAnual();
39
- this.calcularTotal(['ACT_CNFL_79999', 'ACT_CNFL_80900', 'ACT_CNFL_82100'], 'ACT_CNFL_82110');
40
- this.adicionarCapacidadPago();
41
- this.getFlujoEfectivo();
79
+ });
80
+ };
81
+ calcularFlujoAcumuladoMensual = (data) => {
82
+ let rowTotal = this.mapObject.get(`ACT_CNFL_82200_0`);
83
+ let rowAcumulado = this.mapObject.get(`ACT_CNFL_82300_0`);
84
+ for (let i = 1; i <= this.rango; i++) {
85
+ if (i == 1) {
86
+ rowAcumulado[`Monto${i}`] = parseFloat(rowTotal[`Monto${i}`]) + parseFloat(data.CajaInicial);
42
87
  }
43
- this.array.map((item) => {
44
- item.MontoTotal = 0;
45
- for (let i = 1; i <= this.rango; i++) {
46
- item.MontoTotal += parseFloat(item[`Monto${i}`]);
47
- }
48
- item.MontoTotal = Math.round(item.MontoTotal * 100) / 100;
49
- });
50
- if (this.tipo == 'MENSUAL') {
51
- this.calcularPorcentajeIngresCostos();
88
+ else {
89
+ rowAcumulado[`Monto${i}`] = rowTotal[`Monto${i}`] + rowAcumulado[`Monto${i - 1}`];
52
90
  }
53
- };
54
- this.limpiarCamposCalculados = () => {
55
- let filter = this.array.filter(item => item.Clasificador == 'C');
56
- filter.forEach((item) => {
57
- for (let i = 1; i <= this.rango; i++) {
58
- item[`Monto${i}`] = 0;
59
- }
60
- });
61
- };
62
- this.calcularFlujoAcumuladoMensual = (data) => {
63
- let rowTotal = this.mapObject.get(`ACT_CNFL_82200_0`);
64
- let rowAcumulado = this.mapObject.get(`ACT_CNFL_82300_0`);
65
- for (let i = 1; i <= this.rango; i++) {
66
- if (i == 1) {
67
- rowAcumulado[`Monto${i}`] = parseFloat(rowTotal[`Monto${i}`]) + parseFloat(data.CajaInicial);
68
- }
69
- else {
70
- rowAcumulado[`Monto${i}`] = rowTotal[`Monto${i}`] + rowAcumulado[`Monto${i - 1}`];
71
- }
72
- rowAcumulado[`Monto${i}`] = Math.round(rowAcumulado[`Monto${i}`] * 100) / 100;
73
- }
74
- };
75
- this.calcularTotal = (sumandosArray, total) => {
76
- const rows = this.array.filter((item) => sumandosArray.includes(item.RubroId));
77
- let destino = this.mapObject.get(`${total}_0`);
78
- rows.map((item) => {
79
- for (let i = 1; i <= this.rango; i++) {
80
- destino[`Monto${i}`] += parseFloat(item[`Monto${i}`]);
81
- destino[`Monto${i}`] = Math.round(destino[`Monto${i}`] * 100) / 100;
82
- }
83
- });
84
- };
85
- this.calcularResta = (positivoRubro, negativoRubro, destinoRubro) => {
86
- const positivo = this.mapObject.get(`${positivoRubro}_0`);
87
- const negativo = this.mapObject.get(`${negativoRubro}_0`);
88
- let destino = this.mapObject.get(`${destinoRubro}_0`);
91
+ rowAcumulado[`Monto${i}`] = Math.round(rowAcumulado[`Monto${i}`] * 100) / 100;
92
+ }
93
+ };
94
+ calcularTotal = (sumandosArray, total) => {
95
+ const rows = this.array.filter((item) => sumandosArray.includes(item.RubroId));
96
+ let destino = this.mapObject.get(`${total}_0`);
97
+ rows.map((item) => {
89
98
  for (let i = 1; i <= this.rango; i++) {
90
- destino[`Monto${i}`] = positivo[`Monto${i}`] - negativo[`Monto${i}`];
99
+ destino[`Monto${i}`] += parseFloat(item[`Monto${i}`]);
91
100
  destino[`Monto${i}`] = Math.round(destino[`Monto${i}`] * 100) / 100;
92
101
  }
93
- };
94
- this.proyectarIngreso = () => {
95
- const rowTotalIngresoM = this.data.FlujoProyectadoMensualMap.get('ACT_CNFL_49000_0');
96
- const rowVariacionIngresos = this.data.FlujoProyectadoAnualMap.get('ACT_CNFL_30001_0');
97
- const rowIngresos = this.data.FlujoProyectadoAnualMap.get('ACT_CNFL_40001_0');
98
- const I10 = 0;
102
+ });
103
+ };
104
+ calcularResta = (positivoRubro, negativoRubro, destinoRubro) => {
105
+ const positivo = this.mapObject.get(`${positivoRubro}_0`);
106
+ const negativo = this.mapObject.get(`${negativoRubro}_0`);
107
+ let destino = this.mapObject.get(`${destinoRubro}_0`);
108
+ for (let i = 1; i <= this.rango; i++) {
109
+ destino[`Monto${i}`] = positivo[`Monto${i}`] - negativo[`Monto${i}`];
110
+ destino[`Monto${i}`] = Math.round(destino[`Monto${i}`] * 100) / 100;
111
+ }
112
+ };
113
+ proyectarIngreso = () => {
114
+ const rowTotalIngresoM = this.data.FlujoProyectadoMensualMap.get('ACT_CNFL_49000_0');
115
+ const rowVariacionIngresos = this.data.FlujoProyectadoAnualMap.get('ACT_CNFL_30001_0');
116
+ const rowIngresos = this.data.FlujoProyectadoAnualMap.get('ACT_CNFL_40001_0');
117
+ const I10 = 0;
118
+ for (let i = 1; i <= this.rango; i++) {
119
+ if (i == 1) {
120
+ rowIngresos[`Monto${i}`] = rowTotalIngresoM[`MontoTotal`] * (1 + rowVariacionIngresos[`Monto${i}`] + I10);
121
+ }
122
+ else {
123
+ rowIngresos[`Monto${i}`] = rowIngresos[`Monto${i - 1}`] * (1 + rowVariacionIngresos[`Monto${i}`] + I10);
124
+ }
125
+ rowIngresos[`Monto${i}`] = Math.round(rowIngresos[`Monto${i}`] * 100) / 100;
126
+ }
127
+ if (this.data.TipoConsolidad == 'GANADERIA' &&
128
+ this.data.ParametrosEngorde.Conclusion == 'DESARROLLO_HATO') {
99
129
  for (let i = 1; i <= this.rango; i++) {
100
- if (i == 1) {
101
- rowIngresos[`Monto${i}`] = rowTotalIngresoM[`MontoTotal`] * (1 + rowVariacionIngresos[`Monto${i}`] + I10);
102
- }
103
- else {
104
- rowIngresos[`Monto${i}`] = rowIngresos[`Monto${i - 1}`] * (1 + rowVariacionIngresos[`Monto${i}`] + I10);
105
- }
130
+ rowIngresos[`Monto${i}`] = this.data.ParametrosEngorde.SumaDesarrolloAnual[`C-${i}`] *
131
+ (1 + rowVariacionIngresos[`Monto${i}`] + I10);
106
132
  rowIngresos[`Monto${i}`] = Math.round(rowIngresos[`Monto${i}`] * 100) / 100;
107
133
  }
108
- if (this.data.TipoConsolidad == 'GANADERIA' &&
109
- this.data.ParametrosEngorde.Conclusion == 'DESARROLLO_HATO') {
110
- for (let i = 1; i <= this.rango; i++) {
111
- rowIngresos[`Monto${i}`] = this.data.ParametrosEngorde.SumaDesarrolloAnual[`C-${i}`] *
112
- (1 + rowVariacionIngresos[`Monto${i}`] + I10);
113
- rowIngresos[`Monto${i}`] = Math.round(rowIngresos[`Monto${i}`] * 100) / 100;
114
- }
134
+ }
135
+ };
136
+ proyectarCosto = () => {
137
+ const rowIngresos = this.data.FlujoProyectadoAnualMap.get('ACT_CNFL_40001_0');
138
+ const rowVariacionCostos = this.data.FlujoProyectadoAnualMap.get('ACT_CNFL_30002_0');
139
+ const rowCosto = this.data.FlujoProyectadoAnualMap.get('ACT_CNFL_50001_0');
140
+ const rowTotalIngresoM = this.data.FlujoProyectadoMensualMap.get('ACT_CNFL_49000_0');
141
+ for (let i = 1; i <= this.rango; i++) {
142
+ if (i == 1) {
143
+ rowCosto[`Monto1`] = (rowIngresos[`Monto1`] * rowCosto.MontoCajaPercent / 100) + (1 + rowVariacionCostos[`Monto${i}`]);
144
+ }
145
+ else {
146
+ rowCosto[`Monto${i}`] = rowIngresos[`Monto${i - 1}`] * (1 + rowVariacionCostos[`Monto${i}`]);
115
147
  }
116
- };
117
- this.proyectarCosto = () => {
118
- const rowIngresos = this.data.FlujoProyectadoAnualMap.get('ACT_CNFL_40001_0');
119
- const rowVariacionCostos = this.data.FlujoProyectadoAnualMap.get('ACT_CNFL_30002_0');
120
- const rowCosto = this.data.FlujoProyectadoAnualMap.get('ACT_CNFL_50001_0');
121
- const rowTotalIngresoM = this.data.FlujoProyectadoMensualMap.get('ACT_CNFL_49000_0');
148
+ rowCosto[`Monto${i}`] = Math.round(rowCosto[`Monto${i}`] * 100) / 100;
149
+ }
150
+ if (this.data.TipoConsolidad == 'GANADERIA' &&
151
+ this.data.ParametrosEngorde.Conclusion != 'DESARROLLO_HATO') {
122
152
  for (let i = 1; i <= this.rango; i++) {
123
153
  if (i == 1) {
124
- rowCosto[`Monto1`] = (rowIngresos[`Monto1`] * rowCosto.MontoCajaPercent / 100) + (1 + rowVariacionCostos[`Monto${i}`]);
154
+ rowCosto[`Monto1`] = (rowTotalIngresoM[`MontoTotal`] * rowCosto.MontoCajaPercent / 100) * (1 + rowVariacionCostos[`Monto${i}`]);
125
155
  }
126
156
  else {
127
157
  rowCosto[`Monto${i}`] = rowIngresos[`Monto${i - 1}`] * (1 + rowVariacionCostos[`Monto${i}`]);
128
158
  }
129
159
  rowCosto[`Monto${i}`] = Math.round(rowCosto[`Monto${i}`] * 100) / 100;
130
160
  }
131
- if (this.data.TipoConsolidad == 'GANADERIA' &&
132
- this.data.ParametrosEngorde.Conclusion != 'DESARROLLO_HATO') {
161
+ }
162
+ };
163
+ proyectarGasto = () => {
164
+ const rowIngresos = this.data.FlujoProyectadoAnualMap.get('ACT_CNFL_40001_0');
165
+ const rowVariacionGastos = this.data.FlujoProyectadoAnualMap.get('ACT_CNFL_30003_0');
166
+ const rowGasto = this.data.FlujoProyectadoAnualMap.get('ACT_CNFL_60001_0');
167
+ for (let i = 1; i <= this.rango; i++) {
168
+ if (i == 1) {
169
+ rowGasto[`Monto1`] = (rowIngresos[`Monto1`] *
170
+ rowGasto.MontoCajaPercent / 100) + (1 + rowVariacionGastos[`Monto${i}`]);
171
+ }
172
+ else {
173
+ rowGasto[`Monto${i}`] = rowIngresos[`Monto${i - 1}`] * (1 + rowVariacionGastos[`Monto${i}`]);
174
+ }
175
+ rowGasto[`Monto${i}`] = Math.round(rowGasto[`Monto${i}`] * 100) / 100;
176
+ }
177
+ };
178
+ agregarQuitarClones = () => {
179
+ let filter = this.data.FlujoProyectadoMensual.filter((item) => item.Clasificador == 'DETL' || item.Clasificador == 'HABM');
180
+ filter.map((item) => {
181
+ if (!this.mapObject.has(`${item.RubroId}_CLONE_${item.UUID}`)) {
182
+ let newItem = {
183
+ ActividadId: item.ActividadId,
184
+ RubroId: item.RubroId,
185
+ RubroPadreId: item.RubroPadreId,
186
+ Descripcion: item.Descripcion,
187
+ UUID: `CLONE_${item.UUID}`,
188
+ Clasificador: item.Clasificador,
189
+ Entidad: item.Entidad,
190
+ Operacion: item.Operacion,
191
+ Comprar: item.Comprar,
192
+ Variable: item.Variable,
193
+ IndicadorABM: item.IndicadorABM,
194
+ MontoCajaPercent: item.MontoCajaPercent,
195
+ };
133
196
  for (let i = 1; i <= this.rango; i++) {
134
- if (i == 1) {
135
- rowCosto[`Monto1`] = (rowTotalIngresoM[`MontoTotal`] * rowCosto.MontoCajaPercent / 100) * (1 + rowVariacionCostos[`Monto${i}`]);
136
- }
137
- else {
138
- rowCosto[`Monto${i}`] = rowIngresos[`Monto${i - 1}`] * (1 + rowVariacionCostos[`Monto${i}`]);
139
- }
140
- rowCosto[`Monto${i}`] = Math.round(rowCosto[`Monto${i}`] * 100) / 100;
197
+ newItem[`Monto${i}`] = 0;
141
198
  }
199
+ this.array.push(newItem);
200
+ this.mapObject.set(`${item.RubroId}_CLONE_${item.UUID}`, newItem);
142
201
  }
143
- };
144
- this.proyectarGasto = () => {
145
- const rowIngresos = this.data.FlujoProyectadoAnualMap.get('ACT_CNFL_40001_0');
146
- const rowVariacionGastos = this.data.FlujoProyectadoAnualMap.get('ACT_CNFL_30003_0');
147
- const rowGasto = this.data.FlujoProyectadoAnualMap.get('ACT_CNFL_60001_0');
148
- for (let i = 1; i <= this.rango; i++) {
149
- if (i == 1) {
150
- rowGasto[`Monto1`] = (rowIngresos[`Monto1`] *
151
- rowGasto.MontoCajaPercent / 100) + (1 + rowVariacionGastos[`Monto${i}`]);
152
- }
153
- else {
154
- rowGasto[`Monto${i}`] = rowIngresos[`Monto${i - 1}`] * (1 + rowVariacionGastos[`Monto${i}`]);
155
- }
156
- rowGasto[`Monto${i}`] = Math.round(rowGasto[`Monto${i}`] * 100) / 100;
202
+ });
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);
157
208
  }
158
- };
159
- this.agregarQuitarClones = () => {
160
- let filter = this.data.FlujoProyectadoMensual.filter((item) => item.Clasificador == 'DETL' || item.Clasificador == 'HABM');
161
- filter.map((item) => {
162
- if (!this.mapObject.has(`${item.RubroId}_CLONE_${item.UUID}`)) {
163
- let newItem = {
164
- ActividadId: item.ActividadId,
165
- RubroId: item.RubroId,
166
- RubroPadreId: item.RubroPadreId,
167
- Descripcion: item.Descripcion,
168
- UUID: `CLONE_${item.UUID}`,
169
- Clasificador: item.Clasificador,
170
- Entidad: item.Entidad,
171
- Operacion: item.Operacion,
172
- Comprar: item.Comprar,
173
- Variable: item.Variable,
174
- IndicadorABM: item.IndicadorABM,
175
- MontoCajaPercent: item.MontoCajaPercent,
176
- };
177
- for (let i = 1; i <= this.rango; i++) {
178
- newItem[`Monto${i}`] = 0;
179
- }
180
- this.array.push(newItem);
181
- this.mapObject.set(`${item.RubroId}_CLONE_${item.UUID}`, newItem);
182
- }
183
- });
184
- let anuales = this.array.filter((item) => item.Clasificador == 'DETL' || item.Clasificador == 'HABM');
185
- for (let anualItem of anuales) {
186
- let key = `${anualItem.RubroId}_${anualItem.UUID}`.replace('_CLONE', '');
187
- if (!this.data.FlujoProyectadoMensualMap.has(key) && anualItem.UUID) {
188
- this.data.FlujoProyectadoAnual = this.data.FlujoProyectadoAnual.filter((item) => item.UUID != anualItem.UUID);
189
- }
209
+ }
210
+ };
211
+ moverDetalledesdeMensual = () => {
212
+ let filter = this.data.FlujoProyectadoMensual.filter((item) => item.RubroId == 'ACT_CNFL_61001' || item.RubroId == 'ACT_CNFL_73000');
213
+ filter.map((item) => {
214
+ if (this.mapObject.has(`${item.RubroId}_CLONE_${item.UUID}`)) {
215
+ let detalle = this.mapObject.get(`${item.RubroId}_CLONE_${item.UUID}`);
216
+ if (detalle.Monto1 == 0)
217
+ detalle.Monto1 = item.MontoTotal;
190
218
  }
191
- };
192
- this.moverDetalledesdeMensual = () => {
193
- let filter = this.data.FlujoProyectadoMensual.filter((item) => item.RubroId == 'ACT_CNFL_61001' || item.RubroId == 'ACT_CNFL_73000');
194
- filter.map((item) => {
195
- if (this.mapObject.has(`${item.RubroId}_CLONE_${item.UUID}`)) {
196
- let detalle = this.mapObject.get(`${item.RubroId}_CLONE_${item.UUID}`);
197
- if (detalle.Monto1 == 0)
198
- detalle.Monto1 = item.MontoTotal;
199
- }
200
- });
201
- };
202
- this.calcularTotalDetalle = (sumandosArray, total) => {
203
- const rows = this.array.filter((item) => sumandosArray.includes(item.RubroId) && item.Comprar == 'NO');
204
- let destino = this.mapObject.get(`${total}_0`);
205
- rows.map((item) => {
206
- for (let i = 1; i <= this.rango; i++) {
207
- destino[`Monto${i}`] += parseFloat(item[`Monto${i}`]);
208
- destino[`Monto${i}`] = Math.round(destino[`Monto${i}`] * 100) / 100;
209
- }
210
- });
211
- };
212
- this.calcularPorcentajeIngresCostos = () => {
213
- const rowTotalIngresoM = this.data.FlujoProyectadoMensualMap.get('ACT_CNFL_49000_0');
214
- let costos = this.array.filter((item) => item.RubroId === 'ACT_CNFL_50001' || item.RubroId === 'ACT_CNFL_50002' ||
215
- item.RubroId === 'ACT_CNFL_60001' || item.RubroId === 'ACT_CNFL_60002');
216
- costos.map((item) => {
217
- if (rowTotalIngresoM.MontoTotal != 0)
218
- item.MontoCajaPercent = Math.round(parseFloat(item.MontoTotal) /
219
- parseFloat(rowTotalIngresoM.MontoTotal) * 100);
220
- else
221
- item.MontoCajaPercent = 0;
222
- if (item.RubroId == 'ACT_CNFL_50001' || item.RubroId === 'ACT_CNFL_60001') {
223
- this.data.FlujoProyectadoAnualMap.get(`${item.RubroId}_0`).MontoCajaPercent = item.MontoCajaPercent;
224
- }
225
- });
226
- this.data.FlujoProyectadoMensualMap.get('ACT_CNFL_82300_0').MontoCajaPercent = this.data.CajaInicial;
227
- };
228
- this.calcularOtrosIngresosAnuales = () => {
229
- const rowOtrosIngresosM = this.data.FlujoProyectadoMensualMap.get('ACT_CNFL_70001_0');
230
- let rowOtrosIngresosA = this.mapObject.get('ACT_CNFL_70001_0');
219
+ });
220
+ };
221
+ calcularTotalDetalle = (sumandosArray, total) => {
222
+ const rows = this.array.filter((item) => sumandosArray.includes(item.RubroId) && item.Comprar == 'NO');
223
+ let destino = this.mapObject.get(`${total}_0`);
224
+ rows.map((item) => {
231
225
  for (let i = 1; i <= this.rango; i++) {
232
- rowOtrosIngresosA[`Monto${i}`] = rowOtrosIngresosM.MontoTotal;
233
- rowOtrosIngresosA[`Monto${i}`] = Math.round(rowOtrosIngresosA[`Monto${i}`] * 100) / 100;
226
+ destino[`Monto${i}`] += parseFloat(item[`Monto${i}`]);
227
+ destino[`Monto${i}`] = Math.round(destino[`Monto${i}`] * 100) / 100;
234
228
  }
235
- };
236
- this.calcularGastosFamiliares = () => {
237
- const rowOtrosIngresosM = this.data.FlujoProyectadoMensualMap.get('ACT_CNFL_70002_0');
238
- let rowGastosFamiliares = this.mapObject.get('ACT_CNFL_70002_0');
239
- if (!rowGastosFamiliares.MontoCajaPercent)
240
- rowGastosFamiliares.MontoCajaPercent = 0;
241
- for (let i = 1; i <= this.rango; i++) {
242
- if (i == 1) {
243
- rowGastosFamiliares[`Monto${i}`] = rowOtrosIngresosM.MontoTotal *
244
- (1 + (rowGastosFamiliares.MontoCajaPercent / 100));
245
- }
246
- else {
247
- rowGastosFamiliares[`Monto${i}`] = rowGastosFamiliares[`Monto${i - 1}`] *
248
- (1 + (rowGastosFamiliares.MontoCajaPercent / 100));
249
- }
250
- rowGastosFamiliares[`Monto${i}`] = Math.round(rowGastosFamiliares[`Monto${i}`] * 100) / 100;
229
+ });
230
+ };
231
+ 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;
251
243
  }
252
- };
253
- this.calcularFlujoInversiones = () => {
254
- const rowInversionM = this.data.FlujoProyectadoMensualMap.get('ACT_CNFL_80001_0');
255
- const rowAportePropioM = this.data.FlujoProyectadoMensualMap.get('ACT_CNFL_80002_0');
256
- let rowInversion = this.mapObject.get('ACT_CNFL_80001_0');
257
- let rowAportePropio = this.mapObject.get('ACT_CNFL_80002_0');
258
- if (rowInversion.Monto1 > 0)
259
- rowInversion.Monto1 = rowInversionM.MontoTotal;
260
- if (rowAportePropio.Monto1 > 0)
261
- rowAportePropio.Monto1 = rowAportePropioM.MontoTotal;
262
- };
263
- this.calcularFlujoAcumuladoAnual = () => {
264
- let flujoAcumulado = this.mapObject.get('ACT_CNFL_82300_0');
265
- let excedente = this.mapObject.get('ACT_CNFL_82110_0');
266
- let saldoInicialCaja = this.mapObject.get('ACT_CNFL_82120_0');
267
- saldoInicialCaja.Monto1 = this.data.CajaInicial;
268
- for (let i = 1; i <= this.rango; i++) {
269
- if (i == 1) {
270
- flujoAcumulado[`Monto${i}`] = parseFloat(excedente[`Monto${i}`]) +
271
- parseFloat(saldoInicialCaja[`Monto${i}`]);
272
- }
273
- else {
274
- flujoAcumulado[`Monto${i}`] = parseFloat(flujoAcumulado[`Monto${i - 1}`]) +
275
- parseFloat(excedente[`Monto${i}`]);
276
- }
277
- flujoAcumulado[`Monto${i}`] = Math.round(flujoAcumulado[`Monto${i}`] * 100) / 100;
244
+ });
245
+ this.data.FlujoProyectadoMensualMap.get('ACT_CNFL_82300_0').MontoCajaPercent = this.data.CajaInicial;
246
+ };
247
+ calcularOtrosIngresosAnuales = () => {
248
+ const rowOtrosIngresosM = this.data.FlujoProyectadoMensualMap.get('ACT_CNFL_70001_0');
249
+ let rowOtrosIngresosA = this.mapObject.get('ACT_CNFL_70001_0');
250
+ for (let i = 1; i <= this.rango; i++) {
251
+ rowOtrosIngresosA[`Monto${i}`] = rowOtrosIngresosM.MontoTotal;
252
+ rowOtrosIngresosA[`Monto${i}`] = Math.round(rowOtrosIngresosA[`Monto${i}`] * 100) / 100;
253
+ }
254
+ };
255
+ calcularGastosFamiliares = () => {
256
+ const rowOtrosIngresosM = this.data.FlujoProyectadoMensualMap.get('ACT_CNFL_70002_0');
257
+ let rowGastosFamiliares = this.mapObject.get('ACT_CNFL_70002_0');
258
+ if (!rowGastosFamiliares.MontoCajaPercent)
259
+ rowGastosFamiliares.MontoCajaPercent = 0;
260
+ for (let i = 1; i <= this.rango; i++) {
261
+ if (i == 1) {
262
+ rowGastosFamiliares[`Monto${i}`] = rowOtrosIngresosM.MontoTotal *
263
+ (1 + (rowGastosFamiliares.MontoCajaPercent / 100));
278
264
  }
279
- };
280
- this.adicionarCapacidadPago = () => {
281
- const utilidadNeta = this.mapObject.get('ACT_CNFL_82300_0');
282
- const cuotaBdp = this.mapObject.get('ACT_CNFL_82300_0');
283
- let result = {};
284
- let acumulado = 0;
285
- for (let i = 2; i <= this.rango; i++) {
286
- if (utilidadNeta[`Monto${i}`] && utilidadNeta[`Monto${i}`] > 0)
287
- result[`Monto${i}`] = cuotaBdp[`Monto${i}`] / utilidadNeta[`Monto${i}`];
288
- else
289
- result[`Monto${i}`] = 0;
290
- result[`Monto${i}`] = Math.round(result[`Monto${i}`] * 100) / 100;
291
- acumulado += result[`Monto${i}`];
265
+ else {
266
+ rowGastosFamiliares[`Monto${i}`] = rowGastosFamiliares[`Monto${i - 1}`] *
267
+ (1 + (rowGastosFamiliares.MontoCajaPercent / 100));
292
268
  }
293
- result.PorcentajePromedio = Math.round(acumulado / this.rango * 100) / 100;
294
- result.CapacidadMaxima = (acumulado / (this.rango - 1)) > 80 ? 'VERDADERO' : 'FALSO';
295
- this.data.Pie = result;
296
- };
297
- this.getFlujoEfectivo = () => {
298
- const tasaDescuento = Math.round(parseFloat(this.data.Parametros.TasaDescuento) * 100) / 100;
299
- const totalFlujoInversiones = this.data.FlujoProyectadoAnualMap.get('ACT_CNFL_80900_0');
300
- const excedente = this.data.FlujoProyectadoAnualMap.get('ACT_CNFL_82110_0');
301
- let result = [];
302
- let resultMap = new Map();
303
- let indiceRentabilidad = 0;
304
- for (let i = 0; i <= this.rango; i++) {
305
- let value = {};
306
- if (i == 0) {
307
- value = { Anno: i, FlujoDeEfectivo: totalFlujoInversiones[`Monto1`] * -1, FlujoEfectivoDescontado: 0 };
308
- result.push(value);
309
- resultMap.set(i, value);
310
- }
311
- else {
312
- value = { Anno: i, FlujoDeEfectivo: excedente[`Monto${i}`], FlujoEfectivoDescontado: 0 };
313
- result.push(value);
314
- resultMap.set(i, value);
315
- }
316
- value.FlujoEfectivoDescontado = value.FlujoDeEfectivo / Math.pow(1 + tasaDescuento, i);
317
- indiceRentabilidad += value.FlujoDeEfectivo / Math.pow(1 + tasaDescuento, i);
269
+ rowGastosFamiliares[`Monto${i}`] = Math.round(rowGastosFamiliares[`Monto${i}`] * 100) / 100;
270
+ }
271
+ };
272
+ calcularFlujoInversiones = () => {
273
+ const rowInversionM = this.data.FlujoProyectadoMensualMap.get('ACT_CNFL_80001_0');
274
+ 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');
277
+ if (rowInversion.Monto1 > 0)
278
+ rowInversion.Monto1 = rowInversionM.MontoTotal;
279
+ if (rowAportePropio.Monto1 > 0)
280
+ rowAportePropio.Monto1 = rowAportePropioM.MontoTotal;
281
+ };
282
+ 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');
286
+ saldoInicialCaja.Monto1 = this.data.CajaInicial;
287
+ for (let i = 1; i <= this.rango; i++) {
288
+ if (i == 1) {
289
+ flujoAcumulado[`Monto${i}`] = parseFloat(excedente[`Monto${i}`]) +
290
+ parseFloat(saldoInicialCaja[`Monto${i}`]);
318
291
  }
319
- indiceRentabilidad = Math.round((indiceRentabilidad / totalFlujoInversiones[`Monto1`]) * 100) / 100;
320
- const VAN = calcularVAN(tasaDescuento, result.filter((item => item.Anno > 0)).
321
- map((item) => item.FlujoDeEfectivo), totalFlujoInversiones[`Monto1`]);
322
- const TIR = calcularTIR(result.map(item => item.FlujoDeEfectivo), totalFlujoInversiones[`Monto1`]);
323
- let vars = [{ Descripcion: 'Tasa de descuento', Valor: tasaDescuento },
324
- { Descripcion: 'VAN', Valor: VAN },
325
- { Descripcion: 'TIR', Valor: TIR },
326
- { Descripcion: 'Índice de Rentabilidad', Valor: indiceRentabilidad },
327
- ];
328
- this.data.FlujoDeEfectivo = result;
329
- this.data.FlujoEfectivoVars = vars;
330
- };
331
- this.tipo = tipo;
332
- if (tipo == 'MENSUAL') {
333
- this.rango = 12;
334
- this.mapObject = data.FlujoProyectadoMensualMap;
335
- this.array = data.FlujoProyectadoMensual;
336
- this.data = data;
292
+ else {
293
+ flujoAcumulado[`Monto${i}`] = parseFloat(flujoAcumulado[`Monto${i - 1}`]) +
294
+ parseFloat(excedente[`Monto${i}`]);
295
+ }
296
+ flujoAcumulado[`Monto${i}`] = Math.round(flujoAcumulado[`Monto${i}`] * 100) / 100;
337
297
  }
338
- else {
339
- this.rango = data.DatosEvaluacion.CantidadProyeccion;
340
- this.mapObject = data.FlujoProyectadoAnualMap;
341
- this.array = data.FlujoProyectadoAnual;
342
- this.data = data;
298
+ };
299
+ adicionarCapacidadPago = () => {
300
+ const utilidadNeta = this.mapObject.get('ACT_CNFL_82300_0');
301
+ const cuotaBdp = this.mapObject.get('ACT_CNFL_82300_0');
302
+ let result = {};
303
+ let acumulado = 0;
304
+ 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
308
+ result[`Monto${i}`] = 0;
309
+ result[`Monto${i}`] = Math.round(result[`Monto${i}`] * 100) / 100;
310
+ acumulado += result[`Monto${i}`];
343
311
  }
344
- }
312
+ result.PorcentajePromedio = Math.round(acumulado / this.rango * 100) / 100;
313
+ result.CapacidadMaxima = (acumulado / (this.rango - 1)) > 80 ? 'VERDADERO' : 'FALSO';
314
+ this.data.Pie = result;
315
+ };
316
+ getFlujoEfectivo = () => {
317
+ const tasaDescuento = Math.round(parseFloat(this.data.Parametros.TasaDescuento) * 100) / 100;
318
+ const totalFlujoInversiones = this.data.FlujoProyectadoAnualMap.get('ACT_CNFL_80900_0');
319
+ const excedente = this.data.FlujoProyectadoAnualMap.get('ACT_CNFL_82110_0');
320
+ let result = [];
321
+ let resultMap = new Map();
322
+ let indiceRentabilidad = 0;
323
+ for (let i = 0; i <= this.rango; i++) {
324
+ let value = {};
325
+ if (i == 0) {
326
+ value = { Anno: i, FlujoDeEfectivo: totalFlujoInversiones[`Monto1`] * -1, FlujoEfectivoDescontado: 0 };
327
+ result.push(value);
328
+ resultMap.set(i, value);
329
+ }
330
+ else {
331
+ value = { Anno: i, FlujoDeEfectivo: excedente[`Monto${i}`], FlujoEfectivoDescontado: 0 };
332
+ result.push(value);
333
+ resultMap.set(i, value);
334
+ }
335
+ value.FlujoEfectivoDescontado = value.FlujoDeEfectivo / Math.pow(1 + tasaDescuento, i);
336
+ indiceRentabilidad += value.FlujoDeEfectivo / Math.pow(1 + tasaDescuento, i);
337
+ }
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 },
343
+ { Descripcion: 'VAN', Valor: VAN },
344
+ { Descripcion: 'TIR', Valor: TIR },
345
+ { Descripcion: 'Índice de Rentabilidad', Valor: indiceRentabilidad },
346
+ ];
347
+ this.data.FlujoDeEfectivo = result;
348
+ this.data.FlujoEfectivoVars = vars;
349
+ };
345
350
  }
346
351
  exports.default = FlujoConstructor;
347
352
  const calcularVAN = (tasaDescuento, flujosDeCaja, inversionInicial) => {