@fiado/type-kit 3.460.0 → 3.462.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 (199) hide show
  1. package/_test_/unit/loanCredit/customerPaymentDtos.test.ts +87 -0
  2. package/_test_/unit/loanCredit/dtos/createCustomerPaymentRequest.test.ts +78 -0
  3. package/_test_/unit/retailCatalog/catalogEnums.test.ts +34 -0
  4. package/_test_/unit/retailCatalog/stockRequests.test.ts +156 -0
  5. package/_test_/unit/retailLoan/paymentContract.test.ts +128 -0
  6. package/_test_/unit/retailWizard/multiItemRequests.test.ts +114 -0
  7. package/_test_/unit/retailWizard/multiItemShapes.test.ts +126 -0
  8. package/bin/loanCredit/dtos/requests/CreateCustomerPaymentRequest.d.ts +9 -0
  9. package/bin/loanCredit/dtos/requests/CreateCustomerPaymentRequest.js +35 -0
  10. package/bin/loanCredit/dtos/responses/LoanAdHocChargeRequested.d.ts +6 -0
  11. package/bin/loanCredit/dtos/responses/LoanCustomerPaymentOptions.d.ts +33 -0
  12. package/bin/loanCredit/dtos/responses/LoanCustomerPaymentOptions.js +2 -0
  13. package/bin/loanCredit/dtos/responses/LoanCustomerPaymentResult.d.ts +14 -0
  14. package/bin/loanCredit/dtos/responses/LoanCustomerPaymentResult.js +2 -0
  15. package/bin/loanCredit/enums/LoanCustomerPaymentTypeEnum.d.ts +5 -0
  16. package/bin/loanCredit/enums/LoanCustomerPaymentTypeEnum.js +9 -0
  17. package/bin/loanCredit/enums/LoanNextInstallmentModeEnum.d.ts +7 -0
  18. package/bin/loanCredit/enums/LoanNextInstallmentModeEnum.js +11 -0
  19. package/bin/loanCredit/enums/LoanPaymentOptionUnavailableReasonEnum.d.ts +13 -0
  20. package/bin/loanCredit/enums/LoanPaymentOptionUnavailableReasonEnum.js +17 -0
  21. package/bin/loanCredit/index.d.ts +6 -0
  22. package/bin/loanCredit/index.js +7 -0
  23. package/bin/retailCatalog/dtos/Product.d.ts +15 -1
  24. package/bin/retailCatalog/dtos/ProductComponent.d.ts +5 -0
  25. package/bin/retailCatalog/dtos/ProductComponent.js +29 -0
  26. package/bin/retailCatalog/dtos/requests/GetInventorySkuQuery.d.ts +10 -0
  27. package/bin/retailCatalog/dtos/requests/GetInventorySkuQuery.js +42 -0
  28. package/bin/retailCatalog/dtos/requests/InventoryLensQuery.d.ts +5 -0
  29. package/bin/retailCatalog/dtos/requests/InventoryLensQuery.js +11 -0
  30. package/bin/retailCatalog/dtos/requests/ReleaseStockRequest.d.ts +8 -0
  31. package/bin/retailCatalog/dtos/requests/ReleaseStockRequest.js +34 -0
  32. package/bin/retailCatalog/dtos/requests/RenewReservationsRequest.d.ts +6 -0
  33. package/bin/retailCatalog/dtos/requests/RenewReservationsRequest.js +30 -0
  34. package/bin/retailCatalog/dtos/requests/ReservationLineRef.d.ts +5 -0
  35. package/bin/retailCatalog/dtos/requests/ReservationLineRef.js +25 -0
  36. package/bin/retailCatalog/dtos/requests/ReserveStockRequest.d.ts +10 -0
  37. package/bin/retailCatalog/dtos/requests/ReserveStockRequest.js +42 -0
  38. package/bin/retailCatalog/dtos/requests/ReturnStockRequest.d.ts +9 -0
  39. package/bin/retailCatalog/dtos/requests/ReturnStockRequest.js +38 -0
  40. package/bin/retailCatalog/dtos/requests/SellStockRequest.d.ts +7 -0
  41. package/bin/retailCatalog/dtos/requests/SellStockRequest.js +34 -0
  42. package/bin/retailCatalog/dtos/requests/StockLine.d.ts +14 -0
  43. package/bin/retailCatalog/dtos/requests/StockLine.js +56 -0
  44. package/bin/retailCatalog/dtos/requests/SuggestPiecesQuery.d.ts +5 -0
  45. package/bin/retailCatalog/dtos/requests/SuggestPiecesQuery.js +26 -0
  46. package/bin/retailCatalog/dtos/requests/SyncInventoryRequest.d.ts +47 -0
  47. package/bin/retailCatalog/dtos/requests/SyncInventoryRequest.js +173 -0
  48. package/bin/retailCatalog/dtos/responses/GetInventorySkuResponse.d.ts +34 -0
  49. package/bin/retailCatalog/dtos/responses/GetInventorySkuResponse.js +2 -0
  50. package/bin/retailCatalog/dtos/responses/InventoryLensResponse.d.ts +43 -2
  51. package/bin/retailCatalog/dtos/responses/ListSkuPricesResponse.d.ts +6 -0
  52. package/bin/retailCatalog/dtos/responses/ListSkuPricesResponse.js +2 -0
  53. package/bin/retailCatalog/dtos/responses/ReleaseStockResponse.d.ts +10 -0
  54. package/bin/retailCatalog/dtos/responses/ReleaseStockResponse.js +2 -0
  55. package/bin/retailCatalog/dtos/responses/RenewReservationsResponse.d.ts +10 -0
  56. package/bin/retailCatalog/dtos/responses/RenewReservationsResponse.js +2 -0
  57. package/bin/retailCatalog/dtos/responses/ReserveStockResponse.d.ts +25 -0
  58. package/bin/retailCatalog/dtos/responses/ReserveStockResponse.js +2 -0
  59. package/bin/retailCatalog/dtos/responses/ReturnStockResponse.d.ts +4 -0
  60. package/bin/retailCatalog/dtos/responses/ReturnStockResponse.js +2 -0
  61. package/bin/retailCatalog/dtos/responses/SellStockResponse.d.ts +18 -0
  62. package/bin/retailCatalog/dtos/responses/SellStockResponse.js +2 -0
  63. package/bin/retailCatalog/dtos/responses/SkuPriceEntry.d.ts +9 -0
  64. package/bin/retailCatalog/dtos/responses/SkuPriceEntry.js +2 -0
  65. package/bin/retailCatalog/dtos/responses/StoreCatalogItem.d.ts +29 -0
  66. package/bin/retailCatalog/dtos/responses/StoreCatalogItem.js +2 -0
  67. package/bin/retailCatalog/dtos/responses/SuggestPiecesResponse.d.ts +6 -0
  68. package/bin/retailCatalog/dtos/responses/SuggestPiecesResponse.js +2 -0
  69. package/bin/retailCatalog/dtos/responses/SyncInventoryResponse.d.ts +13 -0
  70. package/bin/retailCatalog/dtos/responses/SyncInventoryResponse.js +2 -0
  71. package/bin/retailCatalog/dtos/validation/ValidateProductResponse.d.ts +6 -1
  72. package/bin/retailCatalog/enums/InventoryLensFilterEnum.d.ts +3 -1
  73. package/bin/retailCatalog/enums/InventoryLensFilterEnum.js +2 -0
  74. package/bin/retailCatalog/enums/InventoryLensPeriodEnum.d.ts +7 -0
  75. package/bin/retailCatalog/enums/InventoryLensPeriodEnum.js +11 -0
  76. package/bin/retailCatalog/enums/InventoryMovementTypeEnum.d.ts +9 -0
  77. package/bin/retailCatalog/enums/InventoryMovementTypeEnum.js +13 -0
  78. package/bin/retailCatalog/enums/InventorySyncRejectionCodeEnum.d.ts +9 -0
  79. package/bin/retailCatalog/enums/InventorySyncRejectionCodeEnum.js +13 -0
  80. package/bin/retailCatalog/enums/InventorySyncResultStatusEnum.d.ts +6 -0
  81. package/bin/retailCatalog/enums/InventorySyncResultStatusEnum.js +10 -0
  82. package/bin/retailCatalog/enums/PriceSourceEnum.d.ts +4 -0
  83. package/bin/retailCatalog/enums/PriceSourceEnum.js +8 -0
  84. package/bin/retailCatalog/enums/ProductCategoryEnum.d.ts +9 -0
  85. package/bin/retailCatalog/enums/ProductCategoryEnum.js +13 -0
  86. package/bin/retailCatalog/enums/TrackingModeEnum.d.ts +6 -0
  87. package/bin/retailCatalog/enums/TrackingModeEnum.js +10 -0
  88. package/bin/retailCatalog/index.d.ts +29 -0
  89. package/bin/retailCatalog/index.js +30 -0
  90. package/bin/retailLoan/dtos/CreateMyPaymentRequest.d.ts +7 -0
  91. package/bin/retailLoan/dtos/CreateMyPaymentRequest.js +30 -0
  92. package/bin/retailLoan/dtos/CreateMyPaymentResponse.d.ts +9 -0
  93. package/bin/retailLoan/dtos/CreateMyPaymentResponse.js +2 -0
  94. package/bin/retailLoan/dtos/MyPaymentOptions.d.ts +34 -0
  95. package/bin/retailLoan/dtos/MyPaymentOptions.js +2 -0
  96. package/bin/retailLoan/enums/MyCollectionOutcomeEnum.d.ts +11 -0
  97. package/bin/retailLoan/enums/MyCollectionOutcomeEnum.js +15 -0
  98. package/bin/retailLoan/enums/MyNextInstallmentModeEnum.d.ts +5 -0
  99. package/bin/retailLoan/enums/MyNextInstallmentModeEnum.js +9 -0
  100. package/bin/retailLoan/enums/MyPaymentTypeEnum.d.ts +6 -0
  101. package/bin/retailLoan/enums/MyPaymentTypeEnum.js +10 -0
  102. package/bin/retailLoan/enums/MyPaymentUnavailableReasonEnum.d.ts +8 -0
  103. package/bin/retailLoan/enums/MyPaymentUnavailableReasonEnum.js +12 -0
  104. package/bin/retailLoan/index.d.ts +7 -0
  105. package/bin/retailLoan/index.js +8 -0
  106. package/bin/retailWizard/dtos/Sale.d.ts +7 -0
  107. package/bin/retailWizard/dtos/SaleLine.d.ts +16 -0
  108. package/bin/retailWizard/dtos/SaleLine.js +2 -0
  109. package/bin/retailWizard/dtos/WizardLineIdentifiers.d.ts +5 -0
  110. package/bin/retailWizard/dtos/WizardLineIdentifiers.js +2 -0
  111. package/bin/retailWizard/dtos/WizardLineProduct.d.ts +15 -0
  112. package/bin/retailWizard/dtos/WizardLineProduct.js +2 -0
  113. package/bin/retailWizard/dtos/WizardProduct.d.ts +6 -0
  114. package/bin/retailWizard/dtos/WizardReservedLine.d.ts +35 -0
  115. package/bin/retailWizard/dtos/WizardReservedLine.js +2 -0
  116. package/bin/retailWizard/dtos/WizardSession.d.ts +5 -0
  117. package/bin/retailWizard/dtos/requests/AddProductRequest.d.ts +4 -8
  118. package/bin/retailWizard/dtos/requests/AddProductRequest.js +9 -8
  119. package/bin/retailWizard/dtos/requests/CompleteSaleRequest.d.ts +16 -0
  120. package/bin/retailWizard/dtos/requests/CompleteSaleRequest.js +59 -0
  121. package/bin/retailWizard/dtos/requests/DeleteProductRequest.d.ts +3 -1
  122. package/bin/retailWizard/dtos/requests/DeleteProductRequest.js +7 -1
  123. package/bin/retailWizard/dtos/requests/QuoteRequest.d.ts +2 -0
  124. package/bin/retailWizard/dtos/requests/QuoteRequest.js +7 -0
  125. package/bin/retailWizard/dtos/requests/SuggestIdentifiersQuery.d.ts +5 -0
  126. package/bin/retailWizard/dtos/requests/SuggestIdentifiersQuery.js +30 -0
  127. package/bin/retailWizard/enums/LinePaymentTypeEnum.d.ts +7 -0
  128. package/bin/retailWizard/enums/LinePaymentTypeEnum.js +11 -0
  129. package/bin/retailWizard/enums/WizardLineStatusEnum.d.ts +9 -0
  130. package/bin/retailWizard/enums/WizardLineStatusEnum.js +13 -0
  131. package/bin/retailWizard/index.d.ts +8 -0
  132. package/bin/retailWizard/index.js +8 -0
  133. package/package.json +1 -1
  134. package/src/loanCredit/dtos/requests/CreateCustomerPaymentRequest.ts +21 -0
  135. package/src/loanCredit/dtos/responses/LoanAdHocChargeRequested.ts +3 -0
  136. package/src/loanCredit/dtos/responses/LoanCustomerPaymentOptions.ts +32 -0
  137. package/src/loanCredit/dtos/responses/LoanCustomerPaymentResult.ts +12 -0
  138. package/src/loanCredit/enums/LoanCustomerPaymentTypeEnum.ts +5 -0
  139. package/src/loanCredit/enums/LoanNextInstallmentModeEnum.ts +7 -0
  140. package/src/loanCredit/enums/LoanPaymentOptionUnavailableReasonEnum.ts +13 -0
  141. package/src/loanCredit/index.ts +8 -0
  142. package/src/retailCatalog/dtos/Product.ts +17 -1
  143. package/src/retailCatalog/dtos/ProductComponent.ts +14 -0
  144. package/src/retailCatalog/dtos/requests/GetInventorySkuQuery.ts +27 -0
  145. package/src/retailCatalog/dtos/requests/InventoryLensQuery.ts +12 -1
  146. package/src/retailCatalog/dtos/requests/ReleaseStockRequest.ts +19 -0
  147. package/src/retailCatalog/dtos/requests/RenewReservationsRequest.ts +15 -0
  148. package/src/retailCatalog/dtos/requests/ReservationLineRef.ts +10 -0
  149. package/src/retailCatalog/dtos/requests/ReserveStockRequest.ts +24 -0
  150. package/src/retailCatalog/dtos/requests/ReturnStockRequest.ts +22 -0
  151. package/src/retailCatalog/dtos/requests/SellStockRequest.ts +18 -0
  152. package/src/retailCatalog/dtos/requests/StockLine.ts +36 -0
  153. package/src/retailCatalog/dtos/requests/SuggestPiecesQuery.ts +11 -0
  154. package/src/retailCatalog/dtos/requests/SyncInventoryRequest.ts +145 -0
  155. package/src/retailCatalog/dtos/responses/GetInventorySkuResponse.ts +38 -0
  156. package/src/retailCatalog/dtos/responses/InventoryLensResponse.ts +48 -2
  157. package/src/retailCatalog/dtos/responses/ListSkuPricesResponse.ts +7 -0
  158. package/src/retailCatalog/dtos/responses/ReleaseStockResponse.ts +11 -0
  159. package/src/retailCatalog/dtos/responses/RenewReservationsResponse.ts +11 -0
  160. package/src/retailCatalog/dtos/responses/ReserveStockResponse.ts +27 -0
  161. package/src/retailCatalog/dtos/responses/ReturnStockResponse.ts +4 -0
  162. package/src/retailCatalog/dtos/responses/SellStockResponse.ts +20 -0
  163. package/src/retailCatalog/dtos/responses/SkuPriceEntry.ts +10 -0
  164. package/src/retailCatalog/dtos/responses/StoreCatalogItem.ts +31 -0
  165. package/src/retailCatalog/dtos/responses/SuggestPiecesResponse.ts +7 -0
  166. package/src/retailCatalog/dtos/responses/SyncInventoryResponse.ts +15 -0
  167. package/src/retailCatalog/dtos/validation/ValidateProductResponse.ts +6 -1
  168. package/src/retailCatalog/enums/InventoryLensFilterEnum.ts +2 -0
  169. package/src/retailCatalog/enums/InventoryLensPeriodEnum.ts +7 -0
  170. package/src/retailCatalog/enums/InventoryMovementTypeEnum.ts +9 -0
  171. package/src/retailCatalog/enums/InventorySyncRejectionCodeEnum.ts +9 -0
  172. package/src/retailCatalog/enums/InventorySyncResultStatusEnum.ts +6 -0
  173. package/src/retailCatalog/enums/PriceSourceEnum.ts +4 -0
  174. package/src/retailCatalog/enums/ProductCategoryEnum.ts +9 -0
  175. package/src/retailCatalog/enums/TrackingModeEnum.ts +6 -0
  176. package/src/retailCatalog/index.ts +31 -0
  177. package/src/retailLoan/dtos/CreateMyPaymentRequest.ts +16 -0
  178. package/src/retailLoan/dtos/CreateMyPaymentResponse.ts +10 -0
  179. package/src/retailLoan/dtos/MyPaymentOptions.ts +28 -0
  180. package/src/retailLoan/enums/MyCollectionOutcomeEnum.ts +11 -0
  181. package/src/retailLoan/enums/MyNextInstallmentModeEnum.ts +5 -0
  182. package/src/retailLoan/enums/MyPaymentTypeEnum.ts +6 -0
  183. package/src/retailLoan/enums/MyPaymentUnavailableReasonEnum.ts +8 -0
  184. package/src/retailLoan/index.ts +9 -0
  185. package/src/retailWizard/dtos/Sale.ts +7 -0
  186. package/src/retailWizard/dtos/SaleLine.ts +17 -0
  187. package/src/retailWizard/dtos/WizardLineIdentifiers.ts +5 -0
  188. package/src/retailWizard/dtos/WizardLineProduct.ts +16 -0
  189. package/src/retailWizard/dtos/WizardProduct.ts +7 -0
  190. package/src/retailWizard/dtos/WizardReservedLine.ts +36 -0
  191. package/src/retailWizard/dtos/WizardSession.ts +5 -0
  192. package/src/retailWizard/dtos/requests/AddProductRequest.ts +9 -8
  193. package/src/retailWizard/dtos/requests/CompleteSaleRequest.ts +41 -0
  194. package/src/retailWizard/dtos/requests/DeleteProductRequest.ts +7 -1
  195. package/src/retailWizard/dtos/requests/QuoteRequest.ts +8 -1
  196. package/src/retailWizard/dtos/requests/SuggestIdentifiersQuery.ts +15 -0
  197. package/src/retailWizard/enums/LinePaymentTypeEnum.ts +7 -0
  198. package/src/retailWizard/enums/WizardLineStatusEnum.ts +9 -0
  199. package/src/retailWizard/index.ts +8 -0
