@fiado/type-kit 3.463.0 → 3.465.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 (198) hide show
  1. package/_test_/unit/moneyTransfer/dtos.test.ts +298 -0
  2. package/_test_/unit/moneyTransfer/enums.test.ts +56 -0
  3. package/_test_/unit/retailCatalog/backofficeRequests.test.ts +283 -0
  4. package/_test_/unit/retailCatalog/catalogEnums.test.ts +28 -1
  5. package/_test_/unit/retailCatalog/responseFields.test.ts +53 -0
  6. package/_test_/unit/retailCatalog/returnConditions.test.ts +64 -0
  7. package/_test_/unit/retailWizard/cancelSaleConditions.test.ts +41 -0
  8. package/_test_/unit/stpSpei/additive.test.ts +84 -0
  9. package/bin/bankAccount/enums/BeneficiaryAccountTypeEnum.d.ts +20 -0
  10. package/bin/bankAccount/enums/BeneficiaryAccountTypeEnum.js +24 -0
  11. package/bin/bankAccount/index.d.ts +1 -0
  12. package/bin/bankAccount/index.js +1 -0
  13. package/bin/index.d.ts +1 -0
  14. package/bin/index.js +5 -1
  15. package/bin/moneyTransfer/dtos/BatchScheduleRequest.d.ts +7 -0
  16. package/bin/moneyTransfer/dtos/BatchScheduleRequest.js +28 -0
  17. package/bin/moneyTransfer/dtos/CreateSettlementRequest.d.ts +12 -0
  18. package/bin/moneyTransfer/dtos/CreateSettlementRequest.js +42 -0
  19. package/bin/moneyTransfer/dtos/MoneyTransferProductRequest.d.ts +37 -0
  20. package/bin/moneyTransfer/dtos/MoneyTransferProductRequest.js +131 -0
  21. package/bin/moneyTransfer/dtos/MoneyTransferServiceCreateRequest.d.ts +22 -0
  22. package/bin/moneyTransfer/dtos/MoneyTransferServiceCreateRequest.js +88 -0
  23. package/bin/moneyTransfer/dtos/MoneyTransferServiceUpdateRequest.d.ts +22 -0
  24. package/bin/moneyTransfer/dtos/MoneyTransferServiceUpdateRequest.js +103 -0
  25. package/bin/moneyTransfer/dtos/PendingDetailsResponse.d.ts +8 -0
  26. package/bin/moneyTransfer/dtos/PendingDetailsResponse.js +7 -0
  27. package/bin/moneyTransfer/dtos/RescheduleSettlementRequest.d.ts +5 -0
  28. package/bin/moneyTransfer/dtos/RescheduleSettlementRequest.js +23 -0
  29. package/bin/moneyTransfer/dtos/SettlementActionRequest.d.ts +4 -0
  30. package/bin/moneyTransfer/dtos/SettlementActionRequest.js +21 -0
  31. package/bin/moneyTransfer/dtos/SettlementListResponse.d.ts +6 -0
  32. package/bin/moneyTransfer/dtos/SettlementListResponse.js +7 -0
  33. package/bin/moneyTransfer/dtos/SettlementResponse.d.ts +36 -0
  34. package/bin/moneyTransfer/dtos/SettlementResponse.js +10 -0
  35. package/bin/moneyTransfer/dtos/SettlementStatusMessage.d.ts +12 -0
  36. package/bin/moneyTransfer/dtos/SettlementStatusMessage.js +38 -0
  37. package/bin/moneyTransfer/dtos/TransactionDetailResponse.d.ts +24 -0
  38. package/bin/moneyTransfer/dtos/TransactionDetailResponse.js +10 -0
  39. package/bin/moneyTransfer/enums/SettlementModeEnum.d.ts +5 -0
  40. package/bin/moneyTransfer/enums/SettlementModeEnum.js +9 -0
  41. package/bin/moneyTransfer/enums/SettlementStatusEnum.d.ts +11 -0
  42. package/bin/moneyTransfer/enums/SettlementStatusEnum.js +15 -0
  43. package/bin/moneyTransfer/enums/SpeiOrderStatusEnum.d.ts +11 -0
  44. package/bin/moneyTransfer/enums/SpeiOrderStatusEnum.js +15 -0
  45. package/bin/moneyTransfer/enums/TransactionDetailStatusEnum.d.ts +7 -0
  46. package/bin/moneyTransfer/enums/TransactionDetailStatusEnum.js +11 -0
  47. package/bin/moneyTransfer/enums/TransferChannelEnum.d.ts +5 -0
  48. package/bin/moneyTransfer/enums/TransferChannelEnum.js +9 -0
  49. package/bin/moneyTransfer/index.d.ts +17 -0
  50. package/bin/moneyTransfer/index.js +40 -0
  51. package/bin/productCatalog/enums/ProductTypeEnum.d.ts +6 -1
  52. package/bin/productCatalog/enums/ProductTypeEnum.js +5 -0
  53. package/bin/provider/enums/Provider.d.ts +2 -1
  54. package/bin/provider/enums/Provider.js +1 -0
  55. package/bin/retailCatalog/constants/AdjustmentReasons.d.ts +3 -0
  56. package/bin/retailCatalog/constants/AdjustmentReasons.js +10 -0
  57. package/bin/retailCatalog/constants/NonBundleCategories.d.ts +3 -0
  58. package/bin/retailCatalog/constants/NonBundleCategories.js +6 -0
  59. package/bin/retailCatalog/dtos/Product.d.ts +3 -0
  60. package/bin/retailCatalog/dtos/requests/BackofficeCreateKitRequest.d.ts +14 -0
  61. package/bin/retailCatalog/dtos/requests/BackofficeCreateKitRequest.js +66 -0
  62. package/bin/retailCatalog/dtos/requests/BackofficeCreateProductRequest.d.ts +30 -0
  63. package/bin/retailCatalog/dtos/requests/BackofficeCreateProductRequest.js +117 -0
  64. package/bin/retailCatalog/dtos/requests/BackofficeCreateServiceRequest.d.ts +9 -0
  65. package/bin/retailCatalog/dtos/requests/BackofficeCreateServiceRequest.js +43 -0
  66. package/bin/retailCatalog/dtos/requests/BackofficeCreateSkuPriceRequest.d.ts +7 -0
  67. package/bin/retailCatalog/dtos/requests/BackofficeCreateSkuPriceRequest.js +34 -0
  68. package/bin/retailCatalog/dtos/requests/BackofficeCreateTransferRequest.d.ts +9 -0
  69. package/bin/retailCatalog/dtos/requests/BackofficeCreateTransferRequest.js +48 -0
  70. package/bin/retailCatalog/dtos/requests/BackofficeListTransfersQuery.d.ts +5 -0
  71. package/bin/retailCatalog/dtos/requests/BackofficeListTransfersQuery.js +23 -0
  72. package/bin/retailCatalog/dtos/requests/BackofficeRegisterAdjustmentRequest.d.ts +12 -0
  73. package/bin/retailCatalog/dtos/requests/BackofficeRegisterAdjustmentRequest.js +49 -0
  74. package/bin/retailCatalog/dtos/requests/BackofficeRegisterEntryRequest.d.ts +9 -0
  75. package/bin/retailCatalog/dtos/requests/BackofficeRegisterEntryRequest.js +43 -0
  76. package/bin/retailCatalog/dtos/requests/BackofficeUpdateProductRequest.d.ts +27 -0
  77. package/bin/retailCatalog/dtos/requests/BackofficeUpdateProductRequest.js +118 -0
  78. package/bin/retailCatalog/dtos/requests/ChangeInventoryStatusRequest.d.ts +1 -0
  79. package/bin/retailCatalog/dtos/requests/ChangeInventoryStatusRequest.js +1 -0
  80. package/bin/retailCatalog/dtos/requests/CreateProductRequest.d.ts +4 -1
  81. package/bin/retailCatalog/dtos/requests/CreateProductRequest.js +4 -1
  82. package/bin/retailCatalog/dtos/requests/RegisterInventoryRequest.d.ts +4 -1
  83. package/bin/retailCatalog/dtos/requests/RegisterInventoryRequest.js +4 -1
  84. package/bin/retailCatalog/dtos/requests/ReturnPieceCondition.d.ts +11 -0
  85. package/bin/retailCatalog/dtos/requests/ReturnPieceCondition.js +57 -0
  86. package/bin/retailCatalog/dtos/requests/ReturnStockLine.d.ts +6 -0
  87. package/bin/retailCatalog/dtos/requests/ReturnStockLine.js +27 -0
  88. package/bin/retailCatalog/dtos/requests/ReturnStockRequest.d.ts +2 -2
  89. package/bin/retailCatalog/dtos/requests/ReturnStockRequest.js +2 -2
  90. package/bin/retailCatalog/dtos/requests/TransferInventoryRequest.d.ts +4 -1
  91. package/bin/retailCatalog/dtos/requests/TransferInventoryRequest.js +4 -1
  92. package/bin/retailCatalog/dtos/requests/UpdateProductRequest.d.ts +4 -1
  93. package/bin/retailCatalog/dtos/requests/UpdateProductRequest.js +4 -1
  94. package/bin/retailCatalog/dtos/requests/UpdateProductStatusRequest.d.ts +4 -1
  95. package/bin/retailCatalog/dtos/requests/UpdateProductStatusRequest.js +4 -1
  96. package/bin/retailCatalog/dtos/responses/InventoryLensResponse.d.ts +3 -0
  97. package/bin/retailCatalog/dtos/responses/ListTransfersResponse.d.ts +5 -0
  98. package/bin/retailCatalog/dtos/responses/ListTransfersResponse.js +2 -0
  99. package/bin/retailCatalog/dtos/responses/ReserveStockResponse.d.ts +2 -0
  100. package/bin/retailCatalog/dtos/responses/SkuPriceEntry.d.ts +2 -0
  101. package/bin/retailCatalog/dtos/responses/StoreCatalogItem.d.ts +3 -0
  102. package/bin/retailCatalog/dtos/responses/TransferResponse.d.ts +16 -0
  103. package/bin/retailCatalog/dtos/responses/TransferResponse.js +2 -0
  104. package/bin/retailCatalog/enums/InventoryItemStatusEnum.d.ts +3 -1
  105. package/bin/retailCatalog/enums/InventoryItemStatusEnum.js +2 -0
  106. package/bin/retailCatalog/enums/InventoryMovementReasonEnum.d.ts +7 -0
  107. package/bin/retailCatalog/enums/InventoryMovementReasonEnum.js +11 -0
  108. package/bin/retailCatalog/enums/InventoryMovementTypeEnum.d.ts +4 -1
  109. package/bin/retailCatalog/enums/InventoryMovementTypeEnum.js +3 -0
  110. package/bin/retailCatalog/enums/ItemTypeEnum.d.ts +5 -0
  111. package/bin/retailCatalog/enums/ItemTypeEnum.js +9 -0
  112. package/bin/retailCatalog/enums/PriceSourceEnum.d.ts +3 -2
  113. package/bin/retailCatalog/enums/PriceSourceEnum.js +2 -1
  114. package/bin/retailCatalog/enums/ReturnConditionEnum.d.ts +5 -0
  115. package/bin/retailCatalog/enums/ReturnConditionEnum.js +9 -0
  116. package/bin/retailCatalog/enums/TransferStateEnum.d.ts +6 -0
  117. package/bin/retailCatalog/enums/TransferStateEnum.js +10 -0
  118. package/bin/retailCatalog/index.d.ts +20 -0
  119. package/bin/retailCatalog/index.js +21 -0
  120. package/bin/retailCatalog/validators/IsPieceRefConstraint.d.ts +6 -0
  121. package/bin/retailCatalog/validators/IsPieceRefConstraint.js +26 -0
  122. package/bin/retailWizard/dtos/requests/BackofficeCancelSaleRequest.d.ts +3 -0
  123. package/bin/retailWizard/dtos/requests/BackofficeCancelSaleRequest.js +9 -0
  124. package/bin/retailWizard/dtos/requests/CancelSaleRequest.d.ts +3 -0
  125. package/bin/retailWizard/dtos/requests/CancelSaleRequest.js +9 -0
  126. package/bin/stpSpei/dtos/ConsultStpOrderRequest.d.ts +8 -0
  127. package/bin/stpSpei/dtos/ConsultStpOrderRequest.js +6 -0
  128. package/bin/stpSpei/dtos/PutStpOrderRequest.d.ts +16 -8
  129. package/bin/stpSpei/enums/StpOrderSourceEnum.d.ts +9 -0
  130. package/bin/stpSpei/enums/StpOrderSourceEnum.js +13 -0
  131. package/bin/stpSpei/index.d.ts +2 -0
  132. package/bin/stpSpei/index.js +2 -0
  133. package/package.json +1 -1
  134. package/src/bankAccount/enums/BeneficiaryAccountTypeEnum.ts +20 -0
  135. package/src/bankAccount/index.ts +1 -0
  136. package/src/index.ts +4 -0
  137. package/src/moneyTransfer/dtos/BatchScheduleRequest.ts +15 -0
  138. package/src/moneyTransfer/dtos/CreateSettlementRequest.ts +26 -0
  139. package/src/moneyTransfer/dtos/MoneyTransferProductRequest.ts +111 -0
  140. package/src/moneyTransfer/dtos/MoneyTransferServiceCreateRequest.ts +62 -0
  141. package/src/moneyTransfer/dtos/MoneyTransferServiceUpdateRequest.ts +87 -0
  142. package/src/moneyTransfer/dtos/PendingDetailsResponse.ts +9 -0
  143. package/src/moneyTransfer/dtos/RescheduleSettlementRequest.ts +9 -0
  144. package/src/moneyTransfer/dtos/SettlementActionRequest.ts +7 -0
  145. package/src/moneyTransfer/dtos/SettlementListResponse.ts +7 -0
  146. package/src/moneyTransfer/dtos/SettlementResponse.ts +37 -0
  147. package/src/moneyTransfer/dtos/SettlementStatusMessage.ts +23 -0
  148. package/src/moneyTransfer/dtos/TransactionDetailResponse.ts +25 -0
  149. package/src/moneyTransfer/enums/SettlementModeEnum.ts +5 -0
  150. package/src/moneyTransfer/enums/SettlementStatusEnum.ts +11 -0
  151. package/src/moneyTransfer/enums/SpeiOrderStatusEnum.ts +11 -0
  152. package/src/moneyTransfer/enums/TransactionDetailStatusEnum.ts +7 -0
  153. package/src/moneyTransfer/enums/TransferChannelEnum.ts +5 -0
  154. package/src/moneyTransfer/index.ts +27 -0
  155. package/src/productCatalog/enums/ProductTypeEnum.ts +6 -1
  156. package/src/provider/enums/Provider.ts +2 -1
  157. package/src/retailCatalog/constants/AdjustmentReasons.ts +8 -0
  158. package/src/retailCatalog/constants/NonBundleCategories.ts +4 -0
  159. package/src/retailCatalog/dtos/Product.ts +3 -0
  160. package/src/retailCatalog/dtos/requests/BackofficeCreateKitRequest.ts +47 -0
  161. package/src/retailCatalog/dtos/requests/BackofficeCreateProductRequest.ts +92 -0
  162. package/src/retailCatalog/dtos/requests/BackofficeCreateServiceRequest.ts +26 -0
  163. package/src/retailCatalog/dtos/requests/BackofficeCreateSkuPriceRequest.ts +19 -0
  164. package/src/retailCatalog/dtos/requests/BackofficeCreateTransferRequest.ts +31 -0
  165. package/src/retailCatalog/dtos/requests/BackofficeListTransfersQuery.ts +9 -0
  166. package/src/retailCatalog/dtos/requests/BackofficeRegisterAdjustmentRequest.ts +34 -0
  167. package/src/retailCatalog/dtos/requests/BackofficeRegisterEntryRequest.ts +28 -0
  168. package/src/retailCatalog/dtos/requests/BackofficeUpdateProductRequest.ts +93 -0
  169. package/src/retailCatalog/dtos/requests/ChangeInventoryStatusRequest.ts +1 -0
  170. package/src/retailCatalog/dtos/requests/CreateProductRequest.ts +4 -1
  171. package/src/retailCatalog/dtos/requests/RegisterInventoryRequest.ts +4 -1
  172. package/src/retailCatalog/dtos/requests/ReturnPieceCondition.ts +48 -0
  173. package/src/retailCatalog/dtos/requests/ReturnStockLine.ts +13 -0
  174. package/src/retailCatalog/dtos/requests/ReturnStockRequest.ts +3 -3
  175. package/src/retailCatalog/dtos/requests/TransferInventoryRequest.ts +4 -1
  176. package/src/retailCatalog/dtos/requests/UpdateProductRequest.ts +4 -1
  177. package/src/retailCatalog/dtos/requests/UpdateProductStatusRequest.ts +4 -1
  178. package/src/retailCatalog/dtos/responses/InventoryLensResponse.ts +3 -0
  179. package/src/retailCatalog/dtos/responses/ListTransfersResponse.ts +6 -0
  180. package/src/retailCatalog/dtos/responses/ReserveStockResponse.ts +2 -0
  181. package/src/retailCatalog/dtos/responses/SkuPriceEntry.ts +2 -0
  182. package/src/retailCatalog/dtos/responses/StoreCatalogItem.ts +3 -0
  183. package/src/retailCatalog/dtos/responses/TransferResponse.ts +17 -0
  184. package/src/retailCatalog/enums/InventoryItemStatusEnum.ts +2 -0
  185. package/src/retailCatalog/enums/InventoryMovementReasonEnum.ts +7 -0
  186. package/src/retailCatalog/enums/InventoryMovementTypeEnum.ts +3 -0
  187. package/src/retailCatalog/enums/ItemTypeEnum.ts +5 -0
  188. package/src/retailCatalog/enums/PriceSourceEnum.ts +2 -1
  189. package/src/retailCatalog/enums/ReturnConditionEnum.ts +5 -0
  190. package/src/retailCatalog/enums/TransferStateEnum.ts +6 -0
  191. package/src/retailCatalog/index.ts +22 -0
  192. package/src/retailCatalog/validators/IsPieceRefConstraint.ts +19 -0
  193. package/src/retailWizard/dtos/requests/BackofficeCancelSaleRequest.ts +11 -2
  194. package/src/retailWizard/dtos/requests/CancelSaleRequest.ts +11 -2
  195. package/src/stpSpei/dtos/ConsultStpOrderRequest.ts +9 -0
  196. package/src/stpSpei/dtos/PutStpOrderRequest.ts +18 -9
  197. package/src/stpSpei/enums/StpOrderSourceEnum.ts +9 -0
  198. package/src/stpSpei/index.ts +2 -0
