bdpformulas 1.0.56 → 1.0.58
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.d.ts +1 -1
- package/build/index.d.ts +13 -1
- package/build/strategies/agriculture/flujoProyAgr.strategy.d.ts +1 -1
- package/build/strategies/agriculture/flujoProyAgr.strategy.js +16 -7
- package/build/strategies/agriculture/ventas.detail/ventas.calc.js +8 -5
- package/build/strategies/analisisFinancieros.strategy.d.ts +1 -1
- package/build/strategies/analisisFinancieros.strategy.js +10 -6
- package/build/strategies/balance.strategy.d.ts +0 -12
- package/build/strategies/common/analisisFinCalculos/analisisDupont.calc.js +35 -17
- package/build/strategies/common/analisisFinCalculos/analisisGrafico.calc.d.ts +1 -0
- package/build/strategies/common/analisisFinCalculos/analisisGrafico.calc.js +17 -9
- package/build/strategies/common/analisisFinCalculos/apalancamiento.calc.js +49 -26
- package/build/strategies/common/analisisFinCalculos/puntoEquilibrio.calc.js +25 -12
- package/build/strategies/common/analisisFinCalculos/ratios.calc.js +114 -62
- package/build/strategies/common/declaracionJurada.calc.js +1 -1
- package/build/strategies/common/flujoCalculos/flujoConstructor.d.ts +4 -0
- package/build/strategies/common/flujoCalculos/flujoConstructor.js +231 -96
- package/build/strategies/common/flujoCalculos/supuestos.calc.js +21 -27
- package/build/strategies/common/flujoProyectado.calc.js +4 -1
- package/build/strategies/flujoProyectado.strategy.d.ts +1 -1
- package/build/strategies/flujoProyectado.strategy.js +2 -1
- package/build/strategies/index.js +2645 -7280
- package/build/strategies/utils.d.ts +2 -1
- package/build/strategies/utils.js +7 -1
- package/package.json +1 -1
package/build/context.d.ts
CHANGED
package/build/index.d.ts
CHANGED
|
@@ -53,4 +53,16 @@ declare const Actividades: {
|
|
|
53
53
|
FlujoProyectado: typeof FlujoProyectado;
|
|
54
54
|
AnalisisFinancieros: typeof AnalisisFinancieros;
|
|
55
55
|
};
|
|
56
|
-
|
|
56
|
+
interface CampoCalculadoDefinido {
|
|
57
|
+
RubroId: string;
|
|
58
|
+
Correlativos: '*' | 'ultima' | number[];
|
|
59
|
+
Empresa: boolean;
|
|
60
|
+
Familiar: boolean;
|
|
61
|
+
}
|
|
62
|
+
interface CampoCalculado {
|
|
63
|
+
RubroId: string;
|
|
64
|
+
Correlativo: number;
|
|
65
|
+
Empresa: boolean;
|
|
66
|
+
Familiar: boolean;
|
|
67
|
+
}
|
|
68
|
+
export { Context, Agricola, Pecuario, Produccion, EEFF, Actividades, General, CampoCalculado, CampoCalculadoDefinido };
|
|
@@ -20,7 +20,7 @@ const calcularFlujoMensual = (data, actividades) => {
|
|
|
20
20
|
const gastosOperativos = [];
|
|
21
21
|
const gastosFamiliares = [];
|
|
22
22
|
const consolidadoOtrosIngresos = [];
|
|
23
|
-
for (
|
|
23
|
+
for (const actividad of actividades) {
|
|
24
24
|
(0, ventas_calc_1.addCalculoIngresosVentas)(actividad.Ventas);
|
|
25
25
|
consolidadoIngresos.push(getIngresoActividad(actividad));
|
|
26
26
|
consolidadoCostos.push(getCostosActividad(actividad));
|
|
@@ -39,7 +39,7 @@ const calcularFlujoMensual = (data, actividades) => {
|
|
|
39
39
|
};
|
|
40
40
|
//@ts-ignore
|
|
41
41
|
const setValues = (data, consolidado, rubroId, i) => {
|
|
42
|
-
|
|
42
|
+
const row = data.FlujoProyectadoMensualMap.get(`${rubroId}_0`);
|
|
43
43
|
if (parseFloat(row[`Monto${i}`]) == 0) {
|
|
44
44
|
consolidado.forEach((item) => {
|
|
45
45
|
if (item) {
|
|
@@ -54,7 +54,10 @@ const getIngresoActividad = (actividad) => {
|
|
|
54
54
|
if (!actividad.Ventas.CalculoIngreso)
|
|
55
55
|
return null;
|
|
56
56
|
const total = actividad.Ventas.CalculoIngreso.find((item) => item.ActividadProductoId == 0);
|
|
57
|
-
|
|
57
|
+
const result = {
|
|
58
|
+
...total,
|
|
59
|
+
Descripcion: `Ventas Act:${total.ActividadEconomicaId}`
|
|
60
|
+
};
|
|
58
61
|
return result;
|
|
59
62
|
};
|
|
60
63
|
//@ts-ignore
|
|
@@ -62,7 +65,10 @@ const getCostosActividad = (actividad) => {
|
|
|
62
65
|
if (!actividad.Costos.Meses || actividad.Costos.Meses.length == 0)
|
|
63
66
|
return null;
|
|
64
67
|
const total = actividad.Costos.Meses.find((item) => item.ActividadProductoId == 0);
|
|
65
|
-
|
|
68
|
+
const result = {
|
|
69
|
+
...total,
|
|
70
|
+
Descripcion: `Costos Act:${total.ActividadEconomicaId}`
|
|
71
|
+
};
|
|
66
72
|
return result;
|
|
67
73
|
};
|
|
68
74
|
//@ts-ignore
|
|
@@ -73,7 +79,9 @@ const getGastos = (actividad, tipo) => {
|
|
|
73
79
|
acc += Math.round(parseFloat(item.ImporteMensual) * 100) / 100;
|
|
74
80
|
return acc;
|
|
75
81
|
}, 0);
|
|
76
|
-
|
|
82
|
+
const result = {
|
|
83
|
+
Descripcion: `Gastos ${tipo} Act:${total.ActividadEconomicaId}`
|
|
84
|
+
};
|
|
77
85
|
for (let i = 1; i <= 12; i++) {
|
|
78
86
|
result[`Monto${i}`] = total;
|
|
79
87
|
}
|
|
@@ -81,9 +89,10 @@ const getGastos = (actividad, tipo) => {
|
|
|
81
89
|
};
|
|
82
90
|
//@ts-ignore
|
|
83
91
|
const getOtrosIngresos = (actividad) => {
|
|
84
|
-
if (!actividad.Ventas.OtrosIngresos ||
|
|
92
|
+
if (!actividad.Ventas.OtrosIngresos ||
|
|
93
|
+
actividad.Ventas.OtrosIngresos.length == 0)
|
|
85
94
|
return null;
|
|
86
|
-
|
|
95
|
+
const result = actividad.Ventas.OtrosIngresos.reduce((acc, item) => {
|
|
87
96
|
for (let i = 1; i <= 12; i++) {
|
|
88
97
|
if (!acc[`Monto${i}`])
|
|
89
98
|
acc[`Monto${i}`] = 0;
|
|
@@ -7,8 +7,11 @@ const addCalculoIngresosVentas = (ventas) => {
|
|
|
7
7
|
const calculoIngreso = ventas.Productos.reduce((acc, producto) => {
|
|
8
8
|
const ingreso = (0, exports.calcularIngreso)(producto);
|
|
9
9
|
if (!acc.has(0))
|
|
10
|
-
acc.set(0, {
|
|
11
|
-
|
|
10
|
+
acc.set(0, {
|
|
11
|
+
...ingreso,
|
|
12
|
+
ActividadProductoId: 0,
|
|
13
|
+
ActividadProductoDesc: 'Total'
|
|
14
|
+
});
|
|
12
15
|
else {
|
|
13
16
|
for (let i = 1; i <= 12; i++) {
|
|
14
17
|
acc.get(0)[`Monto${i}`] += ingreso[`Monto${i}`];
|
|
@@ -21,7 +24,7 @@ const addCalculoIngresosVentas = (ventas) => {
|
|
|
21
24
|
};
|
|
22
25
|
exports.addCalculoIngresosVentas = addCalculoIngresosVentas;
|
|
23
26
|
const calcularIngreso = (producto) => {
|
|
24
|
-
|
|
27
|
+
const result = {};
|
|
25
28
|
const ingresoTotalCampanna = parseFloat(producto.IngresoTotalCampanna);
|
|
26
29
|
const estacionalidad = producto.Estacionalidad[0];
|
|
27
30
|
result.ActividadEconomicaId = estacionalidad.ActividadEconomicaId;
|
|
@@ -29,8 +32,8 @@ const calcularIngreso = (producto) => {
|
|
|
29
32
|
result.ActividadProductoDesc = estacionalidad.ActividadProductoDesc;
|
|
30
33
|
let acum = 0;
|
|
31
34
|
for (let i = 1; i <= 12; i++) {
|
|
32
|
-
result[`Monto${i}`] =
|
|
33
|
-
|
|
35
|
+
result[`Monto${i}`] = Math.round((ingresoTotalCampanna * parseFloat(estacionalidad[`Gestion${i}`])) /
|
|
36
|
+
100);
|
|
34
37
|
acum += result[`Monto${i}`];
|
|
35
38
|
}
|
|
36
39
|
result.Total = acum;
|
|
@@ -10,8 +10,8 @@ const analisisDupont_calc_1 = require("./common/analisisFinCalculos/analisisDupo
|
|
|
10
10
|
const puntoEquilibrio_calc_1 = require("./common/analisisFinCalculos/puntoEquilibrio.calc");
|
|
11
11
|
class AnalisisFinancieros {
|
|
12
12
|
execute(data) {
|
|
13
|
-
|
|
14
|
-
|
|
13
|
+
const analisisGrafico = new analisisGrafico_calc_1.default(data);
|
|
14
|
+
const ratios = new ratios_calc_1.default(data);
|
|
15
15
|
data.balanceMap = this.generarMapBalance(data);
|
|
16
16
|
data.eerrMap = this.generarMapEERR(data);
|
|
17
17
|
ratios.generarRatios();
|
|
@@ -26,8 +26,10 @@ class AnalisisFinancieros {
|
|
|
26
26
|
}
|
|
27
27
|
generarMapBalance = (data) => {
|
|
28
28
|
return data.balance.balance.reduce((acc, item) => {
|
|
29
|
-
|
|
30
|
-
|
|
29
|
+
const uuid = item.UUID ? item.UUID : '0';
|
|
30
|
+
const key = `${item.RubroId}_${item.Clasificador == 'HABM' || item.Clasificador == 'CT'
|
|
31
|
+
? uuid
|
|
32
|
+
: '0'}`;
|
|
31
33
|
if (acc.has(key))
|
|
32
34
|
throw new Error(`Duplicado en balanceMap: ${key}`);
|
|
33
35
|
acc.set(key, item);
|
|
@@ -36,8 +38,10 @@ class AnalisisFinancieros {
|
|
|
36
38
|
};
|
|
37
39
|
generarMapEERR = (data) => {
|
|
38
40
|
return data.balance.eerr.reduce((acc, item) => {
|
|
39
|
-
|
|
40
|
-
|
|
41
|
+
const uuid = item.UUID ? item.UUID : '0';
|
|
42
|
+
const key = `${item.RubroId}_${item.Clasificador == 'HABM' || item.Clasificador == 'CT'
|
|
43
|
+
? uuid
|
|
44
|
+
: '0'}`;
|
|
41
45
|
if (acc.has(key))
|
|
42
46
|
throw new Error(`Duplicado en balanceMap: ${key}`);
|
|
43
47
|
acc.set(key, item);
|
|
@@ -1,16 +1,4 @@
|
|
|
1
1
|
import { Strategy } from '../strategy.interface';
|
|
2
|
-
export interface CampoCalculadoDefinido {
|
|
3
|
-
RubroId: string;
|
|
4
|
-
Correlativos: '*' | 'ultima' | number[];
|
|
5
|
-
Empresa: boolean;
|
|
6
|
-
Familiar: boolean;
|
|
7
|
-
}
|
|
8
|
-
export interface CampoCalculado {
|
|
9
|
-
RubroId: string;
|
|
10
|
-
Correlativo: number;
|
|
11
|
-
Empresa: boolean;
|
|
12
|
-
Familiar: boolean;
|
|
13
|
-
}
|
|
14
2
|
export default class Balance implements Strategy {
|
|
15
3
|
execute(data: any): any;
|
|
16
4
|
}
|
|
@@ -4,25 +4,43 @@ exports.setAnalisisDupont = void 0;
|
|
|
4
4
|
const setAnalisisDupont = (data) => {
|
|
5
5
|
const rango = data.balanceMap.get('ACT_CN_10000_0').Rango;
|
|
6
6
|
const totalIngresos = data.eerrMap.get('ACT_CN_40003_0');
|
|
7
|
-
const totalActivos = data.balanceMap.get('
|
|
8
|
-
const totalPatrimonio = data.balanceMap.get('
|
|
7
|
+
const totalActivos = data.balanceMap.get('ACT_CN_19000_0');
|
|
8
|
+
const totalPatrimonio = data.balanceMap.get('ACT_CN_39000_0');
|
|
9
9
|
const utilidadNeta = data.eerrMap.get('ACT_CN_47000_0');
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
10
|
+
const margenNeto = {
|
|
11
|
+
RubroId: '001',
|
|
12
|
+
Descripcion: 'MARGEN NET0 (Utilidad Neta / Total Ingresos)'
|
|
13
|
+
};
|
|
14
|
+
const rotacion = {
|
|
15
|
+
RubroId: '002',
|
|
16
|
+
Descripcion: 'ROTACIÓN (Total Ingresos / Total Activos)'
|
|
17
|
+
};
|
|
18
|
+
const apalancamiento = {
|
|
19
|
+
RubroId: '003',
|
|
20
|
+
Descripcion: 'APALANCAMIENTO (Total Activos / Total Patrimonio)'
|
|
21
|
+
};
|
|
22
|
+
const roe = { RubroId: '004', Descripcion: 'ROE' };
|
|
14
23
|
for (let i = 1; i <= rango; i++) {
|
|
15
|
-
margenNeto[`Monto${i}`] =
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
24
|
+
margenNeto[`Monto${i}`] =
|
|
25
|
+
totalIngresos[`MontoEmpresa_${i}`] == 0
|
|
26
|
+
? 0
|
|
27
|
+
: (parseFloat(utilidadNeta[`MontoEmpresa_${i}`]) /
|
|
28
|
+
parseFloat(totalIngresos[`MontoEmpresa_${i}`])) *
|
|
29
|
+
100;
|
|
30
|
+
rotacion[`Monto${i}`] =
|
|
31
|
+
totalActivos[`MontoEmpresa_${i}`] == 0
|
|
32
|
+
? 0
|
|
33
|
+
: parseFloat(totalIngresos[`MontoEmpresa_${i}`]) /
|
|
34
|
+
parseFloat(totalActivos[`MontoEmpresa_${i}`]);
|
|
35
|
+
apalancamiento[`Monto${i}`] =
|
|
36
|
+
totalPatrimonio[`MontoEmpresa_${i}`] == 0
|
|
37
|
+
? 0
|
|
38
|
+
: parseFloat(totalActivos[`MontoEmpresa_${i}`]) /
|
|
39
|
+
parseFloat(totalPatrimonio[`MontoEmpresa_${i}`]);
|
|
40
|
+
roe[`Monto${i}`] =
|
|
41
|
+
margenNeto[`Monto${i}`] *
|
|
42
|
+
rotacion[`Monto${i}`] *
|
|
43
|
+
apalancamiento[`Monto${i}`];
|
|
26
44
|
}
|
|
27
45
|
data.AnalisisDupont = [margenNeto, rotacion, apalancamiento, roe];
|
|
28
46
|
};
|
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const lodash_1 = require("lodash");
|
|
3
4
|
class AnalisisGrafico {
|
|
4
5
|
//@ts-ignore
|
|
5
6
|
data;
|
|
7
|
+
cantidadGestiones;
|
|
6
8
|
constructor(data) {
|
|
7
9
|
this.data = data;
|
|
10
|
+
this.cantidadGestiones = data.Gestiones.Gestiones.length;
|
|
8
11
|
}
|
|
9
12
|
generarGraficos() {
|
|
10
13
|
this.balanceGeneral();
|
|
@@ -15,7 +18,7 @@ class AnalisisGrafico {
|
|
|
15
18
|
this.margenesEstadoResultados();
|
|
16
19
|
}
|
|
17
20
|
balanceGeneral = () => {
|
|
18
|
-
|
|
21
|
+
const array = [];
|
|
19
22
|
array.push(this.data.balanceMap.get('ACT_CN_11900_0'));
|
|
20
23
|
array.push(this.data.balanceMap.get('ACT_CN_12900_0'));
|
|
21
24
|
array.push(this.data.balanceMap.get('ACT_CN_21900_0'));
|
|
@@ -24,36 +27,41 @@ class AnalisisGrafico {
|
|
|
24
27
|
this.data.estructuraGeneral = array;
|
|
25
28
|
};
|
|
26
29
|
evolucionActivos = () => {
|
|
27
|
-
|
|
30
|
+
const array = [];
|
|
28
31
|
array.push(this.data.balanceMap.get('ACT_CN_11900_0'));
|
|
29
32
|
array.push(this.data.balanceMap.get('ACT_CN_12900_0'));
|
|
30
33
|
array.push(this.data.balanceMap.get('ACT_CN_19000_0'));
|
|
31
34
|
this.data.evolucionActivos = array;
|
|
32
35
|
};
|
|
33
36
|
comportamientoPasivos = () => {
|
|
34
|
-
|
|
37
|
+
const array = [];
|
|
35
38
|
array.push(this.data.balanceMap.get('ACT_CN_21900_0'));
|
|
36
39
|
array.push(this.data.balanceMap.get('ACT_CN_22900_0'));
|
|
37
40
|
array.push(this.data.balanceMap.get('ACT_CN_29000_0'));
|
|
38
41
|
this.data.comportamientoPasivos = array;
|
|
39
42
|
};
|
|
40
43
|
comportamientoPatrimonio = () => {
|
|
41
|
-
|
|
44
|
+
const array = [];
|
|
42
45
|
array.push(this.data.balanceMap.get('ACT_CN_39000_0'));
|
|
43
46
|
this.data.comportamientoPatrimonio = array;
|
|
44
47
|
};
|
|
45
48
|
evolucionEstadoResultados = () => {
|
|
46
|
-
|
|
49
|
+
const array = [];
|
|
47
50
|
array.push(this.data.eerrMap.get('ACT_CN_40003_0'));
|
|
48
51
|
array.push(this.data.eerrMap.get('ACT_CN_41004_0'));
|
|
49
52
|
array.push(this.data.eerrMap.get('ACT_CN_43900_0'));
|
|
50
53
|
this.data.evolucionEstadoResultados = array;
|
|
51
54
|
};
|
|
52
55
|
margenesEstadoResultados = () => {
|
|
53
|
-
|
|
54
|
-
const ratio3 = this.data.Ratios.rentabilidad.find((item) => item.id === 'Ratio3');
|
|
55
|
-
const ratio4 = this.data.Ratios.rentabilidad.find((item) => item.id === 'Ratio4');
|
|
56
|
-
const ratio5 = this.data.Ratios.rentabilidad.find((item) => item.id === 'Ratio5');
|
|
56
|
+
const array = [];
|
|
57
|
+
const ratio3 = (0, lodash_1.clone)(this.data.Ratios.rentabilidad.find((item) => item.id === 'Ratio3'));
|
|
58
|
+
const ratio4 = (0, lodash_1.clone)(this.data.Ratios.rentabilidad.find((item) => item.id === 'Ratio4'));
|
|
59
|
+
const ratio5 = (0, lodash_1.clone)(this.data.Ratios.rentabilidad.find((item) => item.id === 'Ratio5'));
|
|
60
|
+
for (let i = 1; i <= this.cantidadGestiones; i++) {
|
|
61
|
+
ratio3[`Monto${i}`] = Math.round(ratio3[`Monto${i}`] / 100);
|
|
62
|
+
ratio4[`Monto${i}`] = Math.round(ratio4[`Monto${i}`] / 100);
|
|
63
|
+
ratio5[`Monto${i}`] = Math.round(ratio5[`Monto${i}`] / 100);
|
|
64
|
+
}
|
|
57
65
|
array.push(ratio3);
|
|
58
66
|
array.push(ratio4);
|
|
59
67
|
array.push(ratio5);
|
|
@@ -13,35 +13,58 @@ const setApalancamiento = (data) => {
|
|
|
13
13
|
sumaMontos = Math.round(sumaMontos * 100) / 100;
|
|
14
14
|
}
|
|
15
15
|
const rango = data.balanceMap.get('ACT_CN_10000_0').Rango;
|
|
16
|
-
const totalPatrimonio = data.balanceMap.get('
|
|
17
|
-
const obligacionesFinancieras = data.balanceMap.get('
|
|
18
|
-
const obligacionesFinancierasLP = data.balanceMap.get('
|
|
19
|
-
const totalPasivo = data.balanceMap.get('
|
|
16
|
+
const totalPatrimonio = data.balanceMap.get('ACT_CN_39000_0');
|
|
17
|
+
const obligacionesFinancieras = data.balanceMap.get('ACT_CN_21001_0');
|
|
18
|
+
const obligacionesFinancierasLP = data.balanceMap.get('ACT_CN_22001_0');
|
|
19
|
+
const totalPasivo = data.balanceMap.get('ACT_CN_29000_0');
|
|
20
20
|
data.Apalancamiento = {};
|
|
21
21
|
data.Apalancamiento.RelacionPatrimonio = {};
|
|
22
|
-
data.Apalancamiento.RelacionPatrimonio.Negocio =
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
22
|
+
data.Apalancamiento.RelacionPatrimonio.Negocio =
|
|
23
|
+
totalPatrimonio[`MontoEmpresa_${rango}`] == 0
|
|
24
|
+
? 0
|
|
25
|
+
: sumaMontos / totalPatrimonio[`MontoEmpresa_${rango}`];
|
|
26
|
+
data.Apalancamiento.RelacionPatrimonio.FamiEmpresa =
|
|
27
|
+
totalPatrimonio[`MontoTotal_${rango}`] == 0
|
|
28
|
+
? 0
|
|
29
|
+
: sumaMontos / totalPatrimonio[`MontoTotal_${rango}`];
|
|
26
30
|
data.Apalancamiento.PrimerPiso = {};
|
|
27
|
-
data.Apalancamiento.PrimerPiso.Negocio =
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
31
|
+
data.Apalancamiento.PrimerPiso.Negocio =
|
|
32
|
+
totalPatrimonio[`MontoEmpresa_${rango}`] == 0
|
|
33
|
+
? 0
|
|
34
|
+
: (obligacionesFinancieras[`MontoEmpresa_${rango}`] +
|
|
35
|
+
obligacionesFinancierasLP[`MontoEmpresa_${rango}`] +
|
|
36
|
+
sumaMontos) /
|
|
37
|
+
totalPatrimonio[`MontoEmpresa_${rango}`];
|
|
38
|
+
data.Apalancamiento.PrimerPiso.FamiEmpresa =
|
|
39
|
+
totalPatrimonio[`MontoTotal_${rango}`] == 0
|
|
40
|
+
? 0
|
|
41
|
+
: (obligacionesFinancieras[`MontoTotal_${rango}`] +
|
|
42
|
+
obligacionesFinancierasLP[`MontoTotal_${rango}`] +
|
|
43
|
+
sumaMontos) /
|
|
44
|
+
totalPatrimonio[`MontoTotal_${rango}`];
|
|
35
45
|
data.Apalancamiento.Firedin = {};
|
|
36
|
-
data.Apalancamiento.Firedin.Negocio =
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
data.Apalancamiento.
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
+
data.Apalancamiento.Firedin.Negocio =
|
|
47
|
+
totalPatrimonio[`MontoEmpresa_${rango}`] == 0
|
|
48
|
+
? 0
|
|
49
|
+
: (totalPasivo[`MontoEmpresa_${rango}`] + sumaMontos) /
|
|
50
|
+
totalPatrimonio[`MontoEmpresa_${rango}`];
|
|
51
|
+
data.Apalancamiento.Firedin.FamiEmpresa =
|
|
52
|
+
totalPatrimonio[`MontoTotal_${rango}`] == 0
|
|
53
|
+
? 0
|
|
54
|
+
: (totalPasivo[`MontoTotal_${rango}`] + sumaMontos) /
|
|
55
|
+
totalPatrimonio[`MontoTotal_${rango}`];
|
|
56
|
+
data.Apalancamiento.RelacionPatrimonio.Negocio =
|
|
57
|
+
Math.round(data.Apalancamiento.RelacionPatrimonio.Negocio * 100) / 100;
|
|
58
|
+
data.Apalancamiento.RelacionPatrimonio.FamiEmpresa =
|
|
59
|
+
Math.round(data.Apalancamiento.RelacionPatrimonio.FamiEmpresa * 100) /
|
|
60
|
+
100;
|
|
61
|
+
data.Apalancamiento.PrimerPiso.Negocio =
|
|
62
|
+
Math.round(data.Apalancamiento.PrimerPiso.Negocio * 100) / 100;
|
|
63
|
+
data.Apalancamiento.PrimerPiso.FamiEmpresa =
|
|
64
|
+
Math.round(data.Apalancamiento.PrimerPiso.FamiEmpresa * 100) / 100;
|
|
65
|
+
data.Apalancamiento.Firedin.Negocio =
|
|
66
|
+
Math.round(data.Apalancamiento.Firedin.Negocio * 100) / 100;
|
|
67
|
+
data.Apalancamiento.Firedin.FamiEmpresa =
|
|
68
|
+
Math.round(data.Apalancamiento.Firedin.FamiEmpresa * 100) / 100;
|
|
46
69
|
};
|
|
47
70
|
exports.setApalancamiento = setApalancamiento;
|
|
@@ -6,34 +6,47 @@ const getPuntoEquilibrio = (data) => {
|
|
|
6
6
|
const fecha = data.balanceMap.get('ACT_CN_10000_0')[`Fecha_${rango}`];
|
|
7
7
|
const totalGastosOperativos = data.eerrMap.get('ACT_CN_43900_0')[`MontoEmpresa_${rango}`];
|
|
8
8
|
const gastosFinancerosFamiliares = data.eerrMap.get('ACT_CN_45002_0')[`MontoEmpresa_${rango}`];
|
|
9
|
-
const gastos = Math.round((totalGastosOperativos + gastosFinancerosFamiliares) * 100) /
|
|
9
|
+
const gastos = Math.round((totalGastosOperativos + gastosFinancerosFamiliares) * 100) /
|
|
10
|
+
100;
|
|
10
11
|
const costos = data.eerrMap.get('ACT_CN_41004_0')[`MontoEmpresa_${rango}`];
|
|
11
12
|
const ingresos = data.eerrMap.get('ACT_CN_40003_0')[`MontoEmpresa_${rango}`];
|
|
12
|
-
const margenBruto = ingresos == 0 ? 0 : Math.round((1 -
|
|
13
|
-
const ingresoEquilibrio = margenBruto == 0 ? 0 : Math.round(gastos / margenBruto * 100) / 100;
|
|
14
|
-
const costoEquilibrio = Math.round(
|
|
13
|
+
const margenBruto = ingresos == 0 ? 0 : Math.round((1 - costos / ingresos) * 100) / 100;
|
|
14
|
+
const ingresoEquilibrio = margenBruto == 0 ? 0 : Math.round((gastos / margenBruto) * 100) / 100;
|
|
15
|
+
const costoEquilibrio = Math.round(ingresoEquilibrio * (1 - margenBruto) * 100) / 100;
|
|
15
16
|
const gastosEquilibrio = gastos;
|
|
16
17
|
const invi1 = margenBruto * 2;
|
|
17
18
|
const invi2 = invi1 / 10;
|
|
18
19
|
const invi3 = costoEquilibrio / 5;
|
|
19
|
-
|
|
20
|
-
puntoEquilibrio.set(0, {
|
|
20
|
+
const puntoEquilibrio = new Map();
|
|
21
|
+
puntoEquilibrio.set(0, {
|
|
22
|
+
id: 0,
|
|
23
|
+
MargenBruto: 0,
|
|
24
|
+
Ingresos: 0,
|
|
25
|
+
GastosCostos: gastos
|
|
26
|
+
});
|
|
21
27
|
for (let i = 1; i <= 10; i++) {
|
|
22
|
-
|
|
23
|
-
|
|
28
|
+
const itemMargenBruto = Math.round((puntoEquilibrio.get(i - 1).MargenBruto + invi2) * 100) /
|
|
29
|
+
100;
|
|
30
|
+
puntoEquilibrio.set(i, {
|
|
31
|
+
id: i,
|
|
32
|
+
MargenBruto: itemMargenBruto,
|
|
24
33
|
Ingresos: Math.round((itemMargenBruto == 0 ? 0 : gastos / itemMargenBruto) * 100) / 100,
|
|
25
|
-
GastosCostos: Math.round((puntoEquilibrio.get(i - 1).GastosCostos + invi3) * 100) / 100
|
|
34
|
+
GastosCostos: Math.round((puntoEquilibrio.get(i - 1).GastosCostos + invi3) * 100) / 100
|
|
35
|
+
});
|
|
26
36
|
}
|
|
27
|
-
|
|
37
|
+
const result = {};
|
|
28
38
|
result.fecha = fecha;
|
|
29
39
|
result.gastos = gastos;
|
|
30
40
|
result.costos = costos;
|
|
31
41
|
result.ingresos = ingresos;
|
|
32
|
-
result.margenBruto = margenBruto;
|
|
42
|
+
result.margenBruto = margenBruto * 100;
|
|
33
43
|
result.ingresoEquilibrio = ingresoEquilibrio;
|
|
34
44
|
result.costoEquilibrio = costoEquilibrio;
|
|
35
45
|
result.gastosEquilibrio = gastosEquilibrio;
|
|
36
|
-
result.puntoEquilibrio = Array.from(puntoEquilibrio.values())
|
|
46
|
+
result.puntoEquilibrio = Array.from(puntoEquilibrio.values()).map((el) => ({
|
|
47
|
+
...el,
|
|
48
|
+
MargenBruto: el.MargenBruto * 100
|
|
49
|
+
}));
|
|
37
50
|
data.PuntoEquilibrio = result;
|
|
38
51
|
};
|
|
39
52
|
exports.getPuntoEquilibrio = getPuntoEquilibrio;
|