@@ -0,0 +1,9 @@
1
+ /** Tipo de movimiento del libro de inventario (MOV#) de una tienda. */
2
+ export enum InventoryMovementTypeEnum {
3
+ ENTRY = 'ENTRY',
4
+ RESERVATION = 'RESERVATION',
5
+ RELEASE = 'RELEASE',
6
+ SALE = 'SALE',
7
+ RETURN = 'RETURN',
8
+ ADJUSTMENT = 'ADJUSTMENT',
9
+ }
@@ -0,0 +1,9 @@
1
+ /** Motivo por el que la puerta de entrada rechaza un ítem; el resto del lote sí se aplica. */
2
+ export enum InventorySyncRejectionCodeEnum {
3
+ /** El identificador ya existe en otra tienda o SKU del tenant. */
4
+ DUPLICATE_IDENTIFIER = 'DUPLICATE_IDENTIFIER',
5
+ /** El ajuste de un SKU por cantidad deja el saldo por debajo de lo reservado. */
6
+ ADJUSTMENT_EXCEEDS_AVAILABLE = 'ADJUSTMENT_EXCEEDS_AVAILABLE',
7
+ /** El precio trae una vigencia futura, que este ciclo no se admite. */
8
+ FUTURE_PRICE_NOT_SUPPORTED = 'FUTURE_PRICE_NOT_SUPPORTED',
9
+ }
@@ -0,0 +1,6 @@
1
+ /** Resultado por ítem de la puerta de entrada (sync): aplicado, sin cambios o rechazado. */
2
+ export enum InventorySyncResultStatusEnum {
3
+ APPLIED = 'APPLIED',
4
+ NOOP = 'NOOP',
5
+ REJECTED = 'REJECTED',
6
+ }
@@ -0,0 +1,4 @@
1
+ /** Origen de un registro del historial de precios (PRICE#). */
2
+ export enum PriceSourceEnum {
3
+ ZENTRAL_SYNC = 'ZENTRAL_SYNC',
4
+ }
@@ -0,0 +1,9 @@
1
+ /** Categoría del producto tal como llega de Zentral; solo PHONE lleva configuración MDM. */
2
+ export enum ProductCategoryEnum {
3
+ PHONE = 'PHONE',
4
+ SIM = 'SIM',
5
+ MODEM = 'MODEM',
6
+ ACCESSORY = 'ACCESSORY',
7
+ /** Kit: se vende como una línea y consume el stock de sus componentes. */
8
+ BUNDLE = 'BUNDLE',
9
+ }
@@ -0,0 +1,6 @@
1
+ /** Cómo se rastrea el stock de un producto: por pieza (IMEI o serie) o solo por cantidad. */
2
+ export enum TrackingModeEnum {
3
+ IMEI = 'IMEI',
4
+ SERIAL = 'SERIAL',
5
+ QUANTITY = 'QUANTITY',
6
+ }
@@ -39,3 +39,34 @@ export * from './dtos/responses/InventoryLensResponse';
39
39
  // Validation DTOs (shapes de endpoints privados)
