@fiado/type-kit 3.430.0 → 3.432.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 (153) hide show
  1. package/_test_/unit/collection/deregisterChargeStatus.test.ts +19 -0
  2. package/_test_/unit/loanCredit/creditLifecycleEnums.test.ts +68 -0
  3. package/_test_/unit/loanCredit/dtos/creditLifecycleRequests.test.ts +196 -0
  4. package/_test_/unit/loanOfferings/amortizationScheduleRequest.test.ts +45 -0
  5. package/_test_/unit/messagesConnector/otpMessagePurposeEnum.test.ts +65 -0
  6. package/bin/collection/enums/DeregisterChargeStatus.d.ts +3 -1
  7. package/bin/collection/enums/DeregisterChargeStatus.js +2 -0
  8. package/bin/loanCredit/dtos/RestructureTerms.d.ts +9 -0
  9. package/bin/loanCredit/dtos/RestructureTerms.js +36 -0
  10. package/bin/loanCredit/dtos/WriteOffConfirmations.d.ts +7 -0
  11. package/bin/loanCredit/dtos/WriteOffConfirmations.js +30 -0
  12. package/bin/loanCredit/dtos/requests/BackofficeAcceptRestructureRequest.d.ts +5 -0
  13. package/bin/loanCredit/dtos/requests/BackofficeAcceptRestructureRequest.js +24 -0
  14. package/bin/loanCredit/dtos/requests/BackofficeApplyAdvanceRequest.d.ts +7 -0
  15. package/bin/loanCredit/dtos/requests/BackofficeApplyAdvanceRequest.js +31 -0
  16. package/bin/loanCredit/dtos/requests/BackofficeApplyPrepaymentRequest.d.ts +4 -0
  17. package/bin/loanCredit/dtos/requests/BackofficeApplyPrepaymentRequest.js +24 -0
  18. package/bin/loanCredit/dtos/requests/BackofficeApproveRestructureRequest.d.ts +8 -0
  19. package/bin/loanCredit/dtos/requests/BackofficeApproveRestructureRequest.js +32 -0
  20. package/bin/loanCredit/dtos/requests/BackofficeCollectWrittenOffCreditRequest.d.ts +5 -0
  21. package/bin/loanCredit/dtos/requests/BackofficeCollectWrittenOffCreditRequest.js +24 -0
  22. package/bin/loanCredit/dtos/requests/BackofficeListPaymentsInReviewRequest.d.ts +6 -0
  23. package/bin/loanCredit/dtos/requests/BackofficeListPaymentsInReviewRequest.js +33 -0
  24. package/bin/loanCredit/dtos/requests/BackofficeListWriteOffCandidatesRequest.d.ts +6 -0
  25. package/bin/loanCredit/dtos/requests/BackofficeListWriteOffCandidatesRequest.js +33 -0
  26. package/bin/loanCredit/dtos/requests/BackofficeProposeRestructureRequest.d.ts +7 -0
  27. package/bin/loanCredit/dtos/requests/BackofficeProposeRestructureRequest.js +32 -0
  28. package/bin/loanCredit/dtos/requests/BackofficeRejectRestructureRequest.d.ts +5 -0
  29. package/bin/loanCredit/dtos/requests/BackofficeRejectRestructureRequest.js +24 -0
  30. package/bin/loanCredit/dtos/requests/BackofficeResolvePaymentReviewRequest.d.ts +11 -0
  31. package/bin/loanCredit/dtos/requests/BackofficeResolvePaymentReviewRequest.js +44 -0
  32. package/bin/loanCredit/dtos/requests/BackofficeSettleCreditRequest.d.ts +5 -0
  33. package/bin/loanCredit/dtos/requests/BackofficeSettleCreditRequest.js +24 -0
  34. package/bin/loanCredit/dtos/requests/BackofficeWriteOffCreditRequest.d.ts +7 -0
  35. package/bin/loanCredit/dtos/requests/BackofficeWriteOffCreditRequest.js +33 -0
  36. package/bin/loanCredit/dtos/responses/LoanAdHocChargeRequested.d.ts +9 -0
  37. package/bin/loanCredit/dtos/responses/LoanAdHocChargeRequested.js +2 -0
  38. package/bin/loanCredit/dtos/responses/LoanOtpDispatch.d.ts +5 -0
  39. package/bin/loanCredit/dtos/responses/LoanOtpDispatch.js +2 -0
  40. package/bin/loanCredit/dtos/responses/LoanPaymentReviewItem.d.ts +12 -0
  41. package/bin/loanCredit/dtos/responses/LoanPaymentReviewItem.js +2 -0
  42. package/bin/loanCredit/dtos/responses/LoanPaymentReviewListResponse.d.ts +7 -0
  43. package/bin/loanCredit/dtos/responses/LoanPaymentReviewListResponse.js +2 -0
  44. package/bin/loanCredit/dtos/responses/LoanPaymentReviewResolution.d.ts +11 -0
  45. package/bin/loanCredit/dtos/responses/LoanPaymentReviewResolution.js +2 -0
  46. package/bin/loanCredit/dtos/responses/LoanPrepaymentQuote.d.ts +10 -0
  47. package/bin/loanCredit/dtos/responses/LoanPrepaymentQuote.js +2 -0
  48. package/bin/loanCredit/dtos/responses/LoanRestructure.d.ts +22 -0
  49. package/bin/loanCredit/dtos/responses/LoanRestructure.js +2 -0
  50. package/bin/loanCredit/dtos/responses/LoanRestructureListResponse.d.ts +7 -0
  51. package/bin/loanCredit/dtos/responses/LoanRestructureListResponse.js +2 -0
  52. package/bin/loanCredit/dtos/responses/LoanRestructurePreview.d.ts +15 -0
  53. package/bin/loanCredit/dtos/responses/LoanRestructurePreview.js +2 -0
  54. package/bin/loanCredit/dtos/responses/LoanRestructurePreviewInstallment.d.ts +11 -0
  55. package/bin/loanCredit/dtos/responses/LoanRestructurePreviewInstallment.js +2 -0
  56. package/bin/loanCredit/dtos/responses/LoanSettlementQuote.d.ts +16 -0
  57. package/bin/loanCredit/dtos/responses/LoanSettlementQuote.js +2 -0
  58. package/bin/loanCredit/dtos/responses/LoanSettlementRequested.d.ts +11 -0
  59. package/bin/loanCredit/dtos/responses/LoanSettlementRequested.js +2 -0
  60. package/bin/loanCredit/dtos/responses/LoanWriteOffCandidateItem.d.ts +13 -0
  61. package/bin/loanCredit/dtos/responses/LoanWriteOffCandidateItem.js +2 -0
  62. package/bin/loanCredit/dtos/responses/LoanWriteOffCandidateListResponse.d.ts +7 -0
  63. package/bin/loanCredit/dtos/responses/LoanWriteOffCandidateListResponse.js +2 -0
  64. package/bin/loanCredit/dtos/responses/LoanWriteOffResult.d.ts +12 -0
  65. package/bin/loanCredit/dtos/responses/LoanWriteOffResult.js +2 -0
  66. package/bin/loanCredit/enums/ContractTypeEnum.d.ts +7 -5
  67. package/bin/loanCredit/enums/ContractTypeEnum.js +6 -4
  68. package/bin/loanCredit/enums/LoanAdHocChargeKindEnum.d.ts +10 -0
  69. package/bin/loanCredit/enums/LoanAdHocChargeKindEnum.js +14 -0
  70. package/bin/loanCredit/enums/LoanChargeKindEnum.d.ts +11 -0
  71. package/bin/loanCredit/enums/LoanChargeKindEnum.js +15 -0
  72. package/bin/loanCredit/enums/LoanRestructureStatusEnum.d.ts +11 -0
  73. package/bin/loanCredit/enums/LoanRestructureStatusEnum.js +15 -0
  74. package/bin/loanCredit/enums/LoanSettlementStatusEnum.d.ts +7 -0
  75. package/bin/loanCredit/enums/LoanSettlementStatusEnum.js +11 -0
  76. package/bin/loanCredit/enums/PaymentReviewActionEnum.d.ts +9 -0
  77. package/bin/loanCredit/enums/PaymentReviewActionEnum.js +13 -0
  78. package/bin/loanCredit/enums/PaymentReviewReasonEnum.d.ts +16 -0
  79. package/bin/loanCredit/enums/PaymentReviewReasonEnum.js +20 -0
  80. package/bin/loanCredit/enums/PaymentReviewResolutionEnum.d.ts +13 -0
  81. package/bin/loanCredit/enums/PaymentReviewResolutionEnum.js +17 -0
  82. package/bin/loanCredit/enums/RefundDestinationEnum.d.ts +8 -0
  83. package/bin/loanCredit/enums/RefundDestinationEnum.js +12 -0
  84. package/bin/loanCredit/enums/WrittenOffRecoveryTypeEnum.d.ts +8 -0
  85. package/bin/loanCredit/enums/WrittenOffRecoveryTypeEnum.js +12 -0
  86. package/bin/loanCredit/index.d.ts +38 -0
  87. package/bin/loanCredit/index.js +39 -0
  88. package/bin/loanOfferings/dtos/requests/ComputeAmortizationScheduleRequest.d.ts +11 -0
  89. package/bin/loanOfferings/dtos/requests/ComputeAmortizationScheduleRequest.js +44 -0
  90. package/bin/loanOfferings/dtos/responses/AmortizationScheduleResponse.d.ts +12 -0
  91. package/bin/loanOfferings/dtos/responses/AmortizationScheduleResponse.js +2 -0
  92. package/bin/loanOfferings/dtos/responses/AmortizationScheduleRow.d.ts +10 -0
  93. package/bin/loanOfferings/dtos/responses/AmortizationScheduleRow.js +2 -0
  94. package/bin/loanOfferings/index.d.ts +3 -0
  95. package/bin/loanOfferings/index.js +3 -0
  96. package/bin/messagesConnector/dtos/SendMessageRequest.d.ts +2 -0
  97. package/bin/messagesConnector/dtos/SendMessageRequest.js +7 -0
  98. package/bin/messagesConnector/dtos/VerifyOtpRequest.d.ts +2 -0
  99. package/bin/messagesConnector/dtos/VerifyOtpRequest.js +7 -0
  100. package/bin/messagesConnector/enums/OtpMessagePurposeEnum.d.ts +9 -0
  101. package/bin/messagesConnector/enums/OtpMessagePurposeEnum.js +13 -0
  102. package/bin/messagesConnector/index.d.ts +1 -0
  103. package/bin/messagesConnector/index.js +1 -0
  104. package/package.json +1 -1
  105. package/src/collection/enums/DeregisterChargeStatus.ts +2 -0
  106. package/src/loanCredit/dtos/RestructureTerms.ts +23 -0
  107. package/src/loanCredit/dtos/WriteOffConfirmations.ts +17 -0
  108. package/src/loanCredit/dtos/requests/BackofficeAcceptRestructureRequest.ts +11 -0
  109. package/src/loanCredit/dtos/requests/BackofficeApplyAdvanceRequest.ts +18 -0
  110. package/src/loanCredit/dtos/requests/BackofficeApplyPrepaymentRequest.ts +10 -0
  111. package/src/loanCredit/dtos/requests/BackofficeApproveRestructureRequest.ts +19 -0
  112. package/src/loanCredit/dtos/requests/BackofficeCollectWrittenOffCreditRequest.ts +10 -0
  113. package/src/loanCredit/dtos/requests/BackofficeListPaymentsInReviewRequest.ts +19 -0
  114. package/src/loanCredit/dtos/requests/BackofficeListWriteOffCandidatesRequest.ts +19 -0
  115. package/src/loanCredit/dtos/requests/BackofficeProposeRestructureRequest.ts +18 -0
  116. package/src/loanCredit/dtos/requests/BackofficeRejectRestructureRequest.ts +11 -0
  117. package/src/loanCredit/dtos/requests/BackofficeResolvePaymentReviewRequest.ts +30 -0
  118. package/src/loanCredit/dtos/requests/BackofficeSettleCreditRequest.ts +11 -0
  119. package/src/loanCredit/dtos/requests/BackofficeWriteOffCreditRequest.ts +19 -0
  120. package/src/loanCredit/dtos/responses/LoanAdHocChargeRequested.ts +10 -0
  121. package/src/loanCredit/dtos/responses/LoanOtpDispatch.ts +5 -0
  122. package/src/loanCredit/dtos/responses/LoanPaymentReviewItem.ts +13 -0
  123. package/src/loanCredit/dtos/responses/LoanPaymentReviewListResponse.ts +8 -0
  124. package/src/loanCredit/dtos/responses/LoanPaymentReviewResolution.ts +12 -0
  125. package/src/loanCredit/dtos/responses/LoanPrepaymentQuote.ts +10 -0
  126. package/src/loanCredit/dtos/responses/LoanRestructure.ts +23 -0
  127. package/src/loanCredit/dtos/responses/LoanRestructureListResponse.ts +8 -0
  128. package/src/loanCredit/dtos/responses/LoanRestructurePreview.ts +16 -0
  129. package/src/loanCredit/dtos/responses/LoanRestructurePreviewInstallment.ts +11 -0
  130. package/src/loanCredit/dtos/responses/LoanSettlementQuote.ts +16 -0
  131. package/src/loanCredit/dtos/responses/LoanSettlementRequested.ts +12 -0
  132. package/src/loanCredit/dtos/responses/LoanWriteOffCandidateItem.ts +14 -0
  133. package/src/loanCredit/dtos/responses/LoanWriteOffCandidateListResponse.ts +8 -0
  134. package/src/loanCredit/dtos/responses/LoanWriteOffResult.ts +13 -0
  135. package/src/loanCredit/enums/ContractTypeEnum.ts +6 -4
  136. package/src/loanCredit/enums/LoanAdHocChargeKindEnum.ts +10 -0
  137. package/src/loanCredit/enums/LoanChargeKindEnum.ts +11 -0
  138. package/src/loanCredit/enums/LoanRestructureStatusEnum.ts +11 -0
  139. package/src/loanCredit/enums/LoanSettlementStatusEnum.ts +7 -0
  140. package/src/loanCredit/enums/PaymentReviewActionEnum.ts +9 -0
  141. package/src/loanCredit/enums/PaymentReviewReasonEnum.ts +16 -0
  142. package/src/loanCredit/enums/PaymentReviewResolutionEnum.ts +13 -0
  143. package/src/loanCredit/enums/RefundDestinationEnum.ts +8 -0
  144. package/src/loanCredit/enums/WrittenOffRecoveryTypeEnum.ts +8 -0
  145. package/src/loanCredit/index.ts +40 -0
  146. package/src/loanOfferings/dtos/requests/ComputeAmortizationScheduleRequest.ts +31 -0
  147. package/src/loanOfferings/dtos/responses/AmortizationScheduleResponse.ts +13 -0
  148. package/src/loanOfferings/dtos/responses/AmortizationScheduleRow.ts +10 -0
  149. package/src/loanOfferings/index.ts +3 -0
  150. package/src/messagesConnector/dtos/SendMessageRequest.ts +2 -0
  151. package/src/messagesConnector/dtos/VerifyOtpRequest.ts +3 -1
  152. package/src/messagesConnector/enums/OtpMessagePurposeEnum.ts +9 -0
  153. package/src/messagesConnector/index.ts +1 -0
