@fiado/type-kit 3.578.0 → 3.579.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 (160) hide show
  1. package/_test_/unit/platformRbac/dtos/levelEntityAdminDtos.test.ts +14 -0
  2. package/_test_/unit/retailCatalog/catalogEnums.test.ts +2 -2
  3. package/_test_/unit/retailCatalog/centralSaleAccepted.test.ts +54 -0
  4. package/_test_/unit/retailCatalog/sellInventoryRequest.test.ts +25 -0
  5. package/_test_/unit/retailCatalog/stockRequests.test.ts +14 -4
  6. package/_test_/unit/retailCatalog/ventaSaga.test.ts +7 -0
  7. package/_test_/unit/retailIntegration/reconciliationContracts.test.ts +121 -0
  8. package/_test_/unit/retailIntegration/retailIntegrationErrorCodes.test.ts +37 -0
  9. package/_test_/unit/retailIntegration/retailOutboundRequests.test.ts +46 -15
  10. package/_test_/unit/retailIntegration/retailSaleContracts.test.ts +160 -0
  11. package/_test_/unit/retailIntegration/retailSystemEnums.test.ts +1 -1
  12. package/_test_/unit/retailOrg/dtos/retailerIntegration.test.ts +92 -0
  13. package/_test_/unit/retailWizard/centralOutboundAndLiveCheck.test.ts +63 -0
  14. package/_test_/unit/retailWizard/centralSaleStatus.test.ts +49 -0
  15. package/_test_/unit/retailWizard/multiItemShapes.test.ts +2 -2
  16. package/bin/platformRbac/dtos/UpdateLevelEntityRequest.d.ts +3 -1
  17. package/bin/platformRbac/dtos/UpdateLevelEntityRequest.js +8 -1
  18. package/bin/retailCatalog/dtos/requests/ReturnStockRequest.d.ts +2 -0
  19. package/bin/retailCatalog/dtos/requests/ReturnStockRequest.js +5 -0
  20. package/bin/retailCatalog/dtos/requests/SellInventoryRequest.d.ts +9 -0
  21. package/bin/retailCatalog/dtos/requests/SellInventoryRequest.js +32 -0
  22. package/bin/retailCatalog/dtos/requests/SellStockRequest.d.ts +2 -2
  23. package/bin/retailCatalog/dtos/requests/SellStockRequest.js +1 -1
  24. package/bin/retailCatalog/enums/InventoryInboundMessageTypeEnum.d.ts +2 -1
  25. package/bin/retailCatalog/enums/InventoryInboundMessageTypeEnum.js +1 -0
  26. package/bin/retailCatalog/enums/InventoryItemStatusEnum.d.ts +3 -1
  27. package/bin/retailCatalog/enums/InventoryItemStatusEnum.js +2 -0
  28. package/bin/retailCatalog/events/InventoryCentralSaleAcceptedMessage.d.ts +13 -0
  29. package/bin/retailCatalog/events/InventoryCentralSaleAcceptedMessage.js +55 -0
  30. package/bin/retailCatalog/events/InventoryInboundMessage.d.ts +2 -1
  31. package/bin/retailCatalog/events/InventorySaleAppliedMessage.d.ts +0 -2
  32. package/bin/retailCatalog/events/InventorySaleAppliedMessage.js +0 -6
  33. package/bin/retailCatalog/index.d.ts +2 -0
  34. package/bin/retailCatalog/index.js +2 -0
  35. package/bin/retailIntegration/constants/retailIntegrationErrorHttpStatus.d.ts +3 -0
  36. package/bin/retailIntegration/constants/retailIntegrationErrorHttpStatus.js +19 -0
  37. package/bin/retailIntegration/constants/retailIntegrationLimits.d.ts +2 -0
  38. package/bin/retailIntegration/constants/retailIntegrationLimits.js +3 -1
  39. package/bin/retailIntegration/dtos/CancelRetailSaleRequest.d.ts +6 -0
  40. package/bin/retailIntegration/dtos/CancelRetailSaleRequest.js +32 -0
  41. package/bin/retailIntegration/dtos/CheckRetailInventoryRequest.d.ts +7 -0
  42. package/bin/retailIntegration/dtos/CheckRetailInventoryRequest.js +43 -0
  43. package/bin/retailIntegration/dtos/GetReconciliationResponses.d.ts +35 -0
  44. package/bin/retailIntegration/dtos/GetReconciliationResponses.js +2 -0
  45. package/bin/retailIntegration/dtos/GetRetailInventoryRequest.d.ts +2 -2
  46. package/bin/retailIntegration/dtos/GetRetailInventoryRequest.js +2 -2
  47. package/bin/retailIntegration/dtos/ReconciliationPageMessage.d.ts +13 -0
  48. package/bin/retailIntegration/dtos/ReconciliationPageMessage.js +48 -0
  49. package/bin/retailIntegration/dtos/ReconciliationRunCounts.d.ts +9 -0
  50. package/bin/retailIntegration/dtos/ReconciliationRunCounts.js +2 -0
  51. package/bin/retailIntegration/dtos/RetailListQuery.d.ts +5 -0
  52. package/bin/retailIntegration/dtos/RetailListQuery.js +24 -0
  53. package/bin/retailIntegration/dtos/RetailOutboundResponses.d.ts +9 -0
  54. package/bin/retailIntegration/dtos/RetailPagedQuery.d.ts +2 -2
  55. package/bin/retailIntegration/dtos/RetailPagedQuery.js +2 -2
  56. package/bin/retailIntegration/dtos/RetailTenantQuery.d.ts +2 -1
  57. package/bin/retailIntegration/dtos/RetailTenantQuery.js +6 -1
  58. package/bin/retailIntegration/dtos/StartCatalogReconciliationRequest.d.ts +11 -0
  59. package/bin/retailIntegration/dtos/StartCatalogReconciliationRequest.js +28 -0
  60. package/bin/retailIntegration/dtos/StartOrgReconciliationRequest.d.ts +9 -0
  61. package/bin/retailIntegration/dtos/StartOrgReconciliationRequest.js +22 -0
  62. package/bin/retailIntegration/enums/InactiveReasonEnum.d.ts +5 -0
  63. package/bin/retailIntegration/enums/InactiveReasonEnum.js +9 -0
  64. package/bin/retailIntegration/enums/ReconciliationEntityEnum.d.ts +7 -0
  65. package/bin/retailIntegration/enums/ReconciliationEntityEnum.js +11 -0
  66. package/bin/retailIntegration/enums/ReconciliationRunStatusEnum.d.ts +7 -0
  67. package/bin/retailIntegration/enums/ReconciliationRunStatusEnum.js +11 -0
  68. package/bin/retailIntegration/enums/ReconciliationTriggerEnum.d.ts +6 -0
  69. package/bin/retailIntegration/enums/ReconciliationTriggerEnum.js +10 -0
  70. package/bin/retailIntegration/enums/RetailEventRejectCodeEnum.d.ts +3 -1
  71. package/bin/retailIntegration/enums/RetailEventRejectCodeEnum.js +2 -0
  72. package/bin/retailIntegration/enums/RetailIntegrationErrorCodeEnum.d.ts +23 -0
  73. package/bin/retailIntegration/enums/RetailIntegrationErrorCodeEnum.js +27 -0
  74. package/bin/retailIntegration/enums/RetailSaleLineRoleEnum.d.ts +4 -0
  75. package/bin/retailIntegration/enums/RetailSaleLineRoleEnum.js +8 -0
  76. package/bin/retailIntegration/enums/index.d.ts +6 -0
  77. package/bin/retailIntegration/enums/index.js +6 -0
  78. package/bin/retailIntegration/index.d.ts +9 -0
  79. package/bin/retailIntegration/index.js +9 -0
  80. package/bin/retailIntegration/models/RetailSystemSale.d.ts +8 -7
  81. package/bin/retailIntegration/models/RetailSystemSale.js +186 -0
  82. package/bin/retailOrg/dtos/Retailer.d.ts +5 -0
  83. package/bin/retailOrg/dtos/Retailer.js +20 -0
  84. package/bin/retailOrg/dtos/requests/ActivateRetailerIntegrationRequest.d.ts +5 -0
  85. package/bin/retailOrg/dtos/requests/ActivateRetailerIntegrationRequest.js +24 -0
  86. package/bin/retailOrg/dtos/responses/ActivateRetailerIntegrationResponse.d.ts +3 -0
  87. package/bin/retailOrg/dtos/responses/ActivateRetailerIntegrationResponse.js +2 -0
  88. package/bin/retailOrg/dtos/validation/RetailerValidationDto.d.ts +4 -0
  89. package/bin/retailOrg/enums/RetailIntegrationSystemEnum.d.ts +4 -0
  90. package/bin/retailOrg/enums/RetailIntegrationSystemEnum.js +8 -0
  91. package/bin/retailOrg/index.d.ts +3 -0
  92. package/bin/retailOrg/index.js +3 -0
  93. package/bin/retailWizard/dtos/Sale.d.ts +25 -0
  94. package/bin/retailWizard/dtos/WizardReservedLine.d.ts +3 -0
  95. package/bin/retailWizard/dtos/WizardSession.d.ts +3 -0
  96. package/bin/retailWizard/enums/CentralCancelStatusEnum.d.ts +18 -0
  97. package/bin/retailWizard/enums/CentralCancelStatusEnum.js +22 -0
  98. package/bin/retailWizard/enums/CentralLiveCheckEnum.d.ts +10 -0
  99. package/bin/retailWizard/enums/CentralLiveCheckEnum.js +14 -0
  100. package/bin/retailWizard/enums/CentralSyncStatusEnum.d.ts +8 -2
  101. package/bin/retailWizard/enums/CentralSyncStatusEnum.js +7 -1
  102. package/bin/retailWizard/enums/RetailCentralOutboundMessageTypeEnum.d.ts +5 -0
  103. package/bin/retailWizard/enums/RetailCentralOutboundMessageTypeEnum.js +9 -0
  104. package/bin/retailWizard/enums/WizardLineStatusEnum.d.ts +3 -1
  105. package/bin/retailWizard/enums/WizardLineStatusEnum.js +2 -0
  106. package/bin/retailWizard/events/RetailCentralOutboundMessage.d.ts +9 -0
  107. package/bin/retailWizard/events/RetailCentralOutboundMessage.js +42 -0
  108. package/bin/retailWizard/index.d.ts +4 -0
  109. package/bin/retailWizard/index.js +4 -0
  110. package/package.json +1 -1
  111. package/src/platformRbac/dtos/UpdateLevelEntityRequest.ts +3 -1
  112. package/src/retailCatalog/dtos/requests/ReturnStockRequest.ts +6 -1
  113. package/src/retailCatalog/dtos/requests/SellInventoryRequest.ts +19 -0
  114. package/src/retailCatalog/dtos/requests/SellStockRequest.ts +4 -4
  115. package/src/retailCatalog/enums/InventoryInboundMessageTypeEnum.ts +1 -0
  116. package/src/retailCatalog/enums/InventoryItemStatusEnum.ts +2 -0
  117. package/src/retailCatalog/events/InventoryCentralSaleAcceptedMessage.ts +36 -0
  118. package/src/retailCatalog/events/InventoryInboundMessage.ts +5 -1
  119. package/src/retailCatalog/events/InventorySaleAppliedMessage.ts +1 -7
  120. package/src/retailCatalog/index.ts +2 -0
  121. package/src/retailIntegration/constants/retailIntegrationErrorHttpStatus.ts +17 -0
  122. package/src/retailIntegration/constants/retailIntegrationLimits.ts +3 -0
  123. package/src/retailIntegration/dtos/CancelRetailSaleRequest.ts +9 -0
  124. package/src/retailIntegration/dtos/CheckRetailInventoryRequest.ts +20 -0
  125. package/src/retailIntegration/dtos/GetReconciliationResponses.ts +37 -0
  126. package/src/retailIntegration/dtos/GetRetailInventoryRequest.ts +2 -2
  127. package/src/retailIntegration/dtos/ReconciliationPageMessage.ts +32 -0
  128. package/src/retailIntegration/dtos/ReconciliationRunCounts.ts +9 -0
  129. package/src/retailIntegration/dtos/RetailListQuery.ts +10 -0
  130. package/src/retailIntegration/dtos/RetailOutboundResponses.ts +11 -0
  131. package/src/retailIntegration/dtos/RetailPagedQuery.ts +2 -2
  132. package/src/retailIntegration/dtos/RetailTenantQuery.ts +5 -1
  133. package/src/retailIntegration/dtos/StartCatalogReconciliationRequest.ts +19 -0
  134. package/src/retailIntegration/dtos/StartOrgReconciliationRequest.ts +13 -0
  135. package/src/retailIntegration/enums/InactiveReasonEnum.ts +5 -0
  136. package/src/retailIntegration/enums/ReconciliationEntityEnum.ts +7 -0
  137. package/src/retailIntegration/enums/ReconciliationRunStatusEnum.ts +7 -0
  138. package/src/retailIntegration/enums/ReconciliationTriggerEnum.ts +6 -0
  139. package/src/retailIntegration/enums/RetailEventRejectCodeEnum.ts +2 -0
  140. package/src/retailIntegration/enums/RetailIntegrationErrorCodeEnum.ts +23 -0
  141. package/src/retailIntegration/enums/RetailSaleLineRoleEnum.ts +4 -0
  142. package/src/retailIntegration/enums/index.ts +6 -0
  143. package/src/retailIntegration/index.ts +9 -0
  144. package/src/retailIntegration/models/RetailSystemSale.ts +45 -37
  145. package/src/retailOrg/dtos/Retailer.ts +19 -1
  146. package/src/retailOrg/dtos/requests/ActivateRetailerIntegrationRequest.ts +10 -0
  147. package/src/retailOrg/dtos/responses/ActivateRetailerIntegrationResponse.ts +5 -0
  148. package/src/retailOrg/dtos/validation/RetailerValidationDto.ts +4 -0
  149. package/src/retailOrg/enums/RetailIntegrationSystemEnum.ts +4 -0
  150. package/src/retailOrg/index.ts +3 -0
  151. package/src/retailWizard/dtos/Sale.ts +25 -0
  152. package/src/retailWizard/dtos/WizardReservedLine.ts +3 -0
  153. package/src/retailWizard/dtos/WizardSession.ts +3 -0
  154. package/src/retailWizard/enums/CentralCancelStatusEnum.ts +18 -0
  155. package/src/retailWizard/enums/CentralLiveCheckEnum.ts +10 -0
  156. package/src/retailWizard/enums/CentralSyncStatusEnum.ts +7 -1
  157. package/src/retailWizard/enums/RetailCentralOutboundMessageTypeEnum.ts +5 -0
  158. package/src/retailWizard/enums/WizardLineStatusEnum.ts +2 -0
  159. package/src/retailWizard/events/RetailCentralOutboundMessage.ts +24 -0
  160. package/src/retailWizard/index.ts +4 -0