40
40
  export * from './dtos/validation/ValidateProductResponse';
41
41
  export * from './dtos/validation/ValidateInventoryResponse';
42
+
43
+ // Inventario multi-item (ciclo 1)
44
+ export * from './enums/ProductCategoryEnum';
45
+ export * from './enums/TrackingModeEnum';
46
+ export * from './enums/InventoryMovementTypeEnum';
47
+ export * from './enums/InventorySyncResultStatusEnum';
48
+ export * from './enums/InventorySyncRejectionCodeEnum';
49
+ export * from './enums/PriceSourceEnum';
50
+ export * from './enums/InventoryLensPeriodEnum';
51
+ export * from './dtos/ProductComponent';
52
+ export * from './dtos/requests/ReservationLineRef';
53
+ export * from './dtos/requests/StockLine';
54
+ export * from './dtos/requests/ReserveStockRequest';
55
+ export * from './dtos/requests/RenewReservationsRequest';
56
+ export * from './dtos/requests/SuggestPiecesQuery';
57
+ export * from './dtos/requests/SellStockRequest';
58
+ export * from './dtos/requests/ReleaseStockRequest';
59
+ export * from './dtos/requests/ReturnStockRequest';
60
+ export * from './dtos/requests/SyncInventoryRequest';
61
+ export * from './dtos/requests/GetInventorySkuQuery';
62
+ export * from './dtos/responses/ReserveStockResponse';
63
+ export * from './dtos/responses/RenewReservationsResponse';
64
+ export * from './dtos/responses/SuggestPiecesResponse';
65
+ export * from './dtos/responses/SellStockResponse';
66
+ export * from './dtos/responses/ReleaseStockResponse';
67
+ export * from './dtos/responses/ReturnStockResponse';
68
+ export * from './dtos/responses/SyncInventoryResponse';
69
+ export * from './dtos/responses/StoreCatalogItem';
70
+ export * from './dtos/responses/SkuPriceEntry';
71
+ export * from './dtos/responses/GetInventorySkuResponse';
72
+ export * from './dtos/responses/ListSkuPricesResponse';
@@ -0,0 +1,16 @@
1
+ import { Expose } from 'class-transformer';
2
+ import { IsEnum, IsNumber, IsPositive } from 'class-validator';
3
+ import { MyPaymentTypeEnum } from '../enums/MyPaymentTypeEnum';
4
+
5
+ /** Body de `POST /benefits/{benefitId}/credits/{creditId}/payments`. La llave va en el header `Idempotency-Key`. */
6
+ export class CreateMyPaymentRequest {
7
+ @Expose()
8
+ @IsEnum(MyPaymentTypeEnum)
9
+ type!: MyPaymentTypeEnum;
10
+
11
+ /** Monto en pesos que vio el cliente; si ya no coincide, responde PAYMENT_AMOUNT_CHANGED. */
12
+ @Expose()
13
+ @IsNumber({ maxDecimalPlaces: 2 })
14
+ @IsPositive()
15
+ expectedAmount!: number;
16
+ }
@@ -0,0 +1,10 @@
1
+ import { MyCollectionOutcomeEnum } from '../enums/MyCollectionOutcomeEnum';
2
+ import { MyPaymentTypeEnum } from '../enums/MyPaymentTypeEnum';
3
+
4
+ /** Response 202 del pago. `amount` en pesos. */
5
+ export interface CreateMyPaymentResponse {
6
+ creditId: string;
7
+ type: MyPaymentTypeEnum;
8
+ amount: number;
9
+ collection: MyCollectionOutcomeEnum;
10
+ }
@@ -0,0 +1,28 @@
1
+ import { MyNextInstallmentModeEnum } from '../enums/MyNextInstallmentModeEnum';
2
+ import { MyPaymentTypeEnum } from '../enums/MyPaymentTypeEnum';
3
+ import { MyPaymentUnavailableReasonEnum } from '../enums/MyPaymentUnavailableReasonEnum';
4
+
5
+ /** Una opción de pago. `amount` en pesos, solo si está disponible. */
6
+ export interface MyPaymentOption {
7
+ available: boolean;
8
+ unavailableReason?: MyPaymentUnavailableReasonEnum;
9
+ amount?: number;
10
+ }
11
+
12
+ /** Opciones de pago de un crédito (`GET /benefits/{benefitId}/credits/{creditId}/payment-options`). Montos en pesos. */
13
+ export interface MyPaymentOptions {
14
+ /** Pago en curso; mientras exista, ninguna opción está disponible. */
15
+ pendingPayment?: { type: MyPaymentTypeEnum; amount: number };
16
+ nextInstallment: MyPaymentOption & {
17
+ mode?: MyNextInstallmentModeEnum;
18
+ installmentNumber?: number;
19
+ /** `YYYY-MM-DD`. */
20
+ dueDate?: string;
21
+ };
22
+ advance: MyPaymentOption;
23
+ settlement: MyPaymentOption & {
24
+ breakdown?: { overdue: number; capital: number; interest: number; iva: number };
25
+ savings?: number;
26
+ quotedAt?: string;
27
+ };
28
+ }
@@ -0,0 +1,11 @@
1
+ /** Desenlace del cobro tal como lo contestó el motor. */
2
+ export enum MyCollectionOutcomeEnum {
3
+ /** FULL */
4
+ COLLECTED = 'COLLECTED',
5
+ /** PARTIAL */
6
+ PARTIAL = 'PARTIAL',
7
+ /** NONE */
8
+ NOT_COLLECTED = 'NOT_COLLECTED',
9
+ /** El motor no contestó a tiempo. */
10
+ UNKNOWN = 'UNKNOWN',
11
+ }
@@ -0,0 +1,5 @@
1
+ /** Cómo se cobra la siguiente cuota: se adelanta, o se cobra lo que ya vence o venció. */
2
+ export enum MyNextInstallmentModeEnum {
3
+ ADVANCE = 'ADVANCE',
4
+ COLLECT_DUE = 'COLLECT_DUE',
5
+ }
@@ -0,0 +1,6 @@
1
+ /** Pago que el cliente pide desde la app. `ADVANCE` = varias cuotas. */
2
+ export enum MyPaymentTypeEnum {
3
+ NEXT_INSTALLMENT = 'NEXT_INSTALLMENT',
4
+ ADVANCE = 'ADVANCE',
5
+ SETTLEMENT = 'SETTLEMENT',
6
+ }
@@ -0,0 +1,8 @@
1
+ /** Por qué una opción de pago no está disponible. Mismos valores que manda loan-credit. */
2
+ export enum MyPaymentUnavailableReasonEnum {
3
+ PAYMENT_IN_PROGRESS = 'PAYMENT_IN_PROGRESS',
4
+ CREDIT_NOT_CURRENT = 'CREDIT_NOT_CURRENT',
5
+ USE_SETTLEMENT = 'USE_SETTLEMENT',
6
+ NOT_AVAILABLE_YET = 'NOT_AVAILABLE_YET',
7
+ CREDIT_CLOSED = 'CREDIT_CLOSED',
8
+ }
@@ -13,3 +13,12 @@ export * from './dtos/MyInstallment';
13
13
  export * from './dtos/MyPayment';
