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
|
|
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
|
|
47
|
+
MaximumLocalService.prototype.calculateIncomeDividendNumerator = function (longTermMonthlyFee, params) {
|
|
62
48
|
var _a;
|
|
63
|
-
var
|
|
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:
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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.
|
|
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.
|
|
29
|
-
"@
|
|
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.
|
|
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
|
}
|