@@ -1,51 +1,59 @@
1
- import { RetailLinePaymentTypeEnum, RetailPaymentMethodEnum, RetailSaleFinancierEnum, RetailSaleTypeEnum } from '../enums';
1
+ import { Type } from 'class-transformer';
2
+ import { ArrayNotEmpty, IsArray, IsIn, IsInt, IsObject, IsString, Matches, Min, Validate, ValidateIf, ValidateNested } from 'class-validator';
3
+ import { RETAIL_DECIMAL_PATTERN, RETAIL_ENTITY_ID_PATTERN, RETAIL_SKU_PATTERN } from '../constants/retailIntegrationLimits';
4
+ import { RetailCurrencyEnum, RetailLinePaymentTypeEnum, RetailPaymentMethodEnum, RetailSaleFinancierEnum, RetailSaleLineRoleEnum, RetailSaleTypeEnum } from '../enums';
5
+ import { IsIsoDateTimeWithZone } from '../validators/IsIsoDateTimeWithZone';
6
+ import { HasUniqueKeys, isNullOrValidated } from '../validators/payloadValidators';
2
7
  import { RetailCurrency } from './RetailSystemProduct';
3
8
 
4
9
  export type RetailSaleType = `${RetailSaleTypeEnum}`;
5
10
  export type RetailSaleFinancier = `${RetailSaleFinancierEnum}`;
