@fiado/type-kit 3.627.0 → 3.629.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 (212) hide show
  1. package/_test_/unit/collection/collectionCallbackRequests.test.ts +96 -0
  2. package/_test_/unit/gsfConnector/gsfMessages.test.ts +20 -0
  3. package/_test_/unit/loanCollectorAssignment/collectorAssignmentRequests.test.ts +65 -0
  4. package/_test_/unit/loanConfig/parameterWriteRequests.test.ts +62 -0
  5. package/_test_/unit/loanCredit/dtos/loanCreditInputLimits.test.ts +168 -0
  6. package/_test_/unit/loanCredit/signLoanCreditRequest.test.ts +61 -2
  7. package/_test_/unit/loanOfferings/offeringsInputRules.test.ts +254 -0
  8. package/_test_/unit/loanOfferings/promotionRequests.test.ts +1 -1
  9. package/_test_/unit/loanRetailAudit/auditInputLimits.test.ts +114 -0
  10. package/_test_/unit/loanScoring/evaluateSciRequest.test.ts +49 -0
  11. package/bin/collection/constants/CollectionResultLimits.d.ts +16 -0
  12. package/bin/collection/constants/CollectionResultLimits.js +19 -0
  13. package/bin/collection/dtos/ApplyCollectionResultRequest.d.ts +5 -0
  14. package/bin/collection/dtos/ApplyCollectionResultRequest.js +22 -0
  15. package/bin/collection/dtos/ResolvePendingChargesRequest.d.ts +2 -0
  16. package/bin/collection/dtos/ResolvePendingChargesRequest.js +9 -0
  17. package/bin/collection/index.d.ts +2 -0
  18. package/bin/collection/index.js +3 -0
  19. package/bin/collection/validators/IsCentPrecision.d.ts +11 -0
  20. package/bin/collection/validators/IsCentPrecision.js +32 -0
  21. package/bin/gsfConnector/dtos/GsfCreditTerms.d.ts +7 -2
  22. package/bin/gsfConnector/dtos/GsfCreditTerms.js +9 -0
  23. package/bin/loanCollectorAssignment/constants/CollectorAssignmentLimits.d.ts +12 -0
  24. package/bin/loanCollectorAssignment/constants/CollectorAssignmentLimits.js +15 -0
  25. package/bin/loanCollectorAssignment/dtos/requests/AutoAssignRequest.d.ts +1 -0
  26. package/bin/loanCollectorAssignment/dtos/requests/AutoAssignRequest.js +8 -0
  27. package/bin/loanCollectorAssignment/dtos/requests/ListCollectorAssignmentsRequest.d.ts +14 -0
  28. package/bin/loanCollectorAssignment/dtos/requests/ListCollectorAssignmentsRequest.js +62 -0
  29. package/bin/loanCollectorAssignment/dtos/requests/ReassignRequest.d.ts +1 -0
  30. package/bin/loanCollectorAssignment/dtos/requests/ReassignRequest.js +4 -0
  31. package/bin/loanCollectorAssignment/dtos/requests/RedistributeRequest.d.ts +1 -0
  32. package/bin/loanCollectorAssignment/dtos/requests/RedistributeRequest.js +4 -0
  33. package/bin/loanCollectorAssignment/dtos/responses/ListCollectorAssignmentsResponse.d.ts +9 -0
  34. package/bin/loanCollectorAssignment/dtos/responses/ListCollectorAssignmentsResponse.js +2 -0
  35. package/bin/loanCollectorAssignment/index.d.ts +3 -0
  36. package/bin/loanCollectorAssignment/index.js +4 -0
  37. package/bin/loanConfig/constants/ParameterRequestLimits.d.ts +8 -0
  38. package/bin/loanConfig/constants/ParameterRequestLimits.js +11 -0
  39. package/bin/loanConfig/dtos/requests/BulkGetParametersRequest.d.ts +1 -1
  40. package/bin/loanConfig/dtos/requests/BulkGetParametersRequest.js +3 -1
  41. package/bin/loanConfig/dtos/requests/BulkUpdateParametersRequest.d.ts +5 -2
  42. package/bin/loanConfig/dtos/requests/BulkUpdateParametersRequest.js +8 -4
  43. package/bin/loanConfig/dtos/requests/UpdateParameterRequest.d.ts +6 -3
  44. package/bin/loanConfig/dtos/requests/UpdateParameterRequest.js +10 -5
  45. package/bin/loanConfig/index.d.ts +1 -0
  46. package/bin/loanConfig/index.js +1 -0
  47. package/bin/loanCredit/constants/LoanInputLimits.d.ts +24 -0
  48. package/bin/loanCredit/constants/LoanInputLimits.js +27 -0
  49. package/bin/loanCredit/dtos/LoanBeneficiary.d.ts +1 -0
  50. package/bin/loanCredit/dtos/LoanBeneficiary.js +9 -0
  51. package/bin/loanCredit/dtos/LoanContractDetails.d.ts +18 -1
  52. package/bin/loanCredit/dtos/LoanContractDetails.js +2 -1
  53. package/bin/loanCredit/dtos/LoanDeviceNotifyItem.d.ts +5 -0
  54. package/bin/loanCredit/dtos/LoanDeviceNotifyItem.js +12 -3
  55. package/bin/loanCredit/dtos/RestructureTerms.d.ts +1 -1
  56. package/bin/loanCredit/dtos/RestructureTerms.js +2 -0
  57. package/bin/loanCredit/dtos/SignatureContext.d.ts +5 -1
  58. package/bin/loanCredit/dtos/requests/ActivationCheckRequest.d.ts +1 -1
  59. package/bin/loanCredit/dtos/requests/ActivationCheckRequest.js +4 -0
  60. package/bin/loanCredit/dtos/requests/BackofficeApproveRestructureRequest.js +2 -0
  61. package/bin/loanCredit/dtos/requests/BackofficeProposeRestructureRequest.js +2 -0
  62. package/bin/loanCredit/dtos/requests/BackofficeRejectRestructureRequest.js +2 -0
  63. package/bin/loanCredit/dtos/requests/BackofficeWriteOffCreditRequest.js +2 -0
  64. package/bin/loanCredit/dtos/requests/CreateCustomerPaymentRequest.d.ts +5 -0
  65. package/bin/loanCredit/dtos/requests/CreateCustomerPaymentRequest.js +6 -0
  66. package/bin/loanCredit/dtos/requests/CreateSellerPaymentRequest.d.ts +5 -0
  67. package/bin/loanCredit/dtos/requests/CreateSellerPaymentRequest.js +6 -0
  68. package/bin/loanCredit/dtos/requests/OriginateLoanCreditRequest.d.ts +1 -0
  69. package/bin/loanCredit/dtos/requests/OriginateLoanCreditRequest.js +7 -1
  70. package/bin/loanCredit/dtos/requests/SegmentFactsBatchRequest.d.ts +1 -1
  71. package/bin/loanCredit/dtos/requests/SegmentFactsBatchRequest.js +3 -1
  72. package/bin/loanCredit/dtos/requests/SignLoanCreditRequest.d.ts +2 -0
  73. package/bin/loanCredit/dtos/requests/SignLoanCreditRequest.js +3 -0
  74. package/bin/loanCredit/dtos/requests/UpsertLoanBorrowerRequest.d.ts +1 -0
  75. package/bin/loanCredit/dtos/requests/UpsertLoanBorrowerRequest.js +2 -0
  76. package/bin/loanCredit/index.d.ts +2 -0
  77. package/bin/loanCredit/index.js +2 -0
  78. package/bin/loanCredit/validators/IsContractBirthDate.d.ts +11 -0
  79. package/bin/loanCredit/validators/IsContractBirthDate.js +41 -0
  80. package/bin/loanOfferings/constants/offeringsInputLimits.d.ts +35 -0
  81. package/bin/loanOfferings/constants/offeringsInputLimits.js +38 -0
  82. package/bin/loanOfferings/dtos/requests/ChangeCreditPlanStatusRequest.d.ts +2 -0
  83. package/bin/loanOfferings/dtos/requests/ChangeCreditPlanStatusRequest.js +8 -0
  84. package/bin/loanOfferings/dtos/requests/ChangePromotionStatusRequest.js +2 -0
  85. package/bin/loanOfferings/dtos/requests/ComputeAmortizationScheduleRequest.d.ts +4 -1
  86. package/bin/loanOfferings/dtos/requests/ComputeAmortizationScheduleRequest.js +3 -1
  87. package/bin/loanOfferings/dtos/requests/ConsumePromotionRequest.d.ts +1 -0
  88. package/bin/loanOfferings/dtos/requests/ConsumePromotionRequest.js +3 -0
  89. package/bin/loanOfferings/dtos/requests/CreateCreditPlanRequest.d.ts +3 -0
  90. package/bin/loanOfferings/dtos/requests/CreateCreditPlanRequest.js +11 -2
  91. package/bin/loanOfferings/dtos/requests/CreateFinancierRequest.d.ts +5 -0
  92. package/bin/loanOfferings/dtos/requests/CreateFinancierRequest.js +11 -0
  93. package/bin/loanOfferings/dtos/requests/CreatePromotionRequest.d.ts +2 -2
  94. package/bin/loanOfferings/dtos/requests/CreatePromotionRequest.js +9 -0
  95. package/bin/loanOfferings/dtos/requests/CreateSegmentRequest.d.ts +1 -1
  96. package/bin/loanOfferings/dtos/requests/CreateSegmentRequest.js +3 -0
  97. package/bin/loanOfferings/dtos/requests/CreateStorePolicyRequest.d.ts +1 -1
  98. package/bin/loanOfferings/dtos/requests/CreateStorePolicyRequest.js +3 -0
  99. package/bin/loanOfferings/dtos/requests/ReleasePromotionRequest.d.ts +8 -0
  100. package/bin/loanOfferings/dtos/requests/ReleasePromotionRequest.js +30 -0
  101. package/bin/loanOfferings/dtos/requests/ReservePromotionBonusRequest.d.ts +1 -0
  102. package/bin/loanOfferings/dtos/requests/ReservePromotionBonusRequest.js +3 -0
  103. package/bin/loanOfferings/dtos/requests/SettlePromotionBonusRequest.d.ts +1 -0
  104. package/bin/loanOfferings/dtos/requests/SettlePromotionBonusRequest.js +3 -0
  105. package/bin/loanOfferings/dtos/requests/SimulateCreditPlanRequest.d.ts +1 -0
  106. package/bin/loanOfferings/dtos/requests/SimulateCreditPlanRequest.js +3 -0
  107. package/bin/loanOfferings/dtos/requests/UpdateCohortRequest.d.ts +3 -1
  108. package/bin/loanOfferings/dtos/requests/UpdateCohortRequest.js +5 -2
  109. package/bin/loanOfferings/dtos/requests/UpdateCreditPlanRequest.d.ts +8 -0
  110. package/bin/loanOfferings/dtos/requests/UpdateCreditPlanRequest.js +30 -12
  111. package/bin/loanOfferings/dtos/requests/UpdateFinancierRequest.d.ts +6 -0
  112. package/bin/loanOfferings/dtos/requests/UpdateFinancierRequest.js +13 -2
  113. package/bin/loanOfferings/dtos/requests/UpdatePromotionRequest.d.ts +7 -1
  114. package/bin/loanOfferings/dtos/requests/UpdatePromotionRequest.js +25 -5
  115. package/bin/loanOfferings/dtos/requests/UpdateSegmentRequest.d.ts +5 -2
  116. package/bin/loanOfferings/dtos/requests/UpdateSegmentRequest.js +12 -5
  117. package/bin/loanOfferings/dtos/requests/UpdateStorePolicyRequest.d.ts +18 -9
  118. package/bin/loanOfferings/dtos/requests/UpdateStorePolicyRequest.js +12 -4
  119. package/bin/loanOfferings/dtos/responses/ReleasePromotionResponse.d.ts +11 -0
  120. package/bin/loanOfferings/dtos/responses/ReleasePromotionResponse.js +2 -0
  121. package/bin/loanOfferings/index.d.ts +5 -0
  122. package/bin/loanOfferings/index.js +6 -0
  123. package/bin/loanOfferings/validators/IsOptionalNonNull.d.ts +9 -0
  124. package/bin/loanOfferings/validators/IsOptionalNonNull.js +14 -0
  125. package/bin/loanOfferings/validators/MaxJsonBytes.d.ts +5 -0
  126. package/bin/loanOfferings/validators/MaxJsonBytes.js +28 -0
  127. package/bin/loanRetailAudit/constants/auditInputLimits.d.ts +16 -0
  128. package/bin/loanRetailAudit/constants/auditInputLimits.js +19 -0
  129. package/bin/loanRetailAudit/dtos/AuditTrailChange.js +4 -0
  130. package/bin/loanRetailAudit/dtos/AuditTrailContextEntry.js +3 -0
  131. package/bin/loanRetailAudit/dtos/requests/CreatePiiAccessLogRequest.d.ts +7 -1
  132. package/bin/loanRetailAudit/dtos/requests/CreatePiiAccessLogRequest.js +8 -1
  133. package/bin/loanRetailAudit/events/AuditTrailRecordedV1.d.ts +1 -0
  134. package/bin/loanRetailAudit/events/AuditTrailRecordedV1.js +5 -1
  135. package/bin/loanRetailAudit/index.d.ts +2 -0
  136. package/bin/loanRetailAudit/index.js +3 -0
  137. package/bin/loanRetailAudit/validators/IsIsoDateTime.d.ts +13 -0
  138. package/bin/loanRetailAudit/validators/IsIsoDateTime.js +29 -0
  139. package/bin/loanScoring/dtos/ScoringOffer.d.ts +8 -6
  140. package/bin/loanScoring/dtos/requests/EvaluateSciRequest.d.ts +14 -3
  141. package/bin/loanScoring/dtos/requests/EvaluateSciRequest.js +15 -0
  142. package/package.json +1 -1
  143. package/src/collection/constants/CollectionResultLimits.ts +18 -0
  144. package/src/collection/dtos/ApplyCollectionResultRequest.ts +15 -8
  145. package/src/collection/dtos/ResolvePendingChargesRequest.ts +7 -4
  146. package/src/collection/index.ts +4 -0
  147. package/src/collection/validators/IsCentPrecision.ts +33 -0
  148. package/src/gsfConnector/dtos/GsfCreditTerms.ts +15 -3
  149. package/src/loanCollectorAssignment/constants/CollectorAssignmentLimits.ts +16 -0
  150. package/src/loanCollectorAssignment/dtos/requests/AutoAssignRequest.ts +13 -1
  151. package/src/loanCollectorAssignment/dtos/requests/ListCollectorAssignmentsRequest.ts +52 -0
  152. package/src/loanCollectorAssignment/dtos/requests/ReassignRequest.ts +8 -1
  153. package/src/loanCollectorAssignment/dtos/requests/RedistributeRequest.ts +8 -1
  154. package/src/loanCollectorAssignment/dtos/responses/ListCollectorAssignmentsResponse.ts +10 -0
  155. package/src/loanCollectorAssignment/index.ts +5 -0
  156. package/src/loanConfig/constants/ParameterRequestLimits.ts +11 -0
  157. package/src/loanConfig/dtos/requests/BulkGetParametersRequest.ts +4 -2
  158. package/src/loanConfig/dtos/requests/BulkUpdateParametersRequest.ts +26 -6
  159. package/src/loanConfig/dtos/requests/UpdateParameterRequest.ts +15 -7
  160. package/src/loanConfig/index.ts +1 -0
  161. package/src/loanCredit/constants/LoanInputLimits.ts +29 -0
  162. package/src/loanCredit/dtos/LoanBeneficiary.ts +11 -1
  163. package/src/loanCredit/dtos/LoanContractDetails.ts +26 -3
  164. package/src/loanCredit/dtos/LoanDeviceNotifyItem.ts +17 -3
  165. package/src/loanCredit/dtos/RestructureTerms.ts +4 -2
  166. package/src/loanCredit/dtos/SignatureContext.ts +5 -1
  167. package/src/loanCredit/dtos/requests/ActivationCheckRequest.ts +12 -2
  168. package/src/loanCredit/dtos/requests/BackofficeApproveRestructureRequest.ts +3 -1
  169. package/src/loanCredit/dtos/requests/BackofficeProposeRestructureRequest.ts +3 -1
  170. package/src/loanCredit/dtos/requests/BackofficeRejectRestructureRequest.ts +3 -1
  171. package/src/loanCredit/dtos/requests/BackofficeWriteOffCreditRequest.ts +3 -1
  172. package/src/loanCredit/dtos/requests/CreateCustomerPaymentRequest.ts +10 -1
  173. package/src/loanCredit/dtos/requests/CreateSellerPaymentRequest.ts +10 -1
  174. package/src/loanCredit/dtos/requests/OriginateLoanCreditRequest.ts +10 -1
  175. package/src/loanCredit/dtos/requests/SegmentFactsBatchRequest.ts +4 -2
  176. package/src/loanCredit/dtos/requests/SignLoanCreditRequest.ts +6 -1
  177. package/src/loanCredit/dtos/requests/UpsertLoanBorrowerRequest.ts +4 -1
  178. package/src/loanCredit/index.ts +2 -0
  179. package/src/loanCredit/validators/IsContractBirthDate.ts +41 -0
  180. package/src/loanOfferings/constants/offeringsInputLimits.ts +47 -0
  181. package/src/loanOfferings/dtos/requests/ChangeCreditPlanStatusRequest.ts +9 -1
  182. package/src/loanOfferings/dtos/requests/ChangePromotionStatusRequest.ts +3 -1
  183. package/src/loanOfferings/dtos/requests/ComputeAmortizationScheduleRequest.ts +7 -2
  184. package/src/loanOfferings/dtos/requests/ConsumePromotionRequest.ts +5 -1
  185. package/src/loanOfferings/dtos/requests/CreateCreditPlanRequest.ts +24 -2
  186. package/src/loanOfferings/dtos/requests/CreateFinancierRequest.ts +25 -0
  187. package/src/loanOfferings/dtos/requests/CreatePromotionRequest.ts +17 -2
  188. package/src/loanOfferings/dtos/requests/CreateSegmentRequest.ts +4 -1
  189. package/src/loanOfferings/dtos/requests/CreateStorePolicyRequest.ts +6 -1
  190. package/src/loanOfferings/dtos/requests/ReleasePromotionRequest.ts +16 -0
  191. package/src/loanOfferings/dtos/requests/ReservePromotionBonusRequest.ts +5 -1
  192. package/src/loanOfferings/dtos/requests/SettlePromotionBonusRequest.ts +5 -1
  193. package/src/loanOfferings/dtos/requests/SimulateCreditPlanRequest.ts +5 -1
  194. package/src/loanOfferings/dtos/requests/UpdateCohortRequest.ts +6 -3
  195. package/src/loanOfferings/dtos/requests/UpdateCreditPlanRequest.ts +43 -12
  196. package/src/loanOfferings/dtos/requests/UpdateFinancierRequest.ts +26 -2
  197. package/src/loanOfferings/dtos/requests/UpdatePromotionRequest.ts +34 -6
  198. package/src/loanOfferings/dtos/requests/UpdateSegmentRequest.ts +14 -7
  199. package/src/loanOfferings/dtos/requests/UpdateStorePolicyRequest.ts +28 -13
  200. package/src/loanOfferings/dtos/responses/ReleasePromotionResponse.ts +11 -0
  201. package/src/loanOfferings/index.ts +7 -0
  202. package/src/loanOfferings/validators/IsOptionalNonNull.ts +12 -0
  203. package/src/loanOfferings/validators/MaxJsonBytes.ts +28 -0
  204. package/src/loanRetailAudit/constants/auditInputLimits.ts +20 -0
  205. package/src/loanRetailAudit/dtos/AuditTrailChange.ts +5 -1
  206. package/src/loanRetailAudit/dtos/AuditTrailContextEntry.ts +4 -1
  207. package/src/loanRetailAudit/dtos/requests/CreatePiiAccessLogRequest.ts +20 -3
  208. package/src/loanRetailAudit/events/AuditTrailRecordedV1.ts +7 -2
  209. package/src/loanRetailAudit/index.ts +4 -0
  210. package/src/loanRetailAudit/validators/IsIsoDateTime.ts +33 -0
  211. package/src/loanScoring/dtos/ScoringOffer.ts +8 -6
  212. package/src/loanScoring/dtos/requests/EvaluateSciRequest.ts +26 -4