14
14
  export * from './dtos/MyDocument';
15
15
  export * from './dtos/MyDocumentUrl';
16
+
17
+ // Pagos
18
+ export * from './enums/MyPaymentTypeEnum';
19
+ export * from './enums/MyNextInstallmentModeEnum';
20
+ export * from './enums/MyPaymentUnavailableReasonEnum';
21
+ export * from './enums/MyCollectionOutcomeEnum';
22
+ export * from './dtos/MyPaymentOptions';
23
+ export * from './dtos/CreateMyPaymentRequest';
24
+ export * from './dtos/CreateMyPaymentResponse';
@@ -4,6 +4,7 @@ import type { SalePaymentMethodEnum } from '../enums/SalePaymentMethodEnum';
4
4
  import type { ExternalProviderEnum } from '../enums/ExternalProviderEnum';
5
5
  import type { CentralSyncStatusEnum } from '../enums/CentralSyncStatusEnum';
6
6
  import type { SalePaymentDetail } from './SalePaymentDetail';
7
+ import type { SaleLine } from './SaleLine';
7
8
 
8
9
  /**
9
10
  * Venta (modelo-datos §3). pk `SALE#<saleId>` · sk `META` · 4 GSIs (`retailerId-soldAt-index`,
@@ -20,6 +21,12 @@ export interface Sale {
20
21
  type: SaleTypeEnum;
21
22
  externalProvider: ExternalProviderEnum | null;
22
23
  sku: string;
24
+ /** Líneas vendidas; `sku` e `imei` siguen siendo los del teléfono financiado o de la línea principal. */
25
+ lines?: SaleLine[];
26
+ /** SKUs de líneas y componentes, para filtrar ventas por SKU. */
27
+ skus?: string[];
28
+ /** La cancelación aún no confirma la devolución al inventario. */
29
+ inventoryReturnPending?: boolean;
23
30
  /** IMEI consumido del silo también en contado (local-first); null en EXTERNAL_REFERRAL (D15). */