@@ -0,0 +1,17 @@
1
+ import { Expose } from 'class-transformer';
2
+ import { IsBoolean, IsOptional } from 'class-validator';
3
+
4
+ /** Las dos casillas de la baja contable; el lambda exige las dos en true. */
5
+ export class WriteOffConfirmations {
6
+ /** Se agotaron los recursos de recuperación. */
7
+ @Expose()
8
+ @IsOptional()
9
+ @IsBoolean()
10
+ recoveryResourcesExhausted?: boolean;
11
+
12
+ /** El crédito cumple los días de mora requeridos. */
13
+ @Expose()
14
+ @IsOptional()
15
+ @IsBoolean()
16
+ overdueDaysMet?: boolean;
17
+ }
@@ -0,0 +1,11 @@
1
+ import { Expose } from 'class-transformer';
2
+ import { IsString, Matches } from 'class-validator';
3
+
4
+ /** Body de `POST /backoffice/credits/:creditId/restructures/:restructureId/accept` (loan-credit-business). */
5
+ export class BackofficeAcceptRestructureRequest {
6
+ /** OTP de 4 dígitos con propósito RESTRUCTURE. */
7
+ @Expose()
8
+ @IsString()
9
+ @Matches(/^\d{4}$/)
10
+ otpCode!: string;
11
+ }
@@ -0,0 +1,18 @@
1
+ import { Expose } from 'class-transformer';
2
+ import { IsInt, IsOptional, IsString, Matches, Min } from 'class-validator';
3
+
4
+ /** Body de `POST /backoffice/credits/:creditId/advances` (loan-credit-business). */
5
+ export class BackofficeApplyAdvanceRequest {
6
+ /** Cuántas cuotas siguientes se adelantan. */
7
+ @Expose()
8
+ @IsInt()
9
+ @Min(1)
10
+ installmentCount!: number;
11
+
12
+ /** OTP con propósito ADVANCE que firma la autorización; sin él, un adelanto mayor al pago del periodo responde 422. */
13
+ @Expose()
14
+ @IsOptional()
15
+ @IsString()
16
+ @Matches(/^\d{4}$/)
17
+ otpCode?: string;
18
+ }
@@ -0,0 +1,10 @@
1
+ import { Expose } from 'class-transformer';
2
+ import { IsInt, Min } from 'class-validator';
3
+
4
+ /** Body de `POST /backoffice/credits/:creditId/prepayments` (loan-credit-business). */
5
+ export class BackofficeApplyPrepaymentRequest {
6
+ @Expose()
7
+ @IsInt()
8
+ @Min(1)
9
+ amountCents!: number;
10
+ }
@@ -0,0 +1,19 @@
1
+ import { Expose, Type } from 'class-transformer';
2
+ import { IsOptional, IsString, MinLength, ValidateNested } from 'class-validator';
3
+ import { RestructureTerms } from '../RestructureTerms';
4
+
5
+ /** Body de `POST /backoffice/credits/:creditId/restructures/:restructureId/approve` (loan-credit-business). */
6
+ export class BackofficeApproveRestructureRequest {
7
+ /** Motivo del admin. Va a la auditoría y no se loguea. */
8
+ @Expose()
9
+ @IsString()
10
+ @MinLength(1)
11
+ reason!: string;
12
+
13
+ /** Términos ajustados; ausente se aprueba como se propuso. */
14
+ @Expose()
15
+ @IsOptional()
16
+ @ValidateNested()
17
+ @Type(() => RestructureTerms)
18
+ terms?: RestructureTerms;
19
+ }
@@ -0,0 +1,10 @@
1
+ import { Expose } from 'class-transformer';
2
+ import { IsEnum } from 'class-validator';
3
+ import { WrittenOffRecoveryTypeEnum } from '../../enums/WrittenOffRecoveryTypeEnum';
4
+
5
+ /** Body de `POST /backoffice/credits/:creditId/recovery-collection` (loan-credit-business). */
6
+ export class BackofficeCollectWrittenOffCreditRequest {
7
+ @Expose()
8
+ @IsEnum(WrittenOffRecoveryTypeEnum)
9
+ recoveryType!: WrittenOffRecoveryTypeEnum;
10
+ }
@@ -0,0 +1,19 @@
1
+ import { Expose, Type } from 'class-transformer';
2
+ import { IsInt, IsOptional, IsString, Max, Min } from 'class-validator';
3
+
4
+ /** Query de `GET /backoffice/payments/review` (loan-credit-business). */
5
+ export class BackofficeListPaymentsInReviewRequest {
6
+ @Expose()
7
+ @IsOptional()
8
+ @Type(() => Number)
9
+ @IsInt()
10
+ @Min(1)
11
+ @Max(100)
12
+ limit?: number;
13
+
14
+ /** Cursor opaco de la página anterior. */
15
+ @Expose()
16
+ @IsOptional()
17
+ @IsString()
18
+ nextToken?: string;
19
+ }
@@ -0,0 +1,19 @@
1
+ import { Expose, Type } from 'class-transformer';
2
+ import { IsInt, IsOptional, IsString, Max, Min } from 'class-validator';
3
+
4
+ /** Query de `GET /backoffice/credits/write-off-candidates` (loan-credit-business). */
5
+ export class BackofficeListWriteOffCandidatesRequest {
6
+ @Expose()
7
+ @IsOptional()
8
+ @Type(() => Number)
9
+ @IsInt()
10
+ @Min(1)
11
+ @Max(100)
12
+ limit?: number;
13
+
14
+ /** Cursor opaco de la página anterior. */
15
+ @Expose()
16
+ @IsOptional()
17
+ @IsString()
18
+ nextToken?: string;
19
+ }
@@ -0,0 +1,18 @@
1
+ import { Expose, Type } from 'class-transformer';
2
+ import { IsDefined, IsString, MinLength, ValidateNested } from 'class-validator';
3
+ import { RestructureTerms } from '../RestructureTerms';
4
+
5
+ /** Body de `POST /backoffice/credits/:creditId/restructures` (loan-credit-business). */
6
+ export class BackofficeProposeRestructureRequest {
7
+ /** Justificación del cobrador. Va a la auditoría y no se loguea. */
8
+ @Expose()
9
+ @IsString()
10
+ @MinLength(1)
11
+ justification!: string;
12
+
13
+ @Expose()
14
+ @IsDefined()
15
+ @ValidateNested()
16
+ @Type(() => RestructureTerms)
17
+ terms!: RestructureTerms;
18
+ }
@@ -0,0 +1,11 @@
1
+ import { Expose } from 'class-transformer';
2
+ import { IsString, MinLength } from 'class-validator';
3
+
4
+ /** Body de `POST /backoffice/credits/:creditId/restructures/:restructureId/reject` (loan-credit-business). */
5
+ export class BackofficeRejectRestructureRequest {
6
+ /** Motivo del rechazo. Va a la auditoría y no se loguea. */
7
+ @Expose()
8
+ @IsString()
9
+ @MinLength(1)
10
+ reason!: string;
11
+ }
@@ -0,0 +1,30 @@
1
+ import { Expose } from 'class-transformer';
2
+ import { IsBoolean, IsEnum, IsOptional, IsString, Matches } from 'class-validator';
3
+ import { PaymentReviewActionEnum } from '../../enums/PaymentReviewActionEnum';
4
+ import { RefundDestinationEnum } from '../../enums/RefundDestinationEnum';
5
+
6
+ /** Body de `POST /backoffice/credits/:creditId/payments/:paymentId/review-resolution` (loan-credit-business). */
7
+ export class BackofficeResolvePaymentReviewRequest {
8
+ @Expose()
9
+ @IsEnum(PaymentReviewActionEnum)
10
+ action!: PaymentReviewActionEnum;
11
+
12
+ /** Obligatorio con REFUND. */
13
+ @Expose()
14
+ @IsOptional()
15
+ @IsEnum(RefundDestinationEnum)
16
+ refundDestination?: RefundDestinationEnum;
17
+
18
+ // pii_sensitive: no se persiste; en logs sale enmascarada.
19
+ @Expose()
20
+ @IsOptional()
21
+ @IsString()
22
+ @Matches(/^\d{18}$/)
23
+ clabe?: string;
24
+
25
+ /** Obligatorio con REFUND a PCF_CLABE: el cliente confirmó su CLABE PCF. */
26
+ @Expose()
27
+ @IsOptional()
28
+ @IsBoolean()
29
+ customerConfirmedPcfClabe?: boolean;
30
+ }
@@ -0,0 +1,11 @@
1
+ import { Expose } from 'class-transformer';
2
+ import { IsInt, Min } from 'class-validator';
3
+
4
+ /** Body de `POST /backoffice/credits/:creditId/settlement` (loan-credit-business). */
5
+ export class BackofficeSettleCreditRequest {
6
+ /** Monto a liquidar; menor al calculado responde 422 SETTLEMENT_AMOUNT_MISMATCH. */
7
+ @Expose()
8
+ @IsInt()
9
+ @Min(1)
10
+ amountCents!: number;
11
+ }
@@ -0,0 +1,19 @@
1
+ import { Expose, Type } from 'class-transformer';
2
+ import { IsOptional, IsString, MinLength, ValidateNested } from 'class-validator';
3
+ import { WriteOffConfirmations } from '../WriteOffConfirmations';
4
+
5
+ /** Body de `POST /backoffice/credits/:creditId/write-off`. Los faltantes los responde el lambda con su code. */
6
+ export class BackofficeWriteOffCreditRequest {
7
+ /** Motivo de la baja. Va a la auditoría del crédito y no se loguea. */
8
+ @Expose()
9
+ @IsOptional()
10
+ @IsString()
11
+ @MinLength(1)
12
+ reason?: string;
13
+
14
+ @Expose()
15
+ @IsOptional()
16
+ @ValidateNested()
17
+ @Type(() => WriteOffConfirmations)
18
+ confirmations?: WriteOffConfirmations;
19
+ }
@@ -0,0 +1,10 @@
1
+ import { LoanAdHocChargeKindEnum } from '../../enums/LoanAdHocChargeKindEnum';
2
+
3
+ /** Response 202 de recovery-collection, prepayments y advances. El 202 no mueve el libro; lo mueve el apply-result. */
4
+ export interface LoanAdHocChargeRequested {
5
+ creditId: string;
6
+ chargeKind: LoanAdHocChargeKindEnum;
7
+ /** `<creditId>#<chargeKind>#<n>`. */
8
+ chargeId: string;
9
+ amountCents: number;
10
+ }
@@ -0,0 +1,5 @@
1
+ /** Response de los envíos de OTP de reestructura y de adelanto. */
2
+ export interface LoanOtpDispatch {
3
+ creditId: string;
4
+ otpSent: boolean;
5
+ }
@@ -0,0 +1,13 @@
1
+ import { LoanChargeKindEnum } from '../../enums/LoanChargeKindEnum';
2
+ import { PaymentReviewReasonEnum } from '../../enums/PaymentReviewReasonEnum';
3
+
4
+ /** Un pago con revisión pendiente. */
5
+ export interface LoanPaymentReviewItem {
6
+ paymentId: string;
7
+ creditId: string;
8
+ chargeKind: LoanChargeKindEnum;
9
+ /** Lo que quedó en revisión de ese pago. */
10
+ reviewAmountCents: number;
11
+ reviewReasons: PaymentReviewReasonEnum[];
12
+ reviewPendingAt: string;
13
+ }
@@ -0,0 +1,8 @@
1
+ import { LoanPaymentReviewItem } from './LoanPaymentReviewItem';
2
+
3
+ /** Response de `GET /backoffice/payments/review`. */
4
+ export interface LoanPaymentReviewListResponse {
5
+ items: LoanPaymentReviewItem[];
6
+ /** Cursor de la página siguiente; su ausencia marca el fin de la lista. */
7
+ nextToken?: string;
8
+ }
@@ -0,0 +1,12 @@
1
+ import { PaymentReviewResolutionEnum } from '../../enums/PaymentReviewResolutionEnum';
2
+
3
+ /** Response de `POST /backoffice/credits/:creditId/payments/:paymentId/review-resolution`. */
4
+ export interface LoanPaymentReviewResolution {
5
+ paymentId: string;
6
+ creditId: string;
7
+ reviewResolution: PaymentReviewResolutionEnum;
8
+ /** `<creditId>#<paymentId>#<intento>`, sin CLABE. Sólo con REFUND. */
9
+ refundKey?: string;
10
+ resolvedBy: string;
11
+ resolvedAt: string;
12
+ }
@@ -0,0 +1,10 @@
1
+ /** Response de `GET /backoffice/credits/:creditId/prepayment-quote`. */
2
+ export interface LoanPrepaymentQuote {
3
+ creditId: string;
4
+ /** Saldo insoluto que se le informa al cliente. */
5
+ outstandingCapitalCents: number;
6
+ /** Pago del periodo: el mínimo del abono. */
7
+ periodPaymentCents: number;
8
+ /** Monto de liquidación anticipada: el techo del abono. */
9
+ settlementAmountCents: number;
10
+ }
@@ -0,0 +1,23 @@
1
+ import { LoanRestructureStatusEnum } from '../../enums/LoanRestructureStatusEnum';
2
+ import { RestructureTerms } from '../RestructureTerms';
3
+
4
+ /** Response de propose, approve, reject y accept de una reestructura. */
5
+ export interface LoanRestructure {
6
+ restructureId: string;
7
+ creditId: string;
8
+ restructureStatus: LoanRestructureStatusEnum;
9
+ justification?: string;
10
+ proposedTerms: RestructureTerms;
11
+ proposedBy: string;
12
+ proposedAt: string;
13
+ originalOutstandingCapitalCents: number;
14
+ originalRemainingInstallments: number;
15
+ /** Términos que aprobó el admin; ausente mientras siga PROPOSED. */
16
+ finalTerms?: RestructureTerms;
17
+ resolvedBy?: string;
18
+ resolvedAt?: string;
19
+ resolutionReason?: string;
20
+ acceptedAt?: string;
21
+ /** Versión del plan que nació con la reestructura; ausente antes de aceptarla. */
22
+ planVersion?: number;
23
+ }
@@ -0,0 +1,8 @@
1
+ import { LoanRestructure } from './LoanRestructure';
2
+
3
+ /** Response de `GET /backoffice/credits/:creditId/restructures`. */
4
+ export interface LoanRestructureListResponse {
5
+ items: LoanRestructure[];
6
+ /** Cupo usado: cuenta sólo reestructuras aceptadas. */
7
+ usedRestructures: number;
8
+ }
@@ -0,0 +1,16 @@
1
+ import { RestructureTerms } from '../RestructureTerms';
2
+ import { LoanRestructurePreviewInstallment } from './LoanRestructurePreviewInstallment';
3
+
4
+ /** Response de `GET /backoffice/credits/:creditId/restructures/:restructureId/preview`. */
5
+ export interface LoanRestructurePreview {
6
+ restructureId: string;
7
+ creditId: string;
8
+ terms: RestructureTerms;
9
+ /** Capital insoluto que se amortiza. */
10
+ outstandingCapitalCents: number;
11
+ /** Interés vencido no pagado, repartido sin interés en las cuotas nuevas. */
12
+ consolidatedOverdueInterestCents: number;
13
+ /** IVA vencido no pagado, repartido sin interés en las cuotas nuevas. */
14
+ consolidatedOverdueIvaCents: number;
15
+ installments: LoanRestructurePreviewInstallment[];
16
+ }
@@ -0,0 +1,11 @@
1
+ /** Una cuota del plan nuevo de la reestructura. */
2
+ export interface LoanRestructurePreviewInstallment {
3
+ /** Sigue la numeración después de la última cuota del plan vigente. */
4
+ installmentNumber: number;
5
+ dueDate: string;
6
+ capitalCents: number;
7
+ /** Interés de la cuota, incluida la parte consolidada del interés vencido. */
8
+ interestCents: number;
9
+ ivaCents: number;
10
+ totalCents: number;
11
+ }
@@ -0,0 +1,16 @@
1
+ /** Response de `GET /backoffice/credits/:creditId/settlement-quote`. Cada componente va redondeado al centavo y el total es su suma. */
2
+ export interface LoanSettlementQuote {
3
+ creditId: string;
4
+ /** Total (capital + interés + IVA) de las cuotas vencidas completas. */
5
+ overdueInstallmentsCents: number;
6
+ /** Capital insoluto de las cuotas que todavía no vencen. */
7
+ outstandingCapitalCents: number;
8
+ /** Interés del periodo en curso × días transcurridos ÷ días del periodo. */
9
+ currentPeriodInterestCents: number;
10
+ /** IVA 16% del interés prorrateado. */
11
+ currentPeriodInterestIvaCents: number;
12
+ elapsedDays: number;
13
+ periodDays: number;
14
+ settlementAmountCents: number;
15
+ quotedAt: string;
16
+ }
@@ -0,0 +1,12 @@
1
+ import { LoanSettlementStatusEnum } from '../../enums/LoanSettlementStatusEnum';
2
+
3
+ /** Response 202 de `POST /backoffice/credits/:creditId/settlement`. */
4
+ export interface LoanSettlementRequested {
5
+ creditId: string;
6
+ settlementStatus: LoanSettlementStatusEnum;
7
+ /** `<creditId>#SETTLEMENT#<n>`: el cargo ad hoc pedido al motor. */
8
+ chargeId: string;
9
+ settlementAmountCents: number;
10
+ /** Neto que se cobra: el monto menos los pagos ya asentados en el libro. */
11
+ chargeAmountCents: number;
12
+ }
@@ -0,0 +1,14 @@
1
+ import { LoanCreditStatusEnum } from '../../enums/LoanCreditStatusEnum';
2
+
3
+ /** Un crédito candidato a baja contable. */
4
+ export interface LoanWriteOffCandidateItem {
5
+ creditId: string;
6
+ borrowerId: string;
7
+ status: LoanCreditStatusEnum;
8
+ overdueDays: number;
9
+ overdueInstallments: number;
10
+ overdueAmountCents: number;
11
+ outstandingBalanceCents: number;
12
+ /** Instante en que el crón lo marcó candidato. */
13
+ writeOffCandidateAt: string;
14
+ }
@@ -0,0 +1,8 @@
1
+ import { LoanWriteOffCandidateItem } from './LoanWriteOffCandidateItem';
2
+
3
+ /** Response de `GET /backoffice/credits/write-off-candidates`. */
4
+ export interface LoanWriteOffCandidateListResponse {
5
+ items: LoanWriteOffCandidateItem[];
6
+ /** Cursor de la página siguiente; su ausencia marca el fin de la lista. */
7
+ nextToken?: string;
8
+ }
@@ -0,0 +1,13 @@
1
+ import { LoanCreditStatusEnum } from '../../enums/LoanCreditStatusEnum';
2
+
3
+ /** Response de `POST /backoffice/credits/:creditId/write-off`. */
4
+ export interface LoanWriteOffResult {
5
+ creditId: string;
6
+ previousStatus: LoanCreditStatusEnum;
7
+ status: LoanCreditStatusEnum;
8
+ overdueDays: number;
9
+ writtenOffAmountCents: number;
10
+ writtenOffAt: string;
11
+ /** Quién aprobó la baja. */
12
+ writtenOffBy: string;
13
+ }
@@ -1,12 +1,14 @@
1
1
  /**
2
- * Tipo de documento del contrato de crédito (M2 §4.3 / C4 — 3 documentos):
3
- * `CREDIT` = contrato de crédito celular (RECA 16145-439-038506/04-01076-0525) ·
4
- * `PROMISSORY_NOTE` = pagaré (garantiza el crédito; mismo monto/tasa/plazo) ·
5
- * `SIC_AUTHORIZATION` = autorización de consulta/reporte a Círculo de Crédito (Art. 28 LRSIC).
2
+ * Tipo de documento del crédito: los tres de la originación y los que emite su ciclo de vida.
6
3
  * @enum {string}
7
4
  */
