@fiado/type-kit 3.456.0 → 3.458.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.
Files changed (96) hide show
  1. package/_test_/unit/benefitCenter/benefitSuiteConfig.test.ts +58 -0
  2. package/_test_/unit/emailVerification/dtos/EmailSetTrustedRequest.test.ts +53 -0
  3. package/_test_/unit/emailVerification/enums/EmailTypeEnum.test.ts +12 -0
  4. package/_test_/unit/loanCredit/customerReadDtos.test.ts +71 -0
  5. package/_test_/unit/retailLoanConnector/contract.test.ts +79 -0
  6. package/bin/benefitCenter/dtos/BenefitCreateRequest.d.ts +3 -0
  7. package/bin/benefitCenter/dtos/BenefitCreateRequest.js +7 -0
  8. package/bin/benefitCenter/dtos/BenefitSuiteConfigRequest.d.ts +8 -0
  9. package/bin/benefitCenter/dtos/BenefitSuiteConfigRequest.js +26 -0
  10. package/bin/benefitCenter/dtos/BenefitSuiteResponse.d.ts +16 -0
  11. package/bin/benefitCenter/dtos/BenefitSuiteResponse.js +2 -0
  12. package/bin/benefitCenter/dtos/BenefitUpdateRequest.d.ts +3 -0
  13. package/bin/benefitCenter/dtos/BenefitUpdateRequest.js +7 -0
  14. package/bin/benefitCenter/index.d.ts +2 -0
  15. package/bin/benefitCenter/index.js +3 -0
  16. package/bin/emailVerification/dtos/EmailItem.d.ts +2 -0
  17. package/bin/emailVerification/dtos/EmailItem.js +5 -0
  18. package/bin/emailVerification/dtos/EmailSetTrustedRequest.d.ts +10 -0
  19. package/bin/emailVerification/dtos/EmailSetTrustedRequest.js +37 -0
  20. package/bin/emailVerification/dtos/EmailSetTrustedResponse.d.ts +9 -0
  21. package/bin/emailVerification/dtos/EmailSetTrustedResponse.js +32 -0
  22. package/bin/emailVerification/enums/EmailTypeEnum.d.ts +9 -0
  23. package/bin/emailVerification/enums/EmailTypeEnum.js +13 -0
  24. package/bin/emailVerification/index.d.ts +3 -0
  25. package/bin/emailVerification/index.js +3 -0
  26. package/bin/index.d.ts +1 -0
  27. package/bin/index.js +4 -1
  28. package/bin/loanCredit/dtos/responses/CreditSaleContext.d.ts +31 -0
  29. package/bin/loanCredit/dtos/responses/CreditSaleContext.js +2 -0
  30. package/bin/loanCredit/dtos/responses/LoanBorrowerCreditItem.d.ts +17 -0
  31. package/bin/loanCredit/dtos/responses/LoanBorrowerCreditItem.js +2 -0
  32. package/bin/loanCredit/dtos/responses/LoanContractDownloadUrl.d.ts +9 -0
  33. package/bin/loanCredit/dtos/responses/LoanContractDownloadUrl.js +2 -0
  34. package/bin/loanCredit/dtos/responses/LoanCreditDetail.d.ts +21 -0
  35. package/bin/loanCredit/dtos/responses/LoanCreditDetail.js +2 -0
  36. package/bin/loanCredit/dtos/responses/LoanPaymentListItem.d.ts +32 -0
  37. package/bin/loanCredit/dtos/responses/LoanPaymentListItem.js +2 -0
  38. package/bin/loanCredit/index.d.ts +5 -0
  39. package/bin/loanCredit/index.js +6 -0
  40. package/bin/retailLoanConnector/dtos/MyCreditDetail.d.ts +20 -0
  41. package/bin/retailLoanConnector/dtos/MyCreditDetail.js +2 -0
  42. package/bin/retailLoanConnector/dtos/MyCreditSummary.d.ts +29 -0
  43. package/bin/retailLoanConnector/dtos/MyCreditSummary.js +2 -0
  44. package/bin/retailLoanConnector/dtos/MyDocument.d.ts +21 -0
  45. package/bin/retailLoanConnector/dtos/MyDocument.js +2 -0
  46. package/bin/retailLoanConnector/dtos/MyDocumentUrl.d.ts +5 -0
  47. package/bin/retailLoanConnector/dtos/MyDocumentUrl.js +2 -0
  48. package/bin/retailLoanConnector/dtos/MyInstallment.d.ts +16 -0
  49. package/bin/retailLoanConnector/dtos/MyInstallment.js +2 -0
  50. package/bin/retailLoanConnector/dtos/MyPayment.d.ts +20 -0
  51. package/bin/retailLoanConnector/dtos/MyPayment.js +2 -0
  52. package/bin/retailLoanConnector/enums/MyDocumentGroupIdEnum.d.ts +5 -0
  53. package/bin/retailLoanConnector/enums/MyDocumentGroupIdEnum.js +9 -0
  54. package/bin/retailLoanConnector/enums/MyDocumentKindEnum.d.ts +4 -0
  55. package/bin/retailLoanConnector/enums/MyDocumentKindEnum.js +8 -0
  56. package/bin/retailLoanConnector/enums/MyDocumentStatusEnum.d.ts +5 -0
  57. package/bin/retailLoanConnector/enums/MyDocumentStatusEnum.js +9 -0
  58. package/bin/retailLoanConnector/enums/MyInstallmentDisplayStatusEnum.d.ts +7 -0
  59. package/bin/retailLoanConnector/enums/MyInstallmentDisplayStatusEnum.js +11 -0
  60. package/bin/retailLoanConnector/enums/MyPaymentFrequencyEnum.d.ts +4 -0
  61. package/bin/retailLoanConnector/enums/MyPaymentFrequencyEnum.js +8 -0
  62. package/bin/retailLoanConnector/enums/MyPaymentMethodEnum.d.ts +7 -0
  63. package/bin/retailLoanConnector/enums/MyPaymentMethodEnum.js +11 -0
  64. package/bin/retailLoanConnector/index.d.ts +12 -0
  65. package/bin/retailLoanConnector/index.js +30 -0
  66. package/package.json +1 -1
  67. package/src/benefitCenter/dtos/BenefitCreateRequest.ts +7 -0
  68. package/src/benefitCenter/dtos/BenefitSuiteConfigRequest.ts +12 -0
  69. package/src/benefitCenter/dtos/BenefitSuiteResponse.ts +17 -0
  70. package/src/benefitCenter/dtos/BenefitUpdateRequest.ts +7 -0
  71. package/src/benefitCenter/index.ts +3 -0
  72. package/src/emailVerification/dtos/EmailItem.ts +4 -0
  73. package/src/emailVerification/dtos/EmailSetTrustedRequest.ts +21 -0
  74. package/src/emailVerification/dtos/EmailSetTrustedResponse.ts +16 -0
  75. package/src/emailVerification/enums/EmailTypeEnum.ts +9 -0
  76. package/src/emailVerification/index.ts +3 -0
  77. package/src/index.ts +4 -0
  78. package/src/loanCredit/dtos/responses/CreditSaleContext.ts +44 -0
  79. package/src/loanCredit/dtos/responses/LoanBorrowerCreditItem.ts +18 -0
  80. package/src/loanCredit/dtos/responses/LoanContractDownloadUrl.ts +10 -0
  81. package/src/loanCredit/dtos/responses/LoanCreditDetail.ts +22 -0
  82. package/src/loanCredit/dtos/responses/LoanPaymentListItem.ts +34 -0
  83. package/src/loanCredit/index.ts +6 -0
  84. package/src/retailLoanConnector/dtos/MyCreditDetail.ts +22 -0
  85. package/src/retailLoanConnector/dtos/MyCreditSummary.ts +32 -0
  86. package/src/retailLoanConnector/dtos/MyDocument.ts +23 -0
  87. package/src/retailLoanConnector/dtos/MyDocumentUrl.ts +5 -0
  88. package/src/retailLoanConnector/dtos/MyInstallment.ts +17 -0
  89. package/src/retailLoanConnector/dtos/MyPayment.ts +22 -0
  90. package/src/retailLoanConnector/enums/MyDocumentGroupIdEnum.ts +5 -0
  91. package/src/retailLoanConnector/enums/MyDocumentKindEnum.ts +4 -0
  92. package/src/retailLoanConnector/enums/MyDocumentStatusEnum.ts +5 -0
  93. package/src/retailLoanConnector/enums/MyInstallmentDisplayStatusEnum.ts +7 -0
  94. package/src/retailLoanConnector/enums/MyPaymentFrequencyEnum.ts +4 -0
  95. package/src/retailLoanConnector/enums/MyPaymentMethodEnum.ts +7 -0
  96. package/src/retailLoanConnector/index.ts +15 -0
