@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
@@ -2,11 +2,17 @@ import { ProductTierEnum } from '../../enums/ProductTierEnum';
2
2
  /**
3
3
  * Body de PUT /financiers/:financierId — edición parcial (todos opcionales).
4
4
  * `code`, `type` y `displayOrder` no se editan aquí (identidad / orden por endpoint dedicado).
5
+ * `null` se acepta en `externalRedirectUrl`, `eligibleTiers` y `config`; en `name` y `label` da 400.
5
6
  */
6
7
  export declare class UpdateFinancierRequest {
7
8
  name?: string;
8
9
  label?: string;
10
+ /** URL https a la que se redirige al cliente; `null` = sin redirección. */
9
11
  externalRedirectUrl?: string | null;
10
12
  eligibleTiers?: ProductTierEnum[] | null;
13
+ /**
14
+ * @deprecated Ningún consumidor lo lee (TD-019 de loan-offerings) y se va a eliminar (decisión
15
+ * D-9). Mientras tanto, a lo más 4 KB serializado.
16
+ */
11
17
  config?: Record<string, unknown> | null;
12
18
  }
@@ -12,30 +12,40 @@ Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.UpdateFinancierRequest = 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 ProductTierEnum_1 = require("../../enums/ProductTierEnum");
17
+ const IsOptionalNonNull_1 = require("../../validators/IsOptionalNonNull");
18
+ const MaxJsonBytes_1 = require("../../validators/MaxJsonBytes");
16
19
  /**
17
20
  * Body de PUT /financiers/:financierId — edición parcial (todos opcionales).
18
21
  * `code`, `type` y `displayOrder` no se editan aquí (identidad / orden por endpoint dedicado).
22
+ * `null` se acepta en `externalRedirectUrl`, `eligibleTiers` y `config`; en `name` y `label` da 400.
19
23
  */
20
24
  class UpdateFinancierRequest {
21
25
  }
22
26
  exports.UpdateFinancierRequest = UpdateFinancierRequest;
23
27
  __decorate([
24
28
  (0, class_transformer_1.Expose)(),
25
- (0, class_validator_1.IsOptional)(),
29
+ (0, IsOptionalNonNull_1.IsOptionalNonNull)(),
26
30
  (0, class_validator_1.IsString)(),
31
+ (0, class_validator_1.IsNotEmpty)(),
32
+ (0, class_validator_1.MaxLength)(offeringsInputLimits_1.OFFERINGS_NAME_MAX_LENGTH),
27
33
  __metadata("design:type", String)
28
34
  ], UpdateFinancierRequest.prototype, "name", void 0);
29
35
  __decorate([
30
36
  (0, class_transformer_1.Expose)(),
31
- (0, class_validator_1.IsOptional)(),
37
+ (0, IsOptionalNonNull_1.IsOptionalNonNull)(),
32
38
  (0, class_validator_1.IsString)(),
39
+ (0, class_validator_1.IsNotEmpty)(),
40
+ (0, class_validator_1.MaxLength)(offeringsInputLimits_1.OFFERINGS_LABEL_MAX_LENGTH),
33
41
  __metadata("design:type", String)
34
42
  ], UpdateFinancierRequest.prototype, "label", void 0);
35
43
  __decorate([
36
44
  (0, class_transformer_1.Expose)(),
37
45
  (0, class_validator_1.IsOptional)(),
38
46
  (0, class_validator_1.IsString)(),
47
+ (0, class_validator_1.MaxLength)(offeringsInputLimits_1.FINANCIER_REDIRECT_URL_MAX_LENGTH),
48
+ (0, class_validator_1.IsUrl)({ protocols: ['https'], require_protocol: true }),
39
49
  __metadata("design:type", String)
40
50
  ], UpdateFinancierRequest.prototype, "externalRedirectUrl", void 0);
