creditu-common-library 2.3.12 → 2.3.14

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.
@@ -83,6 +83,7 @@ var AppLoggerMiddleware = /** @class */ (function () {
83
83
  var originalSend = response.send;
84
84
  var chunks = [];
85
85
  // Interceptar el método send que suele usarse para errores
86
+ // eslint-disable-next-line func-names
86
87
  response.send = function (body) {
87
88
  if (body && typeof body === 'object' && response.statusCode >= 400) {
88
89
  var sanitizedBody = this.sanitizeObject(body);
@@ -137,7 +138,7 @@ var AppLoggerMiddleware = /** @class */ (function () {
137
138
  // Sanitizar la respuesta
138
139
  var sanitizedResponseBody = this.sanitizeObject(parsedBody);
139
140
  // Mensaje base con tiempo de respuesta
140
- var baseMessage = "".concat(method, " ").concat(originalUrl, " ").concat(statusCode, " ").concat(statusMessage, " - ").concat(responseTime, "ms");
141
+ var baseMessage = "".concat(method, " ").concat(originalUrl, " ").concat(statusCode, " ").concat(statusMessage !== null && statusMessage !== void 0 ? statusMessage : '', " - ").concat(responseTime, "ms");
141
142
  // Mensaje detallado con cuerpos de solicitud y respuesta
142
143
  var detailedMessage = {
143
144
  method: method,
@@ -156,7 +157,7 @@ var AppLoggerMiddleware = /** @class */ (function () {
156
157
  this.logger.warn("".concat(baseMessage, "\n").concat(JSON.stringify(detailedMessage, null, 2)));
157
158
  }
158
159
  else {
159
- this.logger.log("".concat(baseMessage));
160
+ this.logger.log("".concat(baseMessage, "\n").concat(JSON.stringify(detailedMessage, null, 2)));
160
161
  }
161
162
  return originalEnd.apply(response, __spreadArray([chunk], args, true));
162
163
  }.bind(this);
@@ -40,28 +40,13 @@ var MaximumLocalService = /** @class */ (function () {
40
40
  * @param longTermMonthlyFee Cuota largo plazo (Clp)
41
41
  */
42
42
  MaximumLocalService.prototype.incomeDividend = function (params, longTermMonthlyFee) {
43
- var maximumFrontendRatio = params.maximumFrontendRatio.value();
44
- // Apply LTV-dependent frontend ratio if the parameters exist
45
- if (params.ltvThresholdForFrontendRatio !== undefined
46
- && params.maximumFrontendRatioHighLTV !== undefined
47
- && params.maximumFrontendRatioLowLTV !== undefined
48
- && params.loanToValueHome !== undefined) {
49
- // If LTV > threshold, use the high LTV ratio, otherwise use the low LTV ratio
50
- if (params.loanToValueHome > params.ltvThresholdForFrontendRatio) {
51
- maximumFrontendRatio = params.maximumFrontendRatioHighLTV;
52
- }
53
- else {
54
- maximumFrontendRatio = params.maximumFrontendRatioLowLTV;
55
- }
56
- }
57
- var numerator = this.calculateIncomeDividendNumerator(longTermMonthlyFee, params, maximumFrontendRatio);
43
+ var numerator = this.calculateIncomeDividendNumerator(longTermMonthlyFee, params);
58
44
  var denominator = this.calculateIncomeDividendDenominator(params);
59
45
  return this.math.divide(numerator, denominator);
60
46
  };
61
- MaximumLocalService.prototype.calculateIncomeDividendNumerator = function (longTermMonthlyFee, params, maximumFrontendRatio) {
47
+ MaximumLocalService.prototype.calculateIncomeDividendNumerator = function (longTermMonthlyFee, params) {
62
48
  var _a;
63
- var frontendRatio = maximumFrontendRatio || params.maximumFrontendRatio.value();
64
- var paymentCapacity = this.math.subtract(this.math.multiply(params.disposableIncome, frontendRatio), longTermMonthlyFee);
49
+ var paymentCapacity = this.math.subtract(this.math.multiply(params.disposableIncome, params.maximumFrontendRatio.value()), longTermMonthlyFee);
65
50
  var creditInsuranceResidual = params.creditInsuranceFeeTermDefinition === credit_insurance_fee_term_definition_enum_1.CreditInsuranceFeeTermDefinition.LONG
66
51
  ? this.math.multiply(params.k2Fin, params.kScr)
67
52
  : 0;
@@ -101,4 +101,12 @@ export declare class OfferService {
101
101
  * @param creditMaxAmount
102
102
  */
103
103
  getCreditAmountToOffer(approvedAmount: number, credituAmount: number, creditMinAmount: CreditAmount, creditMaxAmount: CreditAmount): number;
104
+ /**
105
+ * Ajusta el ratio máximo de frontend (dividendo/renta) en base al LTV
106
+ * @param maximumFrontendRatio - Ratio máximo de frontend original (por defecto)
107
+ * @param estimatedLoanToValueHome - LTV estimado para la operación
108
+ * @param params - Parámetros de la oferta
109
+ * @returns Ratio máximo de frontend ajustado
110
+ */
111
+ private adjustMaximumFrontendRatio;
104
112
  }
@@ -128,6 +128,7 @@ var OfferService = /** @class */ (function () {
128
128
  // creditInsuranceNumberOfMonths
129
129
  var k1Gop = this.constantService.calculateK1Gop(creditTaxRate, creditTaxRatePercentage, operationalExpensesFinancing, operationalExpensesInterest, operationalExpensesNumberOfMonths);
130
130
  var k2Gop = this.constantService.calculateK2Gop(operationalExpensesWeightedSum, operationalExpensesFinancing, operationalExpensesInterest, operationalExpensesNumberOfMonths);
131
+ var adjustedMaximumFrontendRatio = this.adjustMaximumFrontendRatio(maximumFrontendRatio, estimatedLoanToValueHome, params);
131
132
  var maximumLocalParams = {
132
133
  creditInsuranceFactor: creditInsuranceFactor,
133
134
  creditInsurancePercentageFinanced: creditInsurancePercentageFinanced.value(),
@@ -147,13 +148,9 @@ var OfferService = /** @class */ (function () {
147
148
  purpose: purpose,
148
149
  investmentWeight: investmentWeight,
149
150
  maximumBackendRatio: maximumBackendRatio,
150
- maximumFrontendRatio: maximumFrontendRatio,
151
+ maximumFrontendRatio: adjustedMaximumFrontendRatio,
151
152
  numberOfGraceMonths: numberOfGraceMonths,
152
- creditInsuranceNumberOfMonths: creditInsuranceNumberOfMonths,
153
- ltvThresholdForFrontendRatio: params.ltvThresholdForFrontendRatio,
154
- maximumFrontendRatioHighLTV: params.maximumFrontendRatioHighLTV,
155
- maximumFrontendRatioLowLTV: params.maximumFrontendRatioLowLTV,
156
- loanToValueHome: estimatedLoanToValueHome
153
+ creditInsuranceNumberOfMonths: creditInsuranceNumberOfMonths
157
154
  };
158
155
  var approvedAmountFinanceCharge = this.maximumLocal.financeCharge(maximumLocalParams, shortTermMonthlyFee, longTermMonthlyFee);
159
156
  var maximumLocalIncomeDividend = this.maximumLocal.incomeDividend(maximumLocalParams, longTermMonthlyFee);
@@ -282,7 +279,9 @@ var OfferService = /** @class */ (function () {
282
279
  };
283
280
  OfferService.prototype.financingAmount = function (creditAmount, k1Fin, k2Fin) {
284
281
  var _a = this.math, subtract = _a.subtract, multiply = _a.multiply;
285
- return subtract(multiply(creditAmount, k1Fin), k2Fin);
282
+ var calculatedAmount = subtract(multiply(creditAmount, k1Fin), k2Fin);
283
+ // Si el resultado es menor que creditAmount * 0.5, devolver al menos eso
284
+ return calculatedAmount < (creditAmount * 0.5) ? creditAmount * 0.5 : calculatedAmount;
286
285
  };
287
286
  /**
288
287
  * Función que calcula la Cuota Total (C_tot)
@@ -337,7 +336,15 @@ var OfferService = /** @class */ (function () {
337
336
  */
338
337
  // eslint-disable-next-line class-methods-use-this
339
338
  OfferService.prototype.getApprovedAmount = function (maximumLocalFinanceCharge, maximumLocalIncomeDividend, maximumLocalDebtGuarantee) {
340
- return Math.min(maximumLocalFinanceCharge, maximumLocalIncomeDividend, maximumLocalDebtGuarantee);
339
+ // Asegurar que cada valor no sea negativo
340
+ var safeMaxFinanceCharge = Math.max(0, maximumLocalFinanceCharge);
341
+ var safeMaxIncomeDividend = Math.max(0, maximumLocalIncomeDividend);
342
+ var safeMaxDebtGuarantee = Math.max(0, maximumLocalDebtGuarantee);
343
+ // Si todos los valores son 0, devolver un valor mínimo positivo
344
+ if (safeMaxFinanceCharge === 0 && safeMaxIncomeDividend === 0 && safeMaxDebtGuarantee === 0) {
345
+ return 1; // Valor mínimo para evitar divisiones por cero
346
+ }
347
+ return Math.min(safeMaxFinanceCharge, safeMaxIncomeDividend, safeMaxDebtGuarantee);
341
348
  };
342
349
  /**
343
350
  * Función que calcula el Valor de la Propiedad es el mínimo entre la tasación y el valor comercial (Vp).
@@ -364,9 +371,34 @@ var OfferService = /** @class */ (function () {
364
371
  if (minApprovedAmount > creditMaxAmount.value())
365
372
  return creditMaxAmount.value();
366
373
  if (minApprovedAmount < creditMinAmount.value())
367
- return 0;
374
+ return creditMinAmount.value();
368
375
  return minApprovedAmount;
369
376
  };
377
+ /**
378
+ * Ajusta el ratio máximo de frontend (dividendo/renta) en base al LTV
379
+ * @param maximumFrontendRatio - Ratio máximo de frontend original (por defecto)
380
+ * @param estimatedLoanToValueHome - LTV estimado para la operación
381
+ * @param params - Parámetros de la oferta
382
+ * @returns Ratio máximo de frontend ajustado
383
+ */
384
+ OfferService.prototype.adjustMaximumFrontendRatio = function (maximumFrontendRatio, estimatedLoanToValueHome, params) {
385
+ // Valor original por defecto
386
+ var adjustedMaximumFrontendRatio = maximumFrontendRatio;
387
+ // Si existen los parámetros de umbral, ajustar el maximumFrontendRatio directamente
388
+ if (params.ltvThresholdForFrontendRatio !== undefined
389
+ && params.maximumFrontendRatioHighLTV !== undefined
390
+ && params.maximumFrontendRatioLowLTV !== undefined) {
391
+ if (estimatedLoanToValueHome <= params.ltvThresholdForFrontendRatio) {
392
+ // LTV por debajo o igual al umbral - aplicar ratio mayor
393
+ adjustedMaximumFrontendRatio = new models_1.MaximumFrontendRatio(params.maximumFrontendRatioLowLTV);
394
+ }
395
+ else {
396
+ // LTV por encima del umbral - aplicar ratio menor
397
+ adjustedMaximumFrontendRatio = new models_1.MaximumFrontendRatio(params.maximumFrontendRatioHighLTV);
398
+ }
399
+ }
400
+ return adjustedMaximumFrontendRatio;
401
+ };
370
402
  return OfferService;
371
403
  }());
372
404
  exports.OfferService = OfferService;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "creditu-common-library",
3
- "version": "2.3.12",
3
+ "version": "2.3.14",
4
4
  "description": "Common library for Creditu applications",
5
5
  "main": "lib/index.js",
6
6
  "files": [
@@ -25,8 +25,9 @@
25
25
  },
26
26
  "homepage": "https://gitlab.com/creditu-team/creditu-common-library#readme",
27
27
  "devDependencies": {
28
- "@babel/preset-typescript": "^7.26.0",
29
- "@types/express": "^5.0.0",
28
+ "@babel/preset-typescript": "^7.27.0",
29
+ "@nestjs/testing": "^10.4.15",
30
+ "@types/express": "^5.0.1",
30
31
  "@types/jest": "^29.5.14",
31
32
  "@typescript-eslint/eslint-plugin": "^5.62.0",
32
33
  "@typescript-eslint/parser": "^5.62.0",
@@ -34,13 +35,12 @@
34
35
  "eslint-config-airbnb-base": "^15.0.0",
35
36
  "eslint-plugin-import": "^2.31.0",
36
37
  "jest": "^29.7.0",
37
- "ts-jest": "^29.2.6",
38
+ "ts-jest": "^29.3.1",
38
39
  "ts-node": "^10.9.2",
39
40
  "typescript": "^4.9.5"
40
41
  },
41
42
  "dependencies": {
42
43
  "@nestjs/common": "^10.4.15",
43
- "@nestjs/testing": "^10.4.15",
44
44
  "creditu-date-model": "^2.9.1",
45
45
  "dinero.js": "^1.9.1",
46
46
  "express": "^4.21.2",
@@ -25,8 +25,4 @@ export interface MaximumLocalParams {
25
25
  isCreditInsuranceAccelerated: boolean;
26
26
  numberOfGraceMonths: number;
27
27
  creditInsuranceNumberOfMonths: number;
28
- ltvThresholdForFrontendRatio?: number;
29
- maximumFrontendRatioHighLTV?: number;
30
- maximumFrontendRatioLowLTV?: number;
31
- loanToValueHome?: number;
32
28
  }