24
31
  imei: string | null;
25
32
  /**
@@ -0,0 +1,17 @@
1
+ import type { SoldLineComponent } from '../../retailCatalog/dtos/responses/SellStockResponse';
2
+ import type { LinePaymentTypeEnum } from '../enums/LinePaymentTypeEnum';
3
+ import type { WizardLineProduct } from './WizardLineProduct';
4
+
5
+ /** Línea de una venta cerrada; un producto suelto es un solo componente. */
6
+ export interface SaleLine {
7
+ lineId: string;
8
+ sku: string;
9
+ qty: number;
10
+ basePriceCents: number;
11
+ listPriceCents: number | null;
12
+ /** Llave del registro PRICE# del que salió el precio. */
13
+ priceSk: string;
14
+ paymentType: LinePaymentTypeEnum;
15
+ components: SoldLineComponent[];
16
+ product?: WizardLineProduct | null;
17
+ }
@@ -0,0 +1,5 @@
1
+ /** Identificadores (IMEI o serie) capturados para un SKU de la línea; un producto suelto es un solo SKU. */
2
+ export interface WizardLineIdentifiers {
3
+ sku: string;
4
+ identifiers: string[];
5
+ }
@@ -0,0 +1,16 @@
1
+ import type { ProductCategoryEnum } from '../../retailCatalog/enums/ProductCategoryEnum';
2
+ import type { ProductTierEnum } from '../../retailCatalog/enums/ProductTierEnum';
3
+ import type { TrackingModeEnum } from '../../retailCatalog/enums/TrackingModeEnum';
4
+
5
+ /** Ficha comercial de una línea, congelada al reservar para pintarla sin volver al catálogo. */
6
+ export interface WizardLineProduct {
7
+ brand: string;
8
+ model: string;
9
+ capacity: string | null;
10
+ color: string | null;
11
+ imageUrl: string | null;
12
+ /** `null` = Sin gama. */
13
+ tier: ProductTierEnum | null;
14
+ category: ProductCategoryEnum;
15
+ trackingMode: TrackingModeEnum;
16
+ }
@@ -1,3 +1,6 @@
1
+ import type { ProductCategoryEnum } from '../../retailCatalog/enums/ProductCategoryEnum';
2
+ import type { TrackingModeEnum } from '../../retailCatalog/enums/TrackingModeEnum';
3
+
1
4
  /**
2
5
  * Ficha COMERCIAL del equipo reservado, congelada en la sesión al momento de reservarlo (S03).
3
6
  *
@@ -38,4 +41,8 @@ export interface WizardProduct {
38
41
  * Mismo nombre que en `retail-catalog`: es su dato, no se renombra al cruzar la frontera.
39
42
  */
