@fiado/type-kit 3.456.0 → 3.457.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 (79) hide show
  1. package/_test_/unit/benefitCenter/benefitSuiteConfig.test.ts +58 -0
  2. package/_test_/unit/loanCredit/customerReadDtos.test.ts +71 -0
  3. package/_test_/unit/retailLoanConnector/contract.test.ts +79 -0
  4. package/bin/benefitCenter/dtos/BenefitCreateRequest.d.ts +3 -0
  5. package/bin/benefitCenter/dtos/BenefitCreateRequest.js +7 -0
  6. package/bin/benefitCenter/dtos/BenefitSuiteConfigRequest.d.ts +8 -0
  7. package/bin/benefitCenter/dtos/BenefitSuiteConfigRequest.js +26 -0
  8. package/bin/benefitCenter/dtos/BenefitSuiteResponse.d.ts +16 -0
  9. package/bin/benefitCenter/dtos/BenefitSuiteResponse.js +2 -0
  10. package/bin/benefitCenter/dtos/BenefitUpdateRequest.d.ts +3 -0
  11. package/bin/benefitCenter/dtos/BenefitUpdateRequest.js +7 -0
  12. package/bin/benefitCenter/index.d.ts +2 -0
  13. package/bin/benefitCenter/index.js +3 -0
  14. package/bin/index.d.ts +1 -0
  15. package/bin/index.js +4 -1
  16. package/bin/loanCredit/dtos/responses/CreditSaleContext.d.ts +31 -0
  17. package/bin/loanCredit/dtos/responses/CreditSaleContext.js +2 -0
  18. package/bin/loanCredit/dtos/responses/LoanBorrowerCreditItem.d.ts +17 -0
  19. package/bin/loanCredit/dtos/responses/LoanBorrowerCreditItem.js +2 -0
  20. package/bin/loanCredit/dtos/responses/LoanContractDownloadUrl.d.ts +9 -0
  21. package/bin/loanCredit/dtos/responses/LoanContractDownloadUrl.js +2 -0
  22. package/bin/loanCredit/dtos/responses/LoanCreditDetail.d.ts +21 -0
  23. package/bin/loanCredit/dtos/responses/LoanCreditDetail.js +2 -0
  24. package/bin/loanCredit/dtos/responses/LoanPaymentListItem.d.ts +32 -0
  25. package/bin/loanCredit/dtos/responses/LoanPaymentListItem.js +2 -0
  26. package/bin/loanCredit/index.d.ts +5 -0
  27. package/bin/loanCredit/index.js +6 -0
  28. package/bin/retailLoanConnector/dtos/MyCreditDetail.d.ts +20 -0
  29. package/bin/retailLoanConnector/dtos/MyCreditDetail.js +2 -0
  30. package/bin/retailLoanConnector/dtos/MyCreditSummary.d.ts +29 -0
  31. package/bin/retailLoanConnector/dtos/MyCreditSummary.js +2 -0
  32. package/bin/retailLoanConnector/dtos/MyDocument.d.ts +21 -0
  33. package/bin/retailLoanConnector/dtos/MyDocument.js +2 -0
  34. package/bin/retailLoanConnector/dtos/MyDocumentUrl.d.ts +5 -0
  35. package/bin/retailLoanConnector/dtos/MyDocumentUrl.js +2 -0
  36. package/bin/retailLoanConnector/dtos/MyInstallment.d.ts +16 -0
  37. package/bin/retailLoanConnector/dtos/MyInstallment.js +2 -0
  38. package/bin/retailLoanConnector/dtos/MyPayment.d.ts +20 -0
  39. package/bin/retailLoanConnector/dtos/MyPayment.js +2 -0
  40. package/bin/retailLoanConnector/enums/MyDocumentGroupIdEnum.d.ts +5 -0
  41. package/bin/retailLoanConnector/enums/MyDocumentGroupIdEnum.js +9 -0
  42. package/bin/retailLoanConnector/enums/MyDocumentKindEnum.d.ts +4 -0
  43. package/bin/retailLoanConnector/enums/MyDocumentKindEnum.js +8 -0
  44. package/bin/retailLoanConnector/enums/MyDocumentStatusEnum.d.ts +5 -0
  45. package/bin/retailLoanConnector/enums/MyDocumentStatusEnum.js +9 -0
  46. package/bin/retailLoanConnector/enums/MyInstallmentDisplayStatusEnum.d.ts +7 -0
  47. package/bin/retailLoanConnector/enums/MyInstallmentDisplayStatusEnum.js +11 -0
  48. package/bin/retailLoanConnector/enums/MyPaymentFrequencyEnum.d.ts +4 -0
  49. package/bin/retailLoanConnector/enums/MyPaymentFrequencyEnum.js +8 -0
  50. package/bin/retailLoanConnector/enums/MyPaymentMethodEnum.d.ts +7 -0
  51. package/bin/retailLoanConnector/enums/MyPaymentMethodEnum.js +11 -0
  52. package/bin/retailLoanConnector/index.d.ts +12 -0
  53. package/bin/retailLoanConnector/index.js +30 -0
  54. package/package.json +1 -1
  55. package/src/benefitCenter/dtos/BenefitCreateRequest.ts +7 -0
  56. package/src/benefitCenter/dtos/BenefitSuiteConfigRequest.ts +12 -0
  57. package/src/benefitCenter/dtos/BenefitSuiteResponse.ts +17 -0
  58. package/src/benefitCenter/dtos/BenefitUpdateRequest.ts +7 -0
  59. package/src/benefitCenter/index.ts +3 -0
  60. package/src/index.ts +4 -0
  61. package/src/loanCredit/dtos/responses/CreditSaleContext.ts +44 -0
  62. package/src/loanCredit/dtos/responses/LoanBorrowerCreditItem.ts +18 -0
  63. package/src/loanCredit/dtos/responses/LoanContractDownloadUrl.ts +10 -0
  64. package/src/loanCredit/dtos/responses/LoanCreditDetail.ts +22 -0
  65. package/src/loanCredit/dtos/responses/LoanPaymentListItem.ts +34 -0
  66. package/src/loanCredit/index.ts +6 -0
  67. package/src/retailLoanConnector/dtos/MyCreditDetail.ts +22 -0
  68. package/src/retailLoanConnector/dtos/MyCreditSummary.ts +32 -0
  69. package/src/retailLoanConnector/dtos/MyDocument.ts +23 -0
  70. package/src/retailLoanConnector/dtos/MyDocumentUrl.ts +5 -0
  71. package/src/retailLoanConnector/dtos/MyInstallment.ts +17 -0
  72. package/src/retailLoanConnector/dtos/MyPayment.ts +22 -0
  73. package/src/retailLoanConnector/enums/MyDocumentGroupIdEnum.ts +5 -0
  74. package/src/retailLoanConnector/enums/MyDocumentKindEnum.ts +4 -0
  75. package/src/retailLoanConnector/enums/MyDocumentStatusEnum.ts +5 -0
  76. package/src/retailLoanConnector/enums/MyInstallmentDisplayStatusEnum.ts +7 -0
  77. package/src/retailLoanConnector/enums/MyPaymentFrequencyEnum.ts +4 -0
  78. package/src/retailLoanConnector/enums/MyPaymentMethodEnum.ts +7 -0
  79. 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,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);
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';
package/bin/index.js CHANGED
@@ -38,7 +38,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
38
38
  Object.defineProperty(exports, "__esModule", { value: true });
