@fiado/type-kit 3.627.0 → 3.628.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 (208) hide show
  1. package/_test_/unit/collection/collectionCallbackRequests.test.ts +96 -0
  2. package/_test_/unit/loanCollectorAssignment/collectorAssignmentRequests.test.ts +65 -0
  3. package/_test_/unit/loanConfig/parameterWriteRequests.test.ts +62 -0
  4. package/_test_/unit/loanCredit/dtos/loanCreditInputLimits.test.ts +168 -0
  5. package/_test_/unit/loanCredit/signLoanCreditRequest.test.ts +61 -2
  6. package/_test_/unit/loanOfferings/offeringsInputRules.test.ts +254 -0
  7. package/_test_/unit/loanOfferings/promotionRequests.test.ts +1 -1
  8. package/_test_/unit/loanRetailAudit/auditInputLimits.test.ts +114 -0
  9. package/_test_/unit/loanScoring/evaluateSciRequest.test.ts +49 -0
  10. package/bin/collection/constants/CollectionResultLimits.d.ts +16 -0
  11. package/bin/collection/constants/CollectionResultLimits.js +19 -0
  12. package/bin/collection/dtos/ApplyCollectionResultRequest.d.ts +5 -0
  13. package/bin/collection/dtos/ApplyCollectionResultRequest.js +22 -0
  14. package/bin/collection/dtos/ResolvePendingChargesRequest.d.ts +2 -0
  15. package/bin/collection/dtos/ResolvePendingChargesRequest.js +9 -0
  16. package/bin/collection/index.d.ts +2 -0
  17. package/bin/collection/index.js +3 -0
  18. package/bin/collection/validators/IsCentPrecision.d.ts +11 -0
  19. package/bin/collection/validators/IsCentPrecision.js +32 -0
  20. package/bin/loanCollectorAssignment/constants/CollectorAssignmentLimits.d.ts +12 -0
  21. package/bin/loanCollectorAssignment/constants/CollectorAssignmentLimits.js +15 -0
  22. package/bin/loanCollectorAssignment/dtos/requests/AutoAssignRequest.d.ts +1 -0
  23. package/bin/loanCollectorAssignment/dtos/requests/AutoAssignRequest.js +8 -0
  24. package/bin/loanCollectorAssignment/dtos/requests/ListCollectorAssignmentsRequest.d.ts +14 -0
  25. package/bin/loanCollectorAssignment/dtos/requests/ListCollectorAssignmentsRequest.js +62 -0
  26. package/bin/loanCollectorAssignment/dtos/requests/ReassignRequest.d.ts +1 -0
  27. package/bin/loanCollectorAssignment/dtos/requests/ReassignRequest.js +4 -0
  28. package/bin/loanCollectorAssignment/dtos/requests/RedistributeRequest.d.ts +1 -0
  29. package/bin/loanCollectorAssignment/dtos/requests/RedistributeRequest.js +4 -0
  30. package/bin/loanCollectorAssignment/dtos/responses/ListCollectorAssignmentsResponse.d.ts +9 -0
  31. package/bin/loanCollectorAssignment/dtos/responses/ListCollectorAssignmentsResponse.js +2 -0
  32. package/bin/loanCollectorAssignment/index.d.ts +3 -0
  33. package/bin/loanCollectorAssignment/index.js +4 -0
  34. package/bin/loanConfig/constants/ParameterRequestLimits.d.ts +8 -0
  35. package/bin/loanConfig/constants/ParameterRequestLimits.js +11 -0
  36. package/bin/loanConfig/dtos/requests/BulkGetParametersRequest.d.ts +1 -1
  37. package/bin/loanConfig/dtos/requests/BulkGetParametersRequest.js +3 -1
  38. package/bin/loanConfig/dtos/requests/BulkUpdateParametersRequest.d.ts +5 -2
  39. package/bin/loanConfig/dtos/requests/BulkUpdateParametersRequest.js +8 -4
  40. package/bin/loanConfig/dtos/requests/UpdateParameterRequest.d.ts +6 -3
  41. package/bin/loanConfig/dtos/requests/UpdateParameterRequest.js +10 -5
  42. package/bin/loanConfig/index.d.ts +1 -0
  43. package/bin/loanConfig/index.js +1 -0
  44. package/bin/loanCredit/constants/LoanInputLimits.d.ts +24 -0
  45. package/bin/loanCredit/constants/LoanInputLimits.js +27 -0
  46. package/bin/loanCredit/dtos/LoanBeneficiary.d.ts +1 -0
  47. package/bin/loanCredit/dtos/LoanBeneficiary.js +9 -0
  48. package/bin/loanCredit/dtos/LoanContractDetails.d.ts +18 -1
  49. package/bin/loanCredit/dtos/LoanContractDetails.js +2 -1
  50. package/bin/loanCredit/dtos/LoanDeviceNotifyItem.d.ts +5 -0
  51. package/bin/loanCredit/dtos/LoanDeviceNotifyItem.js +12 -3
  52. package/bin/loanCredit/dtos/RestructureTerms.d.ts +1 -1
  53. package/bin/loanCredit/dtos/RestructureTerms.js +2 -0
  54. package/bin/loanCredit/dtos/SignatureContext.d.ts +5 -1
  55. package/bin/loanCredit/dtos/requests/ActivationCheckRequest.d.ts +1 -1
  56. package/bin/loanCredit/dtos/requests/ActivationCheckRequest.js +4 -0
  57. package/bin/loanCredit/dtos/requests/BackofficeApproveRestructureRequest.js +2 -0
  58. package/bin/loanCredit/dtos/requests/BackofficeProposeRestructureRequest.js +2 -0
  59. package/bin/loanCredit/dtos/requests/BackofficeRejectRestructureRequest.js +2 -0
  60. package/bin/loanCredit/dtos/requests/BackofficeWriteOffCreditRequest.js +2 -0
  61. package/bin/loanCredit/dtos/requests/CreateCustomerPaymentRequest.d.ts +5 -0
  62. package/bin/loanCredit/dtos/requests/CreateCustomerPaymentRequest.js +6 -0
  63. package/bin/loanCredit/dtos/requests/CreateSellerPaymentRequest.d.ts +5 -0
  64. package/bin/loanCredit/dtos/requests/CreateSellerPaymentRequest.js +6 -0
  65. package/bin/loanCredit/dtos/requests/OriginateLoanCreditRequest.d.ts +1 -0
  66. package/bin/loanCredit/dtos/requests/OriginateLoanCreditRequest.js +7 -1
  67. package/bin/loanCredit/dtos/requests/SegmentFactsBatchRequest.d.ts +1 -1
  68. package/bin/loanCredit/dtos/requests/SegmentFactsBatchRequest.js +3 -1
  69. package/bin/loanCredit/dtos/requests/SignLoanCreditRequest.d.ts +2 -0
  70. package/bin/loanCredit/dtos/requests/SignLoanCreditRequest.js +3 -0
  71. package/bin/loanCredit/dtos/requests/UpsertLoanBorrowerRequest.d.ts +1 -0
  72. package/bin/loanCredit/dtos/requests/UpsertLoanBorrowerRequest.js +2 -0
  73. package/bin/loanCredit/index.d.ts +2 -0
  74. package/bin/loanCredit/index.js +2 -0
  75. package/bin/loanCredit/validators/IsContractBirthDate.d.ts +11 -0
  76. package/bin/loanCredit/validators/IsContractBirthDate.js +41 -0
  77. package/bin/loanOfferings/constants/offeringsInputLimits.d.ts +35 -0
  78. package/bin/loanOfferings/constants/offeringsInputLimits.js +38 -0
  79. package/bin/loanOfferings/dtos/requests/ChangeCreditPlanStatusRequest.d.ts +2 -0
  80. package/bin/loanOfferings/dtos/requests/ChangeCreditPlanStatusRequest.js +8 -0
  81. package/bin/loanOfferings/dtos/requests/ChangePromotionStatusRequest.js +2 -0
  82. package/bin/loanOfferings/dtos/requests/ComputeAmortizationScheduleRequest.d.ts +4 -1
  83. package/bin/loanOfferings/dtos/requests/ComputeAmortizationScheduleRequest.js +3 -1
  84. package/bin/loanOfferings/dtos/requests/ConsumePromotionRequest.d.ts +1 -0
  85. package/bin/loanOfferings/dtos/requests/ConsumePromotionRequest.js +3 -0
  86. package/bin/loanOfferings/dtos/requests/CreateCreditPlanRequest.d.ts +3 -0
  87. package/bin/loanOfferings/dtos/requests/CreateCreditPlanRequest.js +11 -2
  88. package/bin/loanOfferings/dtos/requests/CreateFinancierRequest.d.ts +5 -0
  89. package/bin/loanOfferings/dtos/requests/CreateFinancierRequest.js +11 -0
  90. package/bin/loanOfferings/dtos/requests/CreatePromotionRequest.d.ts +2 -2
  91. package/bin/loanOfferings/dtos/requests/CreatePromotionRequest.js +9 -0
  92. package/bin/loanOfferings/dtos/requests/CreateSegmentRequest.d.ts +1 -1
  93. package/bin/loanOfferings/dtos/requests/CreateSegmentRequest.js +3 -0
  94. package/bin/loanOfferings/dtos/requests/CreateStorePolicyRequest.d.ts +1 -1
  95. package/bin/loanOfferings/dtos/requests/CreateStorePolicyRequest.js +3 -0
  96. package/bin/loanOfferings/dtos/requests/ReleasePromotionRequest.d.ts +8 -0
  97. package/bin/loanOfferings/dtos/requests/ReleasePromotionRequest.js +30 -0
  98. package/bin/loanOfferings/dtos/requests/ReservePromotionBonusRequest.d.ts +1 -0
  99. package/bin/loanOfferings/dtos/requests/ReservePromotionBonusRequest.js +3 -0
  100. package/bin/loanOfferings/dtos/requests/SettlePromotionBonusRequest.d.ts +1 -0
  101. package/bin/loanOfferings/dtos/requests/SettlePromotionBonusRequest.js +3 -0
  102. package/bin/loanOfferings/dtos/requests/SimulateCreditPlanRequest.d.ts +1 -0
  103. package/bin/loanOfferings/dtos/requests/SimulateCreditPlanRequest.js +3 -0
  104. package/bin/loanOfferings/dtos/requests/UpdateCohortRequest.d.ts +3 -1
  105. package/bin/loanOfferings/dtos/requests/UpdateCohortRequest.js +5 -2
  106. package/bin/loanOfferings/dtos/requests/UpdateCreditPlanRequest.d.ts +8 -0
  107. package/bin/loanOfferings/dtos/requests/UpdateCreditPlanRequest.js +30 -12
  108. package/bin/loanOfferings/dtos/requests/UpdateFinancierRequest.d.ts +6 -0
  109. package/bin/loanOfferings/dtos/requests/UpdateFinancierRequest.js +13 -2
  110. package/bin/loanOfferings/dtos/requests/UpdatePromotionRequest.d.ts +7 -1
  111. package/bin/loanOfferings/dtos/requests/UpdatePromotionRequest.js +25 -5
  112. package/bin/loanOfferings/dtos/requests/UpdateSegmentRequest.d.ts +5 -2
  113. package/bin/loanOfferings/dtos/requests/UpdateSegmentRequest.js +12 -5
  114. package/bin/loanOfferings/dtos/requests/UpdateStorePolicyRequest.d.ts +18 -9
  115. package/bin/loanOfferings/dtos/requests/UpdateStorePolicyRequest.js +12 -4
  116. package/bin/loanOfferings/dtos/responses/ReleasePromotionResponse.d.ts +11 -0
  117. package/bin/loanOfferings/dtos/responses/ReleasePromotionResponse.js +2 -0
  118. package/bin/loanOfferings/index.d.ts +5 -0
  119. package/bin/loanOfferings/index.js +6 -0
  120. package/bin/loanOfferings/validators/IsOptionalNonNull.d.ts +9 -0
  121. package/bin/loanOfferings/validators/IsOptionalNonNull.js +14 -0
  122. package/bin/loanOfferings/validators/MaxJsonBytes.d.ts +5 -0
  123. package/bin/loanOfferings/validators/MaxJsonBytes.js +28 -0
  124. package/bin/loanRetailAudit/constants/auditInputLimits.d.ts +16 -0
  125. package/bin/loanRetailAudit/constants/auditInputLimits.js +19 -0
  126. package/bin/loanRetailAudit/dtos/AuditTrailChange.js +4 -0
  127. package/bin/loanRetailAudit/dtos/AuditTrailContextEntry.js +3 -0
  128. package/bin/loanRetailAudit/dtos/requests/CreatePiiAccessLogRequest.d.ts +7 -1
  129. package/bin/loanRetailAudit/dtos/requests/CreatePiiAccessLogRequest.js +8 -1
  130. package/bin/loanRetailAudit/events/AuditTrailRecordedV1.d.ts +1 -0
  131. package/bin/loanRetailAudit/events/AuditTrailRecordedV1.js +5 -1
  132. package/bin/loanRetailAudit/index.d.ts +2 -0
  133. package/bin/loanRetailAudit/index.js +3 -0
  134. package/bin/loanRetailAudit/validators/IsIsoDateTime.d.ts +13 -0
  135. package/bin/loanRetailAudit/validators/IsIsoDateTime.js +29 -0
  136. package/bin/loanScoring/dtos/ScoringOffer.d.ts +8 -6
  137. package/bin/loanScoring/dtos/requests/EvaluateSciRequest.d.ts +14 -3
  138. package/bin/loanScoring/dtos/requests/EvaluateSciRequest.js +15 -0
  139. package/package.json +1 -1
  140. package/src/collection/constants/CollectionResultLimits.ts +18 -0
  141. package/src/collection/dtos/ApplyCollectionResultRequest.ts +15 -8
  142. package/src/collection/dtos/ResolvePendingChargesRequest.ts +7 -4
  143. package/src/collection/index.ts +4 -0
  144. package/src/collection/validators/IsCentPrecision.ts +33 -0
  145. package/src/loanCollectorAssignment/constants/CollectorAssignmentLimits.ts +16 -0
  146. package/src/loanCollectorAssignment/dtos/requests/AutoAssignRequest.ts +13 -1
  147. package/src/loanCollectorAssignment/dtos/requests/ListCollectorAssignmentsRequest.ts +52 -0
  148. package/src/loanCollectorAssignment/dtos/requests/ReassignRequest.ts +8 -1
  149. package/src/loanCollectorAssignment/dtos/requests/RedistributeRequest.ts +8 -1
  150. package/src/loanCollectorAssignment/dtos/responses/ListCollectorAssignmentsResponse.ts +10 -0
  151. package/src/loanCollectorAssignment/index.ts +5 -0
  152. package/src/loanConfig/constants/ParameterRequestLimits.ts +11 -0
  153. package/src/loanConfig/dtos/requests/BulkGetParametersRequest.ts +4 -2
  154. package/src/loanConfig/dtos/requests/BulkUpdateParametersRequest.ts +26 -6
  155. package/src/loanConfig/dtos/requests/UpdateParameterRequest.ts +15 -7
  156. package/src/loanConfig/index.ts +1 -0
  157. package/src/loanCredit/constants/LoanInputLimits.ts +29 -0
  158. package/src/loanCredit/dtos/LoanBeneficiary.ts +11 -1
  159. package/src/loanCredit/dtos/LoanContractDetails.ts +26 -3
  160. package/src/loanCredit/dtos/LoanDeviceNotifyItem.ts +17 -3
  161. package/src/loanCredit/dtos/RestructureTerms.ts +4 -2
  162. package/src/loanCredit/dtos/SignatureContext.ts +5 -1
  163. package/src/loanCredit/dtos/requests/ActivationCheckRequest.ts +12 -2
  164. package/src/loanCredit/dtos/requests/BackofficeApproveRestructureRequest.ts +3 -1
  165. package/src/loanCredit/dtos/requests/BackofficeProposeRestructureRequest.ts +3 -1
  166. package/src/loanCredit/dtos/requests/BackofficeRejectRestructureRequest.ts +3 -1
  167. package/src/loanCredit/dtos/requests/BackofficeWriteOffCreditRequest.ts +3 -1
  168. package/src/loanCredit/dtos/requests/CreateCustomerPaymentRequest.ts +10 -1
  169. package/src/loanCredit/dtos/requests/CreateSellerPaymentRequest.ts +10 -1
  170. package/src/loanCredit/dtos/requests/OriginateLoanCreditRequest.ts +10 -1
  171. package/src/loanCredit/dtos/requests/SegmentFactsBatchRequest.ts +4 -2
  172. package/src/loanCredit/dtos/requests/SignLoanCreditRequest.ts +6 -1
  173. package/src/loanCredit/dtos/requests/UpsertLoanBorrowerRequest.ts +4 -1
  174. package/src/loanCredit/index.ts +2 -0
  175. package/src/loanCredit/validators/IsContractBirthDate.ts +41 -0
  176. package/src/loanOfferings/constants/offeringsInputLimits.ts +47 -0
  177. package/src/loanOfferings/dtos/requests/ChangeCreditPlanStatusRequest.ts +9 -1
  178. package/src/loanOfferings/dtos/requests/ChangePromotionStatusRequest.ts +3 -1
  179. package/src/loanOfferings/dtos/requests/ComputeAmortizationScheduleRequest.ts +7 -2
  180. package/src/loanOfferings/dtos/requests/ConsumePromotionRequest.ts +5 -1
  181. package/src/loanOfferings/dtos/requests/CreateCreditPlanRequest.ts +24 -2
  182. package/src/loanOfferings/dtos/requests/CreateFinancierRequest.ts +25 -0
  183. package/src/loanOfferings/dtos/requests/CreatePromotionRequest.ts +17 -2
  184. package/src/loanOfferings/dtos/requests/CreateSegmentRequest.ts +4 -1
  185. package/src/loanOfferings/dtos/requests/CreateStorePolicyRequest.ts +6 -1
  186. package/src/loanOfferings/dtos/requests/ReleasePromotionRequest.ts +16 -0
  187. package/src/loanOfferings/dtos/requests/ReservePromotionBonusRequest.ts +5 -1
  188. package/src/loanOfferings/dtos/requests/SettlePromotionBonusRequest.ts +5 -1
  189. package/src/loanOfferings/dtos/requests/SimulateCreditPlanRequest.ts +5 -1
  190. package/src/loanOfferings/dtos/requests/UpdateCohortRequest.ts +6 -3
  191. package/src/loanOfferings/dtos/requests/UpdateCreditPlanRequest.ts +43 -12
  192. package/src/loanOfferings/dtos/requests/UpdateFinancierRequest.ts +26 -2
  193. package/src/loanOfferings/dtos/requests/UpdatePromotionRequest.ts +34 -6
  194. package/src/loanOfferings/dtos/requests/UpdateSegmentRequest.ts +14 -7
  195. package/src/loanOfferings/dtos/requests/UpdateStorePolicyRequest.ts +28 -13
  196. package/src/loanOfferings/dtos/responses/ReleasePromotionResponse.ts +11 -0
  197. package/src/loanOfferings/index.ts +7 -0
  198. package/src/loanOfferings/validators/IsOptionalNonNull.ts +12 -0
  199. package/src/loanOfferings/validators/MaxJsonBytes.ts +28 -0
  200. package/src/loanRetailAudit/constants/auditInputLimits.ts +20 -0
  201. package/src/loanRetailAudit/dtos/AuditTrailChange.ts +5 -1
  202. package/src/loanRetailAudit/dtos/AuditTrailContextEntry.ts +4 -1
  203. package/src/loanRetailAudit/dtos/requests/CreatePiiAccessLogRequest.ts +20 -3
  204. package/src/loanRetailAudit/events/AuditTrailRecordedV1.ts +7 -2
  205. package/src/loanRetailAudit/index.ts +4 -0
  206. package/src/loanRetailAudit/validators/IsIsoDateTime.ts +33 -0
  207. package/src/loanScoring/dtos/ScoringOffer.ts +8 -6
  208. package/src/loanScoring/dtos/requests/EvaluateSciRequest.ts +26 -4
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.IsCentPrecision = exports.hasCentPrecision = void 0;
4
+ const class_validator_1 = require("class-validator");
5
+ /**
6
+ * Ruido de punto flotante tolerado, en centavos. Restar montos en `double` deja colas como
7
+ * `648.2299999999999`; un tercer decimal real (0.001 pesos = 0.1 centavos) queda muy por encima.
8
+ */
9
+ const FLOAT_NOISE_CENTS = 1e-3;
10
+ /** `true` si el número no tiene fracción de centavo, salvo ruido de punto flotante. */
11
+ const hasCentPrecision = (value) => {
12
+ if (typeof value !== 'number' || !Number.isFinite(value))
13
+ return false;
14
+ const cents = value * 100;
15
+ return Math.abs(cents - Math.round(cents)) < FLOAT_NOISE_CENTS;
16
+ };
17
+ exports.hasCentPrecision = hasCentPrecision;
18
+ /**
19
+ * Monto con a lo más dos decimales (centavos).
20
+ *
21
+ * No se usa `@IsNumber({ maxDecimalPlaces: 2 })` porque cuenta los dígitos del `toString()`: rechaza
22
+ * `648.2299999999999`, que es `648.23` con ruido de una resta. El motor de cobro deja ese ruido al
23
+ * restar lo cobrado de lo pendiente, y rechazar un resultado con dinero ya cobrado lo manda a la DLQ.
24
+ */
25
+ const IsCentPrecision = (validationOptions) => (0, class_validator_1.ValidateBy)({
26
+ name: 'isCentPrecision',
27
+ validator: {
28
+ validate: (value) => (0, exports.hasCentPrecision)(value),
29
+ defaultMessage: () => '$property debe ser un monto con a lo más dos decimales',
30
+ },
31
+ }, validationOptions);
32
+ exports.IsCentPrecision = IsCentPrecision;
@@ -0,0 +1,12 @@
1
+ /** Largo máximo de un motivo de reasignación o redistribución. */
2
+ export declare const COLLECTOR_REASON_MAX_LENGTH = 500;
3
+ /** Al menos un carácter que no sea espacio: un motivo en blanco no explica nada. */
4
+ export declare const COLLECTOR_REASON_NON_BLANK_PATTERN: RegExp;
5
+ /** Ids de cadena, tienda, crédito y usuario: hoy ULID de 26; se acepta hasta 64 con guion y guion bajo. */
6
+ export declare const COLLECTOR_ID_PATTERN: RegExp;
7
+ export declare const COLLECTOR_ID_MAX_LENGTH = 64;
8
+ export declare const COLLECTOR_ID_MESSAGE = "El id admite letras, n\u00FAmeros, guion y guion bajo (m\u00E1ximo 64)";
9
+ /** Asignaciones por página del listado. */
10
+ export declare const COLLECTOR_ASSIGNMENTS_LIST_MAX_LIMIT = 100;
11
+ /** Largo máximo del cursor opaco del listado. */
12
+ export declare const COLLECTOR_ASSIGNMENTS_NEXT_TOKEN_MAX_LENGTH = 1024;
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.COLLECTOR_ASSIGNMENTS_NEXT_TOKEN_MAX_LENGTH = exports.COLLECTOR_ASSIGNMENTS_LIST_MAX_LIMIT = exports.COLLECTOR_ID_MESSAGE = exports.COLLECTOR_ID_MAX_LENGTH = exports.COLLECTOR_ID_PATTERN = exports.COLLECTOR_REASON_NON_BLANK_PATTERN = exports.COLLECTOR_REASON_MAX_LENGTH = void 0;
4
+ /** Largo máximo de un motivo de reasignación o redistribución. */
5
+ exports.COLLECTOR_REASON_MAX_LENGTH = 500;
6
+ /** Al menos un carácter que no sea espacio: un motivo en blanco no explica nada. */
7
+ exports.COLLECTOR_REASON_NON_BLANK_PATTERN = /\S/;
8
+ /** Ids de cadena, tienda, crédito y usuario: hoy ULID de 26; se acepta hasta 64 con guion y guion bajo. */
9
+ exports.COLLECTOR_ID_PATTERN = /^[A-Za-z0-9_-]+$/;
10
+ exports.COLLECTOR_ID_MAX_LENGTH = 64;
11
+ exports.COLLECTOR_ID_MESSAGE = 'El id admite letras, números, guion y guion bajo (máximo 64)';
12
+ /** Asignaciones por página del listado. */
13
+ exports.COLLECTOR_ASSIGNMENTS_LIST_MAX_LIMIT = 100;
14
+ /** Largo máximo del cursor opaco del listado. */
15
+ exports.COLLECTOR_ASSIGNMENTS_NEXT_TOKEN_MAX_LENGTH = 1024;
@@ -1,6 +1,7 @@
1
1
  /**
2
2
  * Body de POST /private/collector-assignments/auto-assign (hot path). Lo invoca loan-credit-business
3
3
  * al crearse un crédito (F3+); en F1 se prueba con `creditId` dummy. Elige cobrador y persiste ACTIVE.
4
+ * Los ids son llave en DynamoDB: largo y forma acotados (L-171).
4
5
  */
