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
@@ -0,0 +1,8 @@
1
+ import { PrestamoDirecto, ProyeccionPrestamo } from "../../../models/eeff/admFinanciera";
2
+ import { ResumenAnual } from "./utils";
3
+ export declare class Amortizaciones {
4
+ cuadroAmortizacionesCapitalVariable: Partial<ProyeccionPrestamo>[];
5
+ cuadroAmortizacionesCapitalFija: Partial<ProyeccionPrestamo>[];
6
+ constructor();
7
+ agregarAmortizacionCapital(prestamo: Partial<PrestamoDirecto>, resumenAnual: ResumenAnual[]): void;
8
+ }
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Amortizaciones = void 0;
4
+ class Amortizaciones {
5
+ cuadroAmortizacionesCapitalVariable;
6
+ cuadroAmortizacionesCapitalFija;
7
+ constructor() {
8
+ this.cuadroAmortizacionesCapitalVariable = [];
9
+ this.cuadroAmortizacionesCapitalFija = [];
10
+ }
11
+ agregarAmortizacionCapital(prestamo, resumenAnual) {
12
+ const añoProyectadoInicio = prestamo.AnnoProyectadoInicio;
13
+ const amortizacion = { Descripcion: prestamo.Descripcion };
14
+ if (añoProyectadoInicio && añoProyectadoInicio <= 3) {
15
+ let i = añoProyectadoInicio;
16
+ resumenAnual.forEach(resumen => {
17
+ amortizacion[`Gestion${i}`] = resumen.capitalAnual;
18
+ i++;
19
+ });
20
+ }
21
+ if (prestamo.TipoFacilidad == 'FIJA') {
22
+ this.cuadroAmortizacionesCapitalFija.push(amortizacion);
23
+ this.cuadroAmortizacionesCapitalVariable.push({});
24
+ }
25
+ else {
26
+ this.cuadroAmortizacionesCapitalVariable.push(amortizacion);
27
+ this.cuadroAmortizacionesCapitalFija.push({});
28
+ }
29
+ }
30
+ }
31
+ exports.Amortizaciones = Amortizaciones;
@@ -0,0 +1,16 @@
1
+ import { AdministracionFinancieraCalcData } from "../../../models/eeff/admFinanciera";
2
+ interface AplicacionesData {
3
+ data: AdministracionFinancieraCalcData;
4
+ }
5
+ export declare class AplicacionesHandler {
6
+ private data;
7
+ constructor({ data }: AplicacionesData);
8
+ handle(): void;
9
+ private setKOLineaCredito;
10
+ private setKOPrestamoDirecto;
11
+ private setKIPrestamoDirecto;
12
+ private setMixtos;
13
+ private setKILeasingFinanciero;
14
+ private setKIKOLineas;
15
+ }
16
+ export {};
@@ -0,0 +1,175 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AplicacionesHandler = void 0;
4
+ const admFinanciera_1 = require("../../../models/eeff/admFinanciera");
5
+ const utils_1 = require("./utils");
6
+ class AplicacionesHandler {
7
+ data;
8
+ constructor({ data }) {
9
+ this.data = data;
10
+ }
11
+ handle() {
12
+ this.setKOLineaCredito();
13
+ this.setKOPrestamoDirecto();
14
+ this.setKIPrestamoDirecto();
15
+ this.setMixtos();
16
+ this.setKILeasingFinanciero();
17
+ this.setKIKOLineas();
18
+ }
19
+ setKOLineaCredito() {
20
+ const filaTotales = {
21
+ Descripcion: 'KO - Línea de Crédito 100% KO',
22
+ Clasificador: 'T'
23
+ };
24
+ const filas = this.data.PrestamoBajoLinea.filter(pr => pr.Clasificador !== 'T')
25
+ .map(pr => {
26
+ for (let i = 1; i <= this.data.CantidadProyeccion; i++) {
27
+ filaTotales[`Gestion${i}`] = (0, utils_1.ourParseFloat)(filaTotales[`Gestion${i}`]) + (0, utils_1.ourParseFloat)(pr.Aplicaciones?.[`Gestion${i}`]);
28
+ }
29
+ return {
30
+ Descripcion: pr.Descripcion,
31
+ ...pr.Aplicaciones
32
+ };
33
+ });
34
+ this.data.ProyeccionAplicaciones.push(...filas, filaTotales);
35
+ }
36
+ setKOPrestamoDirecto() {
37
+ const filaTotales = {
38
+ Descripcion: 'KO - Prestamo Directo',
39
+ Clasificador: 'T'
40
+ };
41
+ const filas = this.data.PrestamoDirecto.filter(pr => pr.TipoExistencia === 'NUEVA' && pr.DestinoOperacionId === admFinanciera_1.TipoDestinoEnum.CapitalOperacion)
42
+ .map(pr => {
43
+ const proyeccion = {};
44
+ if (pr.AnnoProyectadoInicio) {
45
+ let value = (0, utils_1.ourParseFloat)(pr.MontoOriginal);
46
+ proyeccion[`Gestion${pr.AnnoProyectadoInicio}`] = value;
47
+ filaTotales[`Gestion${pr.AnnoProyectadoInicio}`] = (0, utils_1.ourParseFloat)(filaTotales[`Gestion${pr.AnnoProyectadoInicio}`]) + value;
48
+ }
49
+ return {
50
+ Descripcion: pr.Descripcion,
51
+ ...proyeccion
52
+ };
53
+ });
54
+ this.data.ProyeccionAplicaciones.push(...filas, filaTotales);
55
+ }
56
+ setKIPrestamoDirecto() {
57
+ const filaTotales = {
58
+ Descripcion: 'KI - Prestamo Directo',
59
+ Clasificador: 'T'
60
+ };
61
+ const filas = this.data.PrestamoDirecto.filter(pr => pr.TipoExistencia === 'NUEVA' && pr.DestinoOperacionId === admFinanciera_1.TipoDestinoEnum.CapitalInversion)
62
+ .map(pr => {
63
+ const proyeccion = {};
64
+ if (pr.AnnoProyectadoInicio) {
65
+ let value = (0, utils_1.ourParseFloat)(pr.MontoOriginal);
66
+ proyeccion[`Gestion${pr.AnnoProyectadoInicio}`] = value;
67
+ filaTotales[`Gestion${pr.AnnoProyectadoInicio}`] = (0, utils_1.ourParseFloat)(filaTotales[`Gestion${pr.AnnoProyectadoInicio}`]) + value;
68
+ }
69
+ return {
70
+ Descripcion: pr.Descripcion,
71
+ ...proyeccion
72
+ };
73
+ });
74
+ this.data.ProyeccionAplicaciones.push(...filas, filaTotales);
75
+ }
76
+ setMixtos() {
77
+ const filaTotales = {
78
+ Descripcion: 'MIXTO - Pagares, Bonos, Etc.',
79
+ Clasificador: 'T'
80
+ };
81
+ const filas = this.data.PrestamoDirecto.filter(pr => pr.TipoExistencia === 'NUEVA' && pr.DestinoOperacionId === admFinanciera_1.TipoDestinoEnum.Otros)
82
+ .map(pr => {
83
+ const proyeccion = {};
84
+ if (pr.AnnoProyectadoInicio) {
85
+ let value = (0, utils_1.ourParseFloat)(pr.MontoOriginal);
86
+ proyeccion[`Gestion${pr.AnnoProyectadoInicio}`] = value;
87
+ filaTotales[`Gestion${pr.AnnoProyectadoInicio}`] = (0, utils_1.ourParseFloat)(filaTotales[`Gestion${pr.AnnoProyectadoInicio}`]) + value;
88
+ }
89
+ return {
90
+ Descripcion: pr.Descripcion,
91
+ ...proyeccion
92
+ };
93
+ });
94
+ this.data.ProyeccionAplicaciones.push(...filas, filaTotales);
95
+ }
96
+ setKILeasingFinanciero() {
97
+ const filaTotales = {
98
+ Descripcion: 'KI - Leasing Financiero',
99
+ Clasificador: 'T'
100
+ };
101
+ const filas = this.data.PrestamoLeasing.filter(pr => pr.TipoOperacion2 === admFinanciera_1.TipoOperacionExistencia.Nueva)
102
+ .map(pr => {
103
+ const proyeccion = {};
104
+ if (pr.AnnoProyectadoInicio) {
105
+ let value = (0, utils_1.ourParseFloat)(pr.ActivacionOperacion);
106
+ proyeccion[`Gestion${pr.AnnoProyectadoInicio}`] = value;
107
+ filaTotales[`Gestion${pr.AnnoProyectadoInicio}`] = (0, utils_1.ourParseFloat)(filaTotales[`Gestion${pr.AnnoProyectadoInicio}`]) + value;
108
+ }
109
+ return {
110
+ Descripcion: pr.Descripcion,
111
+ ...proyeccion
112
+ };
113
+ });
114
+ this.data.ProyeccionAplicaciones.push(...filas, filaTotales);
115
+ }
116
+ setKIKOLineas() {
117
+ const filaTotales = {
118
+ Descripcion: 'KO - Línea de Crédito 100% KO',
119
+ Clasificador: 'T'
120
+ };
121
+ const filas = [];
122
+ let i = 0;
123
+ let lineas = this.data.LineasMixtasBDP;
124
+ while (i < lineas.length) {
125
+ const filaVencimiento = lineas.at(i + 1);
126
+ if (filaVencimiento?.Clasificador !== 'T') {
127
+ const filaDescripcion = lineas.at(i);
128
+ const filaDeuda = lineas.at(i + 2);
129
+ const fila = {
130
+ Descripcion: filaDescripcion?.Descripcion,
131
+ };
132
+ for (let i = 1; i <= this.data.CantidadProyeccion; i++) {
133
+ let value;
134
+ if (i == 1) {
135
+ value = (0, utils_1.ourParseFloat)(filaVencimiento?.[`Gestion${i}`]) + (0, utils_1.ourParseFloat)(filaDeuda?.[`Gestion${i}`]);
136
+ }
137
+ else {
138
+ value = (0, utils_1.ourParseFloat)(filaDeuda?.[`Gestion${i}`]) - (0, utils_1.ourParseFloat)(filaDeuda?.[`Gestion${i - 1}`]) + (0, utils_1.ourParseFloat)(filaVencimiento?.[`Gestion${i}`]);
139
+ }
140
+ fila[`Gestion${i}`] = value;
141
+ filaTotales[`Gestion${i}`] = (0, utils_1.ourParseFloat)(filaTotales[`Gestion${i}`]) + value;
142
+ }
143
+ filas.push(fila);
144
+ }
145
+ i += 4;
146
+ }
147
+ i = 0;
148
+ lineas = this.data.LineasMixtasOtros;
149
+ while (i < lineas.length) {
150
+ const filaVencimiento = lineas.at(i + 1);
151
+ if (filaVencimiento?.Clasificador !== 'T') {
152
+ const filaDescripcion = lineas.at(i);
153
+ const filaDeuda = lineas.at(i + 2);
154
+ const fila = {
155
+ Descripcion: filaDescripcion?.Descripcion,
156
+ };
157
+ for (let i = 1; i <= this.data.CantidadProyeccion; i++) {
158
+ let value;
159
+ if (i == 1) {
160
+ value = (0, utils_1.ourParseFloat)(filaVencimiento?.[`Gestion${i}`]) + (0, utils_1.ourParseFloat)(filaDeuda?.[`Gestion${i}`]);
161
+ }
162
+ else {
163
+ value = (0, utils_1.ourParseFloat)(filaDeuda?.[`Gestion${i}`]) - (0, utils_1.ourParseFloat)(filaDeuda?.[`Gestion${i - 1}`]) + (0, utils_1.ourParseFloat)(filaVencimiento?.[`Gestion${i}`]);
164
+ }
165
+ fila[`Gestion${i}`] = value;
166
+ filaTotales[`Gestion${i}`] = (0, utils_1.ourParseFloat)(filaTotales[`Gestion${i}`]) + value;
167
+ }
168
+ filas.push(fila);
169
+ }
170
+ i += 4;
171
+ }
172
+ this.data.ProyeccionAplicaciones.push(...filas, filaTotales);
173
+ }
174
+ }
175
+ exports.AplicacionesHandler = AplicacionesHandler;
@@ -0,0 +1,7 @@
1
+ import { AdministracionFinancieraCalcData } from "../../../models/eeff/admFinanciera";
2
+ export declare class LineasMixtasHandler {
3
+ private data;
4
+ constructor(data: AdministracionFinancieraCalcData);
5
+ handle(): void;
6
+ private formatLineasMixtas;
7
+ }
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LineasMixtasHandler = void 0;
4
+ const admFinanciera_1 = require("../../../models/eeff/admFinanciera");
5
+ const utils_1 = require("./utils");
6
+ class LineasMixtasHandler {
7
+ data;
8
+ constructor(data) {
9
+ this.data = data;
10
+ }
11
+ handle() {
12
+ this.formatLineasMixtas(this.data.LineasMixtasBDP);
13
+ this.formatLineasMixtas(this.data.LineasMixtasOtros);
14
+ }
15
+ formatLineasMixtas(lineas) {
16
+ const filasTotales = [
17
+ { Descripcion: 'Total Vencimiento Corriente de Deuda de Largo Plazo', Clasificador: 'T', RubroId: admFinanciera_1.rubros.lineasMixtas.vencimientoCorrienteLargoPlazo },
18
+ { Descripcion: 'Total Deuda Financiera de largo plazo', Clasificador: 'T', RubroId: admFinanciera_1.rubros.lineasMixtas.deudaFinancieraLargoPlazo },
19
+ { Descripcion: 'Total Gastos Financieros y Comisiones', Clasificador: 'T', RubroId: admFinanciera_1.rubros.lineasMixtas.gastosFinancierosYComisiones },
20
+ ];
21
+ let i = 0;
22
+ while (i < lineas.length) {
23
+ const filaVencimiento = lineas.at(i + 1);
24
+ const filaDeuda = lineas.at(i + 2);
25
+ const filaGastos = lineas.at(i + 3);
26
+ const tasa = (0, utils_1.ourParseFloat)(filaGastos?.Tasa) / 100;
27
+ for (let j = 1; j <= this.data.CantidadProyeccion; j++) {
28
+ if (j > 1 && filaGastos) {
29
+ filaGastos[`Gestion${j}`] = (0, utils_1.ourParseFloat)(((0, utils_1.ourParseFloat)(filaVencimiento?.[`Gestion${j - 1}`]) + (0, utils_1.ourParseFloat)(filaDeuda?.[`Gestion${j - 1}`])) * tasa);
30
+ }
31
+ filasTotales[0][`Gestion${j}`] = (0, utils_1.ourParseFloat)(filasTotales[0][`Gestion${j}`]) + (0, utils_1.ourParseFloat)(filaVencimiento?.[`Gestion${j}`]);
32
+ filasTotales[1][`Gestion${j}`] = (0, utils_1.ourParseFloat)(filasTotales[1][`Gestion${j}`]) + (0, utils_1.ourParseFloat)(filaDeuda?.[`Gestion${j}`]);
33
+ filasTotales[2][`Gestion${j}`] = (0, utils_1.ourParseFloat)(filasTotales[2][`Gestion${j}`]) + (0, utils_1.ourParseFloat)(filaGastos?.[`Gestion${j}`]);
34
+ }
35
+ i += 4;
36
+ }
37
+ lineas.push(...filasTotales);
38
+ }
39
+ }
40
+ exports.LineasMixtasHandler = LineasMixtasHandler;
@@ -0,0 +1,13 @@
1
+ import { AdministracionFinancieraData, PrestamoBajoLinea } from "../../../models/eeff/admFinanciera";
2
+ export declare class PrestamoBajoLineaHandler {
3
+ private data;
4
+ private prestamo;
5
+ constructor(prestamo: Partial<PrestamoBajoLinea>, data: AdministracionFinancieraData);
6
+ handle(): Partial<PrestamoBajoLinea>;
7
+ private setCantidadAños;
8
+ private setSaldoLineaAplicar;
9
+ private setTasaPonderada;
10
+ private setProyecciones;
11
+ private setAplicacion;
12
+ private setProyeccion;
13
+ }
@@ -0,0 +1,75 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PrestamoBajoLineaHandler = void 0;
4
+ const luxon_1 = require("luxon");
5
+ const utils_1 = require("./utils");
6
+ class PrestamoBajoLineaHandler {
7
+ data;
8
+ prestamo;
9
+ constructor(prestamo, data) {
10
+ this.data = data;
11
+ this.prestamo = prestamo;
12
+ }
13
+ handle() {
14
+ this.prestamo.Proyecciones = {};
15
+ this.prestamo.Aplicaciones = {};
16
+ this.setCantidadAños();
17
+ this.setTasaPonderada();
18
+ this.setSaldoLineaAplicar();
19
+ this.setProyecciones();
20
+ return this.prestamo;
21
+ }
22
+ setCantidadAños() {
23
+ let cantidadAños;
24
+ if (this.prestamo.TipoExistencia == 'EXISTENTE' && this.prestamo.VencimientoLinea) {
25
+ const fechaInicio = luxon_1.DateTime.fromISO(this.data.InicioProyeccion).endOf('month');
26
+ const fechaVencimiento = luxon_1.DateTime.fromISO(this.prestamo.VencimientoLinea).endOf('month');
27
+ const diferenciaAños = Math.ceil(Math.abs(fechaInicio.diff(fechaVencimiento, 'years').years));
28
+ if (diferenciaAños > 0) {
29
+ cantidadAños = diferenciaAños;
30
+ }
31
+ }
32
+ else {
33
+ cantidadAños = this.prestamo.Plazo;
34
+ }
35
+ this.prestamo.CantidadAnnos = cantidadAños;
36
+ }
37
+ setSaldoLineaAplicar() {
38
+ this.prestamo.SaldoLineaAplicar = (0, utils_1.ourParseFloat)(this.prestamo.MontoOriginal) - (0, utils_1.ourParseFloat)(this.prestamo.MontoUtilizado);
39
+ }
40
+ setTasaPonderada() {
41
+ let totalMonto = this.data.PrestamoBajoLinea.reduce((acc, curr) => acc + (0, utils_1.ourParseFloat)(curr.MontoOriginal), 0);
42
+ let promedio = 0;
43
+ if (totalMonto) {
44
+ promedio = (0, utils_1.ourParseFloat)(this.prestamo.MontoOriginal) / totalMonto;
45
+ }
46
+ this.prestamo.TasaPonderada = (0, utils_1.ourParseFloat)(promedio * (0, utils_1.ourParseFloat)(this.prestamo.Tasa));
47
+ }
48
+ setProyecciones() {
49
+ for (let i = 1; i <= this.data.CantidadProyeccion; i++) {
50
+ this.setProyeccion(i);
51
+ this.setAplicacion(i);
52
+ }
53
+ }
54
+ setAplicacion(gestion) {
55
+ let value;
56
+ if (gestion === 1) {
57
+ if (this.prestamo.TipoExistencia === 'EXISTENTE') {
58
+ value = this.prestamo.SaldoLineaAplicar;
59
+ }
60
+ else {
61
+ value = this.prestamo.MontoOriginal;
62
+ }
63
+ }
64
+ else {
65
+ value = (0, utils_1.ourParseFloat)(this.prestamo.Proyecciones?.[`Gestion${gestion}`]) - (0, utils_1.ourParseFloat)(this.prestamo.Proyecciones?.[`Gestion${gestion - 1}`]);
66
+ }
67
+ this.prestamo.Aplicaciones[`Gestion${gestion}`] = (0, utils_1.ourParseFloat)(value);
68
+ }
69
+ setProyeccion(gestion) {
70
+ if (gestion <= (0, utils_1.ourParseFloat)(this.prestamo.CantidadAnnos)) {
71
+ this.prestamo.Proyecciones[`Gestion${gestion}`] = (0, utils_1.ourParseFloat)(this.prestamo.MontoOriginal);
72
+ }
73
+ }
74
+ }
75
+ exports.PrestamoBajoLineaHandler = PrestamoBajoLineaHandler;
@@ -0,0 +1,26 @@
1
+ import { AdministracionFinancieraData, PrestamoDirecto } from "../../../models/eeff/admFinanciera";
2
+ interface HandlerData {
3
+ data: AdministracionFinancieraData;
4
+ prestamo: Partial<PrestamoDirecto>;
5
+ }
6
+ export declare class PrestamoDirectoHandler {
7
+ private data;
8
+ private prestamo;
9
+ private simulador;
10
+ private simuladorFijo2;
11
+ constructor({ data, prestamo }: HandlerData);
12
+ handle(): Partial<PrestamoDirecto>;
13
+ private setMesesPorcionPagada;
14
+ private setProyecciones;
15
+ private setAmortizacionInteresVariable;
16
+ private setAmortizacionesInteresFija;
17
+ private setPorcionNoCorriente;
18
+ private setPorcionCuotasPagadas;
19
+ private setAmortizacionesCapital;
20
+ private setPlazoRemanente;
21
+ private setPlazos;
22
+ private setAmortizacionesCapitalEfectoCorrienteYCuotaFinal;
23
+ private setCuadroExposicion;
24
+ private setCuadroEfectoLinea;
25
+ }
26
+ export {};
@@ -0,0 +1,267 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PrestamoDirectoHandler = void 0;
4
+ const luxon_1 = require("luxon");
5
+ const utils_1 = require("./utils");
6
+ class PrestamoDirectoHandler {
7
+ data;
8
+ prestamo;
9
+ simulador;
10
+ simuladorFijo2 = null;
11
+ constructor({ data, prestamo }) {
12
+ this.data = data;
13
+ this.prestamo = prestamo;
14
+ this.simulador = (0, utils_1.simuladorCuotas)({
15
+ monto: prestamo.MontoOriginal ?? 0,
16
+ plazo: prestamo.Plazo ?? 0,
17
+ frecuencia: prestamo.TipoPeriodicidadId ?? 'MENSUAL',
18
+ tipoCuota: prestamo.TipoFacilidad ?? 'VARIABLE',
19
+ periodoGracia: prestamo.Gracia,
20
+ tasaInteres: prestamo.Tasa
21
+ });
22
+ }
23
+ handle() {
24
+ this.prestamo.PorcionesNoCorrientes = {};
25
+ this.prestamo.AmortizacionesInteres = {};
26
+ this.setMesesPorcionPagada();
27
+ this.setPorcionCuotasPagadas();
28
+ this.setPlazoRemanente();
29
+ this.setAmortizacionesCapital();
30
+ this.setPlazos();
31
+ this.setAmortizacionesCapitalEfectoCorrienteYCuotaFinal();
32
+ this.setCuadroExposicion();
33
+ this.setCuadroEfectoLinea();
34
+ this.setProyecciones();
35
+ this.setAmortizacionesInteresFija();
36
+ return this.prestamo;
37
+ }
38
+ setMesesPorcionPagada() {
39
+ if (this.prestamo.FechaDesembolso) {
40
+ const inicial = luxon_1.DateTime.fromISO(this.data.InicioProyeccion);
41
+ const desembolso = luxon_1.DateTime.fromISO(this.prestamo.FechaDesembolso);
42
+ this.prestamo.MesesPorcionPagada = Math.floor(inicial.diff(desembolso, 'months').months);
43
+ }
44
+ }
45
+ setProyecciones() {
46
+ for (let i = 1; i <= this.data.CantidadProyeccion; i++) {
47
+ this.setPorcionNoCorriente(i);
48
+ this.setAmortizacionInteresVariable(i);
49
+ }
50
+ }
51
+ setAmortizacionInteresVariable(gestion) {
52
+ if (this.prestamo.TipoFacilidad === 'VARIABLE') {
53
+ let value;
54
+ const tasa = (0, utils_1.ourParseFloat)(this.prestamo.Tasa) / 100;
55
+ const mesesPorcionPagada = (0, utils_1.ourParseFloat)(this.prestamo.MesesPorcionPagada);
56
+ const plazo = (0, utils_1.ourParseFloat)(this.prestamo.Plazos?.[`Gestion${gestion}`]);
57
+ let porcionCorriente = (0, utils_1.ourParseFloat)(this.prestamo.AmortizacionesCapitalCuotaFinal?.[`Gestion${gestion}`]);
58
+ let porcionNoCorriente = (0, utils_1.ourParseFloat)(this.prestamo.PorcionesNoCorrientes?.[`Gestion${gestion}`]);
59
+ const porcionCorrientePagada = (0, utils_1.ourParseFloat)(this.prestamo.PorcionPagada);
60
+ if (gestion == 1) {
61
+ if ((0, utils_1.ourParseFloat)(this.prestamo.Gracia) / 12 > 0) {
62
+ value = (porcionCorriente + porcionNoCorriente) * tasa * mesesPorcionPagada / 12;
63
+ }
64
+ else {
65
+ if (plazo == this.prestamo.PlazoRemanenteAños) {
66
+ value = (porcionCorriente + porcionNoCorriente + porcionCorrientePagada) * tasa * mesesPorcionPagada / 12;
67
+ }
68
+ else {
69
+ value = (porcionCorriente + porcionNoCorriente) * tasa;
70
+ }
71
+ }
72
+ }
73
+ else {
74
+ porcionCorriente = (0, utils_1.ourParseFloat)(this.prestamo.AmortizacionesCapitalCuotaFinal?.[`Gestion${gestion - 1}`]);
75
+ porcionNoCorriente = (0, utils_1.ourParseFloat)(this.prestamo.PorcionesNoCorrientes?.[`Gestion${gestion - 1}`]);
76
+ value = (porcionCorriente + porcionNoCorriente) * tasa;
77
+ }
78
+ this.prestamo.AmortizacionesInteres[`Gestion${gestion}`] = value;
79
+ }
80
+ }
81
+ setAmortizacionesInteresFija() {
82
+ if (this.prestamo.TipoFacilidad === 'FIJA') {
83
+ const tasa = (0, utils_1.ourParseFloat)(this.prestamo.Tasa) / 100;
84
+ this.prestamo.AmortizacionesInteres[`Gestion1`] = ((0, utils_1.ourParseFloat)(this.prestamo.MontoOriginal) * tasa / 12) * (0, utils_1.ourParseFloat)(this.prestamo.MesesPorcionPagada);
85
+ const añoProyectadoInicio = (0, utils_1.ourParseFloat)(this.prestamo.AnnoProyectadoInicio);
86
+ if (this.simuladorFijo2 && añoProyectadoInicio <= 3) {
87
+ let i = añoProyectadoInicio > 1 ? añoProyectadoInicio : 2;
88
+ this.simuladorFijo2.pagosAnuales.forEach(resumen => {
89
+ this.prestamo.AmortizacionesInteres[`Gestion${i}`] = resumen.interesAnual;
90
+ i++;
91
+ });
92
+ }
93
+ }
94
+ }
95
+ setPorcionNoCorriente(gestion) {
96
+ this.prestamo.PorcionesNoCorrientes[`Gestion${gestion}`] = (0, utils_1.ourParseFloat)(this.prestamo.CuadroEfectoLinea?.[`Gestion${gestion}`]) + (0, utils_1.ourParseFloat)(this.prestamo.CuadroEfectoExposicion?.[`Gestion${gestion}`]) - (0, utils_1.ourParseFloat)(this.prestamo.AmortizacionesCapitalCuotaFinal?.[`Gestion${gestion}`]);
97
+ }
98
+ setPorcionCuotasPagadas() {
99
+ if (this.prestamo.FechaDesembolso) {
100
+ const pagado = (0, utils_1.calcularPorcionCorrientePagada)({
101
+ fechaInicial: this.data.InicioProyeccion,
102
+ fechaDesembolso: this.prestamo.FechaDesembolso,
103
+ frecuencia: this.prestamo.TipoPeriodicidadId ?? 'MENSUAL',
104
+ simulador: this.simulador.simulador
105
+ });
106
+ this.prestamo.PorcionPagada = (0, utils_1.ourParseFloat)(pagado.porcionCorrientePagada);
107
+ this.prestamo.CuotasPagadas = pagado.cuotasPagadas;
108
+ if (this.prestamo.TipoFacilidad === 'FIJA') {
109
+ const dif = (0, utils_1.ourParseFloat)(this.prestamo.Gracia) - (0, utils_1.ourParseFloat)(this.prestamo.CuotasPagadas);
110
+ const periodoGracia = dif > 0 ? dif : 0;
111
+ this.simuladorFijo2 = (0, utils_1.simuladorCuotas)({
112
+ monto: (0, utils_1.ourParseFloat)(this.prestamo.MontoOriginal) - (0, utils_1.ourParseFloat)(this.prestamo.PorcionPagada),
113
+ plazo: (0, utils_1.ourParseFloat)(this.prestamo.Plazo) * 12 - (0, utils_1.ourParseFloat)(this.prestamo.CuotasPagadas),
114
+ frecuencia: this.prestamo.TipoPeriodicidadId ?? 'MENSUAL',
115
+ tipoCuota: this.prestamo.TipoFacilidad ?? 'VARIABLE',
116
+ periodoGracia,
117
+ tasaInteres: this.prestamo.Tasa,
118
+ plazoMeses: true
119
+ });
120
+ }
121
+ }
122
+ }
123
+ setAmortizacionesCapital() {
124
+ const añoProyectadoInicio = this.prestamo.AnnoProyectadoInicio;
125
+ const amortizacion = {};
126
+ if (añoProyectadoInicio && añoProyectadoInicio <= 3) {
127
+ let i = añoProyectadoInicio;
128
+ this.simulador.pagosAnuales.forEach(resumen => {
129
+ amortizacion[`Gestion${i}`] = (0, utils_1.ourParseFloat)(resumen.capitalAnual);
130
+ i++;
131
+ });
132
+ }
133
+ this.prestamo.AmortizacionesCapital = amortizacion;
134
+ }
135
+ setPlazoRemanente() {
136
+ this.prestamo.PlazoRemanenteAños = Math.floor((0, utils_1.ourParseFloat)(this.prestamo.Plazo) - (0, utils_1.ourParseFloat)(this.prestamo.Gracia) / 12);
137
+ }
138
+ setPlazos() {
139
+ this.prestamo.Plazos = (0, utils_1.generatePlazos)({
140
+ cantidadProyeccion: this.data.CantidadProyeccion,
141
+ inicio: this.prestamo.AnnoProyectadoInicio,
142
+ valor: this.prestamo.Plazo
143
+ });
144
+ }
145
+ setAmortizacionesCapitalEfectoCorrienteYCuotaFinal() {
146
+ const amortizacion = {};
147
+ const amortizacionCuotaFinal = {};
148
+ const plazos = this.prestamo.Plazos;
149
+ for (let i = 1; i <= this.data.CantidadProyeccion; i++) {
150
+ const plazo = plazos?.[`Gestion${i}`];
151
+ let valor = 0;
152
+ if (plazo == 1) {
153
+ valor = -(0, utils_1.ourParseFloat)(this.prestamo.PorcionPagada);
154
+ }
155
+ else if ((0, utils_1.ourParseFloat)(this.prestamo.PlazoRemanenteAños) + 1 == plazo) {
156
+ valor = (0, utils_1.ourParseFloat)(this.prestamo.PorcionPagada);
157
+ }
158
+ amortizacion[`Gestion${i}`] = valor;
159
+ amortizacionCuotaFinal[`Gestion${i}`] = (0, utils_1.ourParseFloat)(valor + (0, utils_1.ourParseFloat)(this.prestamo.AmortizacionesCapital?.[`Gestion${i}`]));
160
+ }
161
+ this.prestamo.AmortizacionesCapitalEfectoCorriente = amortizacion;
162
+ this.prestamo.AmortizacionesCapitalCuotaFinal = amortizacionCuotaFinal;
163
+ }
164
+ setCuadroExposicion() {
165
+ const cuadro = {};
166
+ const plazos = this.prestamo.Plazos;
167
+ if (!this.prestamo.EsBajoLinea) {
168
+ let value;
169
+ for (let i = 1; i <= this.data.CantidadProyeccion; i++) {
170
+ const plazo = (0, utils_1.ourParseFloat)(plazos?.[`Gestion${i}`]);
171
+ const añoProyectadoInicio = (0, utils_1.ourParseFloat)(this.prestamo.AnnoProyectadoInicio);
172
+ if (this.prestamo.TipoFacilidad === 'VARIABLE') {
173
+ if (i === 1) {
174
+ if (plazo && this.prestamo.AnnoProyectadoInicio === 1) {
175
+ if ((0, utils_1.ourParseFloat)(this.prestamo.PlazoRemanenteAños) < plazo) {
176
+ value = 0;
177
+ }
178
+ else {
179
+ value = (0, utils_1.ourParseFloat)(this.prestamo.MontoOriginal) - (0, utils_1.ourParseFloat)(this.prestamo.PorcionPagada);
180
+ }
181
+ }
182
+ }
183
+ else {
184
+ if ((0, utils_1.ourParseFloat)(this.prestamo.AnnoProyectadoInicio) <= i) {
185
+ if ((0, utils_1.ourParseFloat)(this.prestamo.PlazoRemanenteAños) < (0, utils_1.ourParseFloat)(plazo)) {
186
+ value = this.prestamo.MontoOriginal;
187
+ }
188
+ else {
189
+ const sumaAmortizaciones = (0, utils_1.sumCorrelativeKeys)({
190
+ data: this.prestamo.AmortizacionesCapitalCuotaFinal ?? {},
191
+ baseKey: 'Gestion',
192
+ endIndex: i - 1
193
+ });
194
+ if ((0, utils_1.ourParseFloat)(this.prestamo.Gracia) > 0) {
195
+ value = (0, utils_1.ourParseFloat)(this.prestamo.MontoOriginal) - sumaAmortizaciones;
196
+ }
197
+ else {
198
+ value = (0, utils_1.ourParseFloat)(this.prestamo.MontoOriginal) - (0, utils_1.ourParseFloat)(this.prestamo.PorcionPagada) - sumaAmortizaciones;
199
+ }
200
+ }
201
+ }
202
+ }
203
+ }
204
+ else {
205
+ if (i == 1 && añoProyectadoInicio === 1) {
206
+ value = (0, utils_1.ourParseFloat)(this.prestamo.MontoOriginal);
207
+ }
208
+ else {
209
+ if (añoProyectadoInicio <= i) {
210
+ const sumaAnteriores = (0, utils_1.sumCorrelativeKeys)({
211
+ data: this.prestamo.AmortizacionesCapital,
212
+ baseKey: 'Gestion',
213
+ endIndex: i - 1
214
+ });
215
+ value = (0, utils_1.ourParseFloat)(this.prestamo.MontoOriginal) - sumaAnteriores;
216
+ }
217
+ }
218
+ }
219
+ cuadro[`Gestion${i}`] = (0, utils_1.ourParseFloat)(value);
220
+ }
221
+ }
222
+ this.prestamo.CuadroEfectoExposicion = cuadro;
223
+ }
224
+ setCuadroEfectoLinea() {
225
+ const cuadro = {};
226
+ const plazos = this.prestamo.Plazos;
227
+ if (this.prestamo.EsBajoLinea) {
228
+ let value;
229
+ for (let i = 1; i <= this.data.CantidadProyeccion; i++) {
230
+ const plazo = plazos?.[`Gestion${i}`];
231
+ if (i === 1) {
232
+ if (plazo && this.prestamo.AnnoProyectadoInicio === 1) {
233
+ if ((0, utils_1.ourParseFloat)(this.prestamo.PlazoRemanenteAños) < plazo) {
234
+ value = this.prestamo.MontoOriginal;
235
+ }
236
+ else {
237
+ value = (0, utils_1.ourParseFloat)(this.prestamo.MontoOriginal) - (0, utils_1.ourParseFloat)(this.prestamo.PorcionPagada);
238
+ }
239
+ }
240
+ }
241
+ else {
242
+ if ((0, utils_1.ourParseFloat)(this.prestamo.AnnoProyectadoInicio) <= i) {
243
+ if ((0, utils_1.ourParseFloat)(this.prestamo.PlazoRemanenteAños) < (0, utils_1.ourParseFloat)(plazo)) {
244
+ value = this.prestamo.MontoOriginal;
245
+ }
246
+ else {
247
+ const sumaAmortizaciones = (0, utils_1.sumCorrelativeKeys)({
248
+ data: this.prestamo.AmortizacionesCapitalCuotaFinal ?? {},
249
+ baseKey: 'Gestion',
250
+ endIndex: i - 1
251
+ });
252
+ if ((0, utils_1.ourParseFloat)(this.prestamo.Gracia) > 0) {
253
+ value = (0, utils_1.ourParseFloat)(this.prestamo.MontoOriginal) - sumaAmortizaciones;
254
+ }
255
+ else {
256
+ value = (0, utils_1.ourParseFloat)(this.prestamo.MontoOriginal) - (0, utils_1.ourParseFloat)(this.prestamo.PorcionPagada) - sumaAmortizaciones;
257
+ }
258
+ }
259
+ }
260
+ }
261
+ cuadro[`Gestion${i}`] = (0, utils_1.ourParseFloat)(value);
262
+ }
263
+ }
264
+ this.prestamo.CuadroEfectoLinea = cuadro;
265
+ }
266
+ }
267
+ exports.PrestamoDirectoHandler = PrestamoDirectoHandler;