bdpformulas 1.0.58 → 1.0.60

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.
@@ -1,5 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ const lodash_1 = require("lodash");
4
+ const utils_1 = require("../eeff/admFinanciera/utils");
3
5
  const RUBRO_INGRESO = 'ACT_CNFL_40001';
4
6
  const RUBRO_COSTOS = 'ACT_CNFL_50001';
5
7
  const RUBRO_GASTOS = 'ACT_CNFL_60001';
@@ -18,187 +20,383 @@ class FlujoProyectadoPecStrategy {
18
20
  const copiaGastos = getCuentaCopy(RUBRO_GASTOS, data);
19
21
  const copiaOtrosIngresos = getCuentaCopy(RUBRO_OTROS_INGRESOS, data);
20
22
  const copiaGastosFamiliares = getCuentaCopy(RUBRO_GASTOS_FAMILIARES, data);
21
- let sumaDesarrollo = [];
22
- //@ts-ignore
23
- let sumaDesarrolloAnual = null;
24
- for (let actividad of this.actividades) {
23
+ const copiaIngresoAnual = getCuentaCopy(RUBRO_INGRESO, data, false);
24
+ const copiaCostosAnual = getCuentaCopy(RUBRO_INGRESO, data, false);
25
+ const copiaGastosAnual = getCuentaCopy(RUBRO_INGRESO, data, false);
26
+ const copiaOtrosIngresosAnual = getCuentaCopy(RUBRO_OTROS_INGRESOS, data, false);
27
+ if (!Array.isArray(data.ParametrosEngorde)) {
28
+ data.ParametrosEngorde = [];
29
+ }
30
+ let sumaGastosFamiliares = 0;
31
+ for (const actividad of this.actividades) {
25
32
  addIngresosM(actividad, data);
26
33
  addCostosM(actividad, data);
27
34
  addGastosM(actividad, data);
28
35
  otrosIngresoM(actividad, data);
29
36
  gastosFamiliaresM(actividad, data);
30
- sumaDesarrollo.push(getDesarrolloSuma(actividad));
31
- sumaDesarrolloAnual = getSumaDesarrolloAnualByAnno(actividad, data, sumaDesarrolloAnual);
37
+ this.setParametrosEngorde(actividad, data);
38
+ this.addIngresoAnual(actividad, data);
39
+ this.addCostoAnual(actividad, data);
40
+ this.addGastoAnual(actividad, data);
41
+ this.addOtroIngresoFamiliarAnual(actividad, data);
42
+ sumaGastosFamiliares += this.getGastosFamiliares(actividad);
32
43
  }
44
+ this.setGastosFamiliares(sumaGastosFamiliares, data);
33
45
  sumarizarCuenta(RUBRO_INGRESO, data, copiaIngreso);
34
46
  sumarizarCuenta(RUBRO_COSTOS, data, copiaCostos);
35
47
  sumarizarCuenta(RUBRO_GASTOS, data, copiaGastos);
36
48
  sumarizarCuenta(RUBRO_OTROS_INGRESOS, data, copiaOtrosIngresos);
37
49
  sumarizarCuenta(RUBRO_GASTOS_FAMILIARES, data, copiaGastosFamiliares);
38
- addCalculosBase(data, sumaDesarrollo, sumaDesarrolloAnual);
50
+ sumarizarCuenta(RUBRO_INGRESO, data, copiaIngresoAnual, false);
51
+ sumarizarCuenta(RUBRO_COSTOS, data, copiaCostosAnual, false);
52
+ sumarizarCuenta(RUBRO_GASTOS, data, copiaGastosAnual, false);
53
+ sumarizarCuenta(RUBRO_OTROS_INGRESOS, data, copiaOtrosIngresosAnual, false);
54
+ console.log((0, lodash_1.cloneDeep)(data));
39
55
  return data;
40
56
  }
57
+ setParametrosEngorde(actividad, data) {
58
+ const totalEstacionalidad = actividad.Ventas.EstacionalidadCalc.find((el) => el.RubroId === 'TOT01');
59
+ const sumaAnnoBase = (0, utils_1.ourParseFloat)(totalEstacionalidad?.Total) * 10;
60
+ const proyeccionVentasTotales = actividad.Desarrollo.VentasCantidad.find((el) => el.RubroId === 'TOT01');
61
+ let sumaHato = 0;
62
+ for (let i = 1; i <= 10; i++) {
63
+ sumaHato += (0, utils_1.ourParseFloat)(proyeccionVentasTotales?.[`C-${i}`]);
64
+ }
65
+ const parametroEngorde = data.Parametros.ParametrosActividad.find((el) => el.ActividadId == actividad.ActividadEconomicaId);
66
+ let existe = data.ParametrosEngorde.find((p) => p.ActividadEconomicaId == actividad.ActividadEconomicaId);
67
+ if (!existe) {
68
+ existe = {
69
+ ActividadEconomicaId: actividad.ActividadEconomicaId,
70
+ Descripcion: actividad.Descripcion
71
+ };
72
+ data.ParametrosEngorde.push(existe);
73
+ }
74
+ existe.SumaAnnoBase = sumaAnnoBase;
75
+ existe.SumaHato = sumaHato;
76
+ existe.EsEngorde = parametroEngorde?.EsEngorde ?? 'NO';
77
+ let conclusion = '';
78
+ if (sumaAnnoBase < sumaHato || existe.EsEngorde === 'SI') {
79
+ conclusion = 'FLUJO HISTORICO';
80
+ }
81
+ else if (sumaHato < sumaAnnoBase) {
82
+ conclusion = 'DESARROLLO DE HATO';
83
+ }
84
+ existe.Conclusion = conclusion;
85
+ }
86
+ addIngresoAnual(actividad, data) {
87
+ const rubro = data.FlujoProyectadoAnualMap.get(`${RUBRO_INGRESO}_0`);
88
+ const row = { ...rubro };
89
+ row.Descripcion = `Ingresos ${actividad.Desarrollo.ActividadGanadera}`;
90
+ row.Clasificador = 'SBCT';
91
+ row.Editable = false;
92
+ row.UUID = `${RUBRO_INGRESO}_${actividad.Desarrollo.ActividadEconomicaId}`;
93
+ row.RubroId = `${RUBRO_INGRESO}.1`;
94
+ const totalesCalculoIngresos = actividad.Ventas.EstacionalidadCalc.find((el) => el.RubroId === 'TOT01');
95
+ const totalesCantidad = actividad.Desarrollo.VentasCantidad.find((el) => el.RubroId === 'TOT01');
96
+ const I10 = 0;
97
+ const parametroEngorde = data.ParametrosEngorde.find((el) => el.ActividadEconomicaId === actividad.ActividadEconomicaId);
98
+ const variaciones = data.FlujoProyectadoAnualMap.get('ACT_CNFL_30001_0');
99
+ for (let i = 1; i <= data.DatosEvaluacion.CantidadProyeccion; i++) {
100
+ if (i == 1) {
101
+ row[`Monto${i}`] = (0, utils_1.ourParseFloat)(totalesCalculoIngresos?.Total);
102
+ }
103
+ else {
104
+ const variacion = (0, utils_1.ourParseFloat)(variaciones?.[`Monto${i}`]) / 100;
105
+ if (parametroEngorde?.Conclusion === 'DESARROLLO DE HATO') {
106
+ row[`Monto${i}`] =
107
+ (0, utils_1.ourParseFloat)(totalesCantidad?.[`C-${i - 1}`]) *
108
+ (1 + variacion + I10);
109
+ }
110
+ else {
111
+ row[`Monto${i}`] =
112
+ (0, utils_1.ourParseFloat)(row[`Monto${i - 1}`]) *
113
+ (1 + variacion + I10);
114
+ }
115
+ }
116
+ }
117
+ const existente = data.FlujoProyectadoAnual.findIndex((el) => el.UUID === row.UUID);
118
+ if (existente >= 0) {
119
+ data.FlujoProyectadoAnual[existente] = row;
120
+ }
121
+ else {
122
+ data.FlujoProyectadoAnual.push(row);
123
+ }
124
+ }
125
+ addCostoAnual(actividad, data) {
126
+ const rubro = data.FlujoProyectadoAnualMap.get(`${RUBRO_COSTOS}_0`);
127
+ const row = { ...rubro };
128
+ row.Descripcion = `(-) Costos de Ventas ${actividad.Desarrollo.ActividadGanadera}`;
129
+ row.Clasificador = 'SBCT';
130
+ row.Editable = false;
131
+ row.UUID = `${RUBRO_COSTOS}_${actividad.Desarrollo.ActividadEconomicaId}`;
132
+ row.RubroId = `${RUBRO_COSTOS}.1`;
133
+ const filaIngresos = data.FlujoProyectadoAnual.find((el) => el.UUID === `${RUBRO_INGRESO}_${actividad.ActividadEconomicaId}`);
134
+ const porcentaje = this.getPorcentaje(actividad, data);
135
+ const parametroEngorde = data.ParametrosEngorde.find((el) => el.ActividadEconomicaId === actividad.ActividadEconomicaId);
136
+ const variaciones = data.FlujoProyectadoAnualMap.get('ACT_CNFL_30001_0');
137
+ for (let i = 1; i <= data.DatosEvaluacion.CantidadProyeccion; i++) {
138
+ if (i == 1) {
139
+ row[`Monto${i}`] =
140
+ (0, utils_1.ourParseFloat)(filaIngresos?.[`Monto${i}`]) * porcentaje;
141
+ }
142
+ else {
143
+ const variacion = (0, utils_1.ourParseFloat)(variaciones?.[`Monto${i}`]) / 100;
144
+ if (parametroEngorde?.Conclusion === 'DESARROLLO DE HATO') {
145
+ row[`Monto${i}`] =
146
+ (0, utils_1.ourParseFloat)(filaIngresos?.[`Monto${i}`]) *
147
+ porcentaje *
148
+ (1 + variacion);
149
+ }
150
+ else {
151
+ row[`Monto${i}`] =
152
+ (0, utils_1.ourParseFloat)(row[`Monto${i - 1}`]) * (1 + variacion);
153
+ }
154
+ }
155
+ }
156
+ const existente = data.FlujoProyectadoAnual.findIndex((el) => el.UUID === row.UUID);
157
+ if (existente >= 0) {
158
+ data.FlujoProyectadoAnual[existente] = row;
159
+ }
160
+ else {
161
+ data.FlujoProyectadoAnual.push(row);
162
+ }
163
+ }
164
+ getPorcentaje(actividad, data) {
165
+ const filaIngresosMensual = data.FlujoProyectadoMensual.find((el) => el.UUID === `${RUBRO_INGRESO}_${actividad.ActividadEconomicaId}`);
166
+ const filaCostosMensual = data.FlujoProyectadoMensual.find((el) => el.UUID === `${RUBRO_COSTOS}_${actividad.ActividadEconomicaId}`);
167
+ let totalIngresos = 0;
168
+ let totalMensual = 0;
169
+ for (let i = 1; i <= data.DatosEvaluacion.CantidadProyeccion; i++) {
170
+ totalIngresos += (0, utils_1.ourParseFloat)(filaIngresosMensual?.[`Monto${i}`]);
171
+ totalMensual += (0, utils_1.ourParseFloat)(filaCostosMensual?.[`Monto${i}`]);
172
+ }
173
+ return totalIngresos > 0 ? totalMensual / totalIngresos : 0;
174
+ }
175
+ addGastoAnual(actividad, data) {
176
+ const rubro = data.FlujoProyectadoAnualMap.get(`${RUBRO_GASTOS}_0`);
177
+ const row = { ...rubro };
178
+ row.Descripcion = `(-) Costos de Ventas ${actividad.Desarrollo.ActividadGanadera}`;
179
+ row.Clasificador = 'SBCT';
180
+ row.Editable = false;
181
+ row.UUID = `${RUBRO_GASTOS}_${actividad.Desarrollo.ActividadEconomicaId}`;
182
+ row.RubroId = `${RUBRO_GASTOS}.1`;
183
+ const variaciones = data.FlujoProyectadoAnualMap.get('ACT_CNFL_30003_0');
184
+ const gastos = calcularOtrosGastos(actividad.OtrosGastos, 'Anual');
185
+ for (let i = 1; i <= data.DatosEvaluacion.CantidadProyeccion; i++) {
186
+ const variacion = (0, utils_1.ourParseFloat)(variaciones?.[`Monto${i}`]) / 100;
187
+ if (i == 1) {
188
+ row[`Monto${i}`] = (0, utils_1.ourParseFloat)(gastos.GastosOperativos);
189
+ }
190
+ else if (i == 2) {
191
+ row[`Monto${i}`] =
192
+ (0, utils_1.ourParseFloat)(gastos.GastosOperativos) * (1 + variacion);
193
+ }
194
+ else {
195
+ row[`Monto${i}`] =
196
+ (0, utils_1.ourParseFloat)(row[`Monto${i - 1}`]) * (1 + variacion);
197
+ }
198
+ }
199
+ const existente = data.FlujoProyectadoAnual.findIndex((el) => el.UUID === row.UUID);
200
+ if (existente >= 0) {
201
+ data.FlujoProyectadoAnual[existente] = row;
202
+ }
203
+ else {
204
+ data.FlujoProyectadoAnual.push(row);
205
+ }
206
+ }
207
+ addOtroIngresoFamiliarAnual(actividad, data) {
208
+ const rubro = data.FlujoProyectadoAnualMap.get(`${RUBRO_OTROS_INGRESOS}_0`);
209
+ const row = { ...rubro };
210
+ row.Descripcion = `Otros Ingresos Familiares ${actividad.Desarrollo.ActividadGanadera}`;
211
+ row.Clasificador = 'SBCT';
212
+ row.Editable = false;
213
+ row.UUID = `${RUBRO_OTROS_INGRESOS}_${actividad.Desarrollo.ActividadEconomicaId}`;
214
+ row.RubroId = `${RUBRO_OTROS_INGRESOS}.1`;
215
+ const filaOtrosIngresosMensual = data.FlujoProyectadoMensual.find((el) => el.UUID ===
216
+ `${RUBRO_OTROS_INGRESOS}_${actividad.Desarrollo.ActividadEconomicaId}`);
217
+ let total = 0;
218
+ for (let i = 1; i <= data.DatosEvaluacion.CantidadProyeccion; i++) {
219
+ total += (0, utils_1.ourParseFloat)(filaOtrosIngresosMensual?.[`Monto${i}`]);
220
+ }
221
+ for (let i = 1; i <= data.DatosEvaluacion.CantidadProyeccion; i++) {
222
+ row[`Monto${i}`] = total;
223
+ }
224
+ const existente = data.FlujoProyectadoAnual.findIndex((el) => el.UUID === row.UUID);
225
+ if (existente >= 0) {
226
+ data.FlujoProyectadoAnual[existente] = row;
227
+ }
228
+ else {
229
+ data.FlujoProyectadoAnual.push(row);
230
+ }
231
+ }
232
+ getGastosFamiliares(actividad) {
233
+ return calcularOtrosGastos(actividad.OtrosGastos, 'Anual')
234
+ .GastosFamiliares;
235
+ }
236
+ setGastosFamiliares(totalGastos, data) {
237
+ const filaGastos = data.FlujoProyectadoAnual.find((el) => el.RubroId === RUBRO_GASTOS_FAMILIARES);
238
+ if (filaGastos) {
239
+ const porcentaje = (0, utils_1.ourParseFloat)(filaGastos.MontoCajaPercent) / 100;
240
+ for (let i = 1; i <= data.DatosEvaluacion.CantidadProyeccion; i++) {
241
+ if (i == 1) {
242
+ filaGastos[`Monto${i}`] = totalGastos;
243
+ }
244
+ else if (i == 2) {
245
+ filaGastos[`Monto${i}`] = totalGastos * (1 + porcentaje);
246
+ }
247
+ else {
248
+ filaGastos[`Monto${i}`] =
249
+ (0, utils_1.ourParseFloat)(filaGastos[`Monto${i - 1}`]) *
250
+ (1 + porcentaje);
251
+ }
252
+ }
253
+ }
254
+ }
41
255
  }