5
6
  export declare class AutoAssignRequest {
6
7
  retailerId: string;
@@ -12,9 +12,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.AutoAssignRequest = void 0;
13
13
  const class_transformer_1 = require("class-transformer");
14
14
  const class_validator_1 = require("class-validator");
15
+ const CollectorAssignmentLimits_1 = require("../../constants/CollectorAssignmentLimits");
15
16
  /**
16
17
  * Body de POST /private/collector-assignments/auto-assign (hot path). Lo invoca loan-credit-business
17
18
  * al crearse un crédito (F3+); en F1 se prueba con `creditId` dummy. Elige cobrador y persiste ACTIVE.
19
+ * Los ids son llave en DynamoDB: largo y forma acotados (L-171).
18
20
  */
19
21
  class AutoAssignRequest {
20
22
  }
@@ -23,17 +25,23 @@ __decorate([
23
25
  (0, class_transformer_1.Expose)(),
24
26
  (0, class_validator_1.IsString)(),
25
27
  (0, class_validator_1.IsNotEmpty)(),
28
+ (0, class_validator_1.MaxLength)(CollectorAssignmentLimits_1.COLLECTOR_ID_MAX_LENGTH),
29
+ (0, class_validator_1.Matches)(CollectorAssignmentLimits_1.COLLECTOR_ID_PATTERN, { message: CollectorAssignmentLimits_1.COLLECTOR_ID_MESSAGE }),
26
30
  __metadata("design:type", String)
27
31
  ], AutoAssignRequest.prototype, "retailerId", void 0);
28
32
  __decorate([
29
33
  (0, class_transformer_1.Expose)(),
30
34
  (0, class_validator_1.IsString)(),
31
35
  (0, class_validator_1.IsNotEmpty)(),
36
+ (0, class_validator_1.MaxLength)(CollectorAssignmentLimits_1.COLLECTOR_ID_MAX_LENGTH),
37
+ (0, class_validator_1.Matches)(CollectorAssignmentLimits_1.COLLECTOR_ID_PATTERN, { message: CollectorAssignmentLimits_1.COLLECTOR_ID_MESSAGE }),
32
38
  __metadata("design:type", String)
33
39
  ], AutoAssignRequest.prototype, "creditId", void 0);
34
40
  __decorate([
35
41
  (0, class_transformer_1.Expose)(),
36
42
  (0, class_validator_1.IsString)(),
37
43
  (0, class_validator_1.IsNotEmpty)(),
44
+ (0, class_validator_1.MaxLength)(CollectorAssignmentLimits_1.COLLECTOR_ID_MAX_LENGTH),
45
+ (0, class_validator_1.Matches)(CollectorAssignmentLimits_1.COLLECTOR_ID_PATTERN, { message: CollectorAssignmentLimits_1.COLLECTOR_ID_MESSAGE }),
38
46
  __metadata("design:type", String)
39
47
  ], AutoAssignRequest.prototype, "storeId", void 0);
@@ -0,0 +1,14 @@
1
+ import { AssignmentStatusEnum } from '../../enums/AssignmentStatusEnum';
2
+ /**
3
+ * Query de `GET /retailers/:retailerId/collector-assignments`. Todos opcionales: sin filtros lista
4
+ * la cadena completa, página por página (L-161, L-170). Los filtros llegan validados, no crudos.
5
+ */
6
+ export declare class ListCollectorAssignmentsRequest {
7
+ status?: AssignmentStatusEnum;
8
+ storeId?: string;
9
+ collectorUserId?: string;
10
+ /** Asignaciones por página, de 1 a 100. Sin él, el lambda pone su default. */
11
+ limit?: number;
12
+ /** Cursor opaco que devolvió la página anterior. */
13
+ nextToken?: string;
14
+ }
@@ -0,0 +1,62 @@
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.ListCollectorAssignmentsRequest = void 0;
13
+ const class_transformer_1 = require("class-transformer");
14
+ const class_validator_1 = require("class-validator");
15
+ const CollectorAssignmentLimits_1 = require("../../constants/CollectorAssignmentLimits");
16
+ const AssignmentStatusEnum_1 = require("../../enums/AssignmentStatusEnum");
17
+ /**
18
+ * Query de `GET /retailers/:retailerId/collector-assignments`. Todos opcionales: sin filtros lista
19
+ * la cadena completa, página por página (L-161, L-170). Los filtros llegan validados, no crudos.
20
+ */
21
+ class ListCollectorAssignmentsRequest {
22
+ }
23
+ exports.ListCollectorAssignmentsRequest = ListCollectorAssignmentsRequest;
24
+ __decorate([
25
+ (0, class_transformer_1.Expose)(),
26
+ (0, class_validator_1.IsOptional)(),
27
+ (0, class_validator_1.IsEnum)(AssignmentStatusEnum_1.AssignmentStatusEnum),
28
+ __metadata("design:type", String)
29
+ ], ListCollectorAssignmentsRequest.prototype, "status", void 0);
30
+ __decorate([
31
+ (0, class_transformer_1.Expose)(),
32
+ (0, class_validator_1.IsOptional)(),
33
+ (0, class_validator_1.IsString)(),
34
+ (0, class_validator_1.MaxLength)(CollectorAssignmentLimits_1.COLLECTOR_ID_MAX_LENGTH),
35
+ (0, class_validator_1.Matches)(CollectorAssignmentLimits_1.COLLECTOR_ID_PATTERN, { message: CollectorAssignmentLimits_1.COLLECTOR_ID_MESSAGE }),
36
+ __metadata("design:type", String)
37
+ ], ListCollectorAssignmentsRequest.prototype, "storeId", void 0);
38
+ __decorate([
39
+ (0, class_transformer_1.Expose)(),
40
+ (0, class_validator_1.IsOptional)(),
41
+ (0, class_validator_1.IsString)(),
42
+ (0, class_validator_1.MaxLength)(CollectorAssignmentLimits_1.COLLECTOR_ID_MAX_LENGTH),
43
+ (0, class_validator_1.Matches)(CollectorAssignmentLimits_1.COLLECTOR_ID_PATTERN, { message: CollectorAssignmentLimits_1.COLLECTOR_ID_MESSAGE }),
44
+ __metadata("design:type", String)
45
+ ], ListCollectorAssignmentsRequest.prototype, "collectorUserId", void 0);
46
+ __decorate([
47
+ (0, class_transformer_1.Expose)(),
48
+ (0, class_validator_1.IsOptional)(),
49
+ (0, class_transformer_1.Type)(() => Number),
50
+ (0, class_validator_1.IsInt)(),
51
+ (0, class_validator_1.Min)(1),
52
+ (0, class_validator_1.Max)(CollectorAssignmentLimits_1.COLLECTOR_ASSIGNMENTS_LIST_MAX_LIMIT),
53
+ __metadata("design:type", Number)
54
+ ], ListCollectorAssignmentsRequest.prototype, "limit", void 0);
55
+ __decorate([
56
+ (0, class_transformer_1.Expose)(),
57
+ (0, class_validator_1.IsOptional)(),
58
+ (0, class_validator_1.IsString)(),
59
+ (0, class_validator_1.IsNotEmpty)(),
60
+ (0, class_validator_1.MaxLength)(CollectorAssignmentLimits_1.COLLECTOR_ASSIGNMENTS_NEXT_TOKEN_MAX_LENGTH),
61
+ __metadata("design:type", String)
62
+ ], ListCollectorAssignmentsRequest.prototype, "nextToken", void 0);
@@ -1,6 +1,7 @@
1
1
  /**
2
2
  * Body de POST /retailers/:retailerId/collector-assignments/:assignmentId/reassign (reasignación manual).
3
3
  * `reason` obligatorio (auditoría de acción crítica — modelo-datos §10).
4
+ * Motivo no en blanco y de hasta 500 caracteres (L-171).
4
5
  */
5
6
  export declare class ReassignRequest {
6
7
  reason: string;
@@ -12,9 +12,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.ReassignRequest = void 0;
13
13
  const class_transformer_1 = require("class-transformer");
14
14
  const class_validator_1 = require("class-validator");
15
+ const CollectorAssignmentLimits_1 = require("../../constants/CollectorAssignmentLimits");
15
16
  /**
16
17
  * Body de POST /retailers/:retailerId/collector-assignments/:assignmentId/reassign (reasignación manual).
17
18
  * `reason` obligatorio (auditoría de acción crítica — modelo-datos §10).
19
+ * Motivo no en blanco y de hasta 500 caracteres (L-171).
18
20
  */
19
21
  class ReassignRequest {
20
22
  }
@@ -23,5 +25,7 @@ __decorate([
23
25
  (0, class_transformer_1.Expose)(),
24
26
  (0, class_validator_1.IsString)(),
25
27
  (0, class_validator_1.IsNotEmpty)(),
28
+ (0, class_validator_1.Matches)(CollectorAssignmentLimits_1.COLLECTOR_REASON_NON_BLANK_PATTERN, { message: 'reason no puede ir en blanco' }),
29
+ (0, class_validator_1.MaxLength)(CollectorAssignmentLimits_1.COLLECTOR_REASON_MAX_LENGTH),
26
30
  __metadata("design:type", String)
27
31
  ], ReassignRequest.prototype, "reason", void 0);
@@ -1,6 +1,7 @@
1
1
  /**
2
2
  * Body de POST /retailers/:retailerId/collectors/:userId/redistribute. Redistribuye la cartera activa de
3
3
  * un cobrador (ej. al desactivarlo). `reason` obligatorio (ej. `USER_INACTIVATED`) — auditoría §10.
4
+ * Motivo no en blanco y de hasta 500 caracteres (L-171).
4
5
  */
5
6
  export declare class RedistributeRequest {
6
7
  reason: string;
@@ -12,9 +12,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.RedistributeRequest = void 0;
13
13
  const class_transformer_1 = require("class-transformer");
14
14
  const class_validator_1 = require("class-validator");
15
+ const CollectorAssignmentLimits_1 = require("../../constants/CollectorAssignmentLimits");
15
16
  /**
16
17
  * Body de POST /retailers/:retailerId/collectors/:userId/redistribute. Redistribuye la cartera activa de
17
18
  * un cobrador (ej. al desactivarlo). `reason` obligatorio (ej. `USER_INACTIVATED`) — auditoría §10.
19
+ * Motivo no en blanco y de hasta 500 caracteres (L-171).
18
20
  */
19
21
  class RedistributeRequest {
20
22
  }
@@ -23,5 +25,7 @@ __decorate([
23
25
  (0, class_transformer_1.Expose)(),
24
26
  (0, class_validator_1.IsString)(),
25
27
  (0, class_validator_1.IsNotEmpty)(),
28
+ (0, class_validator_1.Matches)(CollectorAssignmentLimits_1.COLLECTOR_REASON_NON_BLANK_PATTERN, { message: 'reason no puede ir en blanco' }),
29
+ (0, class_validator_1.MaxLength)(CollectorAssignmentLimits_1.COLLECTOR_REASON_MAX_LENGTH),
26
30
  __metadata("design:type", String)
27
31
  ], RedistributeRequest.prototype, "reason", void 0);
@@ -0,0 +1,9 @@
1
+ import { CollectorAssignmentResponse } from './CollectorAssignmentResponse';
2
+ /**
3
+ * Respuesta de `GET /retailers/:retailerId/collector-assignments`. Conserva la clave `assignments`
4
+ * que ya lee la webapp; `nextToken` viene solo si hay otra página (ausente en la última).
5
+ */
6
+ export interface ListCollectorAssignmentsResponse {
7
+ assignments: CollectorAssignmentResponse[];
8
+ nextToken?: string;
9
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -1,12 +1,15 @@
1
1
  export * from './enums/AssignmentStrategyEnum';
2
2
  export * from './enums/AssignmentStatusEnum';
3
+ export * from './constants/CollectorAssignmentLimits';
3
4
  export * from './dtos/PriorityWeights';
4
5
  export * from './dtos/requests/CreateAssignmentRuleRequest';
5
6
  export * from './dtos/requests/UpdateAssignmentRuleRequest';
6
7
  export * from './dtos/requests/AutoAssignRequest';
7
8
  export * from './dtos/requests/ReassignRequest';
8
9
  export * from './dtos/requests/RedistributeRequest';
10
+ export * from './dtos/requests/ListCollectorAssignmentsRequest';
9
11
  export * from './dtos/responses/AssignmentRuleResponse';
10
12
  export * from './dtos/responses/CollectorAssignmentResponse';
11
13
  export * from './dtos/responses/CollectorLoadResponse';
12
14
  export * from './dtos/responses/RedistributeSummaryResponse';
15
+ export * from './dtos/responses/ListCollectorAssignmentsResponse';
@@ -17,6 +17,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
17
17
  // Enums
18
18
  __exportStar(require("./enums/AssignmentStrategyEnum"), exports);
19
19
  __exportStar(require("./enums/AssignmentStatusEnum"), exports);
20
+ // Constantes
21
+ __exportStar(require("./constants/CollectorAssignmentLimits"), exports);
20
22
  // Shared DTOs
21
23
  __exportStar(require("./dtos/PriorityWeights"), exports);
22
24
  // Request DTOs
@@ -25,8 +27,10 @@ __exportStar(require("./dtos/requests/UpdateAssignmentRuleRequest"), exports);
25
27
  __exportStar(require("./dtos/requests/AutoAssignRequest"), exports);
26
28
  __exportStar(require("./dtos/requests/ReassignRequest"), exports);
27
29
  __exportStar(require("./dtos/requests/RedistributeRequest"), exports);
30
+ __exportStar(require("./dtos/requests/ListCollectorAssignmentsRequest"), exports);
28
31
  // Response DTOs
29
32
  __exportStar(require("./dtos/responses/AssignmentRuleResponse"), exports);
30
33
  __exportStar(require("./dtos/responses/CollectorAssignmentResponse"), exports);
31
34
  __exportStar(require("./dtos/responses/CollectorLoadResponse"), exports);
32
35
  __exportStar(require("./dtos/responses/RedistributeSummaryResponse"), exports);
36
+ __exportStar(require("./dtos/responses/ListCollectorAssignmentsResponse"), exports);
@@ -0,0 +1,8 @@
1
+ /** Claves por llamada a bulk-get: el límite de BatchGetItem. Los consumidores mandan 20 o menos. */
2
+ export declare const BULK_GET_PARAMETERS_MAX_ITEMS = 100;
3
+ /** Parámetros por llamada a bulk-update; la webapp manda solo los editados (hoy 22 como máximo). */
4
+ export declare const BULK_UPDATE_PARAMETERS_MAX_ITEMS = 50;
5
+ /** Largo máximo del motivo de un cambio de parámetro. */
6
+ export declare const PARAMETER_REASON_MAX_LENGTH = 500;
7
+ /** Al menos un carácter que no sea espacio: un motivo en blanco no explica nada. */
8
+ export declare const PARAMETER_REASON_NON_BLANK_PATTERN: RegExp;
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PARAMETER_REASON_NON_BLANK_PATTERN = exports.PARAMETER_REASON_MAX_LENGTH = exports.BULK_UPDATE_PARAMETERS_MAX_ITEMS = exports.BULK_GET_PARAMETERS_MAX_ITEMS = void 0;
4
+ /** Claves por llamada a bulk-get: el límite de BatchGetItem. Los consumidores mandan 20 o menos. */
5
+ exports.BULK_GET_PARAMETERS_MAX_ITEMS = 100;
6
+ /** Parámetros por llamada a bulk-update; la webapp manda solo los editados (hoy 22 como máximo). */
7
+ exports.BULK_UPDATE_PARAMETERS_MAX_ITEMS = 50;
8
+ /** Largo máximo del motivo de un cambio de parámetro. */
9
+ exports.PARAMETER_REASON_MAX_LENGTH = 500;
10
+ /** Al menos un carácter que no sea espacio: un motivo en blanco no explica nada. */
11
+ exports.PARAMETER_REASON_NON_BLANK_PATTERN = /\S/;
@@ -3,7 +3,7 @@ export declare class ParameterKeyRef {
3
3
  paramType: ParameterTypeEnum;
4
4
  key: string;
5
5
  }
6
- /** Body de POST /private/parameters/bulk-get — hot path para consumers (cachean 5 min). */
6
+ /** Body de POST /private/parameters/bulk-get — hot path para consumers (cachean 5 min). Hasta 100 claves. */
7
7
  export declare class BulkGetParametersRequest {
8
8
  items: ParameterKeyRef[];
9
9
  }
@@ -12,6 +12,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.BulkGetParametersRequest = exports.ParameterKeyRef = void 0;
13
13
  const class_transformer_1 = require("class-transformer");
14
14
  const class_validator_1 = require("class-validator");
15
+ const ParameterRequestLimits_1 = require("../../constants/ParameterRequestLimits");
15
16
  const ParameterTypeEnum_1 = require("../../enums/ParameterTypeEnum");
16
17
  class ParameterKeyRef {
17
18
  }
@@ -26,7 +27,7 @@ __decorate([
26
27
  (0, class_validator_1.IsString)(),
27
28
  __metadata("design:type", String)
28
29
  ], ParameterKeyRef.prototype, "key", void 0);
29
- /** Body de POST /private/parameters/bulk-get — hot path para consumers (cachean 5 min). */
30
+ /** Body de POST /private/parameters/bulk-get — hot path para consumers (cachean 5 min). Hasta 100 claves. */
30
31
  class BulkGetParametersRequest {
31
32
  }
32
33
  exports.BulkGetParametersRequest = BulkGetParametersRequest;
@@ -34,6 +35,7 @@ __decorate([
34
35
  (0, class_transformer_1.Expose)(),
35
36
  (0, class_validator_1.IsArray)(),
36
37
  (0, class_validator_1.ArrayNotEmpty)(),
38
+ (0, class_validator_1.ArrayMaxSize)(ParameterRequestLimits_1.BULK_GET_PARAMETERS_MAX_ITEMS),
37
39
  (0, class_validator_1.ValidateNested)({ each: true }),
38
40
  (0, class_transformer_1.Type)(() => ParameterKeyRef),
39
41
  __metadata("design:type", Array)
@@ -1,11 +1,14 @@
1
1
  import { ParameterTypeEnum } from '../../enums/ParameterTypeEnum';
2
+ /** Un parámetro del lote. Mismas reglas que `UpdateParameterRequest` para `value` y `reason`. */
2
3
  export declare class BulkUpdateParameterItem {
3
4
  paramType: ParameterTypeEnum;
4
5
  key: string;
6
+ /** Obligatorio; `null` deja el parámetro pendiente. */
5
7
  value: string | null;
6
- reason?: string;
8
+ /** Obligatorio, no en blanco y de hasta 500 caracteres. */
9
+ reason: string;
7
10
  }
8
- /** Body de POST /parameters/bulk-update — carga inicial / ajuste masivo. */
11
+ /** Body de POST /parameters/bulk-update — carga inicial / ajuste masivo. Hasta 50 parámetros. */
9
12
  export declare class BulkUpdateParametersRequest {
10
13
  parameters: BulkUpdateParameterItem[];
11
14
  }
@@ -12,7 +12,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.BulkUpdateParametersRequest = exports.BulkUpdateParameterItem = void 0;
13
13
  const class_transformer_1 = require("class-transformer");
14
14
  const class_validator_1 = require("class-validator");
15
+ const ParameterRequestLimits_1 = require("../../constants/ParameterRequestLimits");
15
16
  const ParameterTypeEnum_1 = require("../../enums/ParameterTypeEnum");
17
+ /** Un parámetro del lote. Mismas reglas que `UpdateParameterRequest` para `value` y `reason`. */
16
18
  class BulkUpdateParameterItem {
17
19
  }
18
20
  exports.BulkUpdateParameterItem = BulkUpdateParameterItem;
@@ -28,17 +30,18 @@ __decorate([
28
30
  ], BulkUpdateParameterItem.prototype, "key", void 0);
29
31
  __decorate([
30
32
  (0, class_transformer_1.Expose)(),
31
- (0, class_validator_1.IsOptional)(),
32
- (0, class_validator_1.IsString)(),
33
+ (0, class_validator_1.ValidateIf)((item) => item.value !== null),
34
+ (0, class_validator_1.IsString)({ message: 'value es obligatorio: un string, o null para dejar el parámetro pendiente' }),
33
35
  __metadata("design:type", String)
34
36
  ], BulkUpdateParameterItem.prototype, "value", void 0);
35
37
  __decorate([
36
38
  (0, class_transformer_1.Expose)(),
37
- (0, class_validator_1.IsOptional)(),
38
39
  (0, class_validator_1.IsString)(),
40
+ (0, class_validator_1.Matches)(ParameterRequestLimits_1.PARAMETER_REASON_NON_BLANK_PATTERN, { message: 'reason no puede ir vacío ni en blanco' }),
41
+ (0, class_validator_1.MaxLength)(ParameterRequestLimits_1.PARAMETER_REASON_MAX_LENGTH),
39
42
  __metadata("design:type", String)
40
43
  ], BulkUpdateParameterItem.prototype, "reason", void 0);
41
- /** Body de POST /parameters/bulk-update — carga inicial / ajuste masivo. */
44
+ /** Body de POST /parameters/bulk-update — carga inicial / ajuste masivo. Hasta 50 parámetros. */
42
45
  class BulkUpdateParametersRequest {
43
46
  }
44
47
  exports.BulkUpdateParametersRequest = BulkUpdateParametersRequest;
@@ -46,6 +49,7 @@ __decorate([
46
49
  (0, class_transformer_1.Expose)(),
47
50
  (0, class_validator_1.IsArray)(),
48
51
  (0, class_validator_1.ArrayNotEmpty)(),
52
+ (0, class_validator_1.ArrayMaxSize)(ParameterRequestLimits_1.BULK_UPDATE_PARAMETERS_MAX_ITEMS),
49
53
  (0, class_validator_1.ValidateNested)({ each: true }),
50
54
  (0, class_transformer_1.Type)(() => BulkUpdateParameterItem),
51
55
  __metadata("design:type", Array)
@@ -1,8 +1,11 @@
1
1
  /**
2
- * Body de PUT /parameters/:paramType/:key. `value` puede ser null (parámetro pendiente).
3
- * `reason` opcional en F1; el manager lo exigirá para cambios críticos (modelo-datos §10).
2
+ * Body de PUT /parameters/:paramType/:key.
3
+ *
4
+ * - `value` es obligatorio pero puede ser `null` (parámetro pendiente). Omitirlo da 400: antes borraba
5
+ * el valor y respondía 200 (L-140).
6
+ * - `reason` es obligatorio, no en blanco y de hasta 500 caracteres (decisión D-7, L-139).
4
7
  */
5
8
  export declare class UpdateParameterRequest {
6
9
  value: string | null;
7
- reason?: string;
10
+ reason: string;
8
11
  }
@@ -12,22 +12,27 @@ Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.UpdateParameterRequest = void 0;
13
13
  const class_transformer_1 = require("class-transformer");
14
14
  const class_validator_1 = require("class-validator");
15
+ const ParameterRequestLimits_1 = require("../../constants/ParameterRequestLimits");
15
16
  /**
16
- * Body de PUT /parameters/:paramType/:key. `value` puede ser null (parámetro pendiente).
17
- * `reason` opcional en F1; el manager lo exigirá para cambios críticos (modelo-datos §10).
17
+ * Body de PUT /parameters/:paramType/:key.
18
+ *
19
+ * - `value` es obligatorio pero puede ser `null` (parámetro pendiente). Omitirlo da 400: antes borraba
20
+ * el valor y respondía 200 (L-140).
21
+ * - `reason` es obligatorio, no en blanco y de hasta 500 caracteres (decisión D-7, L-139).
18
22
  */
19
23
  class UpdateParameterRequest {
20
24
  }
21
25
  exports.UpdateParameterRequest = UpdateParameterRequest;
22
26
  __decorate([
23
27
  (0, class_transformer_1.Expose)(),
24
- (0, class_validator_1.IsOptional)(),
25
- (0, class_validator_1.IsString)(),
28
+ (0, class_validator_1.ValidateIf)((request) => request.value !== null),
29
+ (0, class_validator_1.IsString)({ message: 'value es obligatorio: un string, o null para dejar el parámetro pendiente' }),
26
30
  __metadata("design:type", String)
27
31
  ], UpdateParameterRequest.prototype, "value", void 0);
28
32
  __decorate([
29
33
  (0, class_transformer_1.Expose)(),
30
- (0, class_validator_1.IsOptional)(),
31
34
  (0, class_validator_1.IsString)(),
35
+ (0, class_validator_1.Matches)(ParameterRequestLimits_1.PARAMETER_REASON_NON_BLANK_PATTERN, { message: 'reason no puede ir vacío ni en blanco' }),
36
+ (0, class_validator_1.MaxLength)(ParameterRequestLimits_1.PARAMETER_REASON_MAX_LENGTH),
32
37
  __metadata("design:type", String)
33
38
  ], UpdateParameterRequest.prototype, "reason", void 0);
@@ -1,6 +1,7 @@
1
1
  export * from './enums/ParameterTypeEnum';
2
2
  export * from './enums/ParameterValueTypeEnum';
3
3
  export * from './constants/RecentParameterChangesLimits';
4
+ export * from './constants/ParameterRequestLimits';
4
5
  export * from './dtos/Parameter';
5
6
  export * from './dtos/requests/UpdateParameterRequest';
6
7
  export * from './dtos/requests/BulkUpdateParametersRequest';
@@ -18,6 +18,7 @@ __exportStar(require("./enums/ParameterTypeEnum"), exports);
18
18
  __exportStar(require("./enums/ParameterValueTypeEnum"), exports);
19
19
  // Constants
20
20
  __exportStar(require("./constants/RecentParameterChangesLimits"), exports);
21
+ __exportStar(require("./constants/ParameterRequestLimits"), exports);
21
22
  // Entity DTOs
22
23
  __exportStar(require("./dtos/Parameter"), exports);
23
24
  // Request DTOs
@@ -0,0 +1,24 @@
1
+ /** Plazo máximo de un crédito en semanas, en el alta y en la reestructura. */
2
+ export declare const LOAN_MAX_TERM_WEEKS = 104;
3
+ /**
4
+ * Techo técnico de un monto en centavos: 100 000 millones de centavos (1 000 millones de pesos).
5
+ *
6
+ * No es política de negocio: un equipo cuesta decenas de miles de pesos. Deja cuatro órdenes de
7
+ * margen bajo `Number.MAX_SAFE_INTEGER` para que intereses, IVA y sumas de cuotas no pierdan el centavo.
8
+ */
9
+ export declare const LOAN_AMOUNT_MAX_CENTS = 100000000000;
10
+ /** Largo máximo de un texto libre del backoffice (motivo, justificación); igual que la cancelación. */
11
+ export declare const LOAN_FREE_TEXT_MAX_LENGTH = 500;
12
+ /**
13
+ * Forma aceptada de un `retailCustomerId`. Laxa a propósito: el formato lo define retail-customer
14
+ * (hoy un ULID), así que solo se rechaza lo que no puede ser un id (espacios, comas, símbolos).
15
+ */
16
+ export declare const RETAIL_CUSTOMER_ID_PATTERN: RegExp;
17
+ export declare const RETAIL_CUSTOMER_ID_MESSAGE = "retailCustomerId admite letras, n\u00FAmeros, guion y guion bajo (m\u00E1ximo 64)";
18
+ /** CLABE interbancaria: exactamente 18 dígitos. La aplica el dominio (D9); el DTO del contrato solo acota el largo. */
19
+ export declare const CLABE_PATTERN: RegExp;
20
+ export declare const CLABE_MESSAGE = "La CLABE debe tener 18 d\u00EDgitos";
21
+ /** Teléfono en E.164: `+`, código de país y número; 16 caracteres como máximo. */
22
+ export declare const E164_PHONE_PATTERN: RegExp;
23
+ export declare const E164_PHONE_MAX_LENGTH = 16;
24
+ export declare const E164_PHONE_MESSAGE = "El tel\u00E9fono debe ir en formato E.164 (por ejemplo +525512345678)";
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.E164_PHONE_MESSAGE = exports.E164_PHONE_MAX_LENGTH = exports.E164_PHONE_PATTERN = exports.CLABE_MESSAGE = exports.CLABE_PATTERN = exports.RETAIL_CUSTOMER_ID_MESSAGE = exports.RETAIL_CUSTOMER_ID_PATTERN = exports.LOAN_FREE_TEXT_MAX_LENGTH = exports.LOAN_AMOUNT_MAX_CENTS = exports.LOAN_MAX_TERM_WEEKS = void 0;
4
+ /** Plazo máximo de un crédito en semanas, en el alta y en la reestructura. */
5
+ exports.LOAN_MAX_TERM_WEEKS = 104;
6
+ /**
7
+ * Techo técnico de un monto en centavos: 100 000 millones de centavos (1 000 millones de pesos).
8
+ *
9
+ * No es política de negocio: un equipo cuesta decenas de miles de pesos. Deja cuatro órdenes de
10
+ * margen bajo `Number.MAX_SAFE_INTEGER` para que intereses, IVA y sumas de cuotas no pierdan el centavo.
11
+ */
12
+ exports.LOAN_AMOUNT_MAX_CENTS = 100000000000;
13
+ /** Largo máximo de un texto libre del backoffice (motivo, justificación); igual que la cancelación. */
14
+ exports.LOAN_FREE_TEXT_MAX_LENGTH = 500;
15
+ /**
16
+ * Forma aceptada de un `retailCustomerId`. Laxa a propósito: el formato lo define retail-customer
17
+ * (hoy un ULID), así que solo se rechaza lo que no puede ser un id (espacios, comas, símbolos).
18
+ */
19
+ exports.RETAIL_CUSTOMER_ID_PATTERN = /^[0-9A-Za-z_-]{1,64}$/;
20
+ exports.RETAIL_CUSTOMER_ID_MESSAGE = 'retailCustomerId admite letras, números, guion y guion bajo (máximo 64)';
21
+ /** CLABE interbancaria: exactamente 18 dígitos. La aplica el dominio (D9); el DTO del contrato solo acota el largo. */
22
+ exports.CLABE_PATTERN = /^\d{18}$/;
23
+ exports.CLABE_MESSAGE = 'La CLABE debe tener 18 dígitos';
24
+ /** Teléfono en E.164: `+`, código de país y número; 16 caracteres como máximo. */
25
+ exports.E164_PHONE_PATTERN = /^\+[1-9]\d{7,14}$/;
26
+ exports.E164_PHONE_MAX_LENGTH = 16;
27
+ exports.E164_PHONE_MESSAGE = 'El teléfono debe ir en formato E.164 (por ejemplo +525512345678)';
@@ -1,5 +1,6 @@
1
1
  /**
2
2
  * Beneficiario declarado por el acreditado (modelo-datos §5b `LoanBorrower.beneficiary`).
3
+ * Textos con tope y teléfono MX de 10 dígitos, con `+52` opcional (L-031).
3
4
  */
4
5
  export declare class LoanBeneficiary {
5
6
  fullName: string;
@@ -12,8 +12,14 @@ Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.LoanBeneficiary = void 0;
13
13
  const class_transformer_1 = require("class-transformer");
14
14
  const class_validator_1 = require("class-validator");
15
+ const IsMxPhone_1 = require("../../common/validators/IsMxPhone");
16
+ /** Largo máximo del nombre completo, igual que en el contrato. */
17
+ const FULL_NAME_MAX_LENGTH = 300;
18
+ /** Largo máximo del parentesco. */
19
+ const RELATIONSHIP_MAX_LENGTH = 120;
15
20
  /**
16
21
  * Beneficiario declarado por el acreditado (modelo-datos §5b `LoanBorrower.beneficiary`).
22
+ * Textos con tope y teléfono MX de 10 dígitos, con `+52` opcional (L-031).
17
23
  */
18
24
  class LoanBeneficiary {
19
25
  }
@@ -22,17 +28,20 @@ __decorate([
22
28
  (0, class_transformer_1.Expose)(),
23
29
  (0, class_validator_1.IsString)(),
24
30
  (0, class_validator_1.IsNotEmpty)(),
31
+ (0, class_validator_1.MaxLength)(FULL_NAME_MAX_LENGTH),
25
32
  __metadata("design:type", String)
26
33
  ], LoanBeneficiary.prototype, "fullName", void 0);
27
34
  __decorate([
28
35
  (0, class_transformer_1.Expose)(),
29
36
  (0, class_validator_1.IsOptional)(),
30
37
  (0, class_validator_1.IsString)(),
38
+ (0, class_validator_1.MaxLength)(RELATIONSHIP_MAX_LENGTH),
31
39
  __metadata("design:type", String)
32
40
  ], LoanBeneficiary.prototype, "relationship", void 0);
33
41
  __decorate([
34
42
  (0, class_transformer_1.Expose)(),
35
43
  (0, class_validator_1.IsOptional)(),
36
44
  (0, class_validator_1.IsString)(),
45
+ (0, IsMxPhone_1.IsMxPhone)(),
37
46
  __metadata("design:type", String)
38
47
  ], LoanBeneficiary.prototype, "phone", void 0);
@@ -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([