39
39
  exports.IssuanceBusiness = exports.Blacklist = exports.CentralPayments = exports.Helpdesk = exports.FiadoApiResponse = exports.Auth = exports.LegalDocumentsBusiness = exports.Role = exports.STPAccount = exports.RiskProfile = exports.FraudPreventionEngine = exports.BBVARst = exports.Stp = exports.BenefitCenter = exports.BankAccount = exports.P2pContact = exports.CreditContract = exports.Contract = exports.ProductCatalog = exports.ContactInfo = exports.TransactionAnalytics = exports.Transaction = exports.TransactionProcessor = exports.GenericMessage = exports.EventBridgeMessage = exports.SessionActivity = exports.NotificationMessages = exports.ServicePayment = exports.Header = exports.Identity = exports.UserTags = exports.Group = exports.File = exports.ExchangeRate = exports.Directory = exports.Currency = exports.Country = exports.Card = exports.Authentication = exports.AppContent = exports.App = exports.Offices = exports.Places = exports.Address = exports.Beneficiary = exports.Activity = exports.Biometrics = exports.MetamapConnector = exports.Account = exports.Crypto = void 0;
40
40
  exports.DatalakeQuery = exports.RetailWizard = exports.RetailCustomer = exports.RetailCards = exports.RetailCatalog = exports.RetailCommission = exports.RetailOrg = exports.EmailVerification = exports.NetworkConnector = exports.Modelias = exports.TotpSecurity = exports.Passport = exports.WalletFunding = exports.Remittance = exports.PlatformRbac = exports.CognitoBackofficeConnector = exports.WhatsappConnector = exports.TwilioConnector = exports.MessagesConnector = exports.Mdm = exports.MilestoneBusiness = exports.CirculoCredito = exports.CreditStatements = exports.Sentry = exports.AiEngine = exports.Funnel = exports.TeamsConnector = exports.PlatformErrorEvents = exports.CustomerFile = exports.CreditBackoffice = exports.CreditDashboard = exports.CreditEngine = exports.Credit = exports.ComissionBusiness = exports.ReferralBusiness = exports.ZendeskMessaging = exports.NotificationWS = exports.Event = exports.PayrollBusiness = exports.Cnbv = exports.DirectorySetting = exports.InvoiceCollector = exports.Collector = exports.Pricelist = exports.Company = exports.Services = exports.AccountIssuanceBusiness = exports.AppSelectionData = exports.Device = exports.Observations = void 0;