40
43
  eligibleFinanciers: string[];
44
+ /** Línea de `reservedLines` que espeja esta ficha. */
45
+ lineId?: string;
46
+ category?: ProductCategoryEnum;
47
+ trackingMode?: TrackingModeEnum;
41
48
  }
@@ -0,0 +1,36 @@
1
+ import type { MdmProviderEnum } from '../../retailCatalog/enums/MdmProviderEnum';
2
+ import type { ReservedComponent } from '../../retailCatalog/dtos/responses/ReserveStockResponse';
3
+ import type { LinePaymentTypeEnum } from '../enums/LinePaymentTypeEnum';
4
+ import type { WizardLineStatusEnum } from '../enums/WizardLineStatusEnum';
5
+ import type { WizardLineIdentifiers } from './WizardLineIdentifiers';
6
+ import type { WizardLineProduct } from './WizardLineProduct';
7
+
8
+ /** Línea de la venta en curso; los campos de precio son `null` mientras la línea está PENDING. */
9
+ export interface WizardReservedLine {
10
+ lineId: string;
11
+ sku: string;
12
+ qty: number;
13
+ status: WizardLineStatusEnum;
14
+ /** Llave de idempotencia de la reserva; una nueva por cada intento. */
15
+ reservationId: string;
16
+ /** Vencimiento de la reserva; una línea PENDING nace con ahora + 30 min. */
17
+ expiresAt: string;
18
+ /** Precio fijado de la línea (el del kit si es kit). */
19
+ basePriceCents: number | null;
20
+ listPriceCents: number | null;
21
+ /** Llave del registro PRICE# del que salió el precio. */
22
+ priceSk: string | null;
23
+ eligibleFinanciers: string[];
24
+ /** SureKeep está en `eligibleFinanciers`. */
25
+ financeable: boolean;
26
+ /** `null` mientras no se decide qué línea se financia. */
27
+ paymentType: LinePaymentTypeEnum | null;
28
+ /** Ítems que la línea suma al tope de 100 de la venta. */
29
+ sellItemCost: number | null;
30
+ mdmEnabled?: boolean;
31
+ mdmProvider?: MdmProviderEnum | null;
32
+ /** Solo si la línea es un kit. */
33
+ components?: ReservedComponent[];
34
+ identifiers?: WizardLineIdentifiers[];
35
+ product?: WizardLineProduct | null;
36
+ }
@@ -9,6 +9,7 @@ import type { WizardConsents } from './WizardConsents';
9
9
  import type { WizardLoan } from './WizardLoan';