8
5
  export enum ContractTypeEnum {
9
6
  CREDIT = 'CREDIT',
10
7
  PROMISSORY_NOTE = 'PROMISSORY_NOTE',
11
8
  SIC_AUTHORIZATION = 'SIC_AUTHORIZATION',
9
+ RESTRUCTURE_ADDENDUM = 'RESTRUCTURE_ADDENDUM',
10
+ ADVANCE_AUTHORIZATION = 'ADVANCE_AUTHORIZATION',
11
+ SETTLEMENT_CERTIFICATE = 'SETTLEMENT_CERTIFICATE',
12
+ PAYMENT_RECEIPT = 'PAYMENT_RECEIPT',
13
+ ACCOUNT_STATEMENT = 'ACCOUNT_STATEMENT',
12
14
  }
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Tipo de cobro fuera del calendario. Hay un solo cargo pendiente por tipo.
3
+ * @enum {string}
4
+ */
5
+ export enum LoanAdHocChargeKindEnum {
6
+ SETTLEMENT = 'SETTLEMENT',
7
+ RECOVERY = 'RECOVERY',
8
+ PREPAYMENT = 'PREPAYMENT',
9
+ ADVANCE = 'ADVANCE',
10
+ }
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Tipo de cargo que originó el pago.
3
+ * @enum {string}
4
+ */
5
+ export enum LoanChargeKindEnum {
6
+ INSTALLMENT = 'INSTALLMENT',
7
+ SETTLEMENT = 'SETTLEMENT',
8
+ RECOVERY = 'RECOVERY',
9
+ PREPAYMENT = 'PREPAYMENT',
10
+ ADVANCE = 'ADVANCE',
11
+ }
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Estado de la reestructura. `PENDING_REGISTRATION`: el plan nuevo está escrito y falta confirmar el alta de sus cargos.
3
+ * @enum {string}
4
+ */
5
+ export enum LoanRestructureStatusEnum {
6
+ PROPOSED = 'PROPOSED',
7
+ APPROVED = 'APPROVED',
8
+ REJECTED = 'REJECTED',
9
+ PENDING_REGISTRATION = 'PENDING_REGISTRATION',
10
+ EXECUTED = 'EXECUTED',
11
+ }
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Estado de la liquidación anticipada del crédito.
3
+ * @enum {string}
4
+ */
5
+ export enum LoanSettlementStatusEnum {
6
+ PENDING = 'PENDING',
7
+ }
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Salida que el admin le da al dinero en revisión.
3
+ * @enum {string}
4
+ */
5
+ export enum PaymentReviewActionEnum {
6
+ APPLY = 'APPLY',
7
+ REFUND = 'REFUND',
8
+ RECONCILE = 'RECONCILE',
9
+ }
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Por qué el pago quedó en revisión.
3
+ * @enum {string}
4
+ */
5
+ export enum PaymentReviewReasonEnum {
6
+ /** Sobrante del pago. */
7
+ OVERPAYMENT = 'OVERPAYMENT',
8
+ /** La cuota ya estaba cerrada. */
9
+ INSTALLMENT_CLOSED = 'INSTALLMENT_CLOSED',
10
+ /** El crédito ya no se cobra. */
11
+ CREDIT_NOT_COLLECTIBLE = 'CREDIT_NOT_COLLECTIBLE',
12
+ /** Cuota con abonos previos sin desglose. */
13
+ LEGACY_INSTALLMENT_WITH_PAYMENT = 'LEGACY_INSTALLMENT_WITH_PAYMENT',
14
+ /** Lo retenido sin capturar. */
15
+ UNCAPTURED_HOLD = 'UNCAPTURED_HOLD',
16
+ }
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Desenlace de la resolución de un pago en revisión.
3
+ * @enum {string}
4
+ */
5
+ export enum PaymentReviewResolutionEnum {
6
+ APPLIED = 'APPLIED',
7
+ REFUNDED = 'REFUNDED',
8
+ /** Timeout o pendiente del proveedor: no se abre otro intento hasta confirmar si el dinero salió. */
9
+ REFUND_PENDING = 'REFUND_PENDING',
10
+ /** El proveedor rechazó la devolución: el pago vuelve a la bandeja con un intento más. */
11
+ REFUND_REJECTED = 'REFUND_REJECTED',
12
+ RECONCILED = 'RECONCILED',
13
+ }
@@ -0,0 +1,8 @@
1
+ /**
2
+ * `CUSTOMER_ACCOUNT` es la cuenta que informa el cliente; `PCF_CLABE` es su CLABE PCF, sólo si él la confirma.
3
+ * @enum {string}
4
+ */
5
+ export enum RefundDestinationEnum {
6
+ CUSTOMER_ACCOUNT = 'CUSTOMER_ACCOUNT',
7
+ PCF_CLABE = 'PCF_CLABE',
8
+ }
@@ -0,0 +1,8 @@
1
+ /**
2
+ * `OVERDUE` cobra lo vencido; `SETTLEMENT` cobra el monto de liquidación con interés devengado y cierra el crédito.
3
+ * @enum {string}
4
+ */
5
+ export enum WrittenOffRecoveryTypeEnum {
6
+ OVERDUE = 'OVERDUE',
7
+ SETTLEMENT = 'SETTLEMENT',
8
+ }
@@ -108,3 +108,43 @@ export * from './dtos/MessagingCandidateItem';
108
108
  export * from './dtos/requests/ListMessagingCandidatesRequest';