41
- exports.Membership = exports.WebhookBusiness = exports.PeopleBusiness = exports.UserConfirmations = exports.Collection = exports.Shipping = exports.PhoneSales = exports.Onboarding = exports.Kyc = exports.LoanScoring = exports.LoanCredit = exports.LoanCollectorAssignment = exports.LoanOfferings = exports.Shortlink = exports.LoanConfig = void 0;
41
+ exports.RetailLoanConnector = exports.Membership = exports.WebhookBusiness = exports.PeopleBusiness = exports.UserConfirmations = exports.Collection = exports.Shipping = exports.PhoneSales = exports.Onboarding = exports.Kyc = exports.LoanScoring = exports.LoanCredit = exports.LoanCollectorAssignment = exports.LoanOfferings = exports.Shortlink = exports.LoanConfig = void 0;
42
42
  exports.Crypto = __importStar(require("./crypto"));
43
43
  exports.Account = __importStar(require("./account"));
44
44
  exports.MetamapConnector = __importStar(require("./metamapConnector"));
@@ -219,3 +219,6 @@ exports.WebhookBusiness = __importStar(require("./webhookBusiness"));
219
219
  // (MembershipDirectoryUser_GT). Espeja al dominio `services`, que modela lo mismo para
220
220
  // servicios de terceros.
221
221
  exports.Membership = __importStar(require("./membership"));
