@fiado/type-kit 3.213.0 → 3.215.0
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/bin/kyc/dtos/KycAddress.d.ts +24 -0
- package/bin/kyc/dtos/KycAddress.js +85 -0
- package/bin/kyc/events/KycVerificationChangedV1.d.ts +7 -5
- package/bin/kyc/events/KycVerificationChangedV1.js +3 -3
- package/bin/kyc/index.d.ts +1 -0
- package/bin/kyc/index.js +2 -0
- package/bin/retailWizard/dtos/WizardCreditSummary.d.ts +26 -0
- package/bin/retailWizard/dtos/WizardCreditSummary.js +2 -0
- package/bin/retailWizard/dtos/WizardLoan.d.ts +24 -0
- package/bin/retailWizard/dtos/WizardLoan.js +58 -0
- package/bin/retailWizard/dtos/WizardSession.d.ts +3 -0
- package/bin/retailWizard/dtos/requests/DownPaymentRequest.d.ts +16 -0
- package/bin/retailWizard/dtos/requests/DownPaymentRequest.js +46 -0
- package/bin/retailWizard/dtos/requests/QuoteRequest.d.ts +11 -0
- package/bin/retailWizard/dtos/requests/QuoteRequest.js +36 -0
- package/bin/retailWizard/dtos/requests/RegisterDeviceRequest.d.ts +9 -0
- package/bin/retailWizard/dtos/requests/RegisterDeviceRequest.js +29 -0
- package/bin/retailWizard/dtos/requests/SignatureSignRequest.d.ts +9 -0
- package/bin/retailWizard/dtos/requests/SignatureSignRequest.js +29 -0
- package/bin/retailWizard/dtos/responses/ContractPreviewResponse.d.ts +12 -0
- package/bin/retailWizard/dtos/responses/ContractPreviewResponse.js +2 -0
- package/bin/retailWizard/dtos/responses/DownPaymentResponse.d.ts +14 -0
- package/bin/retailWizard/dtos/responses/DownPaymentResponse.js +2 -0
- package/bin/retailWizard/dtos/responses/QuoteResponse.d.ts +23 -0
- package/bin/retailWizard/dtos/responses/QuoteResponse.js +2 -0
- package/bin/retailWizard/dtos/responses/RegisterDeviceResponse.d.ts +14 -0
- package/bin/retailWizard/dtos/responses/RegisterDeviceResponse.js +2 -0
- package/bin/retailWizard/dtos/responses/ScoreConsultResponse.d.ts +20 -0
- package/bin/retailWizard/dtos/responses/ScoreConsultResponse.js +2 -0
- package/bin/retailWizard/dtos/responses/ScoreResultResponse.d.ts +14 -0
- package/bin/retailWizard/dtos/responses/ScoreResultResponse.js +2 -0
- package/bin/retailWizard/dtos/responses/SessionFinanciersResponse.d.ts +26 -0
- package/bin/retailWizard/dtos/responses/SessionFinanciersResponse.js +2 -0
- package/bin/retailWizard/dtos/responses/SignatureSendOtpResponse.d.ts +10 -0
- package/bin/retailWizard/dtos/responses/SignatureSendOtpResponse.js +2 -0
- package/bin/retailWizard/dtos/responses/SignatureSignResponse.d.ts +10 -0
- package/bin/retailWizard/dtos/responses/SignatureSignResponse.js +2 -0
- package/bin/retailWizard/index.d.ts +15 -0
- package/bin/retailWizard/index.js +15 -0
- package/package.json +1 -1
- package/src/kyc/dtos/KycAddress.ts +46 -0
- package/src/kyc/events/KycVerificationChangedV1.ts +8 -6
- package/src/kyc/index.ts +3 -0
- package/src/retailWizard/dtos/WizardCreditSummary.ts +27 -0
- package/src/retailWizard/dtos/WizardLoan.ts +45 -0
- package/src/retailWizard/dtos/WizardSession.ts +3 -0
- package/src/retailWizard/dtos/requests/DownPaymentRequest.ts +30 -0
- package/src/retailWizard/dtos/requests/QuoteRequest.ts +21 -0
- package/src/retailWizard/dtos/requests/RegisterDeviceRequest.ts +15 -0
- package/src/retailWizard/dtos/requests/SignatureSignRequest.ts +15 -0
- package/src/retailWizard/dtos/responses/ContractPreviewResponse.ts +13 -0
- package/src/retailWizard/dtos/responses/DownPaymentResponse.ts +15 -0
- package/src/retailWizard/dtos/responses/QuoteResponse.ts +25 -0
- package/src/retailWizard/dtos/responses/RegisterDeviceResponse.ts +15 -0
- package/src/retailWizard/dtos/responses/ScoreConsultResponse.ts +21 -0
- package/src/retailWizard/dtos/responses/ScoreResultResponse.ts +15 -0
- package/src/retailWizard/dtos/responses/SessionFinanciersResponse.ts +28 -0
- package/src/retailWizard/dtos/responses/SignatureSendOtpResponse.ts +10 -0
- package/src/retailWizard/dtos/responses/SignatureSignResponse.ts +11 -0
- package/src/retailWizard/index.ts +15 -0
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Domicilio del INE ya normalizado por `places-business` (AWS Location), listo para que el consumidor
|
|
3
|
+
* arme su `AddressBase` local. Mapea el `AddressCandidate` de places a un shape con `@Expose`, porque
|
|
4
|
+
* el consumer parsea el evento con `excludeExtraneousValues` y descartaría todo campo sin exponer.
|
|
5
|
+
*
|
|
6
|
+
* Todos los campos son opcionales: el domicilio es best-effort (la OCR del INE + el geocoding pueden
|
|
7
|
+
* no resolver todo). ⚠️ PII: nunca loguear esta estructura.
|
|
8
|
+
*/
|
|
9
|
+
export declare class KycAddress {
|
|
10
|
+
/** Etiqueta completa legible (equivalente a Place.Label). */
|
|
11
|
+
label?: string;
|
|
12
|
+
street?: string;
|
|
13
|
+
/** Número exterior (Place.AddressNumber). */
|
|
14
|
+
addressNumber?: string;
|
|
15
|
+
neighborhood?: string;
|
|
16
|
+
municipality?: string;
|
|
17
|
+
/** Estado/provincia (Place.Region). */
|
|
18
|
+
region?: string;
|
|
19
|
+
postalCode?: string;
|
|
20
|
+
/** ISO3 del país (Place.Country). */
|
|
21
|
+
country?: string;
|
|
22
|
+
latitude?: number;
|
|
23
|
+
longitude?: number;
|
|
24
|
+
}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.KycAddress = void 0;
|
|
13
|
+
const class_transformer_1 = require("class-transformer");
|
|
14
|
+
const class_validator_1 = require("class-validator");
|
|
15
|
+
/**
|
|
16
|
+
* Domicilio del INE ya normalizado por `places-business` (AWS Location), listo para que el consumidor
|
|
17
|
+
* arme su `AddressBase` local. Mapea el `AddressCandidate` de places a un shape con `@Expose`, porque
|
|
18
|
+
* el consumer parsea el evento con `excludeExtraneousValues` y descartaría todo campo sin exponer.
|
|
19
|
+
*
|
|
20
|
+
* Todos los campos son opcionales: el domicilio es best-effort (la OCR del INE + el geocoding pueden
|
|
21
|
+
* no resolver todo). ⚠️ PII: nunca loguear esta estructura.
|
|
22
|
+
*/
|
|
23
|
+
class KycAddress {
|
|
24
|
+
}
|
|
25
|
+
exports.KycAddress = KycAddress;
|
|
26
|
+
__decorate([
|
|
27
|
+
(0, class_transformer_1.Expose)(),
|
|
28
|
+
(0, class_validator_1.IsOptional)(),
|
|
29
|
+
(0, class_validator_1.IsString)(),
|
|
30
|
+
__metadata("design:type", String)
|
|
31
|
+
], KycAddress.prototype, "label", void 0);
|
|
32
|
+
__decorate([
|
|
33
|
+
(0, class_transformer_1.Expose)(),
|
|
34
|
+
(0, class_validator_1.IsOptional)(),
|
|
35
|
+
(0, class_validator_1.IsString)(),
|
|
36
|
+
__metadata("design:type", String)
|
|
37
|
+
], KycAddress.prototype, "street", void 0);
|
|
38
|
+
__decorate([
|
|
39
|
+
(0, class_transformer_1.Expose)(),
|
|
40
|
+
(0, class_validator_1.IsOptional)(),
|
|
41
|
+
(0, class_validator_1.IsString)(),
|
|
42
|
+
__metadata("design:type", String)
|
|
43
|
+
], KycAddress.prototype, "addressNumber", void 0);
|
|
44
|
+
__decorate([
|
|
45
|
+
(0, class_transformer_1.Expose)(),
|
|
46
|
+
(0, class_validator_1.IsOptional)(),
|
|
47
|
+
(0, class_validator_1.IsString)(),
|
|
48
|
+
__metadata("design:type", String)
|
|
49
|
+
], KycAddress.prototype, "neighborhood", void 0);
|
|
50
|
+
__decorate([
|
|
51
|
+
(0, class_transformer_1.Expose)(),
|
|
52
|
+
(0, class_validator_1.IsOptional)(),
|
|
53
|
+
(0, class_validator_1.IsString)(),
|
|
54
|
+
__metadata("design:type", String)
|
|
55
|
+
], KycAddress.prototype, "municipality", void 0);
|
|
56
|
+
__decorate([
|
|
57
|
+
(0, class_transformer_1.Expose)(),
|
|
58
|
+
(0, class_validator_1.IsOptional)(),
|
|
59
|
+
(0, class_validator_1.IsString)(),
|
|
60
|
+
__metadata("design:type", String)
|
|
61
|
+
], KycAddress.prototype, "region", void 0);
|
|
62
|
+
__decorate([
|
|
63
|
+
(0, class_transformer_1.Expose)(),
|
|
64
|
+
(0, class_validator_1.IsOptional)(),
|
|
65
|
+
(0, class_validator_1.IsString)(),
|
|
66
|
+
__metadata("design:type", String)
|
|
67
|
+
], KycAddress.prototype, "postalCode", void 0);
|
|
68
|
+
__decorate([
|
|
69
|
+
(0, class_transformer_1.Expose)(),
|
|
70
|
+
(0, class_validator_1.IsOptional)(),
|
|
71
|
+
(0, class_validator_1.IsString)(),
|
|
72
|
+
__metadata("design:type", String)
|
|
73
|
+
], KycAddress.prototype, "country", void 0);
|
|
74
|
+
__decorate([
|
|
75
|
+
(0, class_transformer_1.Expose)(),
|
|
76
|
+
(0, class_validator_1.IsOptional)(),
|
|
77
|
+
(0, class_validator_1.IsNumber)(),
|
|
78
|
+
__metadata("design:type", Number)
|
|
79
|
+
], KycAddress.prototype, "latitude", void 0);
|
|
80
|
+
__decorate([
|
|
81
|
+
(0, class_transformer_1.Expose)(),
|
|
82
|
+
(0, class_validator_1.IsOptional)(),
|
|
83
|
+
(0, class_validator_1.IsNumber)(),
|
|
84
|
+
__metadata("design:type", Number)
|
|
85
|
+
], KycAddress.prototype, "longitude", void 0);
|
|
@@ -2,7 +2,7 @@ import { IdentificationDocumentStatus } from '../../identity/enums/Identificatio
|
|
|
2
2
|
import { KycVerificationStatusEnum } from '../enums/KycVerificationStatusEnum';
|
|
3
3
|
import { KycSubChecks } from '../dtos/KycSubChecks';
|
|
4
4
|
import { KycPersonData } from '../dtos/responses/KycPersonData';
|
|
5
|
-
import {
|
|
5
|
+
import { KycAddress } from '../dtos/KycAddress';
|
|
6
6
|
/**
|
|
7
7
|
* Cambio terminal de una verificación KYC, tal como lo publica `kyc-metamap-webhook` directo en
|
|
8
8
|
* `RetailKycInboundQueue` (el webhook manda un `SendMessage` cuando la verificación pasa a COMPLETED).
|
|
@@ -53,9 +53,11 @@ export declare class KycVerificationChangedV1 {
|
|
|
53
53
|
*/
|
|
54
54
|
person?: KycPersonData;
|
|
55
55
|
/**
|
|
56
|
-
* Domicilio del INE ya
|
|
57
|
-
* `
|
|
58
|
-
*
|
|
56
|
+
* Domicilio del INE ya normalizado por `places-business` (paso 02e). El webhook manda el resultado
|
|
57
|
+
* del geocoding (`KycAddress`); el CONSUMIDOR (wizard) arma con esto su `AddressBase` local, porque
|
|
58
|
+
* ese objeto lleva contexto de SureKeep (tenant, tipo) que el webhook no tiene. OPCIONAL y aditivo:
|
|
59
|
+
* si la OCR no trae domicilio o `places` no resuelve, viaja ausente y el upsert corre sin dirección.
|
|
60
|
+
* ⚠️ PII: nunca loguear.
|
|
59
61
|
*/
|
|
60
|
-
address?:
|
|
62
|
+
address?: KycAddress;
|
|
61
63
|
}
|
|
@@ -16,7 +16,7 @@ const IdentificationDocumentStatus_1 = require("../../identity/enums/Identificat
|
|
|
16
16
|
const KycVerificationStatusEnum_1 = require("../enums/KycVerificationStatusEnum");
|
|
17
17
|
const KycSubChecks_1 = require("../dtos/KycSubChecks");
|
|
18
18
|
const KycPersonData_1 = require("../dtos/responses/KycPersonData");
|
|
19
|
-
const
|
|
19
|
+
const KycAddress_1 = require("../dtos/KycAddress");
|
|
20
20
|
/**
|
|
21
21
|
* Cambio terminal de una verificación KYC, tal como lo publica `kyc-metamap-webhook` directo en
|
|
22
22
|
* `RetailKycInboundQueue` (el webhook manda un `SendMessage` cuando la verificación pasa a COMPLETED).
|
|
@@ -95,6 +95,6 @@ __decorate([
|
|
|
95
95
|
(0, class_transformer_1.Expose)(),
|
|
96
96
|
(0, class_validator_1.IsOptional)(),
|
|
97
97
|
(0, class_validator_1.ValidateNested)(),
|
|
98
|
-
(0, class_transformer_1.Type)(() =>
|
|
99
|
-
__metadata("design:type",
|
|
98
|
+
(0, class_transformer_1.Type)(() => KycAddress_1.KycAddress),
|
|
99
|
+
__metadata("design:type", KycAddress_1.KycAddress)
|
|
100
100
|
], KycVerificationChangedV1.prototype, "address", void 0);
|
package/bin/kyc/index.d.ts
CHANGED
|
@@ -2,6 +2,7 @@ export * from './enums/KycVerificationStatusEnum';
|
|
|
2
2
|
export * from './enums/KycSubCheckStatusEnum';
|
|
3
3
|
export * from './enums/KycWatchlistStatusEnum';
|
|
4
4
|
export * from './dtos/KycSubChecks';
|
|
5
|
+
export * from './dtos/KycAddress';
|
|
5
6
|
export * from './dtos/responses/KycPersonData';
|
|
6
7
|
export * from './dtos/responses/KycByDirectoryResponse';
|
|
7
8
|
export * from './events/KycVerificationChangedV1';
|
package/bin/kyc/index.js
CHANGED
|
@@ -21,6 +21,8 @@ __exportStar(require("./enums/KycSubCheckStatusEnum"), exports);
|
|
|
21
21
|
__exportStar(require("./enums/KycWatchlistStatusEnum"), exports);
|
|
22
22
|
// Sub-pasos descompuestos (SureKeep F2)
|
|
23
23
|
__exportStar(require("./dtos/KycSubChecks"), exports);
|
|
24
|
+
// Domicilio del INE normalizado por places (SureKeep F2)
|
|
25
|
+
__exportStar(require("./dtos/KycAddress"), exports);
|
|
24
26
|
// Response DTOs
|
|
25
27
|
__exportStar(require("./dtos/responses/KycPersonData"), exports);
|
|
26
28
|
__exportStar(require("./dtos/responses/KycByDirectoryResponse"), exports);
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { ClientLevelEnum } from '../../loanScoring/enums/ClientLevelEnum';
|
|
2
|
+
import { LoanCreditStatusEnum } from '../../loanCredit/enums/LoanCreditStatusEnum';
|
|
3
|
+
/**
|
|
4
|
+
* Resumen financiero TRANSITORIO del crédito para las pantallas del wizard (06 cotización /
|
|
5
|
+
* 08 firma). Se arma en cada response desde `loan-credit GET|originate|quote` — NO se persiste
|
|
6
|
+
* en la sesión (regla punteros-no-datos del sub-objeto `loan`). Montos en cents; TNA decimal.
|
|
7
|
+
* SureKeep Fase 2 — pista SOFOM.
|
|
8
|
+
*/
|
|
9
|
+
export interface WizardCreditSummary {
|
|
10
|
+
creditId: string;
|
|
11
|
+
status: LoanCreditStatusEnum;
|
|
12
|
+
planId: string;
|
|
13
|
+
termWeeks: number;
|
|
14
|
+
equipmentPriceCents: number;
|
|
15
|
+
downPaymentCents: number;
|
|
16
|
+
financedCapitalCents: number;
|
|
17
|
+
tnaAnnual: number;
|
|
18
|
+
/** Cuota semanal sin IVA (amortización francesa, constante). */
|
|
19
|
+
weeklyPaymentCents: number;
|
|
20
|
+
/** Cuota semanal con IVA — el número que ve el cliente. */
|
|
21
|
+
weeklyPaymentWithIvaCents: number;
|
|
22
|
+
totalInterestCents: number;
|
|
23
|
+
totalIvaCents: number;
|
|
24
|
+
totalToPayCents: number;
|
|
25
|
+
clientLevelAtOrigination?: ClientLevelEnum;
|
|
26
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { ClientLevelEnum } from '../../loanScoring/enums/ClientLevelEnum';
|
|
2
|
+
/**
|
|
3
|
+
* Contexto de crédito de la sesión (`WizardSession.loan`) — pista SOFOM, pasos 04-09 del wizard.
|
|
4
|
+
*
|
|
5
|
+
* Guarda SOLO PUNTEROS al dominio loan-*: el detalle financiero (montos, cuota, checklist,
|
|
6
|
+
* estado) se lee de `loan-credit GET /private/credits/{creditId}`; la oferta/decisión del score
|
|
7
|
+
* de `loan-scoring GET /private/scoring/evaluations/{sciEvaluationId}`. Nunca denormalizar datos
|
|
8
|
+
* financieros acá (única excepción: `level`, para el chip de nivel sin refetch).
|
|
9
|
+
*
|
|
10
|
+
* `null` en ventas de contado/externa; se hidrata paso a paso solo en la venta a crédito.
|
|
11
|
+
* SureKeep Fase 2 — pista SOFOM.
|
|
12
|
+
*/
|
|
13
|
+
export declare class WizardLoan {
|
|
14
|
+
/** Paso 04 — acreditado creado on-demand al elegir SureKeep (`POST /private/borrowers`). */
|
|
15
|
+
borrowerId: string;
|
|
16
|
+
/** Paso 05 — snapshot inmutable de la evaluación SCI (`POST /private/scoring/evaluate`). */
|
|
17
|
+
sciEvaluationId?: string;
|
|
18
|
+
/** Paso 05 — nivel denormalizado (display del chip de nivel; el snapshot es la fuente). */
|
|
19
|
+
level?: ClientLevelEnum;
|
|
20
|
+
/** Paso 06 — plan del catálogo SOFOM resuelto por nivel (loan-offerings). */
|
|
21
|
+
planId?: string;
|
|
22
|
+
/** Paso 06 — crédito originado en `PENDING_ACTIVATION` (`POST /private/credits/originate`). */
|
|
23
|
+
creditId?: string;
|
|
24
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.WizardLoan = void 0;
|
|
13
|
+
const class_transformer_1 = require("class-transformer");
|
|
14
|
+
const class_validator_1 = require("class-validator");
|
|
15
|
+
const ClientLevelEnum_1 = require("../../loanScoring/enums/ClientLevelEnum");
|
|
16
|
+
/**
|
|
17
|
+
* Contexto de crédito de la sesión (`WizardSession.loan`) — pista SOFOM, pasos 04-09 del wizard.
|
|
18
|
+
*
|
|
19
|
+
* Guarda SOLO PUNTEROS al dominio loan-*: el detalle financiero (montos, cuota, checklist,
|
|
20
|
+
* estado) se lee de `loan-credit GET /private/credits/{creditId}`; la oferta/decisión del score
|
|
21
|
+
* de `loan-scoring GET /private/scoring/evaluations/{sciEvaluationId}`. Nunca denormalizar datos
|
|
22
|
+
* financieros acá (única excepción: `level`, para el chip de nivel sin refetch).
|
|
23
|
+
*
|
|
24
|
+
* `null` en ventas de contado/externa; se hidrata paso a paso solo en la venta a crédito.
|
|
25
|
+
* SureKeep Fase 2 — pista SOFOM.
|
|
26
|
+
*/
|
|
27
|
+
class WizardLoan {
|
|
28
|
+
}
|
|
29
|
+
exports.WizardLoan = WizardLoan;
|
|
30
|
+
__decorate([
|
|
31
|
+
(0, class_transformer_1.Expose)(),
|
|
32
|
+
(0, class_validator_1.IsString)(),
|
|
33
|
+
__metadata("design:type", String)
|
|
34
|
+
], WizardLoan.prototype, "borrowerId", void 0);
|
|
35
|
+
__decorate([
|
|
36
|
+
(0, class_transformer_1.Expose)(),
|
|
37
|
+
(0, class_validator_1.IsOptional)(),
|
|
38
|
+
(0, class_validator_1.IsString)(),
|
|
39
|
+
__metadata("design:type", String)
|
|
40
|
+
], WizardLoan.prototype, "sciEvaluationId", void 0);
|
|
41
|
+
__decorate([
|
|
42
|
+
(0, class_transformer_1.Expose)(),
|
|
43
|
+
(0, class_validator_1.IsOptional)(),
|
|
44
|
+
(0, class_validator_1.IsEnum)(ClientLevelEnum_1.ClientLevelEnum),
|
|
45
|
+
__metadata("design:type", String)
|
|
46
|
+
], WizardLoan.prototype, "level", void 0);
|
|
47
|
+
__decorate([
|
|
48
|
+
(0, class_transformer_1.Expose)(),
|
|
49
|
+
(0, class_validator_1.IsOptional)(),
|
|
50
|
+
(0, class_validator_1.IsString)(),
|
|
51
|
+
__metadata("design:type", String)
|
|
52
|
+
], WizardLoan.prototype, "planId", void 0);
|
|
53
|
+
__decorate([
|
|
54
|
+
(0, class_transformer_1.Expose)(),
|
|
55
|
+
(0, class_validator_1.IsOptional)(),
|
|
56
|
+
(0, class_validator_1.IsString)(),
|
|
57
|
+
__metadata("design:type", String)
|
|
58
|
+
], WizardLoan.prototype, "creditId", void 0);
|
|
@@ -5,6 +5,7 @@ import type { PaymentMethodEnum } from '../enums/PaymentMethodEnum';
|
|
|
5
5
|
import type { ExternalProviderEnum } from '../enums/ExternalProviderEnum';
|
|
6
6
|
import type { OccupationEnum } from '../enums/OccupationEnum';
|
|
7
7
|
import type { WizardConsents } from './WizardConsents';
|
|
8
|
+
import type { WizardLoan } from './WizardLoan';
|
|
8
9
|
import type { WizardPayment } from './WizardPayment';
|
|
9
10
|
import type { WizardWelcome } from './WizardWelcome';
|
|
10
11
|
/** Modalidad de captura del KYC (M1 §213-329). */
|
|
@@ -52,6 +53,8 @@ export interface WizardSession {
|
|
|
52
53
|
folio: string | null;
|
|
53
54
|
payment: WizardPayment | null;
|
|
54
55
|
welcome: WizardWelcome | null;
|
|
56
|
+
/** Contexto de crédito (pista SOFOM, pasos 04-09): PUNTEROS al dominio loan-*. Null en contado/externa. */
|
|
57
|
+
loan: WizardLoan | null;
|
|
55
58
|
saleId: string | null;
|
|
56
59
|
/** Prospecto vinculado (si la sesión se reanudó desde un prospecto): se cierra al cerrar la venta (D-prospecto). */
|
|
57
60
|
prospectId: string | null;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { SalePaymentMethodEnum } from '../../enums/SalePaymentMethodEnum';
|
|
2
|
+
import { SalePaymentDetail } from '../SalePaymentDetail';
|
|
3
|
+
/**
|
|
4
|
+
* POST /wizard/sessions/:id/down-payment — cobro del ENGANCHE de la venta a crédito (paso 07,
|
|
5
|
+
* pista SOFOM). Endpoint propio, separado del cobro de contado (`/payment`): acá la regla dura es
|
|
6
|
+
* `amountCents == downPaymentCents` del crédito (`loan-credit GET /credits/{id}`), NO el precio
|
|
7
|
+
* full. Idempotente por sesión. El folio `SK-…-ENG-…` lo genera el server (no viaja en el body).
|
|
8
|
+
* Al confirmar, el wizard marca la condición 1 del checklist (`activate-check { downPayment }`).
|
|
9
|
+
* SPEI: el vendedor captura el comprobante (`speiTrackingKey`+`senderClabe`) y avanza.
|
|
10
|
+
* SureKeep Fase 2 — pista SOFOM.
|
|
11
|
+
*/
|
|
12
|
+
export declare class DownPaymentRequest {
|
|
13
|
+
method: SalePaymentMethodEnum;
|
|
14
|
+
amountCents: number;
|
|
15
|
+
detail?: SalePaymentDetail;
|
|
16
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.DownPaymentRequest = void 0;
|
|
13
|
+
const class_transformer_1 = require("class-transformer");
|
|
14
|
+
const class_validator_1 = require("class-validator");
|
|
15
|
+
const SalePaymentMethodEnum_1 = require("../../enums/SalePaymentMethodEnum");
|
|
16
|
+
const SalePaymentDetail_1 = require("../SalePaymentDetail");
|
|
17
|
+
/**
|
|
18
|
+
* POST /wizard/sessions/:id/down-payment — cobro del ENGANCHE de la venta a crédito (paso 07,
|
|
19
|
+
* pista SOFOM). Endpoint propio, separado del cobro de contado (`/payment`): acá la regla dura es
|
|
20
|
+
* `amountCents == downPaymentCents` del crédito (`loan-credit GET /credits/{id}`), NO el precio
|
|
21
|
+
* full. Idempotente por sesión. El folio `SK-…-ENG-…` lo genera el server (no viaja en el body).
|
|
22
|
+
* Al confirmar, el wizard marca la condición 1 del checklist (`activate-check { downPayment }`).
|
|
23
|
+
* SPEI: el vendedor captura el comprobante (`speiTrackingKey`+`senderClabe`) y avanza.
|
|
24
|
+
* SureKeep Fase 2 — pista SOFOM.
|
|
25
|
+
*/
|
|
26
|
+
class DownPaymentRequest {
|
|
27
|
+
}
|
|
28
|
+
exports.DownPaymentRequest = DownPaymentRequest;
|
|
29
|
+
__decorate([
|
|
30
|
+
(0, class_transformer_1.Expose)(),
|
|
31
|
+
(0, class_validator_1.IsEnum)(SalePaymentMethodEnum_1.SalePaymentMethodEnum),
|
|
32
|
+
__metadata("design:type", String)
|
|
33
|
+
], DownPaymentRequest.prototype, "method", void 0);
|
|
34
|
+
__decorate([
|
|
35
|
+
(0, class_transformer_1.Expose)(),
|
|
36
|
+
(0, class_validator_1.IsInt)(),
|
|
37
|
+
(0, class_validator_1.Min)(0),
|
|
38
|
+
__metadata("design:type", Number)
|
|
39
|
+
], DownPaymentRequest.prototype, "amountCents", void 0);
|
|
40
|
+
__decorate([
|
|
41
|
+
(0, class_transformer_1.Expose)(),
|
|
42
|
+
(0, class_validator_1.IsOptional)(),
|
|
43
|
+
(0, class_transformer_1.Type)(() => SalePaymentDetail_1.SalePaymentDetail),
|
|
44
|
+
(0, class_validator_1.ValidateNested)(),
|
|
45
|
+
__metadata("design:type", SalePaymentDetail_1.SalePaymentDetail)
|
|
46
|
+
], DownPaymentRequest.prototype, "detail", void 0);
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* POST /wizard/sessions/:id/quote — términos elegidos en el cotizador del paso 06 (slider de
|
|
3
|
+
* enganche + botones de plazo). El wizard valida contra los bounds del PLAN resuelto por nivel
|
|
4
|
+
* (`minDownPaymentPct`/`maxDownPaymentPct`/`termWeeksOptions`) y origina (o re-cotiza) el crédito
|
|
5
|
+
* en loan-credit. El precio del equipo NO viaja: es el ancla `reservedCashPriceCents` de la sesión.
|
|
6
|
+
* SureKeep Fase 2 — pista SOFOM.
|
|
7
|
+
*/
|
|
8
|
+
export declare class QuoteRequest {
|
|
9
|
+
downPaymentCents: number;
|
|
10
|
+
termWeeks: number;
|
|
11
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.QuoteRequest = void 0;
|
|
13
|
+
const class_transformer_1 = require("class-transformer");
|
|
14
|
+
const class_validator_1 = require("class-validator");
|
|
15
|
+
/**
|
|
16
|
+
* POST /wizard/sessions/:id/quote — términos elegidos en el cotizador del paso 06 (slider de
|
|
17
|
+
* enganche + botones de plazo). El wizard valida contra los bounds del PLAN resuelto por nivel
|
|
18
|
+
* (`minDownPaymentPct`/`maxDownPaymentPct`/`termWeeksOptions`) y origina (o re-cotiza) el crédito
|
|
19
|
+
* en loan-credit. El precio del equipo NO viaja: es el ancla `reservedCashPriceCents` de la sesión.
|
|
20
|
+
* SureKeep Fase 2 — pista SOFOM.
|
|
21
|
+
*/
|
|
22
|
+
class QuoteRequest {
|
|
23
|
+
}
|
|
24
|
+
exports.QuoteRequest = QuoteRequest;
|
|
25
|
+
__decorate([
|
|
26
|
+
(0, class_transformer_1.Expose)(),
|
|
27
|
+
(0, class_validator_1.IsInt)(),
|
|
28
|
+
(0, class_validator_1.Min)(0),
|
|
29
|
+
__metadata("design:type", Number)
|
|
30
|
+
], QuoteRequest.prototype, "downPaymentCents", void 0);
|
|
31
|
+
__decorate([
|
|
32
|
+
(0, class_transformer_1.Expose)(),
|
|
33
|
+
(0, class_validator_1.IsInt)(),
|
|
34
|
+
(0, class_validator_1.Min)(1),
|
|
35
|
+
__metadata("design:type", Number)
|
|
36
|
+
], QuoteRequest.prototype, "termWeeks", void 0);
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* POST /wizard/sessions/:id/device — registro del IMEI del equipo entregado (paso 09, variante
|
|
3
|
+
* crédito). El wizard valida el formato (15 dígitos); el Luhn y la unicidad (`IMEI_IN_USE`) los
|
|
4
|
+
* valida loan-credit en el `activate-check`, que además dispara el enrolamiento MDM (condiciones
|
|
5
|
+
* 3-4 del checklist). SureKeep Fase 2 — pista SOFOM.
|
|
6
|
+
*/
|
|
7
|
+
export declare class RegisterDeviceRequest {
|
|
8
|
+
imei: string;
|
|
9
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.RegisterDeviceRequest = void 0;
|
|
13
|
+
const class_transformer_1 = require("class-transformer");
|
|
14
|
+
const class_validator_1 = require("class-validator");
|
|
15
|
+
/**
|
|
16
|
+
* POST /wizard/sessions/:id/device — registro del IMEI del equipo entregado (paso 09, variante
|
|
17
|
+
* crédito). El wizard valida el formato (15 dígitos); el Luhn y la unicidad (`IMEI_IN_USE`) los
|
|
18
|
+
* valida loan-credit en el `activate-check`, que además dispara el enrolamiento MDM (condiciones
|
|
19
|
+
* 3-4 del checklist). SureKeep Fase 2 — pista SOFOM.
|
|
20
|
+
*/
|
|
21
|
+
class RegisterDeviceRequest {
|
|
22
|
+
}
|
|
23
|
+
exports.RegisterDeviceRequest = RegisterDeviceRequest;
|
|
24
|
+
__decorate([
|
|
25
|
+
(0, class_transformer_1.Expose)(),
|
|
26
|
+
(0, class_validator_1.IsString)(),
|
|
27
|
+
(0, class_validator_1.Matches)(/^\d{15}$/, { message: 'imei debe ser de 15 dígitos' }),
|
|
28
|
+
__metadata("design:type", String)
|
|
29
|
+
], RegisterDeviceRequest.prototype, "imei", void 0);
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* POST /wizard/sessions/:id/signature/sign — firma FES tiempo 2 (paso 08): verifica el OTP de
|
|
3
|
+
* firma (4 dígitos — M2 §4.4) y firma los contratos en loan-credit (sha256 + `signedAt` +
|
|
4
|
+
* condición 2 del checklist). Errores: `OTP_INVALID` · `OTP_EXPIRED` · `OTP_MAX_ATTEMPTS`.
|
|
5
|
+
* SureKeep Fase 2 — pista SOFOM.
|
|
6
|
+
*/
|
|
7
|
+
export declare class SignatureSignRequest {
|
|
8
|
+
otpCode: string;
|
|
9
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.SignatureSignRequest = void 0;
|
|
13
|
+
const class_transformer_1 = require("class-transformer");
|
|
14
|
+
const class_validator_1 = require("class-validator");
|
|
15
|
+
/**
|
|
16
|
+
* POST /wizard/sessions/:id/signature/sign — firma FES tiempo 2 (paso 08): verifica el OTP de
|
|
17
|
+
* firma (4 dígitos — M2 §4.4) y firma los contratos en loan-credit (sha256 + `signedAt` +
|
|
18
|
+
* condición 2 del checklist). Errores: `OTP_INVALID` · `OTP_EXPIRED` · `OTP_MAX_ATTEMPTS`.
|
|
19
|
+
* SureKeep Fase 2 — pista SOFOM.
|
|
20
|
+
*/
|
|
21
|
+
class SignatureSignRequest {
|
|
22
|
+
}
|
|
23
|
+
exports.SignatureSignRequest = SignatureSignRequest;
|
|
24
|
+
__decorate([
|
|
25
|
+
(0, class_transformer_1.Expose)(),
|
|
26
|
+
(0, class_validator_1.IsString)(),
|
|
27
|
+
(0, class_validator_1.Matches)(/^\d{4}$/, { message: 'otpCode debe ser de 4 dígitos' }),
|
|
28
|
+
__metadata("design:type", String)
|
|
29
|
+
], SignatureSignRequest.prototype, "otpCode", void 0);
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { WizardCreditSummary } from '../WizardCreditSummary';
|
|
2
|
+
/**
|
|
3
|
+
* GET /wizard/sessions/:id/contract/preview — resumen previo a la firma FES (paso 08): el estado
|
|
4
|
+
* financiero del crédito (fuente: loan-credit) + las variables del template del contrato que el
|
|
5
|
+
* wizard armará para el sign tiempo-1 (`contractData`: nombre, CURP, domicilio… — PII TRANSITORIA,
|
|
6
|
+
* viaja solo en esta response, NO se persiste ni loggea). El PDF real lo genera el sign tiempo-1
|
|
7
|
+
* en loan-credit; este preview no llama a document-generator. SureKeep Fase 2 — pista SOFOM.
|
|
8
|
+
*/
|
|
9
|
+
export interface ContractPreviewResponse {
|
|
10
|
+
credit: WizardCreditSummary;
|
|
11
|
+
contractData: Record<string, string>;
|
|
12
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { ActivationChecklist } from '../../../loanCredit/dtos/ActivationChecklist';
|
|
2
|
+
/**
|
|
3
|
+
* POST /wizard/sessions/:id/down-payment — confirmación del cobro del enganche (paso 07).
|
|
4
|
+
* `paymentId` = el folio de enganche `SK-…-ENG-…` (identificador natural del cobro en caja;
|
|
5
|
+
* concilia contra el depósito semanal del retailer). `checklist` refleja el estado post
|
|
6
|
+
* `activate-check { downPayment: true }` en loan-credit. SureKeep Fase 2 — pista SOFOM.
|
|
7
|
+
*/
|
|
8
|
+
export interface DownPaymentResponse {
|
|
9
|
+
paymentId: string;
|
|
10
|
+
folio: string;
|
|
11
|
+
/** ISO 8601 del registro del cobro en la sesión. */
|
|
12
|
+
registeredAt: string;
|
|
13
|
+
checklist: ActivationChecklist;
|
|
14
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { WizardCreditSummary } from '../WizardCreditSummary';
|
|
2
|
+
/** Bounds y parámetros del plan que gobiernan el cotizador (slider + plazos) del paso 06. */
|
|
3
|
+
export interface QuotePlanBounds {
|
|
4
|
+
planId: string;
|
|
5
|
+
code: string;
|
|
6
|
+
/** Enganche mínimo como decimal sobre 1 (`0.40` = 40%). */
|
|
7
|
+
minDownPaymentPct: number;
|
|
8
|
+
/** Techo de enganche (decimal sobre 1); `null` = sin techo definido. */
|
|
9
|
+
maxDownPaymentPct: number | null;
|
|
10
|
+
termWeeksOptions: number[];
|
|
11
|
+
/** TNA decimal (`2.60` = 260%) — la tasa que manda es la del PLAN. */
|
|
12
|
+
tnaAnnual: number;
|
|
13
|
+
openingCommissionPct: number;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* POST /wizard/sessions/:id/quote — respuesta del cotizador del paso 06: el plan resuelto por
|
|
17
|
+
* nivel + el snapshot financiero del crédito originado/re-cotizado (transitorio, NO se persiste
|
|
18
|
+
* en la sesión — la fuente es loan-credit). SureKeep Fase 2 — pista SOFOM.
|
|
19
|
+
*/
|
|
20
|
+
export interface QuoteResponse {
|
|
21
|
+
plan: QuotePlanBounds;
|
|
22
|
+
credit: WizardCreditSummary;
|
|
23
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { LoanCreditStatusEnum } from '../../../loanCredit/enums/LoanCreditStatusEnum';
|
|
2
|
+
import { ActivationChecklist } from '../../../loanCredit/dtos/ActivationChecklist';
|
|
3
|
+
/**
|
|
4
|
+
* POST /wizard/sessions/:id/device — resultado del registro de IMEI + candado (paso 09).
|
|
5
|
+
* `active: true` cuando el checklist quedó 4/4 y el crédito pasó a `ACTIVE` (el front bloquea
|
|
6
|
+
* "Continuar a Bienvenida" hasta entonces; `missingItems` lista lo que falta).
|
|
7
|
+
* SureKeep Fase 2 — pista SOFOM.
|
|
8
|
+
*/
|
|
9
|
+
export interface RegisterDeviceResponse {
|
|
10
|
+
creditStatus: LoanCreditStatusEnum;
|
|
11
|
+
checklist: ActivationChecklist;
|
|
12
|
+
missingItems: string[];
|
|
13
|
+
active: boolean;
|
|
14
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { ClientLevelEnum } from '../../../loanScoring/enums/ClientLevelEnum';
|
|
2
|
+
import { ScoringDecisionEnum } from '../../../loanScoring/enums/ScoringDecisionEnum';
|
|
3
|
+
import { ScoringOffer } from '../../../loanScoring/dtos/ScoringOffer';
|
|
4
|
+
/**
|
|
5
|
+
* POST /wizard/sessions/:id/score/consult — resultado de la evaluación SCI del paso 05.
|
|
6
|
+
*
|
|
7
|
+
* El wizard es idempotente por sesión: si la sesión ya tiene `loan.sciEvaluationId`, devuelve el
|
|
8
|
+
* snapshot existente (no re-evalúa — cada evaluate del motor genera un snapshot NUEVO).
|
|
9
|
+
* `REJECTED`/`NO_ELIGIBLE` no matan la venta: el front ofrece financiera externa o contado.
|
|
10
|
+
* SureKeep Fase 2 — pista SOFOM.
|
|
11
|
+
*/
|
|
12
|
+
export interface ScoreConsultResponse {
|
|
13
|
+
/** Decisión normalizada del motor de scoring. */
|
|
14
|
+
status: ScoringDecisionEnum;
|
|
15
|
+
level: ClientLevelEnum;
|
|
16
|
+
/** Puntero al snapshot inmutable en loan-scoring (se persiste en `WizardSession.loan`). */
|
|
17
|
+
sciEvaluationId: string;
|
|
18
|
+
/** Oferta del proveedor (display del paso 05; la cotización del 06 usa el PLAN, no esto). */
|
|
19
|
+
offer: ScoringOffer | null;
|
|
20
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { ClientLevelEnum } from '../../../loanScoring/enums/ClientLevelEnum';
|
|
2
|
+
import { ScoringDecisionEnum } from '../../../loanScoring/enums/ScoringDecisionEnum';
|
|
3
|
+
import { ScoringOffer } from '../../../loanScoring/dtos/ScoringOffer';
|
|
4
|
+
/**
|
|
5
|
+
* GET /wizard/sessions/:id/score/result — lectura del resultado del score del paso 05 (la tablet
|
|
6
|
+
* lee el snapshot ya persistido vía `loan.sciEvaluationId`; no dispara evaluación).
|
|
7
|
+
* SureKeep Fase 2 — pista SOFOM.
|
|
8
|
+
*/
|
|
9
|
+
export interface ScoreResultResponse {
|
|
10
|
+
status: ScoringDecisionEnum;
|
|
11
|
+
level: ClientLevelEnum;
|
|
12
|
+
sciEvaluationId: string;
|
|
13
|
+
offer: ScoringOffer | null;
|
|
14
|
+
}
|