6
11
  export type RetailPaymentMethod = `${RetailPaymentMethodEnum}`;
7
12
  export type RetailLinePaymentType = `${RetailLinePaymentTypeEnum}`;
13
+ export type RetailSaleLineRole = `${RetailSaleLineRoleEnum}`;
8
14
 
9
- export interface RetailSystemSaleCustomer {
10
- customerId: string;
11
- names: string;
12
- paternalLastName: string;
13
- maternalLastName: string | null;
14
- phone: string;
15
+ export class RetailSystemSaleCustomer {
16
+ @IsString() @Matches(/\S/) customerId!: string;
17
+ @IsString() @Matches(/\S/) names!: string;
18
+ @IsString() @Matches(/\S/) paternalLastName!: string;
19
+ @ValidateIf(isNullOrValidated) @IsString() maternalLastName!: string | null;
20
+ @IsString() @Matches(/\S/) phone!: string;
15
21
  }
16
22
 
17
- export interface RetailSystemSaleComponent {
18
- sku: string;
19
- qty: number;
20
- identifiers: string[];
23
+ export class RetailSystemSaleComponent {
24
+ @IsString() @Matches(RETAIL_SKU_PATTERN) sku!: string;
25
+ @IsInt() @Min(1) qty!: number;
26
+ @IsArray() @IsString({ each: true }) @Matches(/\S/, { each: true }) identifiers!: string[];
21
27
  }
22
28
 
23
- export interface RetailSystemSaleLine {
24
- lineId: string;
25
- sku: string;
26
- qty: number;
27
- basePrice: string;
28
- discount: string;
29
- paymentType: RetailLinePaymentType;
30
- financedAmount: string;
31
- role: 'GIFT' | null;
32
- components: RetailSystemSaleComponent[];
29
+ export class RetailSystemSaleLine {
30
+ @IsString() @Matches(/\S/) lineId!: string;
31
+ @IsString() @Matches(RETAIL_SKU_PATTERN) sku!: string;
32
+ @IsInt() @Min(1) qty!: number;
33
+ @IsString() @Matches(RETAIL_DECIMAL_PATTERN) basePrice!: string;
34
+ @IsString() @Matches(RETAIL_DECIMAL_PATTERN) discount!: string;
35
+ @IsIn(Object.values(RetailLinePaymentTypeEnum)) paymentType!: RetailLinePaymentType;
36
+ @IsString() @Matches(RETAIL_DECIMAL_PATTERN) financedAmount!: string;
37
+ @ValidateIf(isNullOrValidated) @IsIn(Object.values(RetailSaleLineRoleEnum)) role!: RetailSaleLineRole | null;
38
+ @IsArray() @ValidateNested({ each: true }) @Type(() => RetailSystemSaleComponent) components!: RetailSystemSaleComponent[];
33
39
  }
34
40
 
35
- /** Cuerpo de `POST /sales` de la doc; `saleId` es la llave de idempotencia. */
36
- export interface RetailSystemSale {
37
- saleId: string;
38
- folio: string;
39
- storeId: string;
40
- sellerRetailUserId: string;
41
- soldAt: string;
42
- saleType: RetailSaleType;
43
- financier: RetailSaleFinancier;
44
- creditId: string | null;
45
- currencyId: RetailCurrency;
46
- customer: RetailSystemSaleCustomer;
47
- equipmentPrice: string;
48
- amountPaid: string;
49
- paymentMethod: RetailPaymentMethod | null;
50
- lines: RetailSystemSaleLine[];
41
+ /** Cuerpo de `POST /sales` de la doc y de `privateRegisterRetailSale`; `saleId` es la llave de idempotencia. */
42
+ export class RetailSystemSale {
43
+ @IsString() @Matches(/\S/) saleId!: string;
44
+ @IsString() @Matches(/\S/) folio!: string;
45
+ @IsString() @Matches(RETAIL_ENTITY_ID_PATTERN) storeId!: string;
46
+ @IsString() @Matches(RETAIL_ENTITY_ID_PATTERN) sellerRetailUserId!: string;
47
+ @Validate(IsIsoDateTimeWithZone) soldAt!: string;
48
+ @IsIn(Object.values(RetailSaleTypeEnum)) saleType!: RetailSaleType;
49
+ @IsIn(Object.values(RetailSaleFinancierEnum)) financier!: RetailSaleFinancier;
50
+ @ValidateIf(isNullOrValidated) @IsString() @Matches(/\S/) creditId!: string | null;
51
+ @IsIn(Object.values(RetailCurrencyEnum)) currencyId!: RetailCurrency;
52
+ @IsObject() @ValidateNested() @Type(() => RetailSystemSaleCustomer) customer!: RetailSystemSaleCustomer;
53
+ @IsString() @Matches(RETAIL_DECIMAL_PATTERN) equipmentPrice!: string;
54
+ @IsString() @Matches(RETAIL_DECIMAL_PATTERN) amountPaid!: string;
55
+ @ValidateIf(isNullOrValidated) @IsIn(Object.values(RetailPaymentMethodEnum)) paymentMethod!: RetailPaymentMethod | null;
56
+
57
+ @IsArray() @ArrayNotEmpty() @ValidateNested({ each: true }) @Type(() => RetailSystemSaleLine) @Validate(HasUniqueKeys, ['lineId'])
58
+ lines!: RetailSystemSaleLine[];
51
59
  }
@@ -1,9 +1,10 @@
1
1
  import { Expose, Type } from 'class-transformer';
2
- import { IsEmail, IsEnum, IsObject, IsString, Length, Matches } from 'class-validator';
2
+ import { IsEmail, IsEnum, IsObject, IsOptional, IsString, Length, Matches } from 'class-validator';
3
3
  import { LocationAddress } from '../../address/dtos/LocationAddress';
4
4
  import { regexIso8601 } from '../../helpers/constans/regex';
5
5
  import { RetailerStatusEnum } from '../enums/RetailerStatusEnum';
6
6
  import { RetailerTypeEnum } from '../enums/RetailerTypeEnum';
7
+ import { RetailIntegrationSystemEnum } from '../enums/RetailIntegrationSystemEnum';
7
8
 
8
9
  /**
9
10
  * Retailer — nodo raíz de la organización comercial SureKeep (cadena / subdistribuidor / franquicia).
@@ -78,4 +79,21 @@ export class Retailer {
78
79
  @Expose()
79
80
  @IsString()
80
81
  updatedBy!: string;
82
+
83
+ /** Bandera «integrado»: presente solo si el retailer ya se activó con un sistema externo. */
84
+ @Expose()
85
+ @IsOptional()
86
+ @IsEnum(RetailIntegrationSystemEnum)
87
+ integrationSystem?: RetailIntegrationSystemEnum;
88
+
89
+ @Expose()
90
+ @IsOptional()
91
+ @IsString()
92
+ @Matches(regexIso8601, { message: 'integrationActivatedAt debe ser una fecha ISO 8601' })
93
+ integrationActivatedAt?: string;
94
+
95
+ @Expose()
96
+ @IsOptional()
97
+ @IsString()
98
+ integrationActivatedBy?: string;
81
99
  }
@@ -0,0 +1,10 @@
1
+ import { Expose } from 'class-transformer';
2
+ import { IsEnum } from 'class-validator';
3
+ import { RetailIntegrationSystemEnum } from '../../enums/RetailIntegrationSystemEnum';
4
+
5
+ /** Body de POST /retailers/:retailerId/integration/activate. */
6
+ export class ActivateRetailerIntegrationRequest {
7
+ @Expose()
8
+ @IsEnum(RetailIntegrationSystemEnum)
9
+ integrationSystem!: RetailIntegrationSystemEnum;
10
+ }
@@ -0,0 +1,5 @@
1
+ import type { Retailer } from '../Retailer';
2
+
3
+ /** Respuesta de POST /retailers/:retailerId/integration/activate: el Retailer con la bandera ya sellada. */
4
+ export type ActivateRetailerIntegrationResponse = Retailer &
5
+ Required<Pick<Retailer, 'integrationSystem' | 'integrationActivatedAt' | 'integrationActivatedBy'>>;
@@ -1,5 +1,6 @@
1
1
  import type { RetailerStatusEnum } from '../../enums/RetailerStatusEnum';
2
2
  import type { RetailerTypeEnum } from '../../enums/RetailerTypeEnum';
3
+ import type { RetailIntegrationSystemEnum } from '../../enums/RetailIntegrationSystemEnum';
3
4
 
4
5
  /**
5
6
  * Shape mínimo que devuelve el endpoint privado de validación de retailer (consumido por otros
@@ -12,4 +13,7 @@ export interface RetailerValidationDto {
12
13
  type: RetailerTypeEnum;
13
14
  status: RetailerStatusEnum;
14
15
  parentId: string;
16
+ /** Bandera «integrado»; ausente si el retailer no está integrado. */
17
+ integrationSystem?: RetailIntegrationSystemEnum;
18
+ integrationActivatedAt?: string;
15
19
  }
@@ -0,0 +1,4 @@
1
+ /** Sistema externo que administra la organización de un retailer integrado. */
2
+ export enum RetailIntegrationSystemEnum {
3
+ ZENTRAL = 'ZENTRAL',
4
+ }
@@ -6,6 +6,7 @@ export * from './enums/RetailUserStatusEnum';
6
6
  export * from './enums/EmploymentTypeEnum';
7
7
  export * from './enums/CollectorSeniorityEnum';
8
8
  export * from './enums/RetailUserWalletLinkMethodEnum';
9
+ export * from './enums/RetailIntegrationSystemEnum';
9
10
  // F3 — Portal Admin VentasLuga (metas de venta del periodo)
10
11
  export * from './enums/GoalTargetTypeEnum';
11
12
 
@@ -56,6 +57,7 @@ export * from './dtos/requests/GoalPathParams';
56
57
  export * from './dtos/requests/PrivateGoalListQuery';
57
58
  export * from './dtos/requests/KpiQuery';
58
59
  export * from './dtos/requests/PrivateSellerListQuery';
60
+ export * from './dtos/requests/ActivateRetailerIntegrationRequest';
59
61
 
60
62
  // Response DTOs
61
63
  export * from './dtos/responses/RetailerHierarchyResponse';
@@ -66,3 +68,4 @@ export * from './dtos/responses/StoreKpiResponse';
66
68
  export * from './dtos/responses/SellerKpiResponse';
67
69
  export * from './dtos/responses/LookupRetailUserWalletResponse';
68
70
  export * from './dtos/responses/PrivateRetailUserWalletResponse';
71
+ export * from './dtos/responses/ActivateRetailerIntegrationResponse';
@@ -4,6 +4,8 @@ import type { SalePaymentMethodEnum } from '../enums/SalePaymentMethodEnum';
4
4
  import type { SaleChannelEnum } from '../enums/SaleChannelEnum';
5
5
  import type { ExternalProviderEnum } from '../enums/ExternalProviderEnum';
6
6
  import type { CentralSyncStatusEnum } from '../enums/CentralSyncStatusEnum';
7
+ import type { CentralCancelStatusEnum } from '../enums/CentralCancelStatusEnum';
8
+ import type { CentralLiveCheckEnum } from '../enums/CentralLiveCheckEnum';
7
9
  import type { SalePaymentDetail } from './SalePaymentDetail';
8
10
  import type { SaleLine } from './SaleLine';
9
11
  import type { SalePromotionRef } from '../../retailPromotions/dtos/SalePromotionRef';
@@ -64,6 +66,29 @@ export interface Sale {
64
66
  cardDeliveryId: string | null;
65
67
  centralSyncStatus: CentralSyncStatusEnum;
66
68
  centralTag: string | null;
69
+ /** Estado de la cancelación en Central; ausente si la venta no se ha cancelado. */
70
+ centralCancelStatus?: CentralCancelStatusEnum;
71
+ /** ISO; primer intento de envío, se sella una sola vez. */
72
+ centralFirstAttemptAt?: string;
73
+ /** ISO; inicio de la ventana de 24 h de reintentos, el reenvío la reinicia. */
74
+ centralRetryWindowStartAt?: string;
75
+ /** ISO; último intento de envío. */
76
+ centralLastAttemptAt?: string;
77
+ /** ISO; hasta cuándo el consumidor tiene tomada la venta. */
78
+ centralLeaseUntil?: string;
79
+ centralAttempts?: number;
80
+ /** Code del rechazo o del último error de Central. */
81
+ centralLastErrorCode?: string;
82
+ /** ISO; cuándo Central aceptó la venta. */
83
+ centralAcceptedAt?: string;
84
+ /** ISO; primer intento de la cancelación, se sella una sola vez. */
85
+ centralCancelFirstAttemptAt?: string;
86
+ /** ISO; inicio de la ventana de 24 h de la cancelación, el reenvío la reinicia. */
87
+ centralCancelRetryWindowStartAt?: string;
88
+ /** ISO; cuándo Central aceptó la cancelación. */
89
+ centralCancelAcceptedAt?: string;
90
+ /** Resultado de la consulta en vivo, copiado de la sesión al cerrar. */
91
+ centralLiveCheck?: CentralLiveCheckEnum;
67
92
  status: SaleStatusEnum;
68
93
  cancelledAt: string | null;
69
94
  /** Reason OBLIGATORIO en cancelación (AuditTrail) — flujo C. */
@@ -1,3 +1,4 @@
1
+ import type { InventoryItemStatusEnum } from '../../retailCatalog/enums/InventoryItemStatusEnum';
1
2
  import type { MdmProviderEnum } from '../../retailCatalog/enums/MdmProviderEnum';
2
3
  import type { ReservedComponent } from '../../retailCatalog/dtos/responses/ReserveStockResponse';
3
4
  import type { LinePaymentTypeEnum } from '../enums/LinePaymentTypeEnum';
@@ -12,6 +13,8 @@ export interface WizardReservedLine extends WizardLinePromotionFields {
12
13
  sku: string;
13
14
  qty: number;
14
15
  status: WizardLineStatusEnum;
16
+ /** Solo en LOST: estado en que Central dejó la pieza (SOLD, IN_TRANSIT o DAMAGED). */
17
+ lostReason?: InventoryItemStatusEnum;
15
18
  /** Llave de idempotencia de la reserva; una nueva por cada intento. */
16
19
  reservationId: string;
17
20
  /** Vencimiento de la reserva; una línea PENDING nace con ahora + 30 min. */
@@ -1,4 +1,5 @@
1
1
  import type { SalePromotionRef } from '../../retailPromotions/dtos/SalePromotionRef';
2
+ import type { CentralLiveCheckEnum } from '../enums/CentralLiveCheckEnum';
2
3
  import type { WizardStateEnum } from '../enums/WizardStateEnum';
3
4
  import type { WizardStepEnum } from '../enums/WizardStepEnum';
4
5
  import type { FiadoPhoneStatusEnum } from '../enums/FiadoPhoneStatusEnum';
@@ -152,6 +153,8 @@ export interface WizardSession {
152
153
  /** Contexto de crédito (pista SOFOM, pasos 04-09): PUNTEROS al dominio loan-*. Null en contado/externa. */
153
154
  loan: WizardLoan | null;
154
155
  saleId: string | null;
156
+ /** Resultado de la consulta en vivo a Central; la TX de cierre lo copia a la venta. */
157
+ centralLiveCheck?: CentralLiveCheckEnum;
155
158
  /** Prospecto vinculado (si la sesión se reanudó desde un prospecto): se cierra al cerrar la venta (D-prospecto). */
156
159
  prospectId: string | null;
157
160
  cancelReason: string | null;
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Estado de la cancelación de la venta en Central.
3
+ *
4
+ * PENDING - Por enviar o en reintento.
5
+ * SENDING - Tomada por el consumidor, envío en curso.
6
+ * ACCEPTED - Central aceptó la cancelación.
7
+ * REJECTED - Central rechazó la cancelación.
8
+ * FAILED - Se agotó la ventana de reintentos.
9
+ * NOT_SENT - No se envía: la venta nunca quedó en Central.
10
+ */
11
+ export enum CentralCancelStatusEnum {
12
+ PENDING = 'PENDING',
13
+ SENDING = 'SENDING',
14
+ ACCEPTED = 'ACCEPTED',
15
+ REJECTED = 'REJECTED',
16
+ FAILED = 'FAILED',
17
+ NOT_SENT = 'NOT_SENT',
18
+ }
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Resultado de la consulta en vivo a Central antes de cerrar la venta.
3
+ *
4
+ * VERIFIED - Central confirmó la pieza a tiempo.
5
+ * UNVERIFIED - Central no contestó a tiempo; la venta sigue igual.
6
+ */
7
+ export enum CentralLiveCheckEnum {
8
+ VERIFIED = 'VERIFIED',
9
+ UNVERIFIED = 'UNVERIFIED',
10
+ }
@@ -2,13 +2,19 @@
2
2
  * Estado de sincronización de la venta con Central (local-first; badge en BO). SureKeep Fase 2 — pista Retail.
3
3
  *
4
4
  * PENDING - Aún no sincronizada.
5
- * SENT - Enviada a Central.
5
+ * SENT - Enviada a Central (sin uso: lo reemplazan SENDING y ACCEPTED).
6
6
  * FAILED - Falló la sincronización.
7
7
  * N_A - No aplica (p. ej. derivación externa).
8
+ * SENDING - Tomada por el consumidor, envío en curso.
9
+ * ACCEPTED - Central la aceptó.
10
+ * REJECTED - Central la rechazó con un 4xx de su catálogo.
8
11
  */
9
12
  export enum CentralSyncStatusEnum {
10
13
  PENDING = 'PENDING',
11
14
  SENT = 'SENT',
12
15
  FAILED = 'FAILED',
13
16
  N_A = 'N_A',
17
+ SENDING = 'SENDING',
18
+ ACCEPTED = 'ACCEPTED',
19
+ REJECTED = 'REJECTED',
14
20
  }
@@ -0,0 +1,5 @@
1
+ /** Tipo de mensaje que el wizard publica en RetailCentralOutboundQueue. */
2
+ export enum RetailCentralOutboundMessageTypeEnum {
3
+ CENTRAL_SALE_REGISTER = 'CENTRAL_SALE_REGISTER',
4
+ CENTRAL_SALE_CANCEL = 'CENTRAL_SALE_CANCEL',
5
+ }
@@ -6,4 +6,6 @@ export enum WizardLineStatusEnum {
6
6
  RESERVED = 'RESERVED',
7
7
  /** Marcada para liberar; pago y enganche la rechazan. */
8
8
  RELEASING = 'RELEASING',
9
+ /** Central vendió, traspasó o retiró la pieza; no se puede cobrar, firmar ni cerrar con ella. */
10
+ LOST = 'LOST',
9
11
  }
@@ -0,0 +1,24 @@
1
+ import { IsEnum, IsNotEmpty, IsString } from 'class-validator';
2
+ import { RetailCentralOutboundMessageTypeEnum } from '../enums/RetailCentralOutboundMessageTypeEnum';
3
+
4
+ /** Aviso a Central de una venta por registrar o cancelar; el consumidor lee la venta por saleId. */
5
+ export class RetailCentralOutboundMessage {
6
+ @IsEnum(RetailCentralOutboundMessageTypeEnum)
7
+ messageType!: RetailCentralOutboundMessageTypeEnum;
8
+
9
+ @IsString()
10
+ @IsNotEmpty()
11
+ tenantId!: string;
12
+
13
+ @IsString()
14
+ @IsNotEmpty()
15
+ retailerId!: string;
16
+
17
+ @IsString()
18
+ @IsNotEmpty()
19
+ storeId!: string;
20
+
21
+ @IsString()
22
+ @IsNotEmpty()
23
+ saleId!: string;
24
+ }
@@ -13,6 +13,8 @@ export * from './enums/SalePaymentMethodEnum';
13
13
  export * from './enums/RefundStatusEnum';
14
14
  export * from './enums/SaleStatusEnum';
15
15
  export * from './enums/CentralSyncStatusEnum';
16
+ export * from './enums/CentralCancelStatusEnum';
17
+ export * from './enums/CentralLiveCheckEnum';
16
18
  export * from './enums/ProspectStatusEnum';
17
19
  export * from './enums/PendingReasonEnum';
18
20
  export * from './enums/OccupationEnum';
@@ -199,11 +201,13 @@ export * from './events/SaleCancelledV2';
199
201
  export * from './events/SessionExpiredV1';
200
202
  export * from './enums/RetailPromotionInboundMessageTypeEnum';
201
203
  export * from './enums/RetailCommissionInboundMessageTypeEnum';
204
+ export * from './enums/RetailCentralOutboundMessageTypeEnum';
202
205
  export * from './events/RetailPromotionInboundMessage';
203
206
  export * from './events/RetailPromotionAccountOpenedMessage';
204
207
  export * from './events/RetailPromotionInstallmentPaidMessage';
205
208
  export * from './events/RetailPromotionQueueMessage';
206
209
  export * from './events/RetailCommissionInboundMessage';
210
+ export * from './events/RetailCentralOutboundMessage';
207
211
 
208
212
  // Lookup privado por lote (GET /private/wizard-sessions/batch)
209
213
  export * from './enums/WizardSessionLookupStatusEnum';