222
+ // RetailLoanConnector: contrato público de retail-loan-connector (I1), la puerta de la App Fiado
223
+ // hacia las suites FiadoLend/FiadoRetail. Montos en pesos; el conector convierte desde centavos.
224
+ exports.RetailLoanConnector = __importStar(require("./retailLoanConnector"));
@@ -0,0 +1,31 @@
1
+ import { WizardSessionLookupStatusEnum } from '../../../retailWizard/enums/WizardSessionLookupStatusEnum';
2
+ /**
3
+ * Por qué una columna del contexto de venta salió sin dato. Catálogo CERRADO y propio: nunca
4
+ * repite el mensaje del lambda vecino, que puede traer datos que este silo no controla.
5
+ */
6
+ export type SaleContextReason = 'CREDIT_WITHOUT_WIZARD_SESSION' | 'WIZARD_LOOKUP_FAILED' | 'BORROWER_LOOKUP_FAILED' | 'BORROWER_NOT_FOUND' | 'CUSTOMER_ANCHOR_MISSING' | 'CUSTOMER_NAME_LOOKUP_FAILED' | 'CUSTOMER_NOT_FOUND' | 'CUSTOMER_WITHOUT_NAME' | 'STORE_ROSTER_FAILED' | 'STORE_NOT_IN_ROSTER' | 'RETAILER_UNKNOWN';
7
+ /**
8
+ * Cliente, equipo y tienda de la venta que originó el crédito (loan-credit-business). Son CUATRO
9
+ * lecturas y cada una lleva su estado: `status` es el del lote al wizard (gobierna las columnas del
10
+ * equipo), `retailCustomerStatus` el del ancla del cliente, `customerNameStatus` el de su nombre y
11
+ * `storeNameStatus` el del nombre de la tienda. `NOT_FOUND` y `UNAVAILABLE` NUNCA se colapsan.
12
+ */
13
+ export interface CreditSaleContext {
14
+ status: WizardSessionLookupStatusEnum;
15
+ reason?: SaleContextReason;
16
+ retailCustomerId: string | null;
17
+ retailCustomerStatus: WizardSessionLookupStatusEnum;
18
+ retailCustomerReason?: SaleContextReason;
19
+ /** PII: nunca se loguea. */
20
+ customerName: string | null;
21
+ customerNameStatus: WizardSessionLookupStatusEnum;
22
+ customerNameReason?: SaleContextReason;
23
+ productBrand: string | null;
24
+ productModel: string | null;
25
+ productCapacity: string | null;
26
+ retailerId: string | null;
27
+ storeId: string | null;
28
+ storeName: string | null;
29
+ storeNameStatus: WizardSessionLookupStatusEnum;
30
+ storeNameReason?: SaleContextReason;
31
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,17 @@
1
+ import { LoanCreditResponse } from './LoanCreditResponse';
2
+ import { CreditSaleContext } from './CreditSaleContext';
3
+ /**
4
+ * Un crédito de un acreditado (loan-credit-business): el `LoanCreditResponse` MÁS las cifras de su
5
+ * plan y el contexto de su venta. Montos en cents · instantes ISO-8601 · dueDates `YYYY-MM-DD`.
6
+ */
7
+ export interface LoanBorrowerCreditItem extends LoanCreditResponse {
8
+ /** Cupones cubiertos: pagados y pagados por adelantado. La reestructurada no cuenta. */
9
+ paidInstallments: number;
10
+ /** `null` = no aplica (el crédito se canceló o caducó); `0` = ya no debe nada. */
11
+ outstandingBalanceCents: number | null;
12
+ /** Días desde el vencimiento impago más viejo; `0` al día; `null` si no hay atraso que medir. */
13
+ overdueDays: number | null;
14
+ /** Suma del TOTAL de las cuotas vencidas impagas. Sigue a `overdueDays` en `null`/`0`. */
15
+ overdueAmountCents: number | null;
16
+ saleContext: CreditSaleContext;
17
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,9 @@
1
+ import { ContractTypeEnum } from '../../enums/ContractTypeEnum';
2
+ /** Enlace prefirmado y temporal del PDF de un contrato. `expiresAt` en ISO-8601. */
3
+ export interface LoanContractDownloadUrl {
4
+ contractId: string;
5
+ creditId: string;
6
+ type: ContractTypeEnum;
7
+ url: string;
8
+ expiresAt: string;
9
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,21 @@
1
+ import { SaleFinancierEnum } from '../../../retailWizard/enums/SaleFinancierEnum';
2
+ import { LoanCreditResponse } from './LoanCreditResponse';
3
+ import { CreditSaleContext } from './CreditSaleContext';
4
+ /**
5
+ * Detalle de UN crédito (loan-credit-business): el `LoanCreditResponse` MÁS las cifras de su plan,
6
+ * el equipo y el contexto de su venta. Montos en cents · instantes ISO-8601.
7
+ */
8
+ export interface LoanCreditDetail extends LoanCreditResponse {
9
+ /** SKU del equipo financiado, congelado al originar. Ausente en créditos anteriores a 2026-08. */
10
+ productSku?: string;
11
+ /** Tienda que originó la venta. Ausente en créditos anteriores a 2026-08. */
12
+ storeId?: string;
13
+ financier: SaleFinancierEnum;
14
+ paidInstallments: number;
15
+ outstandingBalanceCents: number | null;
16
+ overdueDays: number | null;
17
+ overdueAmountCents: number | null;
18
+ /** Cuotas vencidas impagas. `0` = nada vencido; `null` acompaña a `overdueDays` en null. */
19
+ overdueInstallments: number | null;
20
+ saleContext: CreditSaleContext;
21
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,32 @@
1
+ import { CollectionResultStatus } from '../../../collection/enums/CollectionResultStatus';
2
+ import { MechanismType } from '../../../collection/enums/MechanismType';
3
+ import { CurrencyId } from '../../../currency/enums/CurrencyId';
4
+ /** Un pago del historial de un crédito, tal como lo asentó el motor de cobro en `LoanPayment_GT`. */
5
+ export interface LoanPaymentListItem {
6
+ paymentId: string;
7
+ /** Folio del pago — la referencia de conciliación. */
8
+ receipt: string;
9
+ installmentNumber: number;
10
+ attemptId: string;
11
+ mechanism: MechanismType;
12
+ result: CollectionResultStatus;
13
+ currency: CurrencyId;
14
+ collectedCents: number;
15
+ /** Lo que de verdad se abonó a la cuota. */
16
+ appliedCents: number;
17
+ overpaidCents: number;
18
+ reservedCents: number;
19
+ needsReview: boolean;
20
+ appliedAt: string;
21
+ /** Capital que abonó este pago. Ausente en pagos anteriores al desglose (I1). */
22
+ appliedCapitalCents?: number;
23
+ /** Interés que abonó este pago. Ausente en pagos anteriores al desglose (I1). */
24
+ appliedInterestCents?: number;
25
+ /** IVA del interés que abonó este pago. Ausente en pagos anteriores al desglose (I1). */
26
+ appliedIvaCents?: number;
27
+ }
28
+ /** Página del historial. El fin lo marca la AUSENCIA de `nextToken`, nunca una página corta. */
29
+ export interface LoanPaymentListResponse {
30
+ items: LoanPaymentListItem[];
31
+ nextToken?: string;
32
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -29,6 +29,11 @@ export * from './dtos/requests/ChangeLoanCreditStatusRequest';
29
29
  export * from './dtos/responses/LoanBorrowerResponse';
30
30
  export * from './dtos/responses/LoanCreditResponse';
31
31
  export * from './dtos/responses/LoanInstallmentResponse';
32
+ export * from './dtos/responses/CreditSaleContext';
33
+ export * from './dtos/responses/LoanBorrowerCreditItem';
34
+ export * from './dtos/responses/LoanCreditDetail';
35
+ export * from './dtos/responses/LoanPaymentListItem';
36
+ export * from './dtos/responses/LoanContractDownloadUrl';
32
37
  export * from './dtos/responses/LoanContractResponse';
33
38
  export * from './dtos/responses/OriginateLoanCreditResponse';
34
39
  export * from './dtos/responses/QuoteLoanCreditResponse';
@@ -52,6 +52,12 @@ __exportStar(require("./dtos/requests/ChangeLoanCreditStatusRequest"), exports);
52
52
  __exportStar(require("./dtos/responses/LoanBorrowerResponse"), exports);
53
53
  __exportStar(require("./dtos/responses/LoanCreditResponse"), exports);
54
54
  __exportStar(require("./dtos/responses/LoanInstallmentResponse"), exports);
55
+ // Lectura de cliente (I1 · retail-loan-connector): antes locales de loan-credit-business
56
+ __exportStar(require("./dtos/responses/CreditSaleContext"), exports);
57
+ __exportStar(require("./dtos/responses/LoanBorrowerCreditItem"), exports);
58
+ __exportStar(require("./dtos/responses/LoanCreditDetail"), exports);
59
+ __exportStar(require("./dtos/responses/LoanPaymentListItem"), exports);
60
+ __exportStar(require("./dtos/responses/LoanContractDownloadUrl"), exports);
55
61
  __exportStar(require("./dtos/responses/LoanContractResponse"), exports);
56
62
  __exportStar(require("./dtos/responses/OriginateLoanCreditResponse"), exports);
57
63
  __exportStar(require("./dtos/responses/QuoteLoanCreditResponse"), exports);
@@ -0,0 +1,20 @@
1
+ import { MyCreditSummary } from './MyCreditSummary';
2
+ /** La próxima cuota abierta. `isOverdue` si su estado en loan-credit es OVERDUE. */
3
+ export interface MyNextInstallment {
4
+ number: number;
5
+ dueDate: string;
6
+ amount: number;
7
+ isOverdue: boolean;
8
+ }
9
+ /** Detalle de un crédito (`GET /benefits/{benefitId}/credits/{creditId}`). Montos en pesos. */
10
+ export interface MyCreditDetail extends MyCreditSummary {
11
+ equipmentPrice: number;
12
+ downPayment: number;
13
+ financedAmount: number;
14
+ /** Tasa anual ordinaria tal como la guarda loan-credit (`tnaAnnual`). */
15
+ annualRate: number;
16
+ activatedAt?: string;
17
+ firstDueDate?: string;
18
+ lastDueDate?: string;
19
+ nextInstallment?: MyNextInstallment;
20
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,29 @@
1
+ import { LoanCreditStatusEnum } from '../../loanCredit/enums/LoanCreditStatusEnum';
2
+ import { MyPaymentFrequencyEnum } from '../enums/MyPaymentFrequencyEnum';
3
+ /** Equipo financiado. Cada campo puede faltar si el contexto de venta no se pudo leer. */
4
+ export interface MyDevice {
5
+ brand: string | null;
6
+ model: string | null;
7
+ capacity: string | null;
8
+ }
9
+ /** Atraso del crédito. Montos en pesos. `installments` solo viene en el detalle. */
10
+ export interface MyOverdue {
11
+ amount: number;
12
+ days: number;
13
+ installments?: number;
14
+ }
15
+ /**
16
+ * Un crédito del cliente en la lista (`GET /benefits/{benefitId}/credits`). Montos en pesos con
17
+ * 2 decimales (DEC-007). `remainingBalance` `null` = no aplica (crédito que nunca contrajo deuda).
18
+ */
19
+ export interface MyCreditSummary {
20
+ creditId: string;
21
+ status: LoanCreditStatusEnum;
22
+ device: MyDevice;
23
+ paymentFrequency: MyPaymentFrequencyEnum;
24
+ installmentAmount: number;
25
+ totalInstallments: number;
26
+ paidInstallments: number;
27
+ remainingBalance: number | null;
28
+ overdue?: MyOverdue;
29
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,21 @@
1
+ import { ContractTypeEnum } from '../../loanCredit/enums/ContractTypeEnum';
2
+ import { MyDocumentGroupIdEnum } from '../enums/MyDocumentGroupIdEnum';
3
+ import { MyDocumentKindEnum } from '../enums/MyDocumentKindEnum';
4
+ import { MyDocumentStatusEnum } from '../enums/MyDocumentStatusEnum';
5
+ /**
6
+ * Un documento del crédito. `documentRef` sigue la convención del módulo de la app:
7
+ * `doc-contract-<contractId>` para contratos y `doc-stmt-YYYY-MM` para estados de cuenta.
8
+ */
9
+ export interface MyDocument {
10
+ documentRef: string;
11
+ kind: MyDocumentKindEnum;
12
+ type?: ContractTypeEnum;
13
+ /** `YYYY-MM`, solo en estados de cuenta. */
14
+ period?: string;
15
+ issuedAt?: string;
16
+ status: MyDocumentStatusEnum;
17
+ }
18
+ export interface MyDocumentGroup {
19
+ id: MyDocumentGroupIdEnum;
20
+ documents: MyDocument[];
21
+ }