@fiado/type-kit 3.234.0 → 3.236.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.
@@ -1,9 +1,17 @@
1
- import { AddressBase } from '../../../address/dtos/AddressBase';
1
+ import { RetailAddress } from '../../../retailCustomer/dtos/RetailAddress';
2
2
  /**
3
- * POST /wizard/sessions/:id/address/confirm — el cliente ratifica/edita el domicilio en el paso 10
4
- * (el `address` ya existía desde el 02e). Setea `addressConfirmed`. SureKeep Fase 2 pista Retail.
3
+ * POST /wizard/sessions/:id/address/confirm — el cliente ratifica el domicilio del INE o captura uno
4
+ * nuevo en el paso 10. Setea `addressConfirmed` y lo persiste en `fiado-address-lambda`.
5
+ * SureKeep Fase 2 — pista Retail.
6
+ *
7
+ * `address` usa el espejo ligero `RetailAddress` (todos los campos opcionales), NO el `AddressBase`
8
+ * canónico: cierra TD-ADDRESSBASE-OCR en este boundary. `AddressBase` exige ~12 campos (`tenantId`,
9
+ * `provider`, `validFrom`, `addressStatus`, `countryId`, `typeOfAddressId`…) que ni el OCR del INE ni
10
+ * el vendedor tienen, así que con `@ValidateNested` un domicilio perfectamente válido se rechazaba en
11
+ * runtime con 400. Es la MISMA deuda que ya había vaciado el domicilio en el upsert-from-kyc, y el
12
+ * único consumidor de este DTO es SureKeep.
5
13
  */
6
14
  export declare class ConfirmAddressRequest {
7
- address?: AddressBase;
15
+ address?: RetailAddress;
8
16
  confirmed: boolean;
9
17
  }
@@ -12,10 +12,18 @@ Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.ConfirmAddressRequest = void 0;
13
13
  const class_transformer_1 = require("class-transformer");
14
14
  const class_validator_1 = require("class-validator");
15
- const AddressBase_1 = require("../../../address/dtos/AddressBase");
15
+ const RetailAddress_1 = require("../../../retailCustomer/dtos/RetailAddress");
16
16
  /**
17
- * POST /wizard/sessions/:id/address/confirm — el cliente ratifica/edita el domicilio en el paso 10
18
- * (el `address` ya existía desde el 02e). Setea `addressConfirmed`. SureKeep Fase 2 pista Retail.
17
+ * POST /wizard/sessions/:id/address/confirm — el cliente ratifica el domicilio del INE o captura uno
18
+ * nuevo en el paso 10. Setea `addressConfirmed` y lo persiste en `fiado-address-lambda`.
19
+ * SureKeep Fase 2 — pista Retail.
20
+ *
21
+ * `address` usa el espejo ligero `RetailAddress` (todos los campos opcionales), NO el `AddressBase`
22
+ * canónico: cierra TD-ADDRESSBASE-OCR en este boundary. `AddressBase` exige ~12 campos (`tenantId`,
23
+ * `provider`, `validFrom`, `addressStatus`, `countryId`, `typeOfAddressId`…) que ni el OCR del INE ni
24
+ * el vendedor tienen, así que con `@ValidateNested` un domicilio perfectamente válido se rechazaba en
25
+ * runtime con 400. Es la MISMA deuda que ya había vaciado el domicilio en el upsert-from-kyc, y el
26
+ * único consumidor de este DTO es SureKeep.
19
27
  */
20
28
  class ConfirmAddressRequest {
21
29
  }
@@ -23,9 +31,9 @@ exports.ConfirmAddressRequest = ConfirmAddressRequest;
23
31
  __decorate([
24
32
  (0, class_transformer_1.Expose)(),
25
33
  (0, class_validator_1.IsOptional)(),
26
- (0, class_transformer_1.Type)(() => AddressBase_1.AddressBase),
34
+ (0, class_transformer_1.Type)(() => RetailAddress_1.RetailAddress),
27
35
  (0, class_validator_1.ValidateNested)(),
28
- __metadata("design:type", AddressBase_1.AddressBase)
36
+ __metadata("design:type", RetailAddress_1.RetailAddress)
29
37
  ], ConfirmAddressRequest.prototype, "address", void 0);