109
109
  export * from './dtos/responses/ListMessagingCandidatesResponse';
110
110
 
111
+
112
+ // Ciclo de vida del crédito — endpoints backoffice de liquidación, baja, reestructura, abono y bandeja
113
+ export * from './enums/LoanSettlementStatusEnum';
114
+ export * from './enums/LoanAdHocChargeKindEnum';
115
+ export * from './enums/WrittenOffRecoveryTypeEnum';
116
+ export * from './enums/LoanRestructureStatusEnum';
117
+ export * from './enums/LoanChargeKindEnum';
118
+ export * from './enums/PaymentReviewReasonEnum';
119
+ export * from './enums/PaymentReviewActionEnum';
120
+ export * from './enums/RefundDestinationEnum';
121
+ export * from './enums/PaymentReviewResolutionEnum';
122
+ export * from './dtos/RestructureTerms';
123
+ export * from './dtos/WriteOffConfirmations';
124
+ export * from './dtos/requests/BackofficeSettleCreditRequest';
125
+ export * from './dtos/requests/BackofficeListWriteOffCandidatesRequest';
126
+ export * from './dtos/requests/BackofficeWriteOffCreditRequest';
127
+ export * from './dtos/requests/BackofficeCollectWrittenOffCreditRequest';
128
+ export * from './dtos/requests/BackofficeProposeRestructureRequest';
129
+ export * from './dtos/requests/BackofficeApproveRestructureRequest';
130
+ export * from './dtos/requests/BackofficeRejectRestructureRequest';
131
+ export * from './dtos/requests/BackofficeAcceptRestructureRequest';
132
+ export * from './dtos/requests/BackofficeApplyPrepaymentRequest';
133
+ export * from './dtos/requests/BackofficeApplyAdvanceRequest';
134
+ export * from './dtos/requests/BackofficeListPaymentsInReviewRequest';
135
+ export * from './dtos/requests/BackofficeResolvePaymentReviewRequest';
136
+ export * from './dtos/responses/LoanSettlementQuote';
137
+ export * from './dtos/responses/LoanSettlementRequested';
138
+ export * from './dtos/responses/LoanAdHocChargeRequested';
139
+ export * from './dtos/responses/LoanWriteOffCandidateItem';
140
+ export * from './dtos/responses/LoanWriteOffCandidateListResponse';
141
+ export * from './dtos/responses/LoanWriteOffResult';
142
+ export * from './dtos/responses/LoanRestructure';
143
+ export * from './dtos/responses/LoanRestructureListResponse';
144
+ export * from './dtos/responses/LoanRestructurePreviewInstallment';
145
+ export * from './dtos/responses/LoanRestructurePreview';
146
+ export * from './dtos/responses/LoanOtpDispatch';
147
+ export * from './dtos/responses/LoanPrepaymentQuote';
148
+ export * from './dtos/responses/LoanPaymentReviewItem';
149
+ export * from './dtos/responses/LoanPaymentReviewListResponse';
150
+ export * from './dtos/responses/LoanPaymentReviewResolution';
@@ -0,0 +1,31 @@
1
+ import { Expose } from 'class-transformer';
2
+ import { IsInt, IsNumber, Max, Min } from 'class-validator';
3
+
4
+ /** Body de `POST /private/amortization/schedule` (loan-offerings-business). Tabla francesa semanal sin fechas. */
5
+ export class ComputeAmortizationScheduleRequest {
6
+ /** Saldo a amortizar en centavos. */
7
+ @Expose()
8
+ @IsInt()
9
+ @Min(1)
10
+ financedAmountCents!: number;
11
+
12
+ /** TNA en decimal (`2.30` = 230%). */
13
+ @Expose()
14
+ @IsNumber()
15
+ @Min(0)
16
+ tnaAnnual!: number;
17
+
18
+ /** Número de cuotas semanales. */
19
+ @Expose()
20
+ @IsInt()
21
+ @Min(1)
22
+ @Max(104)
23
+ termWeeks!: number;
24
+
25
+ /** IVA sobre interés en decimal (`0.16`). */
26
+ @Expose()
27
+ @IsNumber()
28
+ @Min(0)
29
+ @Max(1)
30
+ ivaOnInterest!: number;
31
+ }