41
51
  __decorate([
@@ -49,5 +59,6 @@ __decorate([
49
59
  (0, class_transformer_1.Expose)(),
50
60
  (0, class_validator_1.IsOptional)(),
51
61
  (0, class_validator_1.IsObject)(),
62
+ (0, MaxJsonBytes_1.MaxJsonBytes)(offeringsInputLimits_1.FINANCIER_CONFIG_MAX_BYTES),
52
63
  __metadata("design:type", Object)
53
64
  ], UpdateFinancierRequest.prototype, "config", void 0);
@@ -6,6 +6,9 @@ import { PromotionEffectInput } from './PromotionEffectInput';
6
6
  * Body de PUT /promotions/:promotionId — edición parcial (todos los campos opcionales).
7
7
  * Solo se admite sobre `DRAFT` y `PUBLISHED`, y sube `version`. El cambio de estado va por su
8
8
  * endpoint dedicado. `effect` se reemplaza entero cuando viene, no se mergea clave a clave.
9
+ *
10
+ * Ausente deja el campo como está. `null` solo se acepta en los alcances, las fechas y el
11
+ * presupuesto, que lo declaran; en `name`, `description`, `effect`, `segmentId` y `targetLevels` da 400.
9
12
  */
10
13
  export declare class UpdatePromotionRequest {
11
14
  name?: string;
@@ -13,6 +16,7 @@ export declare class UpdatePromotionRequest {
13
16
  effect?: PromotionEffectInput;
14
17
  segmentId?: string;
15
18
  targetLevels?: CreditPlanLevelEnum[];
19
+ /** SKUs alcanzados; `null` = todos los productos. Hasta 2 000. */
16
20
  productSkus?: string[] | null;
17
21
  /** Tipos de producto alcanzados; ausente o `null` = todos los tipos. */
18
22
  productCategories?: ProductCategoryEnum[] | null;
@@ -20,9 +24,11 @@ export declare class UpdatePromotionRequest {
20
24
  tiers?: ProductTierEnum[] | null;
21
25
  /** Cadenas alcanzadas; ausente, `null` o vacío = todas las cadenas. */
22
26
  retailerIds?: string[] | null;
23
- /** Tiendas alcanzadas. `null` o ausente = todas. */
27
+ /** Tiendas alcanzadas. `null` o ausente = todas. Hasta 1 000. */
24
28
  storeIds?: string[] | null;
25
29
  validFrom?: string | null;
26
30
  validUntil?: string | null;
27
31
  budgetMaxCents?: number | null;
32
+ /** Motivo del cambio; queda en la bitácora de la promoción. */
33
+ reason?: string;
28
34
  }
@@ -12,47 +12,56 @@ Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.UpdatePromotionRequest = 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 promotionRetailerScope_1 = require("../../constants/promotionRetailerScope");
16
17
  const CreditPlanLevelEnum_1 = require("../../enums/CreditPlanLevelEnum");
17
18
  const ProductCategoryEnum_1 = require("../../../retailCatalog/enums/ProductCategoryEnum");
18
19
  const ProductTierEnum_1 = require("../../../retailCatalog/enums/ProductTierEnum");
20
+ const IsOptionalNonNull_1 = require("../../validators/IsOptionalNonNull");
19
21
  const PromotionEffectInput_1 = require("./PromotionEffectInput");
20
22
  /**
21
23
  * Body de PUT /promotions/:promotionId — edición parcial (todos los campos opcionales).
22
24
  * Solo se admite sobre `DRAFT` y `PUBLISHED`, y sube `version`. El cambio de estado va por su
23
25
  * endpoint dedicado. `effect` se reemplaza entero cuando viene, no se mergea clave a clave.
26
+ *
27
+ * Ausente deja el campo como está. `null` solo se acepta en los alcances, las fechas y el
28
+ * presupuesto, que lo declaran; en `name`, `description`, `effect`, `segmentId` y `targetLevels` da 400.
24
29
  */
25
30
  class UpdatePromotionRequest {
26
31
  }
27
32
  exports.UpdatePromotionRequest = UpdatePromotionRequest;
28
33
  __decorate([
29
34
  (0, class_transformer_1.Expose)(),
30
- (0, class_validator_1.IsOptional)(),
35
+ (0, IsOptionalNonNull_1.IsOptionalNonNull)(),
31
36
  (0, class_validator_1.IsString)(),
37
+ (0, class_validator_1.IsNotEmpty)(),
38
+ (0, class_validator_1.MaxLength)(offeringsInputLimits_1.OFFERINGS_NAME_MAX_LENGTH),
32
39
  __metadata("design:type", String)
33
40
  ], UpdatePromotionRequest.prototype, "name", void 0);
34
41
  __decorate([
35
42
  (0, class_transformer_1.Expose)(),
36
- (0, class_validator_1.IsOptional)(),
43
+ (0, IsOptionalNonNull_1.IsOptionalNonNull)(),
37
44
  (0, class_validator_1.IsString)(),
45
+ (0, class_validator_1.IsNotEmpty)(),
46
+ (0, class_validator_1.MaxLength)(offeringsInputLimits_1.OFFERINGS_DESCRIPTION_MAX_LENGTH),
38
47
  __metadata("design:type", String)
39
48
  ], UpdatePromotionRequest.prototype, "description", void 0);
40
49
  __decorate([
41
50
  (0, class_transformer_1.Expose)(),
42
- (0, class_validator_1.IsOptional)(),
51
+ (0, IsOptionalNonNull_1.IsOptionalNonNull)(),
43
52
  (0, class_validator_1.ValidateNested)(),
44
53
  (0, class_transformer_1.Type)(() => PromotionEffectInput_1.PromotionEffectInput),
45
54
  __metadata("design:type", PromotionEffectInput_1.PromotionEffectInput)
46
55
  ], UpdatePromotionRequest.prototype, "effect", void 0);
47
56
  __decorate([
48
57
  (0, class_transformer_1.Expose)(),
49
- (0, class_validator_1.IsOptional)(),
58
+ (0, IsOptionalNonNull_1.IsOptionalNonNull)(),
50
59
  (0, class_validator_1.IsString)(),
51
60
  __metadata("design:type", String)
52
61
  ], UpdatePromotionRequest.prototype, "segmentId", void 0);
53
62
  __decorate([
54
63
  (0, class_transformer_1.Expose)(),
55
- (0, class_validator_1.IsOptional)(),
64
+ (0, IsOptionalNonNull_1.IsOptionalNonNull)(),
56
65
  (0, class_validator_1.IsArray)(),
57
66
  (0, class_validator_1.ArrayNotEmpty)(),
58
67
  (0, class_validator_1.IsEnum)(CreditPlanLevelEnum_1.CreditPlanLevelEnum, { each: true }),
@@ -62,7 +71,9 @@ __decorate([
62
71
  (0, class_transformer_1.Expose)(),
63
72
  (0, class_validator_1.IsOptional)(),
64
73
  (0, class_validator_1.IsArray)(),
74
+ (0, class_validator_1.ArrayMaxSize)(offeringsInputLimits_1.PROMOTION_PRODUCT_SKUS_MAX_ITEMS),
65
75
  (0, class_validator_1.IsString)({ each: true }),
76
+ (0, class_validator_1.IsNotEmpty)({ each: true }),
66
77
  __metadata("design:type", Array)
67
78
  ], UpdatePromotionRequest.prototype, "productSkus", void 0);
68
79
  __decorate([
@@ -92,7 +103,9 @@ __decorate([
92
103
  (0, class_transformer_1.Expose)(),
93
104
  (0, class_validator_1.IsOptional)(),
94
105
  (0, class_validator_1.IsArray)(),
106
+ (0, class_validator_1.ArrayMaxSize)(offeringsInputLimits_1.SCOPE_STORE_IDS_MAX_ITEMS),
95
107
  (0, class_validator_1.IsString)({ each: true }),
108
+ (0, class_validator_1.IsNotEmpty)({ each: true }),
96
109
  __metadata("design:type", Array)
97
110
  ], UpdatePromotionRequest.prototype, "storeIds", void 0);
98
111
  __decorate([
@@ -113,3 +126,10 @@ __decorate([
113
126
  (0, class_validator_1.IsInt)(),
114
127
  __metadata("design:type", Number)
115
128
  ], UpdatePromotionRequest.prototype, "budgetMaxCents", void 0);
129
+ __decorate([
130
+ (0, class_transformer_1.Expose)(),
131
+ (0, class_validator_1.IsOptional)(),
132
+ (0, class_validator_1.IsString)(),
133
+ (0, class_validator_1.MaxLength)(offeringsInputLimits_1.OFFERINGS_AUDIT_REASON_MAX_LENGTH),
134
+ __metadata("design:type", String)
135
+ ], UpdatePromotionRequest.prototype, "reason", void 0);
@@ -5,16 +5,19 @@ import { SegmentColorSlotEnum } from '../../enums/SegmentColorSlotEnum';
5
5
  *
6
6
  * Un arreglo vacío VACÍA la lista; ausente la deja como está. El segmento por omisión
7
7
  * (`isDefault`) solo acepta el cambio de nombre.
8
+ *
9
+ * `null` solo se acepta en `description`, donde la borra (así la manda el backoffice al vaciarla).
10
+ * En el resto da 400: un `null` en las listas reventaba con 500.
8
11
  */
9
12
  export declare class UpdateSegmentRequest {
10
13
  name?: string;
11
- description?: string;
14
+ description?: string | null;
12
15
  colorSlot?: SegmentColorSlotEnum;
13
16
  /** Reemplaza la lista entera; `[]` deja el segmento sin cohorts. */
14
17
  cohortIds?: string[];
15
18
  /** @deprecated Usar `cohortIds`; se conserva para los consumidores que aún no migran. */
16
19
  filterIds?: string[];
17
- /** Reemplaza la lista entera; `[]` saca a todos los agregados a mano. */
20
+ /** Reemplaza la lista entera; `[]` saca a todos los agregados a mano. Hasta 5 000, sin ids vacíos. */
18
21
  memberIds?: string[];
19
22
  reason?: string;
20
23
  }
@@ -12,20 +12,25 @@ Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.UpdateSegmentRequest = 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 SegmentColorSlotEnum_1 = require("../../enums/SegmentColorSlotEnum");
17
+ const IsOptionalNonNull_1 = require("../../validators/IsOptionalNonNull");
16
18
  /**
17
19
  * Body de PUT /segments/:segmentId — edición parcial (todos los campos opcionales). Sube `version`.
18
20
  * El cambio de estado va por su endpoint dedicado.
19
21
  *
20
22
  * Un arreglo vacío VACÍA la lista; ausente la deja como está. El segmento por omisión
21
23
  * (`isDefault`) solo acepta el cambio de nombre.
24
+ *
25
+ * `null` solo se acepta en `description`, donde la borra (así la manda el backoffice al vaciarla).
26
+ * En el resto da 400: un `null` en las listas reventaba con 500.
22
27
  */
23
28
  class UpdateSegmentRequest {
24
29
  }
25
30
  exports.UpdateSegmentRequest = UpdateSegmentRequest;
26
31
  __decorate([
27
32
  (0, class_transformer_1.Expose)(),
28
- (0, class_validator_1.IsOptional)(),
33
+ (0, IsOptionalNonNull_1.IsOptionalNonNull)(),
29
34
  (0, class_validator_1.IsString)(),
30
35
  (0, class_validator_1.MaxLength)(120),
31
36
  __metadata("design:type", String)
@@ -39,13 +44,13 @@ __decorate([
39
44
  ], UpdateSegmentRequest.prototype, "description", void 0);
40
45
  __decorate([
41
46
  (0, class_transformer_1.Expose)(),
42
- (0, class_validator_1.IsOptional)(),
47
+ (0, IsOptionalNonNull_1.IsOptionalNonNull)(),
43
48
  (0, class_validator_1.IsEnum)(SegmentColorSlotEnum_1.SegmentColorSlotEnum),
44
49
  __metadata("design:type", String)
45
50
  ], UpdateSegmentRequest.prototype, "colorSlot", void 0);
46
51
  __decorate([
47
52
  (0, class_transformer_1.Expose)(),
48
- (0, class_validator_1.IsOptional)(),
53
+ (0, IsOptionalNonNull_1.IsOptionalNonNull)(),
49
54
  (0, class_validator_1.IsArray)(),
50
55
  (0, class_validator_1.IsString)({ each: true }),
51
56
  (0, class_validator_1.IsNotEmpty)({ each: true }),
@@ -54,16 +59,18 @@ __decorate([
54
59
  ], UpdateSegmentRequest.prototype, "cohortIds", void 0);
55
60
  __decorate([
56
61
  (0, class_transformer_1.Expose)(),
57
- (0, class_validator_1.IsOptional)(),
62
+ (0, IsOptionalNonNull_1.IsOptionalNonNull)(),
58
63
  (0, class_validator_1.IsArray)(),
59
64
  (0, class_validator_1.IsString)({ each: true }),
60
65
  __metadata("design:type", Array)
61
66
  ], UpdateSegmentRequest.prototype, "filterIds", void 0);
62
67
  __decorate([
63
68
  (0, class_transformer_1.Expose)(),
64
- (0, class_validator_1.IsOptional)(),
69
+ (0, IsOptionalNonNull_1.IsOptionalNonNull)(),
65
70
  (0, class_validator_1.IsArray)(),
71
+ (0, class_validator_1.ArrayMaxSize)(offeringsInputLimits_1.SEGMENT_MEMBER_IDS_MAX_ITEMS),
66
72
  (0, class_validator_1.IsString)({ each: true }),
73
+ (0, class_validator_1.IsNotEmpty)({ each: true }),
67
74
  __metadata("design:type", Array)
68
75
  ], UpdateSegmentRequest.prototype, "memberIds", void 0);
69
76
  __decorate([
@@ -4,20 +4,29 @@ import { StorePolicyEasingDto, StorePolicyHardeningDto } from './CreateStorePoli
4
4
  * Body de PUT /store-policies/:policyId — edición parcial (todos los campos opcionales).
5
5
  * Sube `version`. El cambio de estado va por su endpoint dedicado. Cada grupo de palancas se
6
6
  * reemplaza entero cuando viene, no se mergea clave a clave.
7
+ *
8
+ * Ausente deja el campo como está. `null` BORRA el valor en la descripción, los alcances y las
9
+ * fechas: el alcance vuelve a «toda la red» y la vigencia a «permanente» (así lo usa el backoffice).
10
+ * En `name`, `hardening`, `easing` y `suspended` un `null` da 400.
7
11
  */
8
12
  export declare class UpdateStorePolicyRequest {
9
13
  name?: string;
10
- description?: string;
14
+ description?: string | null;
11
15
  hardening?: StorePolicyHardeningDto;
12
16
  easing?: StorePolicyEasingDto;
13
17
  suspended?: boolean;
14
- allowedSkus?: string[];
15
- storeIds?: string[];
16
- targetLevels?: CreditPlanLevelEnum[];
17
- /** Alcance: segmentos alcanzados. */
18
- segmentIds?: string[];
19
- targetSkus?: string[];
20
- validFrom?: string;
21
- validUntil?: string;
18
+ /** Compuerta: SKUs habilitados; `null` = sin restricción. */
19
+ allowedSkus?: string[] | null;
20
+ /** Alcance: tiendas; `null` = toda la red. Hasta 1 000. */
21
+ storeIds?: string[] | null;
22
+ /** Alcance: niveles; `null` = todos. */
23
+ targetLevels?: CreditPlanLevelEnum[] | null;
24
+ /** Alcance: segmentos alcanzados; `null` = todos. */
25
+ segmentIds?: string[] | null;
26
+ /** Alcance: SKUs; `null` = todos los productos. */
27
+ targetSkus?: string[] | null;
28
+ validFrom?: string | null;
29
+ /** `null` = permanente. */
30
+ validUntil?: string | null;
22
31
  reason?: string;
23
32
  }
@@ -12,19 +12,25 @@ Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.UpdateStorePolicyRequest = 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 CreditPlanLevelEnum_1 = require("../../enums/CreditPlanLevelEnum");
17
+ const IsOptionalNonNull_1 = require("../../validators/IsOptionalNonNull");
16
18
  const CreateStorePolicyRequest_1 = require("./CreateStorePolicyRequest");
17
19
  /**
18
20
  * Body de PUT /store-policies/:policyId — edición parcial (todos los campos opcionales).
19
21
  * Sube `version`. El cambio de estado va por su endpoint dedicado. Cada grupo de palancas se
20
22
  * reemplaza entero cuando viene, no se mergea clave a clave.
23
+ *
24
+ * Ausente deja el campo como está. `null` BORRA el valor en la descripción, los alcances y las
25
+ * fechas: el alcance vuelve a «toda la red» y la vigencia a «permanente» (así lo usa el backoffice).
26
+ * En `name`, `hardening`, `easing` y `suspended` un `null` da 400.
21
27
  */
22
28
  class UpdateStorePolicyRequest {
23
29
  }
24
30
  exports.UpdateStorePolicyRequest = UpdateStorePolicyRequest;
25
31
  __decorate([
26
32
  (0, class_transformer_1.Expose)(),
27
- (0, class_validator_1.IsOptional)(),
33
+ (0, IsOptionalNonNull_1.IsOptionalNonNull)(),
28
34
  (0, class_validator_1.IsString)(),
29
35
  (0, class_validator_1.MaxLength)(120),
30
36
  __metadata("design:type", String)
@@ -38,21 +44,21 @@ __decorate([
38
44
  ], UpdateStorePolicyRequest.prototype, "description", void 0);
39
45
  __decorate([
40
46
  (0, class_transformer_1.Expose)(),
41
- (0, class_validator_1.IsOptional)(),
47
+ (0, IsOptionalNonNull_1.IsOptionalNonNull)(),
42
48
  (0, class_validator_1.ValidateNested)(),
43
49
  (0, class_transformer_1.Type)(() => CreateStorePolicyRequest_1.StorePolicyHardeningDto),
44
50
  __metadata("design:type", CreateStorePolicyRequest_1.StorePolicyHardeningDto)
45
51
  ], UpdateStorePolicyRequest.prototype, "hardening", void 0);
46
52
  __decorate([
47
53
  (0, class_transformer_1.Expose)(),
48
- (0, class_validator_1.IsOptional)(),
54
+ (0, IsOptionalNonNull_1.IsOptionalNonNull)(),
49
55
  (0, class_validator_1.ValidateNested)(),
50
56
  (0, class_transformer_1.Type)(() => CreateStorePolicyRequest_1.StorePolicyEasingDto),
51
57
  __metadata("design:type", CreateStorePolicyRequest_1.StorePolicyEasingDto)
52
58
  ], UpdateStorePolicyRequest.prototype, "easing", void 0);
53
59
  __decorate([
54
60
  (0, class_transformer_1.Expose)(),
55
- (0, class_validator_1.IsOptional)(),
61
+ (0, IsOptionalNonNull_1.IsOptionalNonNull)(),
56
62
  (0, class_validator_1.IsBoolean)(),
57
63
  __metadata("design:type", Boolean)
58
64
  ], UpdateStorePolicyRequest.prototype, "suspended", void 0);
@@ -69,7 +75,9 @@ __decorate([
69
75
  (0, class_validator_1.IsOptional)(),
70
76
  (0, class_validator_1.IsArray)(),
71
77
  (0, class_validator_1.ArrayNotEmpty)(),
78
+ (0, class_validator_1.ArrayMaxSize)(offeringsInputLimits_1.SCOPE_STORE_IDS_MAX_ITEMS),
72
79
  (0, class_validator_1.IsString)({ each: true }),
80
+ (0, class_validator_1.IsNotEmpty)({ each: true }),
73
81
  __metadata("design:type", Array)
74
82
  ], UpdateStorePolicyRequest.prototype, "storeIds", void 0);
75
83
  __decorate([
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Resultado de liberar el lugar de un crédito en una promoción. `released` en `false` no es error:
3
+ * es un reenvío del mismo crédito o un crédito que nunca se contó, y el contador no se movió.
4
+ */
5
+ export interface ReleasePromotionResponse {
6
+ promotionId: string;
7
+ /** `true` si esta llamada bajó `creditsGenerated`. */
8
+ released: boolean;
9
+ /** Créditos generados después de la llamada. */
10
+ creditsGenerated: number;
11
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -28,6 +28,9 @@ export * from './enums/SegmentationRecountTriggerEnum';
28
28
  export * from './enums/SegmentationRecountStatusEnum';
29
29
  export * from './constants/promotionSkuBatch';
30
30
  export * from './constants/promotionRetailerScope';
31
+ export * from './constants/offeringsInputLimits';
32
+ export * from './validators/IsOptionalNonNull';
33
+ export * from './validators/MaxJsonBytes';
31
34
  export * from './dtos/CreditPlan';
32
35
  export * from './dtos/PrepaymentMinimum';
33
36
  export * from './dtos/Financier';
@@ -46,6 +49,7 @@ export * from './dtos/requests/CreatePromotionRequest';
46
49
  export * from './dtos/requests/UpdatePromotionRequest';
47
50
  export * from './dtos/requests/ChangePromotionStatusRequest';
48
51
  export * from './dtos/requests/ConsumePromotionRequest';
52
+ export * from './dtos/requests/ReleasePromotionRequest';
49
53
  export * from './dtos/requests/ReservePromotionBonusRequest';
50
54
  export * from './dtos/requests/SettlePromotionBonusRequest';
51
55
  export * from './dtos/requests/CreateStorePolicyRequest';
@@ -76,6 +80,7 @@ export * from './dtos/responses/SimulationResultResponse';
76
80
  export * from './dtos/responses/PromotionResponse';
77
81
  export * from './dtos/responses/PromotionLogEntryResponse';
78
82
  export * from './dtos/responses/ConsumePromotionResponse';
83
+ export * from './dtos/responses/ReleasePromotionResponse';
79
84
  export * from './dtos/responses/PromotionBonusResponse';
80
85
  export * from './dtos/responses/ReservePromotionBonusResponse';
81
86
  export * from './dtos/responses/PromotedSkusResponse';
@@ -46,6 +46,10 @@ __exportStar(require("./enums/SegmentationRecountStatusEnum"), exports);
46
46
  // Constantes
47
47
  __exportStar(require("./constants/promotionSkuBatch"), exports);
48
48
  __exportStar(require("./constants/promotionRetailerScope"), exports);
49
+ __exportStar(require("./constants/offeringsInputLimits"), exports);
50
+ // Validadores
51
+ __exportStar(require("./validators/IsOptionalNonNull"), exports);
52
+ __exportStar(require("./validators/MaxJsonBytes"), exports);
49
53
  // Entity DTOs
50
54
  __exportStar(require("./dtos/CreditPlan"), exports);
51
55
  __exportStar(require("./dtos/PrepaymentMinimum"), exports);
@@ -66,6 +70,7 @@ __exportStar(require("./dtos/requests/CreatePromotionRequest"), exports);
66
70
  __exportStar(require("./dtos/requests/UpdatePromotionRequest"), exports);
67
71
  __exportStar(require("./dtos/requests/ChangePromotionStatusRequest"), exports);
68
72
  __exportStar(require("./dtos/requests/ConsumePromotionRequest"), exports);
73
+ __exportStar(require("./dtos/requests/ReleasePromotionRequest"), exports);
69
74
  __exportStar(require("./dtos/requests/ReservePromotionBonusRequest"), exports);
70
75
  __exportStar(require("./dtos/requests/SettlePromotionBonusRequest"), exports);
71
76
  __exportStar(require("./dtos/requests/CreateStorePolicyRequest"), exports);
@@ -97,6 +102,7 @@ __exportStar(require("./dtos/responses/SimulationResultResponse"), exports);
97
102
  __exportStar(require("./dtos/responses/PromotionResponse"), exports);
98
103
  __exportStar(require("./dtos/responses/PromotionLogEntryResponse"), exports);
99
104
  __exportStar(require("./dtos/responses/ConsumePromotionResponse"), exports);
105
+ __exportStar(require("./dtos/responses/ReleasePromotionResponse"), exports);
100
106
  __exportStar(require("./dtos/responses/PromotionBonusResponse"), exports);
101
107
  __exportStar(require("./dtos/responses/ReservePromotionBonusResponse"), exports);
102
108
  __exportStar(require("./dtos/responses/PromotedSkusResponse"), exports);
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Campo opcional de un PUT parcial que NO admite `null`: ausente deja el valor como está, y `null`
3
+ * corre los validadores del campo y falla con 400.
4
+ *
5
+ * `@IsOptional()` deja pasar `null`; en los PUT de offerings ese `null` se convierte en `$REMOVE` y
6
+ * revienta con 500 en los atributos requeridos (L-100). Los campos que sí se borran con `null`
7
+ * (alcances, fechas, descripción) siguen con `@IsOptional()`.
8
+ */
9
+ export declare const IsOptionalNonNull: () => PropertyDecorator;
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.IsOptionalNonNull = void 0;
4
+ const class_validator_1 = require("class-validator");
5
+ /**
6
+ * Campo opcional de un PUT parcial que NO admite `null`: ausente deja el valor como está, y `null`
7
+ * corre los validadores del campo y falla con 400.
8
+ *
9
+ * `@IsOptional()` deja pasar `null`; en los PUT de offerings ese `null` se convierte en `$REMOVE` y
10
+ * revienta con 500 en los atributos requeridos (L-100). Los campos que sí se borran con `null`
11
+ * (alcances, fechas, descripción) siguen con `@IsOptional()`.
12
+ */
13
+ const IsOptionalNonNull = () => (0, class_validator_1.ValidateIf)((_object, value) => value !== undefined);
14
+ exports.IsOptionalNonNull = IsOptionalNonNull;
@@ -0,0 +1,5 @@
1
+ import { ValidationOptions } from 'class-validator';
2
+ /** Bytes UTF-8 del valor serializado en JSON; `undefined` si no se puede serializar. */
3
+ export declare const jsonByteLength: (value: unknown) => number | undefined;
4
+ /** El valor, serializado en JSON, ocupa a lo más `maxBytes` bytes UTF-8. */
5
+ export declare const MaxJsonBytes: (maxBytes: number, validationOptions?: ValidationOptions) => PropertyDecorator;
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MaxJsonBytes = exports.jsonByteLength = void 0;
4
+ const class_validator_1 = require("class-validator");
5
+ /** Bytes UTF-8 del valor serializado en JSON; `undefined` si no se puede serializar. */
6
+ const jsonByteLength = (value) => {
7
+ try {
8
+ const json = JSON.stringify(value);
9
+ return json === undefined ? undefined : new TextEncoder().encode(json).length;
10
+ }
11
+ catch {
12
+ return undefined;
13
+ }
14
+ };
15
+ exports.jsonByteLength = jsonByteLength;
16
+ /** El valor, serializado en JSON, ocupa a lo más `maxBytes` bytes UTF-8. */
17
+ const MaxJsonBytes = (maxBytes, validationOptions) => (0, class_validator_1.ValidateBy)({
18
+ name: 'maxJsonBytes',
19
+ constraints: [maxBytes],
20
+ validator: {
21
+ validate: (value) => {
22
+ const bytes = (0, exports.jsonByteLength)(value);
23
+ return bytes !== undefined && bytes <= maxBytes;
24
+ },
25
+ defaultMessage: () => `$property no puede pasar de ${maxBytes} bytes serializado`,
26
+ },
27
+ }, validationOptions);
28
+ exports.MaxJsonBytes = MaxJsonBytes;
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Topes de forma de la auditoría y del registro de accesos a PII (L-183). Son de cordura, no de
3
+ * tamaño total: el ítem de DynamoDB (400 KB) lo cuida la guardia de tamaño de loan-retail-audit.
4
+ * Los productores de hoy mandan a lo más 7 `changes`, 4 `context`, 10 `fields` y valores de ~40
5
+ * caracteres.
6
+ */
7
+ export declare const AUDIT_TRAIL_CHANGES_MAX_ITEMS = 100;
8
+ export declare const AUDIT_TRAIL_CONTEXT_MAX_ITEMS = 50;
9
+ /** Nombre de un campo o clave de contexto. */
10
+ export declare const AUDIT_FIELD_NAME_MAX_LENGTH = 128;
11
+ /** Valor serializado de un cambio o de un dato de contexto (4 KB). */
12
+ export declare const AUDIT_VALUE_MAX_LENGTH = 4096;
13
+ /** Campos PII por acceso. */
14
+ export declare const PII_ACCESS_FIELDS_MAX_ITEMS = 50;
15
+ /** Un id de recurso en `resourceIds` (hoy ULID de 26 o `acc-` + 32 hex). */
16
+ export declare const PII_RESOURCE_ID_MAX_LENGTH = 128;
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PII_RESOURCE_ID_MAX_LENGTH = exports.PII_ACCESS_FIELDS_MAX_ITEMS = exports.AUDIT_VALUE_MAX_LENGTH = exports.AUDIT_FIELD_NAME_MAX_LENGTH = exports.AUDIT_TRAIL_CONTEXT_MAX_ITEMS = exports.AUDIT_TRAIL_CHANGES_MAX_ITEMS = void 0;
4
+ /**
5
+ * Topes de forma de la auditoría y del registro de accesos a PII (L-183). Son de cordura, no de
6
+ * tamaño total: el ítem de DynamoDB (400 KB) lo cuida la guardia de tamaño de loan-retail-audit.
7
+ * Los productores de hoy mandan a lo más 7 `changes`, 4 `context`, 10 `fields` y valores de ~40
8
+ * caracteres.
9
+ */
10
+ exports.AUDIT_TRAIL_CHANGES_MAX_ITEMS = 100;
11
+ exports.AUDIT_TRAIL_CONTEXT_MAX_ITEMS = 50;
12
+ /** Nombre de un campo o clave de contexto. */
13
+ exports.AUDIT_FIELD_NAME_MAX_LENGTH = 128;
14
+ /** Valor serializado de un cambio o de un dato de contexto (4 KB). */
15
+ exports.AUDIT_VALUE_MAX_LENGTH = 4096;
16
+ /** Campos PII por acceso. */
17
+ exports.PII_ACCESS_FIELDS_MAX_ITEMS = 50;
18
+ /** Un id de recurso en `resourceIds` (hoy ULID de 26 o `acc-` + 32 hex). */
19
+ exports.PII_RESOURCE_ID_MAX_LENGTH = 128;
@@ -12,6 +12,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.AuditTrailChange = void 0;
13
13
  const class_transformer_1 = require("class-transformer");
14
14
  const class_validator_1 = require("class-validator");
15
+ const auditInputLimits_1 = require("../constants/auditInputLimits");
15
16
  /** Un campo que cambió; los valores van serializados a string y nunca llevan PII. */
16
17
  class AuditTrailChange {
17
18
  }
@@ -20,17 +21,20 @@ __decorate([
20
21
  (0, class_transformer_1.Expose)(),
21
22
  (0, class_validator_1.IsString)(),
22
23
  (0, class_validator_1.IsNotEmpty)(),
24
+ (0, class_validator_1.MaxLength)(auditInputLimits_1.AUDIT_FIELD_NAME_MAX_LENGTH),
23
25
  __metadata("design:type", String)
24
26
  ], AuditTrailChange.prototype, "field", void 0);
25
27
  __decorate([
26
28
  (0, class_transformer_1.Expose)(),
27
29
  (0, class_validator_1.IsOptional)(),
28
30
  (0, class_validator_1.IsString)(),
31
+ (0, class_validator_1.MaxLength)(auditInputLimits_1.AUDIT_VALUE_MAX_LENGTH),
29
32
  __metadata("design:type", String)
30
33
  ], AuditTrailChange.prototype, "oldValue", void 0);
31
34
  __decorate([
32
35
  (0, class_transformer_1.Expose)(),
33
36
  (0, class_validator_1.IsOptional)(),
34
37
  (0, class_validator_1.IsString)(),
38
+ (0, class_validator_1.MaxLength)(auditInputLimits_1.AUDIT_VALUE_MAX_LENGTH),
35
39
  __metadata("design:type", String)
36
40
  ], AuditTrailChange.prototype, "newValue", void 0);
@@ -12,6 +12,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.AuditTrailContextEntry = void 0;
13
13
  const class_transformer_1 = require("class-transformer");
14
14
  const class_validator_1 = require("class-validator");
15
+ const auditInputLimits_1 = require("../constants/auditInputLimits");
15
16
  /** Dato que la acción no cambió y se guarda para leer la entrada sin abrir otra pantalla. */
16
17
  class AuditTrailContextEntry {
17
18
  }
@@ -20,10 +21,12 @@ __decorate([
20
21
  (0, class_transformer_1.Expose)(),
21
22
  (0, class_validator_1.IsString)(),
22
23
  (0, class_validator_1.IsNotEmpty)(),
24
+ (0, class_validator_1.MaxLength)(auditInputLimits_1.AUDIT_FIELD_NAME_MAX_LENGTH),
23
25
  __metadata("design:type", String)
24
26
  ], AuditTrailContextEntry.prototype, "key", void 0);
25
27
  __decorate([
26
28
  (0, class_transformer_1.Expose)(),
27
29
  (0, class_validator_1.IsString)(),
30
+ (0, class_validator_1.MaxLength)(auditInputLimits_1.AUDIT_VALUE_MAX_LENGTH),
28
31
  __metadata("design:type", String)
29
32
  ], AuditTrailContextEntry.prototype, "value", void 0);
@@ -4,6 +4,7 @@ import { PiiResourceTypeEnum } from '../../enums/PiiResourceTypeEnum';
4
4
  export declare class CreatePiiAccessLogRequest {
5
5
  /** ULID generado por quien llama; con `occurredAt` forma el sk, así un reintento no duplica. */
6
6
  accessId: string;
7
+ /** Fecha-hora ISO-8601 completa con zona, como `toISOString()`. */
7
8
  occurredAt: string;
8
9
  correlationId: string;
9
10
  actorId: string;
@@ -13,7 +14,12 @@ export declare class CreatePiiAccessLogRequest {
13
14
  resourceType: PiiResourceTypeEnum;
14
15
  /** Id del recurso, o `(list)` en un listado con los ids en `resourceIds`. */
15
16
  resourceId: string;
16
- /** Nombres de los campos PII que viajaron; nunca sus valores. */
17
+ /** Nombres de los campos PII que viajaron; nunca sus valores. Sin nombres vacíos. */
17
18
  fields: string[];
19
+ /**
20
+ * Ids del listado, sin vacíos y de hasta 128 caracteres cada uno. Sin tope de cantidad todavía:
21
+ * `/backoffice/customers` de retail-wizard manda todos los clientes de la ventana (miles), y un
22
+ * rechazo tumba el listado. El tope llega con el fan-out por id del central (L-184).
23
+ */
18
24
  resourceIds?: string[];
19
25
  }