30
38
  __decorate([
31
39
  (0, class_transformer_1.Expose)(),
@@ -0,0 +1,35 @@
1
+ /**
2
+ * POST /wizard/sessions/:id/profile-questions — el perfil transaccional del cliente (paso 10).
3
+ *
4
+ * Son las preguntas de PLD que el expediente PagoConFiado exige para el Nivel 2: de dónde sale su
5
+ * dinero, cuánto mueve y si actúa por cuenta propia. Viven en People de Fiado, igual que la ocupación
6
+ * (D17); SureKeep no las duplica.
7
+ *
8
+ * Los valores NO son libres: salen del catálogo de Fiado (`AppSelectionData_GT`), el mismo que
9
+ * alimenta los dropdowns de la app del cliente. El wizard los expone al front por su proxy de
10
+ * catálogos — mandar un valor fuera de catálogo deja un expediente que ningún backoffice sabe pintar,
11
+ * y nadie lo rechaza en runtime porque del otro lado son strings libres.
12
+ *
13
+ * ⚠️ `beneficialOwner` debe ser `SELF` para que la cuenta pueda abrir: `fiado-card-business` valida
14
+ * exactamente ese valor. `OTHER` ("viene de otra persona") es una respuesta legítima del cliente que
15
+ * BLOQUEA la apertura — la pantalla tiene que advertirlo antes, no descubrirlo después.
16
+ *
17
+ * SureKeep Fase 2 — pista Retail.
18
+ */
19
+ /** `dataType=MonthlyIncomeMXN` — ingreso mensual declarado. */
20
+ export declare const MONTHLY_INCOME_VALUES: readonly ["0", "10000", "20000", "50000", "100000", "150000"];
21
+ /** `dataType=ExtraSupport` — apoyo económico extra mensual. */
22
+ export declare const EXTRA_SUPPORT_VALUES: readonly ["0", "2000", "10000", "20000", "50000", "60000"];
23
+ /** `dataType=MoneyUsageCategories` — para qué usará el dinero. */
24
+ export declare const USAGE_MONTHLY_VALUES: readonly ["DAILY_EXPENSES", "SAVINGS", "OTHER"];
25
+ /** `dataType=PurchaseAmountMaxMXN` — monto máximo por operación. */
26
+ export declare const MAXIMUM_TX_VALUES: readonly ["10000", "100000", "300000"];
27
+ /** `dataType=BeneficialOwnerMXN` — de quién es el dinero. */
28
+ export declare const BENEFICIAL_OWNER_VALUES: readonly ["SELF", "OTHER"];
29
+ export declare class ProfileQuestionsRequest {
30
+ monthlyIncome: string;
31
+ monthlyExtraSupport: string;
32
+ usageMonthly: string;
33
+ maximumTx: string;
34
+ beneficialOwner: string;
35
+ }
@@ -0,0 +1,75 @@
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.ProfileQuestionsRequest = exports.BENEFICIAL_OWNER_VALUES = exports.MAXIMUM_TX_VALUES = exports.USAGE_MONTHLY_VALUES = exports.EXTRA_SUPPORT_VALUES = exports.MONTHLY_INCOME_VALUES = void 0;
13
+ const class_transformer_1 = require("class-transformer");
14
+ const class_validator_1 = require("class-validator");
15
+ /**
16
+ * POST /wizard/sessions/:id/profile-questions — el perfil transaccional del cliente (paso 10).
17
+ *
18
+ * Son las preguntas de PLD que el expediente PagoConFiado exige para el Nivel 2: de dónde sale su
19
+ * dinero, cuánto mueve y si actúa por cuenta propia. Viven en People de Fiado, igual que la ocupación
20
+ * (D17); SureKeep no las duplica.
21
+ *
22
+ * Los valores NO son libres: salen del catálogo de Fiado (`AppSelectionData_GT`), el mismo que
23
+ * alimenta los dropdowns de la app del cliente. El wizard los expone al front por su proxy de
24
+ * catálogos — mandar un valor fuera de catálogo deja un expediente que ningún backoffice sabe pintar,
25
+ * y nadie lo rechaza en runtime porque del otro lado son strings libres.
26
+ *
27
+ * ⚠️ `beneficialOwner` debe ser `SELF` para que la cuenta pueda abrir: `fiado-card-business` valida
28
+ * exactamente ese valor. `OTHER` ("viene de otra persona") es una respuesta legítima del cliente que
29
+ * BLOQUEA la apertura — la pantalla tiene que advertirlo antes, no descubrirlo después.
30
+ *
31
+ * SureKeep Fase 2 — pista Retail.
32
+ */
33
+ /** `dataType=MonthlyIncomeMXN` — ingreso mensual declarado. */
34
+ exports.MONTHLY_INCOME_VALUES = ['0', '10000', '20000', '50000', '100000', '150000'];
35
+ /** `dataType=ExtraSupport` — apoyo económico extra mensual. */
36
+ exports.EXTRA_SUPPORT_VALUES = ['0', '2000', '10000', '20000', '50000', '60000'];
37
+ /** `dataType=MoneyUsageCategories` — para qué usará el dinero. */
38
+ exports.USAGE_MONTHLY_VALUES = ['DAILY_EXPENSES', 'SAVINGS', 'OTHER'];
39
+ /** `dataType=PurchaseAmountMaxMXN` — monto máximo por operación. */
40
+ exports.MAXIMUM_TX_VALUES = ['10000', '100000', '300000'];
41
+ /** `dataType=BeneficialOwnerMXN` — de quién es el dinero. */
42
+ exports.BENEFICIAL_OWNER_VALUES = ['SELF', 'OTHER'];
43
+ class ProfileQuestionsRequest {
44
+ }
45
+ exports.ProfileQuestionsRequest = ProfileQuestionsRequest;
46
+ __decorate([
47
+ (0, class_transformer_1.Expose)(),
48
+ (0, class_validator_1.IsString)(),
49
+ (0, class_validator_1.IsIn)(exports.MONTHLY_INCOME_VALUES),
50
+ __metadata("design:type", String)
51
+ ], ProfileQuestionsRequest.prototype, "monthlyIncome", void 0);
52
+ __decorate([
53
+ (0, class_transformer_1.Expose)(),
54
+ (0, class_validator_1.IsString)(),
55
+ (0, class_validator_1.IsIn)(exports.EXTRA_SUPPORT_VALUES),
56
+ __metadata("design:type", String)
57
+ ], ProfileQuestionsRequest.prototype, "monthlyExtraSupport", void 0);
58
+ __decorate([
59
+ (0, class_transformer_1.Expose)(),
60
+ (0, class_validator_1.IsString)(),
61
+ (0, class_validator_1.IsIn)(exports.USAGE_MONTHLY_VALUES),
62
+ __metadata("design:type", String)
63
+ ], ProfileQuestionsRequest.prototype, "usageMonthly", void 0);
64
+ __decorate([
65
+ (0, class_transformer_1.Expose)(),
66
+ (0, class_validator_1.IsString)(),
67
+ (0, class_validator_1.IsIn)(exports.MAXIMUM_TX_VALUES),
68
+ __metadata("design:type", String)
69
+ ], ProfileQuestionsRequest.prototype, "maximumTx", void 0);
70
+ __decorate([
71
+ (0, class_transformer_1.Expose)(),
72
+ (0, class_validator_1.IsString)(),
73
+ (0, class_validator_1.IsIn)(exports.BENEFICIAL_OWNER_VALUES),
74
+ __metadata("design:type", String)
75
+ ], ProfileQuestionsRequest.prototype, "beneficialOwner", void 0);
@@ -45,6 +45,7 @@ export * from './dtos/requests/CompleteSaleRequest';
45
45
  export * from './dtos/requests/AppInstallLinkRequest';
46
46
  export * from './dtos/requests/MarkPcfCardDeliveredRequest';
47
47
  export * from './dtos/requests/ConfirmAddressRequest';
48
+ export * from './dtos/requests/ProfileQuestionsRequest';
48
49
  export * from './dtos/requests/SaveBeneficiaryRequest';
49
50
  export * from './dtos/requests/SignBeneficiaryAnnexRequest';
50
51
  export * from './dtos/requests/WelcomeTopupRequest';
@@ -66,6 +66,7 @@ __exportStar(require("./dtos/requests/CompleteSaleRequest"), exports);
66
66
  __exportStar(require("./dtos/requests/AppInstallLinkRequest"), exports);
67
67
  __exportStar(require("./dtos/requests/MarkPcfCardDeliveredRequest"), exports);
68
68
  __exportStar(require("./dtos/requests/ConfirmAddressRequest"), exports);
69
+ __exportStar(require("./dtos/requests/ProfileQuestionsRequest"), exports);
69
70
  __exportStar(require("./dtos/requests/SaveBeneficiaryRequest"), exports);
70
71
  __exportStar(require("./dtos/requests/SignBeneficiaryAnnexRequest"), exports);
71
72
  __exportStar(require("./dtos/requests/WelcomeTopupRequest"), exports);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fiado/type-kit",
3
- "version": "3.234.0",
3
+ "version": "3.236.0",
4
4
  "description": "",
5
5
  "main": "bin/index.js",
6
6
  "types": "bin/index.d.ts",
@@ -1,20 +1,25 @@
1
1
  import { Expose, Type } from 'class-transformer';
2
2
  import { IsBoolean, IsOptional, ValidateNested } from 'class-validator';
3
- import { AddressBase } from '../../../address/dtos/AddressBase';
3
+ import { RetailAddress } from '../../../retailCustomer/dtos/RetailAddress';
4
4
 
5
5
  /**
6
- * POST /wizard/sessions/:id/address/confirm — el cliente ratifica/edita el domicilio en el paso 10
7
- * (el `address` ya existía desde el 02e). Setea `addressConfirmed`. SureKeep Fase 2 pista Retail.
6
+ * POST /wizard/sessions/:id/address/confirm — el cliente ratifica el domicilio del INE o captura uno
7
+ * nuevo en el paso 10. Setea `addressConfirmed` y lo persiste en `fiado-address-lambda`.
8
+ * SureKeep Fase 2 — pista Retail.
9
+ *
10
+ * `address` usa el espejo ligero `RetailAddress` (todos los campos opcionales), NO el `AddressBase`
11
+ * canónico: cierra TD-ADDRESSBASE-OCR en este boundary. `AddressBase` exige ~12 campos (`tenantId`,
12
+ * `provider`, `validFrom`, `addressStatus`, `countryId`, `typeOfAddressId`…) que ni el OCR del INE ni
13
+ * el vendedor tienen, así que con `@ValidateNested` un domicilio perfectamente válido se rechazaba en
14
+ * runtime con 400. Es la MISMA deuda que ya había vaciado el domicilio en el upsert-from-kyc, y el
15
+ * único consumidor de este DTO es SureKeep.
8
16
  */
9
17
  export class ConfirmAddressRequest {
10
- // TD-ADDRESSBASE-OCR: reusa el `AddressBase` canónico por decisión de Andrés (apego al spec + modelo-datos).
11
- // La dirección OCR/editada puede NO llenar los ~12 campos requeridos de AddressBase → posible rechazo en
12
- // runtime con @ValidateNested. Ajustar después (ver RetailCustomer.address).
13
18
  @Expose()
14
19
  @IsOptional()
15
- @Type(() => AddressBase)
20
+ @Type(() => RetailAddress)
16
21
  @ValidateNested()
17
- address?: AddressBase;
22
+ address?: RetailAddress;
18
23
 
19
24
  @Expose()
20
25
  @IsBoolean()
@@ -0,0 +1,63 @@
1
+ import { Expose } from 'class-transformer';
2
+ import { IsIn, IsString } from 'class-validator';
3
+
4
+ /**
5
+ * POST /wizard/sessions/:id/profile-questions — el perfil transaccional del cliente (paso 10).
6
+ *
7
+ * Son las preguntas de PLD que el expediente PagoConFiado exige para el Nivel 2: de dónde sale su
8
+ * dinero, cuánto mueve y si actúa por cuenta propia. Viven en People de Fiado, igual que la ocupación
9
+ * (D17); SureKeep no las duplica.
10
+ *
11
+ * Los valores NO son libres: salen del catálogo de Fiado (`AppSelectionData_GT`), el mismo que
12
+ * alimenta los dropdowns de la app del cliente. El wizard los expone al front por su proxy de
13
+ * catálogos — mandar un valor fuera de catálogo deja un expediente que ningún backoffice sabe pintar,
14
+ * y nadie lo rechaza en runtime porque del otro lado son strings libres.
15
+ *
16
+ * ⚠️ `beneficialOwner` debe ser `SELF` para que la cuenta pueda abrir: `fiado-card-business` valida
17
+ * exactamente ese valor. `OTHER` ("viene de otra persona") es una respuesta legítima del cliente que
18
+ * BLOQUEA la apertura — la pantalla tiene que advertirlo antes, no descubrirlo después.
19
+ *
20
+ * SureKeep Fase 2 — pista Retail.
21
+ */
22
+
23
+ /** `dataType=MonthlyIncomeMXN` — ingreso mensual declarado. */
24
+ export const MONTHLY_INCOME_VALUES = ['0', '10000', '20000', '50000', '100000', '150000'] as const;
25
+
26
+ /** `dataType=ExtraSupport` — apoyo económico extra mensual. */
27
+ export const EXTRA_SUPPORT_VALUES = ['0', '2000', '10000', '20000', '50000', '60000'] as const;
28
+
29
+ /** `dataType=MoneyUsageCategories` — para qué usará el dinero. */
30
+ export const USAGE_MONTHLY_VALUES = ['DAILY_EXPENSES', 'SAVINGS', 'OTHER'] as const;
31
+
32
+ /** `dataType=PurchaseAmountMaxMXN` — monto máximo por operación. */
33
+ export const MAXIMUM_TX_VALUES = ['10000', '100000', '300000'] as const;
34
+
35
+ /** `dataType=BeneficialOwnerMXN` — de quién es el dinero. */
36
+ export const BENEFICIAL_OWNER_VALUES = ['SELF', 'OTHER'] as const;
37
+
38
+ export class ProfileQuestionsRequest {
39
+ @Expose()
40
+ @IsString()
41
+ @IsIn(MONTHLY_INCOME_VALUES as unknown as string[])
42
+ monthlyIncome!: string;
43
+
44
+ @Expose()
45
+ @IsString()
46
+ @IsIn(EXTRA_SUPPORT_VALUES as unknown as string[])
47
+ monthlyExtraSupport!: string;
48
+
49
+ @Expose()
50
+ @IsString()
51
+ @IsIn(USAGE_MONTHLY_VALUES as unknown as string[])
52
+ usageMonthly!: string;
53
+
54
+ @Expose()
55
+ @IsString()
56
+ @IsIn(MAXIMUM_TX_VALUES as unknown as string[])
57
+ maximumTx!: string;
58
+
59
+ @Expose()
60
+ @IsString()
61
+ @IsIn(BENEFICIAL_OWNER_VALUES as unknown as string[])
62
+ beneficialOwner!: string;
63
+ }
@@ -54,6 +54,7 @@ export * from './dtos/requests/CompleteSaleRequest';
54
54
  export * from './dtos/requests/AppInstallLinkRequest';
55
55
  export * from './dtos/requests/MarkPcfCardDeliveredRequest';
56
56
  export * from './dtos/requests/ConfirmAddressRequest';
57
+ export * from './dtos/requests/ProfileQuestionsRequest';
57
58
  export * from './dtos/requests/SaveBeneficiaryRequest';
58
59
  export * from './dtos/requests/SignBeneficiaryAnnexRequest';
59
60
  export * from './dtos/requests/WelcomeTopupRequest';