@@ -0,0 +1,93 @@
1
+ import { Type } from 'class-transformer';
2
+ import { ArrayMinSize, IsArray, IsBoolean, IsEnum, IsIn, IsOptional, IsString, Matches, Validate, ValidateNested } from 'class-validator';
3
+ import { NON_BUNDLE_CATEGORIES } from '../../constants/NonBundleCategories';
4
+ import { ProductCategoryEnum } from '../../enums/ProductCategoryEnum';
5
+ import { ProductTierEnum } from '../../enums/ProductTierEnum';
6
+ import { ProductComponent } from '../ProductComponent';
7
+ import { MdmLockModeEnum } from '../../enums/MdmLockModeEnum';
8
+ import { MdmProviderEnum } from '../../enums/MdmProviderEnum';
9
+ import { IsMdmCoherentConstraint } from '../../validators/IsMdmCoherentConstraint';
10
+
11
+ /** Body de PATCH /backoffice/inventory/skus/{sku} (backofficeUpdateProduct); parcial, sin itemType ni trackingMode (inmutables) ni precio. */
12
+ export class BackofficeUpdateProductRequest {
13
+ @IsOptional()
14
+ @IsIn(NON_BUNDLE_CATEGORIES)
15
+ category?: ProductCategoryEnum;
16
+
17
+ @IsOptional()
18
+ @IsBoolean()
19
+ sellable?: boolean;
20
+
21
+ @IsOptional()
22
+ @IsBoolean()
23
+ showInSalesFlow?: boolean;
24
+
25
+ /** Solo en kits; reemplaza la lista completa sin tocar los apartados vivos. */
26
+ @IsOptional()
27
+ @IsArray()
28
+ @ArrayMinSize(1)
29
+ @ValidateNested({ each: true })
30
+ @Type(() => ProductComponent)
31
+ components?: ProductComponent[];
32
+
33
+ @IsOptional()
34
+ @IsEnum(ProductTierEnum)
35
+ tier?: ProductTierEnum;
36
+
37
+ @IsOptional()
38
+ @Matches(/\S/)
39
+ @IsString()
40
+ brand?: string;
41
+
42
+ @IsOptional()
43
+ @Matches(/\S/)
44
+ @IsString()
45
+ model?: string;
46
+
47
+ @IsOptional()
48
+ @Matches(/\S/)
49
+ @IsString()
50
+ capacity?: string;
51
+
52
+ @IsOptional()
53
+ @Matches(/\S/)
54
+ @IsString()
55
+ color?: string;
56
+
57
+ @IsOptional()
58
+ @Matches(/\S/)
59
+ @IsString()
60
+ description?: string;
61
+
62
+ @IsOptional()
63
+ @Matches(/\S/)
64
+ @IsString()
65
+ imageUrl?: string;
66
+
67
+ /** Id del SKU en el sistema del retailer. */
68
+ @IsOptional()
69
+ @Matches(/\S/)
70
+ @IsString()
71
+ externalId?: string;
72
+
73
+ /** Financieras que pueden financiar este SKU; vacío = no financiable. */
74
+ @IsOptional()
75
+ @IsArray()
76
+ @Matches(/\S/, { each: true })
77
+ @IsString({ each: true })
78
+ eligibleFinanciers?: string[];
79
+
80
+ // PATCH parcial: la coherencia contra el producto guardado la valida el dominio.
81
+ @Validate(IsMdmCoherentConstraint)
82
+ @IsOptional()
83
+ @IsBoolean()
84
+ mdmEnabled?: boolean;
85
+
86
+ @IsOptional()
87
+ @IsEnum(MdmProviderEnum)
88
+ mdmProvider?: MdmProviderEnum | null;
89
+
90
+ @IsOptional()
91
+ @IsEnum(MdmLockModeEnum)
92
+ mdmLockMode?: MdmLockModeEnum | null;
93
+ }
@@ -4,6 +4,7 @@ import { InventoryItemStatusEnum } from '../../enums/InventoryItemStatusEnum';
4
4
  /**
5
5
  * Body de PUT /retailers/:retailerId/inventory/:imei/status — cambio manual de estado.
6
6
  * Acotado a RETURNED | DAMAGED (los otros estados los mueve la máquina de venta, no el operador).
7
+ * @deprecated Modelo viejo por IMEI; usar BackofficeRegisterAdjustmentRequest. Se conserva porque otras ramas lo importan.
7
8
  */