@@ -0,0 +1,58 @@
1
+ import "reflect-metadata";
2
+ import { plainToInstance } from "class-transformer";
3
+ import { validateSync } from "class-validator";
4
+ import { BenefitCreateRequest, BenefitCatalogStatusEnum } from "../../../src/benefitCenter/dtos/BenefitCreateRequest";
5
+ import { BenefitUpdateRequest } from "../../../src/benefitCenter/dtos/BenefitUpdateRequest";
6
+ import { BenefitSuiteResponse } from "../../../src/benefitCenter/dtos/BenefitSuiteResponse";
7
+
8
+ const BASE = {
9
+ name: "SureKeep",
10
+ status: BenefitCatalogStatusEnum.ACTIVE,
11
+ sortOrder: 9,
12
+ flow: "RETAIL_LOAN",
13
+ moduleConfig: { modules: [{ moduleEnvVar: "RETAIL_LOAN_CONNECTOR_URL", moduleName: "retail-loan-connector" }] },
14
+ };
15
+
16
+ const propertiesWithErrors = (dto: object) => validateSync(dto).map((error) => error.property);
17
+
18
+ describe("BenefitCreateRequest.suiteConfig (I1)", () => {
19
+ it("acepta el tenant de la suite", () => {
20
+ const dto = plainToInstance(BenefitCreateRequest, { ...BASE, suiteConfig: { tenantId: "surekeep" } });
21
+ expect(validateSync(dto)).toHaveLength(0);
22
+ expect(dto.suiteConfig?.tenantId).toBe("surekeep");
23
+ });
24
+
25
+ it("es opcional: un beneficio sin suite sigue siendo válido", () => {
26
+ const dto = plainToInstance(BenefitCreateRequest, BASE);
27
+ expect(validateSync(dto)).toHaveLength(0);
28
+ });
29
+
30
+ it("rechaza un tenant vacío", () => {
31
+ const dto = plainToInstance(BenefitCreateRequest, { ...BASE, suiteConfig: { tenantId: "" } });
32
+ expect(propertiesWithErrors(dto)).toContain("suiteConfig");
33
+ });
34
+ });
35
+
36
+ describe("BenefitUpdateRequest.suiteConfig (I1)", () => {
37
+ it("acepta cambiar solo el tenant", () => {
38
+ const dto = plainToInstance(BenefitUpdateRequest, { suiteConfig: { tenantId: "otra-sofom" } });
39
+ expect(validateSync(dto)).toHaveLength(0);
40
+ });
41
+
42
+ it("rechaza un tenant vacío", () => {
43
+ const dto = plainToInstance(BenefitUpdateRequest, { suiteConfig: { tenantId: "" } });
44
+ expect(propertiesWithErrors(dto)).toContain("suiteConfig");
45
+ });
46
+ });
47
+
48
+ describe("BenefitSuiteResponse (I1)", () => {
49
+ it("el tenant es opcional: un beneficio sin suite no lo trae", () => {
50
+ const suite: BenefitSuiteResponse = {
51
+ benefitId: "ben-9",
52
+ status: BenefitCatalogStatusEnum.ACTIVE,
53
+ flow: "TOPUPS",
54
+ name: "Recargas",
55
+ };
56
+ expect(suite.tenantId).toBeUndefined();
57
+ });
58
+ });
@@ -0,0 +1,53 @@
1
+ import 'reflect-metadata';
2
+ import { plainToInstance } from 'class-transformer';
3
+ import { validate } from 'class-validator';
4
+ import { EmailSetTrustedRequest } from '../../../../src/emailVerification/dtos/EmailSetTrustedRequest';
5
+ import { EmailTypeEnum } from '../../../../src/emailVerification/enums/EmailTypeEnum';
6
+
7
+ describe('EmailSetTrustedRequest', () => {
8
+ const valid = {
9
+ directoryId: '01890000-0000-7000-8000-000000000000',
10
+ email: 'user@acme.com',
11
+ type: EmailTypeEnum.CORPORATE,
12
+ };
13
+
14
+ it('valida happy path (0 errores)', async () => {
15
+ const dto = plainToInstance(EmailSetTrustedRequest, valid);
16
+ const errors = await validate(dto);
17
+ expect(errors).toEqual([]);
18
+ });
19
+
20
+ it('falla si directoryId no es string', async () => {
21
+ const dto = plainToInstance(EmailSetTrustedRequest, {
22
+ ...valid,
23
+ directoryId: 12345 as unknown as string,
24
+ });
25
+ const errors = await validate(dto);
26
+ expect(errors.some(e => e.property === 'directoryId')).toBe(true);
27
+ });
28
+
29
+ it('falla si email no es un email válido', async () => {
30
+ const dto = plainToInstance(EmailSetTrustedRequest, {
31
+ ...valid,
32
+ email: 'no-es-email',
33
+ });
34
+ const errors = await validate(dto);
35
+ expect(errors.some(e => e.property === 'email')).toBe(true);
36
+ });
37
+
38
+ it('falla si type no es uno de los valores del enum', async () => {
39
+ const dto = plainToInstance(EmailSetTrustedRequest, {
40
+ ...valid,
41
+ type: 'WORK' as unknown as EmailTypeEnum,
42
+ });
43
+ const errors = await validate(dto);
44
+ expect(errors.some(e => e.property === 'type')).toBe(true);
45
+ });
46
+
47
+ it('falla si type falta', async () => {
48
+ const { type, ...rest } = valid;
49
+ const dto = plainToInstance(EmailSetTrustedRequest, rest);
50
+ const errors = await validate(dto);
51
+ expect(errors.some(e => e.property === 'type')).toBe(true);
52
+ });
53
+ });
@@ -0,0 +1,12 @@
1
+ import { EmailTypeEnum } from '../../../../src/emailVerification/enums/EmailTypeEnum';
2
+
3
+ describe('EmailTypeEnum', () => {
4
+ it('contiene exactamente los 2 tipos del contrato con value === key', () => {
5
+ expect(EmailTypeEnum.PERSONAL).toBe('PERSONAL');
6
+ expect(EmailTypeEnum.CORPORATE).toBe('CORPORATE');
7
+ });
8
+
9
+ it('no tiene tipos de más', () => {
10
+ expect(Object.values(EmailTypeEnum).sort()).toEqual(['CORPORATE', 'PERSONAL']);
11
+ });
12
+ });
@@ -0,0 +1,71 @@
1
+ import 'reflect-metadata';
2
+ import {
3
+ ContractTypeEnum,
4
+ CreditSaleContext,
5
+ LoanContractDownloadUrl,
6
+ LoanPaymentListItem,
7
+ LoanPaymentListResponse,
8
+ } from '../../../src/loanCredit/index';
9
+ import { CollectionResultStatus } from '../../../src/collection/enums/CollectionResultStatus';
10
+ import { MechanismType } from '../../../src/collection/enums/MechanismType';
11
+ import { CurrencyId } from '../../../src/currency/enums/CurrencyId';
12
+ import { WizardSessionLookupStatusEnum } from '../../../src/retailWizard/enums/WizardSessionLookupStatusEnum';
13
+
14
+ describe('loanCredit — DTOs de lectura de cliente (I1)', () => {
15
+ const payment: LoanPaymentListItem = {
16
+ paymentId: 'PAY-1',
17
+ receipt: 'SK-MD-0a1b2c3d4e5f',
18
+ installmentNumber: 3,
19
+ attemptId: 'ATT-1',
20
+ mechanism: Object.values(MechanismType)[0] as MechanismType,
21
+ result: Object.values(CollectionResultStatus)[0] as CollectionResultStatus,
22
+ currency: Object.values(CurrencyId)[0] as CurrencyId,
23
+ collectedCents: 105000,
24
+ appliedCents: 105000,
25
+ overpaidCents: 0,
26
+ reservedCents: 0,
27
+ needsReview: false,
28
+ appliedAt: '2026-09-15T14:00:00.000Z',
29
+ };
30
+
31
+ it('el desglose del pago es opcional', () => {
32
+ expect(payment.appliedCapitalCents).toBeUndefined();
33
+ const withBreakdown: LoanPaymentListItem = { ...payment, appliedCapitalCents: 81667, appliedInterestCents: 20000, appliedIvaCents: 3200 };
34
+ expect(withBreakdown.appliedIvaCents).toBe(3200);
35
+ });
36
+
37
+ it('la página de pagos termina cuando no trae nextToken', () => {
38
+ const page: LoanPaymentListResponse = { items: [payment] };
39
+ expect(page.nextToken).toBeUndefined();
40
+ });
41
+
42
+ it('el contexto de venta declara el estado de cada lectura', () => {
43
+ const ok = Object.values(WizardSessionLookupStatusEnum)[0] as WizardSessionLookupStatusEnum;
44
+ const context: CreditSaleContext = {
45
+ status: ok,
46
+ retailCustomerId: 'RC-1',
47
+ retailCustomerStatus: ok,
48
+ customerName: null,
49
+ customerNameStatus: ok,
50
+ productBrand: 'Samsung',
51
+ productModel: 'Galaxy A54 5G',
52
+ productCapacity: '128 GB',
53
+ retailerId: null,
54
+ storeId: null,
55
+ storeName: null,
56
+ storeNameStatus: ok,
57
+ };
58
+ expect(context.productModel).toBe('Galaxy A54 5G');
59
+ });
60
+
61
+ it('la URL del contrato trae su tipo y su vencimiento', () => {
62
+ const url: LoanContractDownloadUrl = {
63
+ contractId: 'CT-1',
64
+ creditId: 'CR-1',
65
+ type: ContractTypeEnum.CREDIT,
66
+ url: 'https://s3.example/contract.pdf',
67
+ expiresAt: '2026-09-21T15:00:00.000Z',
68
+ };
69
+ expect(url.type).toBe(ContractTypeEnum.CREDIT);
70
+ });
71
+ });
@@ -0,0 +1,79 @@
1
+ import 'reflect-metadata';
2
+ import {
3
+ MyCreditDetail,
4
+ MyDocumentGroup,
5
+ MyDocumentGroupIdEnum,
6
+ MyDocumentKindEnum,
7
+ MyDocumentStatusEnum,
8
+ MyInstallment,
9
+ MyInstallmentDisplayStatusEnum,
10
+ MyPaymentFrequencyEnum,
11
+ MyPaymentMethodEnum,
12
+ MyPaymentPage,
13
+ } from '../../../src/retailLoanConnector/index';
14
+ import { LoanCreditStatusEnum, LoanInstallmentStatusEnum } from '../../../src/loanCredit/index';
15
+ import { CollectionResultStatus } from '../../../src/collection/enums/CollectionResultStatus';
16
+
17
+ describe('retailLoanConnector — contrato app ↔ conector (I1)', () => {
18
+ it('los ids de grupo de documentos son los que espera el módulo de la app', () => {
19
+ expect(MyDocumentGroupIdEnum.CONTRACT).toBe('contract');
20
+ expect(MyDocumentGroupIdEnum.MONTHLY).toBe('monthly');
21
+ });
22
+
23
+ it('el detalle del crédito va en pesos y con frecuencia semanal', () => {
24
+ const detail: MyCreditDetail = {
25
+ creditId: 'CR-1',
26
+ status: LoanCreditStatusEnum.ACTIVE,
27
+ device: { brand: 'Samsung', model: 'Galaxy A54 5G', capacity: '128 GB' },
28
+ paymentFrequency: MyPaymentFrequencyEnum.WEEKLY,
29
+ installmentAmount: 1050,
30
+ totalInstallments: 12,
31
+ paidInstallments: 3,
32
+ remainingBalance: 9450,
33
+ equipmentPrice: 12999,
34
+ downPayment: 2600,
35
+ financedAmount: 10399,
36
+ annualRate: 120,
37
+ nextInstallment: { number: 4, dueDate: '2026-09-18', amount: 1050, isOverdue: false },
38
+ };
39
+ expect(detail.nextInstallment?.number).toBe(4);
40
+ });
41
+
42
+ it('una cuota lleva su estado real y el que pinta la app', () => {
43
+ const installment: MyInstallment = {
44
+ number: 4,
45
+ dueDate: '2026-09-18',
46
+ amount: 1050,
47
+ principal: 846.67,
48
+ interest: 174.62,
49
+ iva: 27.94,
50
+ outstanding: 1050,
51
+ status: LoanInstallmentStatusEnum.PENDING,
52
+ displayStatus: MyInstallmentDisplayStatusEnum.NEXT,
53
+ };
54
+ expect(installment.displayStatus).toBe('NEXT');
55
+ });
56
+
57
+ it('un pago sin desglose sigue siendo válido', () => {
58
+ const page: MyPaymentPage = {
59
+ items: [{
60
+ paymentId: 'PAY-1',
61
+ folio: 'SK-MD-0a1b2c3d4e5f',
62
+ installmentNumber: 3,
63
+ appliedAt: '2026-09-15T14:00:00.000Z',
64
+ amount: 1050,
65
+ method: MyPaymentMethodEnum.PCF_ACCOUNT,
66
+ result: Object.values(CollectionResultStatus)[0] as CollectionResultStatus,
67
+ }],
68
+ };
69
+ expect(page.items[0]?.principal).toBeUndefined();
70
+ });
71
+
72
+ it('un grupo de documentos declara tipo y estado de cada documento', () => {
73
+ const group: MyDocumentGroup = {
74
+ id: MyDocumentGroupIdEnum.CONTRACT,
75
+ documents: [{ documentRef: 'doc-contract-CT-1', kind: MyDocumentKindEnum.CONTRACT, status: MyDocumentStatusEnum.READY }],
76
+ };
77
+ expect(group.documents).toHaveLength(1);
78
+ });
79
+ });
@@ -1,4 +1,5 @@
1
1
  import { BenefitModuleConfigRequest } from "./BenefitModuleConfigRequest";
