@fiado/type-kit 3.344.0 → 3.346.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.
@@ -10,4 +10,18 @@ export declare class CardUpdateIssuanceRequest {
10
10
  kycReasons?: KycReason[];
11
11
  /** Detalle crudo del vendor de KYC. Solo lo manda la ruta del webhook/connector de CP. */
12
12
  kycVendorResults?: KycVendorResultDetail[];
13
+ /**
14
+ * Motivo del rechazo de documento, tal como lo manda IDology en `kyc_reason_codes[0]`.
15
+ *
16
+ * Es texto libre en inglés, con los motivos concatenados por "; " — por ejemplo
17
+ * "Document Too Small; Image Error". Viaja crudo a propósito: el mapeo a `CPStatusEnum.DOC_*`
18
+ * vive junto al resto de las reglas de onboarding, no en el webhook.
19
+ */
20
+ kycReasonCode?: string;
21
+ /**
22
+ * Link de IDology para volver a escanear el documento
23
+ * (`payload.additional_data.document_scan_url`). Presente en el 100 % de los rechazos
24
+ * observados en producción.
25
+ */
26
+ documentScanUrl?: string;
13
27
  }
@@ -46,3 +46,13 @@ __decorate([
46
46
  (0, class_transformer_1.Type)(() => KycVendorResultDetail_1.KycVendorResultDetail),
47
47
  __metadata("design:type", Array)
48
48
  ], CardUpdateIssuanceRequest.prototype, "kycVendorResults", void 0);
49
+ __decorate([
50
+ (0, class_validator_1.IsOptional)(),
51
+ (0, class_validator_1.IsString)(),
52
+ __metadata("design:type", String)
53
+ ], CardUpdateIssuanceRequest.prototype, "kycReasonCode", void 0);
54
+ __decorate([
55
+ (0, class_validator_1.IsOptional)(),
56
+ (0, class_validator_1.IsString)(),
57
+ __metadata("design:type", String)
58
+ ], CardUpdateIssuanceRequest.prototype, "documentScanUrl", void 0);
@@ -7,5 +7,11 @@ export declare enum KycStatus {
7
7
  DOCUMENT_ERROR = "DOCUMENT_ERROR",
8
8
  PENDING_OOW_QUESTIONS = "PENDING_OOW_QUESTIONS",
9
9
  INCOMPLETE_OOW_ANSWERS = "INCOMPLETE_OOW_ANSWERS",
10
- OOW_EXPIRED = "OOW_EXPIRED"
10
+ OOW_EXPIRED = "OOW_EXPIRED",
11
+ /**
12
+ * CP rechazó el documento. Es el `kyc_status` del evento `cardholder.kyc.document_rejected`, y
13
+ * es GENÉRICO: el motivo real viaja como texto libre de IDology en `kyc_reason_codes[0]` y se
14
+ * mapea a los `CPStatusEnum.DOC_*` (ver documentRejection en onboarding-business).
15
+ */
16
+ DOCUMENT_REJECTED = "DOCUMENT_REJECTED"
11
17
  }
@@ -12,4 +12,10 @@ var KycStatus;
12
12
  KycStatus["PENDING_OOW_QUESTIONS"] = "PENDING_OOW_QUESTIONS";
13
13
  KycStatus["INCOMPLETE_OOW_ANSWERS"] = "INCOMPLETE_OOW_ANSWERS";
14
14
  KycStatus["OOW_EXPIRED"] = "OOW_EXPIRED";
15
+ /**
16
+ * CP rechazó el documento. Es el `kyc_status` del evento `cardholder.kyc.document_rejected`, y
17
+ * es GENÉRICO: el motivo real viaja como texto libre de IDology en `kyc_reason_codes[0]` y se
18
+ * mapea a los `CPStatusEnum.DOC_*` (ver documentRejection en onboarding-business).
19
+ */
20
+ KycStatus["DOCUMENT_REJECTED"] = "DOCUMENT_REJECTED";
15
21
  })(KycStatus || (exports.KycStatus = KycStatus = {}));