42
256
  exports.default = FlujoProyectadoPecStrategy;
43
- const getCuentaCopy = (rubroId, data) => {
44
- const cuenta = data.FlujoProyectadoMensualMap.get(`${rubroId}_0`);
257
+ const getCuentaCopy = (rubroId, data, mensual = true) => {
258
+ const fuente = mensual
259
+ ? data.FlujoProyectadoMensualMap
260
+ : data.FlujoProyectadoAnualMap;
261
+ const cuenta = fuente.get(`${rubroId}_0`);
45
262
  return { ...cuenta };
46
263
  };
47
- const sumarizarCuenta = (rubroId, data, copia) => {
48
- const cuenta = data.FlujoProyectadoMensualMap.get(`${rubroId}_0`);
49
- const detalles = data.FlujoProyectadoMensual.filter((item) => item.RubroId == `${rubroId}.1`);
50
- for (let detalle of detalles) {
264
+ const sumarizarCuenta = (rubroId, data, copia, mensual = true) => {
265
+ const fuenteMap = mensual
266
+ ? data.FlujoProyectadoMensualMap
267
+ : data.FlujoProyectadoAnualMap;
268
+ const fuenteArray = mensual
269
+ ? data.FlujoProyectadoMensual
270
+ : data.FlujoProyectadoAnual;
271
+ const cuenta = fuenteMap.get(`${rubroId}_0`);
272
+ const detalles = fuenteArray.filter((item) => item.RubroId == `${rubroId}.1`);
273
+ for (const detalle of detalles) {
51
274
  for (let i = 1; i <= 12; i++) {
52
275
  if (copia[`Monto${i}`] == 0)
53
276
  cuenta[`Monto${i}`] += parseFloat(detalle[`Monto${i}`]);
54
277
  }
55
278
  }
56
279
  };
57
- const getSumaDesarrolloAnualByAnno = (actividad, data, suma) => {
58
- const CantidadProyeccion = data.DatosEvaluacion.CantidadProyeccion;
59
- const ventasCantidad = actividad.Desarrollo.VentasCantidad.find((item) => item.RubroId == 'TOT01');
60
- if (!suma) {
61
- suma = {};
62
- for (let i = 1; i <= CantidadProyeccion; i++) {
63
- suma[`C-${i}`] = ventasCantidad[`C-${i}`];
64
- }
65
- }
66
- return suma;
67
- };
68
- const getDesarrolloSuma = (actividad) => {
69
- const ventasCantidad = actividad.Desarrollo.VentasCantidad.find((item) => item.RubroId == 'TOT01');
70
- if (!ventasCantidad)
71
- throw new Error('No se econtró el Monto de desarrollo');
72
- let result = 0;
73
- for (let i = 1; i <= actividad.Desarrollo.CantidadProyeccion; i++) {
74
- result += parseFloat(ventasCantidad[`C-${i}`]);
75
- }
76
- return result;
77
- };
78
280
  const addIngresosM = (actividad, data) => {
79
281
  const rubro = data.FlujoProyectadoMensualMap.get(`${RUBRO_INGRESO}_0`);
80
282
  const ingresos = actividad.Ventas.EstacionalidadCalc.find((item) => item.RubroId == 'TOT01');
81
283
  if (!ingresos)
82
284
  throw new Error('No se encontro la estacionalidad Calc de la actividad');
83
- let row = { ...rubro };
285
+ const row = { ...rubro };
84
286
  row.Descripcion = `Ingresos ${actividad.Desarrollo.ActividadGanadera}`;
85
- row.Clasificador = 'CT';
287
+ row.Clasificador = 'SBCT';
86
288
  row.Editable = false;
87
289
  row.UUID = `${RUBRO_INGRESO}_${actividad.Desarrollo.ActividadEconomicaId}`;
88
290
  row.RubroId = `${RUBRO_INGRESO}.1`;
89
291
  for (let i = 1; i <= 12; i++) {
90
292
  row[`Monto${i}`] = Math.round(parseFloat(ingresos[`C${i}`]) * 100) / 100;
91
293
  }
92
- data.FlujoProyectadoMensual.push(row);
294
+ const existente = data.FlujoProyectadoMensual.findIndex((el) => el.UUID === row.UUID);
295
+ if (existente >= 0) {
296
+ data.FlujoProyectadoMensual[existente] = row;
297
+ }
298
+ else {
299
+ data.FlujoProyectadoMensual.push(row);
300
+ }
93
301
  };
94
302
  const addCostosM = (actividad, data) => {
95
303
  const rubro = data.FlujoProyectadoMensualMap.get(`${RUBRO_COSTOS}_0`);
96
304
  const costos = actividad.Costos.Calculo.find((item) => item.RubroId == 'TOT01');
97
305
  if (!costos)
98
306
  throw new Error('No se encontro el costo cálculo de la actividad');
99
- let row = { ...rubro };
307
+ const row = { ...rubro };
100
308
  row.Descripcion = `(-) Costos de Ventas ${actividad.Desarrollo.ActividadGanadera}`;
101
- row.Clasificador = 'CT';
309
+ row.Clasificador = 'SBCT';
102
310
  row.Editable = false;
103
311
  row.UUID = `${RUBRO_COSTOS}_${actividad.Desarrollo.ActividadEconomicaId}`;
104
312
  row.RubroId = `${RUBRO_COSTOS}.1`;
105
313
  for (let i = 1; i <= 12; i++) {
106
314
  row[`Monto${i}`] = Math.round(parseFloat(costos[`C-${i}`]) * 100) / 100;
107
315
  }
108
- data.FlujoProyectadoMensual.push(row);
316
+ const existente = data.FlujoProyectadoMensual.findIndex((el) => el.UUID === row.UUID);
317
+ if (existente >= 0) {
318
+ data.FlujoProyectadoMensual[existente] = row;
319
+ }
320
+ else {
321
+ data.FlujoProyectadoMensual.push(row);
322
+ }
109
323
  };
110
324
  const addGastosM = (actividad, data) => {
111
325
  const rubro = data.FlujoProyectadoMensualMap.get(`${RUBRO_GASTOS}_0`);
112
326
  const otrosGastos = calcularOtrosGastos(actividad.OtrosGastos);
113
327
  if (!otrosGastos)
114
328
  throw new Error('No se encontro los gastos de la actividad');
115
- let row = { ...rubro };
329
+ const row = { ...rubro };
116
330
  row.Descripcion = `(-) Gastos Operativo ${actividad.Desarrollo.ActividadGanadera}`;
117
- row.Clasificador = 'CT';
331
+ row.Clasificador = 'SBCT';
118
332
  row.Editable = false;
119
333
  row.UUID = `${RUBRO_GASTOS}_${actividad.Desarrollo.ActividadEconomicaId}`;
120
334
  row.RubroId = `${RUBRO_GASTOS}.1`;
121
335
  for (let i = 1; i <= 12; i++) {
122
- row[`Monto${i}`] = Math.round(parseFloat(otrosGastos.GastosOperativos) * 100) / 100;
336
+ row[`Monto${i}`] =
337
+ Math.round(parseFloat(otrosGastos.GastosOperativos) * 100) / 100;
338
+ }
339
+ const existente = data.FlujoProyectadoMensual.findIndex((el) => el.UUID === row.UUID);
340
+ if (existente >= 0) {
341
+ data.FlujoProyectadoMensual[existente] = row;
342
+ }
343
+ else {
344
+ data.FlujoProyectadoMensual.push(row);
123
345
  }
124
- data.FlujoProyectadoMensual.push(row);
125
346
  };
126
347
  const otrosIngresoM = (actividad, data) => {
127
348
  const rubro = data.FlujoProyectadoMensualMap.get(`${RUBRO_OTROS_INGRESOS}_0`);
128
349
  const otrosIngresos = actividad.Ventas.OtrosIngresos;
129
350
  if (!otrosIngresos)
130
351
  throw new Error('No se encontro la estacionalidad Calc de la actividad');
131
- let row = { ...rubro };
352
+ const row = { ...rubro };
132
353
  row.Descripcion = `Otros Ingresos Familiares ${actividad.Desarrollo.ActividadGanadera}`;
133
- row.Clasificador = 'CT';
354
+ row.Clasificador = 'SBCT';
134
355
  row.Editable = false;
135
356
  row.UUID = `${RUBRO_OTROS_INGRESOS}_${actividad.Desarrollo.ActividadEconomicaId}`;
136
357
  row.RubroId = `${RUBRO_OTROS_INGRESOS}.1`;
137
- if (otrosIngresos.length == 0) {
138
- const suma = otrosIngresos.reduce((acc, item) => {
139
- acc += parseFloat(item.Monto);
140
- return acc;
358
+ for (let i = 1; i <= 12; i++) {
359
+ row[`Monto${i}`] = otrosIngresos.reduce((acc, row) => {
360
+ return acc + (0, utils_1.ourParseFloat)(row[`Gestion${i}`]);
141
361
  }, 0);
142
- for (let i = 1; i <= 12; i++) {
143
- row[`Monto${i}`] = suma;
144
- }
362
+ }
363
+ const existente = data.FlujoProyectadoMensual.findIndex((el) => el.UUID === row.UUID);
364
+ if (existente >= 0) {
365
+ data.FlujoProyectadoMensual[existente] = row;
145
366
  }
146
367
  else {
147
- for (let i = 1; i <= 12; i++) {
148
- row[`Monto${i}`] = Math.round(parseFloat(otrosIngresos[`C${i}`]) * 100) / 100;
149
- }
368
+ data.FlujoProyectadoMensual.push(row);
150
369
  }
151
- data.FlujoProyectadoMensual.push(row);
152
370
  };
153
371
  const gastosFamiliaresM = (actividad, data) => {
154
372
  const rubro = data.FlujoProyectadoMensualMap.get(`$${RUBRO_GASTOS_FAMILIARES}_0`);
155
373
  const otrosGastos = calcularOtrosGastos(actividad.OtrosGastos);
156
374
  if (!otrosGastos)
157
375
  throw new Error('No se encontro los gastos de la actividad');
158
- let row = { ...rubro };
376
+ const row = { ...rubro };
159
377
  row.Descripcion = `(-) Gastos Familiares ${actividad.Desarrollo.ActividadGanadera}`;
160
- row.Clasificador = 'CT';
378
+ row.Clasificador = 'SBCT';
161
379
  row.Editable = false;
162
380
  row.UUID = `${RUBRO_GASTOS_FAMILIARES}_${actividad.Desarrollo.ActividadEconomicaId}`;
163
381
  row.RubroId = `${RUBRO_GASTOS_FAMILIARES}.1`;
164
382
  for (let i = 1; i <= 12; i++) {
165
- row[`Monto${i}`] = Math.round(parseFloat(otrosGastos.gastosFamiliares) * 100) / 100;
383
+ row[`Monto${i}`] = (0, utils_1.ourParseFloat)(otrosGastos.GastosFamiliares);
166
384
  }
167
- data.FlujoProyectadoMensual.push(row);
168
- };
169
- const addCalculosBase = (data, sumaDesarrollo, sumaDesarrolloAnual) => {
170
- const ingresos = data.FlujoProyectadoMensualMap.get(`${RUBRO_INGRESO}_0`);
171
- let sumaIngresos = 0;
172
- for (let i = 1; i <= 12; i++) {
173
- sumaIngresos += parseFloat(ingresos[`Monto${i}`]);
385
+ const existente = data.FlujoProyectadoMensual.findIndex((el) => el.UUID === row.UUID);
386
+ if (existente >= 0) {
387
+ data.FlujoProyectadoMensual[existente] = row;
174
388
  }
175
- let sumaHato = sumaDesarrollo.reduce((acc, item) => {
176
- acc += item;
177
- return acc;
178
- }, 0);
179
- const sumaProyectada = Math.round((sumaIngresos * data.DatosEvaluacion.CantidadProyeccion) * 100) / 100;
180
- let result = {
181
- EsEngorde: data.Parametros.EsEngorde,
182
- SumaAnnoBase: sumaProyectada,
183
- SumaHato: sumaHato,
184
- Conclusion: 'NA'
185
- };
186
- result.SumaDesarrolloAnual = sumaDesarrolloAnual;
187
- if (result.EsEngorde == 'SI' || result.SumaAnnoBase < result.SumaHato)
188
- result.Conclusion = 'FLUJO_HISTORICO';
189
389
  else {
190
- if (result.SumaHato < result.SumaAnnoBase)
191
- result.Conclusion = 'DESARROLLO_HATO';
390
+ data.FlujoProyectadoMensual.push(row);
192
391
  }
193
- data.ParametrosEngorde = result;
194
392
  };
195
- const calcularOtrosGastos = (gastos) => {
393
+ const calcularOtrosGastos = (gastos, tipoImporte = 'Mensual') => {
196
394
  const gastosOperativos = gastos.Operativos.reduce((acc, item) => {
197
- acc += parseFloat(item.ImporteMensual);
395
+ acc += parseFloat(item[`Importe${tipoImporte}`]);
198
396
  return acc;
199
397
  }, 0);
200
398
  const gastosFamiliares = gastos.Familiares.reduce((acc, item) => {
201
- acc += parseFloat(item.ImporteMensual);
399
+ acc += parseFloat(item[`Importe${tipoImporte}`]);
202
400
  return acc;
203
401
  }, 0);
204
402
  return {
@@ -1,6 +1,7 @@
1
- import { Strategy } from "../../strategy.interface";
1
+ import { Strategy } from '../../strategy.interface';
2
2
  export default class BalancePrdStrategy implements Strategy {
3
3
  actividades: any[];
4
+ private camposCalculadosDefinidos;
4
5
  constructor();
5
6
  execute(data: any): any;
6
7
  }