8
9
  export class ChangeInventoryStatusRequest {
9
10
  @IsIn([InventoryItemStatusEnum.RETURNED, InventoryItemStatusEnum.DAMAGED])
@@ -17,7 +17,10 @@ import { MdmProviderEnum } from '../../enums/MdmProviderEnum';
17
17
  import { ProductTierEnum } from '../../enums/ProductTierEnum';
18
18
  import { IsMdmCoherentConstraint } from '../../validators/IsMdmCoherentConstraint';
19
19
 
20
- /** Body de POST /retailers/:retailerId/products — alta de producto (retailerId/status/audit son server-set). */
20
+ /**
21
+ * Body de POST /retailers/:retailerId/products — alta de producto (retailerId/status/audit son server-set).
22
+ * @deprecated Modelo viejo por IMEI; usar BackofficeCreateProductRequest. Se conserva porque otras ramas lo importan.
23
+ */
21
24
  export class CreateProductRequest {
22
25
  @Matches(SKU_PATTERN, { message: 'sku admite solo [A-Za-z0-9-]' })
23
26
  @Length(1, 64)
@@ -1,6 +1,9 @@
1
1
  import { ArrayNotEmpty, IsArray, IsString } from 'class-validator';
2
2
 
3
- /** Body de POST /retailers/:retailerId/stores/:storeId/inventory — registrar IMEIs nuevos (lote). */
3
+ /**
4
+ * Body de POST /retailers/:retailerId/stores/:storeId/inventory — registrar IMEIs nuevos (lote).
5
+ * @deprecated Modelo viejo por IMEI; usar BackofficeRegisterEntryRequest. Se conserva porque otras ramas lo importan.
6
+ */
4
7
  export class RegisterInventoryRequest {
5
8
  @IsString()
6
9
  productSku!: string;
@@ -0,0 +1,48 @@
1
+ import { Expose, Transform } from 'class-transformer';
2
+ import {
3
+ IsEnum,
4
+ IsInt,
5
+ IsString,
6
+ Length,
7
+ Matches,
8
+ MaxLength,
9
+ Min,
10
+ Validate,
11
+ ValidateIf,
12
+ } from 'class-validator';
13
+ import { SKU_PATTERN } from '../../constants/SkuPattern';
14
+ import { ReturnConditionEnum } from '../../enums/ReturnConditionEnum';
15
+ import { IsPieceRefConstraint } from '../../validators/IsPieceRefConstraint';
16
+
17
+ /** Condición de una pieza devuelta; ausente = GOOD. Un accesorio por cantidad se declara con sku + qty. */
18
+ export class ReturnPieceCondition {
19
+ @Expose()
20
+ @Matches(SKU_PATTERN, { message: 'sku admite solo [A-Za-z0-9-]' })
21
+ @Length(1, 64)
22
+ @IsString()
23
+ sku!: string;
24
+
25
+ @Expose()
26
+ @Validate(IsPieceRefConstraint)
27
+ identifier?: string;
28
+
29
+ /** Unidades del SKU por cantidad con esta condición; las no declaradas vuelven GOOD. */
30
+ @Expose()
31
+ @ValidateIf((o: ReturnPieceCondition) => o.qty !== undefined)
32
+ @IsInt()
33
+ @Min(1)
34
+ qty?: number;
35
+
36
+ @Expose()
37
+ @Transform(({ value }) => value ?? ReturnConditionEnum.GOOD)
38
+ @IsEnum(ReturnConditionEnum)
39
+ condition: ReturnConditionEnum = ReturnConditionEnum.GOOD;
40
+
41
+ /** Motivo del daño; obligatorio con DAMAGED, opcional con GOOD. */
42
+ @Expose()
43
+ @ValidateIf((o: ReturnPieceCondition) => o.condition === ReturnConditionEnum.DAMAGED || o.reason != null)
44
+ @MaxLength(200)
45
+ @Matches(/\S/)
46
+ @IsString()
47
+ reason?: string;
48
+ }
@@ -0,0 +1,13 @@
1
+ import { Type } from 'class-transformer';
2
+ import { IsArray, IsOptional, ValidateNested } from 'class-validator';
3
+ import { ReturnPieceCondition } from './ReturnPieceCondition';
4
+ import { StockLine } from './StockLine';
5
+
6
+ /** Línea de devolución: la línea vendida más la condición de sus piezas; las no listadas vuelven GOOD. */
7
+ export class ReturnStockLine extends StockLine {
8
+ @IsOptional()
9
+ @IsArray()
10
+ @ValidateNested({ each: true })
11
+ @Type(() => ReturnPieceCondition)
12
+ conditions?: ReturnPieceCondition[];
13
+ }
@@ -1,6 +1,6 @@
1
1
  import { Type } from 'class-transformer';
2
2
  import { ArrayMinSize, IsArray, IsISO8601, IsString, ValidateNested } from 'class-validator';
3
- import { StockLine } from './StockLine';
3
+ import { ReturnStockLine } from './ReturnStockLine';
4
4
 
5
5
  /** Body de PUT /private/stores/{storeId}/returns (privateReturnStock); componentes guardados en la venta. */
6
6
  export class ReturnStockRequest {
@@ -17,6 +17,6 @@ export class ReturnStockRequest {
17
17
  @IsArray()
18
18
  @ArrayMinSize(1)
19
19
  @ValidateNested({ each: true })
20
- @Type(() => StockLine)
21
- lines!: StockLine[];
20
+ @Type(() => ReturnStockLine)
21
+ lines!: ReturnStockLine[];
22
22
  }
@@ -1,6 +1,9 @@
1
1
  import { IsString } from 'class-validator';
2
2
 
3
- /** Body de PUT /retailers/:retailerId/inventory/:imei/transfer — mover IMEI a otro store. */
3
+ /**
4
+ * Body de PUT /retailers/:retailerId/inventory/:imei/transfer — mover IMEI a otro store.
5
+ * @deprecated Modelo viejo por IMEI; usar BackofficeCreateTransferRequest. Se conserva porque otras ramas lo importan.
6
+ */
4
7
  export class TransferInventoryRequest {
5
8
  @IsString()
6
9
  newStoreId!: string;
@@ -14,7 +14,10 @@ import { MdmProviderEnum } from '../../enums/MdmProviderEnum';
14
14
  import { ProductTierEnum } from '../../enums/ProductTierEnum';
15
15
  import { IsMdmCoherentConstraint } from '../../validators/IsMdmCoherentConstraint';
16
16
 
17
- /** Body de PUT /retailers/:retailerId/products/:sku — actualización parcial (sku y status son inmutables acá). */
17
+ /**
18
+ * Body de PUT /retailers/:retailerId/products/:sku — actualización parcial (sku y status son inmutables acá).
19
+ * @deprecated Modelo viejo por IMEI; usar BackofficeUpdateProductRequest. Se conserva porque otras ramas lo importan.
20
+ */
18
21
  export class UpdateProductRequest {
19
22
  @IsOptional()
20
23
  @IsString()
@@ -1,7 +1,10 @@
1
1
  import { IsEnum } from 'class-validator';
2
2
  import { ProductStatusEnum } from '../../enums/ProductStatusEnum';
3
3
 
4
- /** Body de PUT /retailers/:retailerId/products/:sku/status — ACTIVE | DISCONTINUED. */
4
+ /**
5
+ * Body de PUT /retailers/:retailerId/products/:sku/status — ACTIVE | DISCONTINUED.
6
+ * @deprecated Modelo viejo por IMEI; usar backofficeDeactivateProduct (sin body). Se conserva porque otras ramas lo importan.
7
+ */
5
8
  export class UpdateProductStatusRequest {
6
9
  @IsEnum(ProductStatusEnum)
7
10
  status!: ProductStatusEnum;
@@ -4,6 +4,7 @@ import type { ProductCategoryEnum } from '../../enums/ProductCategoryEnum';
4
4
  import type { ProductTierEnum } from '../../enums/ProductTierEnum';
5
5
  import type { InventoryLensUnavailableReasonEnum } from '../../enums/InventoryLensUnavailableReasonEnum';
6
6
  import type { InventoryTransferReasonEnum } from '../../enums/InventoryTransferReasonEnum';
7
+ import type { ItemTypeEnum } from '../../enums/ItemTypeEnum';
7
8
 
8
9
  /**
9
10
  * Los contadores que la pantalla «Inventario» del Admin VL pinta arriba, siempre — los cuatro viajan
@@ -127,6 +128,8 @@ export interface InventoryLensListItem {
127
128
  coverage: InventoryLensCoverage;
128
129
  alerts: InventoryLensAlerts;
129
130
  sold30d: number;
131
+ /** Producto físico o servicio. Ausente = PRODUCT. */
132
+ itemType?: ItemTypeEnum;
130
133
  }
131
134
 
132
135
  /** Fila del lente — el tipo depende del tab pedido. */
@@ -0,0 +1,6 @@
1
+ import type { TransferResponse } from './TransferResponse';
2
+
3
+ /** Response de backofficeListTransfers. */
4
+ export interface ListTransfersResponse {
5
+ items: TransferResponse[];
6
+ }
@@ -8,6 +8,8 @@ export interface ReservedComponent {
8
8
  qty: number;
9
9
  category: ProductCategoryEnum;
10
10
  trackingMode: TrackingModeEnum;
11
+ /** Precio vigente del componente, para repartir el precio del kit. */
12
+ priceCents?: number;
11
13
  }
12
14
 
13
15
  /** Response de privateReserveStock; el precio de la línea es `basePriceCents`. */
@@ -5,6 +5,8 @@ export interface SkuPriceEntry {
5
5
  effectiveFrom: string;
6
6
  listPriceCents: number | null;
7
7
  basePriceCents: number;
8
+ /** Precio del SKU dentro de un kit; informativo, no se aplica. */
9
+ comboPriceCents?: number;
8
10
  source: PriceSourceEnum;
9
11
  createdBy: string;
10
12
  }
@@ -3,6 +3,7 @@ import type { MdmProviderEnum } from '../../enums/MdmProviderEnum';
3
3
  import type { ProductCategoryEnum } from '../../enums/ProductCategoryEnum';
4
4
  import type { ProductTierEnum } from '../../enums/ProductTierEnum';
5
5
  import type { TrackingModeEnum } from '../../enums/TrackingModeEnum';
6
+ import type { ItemTypeEnum } from '../../enums/ItemTypeEnum';
6
7
  import type { ProductComponent } from '../ProductComponent';
7
8
 
8
9
  /** Fila por SKU del catálogo de venta de una tienda (privateGetStoreStockCatalog). */
@@ -25,6 +26,8 @@ export interface StoreCatalogItem {
25
26
  mdmLockMode: MdmLockModeEnum | null;
26
27
  /** Solo si es kit. */
27
28
  components?: ProductComponent[];
29
+ /** Producto físico o servicio. Ausente = PRODUCT. */
30
+ itemType?: ItemTypeEnum;
28
31
  }
29
32
 
30
33
  /** Response de privateGetStoreStockCatalog. */
@@ -0,0 +1,17 @@
1
+ import type { TransferStateEnum } from '../../enums/TransferStateEnum';
2
+
3
+ /** Un traspaso entre tiendas (TRF#); response de crear, recibir y cancelar. */
4
+ export interface TransferResponse {
5
+ transferId: string;
6
+ fromStoreId: string;
7
+ toStoreId: string;
8
+ sku: string;
9
+ qty: number;
10
+ /** IMEI o serie de cada pieza; vacío si el SKU se rastrea por cantidad. */
11
+ identifiers: string[];
12
+ state: TransferStateEnum;
13
+ createdBy: string;
14
+ updatedBy: string;
15
+ createdAt: string;
16
+ updatedAt: string;
17
+ }
@@ -8,6 +8,7 @@
8
8
  * @property {string} SOLD - Vendida.
9
9
  * @property {string} RETURNED - Devuelta por el cliente.
10
10
  * @property {string} DAMAGED - Dañada, fuera de stock vendible.
11
+ * @property {string} IN_TRANSIT - En traspaso entre tiendas, fuera de stock vendible.
11
12
  */
12
13
  export enum InventoryItemStatusEnum {
13
14
  AVAILABLE = 'AVAILABLE',
@@ -15,4 +16,5 @@ export enum InventoryItemStatusEnum {
15
16
  SOLD = 'SOLD',
16
17
  RETURNED = 'RETURNED',
17
18
  DAMAGED = 'DAMAGED',
19
+ IN_TRANSIT = 'IN_TRANSIT',
18
20
  }
@@ -0,0 +1,7 @@
1
+ /** Motivo de un movimiento manual de inventario (MOV#): merma, ajuste, garantía o devolución dañada. */
2
+ export enum InventoryMovementReasonEnum {
3
+ SHRINKAGE = 'SHRINKAGE',
4
+ ADJUSTMENT = 'ADJUSTMENT',
5
+ WARRANTY = 'WARRANTY',
6
+ DAMAGED_RETURN = 'DAMAGED_RETURN',
7
+ }
@@ -6,4 +6,7 @@ export enum InventoryMovementTypeEnum {
6
6
  SALE = 'SALE',
7
7
  RETURN = 'RETURN',
8
8
  ADJUSTMENT = 'ADJUSTMENT',
9
+ TRANSFER_OUT = 'TRANSFER_OUT',
10
+ TRANSFER_IN = 'TRANSFER_IN',
11
+ TRANSFER_CANCEL = 'TRANSFER_CANCEL',
9
12
  }
@@ -0,0 +1,5 @@
1
+ /** Tipo de ítem del catálogo: producto físico o servicio sin stock. Inmutable tras el alta. */
2
+ export enum ItemTypeEnum {
3
+ PRODUCT = 'PRODUCT',
4
+ SERVICE = 'SERVICE',
5
+ }
@@ -1,4 +1,5 @@
1
- /** Origen de un registro del historial de precios (PRICE#). */
1
+ /** Origen de un registro de catálogo (PRODUCT#, PRICE#, MOV#): la puerta de Zentral o el backoffice. */
2
2
  export enum PriceSourceEnum {
3
3
  ZENTRAL_SYNC = 'ZENTRAL_SYNC',
4
+ BACKOFFICE = 'BACKOFFICE',
4
5
  }
@@ -0,0 +1,5 @@
1
+ /** Condición de una pieza devuelta; DAMAGED no regresa al disponible. */
2
+ export enum ReturnConditionEnum {
3
+ GOOD = 'GOOD',
4
+ DAMAGED = 'DAMAGED',
5
+ }
@@ -0,0 +1,6 @@
1
+ /** Estado de un traspaso entre tiendas (TRF#); solo uno OPEN se recibe o cancela. */
2
+ export enum TransferStateEnum {
3
+ OPEN = 'OPEN',
4
+ RECEIVED = 'RECEIVED',
5
+ CANCELLED = 'CANCELLED',
6
+ }
@@ -11,9 +11,12 @@ export * from './enums/InventoryTransferReasonEnum';
11
11
 
12
12
  // Constantes del dominio
13
13
  export * from './constants/SkuPattern';
14
+ export * from './constants/NonBundleCategories';
15
+ export * from './constants/AdjustmentReasons';
14
16
 
15
17
  // Validators custom
16
18
  export * from './validators/IsMdmCoherentConstraint';
19
+ export * from './validators/IsPieceRefConstraint';
17
20
 
18
21
  // Entity DTOs
19
22
  export * from './dtos/Product';
@@ -51,6 +54,8 @@ export * from './enums/InventoryLensPeriodEnum';
51
54
  export * from './dtos/ProductComponent';
52
55
  export * from './dtos/requests/ReservationLineRef';
53
56
  export * from './dtos/requests/StockLine';
57
+ export * from './dtos/requests/ReturnPieceCondition';
58
+ export * from './dtos/requests/ReturnStockLine';
54
59
  export * from './dtos/requests/ReserveStockRequest';
55
60
  export * from './dtos/requests/RenewReservationsRequest';
56
61
  export * from './dtos/requests/SuggestPiecesQuery';
@@ -70,3 +75,20 @@ export * from './dtos/responses/StoreCatalogItem';
70
75
  export * from './dtos/responses/SkuPriceEntry';
71
76
  export * from './dtos/responses/GetInventorySkuResponse';
72
77
  export * from './dtos/responses/ListSkuPricesResponse';
78
+
79
+ // Operación independiente (ciclo 2)
80
+ export * from './enums/ItemTypeEnum';
81
+ export * from './enums/ReturnConditionEnum';
82
+ export * from './enums/TransferStateEnum';
83
+ export * from './enums/InventoryMovementReasonEnum';
84
+ export * from './dtos/requests/BackofficeCreateProductRequest';
85
+ export * from './dtos/requests/BackofficeCreateKitRequest';
86
+ export * from './dtos/requests/BackofficeCreateServiceRequest';
87
+ export * from './dtos/requests/BackofficeUpdateProductRequest';
88
+ export * from './dtos/requests/BackofficeCreateSkuPriceRequest';
89
+ export * from './dtos/requests/BackofficeRegisterEntryRequest';
90
+ export * from './dtos/requests/BackofficeRegisterAdjustmentRequest';
91
+ export * from './dtos/requests/BackofficeCreateTransferRequest';
92
+ export * from './dtos/requests/BackofficeListTransfersQuery';
93
+ export * from './dtos/responses/TransferResponse';
94
+ export * from './dtos/responses/ListTransfersResponse';
@@ -0,0 +1,19 @@
1
+ import {
2
+ ValidatorConstraint,
3
+ type ValidationArguments,
4
+ type ValidatorConstraintInterface,
5
+ } from 'class-validator';
6
+
7
+ /** Exige identifier (pieza con IMEI o serie) o qty (SKU por cantidad), nunca los dos. */
8
+ @ValidatorConstraint({ name: 'isPieceRef', async: false })
9
+ export class IsPieceRefConstraint implements ValidatorConstraintInterface {
10
+ validate(identifier: unknown, args: ValidationArguments): boolean {
11
+ const { qty } = args.object as { qty?: unknown };
12
+ if (qty !== undefined) return identifier === undefined;
13
+ return typeof identifier === 'string' && /^\S+$/.test(identifier);
14
+ }
15
+
16
+ defaultMessage(): string {
17
+ return 'identifier (pieza con IMEI o serie) o qty (por cantidad), exactamente uno';
18
+ }
19
+ }
@@ -1,5 +1,6 @@
1
- import { Expose } from 'class-transformer';
2
- import { IsBoolean, IsOptional, IsString, MaxLength, MinLength } from 'class-validator';
1
+ import { Expose, Type } from 'class-transformer';
2
+ import { IsArray, IsBoolean, IsOptional, IsString, MaxLength, MinLength, ValidateNested } from 'class-validator';
3
+ import { ReturnPieceCondition } from '../../../retailCatalog/dtos/requests/ReturnPieceCondition';
3
4
 
4
5
  /**
5
6
  * POST /backoffice/sales/:saleId/cancel — cancelación del Admin VL. SureKeep Fase 3 — pista Retail.
@@ -39,4 +40,12 @@ export class BackofficeCancelSaleRequest {
39
40
  @IsString()
40
41
  @MaxLength(64)
41
42
  outOfWindowExceptionId?: string;
43
+
44
+ /** Condición de cada pieza que regresa al inventario; las no listadas vuelven GOOD. */
45
+ @Expose()
46
+ @IsOptional()
47
+ @IsArray()
48
+ @ValidateNested({ each: true })
49
+ @Type(() => ReturnPieceCondition)
50
+ returnConditions?: ReturnPieceCondition[];
42
51
  }
@@ -1,5 +1,6 @@
1
- import { Expose } from 'class-transformer';
2
- import { IsBoolean, IsOptional, IsString, MaxLength } from 'class-validator';
1
+ import { Expose, Type } from 'class-transformer';
2
+ import { IsArray, IsBoolean, IsOptional, IsString, MaxLength, ValidateNested } from 'class-validator';
3
+ import { ReturnPieceCondition } from '../../../retailCatalog/dtos/requests/ReturnPieceCondition';
3
4
 
4
5
  /**
5
6
  * POST /sales/:saleId/cancel — cancela una venta (flujo C, solo BO dentro de ventana param). `reason`
@@ -29,4 +30,12 @@ export class CancelSaleRequest {
29
30
  @IsOptional()
30
31
  @IsBoolean()
31
32
  equipmentVerified?: boolean;
33
+
34
+ /** Condición de cada pieza que regresa al inventario; las no listadas vuelven GOOD. */
35
+ @Expose()
36
+ @IsOptional()
37
+ @IsArray()
38
+ @ValidateNested({ each: true })
39
+ @Type(() => ReturnPieceCondition)
40
+ returnConditions?: ReturnPieceCondition[];
32
41
  }
@@ -0,0 +1,9 @@
1
+ import { BusinessNameEnum } from '../enums/BusinessNameEnum';
2
+
3
+ export class ConsultStpOrderRequest {
4
+ transactionNumber: string;
5
+ orderType: "E" | "R";
6
+ operationDate: string;
7
+ /** DEC-037: empresa con la que se firmó la orden; sin él, fiado-stp-lambda usa FIADOSA */
8
+ businessName?: BusinessNameEnum;
9
+ }
@@ -1,20 +1,29 @@
1
+ import { StpOrderSourceEnum } from '../enums/StpOrderSourceEnum';
2
+
1
3
  export class PutStpOrderRequest {
2
- processorObject: any | null;
3
- directoryId: string;
4
- phoneNumber: string;
5
- indexName: string;
4
+ processorObject?: any | null;
5
+ directoryId?: string;
6
+ phoneNumber?: string;
7
+ indexName?: string;
6
8
  amount: number;
7
9
  transactionNumber: string;
8
10
  numericReference: number;
9
11
  concept: string | null;
10
12
  beneficiaryAccount: string;
11
13
  beneficiaryName: string;
12
- bankName: string;
14
+ bankName?: string;
13
15
  bankCode: string;
14
- originatorAccountNumber: string;
15
- originatorCurp: string;
16
- originatorName: string;
16
+ originatorAccountNumber?: string;
17
+ originatorCurp?: string;
18
+ originatorName?: string;
17
19
  latitude?: number;
18
20
  longitude?: number;
19
21
  sessionId?: string;
20
- }
22
+ /**
23
+ * Origen de la orden: USER_TRANSFER (default, comportamiento actual)
24
+ * | BENEFITS_SETTLEMENT (money-transfer-connector, DEC-013)
25
+ */
26
+ source?: StpOrderSourceEnum;
27
+ /** RFC del beneficiario — solo aplica a órdenes BENEFITS_SETTLEMENT. */
28
+ beneficiaryRfc?: string;
29
+ }
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Origen de una orden STP (`PutStpOrderRequest.source`).
3
+ * - USER_TRANSFER: transferencia iniciada por un usuario (default, comportamiento actual).
4
+ * - BENEFITS_SETTLEMENT: liquidación de beneficios emitida por money-transfer-connector (DEC-013).
5
+ */
6
+ export enum StpOrderSourceEnum {
7
+ USER_TRANSFER = "USER_TRANSFER",
8
+ BENEFITS_SETTLEMENT = "BENEFITS_SETTLEMENT"
9
+ }
@@ -1,4 +1,5 @@
1
1
  export * from './dtos/PutStpOrderRequest';
2
+ export * from './dtos/ConsultStpOrderRequest';
2
3
  export * from './dtos/SpeiWebhookMessage';
3
4
  export * from './dtos/GetBusinessAccountBalanceResponse';
4
5
  export * from './dtos/SpeiAcuseCepRequest';
@@ -8,3 +9,4 @@ export * from './enums/ActividadesProductivasEnum';
8
9
  export * from './enums/EntidadesFederativasEnum';
9
10
  export * from './enums/PaisesEnum';
10
11
  export * from './enums/BusinessNameEnum';
12
+ export * from './enums/StpOrderSourceEnum';