@@ -36,7 +36,6 @@ export declare class RetailCustomer {
36
36
  fiadoDirectoryId: string | null;
37
37
  fiadoPeopleId: string | null;
38
38
  pcfAccountId: string | null;
39
- pcfClabe: string | null;
40
39
  pcfAccountLevel: 1 | 2 | null;
41
40
  accountStatus: AccountStatusEnum | null;
42
41
  failReason: string | null;
@@ -125,12 +125,6 @@ __decorate([
125
125
  (0, class_validator_1.IsString)(),
126
126
  __metadata("design:type", String)
127
127
  ], RetailCustomer.prototype, "pcfAccountId", void 0);
128
- __decorate([
129
- (0, class_transformer_1.Expose)(),
130
- (0, class_validator_1.IsOptional)(),
131
- (0, class_validator_1.IsString)(),
132
- __metadata("design:type", String)
133
- ], RetailCustomer.prototype, "pcfClabe", void 0);
134
128
  __decorate([
135
129
  (0, class_transformer_1.Expose)(),
136
130
  (0, class_validator_1.IsOptional)(),
@@ -1,13 +1,12 @@
1
1
  import { AccountStatusEnum } from '../../enums/AccountStatusEnum';
2
2
  /**
3
3
  * Resultado de la apertura de cuenta async (D35) — lo escribe el consumer `account-inbound` al
4
- * aterrizar el evento `AccountIssuanceCompleted`. OPEN llega con `pcfClabe`/`pcfAccountLevel`;
5
- * FAILED llega con `failReason`. El endpoint SOLO acepta el resultado terminal (OPEN/FAILED), nunca
6
- * el estado intermedio OPENING (ese lo setea el server en el upsert). SureKeep Fase 2 — pista Retail.
4
+ * aterrizar el evento `AccountIssuanceCompleted`. OPEN llega con `pcfAccountLevel`; FAILED llega con
5
+ * `failReason`. El endpoint SOLO acepta el resultado terminal (OPEN/FAILED), nunca el estado
6
+ * intermedio OPENING (ese lo setea el server en el upsert). SureKeep Fase 2 — pista Retail.
7
7
  */
8
8
  export declare class AccountResultRequest {
9
9
  status: AccountStatusEnum;
10
- pcfClabe?: string;
11
10
  pcfAccountLevel?: 1 | 2;
12
11
  failReason?: string;
13
12
  }
@@ -15,9 +15,9 @@ const class_validator_1 = require("class-validator");
15
15
  const AccountStatusEnum_1 = require("../../enums/AccountStatusEnum");
16
16
  /**
17
17
  * Resultado de la apertura de cuenta async (D35) — lo escribe el consumer `account-inbound` al
18
- * aterrizar el evento `AccountIssuanceCompleted`. OPEN llega con `pcfClabe`/`pcfAccountLevel`;
19
- * FAILED llega con `failReason`. El endpoint SOLO acepta el resultado terminal (OPEN/FAILED), nunca
20
- * el estado intermedio OPENING (ese lo setea el server en el upsert). SureKeep Fase 2 — pista Retail.
18
+ * aterrizar el evento `AccountIssuanceCompleted`. OPEN llega con `pcfAccountLevel`; FAILED llega con
19
+ * `failReason`. El endpoint SOLO acepta el resultado terminal (OPEN/FAILED), nunca el estado
20
+ * intermedio OPENING (ese lo setea el server en el upsert). SureKeep Fase 2 — pista Retail.
21
21
  */
22
22
  class AccountResultRequest {
23
23
  }
@@ -27,13 +27,6 @@ __decorate([
27
27
  (0, class_validator_1.IsIn)([AccountStatusEnum_1.AccountStatusEnum.OPEN, AccountStatusEnum_1.AccountStatusEnum.FAILED]),
28
28
  __metadata("design:type", String)
29
29
  ], AccountResultRequest.prototype, "status", void 0);
30
- __decorate([
31
- (0, class_transformer_1.Expose)(),
32
- (0, class_validator_1.ValidateIf)((o) => o.status === AccountStatusEnum_1.AccountStatusEnum.OPEN),
33
- (0, class_validator_1.IsString)(),
34
- (0, class_validator_1.IsNotEmpty)({ message: 'pcfClabe es obligatorio cuando status es OPEN' }),
35
- __metadata("design:type", String)
36
- ], AccountResultRequest.prototype, "pcfClabe", void 0);
37
30
  __decorate([
38
31
  (0, class_transformer_1.Expose)(),
39
32
  (0, class_validator_1.IsOptional)(),
@@ -38,7 +38,6 @@ export declare class UpsertCustomerFromKycRequest {
38
38
  fiadoDirectoryId: string;
39
39
  fiadoPeopleId: string;
40
40
  pcfAccountId?: string;
41
- pcfClabe?: string;
42
41
  pcfAccountLevel?: 1 | 2;
43
42
  /**
44
43
  * El cliente ya tenía una cuenta PCF ACTIVE en México (rama facematch). Si es `true`, el receptor
@@ -119,12 +119,6 @@ __decorate([
119
119
  (0, class_validator_1.IsString)(),
120
120
  __metadata("design:type", String)
121
121
  ], UpsertCustomerFromKycRequest.prototype, "pcfAccountId", void 0);
122
- __decorate([
123
- (0, class_transformer_1.Expose)(),
124
- (0, class_validator_1.IsOptional)(),
125
- (0, class_validator_1.IsString)(),
126
- __metadata("design:type", String)
127
- ], UpsertCustomerFromKycRequest.prototype, "pcfClabe", void 0);
128
122
  __decorate([
129
123
  (0, class_transformer_1.Expose)(),
130
124
  (0, class_validator_1.IsOptional)(),
@@ -35,7 +35,6 @@ export interface CustomerResponse {
35
35
  fiadoDirectoryId: string | null;
36
36
  fiadoPeopleId: string | null;
37
37
  pcfAccountId: string | null;
38
- pcfClabe: string | null;
39
38
  pcfAccountLevel: 1 | 2 | null;
40
39
  accountStatus: AccountStatusEnum | null;
41
40
  failReason: string | null;
@@ -9,8 +9,6 @@ import { AccountStep } from '../AccountStep';
9
9
  export interface AccountStatusResponse {
10
10
  /** El comprador ya tiene cuenta PCF ACTIVE. Es el unico campo con el que el front destraba. */
11
11
  accountReady: boolean;
12
- /** CLABE de la cuenta. `null` mientras no haya cuenta. */
13
- clabe: string | null;
14
12
  /** Veredicto crudo del expediente, tal como lo publica el lambda de onboarding. */
15
13
  verdict: AccountVerdictEnum;
16
14
  /** Lectura accionable del veredicto: es lo que el front usa para decidir. */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fiado/type-kit",
3
- "version": "3.344.0",
3
+ "version": "3.346.0",
4
4
  "description": "",
5
5
  "main": "bin/index.js",
6
6
  "types": "bin/index.d.ts",
@@ -31,4 +31,24 @@ export class CardUpdateIssuanceRequest {
31
31
  @Type(() => KycVendorResultDetail)
32
32
  kycVendorResults?: KycVendorResultDetail[];
33
33
 
34
+ /**
35
+ * Motivo del rechazo de documento, tal como lo manda IDology en `kyc_reason_codes[0]`.
36
+ *
37
+ * Es texto libre en inglés, con los motivos concatenados por "; " — por ejemplo
38
+ * "Document Too Small; Image Error". Viaja crudo a propósito: el mapeo a `CPStatusEnum.DOC_*`
39
+ * vive junto al resto de las reglas de onboarding, no en el webhook.
40
+ */
41
+ @IsOptional()
42
+ @IsString()
43
+ kycReasonCode?: string;
44
+
45
+ /**
46
+ * Link de IDology para volver a escanear el documento
47
+ * (`payload.additional_data.document_scan_url`). Presente en el 100 % de los rechazos
48
+ * observados en producción.
49
+ */
50
+ @IsOptional()
51
+ @IsString()
52
+ documentScanUrl?: string;
53
+
34
54
  }
@@ -10,5 +10,11 @@ export enum KycStatus {
10
10
  DOCUMENT_ERROR = "DOCUMENT_ERROR",
11
11
  PENDING_OOW_QUESTIONS = "PENDING_OOW_QUESTIONS",
12
12
  INCOMPLETE_OOW_ANSWERS = "INCOMPLETE_OOW_ANSWERS",
13
- OOW_EXPIRED = "OOW_EXPIRED"
13
+ OOW_EXPIRED = "OOW_EXPIRED",
14
+ /**
15
+ * CP rechazó el documento. Es el `kyc_status` del evento `cardholder.kyc.document_rejected`, y
16
+ * es GENÉRICO: el motivo real viaja como texto libre de IDology en `kyc_reason_codes[0]` y se
17
+ * mapea a los `CPStatusEnum.DOC_*` (ver documentRejection en onboarding-business).
18
+ */
19
+ DOCUMENT_REJECTED = "DOCUMENT_REJECTED"
14
20
  }
@@ -111,11 +111,6 @@ export class RetailCustomer {
111
111
  @IsString()
112
112
  pcfAccountId!: string | null;
113
113
 
114
- @Expose()
115
- @IsOptional()
116
- @IsString()
117
- pcfClabe!: string | null;
118
-
119
114
  @Expose()
120
115
  @IsOptional()
121
116
  @IsIn([1, 2])
@@ -1,12 +1,12 @@
1
1
  import { Expose } from 'class-transformer';
2
- import { IsIn, IsNotEmpty, IsOptional, IsString, ValidateIf } from 'class-validator';
2
+ import { IsIn, IsOptional, IsString } from 'class-validator';
3
3
  import { AccountStatusEnum } from '../../enums/AccountStatusEnum';
4
4
 
5
5
  /**
6
6
  * Resultado de la apertura de cuenta async (D35) — lo escribe el consumer `account-inbound` al
7
- * aterrizar el evento `AccountIssuanceCompleted`. OPEN llega con `pcfClabe`/`pcfAccountLevel`;
8
- * FAILED llega con `failReason`. El endpoint SOLO acepta el resultado terminal (OPEN/FAILED), nunca
9
- * el estado intermedio OPENING (ese lo setea el server en el upsert). SureKeep Fase 2 — pista Retail.
7
+ * aterrizar el evento `AccountIssuanceCompleted`. OPEN llega con `pcfAccountLevel`; FAILED llega con
8
+ * `failReason`. El endpoint SOLO acepta el resultado terminal (OPEN/FAILED), nunca el estado
9
+ * intermedio OPENING (ese lo setea el server en el upsert). SureKeep Fase 2 — pista Retail.
10
10
  */
11
11
  export class AccountResultRequest {
12
12
  // OPENING NO es un resultado válido del endpoint D35; solo el estado terminal OPEN/FAILED.
@@ -14,14 +14,6 @@ export class AccountResultRequest {
14
14
  @IsIn([AccountStatusEnum.OPEN, AccountStatusEnum.FAILED])
15
15
  status!: AccountStatusEnum;
16
16
 
17
- // OPEN ⇒ pcfClabe obligatorio (la cuenta abierta sin CLABE es inconsistente). Para FAILED se omite
18
- // (@ValidateIf desactiva los validators cuando status ≠ OPEN → queda opcional).
19
- @Expose()
20
- @ValidateIf((o: AccountResultRequest) => o.status === AccountStatusEnum.OPEN)
21
- @IsString()
22
- @IsNotEmpty({ message: 'pcfClabe es obligatorio cuando status es OPEN' })
23
- pcfClabe?: string;
24
-
25
17
  @Expose()
26
18
  @IsOptional()
27
19
  @IsIn([1, 2])
@@ -117,11 +117,6 @@ export class UpsertCustomerFromKycRequest {
117
117
  @IsString()
118
118
  pcfAccountId?: string;
119
119
 
120
- @Expose()
121
- @IsOptional()
122
- @IsString()
123
- pcfClabe?: string;
124
-
125
120
  @Expose()
126
121
  @IsOptional()
127
122
  @IsIn([1, 2])
@@ -36,7 +36,6 @@ export interface CustomerResponse {
36
36
  fiadoDirectoryId: string | null;
37
37
  fiadoPeopleId: string | null;
38
38
  pcfAccountId: string | null;
39
- pcfClabe: string | null;
40
39
  pcfAccountLevel: 1 | 2 | null;
41
40
  accountStatus: AccountStatusEnum | null;
42
41
  failReason: string | null;
@@ -10,8 +10,6 @@ import { AccountStep } from '../AccountStep';
10
10
  export interface AccountStatusResponse {
11
11
  /** El comprador ya tiene cuenta PCF ACTIVE. Es el unico campo con el que el front destraba. */
12
12
  accountReady: boolean;
13
- /** CLABE de la cuenta. `null` mientras no haya cuenta. */
14
- clabe: string | null;
15
13
  /** Veredicto crudo del expediente, tal como lo publica el lambda de onboarding. */
16
14
  verdict: AccountVerdictEnum;
17
15
  /** Lectura accionable del veredicto: es lo que el front usa para decidir. */