@fiado/type-kit 3.205.0 → 3.207.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.
@@ -11,7 +11,9 @@ export declare class LoanContract {
11
11
  contractId: string;
12
12
  creditId: string;
13
13
  type: ContractTypeEnum;
14
- /** Key del PDF en el bucket del tenant (`loan-{tenant}-{env}`). Ausente hasta generar (AS-09). */
14
+ /** Id del documento en document-generator (para getDocumentUrl). Ausente hasta generar. */
15
+ documentId?: string;
16
+ /** Key del PDF en el storage de document-generator. Ausente hasta generar. */
15
17
  pdfS3Key?: string;
16
18
  /** Hash SHA-256 del PDF firmado (trazabilidad FES — M2 §4.4). Ausente hasta generar. */
17
19
  sha256?: string;
@@ -40,6 +40,12 @@ __decorate([
40
40
  (0, class_validator_1.IsEnum)(ContractTypeEnum_1.ContractTypeEnum),
41
41
  __metadata("design:type", String)
42
42
  ], LoanContract.prototype, "type", void 0);
43
+ __decorate([
44
+ (0, class_transformer_1.Expose)(),
45
+ (0, class_validator_1.IsOptional)(),
46
+ (0, class_validator_1.IsString)(),
47
+ __metadata("design:type", String)
48
+ ], LoanContract.prototype, "documentId", void 0);
43
49
  __decorate([
44
50
  (0, class_transformer_1.Expose)(),
45
51
  (0, class_validator_1.IsOptional)(),
@@ -20,6 +20,13 @@ export declare class SignLoanCreditRequest {
20
20
  * hidratado en el borrower). El OTP se genera/verifica keyeado a este id (D5).
21
21
  */
22
22
  otpDirectoryId?: string;
23
+ /**
24
+ * SOLO en el inicio de firma (tiempo 1): variables del TEMPLATE del contrato que el motor no
25
+ * posee (PII TRANSITORIA del cliente — nombreAcreditado, curp, domicilio, lugar de firma...).
26
+ * Las aporta el WIZARD (dueño del dato); el motor las mezcla con las financieras (monto,
27
+ * pagos, tasa) y las pasa a document-generator. NO se persisten ni loggean (silo PII-zero).
28
+ */
29
+ contractData?: Record<string, string>;
23
30
  /**
24
31
  * SOLO en el inicio de firma (tiempo 1) con el OTP REAL: el teléfono destino del SMS (E.164).
25
32
  * PII TRANSITORIA: el motor la pasa a messages-business y NO la persiste ni loggea (silo
@@ -41,6 +41,12 @@ __decorate([
41
41
  (0, class_validator_1.IsString)(),
42
42
  __metadata("design:type", String)
43
43
  ], SignLoanCreditRequest.prototype, "otpDirectoryId", void 0);
44
+ __decorate([
45
+ (0, class_transformer_1.Expose)(),
46
+ (0, class_validator_1.IsOptional)(),
47
+ (0, class_validator_1.IsObject)(),
48
+ __metadata("design:type", Object)
49
+ ], SignLoanCreditRequest.prototype, "contractData", void 0);
44
50
  __decorate([
45
51
  (0, class_transformer_1.Expose)(),
46
52
  (0, class_validator_1.IsOptional)(),
@@ -6,6 +6,7 @@ export interface LoanContractResponse {
6
6
  contractId: string;
7
7
  creditId: string;
8
8
  type: ContractTypeEnum;
9
+ documentId?: string;
9
10
  pdfS3Key?: string;
10
11
  sha256?: string;
11
12
  otpVerified: boolean;
@@ -0,0 +1,59 @@
1
+ import { KycModalityEnum } from '../../../retailCustomer/enums/KycModalityEnum';
2
+ /**
3
+ * Metadata que el wizard entrega al SDK de Metamap para que la verificación quede correlacionada
4
+ * con la identidad Fiado. Viaja base64 dentro de `KycPrepareResponse.metadata`.
5
+ *
6
+ * **La arma el wizard, no el front** (`loan-backoffice-webapp/.env.example`): el front no conoce
7
+ * `peopleId` ni `typeOfDirectoryId` — los resuelve el wizard al crear/reusar la identidad.
8
+ *
9
+ * Espeja `kyc-verifications-business/src/core/entities/Metadata.ts`. Es la ÚNICA correlación entre
10
+ * la verificación de Metamap y el cliente Fiado: el webhook crea la fila desde acá (D18/D19).
11
+ *
12
+ * ⚠️ `typeOfDocumentId` e `isPartial` van OPCIONALES a propósito: el tipo del productor los declara
13
+ * requeridos, pero están ausentes en el 100% de los 311 bloques de metadata observados en dev
14
+ * (spec KYC F2 §14.1). Todo indica que los completa el SDK/backend de Metamap. Marcarlos requeridos
15
+ * acá obligaría al wizard a inventar valores. Se cierra cuando el dueño del SDK lo confirme.
16
+ */
17
+ export interface KycSdkMetadata {
18
+ directoryId: string;
19
+ typeOfDirectoryId: string;
20
+ peopleId: string;
21
+ countryId: string;
22
+ phoneNumber: string;
23
+ typeOfDocumentId?: string;
24
+ isPartial?: boolean;
25
+ customInput?: boolean;
26
+ userPhotoLink?: string;
27
+ userPhotoLinkHash?: string;
28
+ }
29
+ /**
30
+ * POST /wizard/sessions/:id/kyc/prepare — respuesta.
31
+ *
32
+ * **Bifurca por modalidad**, por eso todo es opcional salvo `modality`:
33
+ * - `STORE_DEVICE` → `clientId` + `flowId` + `metadata` para que el front monte el
34
+ * `<metamap-button>` en la tablet. Única excepción a la regla puente (D25): el widget es un SDK
35
+ * de un SaaS de terceros que corre en el dispositivo del cliente y habla con Metamap, no con Fiado.
36
+ * - `CUSTOMER_LINK` → `shortUrl` para el QR / SMS al teléfono del cliente.
37
+ *
38
+ * `alreadyVerified` corta el flujo antes de cualquiera de las dos: cuando la consolidación del spec
39
+ * KYC F2 §8.2 ya da `VERIFIED` para ese directorio, no hay identidad que capturar.
40
+ *
41
+ * SureKeep Fase 2 — pista Retail.
42
+ */
43
+ export interface KycPrepareResponse {
44
+ /**
45
+ * `MANUAL` NO es una modalidad de `prepare`: la captura manual es su propio endpoint
46
+ * (`KycManualRequest`). Por eso el tipo se estrecha a las dos que el SDK puede ejecutar.
47
+ */
48
+ modality: KycModalityEnum.CUSTOMER_LINK | KycModalityEnum.STORE_DEVICE;
49
+ /** STORE_DEVICE — clientId de la cuenta Metamap (mismo valor en prod y dev). */
50
+ clientId?: string;
51
+ /** STORE_DEVICE — flow de Metamap por país; sale de la configuración del wizard. */
52
+ flowId?: string;
53
+ /** STORE_DEVICE — `KycSdkMetadata` serializada en base64. */
54
+ metadata?: string;
55
+ /** CUSTOMER_LINK — link corto para el QR o el SMS. */
56
+ shortUrl?: string;
57
+ /** El cliente ya tiene una identidad verificada vigente: no hay nada que capturar. */
58
+ alreadyVerified?: boolean;
59
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -49,6 +49,7 @@ export * from './dtos/requests/CreateProspectRequest';
49
49
  export * from './dtos/requests/UpdateProspectRequest';
50
50
  export * from './dtos/requests/MarkProspectLostRequest';
51
51
  export * from './dtos/requests/CancelSaleRequest';
52
+ export * from './dtos/responses/KycPrepareResponse';
52
53
  export * from './events/SaleCompletedV1';
53
54
  export * from './events/SaleCancelledV1';
54
55
  export * from './events/SessionExpiredV1';
@@ -70,6 +70,8 @@ __exportStar(require("./dtos/requests/CreateProspectRequest"), exports);
70
70
  __exportStar(require("./dtos/requests/UpdateProspectRequest"), exports);
71
71
  __exportStar(require("./dtos/requests/MarkProspectLostRequest"), exports);
72
72
  __exportStar(require("./dtos/requests/CancelSaleRequest"), exports);
73
+ // Response DTOs (output tipado por endpoint)
74
+ __exportStar(require("./dtos/responses/KycPrepareResponse"), exports);
73
75
  // Contratos de eventos (PascalCase + sufijo V1)
74
76
  __exportStar(require("./events/SaleCompletedV1"), exports);
75
77
  __exportStar(require("./events/SaleCancelledV1"), exports);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fiado/type-kit",
3
- "version": "3.205.0",
3
+ "version": "3.207.0",
4
4
  "description": "",
5
5
  "main": "bin/index.js",
6
6
  "types": "bin/index.d.ts",
@@ -24,7 +24,13 @@ export class LoanContract {
24
24
  @IsEnum(ContractTypeEnum)
25
25
  type!: ContractTypeEnum;
26
26
 
27
- /** Key del PDF en el bucket del tenant (`loan-{tenant}-{env}`). Ausente hasta generar (AS-09). */
27
+ /** Id del documento en document-generator (para getDocumentUrl). Ausente hasta generar. */
28
+ @Expose()
29
+ @IsOptional()
30
+ @IsString()
31
+ documentId?: string;
32
+
33
+ /** Key del PDF en el storage de document-generator. Ausente hasta generar. */
28
34
  @Expose()
29
35
  @IsOptional()
30
36
  @IsString()
@@ -1,5 +1,5 @@
1
1
  import { Expose } from 'class-transformer';
2
- import { IsOptional, IsString, Length } from 'class-validator';
2
+ import { IsObject, IsOptional, IsString, Length } from 'class-validator';
3
3
 
4
4
  /**
5
5
  * Body de `POST /private/credits/:creditId/sign` (loan-credit-business — wizard paso 08, firma FES
@@ -32,6 +32,17 @@ export class SignLoanCreditRequest {
32
32
  @IsString()
33
33
  otpDirectoryId?: string;
34
34
 
35
+ /**
36
+ * SOLO en el inicio de firma (tiempo 1): variables del TEMPLATE del contrato que el motor no
37
+ * posee (PII TRANSITORIA del cliente — nombreAcreditado, curp, domicilio, lugar de firma...).
38
+ * Las aporta el WIZARD (dueño del dato); el motor las mezcla con las financieras (monto,
39
+ * pagos, tasa) y las pasa a document-generator. NO se persisten ni loggean (silo PII-zero).
40
+ */
41
+ @Expose()
42
+ @IsOptional()
43
+ @IsObject()
44
+ contractData?: Record<string, string>;
45
+
35
46
  /**
36
47
  * SOLO en el inicio de firma (tiempo 1) con el OTP REAL: el teléfono destino del SMS (E.164).
37
48
  * PII TRANSITORIA: el motor la pasa a messages-business y NO la persiste ni loggea (silo
@@ -7,6 +7,7 @@ export interface LoanContractResponse {
7
7
  contractId: string;
8
8
  creditId: string;
9
9
  type: ContractTypeEnum;
10
+ documentId?: string;
10
11
  pdfS3Key?: string;
11
12
  sha256?: string;
12
13
  otpVerified: boolean;
@@ -0,0 +1,61 @@
1
+ import { KycModalityEnum } from '../../../retailCustomer/enums/KycModalityEnum';
2
+
3
+ /**
4
+ * Metadata que el wizard entrega al SDK de Metamap para que la verificación quede correlacionada
5
+ * con la identidad Fiado. Viaja base64 dentro de `KycPrepareResponse.metadata`.
6
+ *
7
+ * **La arma el wizard, no el front** (`loan-backoffice-webapp/.env.example`): el front no conoce
8
+ * `peopleId` ni `typeOfDirectoryId` — los resuelve el wizard al crear/reusar la identidad.
9
+ *
10
+ * Espeja `kyc-verifications-business/src/core/entities/Metadata.ts`. Es la ÚNICA correlación entre
11
+ * la verificación de Metamap y el cliente Fiado: el webhook crea la fila desde acá (D18/D19).
12
+ *
13
+ * ⚠️ `typeOfDocumentId` e `isPartial` van OPCIONALES a propósito: el tipo del productor los declara
14
+ * requeridos, pero están ausentes en el 100% de los 311 bloques de metadata observados en dev
15
+ * (spec KYC F2 §14.1). Todo indica que los completa el SDK/backend de Metamap. Marcarlos requeridos
16
+ * acá obligaría al wizard a inventar valores. Se cierra cuando el dueño del SDK lo confirme.
17
+ */
18
+ export interface KycSdkMetadata {
19
+ directoryId: string;
20
+ typeOfDirectoryId: string;
21
+ peopleId: string;
22
+ countryId: string;
23
+ phoneNumber: string;
24
+ typeOfDocumentId?: string;
25
+ isPartial?: boolean;
26
+ customInput?: boolean;
27
+ userPhotoLink?: string;
28
+ userPhotoLinkHash?: string;
29
+ }
30
+
31
+ /**
32
+ * POST /wizard/sessions/:id/kyc/prepare — respuesta.
33
+ *
34
+ * **Bifurca por modalidad**, por eso todo es opcional salvo `modality`:
35
+ * - `STORE_DEVICE` → `clientId` + `flowId` + `metadata` para que el front monte el
36
+ * `<metamap-button>` en la tablet. Única excepción a la regla puente (D25): el widget es un SDK
37
+ * de un SaaS de terceros que corre en el dispositivo del cliente y habla con Metamap, no con Fiado.
38
+ * - `CUSTOMER_LINK` → `shortUrl` para el QR / SMS al teléfono del cliente.
39
+ *
40
+ * `alreadyVerified` corta el flujo antes de cualquiera de las dos: cuando la consolidación del spec
41
+ * KYC F2 §8.2 ya da `VERIFIED` para ese directorio, no hay identidad que capturar.
42
+ *
43
+ * SureKeep Fase 2 — pista Retail.
44
+ */
45
+ export interface KycPrepareResponse {
46
+ /**
47
+ * `MANUAL` NO es una modalidad de `prepare`: la captura manual es su propio endpoint
48
+ * (`KycManualRequest`). Por eso el tipo se estrecha a las dos que el SDK puede ejecutar.
49
+ */
50
+ modality: KycModalityEnum.CUSTOMER_LINK | KycModalityEnum.STORE_DEVICE;
51
+ /** STORE_DEVICE — clientId de la cuenta Metamap (mismo valor en prod y dev). */
52
+ clientId?: string;
53
+ /** STORE_DEVICE — flow de Metamap por país; sale de la configuración del wizard. */
54
+ flowId?: string;
55
+ /** STORE_DEVICE — `KycSdkMetadata` serializada en base64. */
56
+ metadata?: string;
57
+ /** CUSTOMER_LINK — link corto para el QR o el SMS. */
58
+ shortUrl?: string;
59
+ /** El cliente ya tiene una identidad verificada vigente: no hay nada que capturar. */
60
+ alreadyVerified?: boolean;
61
+ }
@@ -59,6 +59,9 @@ export * from './dtos/requests/UpdateProspectRequest';
59
59
  export * from './dtos/requests/MarkProspectLostRequest';
60
60
  export * from './dtos/requests/CancelSaleRequest';
61
61
 
62
+ // Response DTOs (output tipado por endpoint)
63
+ export * from './dtos/responses/KycPrepareResponse';
64
+
62
65
  // Contratos de eventos (PascalCase + sufijo V1)
63
66
  export * from './events/SaleCompletedV1';
64
67
  export * from './events/SaleCancelledV1';