@@ -1,10 +1,23 @@
1
1
  /** Datos del acreditado tal como se imprimen en el contrato (Sección II.1). */
2
2
  export declare class LoanContractBorrowerDetails {
3
3
  fullName: string;
4
+ /**
5
+ * Solo con tope de largo. retail-customer guarda el CURP de Metamap sin validar su formato, así que
6
+ * exigir `regexCurp` aquí tumbaría la firma. El formato lo revisa el dominio (loan-credit).
7
+ */
4
8
  curp: string;
5
9
  /** Domicilio completo en una línea. */
6
10
  address: string;
11
+ /**
12
+ * Solo con tope de largo. El RFC de `people` solo se limpia de espacios y puede llegar en minúsculas
13
+ * o con 10 caracteres; si se rechaza, el wizard descarta todo `contractDetails` y la firma no sale.
14
+ * El formato (`RFC_PATTERN`) lo revisa el dominio.
15
+ */
7
16
  rfc?: string;
17
+ /**
18
+ * Fecha de nacimiento ya formateada para imprimir (el wizard manda `DD/MM/AAAA`). Solo con tope de
19
+ * largo: el dominio puede revisar la fecha con `isContractBirthDate` y dejarla en blanco si no cumple.
20
+ */
8
21
  birthDate?: string;
9
22
  /** Identificación oficial con la que se validó al acreditado (p. ej. INE). */
10
23
  identification?: string;
@@ -31,7 +44,11 @@ export declare class LoanContractProviderDetails {
31
44
  }
32
45
  /** Cuenta Pago Confiado del acreditado, de la que se cobra el crédito (Secciones VI y VIII). */
33
46
  export declare class LoanContractPcfAccountDetails {
34
- /** Tal como la tiene la cuenta; en dev puede no ser una CLABE de 18 dígitos. */
47
+ /**
48
+ * Tal como la tiene la cuenta, con tope de largo. La CLABE estricta de 18 dígitos (decisión D9) se
49
+ * aplica en el dominio: si no cumple `CLABE_PATTERN`, loan-credit deja la cuenta en blanco en el
50
+ * contrato. No se exige aquí para no rechazar la firma cuando la cuenta de dev no es una CLABE.
51
+ */
35
52
  clabe: string;
36
53
  }
37
54
  /**
@@ -75,7 +75,8 @@ __decorate([
75
75
  (0, class_transformer_1.Expose)(),
76
76
  (0, class_validator_1.IsOptional)(),
77
77
  (0, class_validator_1.IsString)(),
78
- (0, class_validator_1.MaxLength)(LONG_TEXT),
78
+ (0, class_validator_1.MaxLength)(InputPatterns_1.EMAIL_MAX_LENGTH),
79
+ (0, class_validator_1.Matches)(InputPatterns_1.EMAIL_PATTERN, { message: InputPatterns_1.EMAIL_MESSAGE }),
79
80
  __metadata("design:type", String)
80
81
  ], LoanContractBorrowerDetails.prototype, "email", void 0);
81
82
  __decorate([
@@ -1,8 +1,13 @@
1
1
  import { DeviceNotifyIntensityEnum } from '../../mdm/enums/DeviceNotifyIntensityEnum';
2
2
  import { MdmNoticeTypeEnum } from '../../mdm/enums/MdmNoticeTypeEnum';
3
+ /** Mensaje cuando el ítem no trae ningún aviso. */
4
+ export declare const LOAN_DEVICE_NOTICE_MISSING_MESSAGE = "El aviso debe traer noticeType, o title y content, o notificationCode";
3
5
  /**
4
6
  * Ítem de notificación: a qué crédito se le avisa y con qué aviso.
5
7
  * El aviso viaja como `noticeType`; los tres campos de texto son el camino legacy.
8
+ *
9
+ * Cada ítem trae un aviso: `noticeType`, o `title` + `content`, o `notificationCode`. Si no trae
10
+ * ninguno, el error sale en `noticeType` (L-023).
6
11
  */
7
12
  export declare class LoanDeviceNotifyItem {
8
13
  creditId: string;
@@ -9,15 +9,24 @@ var __metadata = (this && this.__metadata) || function (k, v) {
9
9
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.LoanDeviceNotifyItem = void 0;
12
+ exports.LoanDeviceNotifyItem = exports.LOAN_DEVICE_NOTICE_MISSING_MESSAGE = void 0;
13
13
  const class_transformer_1 = require("class-transformer");
14
14
  const class_validator_1 = require("class-validator");
15
15
  const DeviceNotifyIntensityEnum_1 = require("../../mdm/enums/DeviceNotifyIntensityEnum");
16
16
  const MdmNoticeTypeEnum_1 = require("../../mdm/enums/MdmNoticeTypeEnum");
17
17
  const CreditIdPattern_1 = require("../constants/CreditIdPattern");
18
+ /** `true` si el valor viaja (ni ausente ni `null`). */
19
+ const present = (value) => value !== undefined && value !== null;
20
+ /** El ítem trae un aviso por el camino legacy: `notificationCode`, o `title` junto con `content`. */
21
+ const hasLegacyNotice = (item) => present(item.notificationCode) || (present(item.title) && present(item.content));
22
+ /** Mensaje cuando el ítem no trae ningún aviso. */
23
+ exports.LOAN_DEVICE_NOTICE_MISSING_MESSAGE = 'El aviso debe traer noticeType, o title y content, o notificationCode';
18
24
  /**
19
25
  * Ítem de notificación: a qué crédito se le avisa y con qué aviso.
20
26
  * El aviso viaja como `noticeType`; los tres campos de texto son el camino legacy.
27
+ *
28
+ * Cada ítem trae un aviso: `noticeType`, o `title` + `content`, o `notificationCode`. Si no trae
29
+ * ninguno, el error sale en `noticeType` (L-023).
21
30
  */
22
31
  class LoanDeviceNotifyItem {
23
32
  }
@@ -34,8 +43,8 @@ __decorate([
34
43
  ], LoanDeviceNotifyItem.prototype, "intensity", void 0);
35
44
  __decorate([
36
45
  (0, class_transformer_1.Expose)(),
37
- (0, class_validator_1.IsOptional)(),
38
- (0, class_validator_1.IsEnum)(MdmNoticeTypeEnum_1.MdmNoticeTypeEnum),
46
+ (0, class_validator_1.ValidateIf)((item) => present(item.noticeType) || !hasLegacyNotice(item)),
47
+ (0, class_validator_1.IsEnum)(MdmNoticeTypeEnum_1.MdmNoticeTypeEnum, { message: exports.LOAN_DEVICE_NOTICE_MISSING_MESSAGE }),
39
48
  __metadata("design:type", String)
40
49
  ], LoanDeviceNotifyItem.prototype, "noticeType", void 0);
41
50
  __decorate([
@@ -1,6 +1,6 @@
1
1
  /** Términos de una reestructura: los propone el cobrador y el admin los aprueba o ajusta. */
2
2
  export declare class RestructureTerms {
3
- /** Plazo nuevo en semanas; no puede ser menor a las cuotas restantes. */
3
+ /** Plazo nuevo en semanas; no puede ser menor a las cuotas restantes ni pasar el techo del alta (104). */
4
4
  newTermWeeks: number;
5
5
  /** TNA nueva en decimal (`2.30` = 230%). */
6
6
  newTnaAnnual: number;
@@ -12,6 +12,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.RestructureTerms = void 0;
13
13
  const class_transformer_1 = require("class-transformer");
14
14
  const class_validator_1 = require("class-validator");
15
+ const LoanInputLimits_1 = require("../constants/LoanInputLimits");
15
16
  /** Términos de una reestructura: los propone el cobrador y el admin los aprueba o ajusta. */
16
17
  class RestructureTerms {
17
18
  }
@@ -20,6 +21,7 @@ __decorate([
20
21
  (0, class_transformer_1.Expose)(),
21
22
  (0, class_validator_1.IsInt)(),
22
23
  (0, class_validator_1.Min)(1),
24
+ (0, class_validator_1.Max)(LoanInputLimits_1.LOAN_MAX_TERM_WEEKS),
23
25
  __metadata("design:type", Number)
24
26
  ], RestructureTerms.prototype, "newTermWeeks", void 0);
25
27
  __decorate([
@@ -4,7 +4,11 @@
4
4
  * ceremonia: la IP y el navegador son del equipo de la tienda. Nunca se loguean.
5
5
  */
6
6
  export declare class SignatureContext {
7
- /** IP de origen de la llamada, como la ve el API Gateway del wizard. */
7
+ /**
8
+ * IP de origen de la llamada, como la ve el API Gateway del wizard. Solo con tope de largo: sin
9
+ * `sourceIp` el wizard manda `"desconocida"`, y `@IsIP()` tumbaría la firma. El dominio decide qué
10
+ * hacer con un valor que no es IP.
11
+ */
8
12
  ip: string;
9
13
  userAgent?: string;
10
14
  /** Tiempo 1: el cliente marcó "Acepto los términos". El motor exige `true` para mandar el código. */
@@ -18,6 +18,6 @@ export declare class ActivationCheckRequest {
18
18
  lockVerified?: boolean;
19
19
  /** IMEI del equipo (paso 09) si no se fijó en el originate. Luhn-validado por el motor. */
20
20
  imei?: string;
21
- /** SKU del producto vendido (paso 09). Lo congela el expediente MDM al enrolar. */
21
+ /** SKU del producto vendido (paso 09). Lo congela el expediente MDM al enrolar; mismas reglas que el enroll. */
22
22
  productSku?: string;
23
23
  }
@@ -12,6 +12,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.ActivationCheckRequest = void 0;
13
13
  const class_transformer_1 = require("class-transformer");
14
14
  const class_validator_1 = require("class-validator");
15
+ const InputPatterns_1 = require("../../../common/constants/InputPatterns");
15
16
  /**
16
17
  * Body de `POST /private/credits/:creditId/activate-check` (loan-credit-business — M2 §5).
17
18
  * Marca condiciones del checklist de activación cumplidas (solo las que cambian, solo a `true`):
@@ -48,11 +49,14 @@ __decorate([
48
49
  (0, class_transformer_1.Expose)(),
49
50
  (0, class_validator_1.IsOptional)(),
50
51
  (0, class_validator_1.IsString)(),
52
+ (0, class_validator_1.Matches)(InputPatterns_1.IMEI_PATTERN, { message: InputPatterns_1.IMEI_MESSAGE }),
51
53
  __metadata("design:type", String)
52
54
  ], ActivationCheckRequest.prototype, "imei", void 0);
53
55
  __decorate([
54
56
  (0, class_transformer_1.Expose)(),
55
57
  (0, class_validator_1.IsOptional)(),
56
58
  (0, class_validator_1.IsString)(),
59
+ (0, class_validator_1.MaxLength)(InputPatterns_1.SKU_MAX_LENGTH),
60
+ (0, class_validator_1.Matches)(InputPatterns_1.SKU_PATTERN, { message: InputPatterns_1.SKU_MESSAGE }),
57
61
  __metadata("design:type", String)
58
62
  ], ActivationCheckRequest.prototype, "productSku", void 0);
@@ -12,6 +12,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.BackofficeApproveRestructureRequest = void 0;
13
13
  const class_transformer_1 = require("class-transformer");
14
14
  const class_validator_1 = require("class-validator");
15
+ const LoanInputLimits_1 = require("../../constants/LoanInputLimits");
15
16
  const RestructureTerms_1 = require("../RestructureTerms");
16
17
  /** Body de `POST /backoffice/credits/:creditId/restructures/:restructureId/approve` (loan-credit-business). */
17
18
  class BackofficeApproveRestructureRequest {
@@ -21,6 +22,7 @@ __decorate([
21
22
  (0, class_transformer_1.Expose)(),
22
23
  (0, class_validator_1.IsString)(),
23
24
  (0, class_validator_1.MinLength)(1),
25
+ (0, class_validator_1.MaxLength)(LoanInputLimits_1.LOAN_FREE_TEXT_MAX_LENGTH),
24
26
  __metadata("design:type", String)
25
27
  ], BackofficeApproveRestructureRequest.prototype, "reason", void 0);
26
28
  __decorate([
@@ -12,6 +12,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.BackofficeProposeRestructureRequest = void 0;
13
13
  const class_transformer_1 = require("class-transformer");
14
14
  const class_validator_1 = require("class-validator");
15
+ const LoanInputLimits_1 = require("../../constants/LoanInputLimits");
15
16
  const RestructureTerms_1 = require("../RestructureTerms");
16
17
  /** Body de `POST /backoffice/credits/:creditId/restructures` (loan-credit-business). */
17
18
  class BackofficeProposeRestructureRequest {
@@ -21,6 +22,7 @@ __decorate([
21
22
  (0, class_transformer_1.Expose)(),
22
23
  (0, class_validator_1.IsString)(),
23
24
  (0, class_validator_1.MinLength)(1),
25
+ (0, class_validator_1.MaxLength)(LoanInputLimits_1.LOAN_FREE_TEXT_MAX_LENGTH),
24
26
  __metadata("design:type", String)
25
27
  ], BackofficeProposeRestructureRequest.prototype, "justification", void 0);
26
28
  __decorate([
@@ -12,6 +12,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.BackofficeRejectRestructureRequest = void 0;
13
13
  const class_transformer_1 = require("class-transformer");
14
14
  const class_validator_1 = require("class-validator");
15
+ const LoanInputLimits_1 = require("../../constants/LoanInputLimits");
15
16
  /** Body de `POST /backoffice/credits/:creditId/restructures/:restructureId/reject` (loan-credit-business). */
16
17
  class BackofficeRejectRestructureRequest {
17
18
  }
@@ -20,5 +21,6 @@ __decorate([
20
21
  (0, class_transformer_1.Expose)(),
21
22
  (0, class_validator_1.IsString)(),
22
23
  (0, class_validator_1.MinLength)(1),
24
+ (0, class_validator_1.MaxLength)(LoanInputLimits_1.LOAN_FREE_TEXT_MAX_LENGTH),
23
25
  __metadata("design:type", String)
24
26
  ], BackofficeRejectRestructureRequest.prototype, "reason", void 0);
@@ -12,6 +12,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.BackofficeWriteOffCreditRequest = void 0;
13
13
  const class_transformer_1 = require("class-transformer");
14
14
  const class_validator_1 = require("class-validator");
15
+ const LoanInputLimits_1 = require("../../constants/LoanInputLimits");
15
16
  const WriteOffConfirmations_1 = require("../WriteOffConfirmations");
16
17
  /** Body de `POST /backoffice/credits/:creditId/write-off`. Los faltantes los responde el lambda con su code. */
17
18
  class BackofficeWriteOffCreditRequest {
@@ -21,6 +22,7 @@ __decorate([
21
22
  (0, class_transformer_1.Expose)(),
22
23
  (0, class_validator_1.IsOptional)(),
23
24
  (0, class_validator_1.IsString)(),
25
+ (0, class_validator_1.MaxLength)(LoanInputLimits_1.LOAN_FREE_TEXT_MAX_LENGTH),
24
26
  __metadata("design:type", String)
25
27
  ], BackofficeWriteOffCreditRequest.prototype, "reason", void 0);
26
28
  __decorate([
@@ -8,4 +8,9 @@ export declare class CreateCustomerPaymentRequest {
8
8
  idempotencyKey: string;
9
9
  /** Solo ADVANCE: cuántas cuotas adelanta. */
10
10
  installmentCount?: number;
11
+ /**
12
+ * Confirma un pago igual a otro reciente (mismo crédito, monto y actor en los últimos 10 min) que
13
+ * llegó con otra llave. Sin él, el servidor responde que pida confirmación al cliente (L-057, L-092).
14
+ */
15
+ confirmDuplicate?: boolean;
11
16
  }
@@ -40,3 +40,9 @@ __decorate([
40
40
  (0, class_validator_1.Min)(1),
41
41
  __metadata("design:type", Number)
42
42
  ], CreateCustomerPaymentRequest.prototype, "installmentCount", void 0);
43
+ __decorate([
44
+ (0, class_transformer_1.Expose)(),
45
+ (0, class_validator_1.IsOptional)(),
46
+ (0, class_validator_1.IsBoolean)(),
47
+ __metadata("design:type", Boolean)
48
+ ], CreateCustomerPaymentRequest.prototype, "confirmDuplicate", void 0);
@@ -12,4 +12,9 @@ export declare class CreateSellerPaymentRequest {
12
12
  /** Tarjeta: `cardLast4` + `authCode`; SPEI: `speiTrackingKey`; efectivo: sin detalle. */
13
13
  detail?: InStorePaymentDetail;
14
14
  idempotencyKey: string;
15
+ /**
16
+ * Confirma un pago igual a otro reciente (mismo crédito, monto y actor en los últimos 10 min) que
17
+ * llegó con otra llave. Sin él, el servidor responde que pida confirmación al vendedor (L-057, L-092).
18
+ */
19
+ confirmDuplicate?: boolean;
15
20
  }
@@ -54,3 +54,9 @@ __decorate([
54
54
  (0, class_validator_1.IsUUID)(),
55
55
  __metadata("design:type", String)
56
56
  ], CreateSellerPaymentRequest.prototype, "idempotencyKey", void 0);
57
+ __decorate([
58
+ (0, class_transformer_1.Expose)(),
59
+ (0, class_validator_1.IsOptional)(),
60
+ (0, class_validator_1.IsBoolean)(),
61
+ __metadata("design:type", Boolean)
62
+ ], CreateSellerPaymentRequest.prototype, "confirmDuplicate", void 0);
@@ -17,6 +17,7 @@ export declare class OriginateLoanCreditRequest {
17
17
  borrowerId: string;
18
18
  planId: string;
19
19
  termWeeks: number;
20
+ /** Precio del equipo en centavos; el techo es técnico, no de negocio (L-027). */
20
21
  equipmentPriceCents: number;
21
22
  downPaymentCents: number;
22
23
  /**
@@ -12,6 +12,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.OriginateLoanCreditRequest = void 0;
13
13
  const class_transformer_1 = require("class-transformer");
14
14
  const class_validator_1 = require("class-validator");
15
+ const InputPatterns_1 = require("../../../common/constants/InputPatterns");
16
+ const LoanInputLimits_1 = require("../../constants/LoanInputLimits");
15
17
  const ProductCategoryEnum_1 = require("../../../retailCatalog/enums/ProductCategoryEnum");
16
18
  const ProductTierEnum_1 = require("../../../retailCatalog/enums/ProductTierEnum");
17
19
  const ClientLevelEnum_1 = require("../../../loanScoring/enums/ClientLevelEnum");
@@ -50,19 +52,21 @@ __decorate([
50
52
  (0, class_transformer_1.Expose)(),
51
53
  (0, class_validator_1.IsInt)(),
52
54
  (0, class_validator_1.Min)(1),
53
- (0, class_validator_1.Max)(104),
55
+ (0, class_validator_1.Max)(LoanInputLimits_1.LOAN_MAX_TERM_WEEKS),
54
56
  __metadata("design:type", Number)
55
57
  ], OriginateLoanCreditRequest.prototype, "termWeeks", void 0);
56
58
  __decorate([
57
59
  (0, class_transformer_1.Expose)(),
58
60
  (0, class_validator_1.IsInt)(),
59
61
  (0, class_validator_1.Min)(1),
62
+ (0, class_validator_1.Max)(LoanInputLimits_1.LOAN_AMOUNT_MAX_CENTS),
60
63
  __metadata("design:type", Number)
61
64
  ], OriginateLoanCreditRequest.prototype, "equipmentPriceCents", void 0);
62
65
  __decorate([
63
66
  (0, class_transformer_1.Expose)(),
64
67
  (0, class_validator_1.IsInt)(),
65
68
  (0, class_validator_1.Min)(0),
69
+ (0, class_validator_1.Max)(LoanInputLimits_1.LOAN_AMOUNT_MAX_CENTS),
66
70
  __metadata("design:type", Number)
67
71
  ], OriginateLoanCreditRequest.prototype, "downPaymentCents", void 0);
68
72
  __decorate([
@@ -108,6 +112,8 @@ __decorate([
108
112
  (0, class_transformer_1.Expose)(),
109
113
  (0, class_validator_1.IsOptional)(),
110
114
  (0, class_validator_1.IsString)(),
115
+ (0, class_validator_1.MaxLength)(InputPatterns_1.SKU_MAX_LENGTH),
116
+ (0, class_validator_1.Matches)(InputPatterns_1.SKU_PATTERN, { message: InputPatterns_1.SKU_MESSAGE }),
111
117
  __metadata("design:type", String)
112
118
  ], OriginateLoanCreditRequest.prototype, "productSku", void 0);
113
119
  __decorate([
@@ -1,4 +1,4 @@
1
- /** Body de `POST /private/borrowers/segment-facts`: datos para segmentar de hasta 100 clientes retail. */
1
+ /** Body de `POST /private/borrowers/segment-facts`: datos para segmentar de hasta 100 clientes retail; cada id con forma de id (L-067). */
2
2
  export declare class SegmentFactsBatchRequest {
3
3
  retailCustomerIds: string[];
4
4
  }
@@ -12,7 +12,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.SegmentFactsBatchRequest = void 0;
13
13
  const class_transformer_1 = require("class-transformer");
14
14
  const class_validator_1 = require("class-validator");
15
- /** Body de `POST /private/borrowers/segment-facts`: datos para segmentar de hasta 100 clientes retail. */
15
+ const LoanInputLimits_1 = require("../../constants/LoanInputLimits");
16
+ /** Body de `POST /private/borrowers/segment-facts`: datos para segmentar de hasta 100 clientes retail; cada id con forma de id (L-067). */
16
17
  class SegmentFactsBatchRequest {
17
18
  }
18
19
  exports.SegmentFactsBatchRequest = SegmentFactsBatchRequest;
@@ -23,5 +24,6 @@ __decorate([
23
24
  (0, class_validator_1.ArrayMaxSize)(100),
24
25
  (0, class_validator_1.IsString)({ each: true }),
25
26
  (0, class_validator_1.IsNotEmpty)({ each: true }),
27
+ (0, class_validator_1.Matches)(LoanInputLimits_1.RETAIL_CUSTOMER_ID_PATTERN, { each: true, message: LoanInputLimits_1.RETAIL_CUSTOMER_ID_MESSAGE }),
26
28
  __metadata("design:type", Array)
27
29
  ], SegmentFactsBatchRequest.prototype, "retailCustomerIds", void 0);
@@ -27,6 +27,8 @@ export declare class SignLoanCreditRequest {
27
27
  * posee (PII TRANSITORIA del cliente — nombreAcreditado, curp, domicilio, lugar de firma...).
28
28
  * Las aporta el WIZARD (dueño del dato); el motor las mezcla con las financieras (monto,
29
29
  * pagos, tasa) y las pasa a document-generator. NO se persisten ni loggean (silo PII-zero).
30
+ *
31
+ * @deprecated loan-credit ya no lo lee: los datos del contrato viajan en `contractDetails`.
30
32
  */
31
33
  contractData?: Record<string, string>;
32
34
  /**
@@ -12,6 +12,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.SignLoanCreditRequest = void 0;
13
13
  const class_transformer_1 = require("class-transformer");
14
14
  const class_validator_1 = require("class-validator");
15
+ const LoanInputLimits_1 = require("../../constants/LoanInputLimits");
15
16
  const LoanContractDetails_1 = require("../LoanContractDetails");
16
17
  const SignatureContext_1 = require("../SignatureContext");
17
18
  /**
@@ -60,6 +61,8 @@ __decorate([
60
61
  (0, class_transformer_1.Expose)(),
61
62
  (0, class_validator_1.IsOptional)(),
62
63
  (0, class_validator_1.IsString)(),
64
+ (0, class_validator_1.MaxLength)(LoanInputLimits_1.E164_PHONE_MAX_LENGTH),
65
+ (0, class_validator_1.Matches)(LoanInputLimits_1.E164_PHONE_PATTERN, { message: LoanInputLimits_1.E164_PHONE_MESSAGE }),
63
66
  __metadata("design:type", String)
64
67
  ], SignLoanCreditRequest.prototype, "otpDestination", void 0);
65
68
  __decorate([
@@ -12,6 +12,7 @@ import { LoanBeneficiary } from '../LoanBeneficiary';
12
12
  * `RETAIL_PULL_FAILED` (422/502 — ver openapi del motor).
13
13
  */
14
14
  export declare class UpsertLoanBorrowerRequest {
15
+ /** Id del cliente en retail-customer (hoy un ULID); largo y forma acotados (L-031). */
15
16
  retailCustomerId: string;
16
17
  /** Beneficiario / a quién avisar (opcional — el wizard lo captura en su paso propio). */
17
18
  beneficiary?: LoanBeneficiary;
@@ -12,6 +12,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.UpsertLoanBorrowerRequest = void 0;
13
13
  const class_transformer_1 = require("class-transformer");
14
14
  const class_validator_1 = require("class-validator");
15
+ const LoanInputLimits_1 = require("../../constants/LoanInputLimits");
15
16
  const LoanBeneficiary_1 = require("../LoanBeneficiary");
16
17
  /**
17
18
  * Body de `POST /private/borrowers` (loan-credit-business) — ALTA ON-DEMAND del acreditado
@@ -32,6 +33,7 @@ __decorate([
32
33
  (0, class_transformer_1.Expose)(),
33
34
  (0, class_validator_1.IsString)(),
34
35
  (0, class_validator_1.IsNotEmpty)(),
36
+ (0, class_validator_1.Matches)(LoanInputLimits_1.RETAIL_CUSTOMER_ID_PATTERN, { message: LoanInputLimits_1.RETAIL_CUSTOMER_ID_MESSAGE }),
35
37
  __metadata("design:type", String)
36
38
  ], UpsertLoanBorrowerRequest.prototype, "retailCustomerId", void 0);
37
39
  __decorate([
@@ -99,6 +99,8 @@ export * from './dtos/responses/LoanDeviceNotifyResponse';
99
99
  export * from './dtos/responses/LoanDeviceReleaseResult';
100
100
  export * from './dtos/responses/LoanDeviceReleaseResponse';
101
101
  export * from './validators/IsFutureIso8601DateTime';
102
+ export * from './validators/IsContractBirthDate';
103
+ export * from './constants/LoanInputLimits';
102
104
  export { MessagingSlotEnum } from '../messagesConnector/enums/MessagingSlotEnum';
103
105
  export * from './constants/MessagingCandidateLimits';
104
106
  export * from './constants/StoreDayPattern';
@@ -137,6 +137,8 @@ __exportStar(require("./dtos/responses/LoanDeviceNotifyResponse"), exports);
137
137
  __exportStar(require("./dtos/responses/LoanDeviceReleaseResult"), exports);
138
138
  __exportStar(require("./dtos/responses/LoanDeviceReleaseResponse"), exports);
139
139
  __exportStar(require("./validators/IsFutureIso8601DateTime"), exports);
140
+ __exportStar(require("./validators/IsContractBirthDate"), exports);
141
+ __exportStar(require("./constants/LoanInputLimits"), exports);
140
142
  // Candidatos de mensajería — contrato de `POST /private/messaging/candidates`
141
143
  // Re-export del enum canónico del momento (owner: messagesConnector — un solo origen de verdad).
142
144
  var MessagingSlotEnum_1 = require("../messagesConnector/enums/MessagingSlotEnum");
@@ -0,0 +1,11 @@
1
+ import { ValidationOptions } from 'class-validator';
2
+ /** `true` si el valor es una fecha `DD/MM/AAAA` o `AAAA-MM-DD` que existe en el calendario. */
3
+ export declare const isContractBirthDate: (value: unknown) => boolean;
4
+ /**
5
+ * Fecha de nacimiento del contrato: `DD/MM/AAAA` (la que imprime la plantilla y manda el wizard) o
6
+ * `AAAA-MM-DD`. Sin hora: es una fecha de calendario, no un instante.
7
+ *
8
+ * `LoanContractDetails.birthDate` no lo usa: ahí solo hay tope de largo para no tumbar la firma. Es
9
+ * para el dominio, que con `isContractBirthDate` decide si imprime la fecha o la deja en blanco.
10
+ */
11
+ export declare const IsContractBirthDate: (validationOptions?: ValidationOptions) => PropertyDecorator;
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.IsContractBirthDate = exports.isContractBirthDate = void 0;
4
+ const class_validator_1 = require("class-validator");
5
+ /** `DD/MM/AAAA`: como la imprime el contrato y como la manda hoy el wizard. */
6
+ const DAY_FIRST = /^(\d{2})\/(\d{2})\/(\d{4})$/;
7
+ /** `AAAA-MM-DD`: como la guarda retail-customer. */
8
+ const ISO_DATE = /^(\d{4})-(\d{2})-(\d{2})$/;
9
+ /** `true` si año, mes y día forman una fecha de calendario real (rechaza el 31/02). */
10
+ const isCalendarDate = (year, month, day) => {
11
+ const date = new Date(Date.UTC(year, month - 1, day));
12
+ return date.getUTCFullYear() === year && date.getUTCMonth() === month - 1 && date.getUTCDate() === day;
13
+ };
14
+ /** `true` si el valor es una fecha `DD/MM/AAAA` o `AAAA-MM-DD` que existe en el calendario. */
15
+ const isContractBirthDate = (value) => {
16
+ if (typeof value !== 'string')
17
+ return false;
18
+ const dayFirst = DAY_FIRST.exec(value);
19
+ if (dayFirst)
20
+ return isCalendarDate(Number(dayFirst[3]), Number(dayFirst[2]), Number(dayFirst[1]));
21
+ const iso = ISO_DATE.exec(value);
22
+ if (iso)
23
+ return isCalendarDate(Number(iso[1]), Number(iso[2]), Number(iso[3]));
24
+ return false;
25
+ };
26
+ exports.isContractBirthDate = isContractBirthDate;
27
+ /**
28
+ * Fecha de nacimiento del contrato: `DD/MM/AAAA` (la que imprime la plantilla y manda el wizard) o
29
+ * `AAAA-MM-DD`. Sin hora: es una fecha de calendario, no un instante.
30
+ *
31
+ * `LoanContractDetails.birthDate` no lo usa: ahí solo hay tope de largo para no tumbar la firma. Es
32
+ * para el dominio, que con `isContractBirthDate` decide si imprime la fecha o la deja en blanco.
33
+ */
34
+ const IsContractBirthDate = (validationOptions) => (0, class_validator_1.ValidateBy)({
35
+ name: 'isContractBirthDate',
36
+ validator: {
37
+ validate: (value) => (0, exports.isContractBirthDate)(value),
38
+ defaultMessage: () => '$property debe ser una fecha DD/MM/AAAA o AAAA-MM-DD válida',
39
+ },
40
+ }, validationOptions);
41
+ exports.IsContractBirthDate = IsContractBirthDate;
@@ -0,0 +1,35 @@
1
+ /** Plazo máximo de un plan, en semanas; el mismo techo del alta del crédito (decisión D-3). */
2
+ export declare const CREDIT_PLAN_MAX_TERM_WEEKS = 104;
3
+ /** Opciones de plazo por plan: a lo más una por semana posible. */
4
+ export declare const CREDIT_PLAN_TERM_OPTIONS_MAX_ITEMS = 104;
5
+ /** TNA máxima de negocio de planes y promociones, en decimal (`2.60` = 260%). */
6
+ export declare const CREDIT_PLAN_MAX_TNA_ANNUAL = 2.6;
7
+ /**
8
+ * Techo técnico interino de la TNA en `/private/amortization/schedule`, en decimal (`5` = 500%).
9
+ *
10
+ * No es `CREDIT_PLAN_MAX_TNA_ANNUAL` porque la reestructura de loan-credit suma +0.20 a +0.40 a la
11
+ * TNA del crédito sin tope: un crédito al 2.60 se reestructura al 2.80 o más, y con 2.60 su
12
+ * preview, OTP y ejecución darían 400. Se baja a 2.60 cuando loan-credit acote esa TNA.
13
+ */
14
+ export declare const AMORTIZATION_TNA_ANNUAL_TECHNICAL_MAX = 5;
15
+ /** Clientes agregados a mano por segmento (~130 KB, lejos de los 400 KB del ítem). Decisión D-5. */
16
+ export declare const SEGMENT_MEMBER_IDS_MAX_ITEMS = 5000;
17
+ /** Tiendas por política o promoción (= `MAX_SCOPE_CATALOG_STORES` del lambda). Decisión D-5. */
18
+ export declare const SCOPE_STORE_IDS_MAX_ITEMS = 1000;
19
+ /** SKUs por promoción (= `MAX_SCOPE_CATALOG_PRODUCTS` del lambda). Decisión D-5. */
20
+ export declare const PROMOTION_PRODUCT_SKUS_MAX_ITEMS = 2000;
21
+ /** Segmentos del cliente que acepta una cotización. Decisión D-5. */
22
+ export declare const CUSTOMER_SEGMENT_IDS_MAX_ITEMS = 50;
23
+ /** Largos de los textos de catálogo (los de segmentos, cohorts y políticas ya usan 120/500). */
24
+ export declare const OFFERINGS_CODE_MAX_LENGTH = 64;
25
+ export declare const OFFERINGS_NAME_MAX_LENGTH = 120;
26
+ export declare const OFFERINGS_DESCRIPTION_MAX_LENGTH = 500;
27
+ export declare const OFFERINGS_LABEL_MAX_LENGTH = 120;
28
+ /** Largo máximo del motivo que queda en la bitácora; el mismo del backoffice. */
29
+ export declare const OFFERINGS_AUDIT_REASON_MAX_LENGTH = 280;
30
+ /** Largo máximo de un id de crédito o de bono en los privados de promociones (hoy son ULID de 26). */
31
+ export declare const PROMOTION_CREDIT_ID_MAX_LENGTH = 128;
32
+ /** Largo máximo de la URL de redirección de una financiera externa. */
33
+ export declare const FINANCIER_REDIRECT_URL_MAX_LENGTH = 2048;
34
+ /** Tope de `config` de la financiera, serializado en JSON y medido en bytes UTF-8. */
35
+ export declare const FINANCIER_CONFIG_MAX_BYTES = 4096;
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FINANCIER_CONFIG_MAX_BYTES = exports.FINANCIER_REDIRECT_URL_MAX_LENGTH = exports.PROMOTION_CREDIT_ID_MAX_LENGTH = exports.OFFERINGS_AUDIT_REASON_MAX_LENGTH = exports.OFFERINGS_LABEL_MAX_LENGTH = exports.OFFERINGS_DESCRIPTION_MAX_LENGTH = exports.OFFERINGS_NAME_MAX_LENGTH = exports.OFFERINGS_CODE_MAX_LENGTH = exports.CUSTOMER_SEGMENT_IDS_MAX_ITEMS = exports.PROMOTION_PRODUCT_SKUS_MAX_ITEMS = exports.SCOPE_STORE_IDS_MAX_ITEMS = exports.SEGMENT_MEMBER_IDS_MAX_ITEMS = exports.AMORTIZATION_TNA_ANNUAL_TECHNICAL_MAX = exports.CREDIT_PLAN_MAX_TNA_ANNUAL = exports.CREDIT_PLAN_TERM_OPTIONS_MAX_ITEMS = exports.CREDIT_PLAN_MAX_TERM_WEEKS = void 0;
4
+ /** Plazo máximo de un plan, en semanas; el mismo techo del alta del crédito (decisión D-3). */
5
+ exports.CREDIT_PLAN_MAX_TERM_WEEKS = 104;
6
+ /** Opciones de plazo por plan: a lo más una por semana posible. */
7
+ exports.CREDIT_PLAN_TERM_OPTIONS_MAX_ITEMS = 104;
8
+ /** TNA máxima de negocio de planes y promociones, en decimal (`2.60` = 260%). */
9
+ exports.CREDIT_PLAN_MAX_TNA_ANNUAL = 2.6;
10
+ /**
11
+ * Techo técnico interino de la TNA en `/private/amortization/schedule`, en decimal (`5` = 500%).
12
+ *
13
+ * No es `CREDIT_PLAN_MAX_TNA_ANNUAL` porque la reestructura de loan-credit suma +0.20 a +0.40 a la
14
+ * TNA del crédito sin tope: un crédito al 2.60 se reestructura al 2.80 o más, y con 2.60 su
15
+ * preview, OTP y ejecución darían 400. Se baja a 2.60 cuando loan-credit acote esa TNA.
16
+ */
17
+ exports.AMORTIZATION_TNA_ANNUAL_TECHNICAL_MAX = 5;
18
+ /** Clientes agregados a mano por segmento (~130 KB, lejos de los 400 KB del ítem). Decisión D-5. */
19
+ exports.SEGMENT_MEMBER_IDS_MAX_ITEMS = 5000;
20
+ /** Tiendas por política o promoción (= `MAX_SCOPE_CATALOG_STORES` del lambda). Decisión D-5. */
21
+ exports.SCOPE_STORE_IDS_MAX_ITEMS = 1000;
22
+ /** SKUs por promoción (= `MAX_SCOPE_CATALOG_PRODUCTS` del lambda). Decisión D-5. */
23
+ exports.PROMOTION_PRODUCT_SKUS_MAX_ITEMS = 2000;
24
+ /** Segmentos del cliente que acepta una cotización. Decisión D-5. */
25
+ exports.CUSTOMER_SEGMENT_IDS_MAX_ITEMS = 50;
26
+ /** Largos de los textos de catálogo (los de segmentos, cohorts y políticas ya usan 120/500). */
27
+ exports.OFFERINGS_CODE_MAX_LENGTH = 64;
28
+ exports.OFFERINGS_NAME_MAX_LENGTH = 120;
29
+ exports.OFFERINGS_DESCRIPTION_MAX_LENGTH = 500;
30
+ exports.OFFERINGS_LABEL_MAX_LENGTH = 120;
31
+ /** Largo máximo del motivo que queda en la bitácora; el mismo del backoffice. */
32
+ exports.OFFERINGS_AUDIT_REASON_MAX_LENGTH = 280;
33
+ /** Largo máximo de un id de crédito o de bono en los privados de promociones (hoy son ULID de 26). */
34
+ exports.PROMOTION_CREDIT_ID_MAX_LENGTH = 128;
35
+ /** Largo máximo de la URL de redirección de una financiera externa. */
36
+ exports.FINANCIER_REDIRECT_URL_MAX_LENGTH = 2048;
37
+ /** Tope de `config` de la financiera, serializado en JSON y medido en bytes UTF-8. */
38
+ exports.FINANCIER_CONFIG_MAX_BYTES = 4096;
@@ -5,4 +5,6 @@ import { CreditPlanStatusEnum } from '../../enums/CreditPlanStatusEnum';
5
5
  */
6
6
  export declare class ChangeCreditPlanStatusRequest {
7
7
  status: CreditPlanStatusEnum;
8
+ /** Motivo del cambio; queda en la bitácora del plan. */
9
+ reason?: string;
8
10
  }
@@ -12,6 +12,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.ChangeCreditPlanStatusRequest = void 0;
13
13
  const class_transformer_1 = require("class-transformer");
14
14
  const class_validator_1 = require("class-validator");
15
+ const offeringsInputLimits_1 = require("../../constants/offeringsInputLimits");
15
16
  const CreditPlanStatusEnum_1 = require("../../enums/CreditPlanStatusEnum");
16
17
  /**
17
18
  * Body de PUT /credit-plans/:planId/status — activar / inactivar un plan.
@@ -25,3 +26,10 @@ __decorate([
25
26
  (0, class_validator_1.IsEnum)(CreditPlanStatusEnum_1.CreditPlanStatusEnum),
26
27
  __metadata("design:type", String)
27
28
  ], ChangeCreditPlanStatusRequest.prototype, "status", void 0);
29
+ __decorate([
30
+ (0, class_transformer_1.Expose)(),
31
+ (0, class_validator_1.IsOptional)(),
32
+ (0, class_validator_1.IsString)(),
33
+ (0, class_validator_1.MaxLength)(offeringsInputLimits_1.OFFERINGS_AUDIT_REASON_MAX_LENGTH),
34
+ __metadata("design:type", String)
35
+ ], ChangeCreditPlanStatusRequest.prototype, "reason", void 0);
@@ -12,6 +12,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.ChangePromotionStatusRequest = void 0;
13
13
  const class_transformer_1 = require("class-transformer");
14
14
  const class_validator_1 = require("class-validator");
15
+ const offeringsInputLimits_1 = require("../../constants/offeringsInputLimits");
15
16
  const PromotionStatusEnum_1 = require("../../enums/PromotionStatusEnum");
16
17
  /**
17
18
  * Body de PUT /promotions/:promotionId/status — publicar, pausar, reanudar, vencer o archivar.
@@ -31,5 +32,6 @@ __decorate([
31
32
  (0, class_transformer_1.Expose)(),
32
33
  (0, class_validator_1.IsOptional)(),
33
34
  (0, class_validator_1.IsString)(),
35
+ (0, class_validator_1.MaxLength)(offeringsInputLimits_1.OFFERINGS_AUDIT_REASON_MAX_LENGTH),
34
36
  __metadata("design:type", String)
35
37
  ], ChangePromotionStatusRequest.prototype, "reason", void 0);
@@ -2,7 +2,10 @@
2
2
  export declare class ComputeAmortizationScheduleRequest {
3
3
  /** Saldo a amortizar en centavos. */
4
4
  financedAmountCents: number;
5
- /** TNA en decimal (`2.30` = 230%). */
5
+ /**
6
+ * TNA en decimal (`2.30` = 230%). El techo es técnico (5 = 500%), no el 2.60 de los planes: la
7
+ * reestructura sube la TNA del crédito por encima de ese valor (ver `AMORTIZATION_TNA_ANNUAL_TECHNICAL_MAX`).
8
+ */
6
9
  tnaAnnual: number;
7
10
  /** Número de cuotas semanales. */
8
11
  termWeeks: number;