2
+ import { BenefitSuiteConfigRequest } from "./BenefitSuiteConfigRequest";
2
3
  /** Mirror enum-like de BenefitCatalogStatus en el type-kit (para validación). */
3
4
  export declare enum BenefitCatalogStatusEnum {
4
5
  ACTIVE = "ACTIVE",
@@ -16,6 +17,8 @@ export declare class BenefitCreateRequest {
16
17
  translationKey?: string;
17
18
  requiresEmail?: boolean;
18
19
  moduleConfig: BenefitModuleConfigRequest;
20
+ /** Tenant de la suite (I1). Obligatorio si el flow es RETAIL_LOAN; lo valida el backend. */
21
+ suiteConfig?: BenefitSuiteConfigRequest;
19
22
  /**
20
23
  * Reglas de visibilidad. `null` se acepta como "beneficio público"
21
24
  * (visible a todos los usuarios); `undefined` también — el backend
@@ -13,6 +13,7 @@ exports.BenefitCreateRequest = exports.BenefitCatalogStatusEnum = void 0;
13
13
  const class_validator_1 = require("class-validator");
14
14
  const class_transformer_1 = require("class-transformer");
15
15
  const BenefitModuleConfigRequest_1 = require("./BenefitModuleConfigRequest");
16
+ const BenefitSuiteConfigRequest_1 = require("./BenefitSuiteConfigRequest");
16
17
  /** Mirror enum-like de BenefitCatalogStatus en el type-kit (para validación). */
17
18
  var BenefitCatalogStatusEnum;
18
19
  (function (BenefitCatalogStatusEnum) {
@@ -72,6 +73,12 @@ __decorate([
72
73
  (0, class_transformer_1.Type)(() => BenefitModuleConfigRequest_1.BenefitModuleConfigRequest),
73
74
  __metadata("design:type", BenefitModuleConfigRequest_1.BenefitModuleConfigRequest)
74
75
  ], BenefitCreateRequest.prototype, "moduleConfig", void 0);
76
+ __decorate([
77
+ (0, class_validator_1.IsOptional)(),
78
+ (0, class_validator_1.ValidateNested)(),
79
+ (0, class_transformer_1.Type)(() => BenefitSuiteConfigRequest_1.BenefitSuiteConfigRequest),
80
+ __metadata("design:type", BenefitSuiteConfigRequest_1.BenefitSuiteConfigRequest)
81
+ ], BenefitCreateRequest.prototype, "suiteConfig", void 0);
75
82
  __decorate([
76
83
  (0, class_validator_1.ValidateIf)((_, value) => value !== null && value !== undefined),
77
84
  (0, class_validator_1.IsObject)(),
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Configuración de suite de un beneficio (I1): el tenant de FiadoLend/FiadoRetail que atiende este
3
+ * beneficio (p. ej. la SOFOM). Obligatoria cuando el flow es RETAIL_LOAN; la regla la aplica
4
+ * benefits-marketplace-business porque depende de los flows en datos.
5
+ */
6
+ export declare class BenefitSuiteConfigRequest {
7
+ tenantId: string;
8
+ }
@@ -0,0 +1,26 @@
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.BenefitSuiteConfigRequest = void 0;
13
+ const class_validator_1 = require("class-validator");
14
+ /**
15
+ * Configuración de suite de un beneficio (I1): el tenant de FiadoLend/FiadoRetail que atiende este
16
+ * beneficio (p. ej. la SOFOM). Obligatoria cuando el flow es RETAIL_LOAN; la regla la aplica
17
+ * benefits-marketplace-business porque depende de los flows en datos.
18
+ */
19
+ class BenefitSuiteConfigRequest {
20
+ }
21
+ exports.BenefitSuiteConfigRequest = BenefitSuiteConfigRequest;
22
+ __decorate([
23
+ (0, class_validator_1.IsNotEmpty)(),
24
+ (0, class_validator_1.IsString)(),
25
+ __metadata("design:type", String)
26
+ ], BenefitSuiteConfigRequest.prototype, "tenantId", void 0);
@@ -0,0 +1,16 @@
1
+ import { BenefitCatalogStatusEnum } from "./BenefitCreateRequest";
2
+ /**
3
+ * Respuesta de `GET /benefits/{benefitId}/suite` (privado de benefits-marketplace-business, I1).
4
+ * Lo consume retail-loan-connector para resolver el tenant del beneficio del lado del servidor.
5
+ * NO evalúa visibilidad: solo describe el beneficio.
6
+ */
7
+ export interface BenefitSuiteResponse {
8
+ benefitId: string;
9
+ status: BenefitCatalogStatusEnum;
10
+ /** `reference` del Flow (p. ej. "RETAIL_LOAN"). */
11
+ flow: string;
12
+ /** Tenant de la suite; ausente si el beneficio no tiene `suiteConfig`. */
13
+ tenantId?: string;
14
+ name: string;
15
+ icon?: string;
16
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -1,5 +1,6 @@
1
1
  import { BenefitCatalogStatusEnum } from "./BenefitCreateRequest";
2
2
  import { BenefitModuleConfigRequest } from "./BenefitModuleConfigRequest";
3
+ import { BenefitSuiteConfigRequest } from "./BenefitSuiteConfigRequest";
3
4
  export declare class BenefitUpdateRequest {
4
5
  name?: string;
5
6
  description?: string;
@@ -10,6 +11,8 @@ export declare class BenefitUpdateRequest {
10
11
  translationKey?: string;
11
12
  requiresEmail?: boolean;
12
13
  moduleConfig?: BenefitModuleConfigRequest;
14
+ /** Tenant de la suite (I1). `undefined` no toca el campo. */
15
+ suiteConfig?: BenefitSuiteConfigRequest;
13
16
  /**
14
17
  * Reglas de visibilidad — patch parcial:
15
18
  * - `undefined` → no toca el campo existente.
@@ -14,6 +14,7 @@ const class_validator_1 = require("class-validator");
14
14
  const class_transformer_1 = require("class-transformer");
15
15
  const BenefitCreateRequest_1 = require("./BenefitCreateRequest");
16
16
  const BenefitModuleConfigRequest_1 = require("./BenefitModuleConfigRequest");
17
+ const BenefitSuiteConfigRequest_1 = require("./BenefitSuiteConfigRequest");
17
18
  class BenefitUpdateRequest {
18
19
  }
19
20
  exports.BenefitUpdateRequest = BenefitUpdateRequest;
@@ -65,6 +66,12 @@ __decorate([
65
66
  (0, class_transformer_1.Type)(() => BenefitModuleConfigRequest_1.BenefitModuleConfigRequest),
66
67
  __metadata("design:type", BenefitModuleConfigRequest_1.BenefitModuleConfigRequest)
67
68
  ], BenefitUpdateRequest.prototype, "moduleConfig", void 0);
69
+ __decorate([
70
+ (0, class_validator_1.IsOptional)(),
71
+ (0, class_validator_1.ValidateNested)(),
72
+ (0, class_transformer_1.Type)(() => BenefitSuiteConfigRequest_1.BenefitSuiteConfigRequest),
73
+ __metadata("design:type", BenefitSuiteConfigRequest_1.BenefitSuiteConfigRequest)
74
+ ], BenefitUpdateRequest.prototype, "suiteConfig", void 0);
68
75
  __decorate([
69
76
  (0, class_validator_1.ValidateIf)((_, value) => value !== null && value !== undefined),
70
77
  (0, class_validator_1.IsObject)(),
@@ -37,6 +37,8 @@ export * from "./dtos/BenefitModuleEntryRequest";
37
37
  export * from "./dtos/BenefitModuleConfigRequest";
38
38
  export * from "./dtos/BenefitCreateRequest";
39
39
  export * from "./dtos/BenefitUpdateRequest";
40
+ export * from "./dtos/BenefitSuiteConfigRequest";
41
+ export * from "./dtos/BenefitSuiteResponse";
40
42
  export * from "./dtos/BannerTranslationRequest";
41
43
  export * from "./dtos/BannerTranslationsRequest";
42
44
  export * from "./dtos/BannerContentRequest";
@@ -57,6 +57,9 @@ __exportStar(require("./dtos/BenefitModuleEntryRequest"), exports);
57
57
  __exportStar(require("./dtos/BenefitModuleConfigRequest"), exports);
58
58
  __exportStar(require("./dtos/BenefitCreateRequest"), exports);
59
59
  __exportStar(require("./dtos/BenefitUpdateRequest"), exports);
60
+ // I1 · suite del beneficio (tenant de FiadoLend/FiadoRetail)
61
+ __exportStar(require("./dtos/BenefitSuiteConfigRequest"), exports);
62
+ __exportStar(require("./dtos/BenefitSuiteResponse"), exports);
60
63
  __exportStar(require("./dtos/BannerTranslationRequest"), exports);
61
64
  __exportStar(require("./dtos/BannerTranslationsRequest"), exports);
62
65
  __exportStar(require("./dtos/BannerContentRequest"), exports);
@@ -1,5 +1,6 @@
1
1
  import { EmailVerificationStatusEnum } from '../enums/EmailVerificationStatusEnum';
2
2
  import { EmailLinkExpirationReasonEnum } from '../enums/EmailLinkExpirationReasonEnum';
3
+ import { EmailTypeEnum } from '../enums/EmailTypeEnum';
3
4
  /**
4
5
  * Item de email asociado a un directorio. Se reutiliza en EmailListResponse
5
6
  * (público) y en EmailsByDirectoryResponse (interno).
@@ -9,6 +10,7 @@ export declare class EmailItem {
9
10
  isVerified: boolean;
10
11
  isPrincipal: boolean;
11
12
  status: EmailVerificationStatusEnum;
13
+ type: EmailTypeEnum;
12
14
  verifiedAt?: number;
13
15
  /** Solo presente cuando status === EXPIRED. */
14
16
  expirationReason?: EmailLinkExpirationReasonEnum;
@@ -13,6 +13,7 @@ exports.EmailItem = void 0;
13
13
  const class_transformer_1 = require("class-transformer");
14
14
  const EmailVerificationStatusEnum_1 = require("../enums/EmailVerificationStatusEnum");
15
15
  const EmailLinkExpirationReasonEnum_1 = require("../enums/EmailLinkExpirationReasonEnum");
16
+ const EmailTypeEnum_1 = require("../enums/EmailTypeEnum");
16
17
  /**
17
18
  * Item de email asociado a un directorio. Se reutiliza en EmailListResponse
18
19
  * (público) y en EmailsByDirectoryResponse (interno).
@@ -36,6 +37,10 @@ __decorate([
36
37
  (0, class_transformer_1.Expose)(),
37
38
  __metadata("design:type", String)
38
39
  ], EmailItem.prototype, "status", void 0);
40
+ __decorate([
41
+ (0, class_transformer_1.Expose)(),
42
+ __metadata("design:type", String)
43
+ ], EmailItem.prototype, "type", void 0);
39
44
  __decorate([
40
45
  (0, class_transformer_1.Expose)(),
41
46
  __metadata("design:type", Number)
@@ -0,0 +1,10 @@
1
+ import { EmailTypeEnum } from '../enums/EmailTypeEnum';
2
+ /**
3
+ * Body para registrar un correo como confiable (backoffice): se guarda ya
4
+ * verificado, sin mandar el link de verificación.
5
+ */
6
+ export declare class EmailSetTrustedRequest {
7
+ directoryId: string;
8
+ email: string;
9
+ type: EmailTypeEnum;
10
+ }
@@ -0,0 +1,37 @@
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.EmailSetTrustedRequest = void 0;
13
+ const class_transformer_1 = require("class-transformer");
14
+ const class_validator_1 = require("class-validator");
15
+ const EmailTypeEnum_1 = require("../enums/EmailTypeEnum");
16
+ /**
17
+ * Body para registrar un correo como confiable (backoffice): se guarda ya
18
+ * verificado, sin mandar el link de verificación.
19
+ */
20
+ class EmailSetTrustedRequest {
21
+ }
22
+ exports.EmailSetTrustedRequest = EmailSetTrustedRequest;
23
+ __decorate([
24
+ (0, class_transformer_1.Expose)(),
25
+ (0, class_validator_1.IsString)(),
26
+ __metadata("design:type", String)
27
+ ], EmailSetTrustedRequest.prototype, "directoryId", void 0);
28
+ __decorate([
29
+ (0, class_transformer_1.Expose)(),
30
+ (0, class_validator_1.IsEmail)(),
31
+ __metadata("design:type", String)
32
+ ], EmailSetTrustedRequest.prototype, "email", void 0);
33
+ __decorate([
34
+ (0, class_transformer_1.Expose)(),
35
+ (0, class_validator_1.IsEnum)(EmailTypeEnum_1.EmailTypeEnum),
36
+ __metadata("design:type", String)
37
+ ], EmailSetTrustedRequest.prototype, "type", void 0);
@@ -0,0 +1,9 @@
1
+ import { EmailTypeEnum } from '../enums/EmailTypeEnum';
2
+ /**
3
+ * Respuesta al registrar un correo como confiable.
4
+ */
5
+ export declare class EmailSetTrustedResponse {
6
+ email: string;
7
+ type: EmailTypeEnum;
8
+ isVerified: boolean;
9
+ }
@@ -0,0 +1,32 @@
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.EmailSetTrustedResponse = void 0;
13
+ const class_transformer_1 = require("class-transformer");
14
+ const EmailTypeEnum_1 = require("../enums/EmailTypeEnum");
15
+ /**
16
+ * Respuesta al registrar un correo como confiable.
17
+ */
18
+ class EmailSetTrustedResponse {
19
+ }
20
+ exports.EmailSetTrustedResponse = EmailSetTrustedResponse;
21
+ __decorate([
22
+ (0, class_transformer_1.Expose)(),
23
+ __metadata("design:type", String)
24
+ ], EmailSetTrustedResponse.prototype, "email", void 0);
25
+ __decorate([
26
+ (0, class_transformer_1.Expose)(),
27
+ __metadata("design:type", String)
28
+ ], EmailSetTrustedResponse.prototype, "type", void 0);
29
+ __decorate([
30
+ (0, class_transformer_1.Expose)(),
31
+ __metadata("design:type", Boolean)
32
+ ], EmailSetTrustedResponse.prototype, "isVerified", void 0);
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Origen del correo asociado a un directorio.
3
+ * PERSONAL: correo particular del titular.
4
+ * CORPORATE: correo institucional/empresarial del titular.
5
+ */
6
+ export declare enum EmailTypeEnum {
7
+ PERSONAL = "PERSONAL",
8
+ CORPORATE = "CORPORATE"
9
+ }
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EmailTypeEnum = void 0;
4
+ /**
5
+ * Origen del correo asociado a un directorio.
6
+ * PERSONAL: correo particular del titular.
7
+ * CORPORATE: correo institucional/empresarial del titular.
8
+ */
9
+ var EmailTypeEnum;
10
+ (function (EmailTypeEnum) {
11
+ EmailTypeEnum["PERSONAL"] = "PERSONAL";
12
+ EmailTypeEnum["CORPORATE"] = "CORPORATE";
13
+ })(EmailTypeEnum || (exports.EmailTypeEnum = EmailTypeEnum = {}));
@@ -1,5 +1,6 @@
1
1
  export * from './enums/EmailVerificationStatusEnum';
2
2
  export * from './enums/EmailLinkExpirationReasonEnum';
3
+ export * from './enums/EmailTypeEnum';
3
4
  export * from './dtos/EmailVerificationStartRequest';
4
5
  export * from './dtos/EmailVerificationStartResponse';
5
6
  export * from './dtos/EmailVerificationResendRequest';
@@ -10,6 +11,8 @@ export * from './dtos/EmailItem';
10
11
  export * from './dtos/EmailListResponse';
11
12
  export * from './dtos/EmailSetPrincipalRequest';
12
13
  export * from './dtos/EmailSetPrincipalResponse';
14
+ export * from './dtos/EmailSetTrustedRequest';
15
+ export * from './dtos/EmailSetTrustedResponse';
13
16
  export * from './dtos/EmailDeleteRequest';
14
17
  export * from './dtos/EmailDeleteResponse';
15
18
  export * from './dtos/EmailConfirmRequest';
@@ -16,6 +16,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./enums/EmailVerificationStatusEnum"), exports);
18
18
  __exportStar(require("./enums/EmailLinkExpirationReasonEnum"), exports);
19
+ __exportStar(require("./enums/EmailTypeEnum"), exports);
19
20
  __exportStar(require("./dtos/EmailVerificationStartRequest"), exports);
20
21
  __exportStar(require("./dtos/EmailVerificationStartResponse"), exports);
21
22
  __exportStar(require("./dtos/EmailVerificationResendRequest"), exports);
@@ -26,6 +27,8 @@ __exportStar(require("./dtos/EmailItem"), exports);
26
27
  __exportStar(require("./dtos/EmailListResponse"), exports);
27
28
  __exportStar(require("./dtos/EmailSetPrincipalRequest"), exports);
28
29
  __exportStar(require("./dtos/EmailSetPrincipalResponse"), exports);
30
+ __exportStar(require("./dtos/EmailSetTrustedRequest"), exports);
31
+ __exportStar(require("./dtos/EmailSetTrustedResponse"), exports);
29
32
  __exportStar(require("./dtos/EmailDeleteRequest"), exports);
30
33
  __exportStar(require("./dtos/EmailDeleteResponse"), exports);
31
34
  __exportStar(require("./dtos/EmailConfirmRequest"), exports);
package/bin/index.d.ts CHANGED
@@ -115,3 +115,4 @@ export * as UserConfirmations from './userConfirmations';
115
115
  export * as PeopleBusiness from './peopleBusiness';
116
116
  export * as WebhookBusiness from './webhookBusiness';
117
117
  export * as Membership from './membership';
118
+ export * as RetailLoanConnector from './retailLoanConnector';