@fiado/type-kit 3.532.0 → 3.534.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/_test_/unit/loanCredit/previewLoanContractRequest.test.ts +33 -0
- package/_test_/unit/loanCredit/signLoanCreditRequest.test.ts +6 -1
- package/bin/loanCredit/dtos/LoanContractDetails.d.ts +1 -0
- package/bin/loanCredit/dtos/LoanContractDetails.js +2 -3
- package/bin/loanCredit/dtos/requests/PreviewLoanContractRequest.d.ts +9 -0
- package/bin/loanCredit/dtos/requests/PreviewLoanContractRequest.js +30 -0
- package/bin/loanCredit/dtos/responses/LoanContractPreview.d.ts +5 -0
- package/bin/loanCredit/dtos/responses/LoanContractPreview.js +2 -0
- package/bin/loanCredit/index.d.ts +2 -0
- package/bin/loanCredit/index.js +2 -0
- package/bin/retailWizard/dtos/responses/ContractDocumentResponse.d.ts +10 -0
- package/bin/retailWizard/dtos/responses/ContractDocumentResponse.js +2 -0
- package/bin/retailWizard/index.d.ts +1 -0
- package/bin/retailWizard/index.js +1 -0
- package/package.json +1 -1
- package/src/loanCredit/dtos/LoanContractDetails.ts +3 -3
- package/src/loanCredit/dtos/requests/PreviewLoanContractRequest.ts +16 -0
- package/src/loanCredit/dtos/responses/LoanContractPreview.ts +5 -0
- package/src/loanCredit/index.ts +2 -0
- package/src/retailWizard/dtos/responses/ContractDocumentResponse.ts +10 -0
- package/src/retailWizard/index.ts +1 -0
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import 'reflect-metadata';
|
|
2
|
+
import { plainToInstance } from 'class-transformer';
|
|
3
|
+
import { ValidationError, validate } from 'class-validator';
|
|
4
|
+
import { PreviewLoanContractRequest } from '../../../src/loanCredit/index';
|
|
5
|
+
|
|
6
|
+
const pathsOf = (errors: ValidationError[], prefix = ''): string[] =>
|
|
7
|
+
errors.flatMap((error) => {
|
|
8
|
+
const path = prefix ? `${prefix}.${error.property}` : error.property;
|
|
9
|
+
return error.children?.length ? pathsOf(error.children, path) : [path];
|
|
10
|
+
});
|
|
11
|
+
|
|
12
|
+
const errorsOf = async (body: Record<string, unknown>): Promise<string[]> =>
|
|
13
|
+
pathsOf(await validate(plainToInstance(PreviewLoanContractRequest, body))).sort();
|
|
14
|
+
|
|
15
|
+
const DETAILS = {
|
|
16
|
+
borrower: { fullName: 'María López', curp: 'LOHM900215MMCPRR09', address: 'Av. Ejemplo 123, Toluca' },
|
|
17
|
+
device: { brand: 'Samsung', model: 'Galaxy A15' },
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
describe('PreviewLoanContractRequest', () => {
|
|
21
|
+
it('acepta los datos del contrato', async () => {
|
|
22
|
+
expect(await errorsOf({ contractDetails: DETAILS })).toEqual([]);
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
it('sin datos del contrato no hay vista previa que armar', async () => {
|
|
26
|
+
expect(await errorsOf({})).toEqual(['contractDetails']);
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
it('valida los datos anidados igual que la firma', async () => {
|
|
30
|
+
const details = { ...DETAILS, device: { brand: 'Samsung' } };
|
|
31
|
+
expect(await errorsOf({ contractDetails: details })).toEqual(['contractDetails.device.model']);
|
|
32
|
+
});
|
|
33
|
+
});
|
|
@@ -71,8 +71,13 @@ describe('SignLoanCreditRequest', () => {
|
|
|
71
71
|
expect(await errorsOf({ contractDetails: DETAILS })).toEqual([]);
|
|
72
72
|
});
|
|
73
73
|
|
|
74
|
-
it('
|
|
74
|
+
it('acepta la CLABE tal como la tiene la cuenta, aunque no sean 18 dígitos', async () => {
|
|
75
75
|
const details = { ...DETAILS, pcfAccount: { clabe: 'dummy' } };
|
|
76
|
+
expect(await errorsOf({ contractDetails: details })).toEqual([]);
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
it('rechaza una CLABE vacía', async () => {
|
|
80
|
+
const details = { ...DETAILS, pcfAccount: { clabe: '' } };
|
|
76
81
|
expect(await errorsOf({ contractDetails: details })).toEqual(['contractDetails.pcfAccount.clabe']);
|
|
77
82
|
});
|
|
78
83
|
|
|
@@ -31,6 +31,7 @@ export declare class LoanContractProviderDetails {
|
|
|
31
31
|
}
|
|
32
32
|
/** Cuenta Pago Confiado del acreditado, de la que se cobra el crédito (Secciones VI y VIII). */
|
|
33
33
|
export declare class LoanContractPcfAccountDetails {
|
|
34
|
+
/** Tal como la tiene la cuenta; en dev puede no ser una CLABE de 18 dígitos. */
|
|
34
35
|
clabe: string;
|
|
35
36
|
}
|
|
36
37
|
/**
|
|
@@ -18,8 +18,6 @@ const SHORT_TEXT = 120;
|
|
|
18
18
|
const LONG_TEXT = 300;
|
|
19
19
|
/** IMEI: exactamente 15 dígitos. */
|
|
20
20
|
const IMEI_PATTERN = /^\d{15}$/;
|
|
21
|
-
/** CLABE: exactamente 18 dígitos. */
|
|
22
|
-
const CLABE_PATTERN = /^\d{18}$/;
|
|
23
21
|
/** Datos del acreditado tal como se imprimen en el contrato (Sección II.1). */
|
|
24
22
|
class LoanContractBorrowerDetails {
|
|
25
23
|
}
|
|
@@ -165,7 +163,8 @@ exports.LoanContractPcfAccountDetails = LoanContractPcfAccountDetails;
|
|
|
165
163
|
__decorate([
|
|
166
164
|
(0, class_transformer_1.Expose)(),
|
|
167
165
|
(0, class_validator_1.IsString)(),
|
|
168
|
-
(0, class_validator_1.
|
|
166
|
+
(0, class_validator_1.IsNotEmpty)(),
|
|
167
|
+
(0, class_validator_1.MaxLength)(SHORT_TEXT),
|
|
169
168
|
__metadata("design:type", String)
|
|
170
169
|
], LoanContractPcfAccountDetails.prototype, "clabe", void 0);
|
|
171
170
|
/**
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { LoanContractDetails } from '../LoanContractDetails';
|
|
2
|
+
/**
|
|
3
|
+
* POST /private/credits/{creditId}/contract/preview — vista previa del contrato antes de enviar el
|
|
4
|
+
* código de firma. Lleva los mismos datos del acreditado y del equipo que el inicio de la firma; los
|
|
5
|
+
* términos salen del crédito guardado. PII transitoria: no se persiste ni se loguea.
|
|
6
|
+
*/
|
|
7
|
+
export declare class PreviewLoanContractRequest {
|
|
8
|
+
contractDetails: LoanContractDetails;
|
|
9
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
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.PreviewLoanContractRequest = void 0;
|
|
13
|
+
const class_transformer_1 = require("class-transformer");
|
|
14
|
+
const class_validator_1 = require("class-validator");
|
|
15
|
+
const LoanContractDetails_1 = require("../LoanContractDetails");
|
|
16
|
+
/**
|
|
17
|
+
* POST /private/credits/{creditId}/contract/preview — vista previa del contrato antes de enviar el
|
|
18
|
+
* código de firma. Lleva los mismos datos del acreditado y del equipo que el inicio de la firma; los
|
|
19
|
+
* términos salen del crédito guardado. PII transitoria: no se persiste ni se loguea.
|
|
20
|
+
*/
|
|
21
|
+
class PreviewLoanContractRequest {
|
|
22
|
+
}
|
|
23
|
+
exports.PreviewLoanContractRequest = PreviewLoanContractRequest;
|
|
24
|
+
__decorate([
|
|
25
|
+
(0, class_transformer_1.Expose)(),
|
|
26
|
+
(0, class_validator_1.IsDefined)(),
|
|
27
|
+
(0, class_validator_1.ValidateNested)(),
|
|
28
|
+
(0, class_transformer_1.Type)(() => LoanContractDetails_1.LoanContractDetails),
|
|
29
|
+
__metadata("design:type", LoanContractDetails_1.LoanContractDetails)
|
|
30
|
+
], PreviewLoanContractRequest.prototype, "contractDetails", void 0);
|
|
@@ -19,6 +19,7 @@ export * from './dtos/requests/UpdateLoanBorrowerSciRequest';
|
|
|
19
19
|
export * from './dtos/requests/OriginateLoanCreditRequest';
|
|
20
20
|
export * from './dtos/requests/QuoteLoanCreditRequest';
|
|
21
21
|
export * from './dtos/requests/SignLoanCreditRequest';
|
|
22
|
+
export * from './dtos/requests/PreviewLoanContractRequest';
|
|
22
23
|
export * from './dtos/requests/ActivationCheckRequest';
|
|
23
24
|
export * from './dtos/requests/CreditPaymentAppliedRequest';
|
|
24
25
|
export * from './dtos/requests/CreditSettledRequest';
|
|
@@ -37,6 +38,7 @@ export * from './dtos/responses/LoanBorrowerCreditItem';
|
|
|
37
38
|
export * from './dtos/responses/LoanCreditDetail';
|
|
38
39
|
export * from './dtos/responses/LoanPaymentListItem';
|
|
39
40
|
export * from './dtos/responses/LoanContractDownloadUrl';
|
|
41
|
+
export * from './dtos/responses/LoanContractPreview';
|
|
40
42
|
export * from './dtos/responses/LoanContractResponse';
|
|
41
43
|
export * from './dtos/responses/OriginateLoanCreditResponse';
|
|
42
44
|
export * from './dtos/responses/QuoteLoanCreditResponse';
|
package/bin/loanCredit/index.js
CHANGED
|
@@ -41,6 +41,7 @@ __exportStar(require("./dtos/requests/UpdateLoanBorrowerSciRequest"), exports);
|
|
|
41
41
|
__exportStar(require("./dtos/requests/OriginateLoanCreditRequest"), exports);
|
|
42
42
|
__exportStar(require("./dtos/requests/QuoteLoanCreditRequest"), exports);
|
|
43
43
|
__exportStar(require("./dtos/requests/SignLoanCreditRequest"), exports);
|
|
44
|
+
__exportStar(require("./dtos/requests/PreviewLoanContractRequest"), exports);
|
|
44
45
|
__exportStar(require("./dtos/requests/ActivationCheckRequest"), exports);
|
|
45
46
|
__exportStar(require("./dtos/requests/CreditPaymentAppliedRequest"), exports);
|
|
46
47
|
__exportStar(require("./dtos/requests/CreditSettledRequest"), exports);
|
|
@@ -61,6 +62,7 @@ __exportStar(require("./dtos/responses/LoanBorrowerCreditItem"), exports);
|
|
|
61
62
|
__exportStar(require("./dtos/responses/LoanCreditDetail"), exports);
|
|
62
63
|
__exportStar(require("./dtos/responses/LoanPaymentListItem"), exports);
|
|
63
64
|
__exportStar(require("./dtos/responses/LoanContractDownloadUrl"), exports);
|
|
65
|
+
__exportStar(require("./dtos/responses/LoanContractPreview"), exports);
|
|
64
66
|
__exportStar(require("./dtos/responses/LoanContractResponse"), exports);
|
|
65
67
|
__exportStar(require("./dtos/responses/OriginateLoanCreditResponse"), exports);
|
|
66
68
|
__exportStar(require("./dtos/responses/QuoteLoanCreditResponse"), exports);
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GET /wizard/sessions/:id/contract/document — enlace prefirmado y temporal al PDF del contrato del
|
|
3
|
+
* paso 08. Antes de enviar el código es una vista previa (`preview: true`) con el mismo contenido;
|
|
4
|
+
* desde el envío del código es el contrato que se firma.
|
|
5
|
+
*/
|
|
6
|
+
export interface ContractDocumentResponse {
|
|
7
|
+
url: string;
|
|
8
|
+
expiresAt: string;
|
|
9
|
+
preview: boolean;
|
|
10
|
+
}
|
|
@@ -101,6 +101,7 @@ export * from './dtos/responses/ScoreResultResponse';
|
|
|
101
101
|
export * from './dtos/responses/QuoteResponse';
|
|
102
102
|
export * from './dtos/responses/DownPaymentResponse';
|
|
103
103
|
export * from './dtos/responses/ContractPreviewResponse';
|
|
104
|
+
export * from './dtos/responses/ContractDocumentResponse';
|
|
104
105
|
export * from './dtos/responses/SignatureSendOtpResponse';
|
|
105
106
|
export * from './dtos/responses/SignatureSignResponse';
|
|
106
107
|
export * from './dtos/responses/RegisterDeviceResponse';
|
|
@@ -127,6 +127,7 @@ __exportStar(require("./dtos/responses/ScoreResultResponse"), exports);
|
|
|
127
127
|
__exportStar(require("./dtos/responses/QuoteResponse"), exports);
|
|
128
128
|
__exportStar(require("./dtos/responses/DownPaymentResponse"), exports);
|
|
129
129
|
__exportStar(require("./dtos/responses/ContractPreviewResponse"), exports);
|
|
130
|
+
__exportStar(require("./dtos/responses/ContractDocumentResponse"), exports);
|
|
130
131
|
__exportStar(require("./dtos/responses/SignatureSendOtpResponse"), exports);
|
|
131
132
|
__exportStar(require("./dtos/responses/SignatureSignResponse"), exports);
|
|
132
133
|
__exportStar(require("./dtos/responses/RegisterDeviceResponse"), exports);
|
package/package.json
CHANGED
|
@@ -7,8 +7,6 @@ const SHORT_TEXT = 120;
|
|
|
7
7
|
const LONG_TEXT = 300;
|
|
8
8
|
/** IMEI: exactamente 15 dígitos. */
|
|
9
9
|
const IMEI_PATTERN = /^\d{15}$/;
|
|
10
|
-
/** CLABE: exactamente 18 dígitos. */
|
|
11
|
-
const CLABE_PATTERN = /^\d{18}$/;
|
|
12
10
|
|
|
13
11
|
/** Datos del acreditado tal como se imprimen en el contrato (Sección II.1). */
|
|
14
12
|
export class LoanContractBorrowerDetails {
|
|
@@ -133,9 +131,11 @@ export class LoanContractProviderDetails {
|
|
|
133
131
|
|
|
134
132
|
/** Cuenta Pago Confiado del acreditado, de la que se cobra el crédito (Secciones VI y VIII). */
|
|
135
133
|
export class LoanContractPcfAccountDetails {
|
|
134
|
+
/** Tal como la tiene la cuenta; en dev puede no ser una CLABE de 18 dígitos. */
|
|
136
135
|
@Expose()
|
|
137
136
|
@IsString()
|
|
138
|
-
@
|
|
137
|
+
@IsNotEmpty()
|
|
138
|
+
@MaxLength(SHORT_TEXT)
|
|
139
139
|
clabe: string;
|
|
140
140
|
}
|
|
141
141
|
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Expose, Type } from 'class-transformer';
|
|
2
|
+
import { IsDefined, ValidateNested } from 'class-validator';
|
|
3
|
+
import { LoanContractDetails } from '../LoanContractDetails';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* POST /private/credits/{creditId}/contract/preview — vista previa del contrato antes de enviar el
|
|
7
|
+
* código de firma. Lleva los mismos datos del acreditado y del equipo que el inicio de la firma; los
|
|
8
|
+
* términos salen del crédito guardado. PII transitoria: no se persiste ni se loguea.
|
|
9
|
+
*/
|
|
10
|
+
export class PreviewLoanContractRequest {
|
|
11
|
+
@Expose()
|
|
12
|
+
@IsDefined()
|
|
13
|
+
@ValidateNested()
|
|
14
|
+
@Type(() => LoanContractDetails)
|
|
15
|
+
contractDetails: LoanContractDetails;
|
|
16
|
+
}
|
package/src/loanCredit/index.ts
CHANGED
|
@@ -25,6 +25,7 @@ export * from './dtos/requests/UpdateLoanBorrowerSciRequest';
|
|
|
25
25
|
export * from './dtos/requests/OriginateLoanCreditRequest';
|
|
26
26
|
export * from './dtos/requests/QuoteLoanCreditRequest';
|
|
27
27
|
export * from './dtos/requests/SignLoanCreditRequest';
|
|
28
|
+
export * from './dtos/requests/PreviewLoanContractRequest';
|
|
28
29
|
export * from './dtos/requests/ActivationCheckRequest';
|
|
29
30
|
export * from './dtos/requests/CreditPaymentAppliedRequest';
|
|
30
31
|
export * from './dtos/requests/CreditSettledRequest';
|
|
@@ -46,6 +47,7 @@ export * from './dtos/responses/LoanBorrowerCreditItem';
|
|
|
46
47
|
export * from './dtos/responses/LoanCreditDetail';
|
|
47
48
|
export * from './dtos/responses/LoanPaymentListItem';
|
|
48
49
|
export * from './dtos/responses/LoanContractDownloadUrl';
|
|
50
|
+
export * from './dtos/responses/LoanContractPreview';
|
|
49
51
|
export * from './dtos/responses/LoanContractResponse';
|
|
50
52
|
export * from './dtos/responses/OriginateLoanCreditResponse';
|
|
51
53
|
export * from './dtos/responses/QuoteLoanCreditResponse';
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GET /wizard/sessions/:id/contract/document — enlace prefirmado y temporal al PDF del contrato del
|
|
3
|
+
* paso 08. Antes de enviar el código es una vista previa (`preview: true`) con el mismo contenido;
|
|
4
|
+
* desde el envío del código es el contrato que se firma.
|
|
5
|
+
*/
|
|
6
|
+
export interface ContractDocumentResponse {
|
|
7
|
+
url: string;
|
|
8
|
+
expiresAt: string;
|
|
9
|
+
preview: boolean;
|
|
10
|
+
}
|
|
@@ -114,6 +114,7 @@ export * from './dtos/responses/ScoreResultResponse';
|
|
|
114
114
|
export * from './dtos/responses/QuoteResponse';
|
|
115
115
|
export * from './dtos/responses/DownPaymentResponse';
|
|
116
116
|
export * from './dtos/responses/ContractPreviewResponse';
|
|
117
|
+
export * from './dtos/responses/ContractDocumentResponse';
|
|
117
118
|
export * from './dtos/responses/SignatureSendOtpResponse';
|
|
118
119
|
export * from './dtos/responses/SignatureSignResponse';
|
|
119
120
|
export * from './dtos/responses/RegisterDeviceResponse';
|