10
10
  import type { WizardPayment } from './WizardPayment';
11
11
  import type { WizardProduct } from './WizardProduct';
12
+ import type { WizardReservedLine } from './WizardReservedLine';
12
13
  import type { WizardResumeTarget } from './WizardResumeTarget';
13
14
  import type { WizardWelcome } from './WizardWelcome';
14
15
 
@@ -112,6 +113,10 @@ export interface WizardSession {
112
113
  */
113
114
  product: WizardProduct | null;
114
115
  reservationExpiresAt: string | null;
116
+ /** Líneas de la venta; `reservedSku`, `reservedImei` y `product` espejan la financiada o la principal. */
117
+ reservedLines?: WizardReservedLine[];
118
+ /** Línea elegida para financiar; `null` si la venta es de contado o aún no se elige. */
119
+ financedLineId?: string | null;
115
120
  paymentMethod: PaymentMethodEnum | null;
116
121
  externalProvider: ExternalProviderEnum | null;
117
122
  /** Folio de cobro server-side (D11), idempotente, sobrevive al volver atrás. */
@@ -2,14 +2,8 @@ import { Expose } from 'class-transformer';
2
2
  import { IsInt, IsOptional, IsString, Min } from 'class-validator';
3
3
 
4
4
  /**
5
- * POST /wizard/sessions/:id/product — reserva un equipo del catálogo (paso 03). Reserva 30 min en
6
- * RetailInventory F1 (condición atómica H2).
7
- *
8
- * `imei` y `cashPriceCents` son OPCIONALES a propósito: la unidad física y el precio son AUTORIDAD DEL
9
- * SERVIDOR. Con solo el `sku`, el wizard elige una unidad disponible del catálogo y toma su precio (el
10
- * cliente NUNCA dicta el monto a cobrar — `cashPriceCents` ancla el cobro con `amountCents == cashPrice`).
11
- * Si el caller manda `imei`, el server puede honrar esa unidad, pero el precio SIEMPRE sale del catálogo.
12
- * SureKeep Fase 2 — pista Retail.
5
+ * POST /wizard/sessions/:id/product — agrega una línea a la venta y reserva sus piezas en el catálogo.
6
+ * `imei` y `cashPriceCents` son opcionales: la pieza y el precio los decide el servidor.
13
7
  */
14
8
  export class AddProductRequest {
15
9
  @Expose()
@@ -26,4 +20,11 @@ export class AddProductRequest {
26
20
  @IsInt()
27
21
  @Min(0)
28
22
  cashPriceCents?: number;
23
+
24
+ /** Piezas de la línea; ausente = 1. */
25
+ @Expose()
26
+ @IsOptional()
27
+ @IsInt()
28
+ @Min(1)
29
+ qty?: number;
29
30
  }
@@ -0,0 +1,41 @@
1
+ import { Expose, Type } from 'class-transformer';
2
+ import { IsArray, IsOptional, IsString, MinLength, ValidateNested } from 'class-validator';
3
+
4
+ /** Identificadores capturados en la entrega para un SKU de la línea (componente si es kit). */
5
+ export class CompleteSaleLineComponent {
6
+ @Expose()
7
+ @IsString()
8
+ @MinLength(1)
9
+ sku!: string;
10
+
11
+ /** Vacío si el SKU se rastrea por cantidad. */
12
+ @Expose()
13
+ @IsArray()
14
+ @IsString({ each: true })
15
+ identifiers!: string[];
16
+ }
17
+
18
+ /** Línea de la sesión con los identificadores de sus piezas. */
19
+ export class CompleteSaleLine {
20
+ @Expose()
21
+ @IsString()
22
+ @MinLength(1)
23
+ lineId!: string;
24
+
25
+ @Expose()
26
+ @IsArray()
27
+ @ValidateNested({ each: true })
28
+ @Type(() => CompleteSaleLineComponent)
29
+ components!: CompleteSaleLineComponent[];
30
+ }
31
+
32
+ /** POST /wizard/sessions/:id/complete-sale — cierra la venta con los identificadores de cada línea. */
33
+ export class CompleteSaleRequest {
34
+ /** Opcional: el front previo cierra sin body; el wizard exige los identificadores que falten. */
35
+ @Expose()
36
+ @IsOptional()
37
+ @IsArray()
38
+ @ValidateNested({ each: true })
39
+ @Type(() => CompleteSaleLine)
40
+ lines?: CompleteSaleLine[];
41
+ }
@@ -1,11 +1,17 @@
1
1
  import { Expose } from 'class-transformer';
2
2
  import { IsOptional, IsString } from 'class-validator';
3
3
 
4
- /** DELETE /wizard/sessions/:id/product — libera la reserva del equipo (vuelve al catálogo). SureKeep Fase 2 — pista Retail. */
4
+ /** DELETE /wizard/sessions/:id/product — quita una línea de la venta y libera su reserva en el catálogo. */
5
5
  export class DeleteProductRequest {
6
6
  /** Opcional a propósito: exigirlo rompe a los callers que liberan la reserva sin mandar el imei. */
7
7
  @Expose()
8
8
  @IsOptional()
9
9
  @IsString()
10
10
  imei?: string;
11
+
12
+ /** Línea a quitar de la venta. */
13
+ @Expose()
14
+ @IsOptional()
15
+ @IsString()
16
+ lineId?: string;
11
17
  }
@@ -1,5 +1,5 @@
1
1
  import { Expose } from 'class-transformer';
2
- import { IsInt, Min } from 'class-validator';
2
+ import { IsInt, IsOptional, IsString, Min, MinLength } from 'class-validator';
3
3
 
4
4
  /**
5
5
  * POST /wizard/sessions/:id/quote — términos elegidos en el cotizador del paso 06 (slider de
@@ -18,4 +18,11 @@ export class QuoteRequest {
18
18
  @IsInt()
19
19
  @Min(1)
20
20
  termWeeks!: number;
21
+
22
+ /** Línea que se financia; su precio fijado es el del crédito. */
23
+ @Expose()
24
+ @IsOptional()
25
+ @IsString()
26
+ @MinLength(1)
27
+ financedLineId?: string;
21
28
  }
@@ -0,0 +1,15 @@
1
+ import { Expose } from 'class-transformer';
2
+ import { IsString, MinLength } from 'class-validator';
3
+
4
+ /** Query de GET /wizard/sessions/:id/lines/:lineId/identifiers; sku es el componente si la línea es kit. */
5
+ export class SuggestIdentifiersQuery {
6
+ @Expose()
7
+ @IsString()
8
+ @MinLength(1)
9
+ sku!: string;
10
+
11
+ @Expose()
12
+ @IsString()
13
+ @MinLength(4)
14
+ prefix!: string;
15
+ }
@@ -0,0 +1,7 @@
1
+ /** Forma de pago de una línea de la venta. */
2
+ export enum LinePaymentTypeEnum {
3
+ /** Financiada con crédito SureKeep. */
4
+ CREDIT = 'CREDIT',
5
+ /** De contado (o con tarjeta), junto con el enganche. */
6
+ CASH = 'CASH',
7
+ }
@@ -0,0 +1,9 @@
1
+ /** Estado de una línea reservada de la sesión. */
2
+ export enum WizardLineStatusEnum {
3
+ /** Escrita con su reservationId, antes de que el catálogo confirme la reserva. */
4
+ PENDING = 'PENDING',
5
+ /** El catálogo confirmó la reserva y fijó precio. */
6
+ RESERVED = 'RESERVED',
7
+ /** Marcada para liberar; pago y enganche la rechazan. */
8
+ RELEASING = 'RELEASING',
9
+ }
@@ -24,6 +24,8 @@ export * from './enums/AppOnboardingStepEnum';
24
24
  export * from './enums/AppOnboardingStepStatusEnum';
25
25
  export * from './enums/BlockedReasonEnum';
26
26
  export * from './enums/BlockedCategoryEnum';
27
+ export * from './enums/WizardLineStatusEnum';
28
+ export * from './enums/LinePaymentTypeEnum';
27
29
 
28
30
  // DTOs anidados
29
31
  export * from './dtos/WizardConsents';
@@ -39,6 +41,10 @@ export * from './dtos/AccountStep';
39
41
  export * from './dtos/AppOnboardingStep';
40
42
  export * from './dtos/WizardResumeTarget';
41
43
  export * from './dtos/WizardBlocked';
44
+ export * from './dtos/WizardLineProduct';
45
+ export * from './dtos/WizardLineIdentifiers';
46
+ export * from './dtos/WizardReservedLine';
47
+ export * from './dtos/SaleLine';
42
48
 
43
49
  // Entidades principales (shapes de estado/persistencia — planas)
44
50
  export * from './dtos/WizardSession';
@@ -80,6 +86,8 @@ export * from './dtos/requests/QuoteRequest';
80
86
  export * from './dtos/requests/DownPaymentRequest';
81
87
  export * from './dtos/requests/SignatureSignRequest';
82
88
  export * from './dtos/requests/RegisterDeviceRequest';
89
+ export * from './dtos/requests/CompleteSaleRequest';
90
+ export * from './dtos/requests/SuggestIdentifiersQuery';
83
91
 
84
92
  // Response DTOs (output tipado por endpoint)
85
93
  export * from './dtos/responses/KycPrepareResponse';