@fiado/type-kit 3.580.0 → 3.582.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 (37) hide show
  1. package/_test_/unit/retailIntegration/reconciliationContracts.test.ts +44 -0
  2. package/_test_/unit/retailOrg/dtos/retailerIntegrationMode.test.ts +106 -0
  3. package/_test_/unit/retailWizard/resendCentralSaleRequest.test.ts +36 -0
  4. package/bin/retailIntegration/dtos/ReconciliationPageMessage.d.ts +2 -0
  5. package/bin/retailIntegration/dtos/ReconciliationPageMessage.js +14 -0
  6. package/bin/retailIntegration/dtos/StartCatalogReconciliationRequest.js +3 -0
  7. package/bin/retailIntegration/dtos/StartOrgReconciliationRequest.js +2 -0
  8. package/bin/retailOrg/dtos/Retailer.d.ts +3 -0
  9. package/bin/retailOrg/dtos/Retailer.js +7 -0
  10. package/bin/retailOrg/dtos/requests/ActivateRetailerIntegrationRequest.d.ts +3 -0
  11. package/bin/retailOrg/dtos/requests/ActivateRetailerIntegrationRequest.js +7 -0
  12. package/bin/retailOrg/dtos/requests/SetRetailerIntegrationModeRequest.d.ts +5 -0
  13. package/bin/retailOrg/dtos/requests/SetRetailerIntegrationModeRequest.js +24 -0
  14. package/bin/retailOrg/dtos/validation/RetailerValidationDto.d.ts +2 -0
  15. package/bin/retailOrg/enums/RetailIntegrationModeEnum.d.ts +5 -0
  16. package/bin/retailOrg/enums/RetailIntegrationModeEnum.js +9 -0
  17. package/bin/retailOrg/index.d.ts +2 -0
  18. package/bin/retailOrg/index.js +2 -0
  19. package/bin/retailWizard/dtos/requests/ResendCentralSaleRequest.d.ts +5 -0
  20. package/bin/retailWizard/dtos/requests/ResendCentralSaleRequest.js +24 -0
  21. package/bin/retailWizard/enums/CentralResendKindEnum.d.ts +10 -0
  22. package/bin/retailWizard/enums/CentralResendKindEnum.js +14 -0
  23. package/bin/retailWizard/index.d.ts +2 -0
  24. package/bin/retailWizard/index.js +2 -0
  25. package/package.json +1 -1
  26. package/src/retailIntegration/dtos/ReconciliationPageMessage.ts +14 -0
  27. package/src/retailIntegration/dtos/StartCatalogReconciliationRequest.ts +3 -0
  28. package/src/retailIntegration/dtos/StartOrgReconciliationRequest.ts +2 -0
  29. package/src/retailOrg/dtos/Retailer.ts +7 -0
  30. package/src/retailOrg/dtos/requests/ActivateRetailerIntegrationRequest.ts +8 -1
  31. package/src/retailOrg/dtos/requests/SetRetailerIntegrationModeRequest.ts +10 -0
  32. package/src/retailOrg/dtos/validation/RetailerValidationDto.ts +2 -0
  33. package/src/retailOrg/enums/RetailIntegrationModeEnum.ts +5 -0
  34. package/src/retailOrg/index.ts +2 -0
  35. package/src/retailWizard/dtos/requests/ResendCentralSaleRequest.ts +10 -0
  36. package/src/retailWizard/enums/CentralResendKindEnum.ts +10 -0
  37. package/src/retailWizard/index.ts +2 -0
@@ -119,3 +119,47 @@ describe('respuestas de la revisión', () => {
119
119
  expect(catalog.storesPending).toBe(0);
120
120
  });
121
121
  });
122
+
123
+ describe('revisión con excludeExtraneousValues', () => {
124
+ function exposed<T extends object>(cls: ClassConstructor<T>, payload: object): T {
125
+ return plainToInstance(cls, payload, { excludeExtraneousValues: true });
126
+ }
127
+
128
+ it('StartOrgReconciliationRequest conserva entity y descarta lo ajeno', () => {
129
+ expect(exposed(StartOrgReconciliationRequest, { entity: 'USERS', extra: 1 })).toEqual({ entity: 'USERS' });
130
+ });
131
+
132
+ it('StartCatalogReconciliationRequest conserva entity y storeId', () => {
133
+ const dto = exposed(StartCatalogReconciliationRequest, { entity: 'INVENTORY', storeId: 's-1', extra: 1 });
134
+ expect({ ...dto }).toEqual({ entity: 'INVENTORY', storeId: 's-1' });
135
+ });
136
+
137
+ it('ReconciliationPageMessage conserva todos sus campos y valida sin errores', () => {
138
+ const payload = {
139
+ tenantId: 't-1',
140
+ retailerId: 'r-1',
141
+ entity: 'INVENTORY',
142
+ runId: 'run-1',
143
+ pageIndex: 2,
144
+ storeId: 's-1',
145
+ requeueCount: 3,
146
+ };
147
+ const dto = exposed(ReconciliationPageMessage, { ...payload, extra: 1 });
148
+ expect({ ...dto }).toEqual(payload);
149
+ expect(validateSync(dto)).toEqual([]);
150
+ });
151
+ });
152
+
153
+ describe('ReconciliationPageMessage.requeueCount', () => {
154
+ const valid = { tenantId: 't-1', retailerId: 'r-1', entity: 'STORES', runId: 'run-1', pageIndex: 0 };
155
+
156
+ it('es opcional y acepta enteros desde 0', () => {
157
+ expect(propsWithErrors(ReconciliationPageMessage, valid)).toEqual([]);
158
+ expect(propsWithErrors(ReconciliationPageMessage, { ...valid, requeueCount: 0 })).toEqual([]);
159
+ expect(propsWithErrors(ReconciliationPageMessage, { ...valid, requeueCount: 5 })).toEqual([]);
160
+ });
161
+
162
+ it.each([-1, 1.5, '2'])('rechaza %p', (requeueCount) => {
163
+ expect(propsWithErrors(ReconciliationPageMessage, { ...valid, requeueCount })).toContain('requeueCount');
164
+ });
165
+ });
@@ -0,0 +1,106 @@
1
+ import 'reflect-metadata';
2
+ import { plainToInstance } from 'class-transformer';
3
+ import { validate } from 'class-validator';
4
+ import {
5
+ ActivateRetailerIntegrationRequest,
6
+ ActivateRetailerIntegrationResponse,
7
+ RetailIntegrationModeEnum,
8
+ RetailIntegrationSystemEnum,
9
+ Retailer,
10
+ RetailerStatusEnum,
11
+ RetailerTypeEnum,
12
+ RetailerValidationDto,
13
+ SetRetailerIntegrationModeRequest,
14
+ } from '../../../../src/retailOrg/index';
15
+
16
+ const base = {
17
+ retailerId: 'ret_001',
18
+ parentId: 'ROOT',
19
+ type: RetailerTypeEnum.CHAIN,
20
+ name: 'Tiendas del Centro',
21
+ legalName: 'Tiendas del Centro SA de CV',
22
+ rfc: 'VEN123456ABC',
23
+ contactEmail: 'contacto@tdc.mx',
24
+ contactPhone: '+525512345678',
25
+ address: { city: 'CDMX', region: 'CDMX', zipCode: '01000' },
26
+ status: RetailerStatusEnum.ACTIVE,
27
+ createdAt: '2026-07-14T10:00:00.000Z',
28
+ updatedAt: '2026-07-14T10:00:00.000Z',
29
+ createdBy: 'user_1',
30
+ updatedBy: 'user_1',
31
+ };
32
+ const errorsOf = async <T extends object>(cls: new () => T, plain: object) =>
33
+ (await validate(plainToInstance(cls, plain))).map(e => e.property);
34
+
35
+ describe('RetailIntegrationModeEnum', () => {
36
+ it('trae SOFT y FULL', () => {
37
+ expect(Object.values(RetailIntegrationModeEnum)).toEqual(['SOFT', 'FULL']);
38
+ });
39
+ });
40
+
41
+ describe('Retailer.integrationMode', () => {
42
+ it('es opcional', async () => {
43
+ expect(await errorsOf(Retailer, base)).toEqual([]);
44
+ });
45
+
46
+ it('acepta un modo del enum', async () => {
47
+ expect(await errorsOf(Retailer, { ...base, integrationMode: 'FULL' })).toEqual([]);
48
+ });
49
+
50
+ it('rechaza un modo fuera del enum', async () => {
51
+ expect(await errorsOf(Retailer, { ...base, integrationMode: 'HARD' })).toContain('integrationMode');
52
+ });
53
+ });
54
+
55
+ describe('RetailerValidationDto.integrationMode', () => {
56
+ it('admite el modo opcional', () => {
57
+ const dto: RetailerValidationDto = {
58
+ retailerId: 'ret_001', name: 'x', type: RetailerTypeEnum.CHAIN, status: RetailerStatusEnum.ACTIVE, parentId: 'ROOT',
59
+ integrationMode: RetailIntegrationModeEnum.SOFT,
60
+ };
61
+ expect(dto.integrationMode).toBe('SOFT');
62
+ });
63
+ });
64
+
65
+ describe('ActivateRetailerIntegrationRequest.integrationMode', () => {
66
+ it('es opcional', async () => {
67
+ expect(await errorsOf(ActivateRetailerIntegrationRequest, { integrationSystem: 'ZENTRAL' })).toEqual([]);
68
+ });
69
+
70
+ it('acepta un modo del enum y lo expone', async () => {
71
+ const req = plainToInstance(ActivateRetailerIntegrationRequest, { integrationSystem: 'ZENTRAL', integrationMode: 'FULL' }, { excludeExtraneousValues: true });
72
+ expect(req.integrationMode).toBe(RetailIntegrationModeEnum.FULL);
73
+ expect(await validate(req)).toEqual([]);
74
+ });
75
+
76
+ it('rechaza un modo fuera del enum', async () => {
77
+ expect(await errorsOf(ActivateRetailerIntegrationRequest, { integrationSystem: 'ZENTRAL', integrationMode: 'HARD' })).toContain('integrationMode');
78
+ });
79
+ });
80
+
81
+ describe('ActivateRetailerIntegrationResponse.integrationMode', () => {
82
+ it('incluye el modo opcional', () => {
83
+ const response = plainToInstance(Retailer, {
84
+ ...base, integrationSystem: RetailIntegrationSystemEnum.ZENTRAL, integrationActivatedAt: '2026-10-25T10:00:00.000Z',
85
+ integrationActivatedBy: 'user_1', integrationMode: 'SOFT',
86
+ }) as ActivateRetailerIntegrationResponse;
87
+ expect(response.integrationMode).toBe(RetailIntegrationModeEnum.SOFT);
88
+ });
89
+ });
90
+
91
+ describe('SetRetailerIntegrationModeRequest', () => {
92
+ it('acepta SOFT y FULL', async () => {
93
+ expect(await errorsOf(SetRetailerIntegrationModeRequest, { integrationMode: 'SOFT' })).toEqual([]);
94
+ expect(await errorsOf(SetRetailerIntegrationModeRequest, { integrationMode: 'FULL' })).toEqual([]);
95
+ });
96
+
97
+ it('exige integrationMode dentro del enum', async () => {
98
+ expect(await errorsOf(SetRetailerIntegrationModeRequest, {})).toContain('integrationMode');
99
+ expect(await errorsOf(SetRetailerIntegrationModeRequest, { integrationMode: 'HARD' })).toContain('integrationMode');
100
+ });
101
+
102
+ it('expone integrationMode con excludeExtraneousValues', () => {
103
+ const req = plainToInstance(SetRetailerIntegrationModeRequest, { integrationMode: 'FULL', extra: 1 }, { excludeExtraneousValues: true });
104
+ expect(req).toEqual({ integrationMode: 'FULL' });
105
+ });
106
+ });
@@ -0,0 +1,36 @@
1
+ import 'reflect-metadata';
2
+ import { plainToInstance } from 'class-transformer';
3
+ import { validateSync } from 'class-validator';
4
+ import { CentralResendKindEnum, ResendCentralSaleRequest } from '../../../src/retailWizard';
5
+ import * as root from '../../../src';
6
+
7
+ function errorsOf(payload: object): string[] {
8
+ const dto = plainToInstance(ResendCentralSaleRequest, payload, { excludeExtraneousValues: true });
9
+ return validateSync(dto).map((e) => e.property);
10
+ }
11
+
12
+ describe('CentralResendKindEnum', () => {
13
+ it('distingue el registro de la cancelación', () => {
14
+ expect(Object.values(CentralResendKindEnum)).toEqual(['SALE_REGISTER', 'SALE_CANCEL']);
15
+ });
16
+ });
17
+
18
+ describe('ResendCentralSaleRequest', () => {
19
+ it.each(['SALE_REGISTER', 'SALE_CANCEL'])('acepta %s', (kind) => {
20
+ expect(errorsOf({ kind })).toEqual([]);
21
+ });
22
+
23
+ it.each(['OTRO', undefined, 1])('rechaza %p', (kind) => {
24
+ expect(errorsOf({ kind })).toContain('kind');
25
+ });
26
+
27
+ it('conserva kind y descarta lo ajeno', () => {
28
+ const dto = plainToInstance(ResendCentralSaleRequest, { kind: 'SALE_CANCEL', extra: 1 }, { excludeExtraneousValues: true });
29
+ expect({ ...dto }).toEqual({ kind: 'SALE_CANCEL' });
30
+ });
31
+
32
+ it('se exporta desde la raíz de la lib', () => {
33
+ expect(root.RetailWizard.ResendCentralSaleRequest).toBe(ResendCentralSaleRequest);
34
+ expect(root.RetailWizard.CentralResendKindEnum).toBe(CentralResendKindEnum);
35
+ });
36
+ });
@@ -10,4 +10,6 @@ export declare class ReconciliationPageMessage {
10
10
  pageIndex: number;
11
11
  /** Tienda del mensaje en inventario. */
12
12
  storeId?: string;
13
+ /** Veces que el mensaje ya se re-encoló. */
14
+ requeueCount?: number;
13
15
  }
@@ -10,6 +10,7 @@ var __metadata = (this && this.__metadata) || function (k, v) {
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.ReconciliationPageMessage = void 0;
13
+ const class_transformer_1 = require("class-transformer");
13
14
  const class_validator_1 = require("class-validator");
14
15
  const ReconciliationEntityEnum_1 = require("../enums/ReconciliationEntityEnum");
15
16
  /** Mensaje de la cola de revisión: una página, o una tienda completa en inventario. */
@@ -17,32 +18,45 @@ class ReconciliationPageMessage {
17
18
  }
18
19
  exports.ReconciliationPageMessage = ReconciliationPageMessage;
19
20
  __decorate([
21
+ (0, class_transformer_1.Expose)(),
20
22
  (0, class_validator_1.IsString)(),
21
23
  (0, class_validator_1.IsNotEmpty)(),
22
24
  __metadata("design:type", String)
23
25
  ], ReconciliationPageMessage.prototype, "tenantId", void 0);
24
26
  __decorate([
27
+ (0, class_transformer_1.Expose)(),
25
28
  (0, class_validator_1.IsString)(),
26
29
  (0, class_validator_1.IsNotEmpty)(),
27
30
  __metadata("design:type", String)
28
31
  ], ReconciliationPageMessage.prototype, "retailerId", void 0);
29
32
  __decorate([
33
+ (0, class_transformer_1.Expose)(),
30
34
  (0, class_validator_1.IsEnum)(ReconciliationEntityEnum_1.ReconciliationEntityEnum),
31
35
  __metadata("design:type", String)
32
36
  ], ReconciliationPageMessage.prototype, "entity", void 0);
33
37
  __decorate([
38
+ (0, class_transformer_1.Expose)(),
34
39
  (0, class_validator_1.IsString)(),
35
40
  (0, class_validator_1.IsNotEmpty)(),
36
41
  __metadata("design:type", String)
37
42
  ], ReconciliationPageMessage.prototype, "runId", void 0);
38
43
  __decorate([
44
+ (0, class_transformer_1.Expose)(),
39
45
  (0, class_validator_1.IsInt)(),
40
46
  (0, class_validator_1.Min)(0),
41
47
  __metadata("design:type", Number)
42
48
  ], ReconciliationPageMessage.prototype, "pageIndex", void 0);
43
49
  __decorate([
50
+ (0, class_transformer_1.Expose)(),
44
51
  (0, class_validator_1.IsOptional)(),
45
52
  (0, class_validator_1.IsString)(),
46
53
  (0, class_validator_1.IsNotEmpty)(),
47
54
  __metadata("design:type", String)
48
55
  ], ReconciliationPageMessage.prototype, "storeId", void 0);
56
+ __decorate([
57
+ (0, class_transformer_1.Expose)(),
58
+ (0, class_validator_1.IsOptional)(),
59
+ (0, class_validator_1.IsInt)(),
60
+ (0, class_validator_1.Min)(0),
61
+ __metadata("design:type", Number)
62
+ ], ReconciliationPageMessage.prototype, "requeueCount", void 0);
@@ -10,6 +10,7 @@ var __metadata = (this && this.__metadata) || function (k, v) {
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.StartCatalogReconciliationRequest = void 0;
13
+ const class_transformer_1 = require("class-transformer");
13
14
  const class_validator_1 = require("class-validator");
14
15
  const ReconciliationEntityEnum_1 = require("../enums/ReconciliationEntityEnum");
15
16
  /** Body de POST /backoffice/retailers/{retailerId}/reconciliations en catalog (backofficeStartCatalogReconciliation). */
@@ -17,10 +18,12 @@ class StartCatalogReconciliationRequest {
17
18
  }
18
19
  exports.StartCatalogReconciliationRequest = StartCatalogReconciliationRequest;
19
20
  __decorate([
21
+ (0, class_transformer_1.Expose)(),
20
22
  (0, class_validator_1.IsIn)([ReconciliationEntityEnum_1.ReconciliationEntityEnum.CATALOG, ReconciliationEntityEnum_1.ReconciliationEntityEnum.INVENTORY]),
21
23
  __metadata("design:type", String)
22
24
  ], StartCatalogReconciliationRequest.prototype, "entity", void 0);
23
25
  __decorate([
26
+ (0, class_transformer_1.Expose)(),
24
27
  (0, class_validator_1.IsOptional)(),
25
28
  (0, class_validator_1.IsString)(),
26
29
  (0, class_validator_1.IsNotEmpty)(),
@@ -10,6 +10,7 @@ var __metadata = (this && this.__metadata) || function (k, v) {
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.StartOrgReconciliationRequest = void 0;
13
+ const class_transformer_1 = require("class-transformer");
13
14
  const class_validator_1 = require("class-validator");
14
15
  const ReconciliationEntityEnum_1 = require("../enums/ReconciliationEntityEnum");
15
16
  /** Body de POST /backoffice/retailers/{retailerId}/reconciliations en org (backofficeStartOrgReconciliation). */
@@ -17,6 +18,7 @@ class StartOrgReconciliationRequest {
17
18
  }
18
19
  exports.StartOrgReconciliationRequest = StartOrgReconciliationRequest;
19
20
  __decorate([
21
+ (0, class_transformer_1.Expose)(),
20
22
  (0, class_validator_1.IsIn)([ReconciliationEntityEnum_1.ReconciliationEntityEnum.STORES, ReconciliationEntityEnum_1.ReconciliationEntityEnum.USERS]),
21
23
  __metadata("design:type", String)
22
24
  ], StartOrgReconciliationRequest.prototype, "entity", void 0);
@@ -1,6 +1,7 @@
1
1
  import { LocationAddress } from '../../address/dtos/LocationAddress';
2
2
  import { RetailerStatusEnum } from '../enums/RetailerStatusEnum';
3
3
  import { RetailerTypeEnum } from '../enums/RetailerTypeEnum';
4
+ import { RetailIntegrationModeEnum } from '../enums/RetailIntegrationModeEnum';
4
5
  import { RetailIntegrationSystemEnum } from '../enums/RetailIntegrationSystemEnum';
5
6
  /**
6
7
  * Retailer — nodo raíz de la organización comercial SureKeep (cadena / subdistribuidor / franquicia).
@@ -32,4 +33,6 @@ export declare class Retailer {
32
33
  integrationSystem?: RetailIntegrationSystemEnum;
33
34
  integrationActivatedAt?: string;
34
35
  integrationActivatedBy?: string;
36
+ /** Modo de integración; ausente si el retailer no está integrado. */
37
+ integrationMode?: RetailIntegrationModeEnum;
35
38
  }
@@ -16,6 +16,7 @@ const LocationAddress_1 = require("../../address/dtos/LocationAddress");
16
16
  const regex_1 = require("../../helpers/constans/regex");
17
17
  const RetailerStatusEnum_1 = require("../enums/RetailerStatusEnum");
18
18
  const RetailerTypeEnum_1 = require("../enums/RetailerTypeEnum");
19
+ const RetailIntegrationModeEnum_1 = require("../enums/RetailIntegrationModeEnum");
19
20
  const RetailIntegrationSystemEnum_1 = require("../enums/RetailIntegrationSystemEnum");
20
21
  /**
21
22
  * Retailer — nodo raíz de la organización comercial SureKeep (cadena / subdistribuidor / franquicia).
@@ -122,3 +123,9 @@ __decorate([
122
123
  (0, class_validator_1.IsString)(),
123
124
  __metadata("design:type", String)
124
125
  ], Retailer.prototype, "integrationActivatedBy", void 0);
126
+ __decorate([
127
+ (0, class_transformer_1.Expose)(),
128
+ (0, class_validator_1.IsOptional)(),
129
+ (0, class_validator_1.IsEnum)(RetailIntegrationModeEnum_1.RetailIntegrationModeEnum),
130
+ __metadata("design:type", String)
131
+ ], Retailer.prototype, "integrationMode", void 0);
@@ -1,5 +1,8 @@
1
+ import { RetailIntegrationModeEnum } from '../../enums/RetailIntegrationModeEnum';
1
2
  import { RetailIntegrationSystemEnum } from '../../enums/RetailIntegrationSystemEnum';
2
3
  /** Body de POST /retailers/:retailerId/integration/activate. */
3
4
  export declare class ActivateRetailerIntegrationRequest {
4
5
  integrationSystem: RetailIntegrationSystemEnum;
6
+ /** Si no viene, el back usa SOFT. */
7
+ integrationMode?: RetailIntegrationModeEnum;
5
8
  }
@@ -12,6 +12,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.ActivateRetailerIntegrationRequest = void 0;
13
13
  const class_transformer_1 = require("class-transformer");
14
14
  const class_validator_1 = require("class-validator");
15
+ const RetailIntegrationModeEnum_1 = require("../../enums/RetailIntegrationModeEnum");
15
16
  const RetailIntegrationSystemEnum_1 = require("../../enums/RetailIntegrationSystemEnum");
16
17
  /** Body de POST /retailers/:retailerId/integration/activate. */
17
18
  class ActivateRetailerIntegrationRequest {
@@ -22,3 +23,9 @@ __decorate([
22
23
  (0, class_validator_1.IsEnum)(RetailIntegrationSystemEnum_1.RetailIntegrationSystemEnum),
23
24
  __metadata("design:type", String)
24
25
  ], ActivateRetailerIntegrationRequest.prototype, "integrationSystem", void 0);
26
+ __decorate([
27
+ (0, class_transformer_1.Expose)(),
28
+ (0, class_validator_1.IsOptional)(),
29
+ (0, class_validator_1.IsEnum)(RetailIntegrationModeEnum_1.RetailIntegrationModeEnum),
30
+ __metadata("design:type", String)
31
+ ], ActivateRetailerIntegrationRequest.prototype, "integrationMode", void 0);
@@ -0,0 +1,5 @@
1
+ import { RetailIntegrationModeEnum } from '../../enums/RetailIntegrationModeEnum';
2
+ /** Body del endpoint que cambia el modo de integración de un retailer ya integrado. */
3
+ export declare class SetRetailerIntegrationModeRequest {
4
+ integrationMode: RetailIntegrationModeEnum;
5
+ }
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.SetRetailerIntegrationModeRequest = void 0;
13
+ const class_transformer_1 = require("class-transformer");
14
+ const class_validator_1 = require("class-validator");
15
+ const RetailIntegrationModeEnum_1 = require("../../enums/RetailIntegrationModeEnum");
16
+ /** Body del endpoint que cambia el modo de integración de un retailer ya integrado. */
17
+ class SetRetailerIntegrationModeRequest {
18
+ }
19
+ exports.SetRetailerIntegrationModeRequest = SetRetailerIntegrationModeRequest;
20
+ __decorate([
21
+ (0, class_transformer_1.Expose)(),
22
+ (0, class_validator_1.IsEnum)(RetailIntegrationModeEnum_1.RetailIntegrationModeEnum),
23
+ __metadata("design:type", String)
24
+ ], SetRetailerIntegrationModeRequest.prototype, "integrationMode", void 0);
@@ -1,5 +1,6 @@
1
1
  import type { RetailerStatusEnum } from '../../enums/RetailerStatusEnum';
2
2
  import type { RetailerTypeEnum } from '../../enums/RetailerTypeEnum';
3
+ import type { RetailIntegrationModeEnum } from '../../enums/RetailIntegrationModeEnum';
3
4
  import type { RetailIntegrationSystemEnum } from '../../enums/RetailIntegrationSystemEnum';
4
5
  /**
5
6
  * Shape mínimo que devuelve el endpoint privado de validación de retailer (consumido por otros
@@ -15,4 +16,5 @@ export interface RetailerValidationDto {
15
16
  /** Bandera «integrado»; ausente si el retailer no está integrado. */
16
17
  integrationSystem?: RetailIntegrationSystemEnum;
17
18
  integrationActivatedAt?: string;
19
+ integrationMode?: RetailIntegrationModeEnum;
18
20
  }
@@ -0,0 +1,5 @@
1
+ /** Alcance de la revisión contra el sistema externo: SOFT solo aplica altas y cambios, nunca bajas; FULL aplica todo. */
2
+ export declare enum RetailIntegrationModeEnum {
3
+ SOFT = "SOFT",
4
+ FULL = "FULL"
5
+ }
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RetailIntegrationModeEnum = void 0;
4
+ /** Alcance de la revisión contra el sistema externo: SOFT solo aplica altas y cambios, nunca bajas; FULL aplica todo. */
5
+ var RetailIntegrationModeEnum;
6
+ (function (RetailIntegrationModeEnum) {
7
+ RetailIntegrationModeEnum["SOFT"] = "SOFT";
8
+ RetailIntegrationModeEnum["FULL"] = "FULL";
9
+ })(RetailIntegrationModeEnum || (exports.RetailIntegrationModeEnum = RetailIntegrationModeEnum = {}));
@@ -7,6 +7,7 @@ export * from './enums/EmploymentTypeEnum';
7
7
  export * from './enums/CollectorSeniorityEnum';
8
8
  export * from './enums/RetailUserWalletLinkMethodEnum';
9
9
  export * from './enums/RetailIntegrationSystemEnum';
10
+ export * from './enums/RetailIntegrationModeEnum';
10
11
  export * from './enums/GoalTargetTypeEnum';
11
12
  export * from './dtos/GeoLocation';
12
13
  export * from './dtos/GoalAmounts';
@@ -46,6 +47,7 @@ export * from './dtos/requests/PrivateGoalListQuery';
46
47
  export * from './dtos/requests/KpiQuery';
47
48
  export * from './dtos/requests/PrivateSellerListQuery';
48
49
  export * from './dtos/requests/ActivateRetailerIntegrationRequest';
50
+ export * from './dtos/requests/SetRetailerIntegrationModeRequest';
49
51
  export * from './dtos/responses/RetailerHierarchyResponse';
50
52
  export * from './dtos/responses/GoalListResponse';
51
53
  export * from './dtos/responses/GoalUpsertResponse';
@@ -23,6 +23,7 @@ __exportStar(require("./enums/EmploymentTypeEnum"), exports);
23
23
  __exportStar(require("./enums/CollectorSeniorityEnum"), exports);
24
24
  __exportStar(require("./enums/RetailUserWalletLinkMethodEnum"), exports);
25
25
  __exportStar(require("./enums/RetailIntegrationSystemEnum"), exports);
26
+ __exportStar(require("./enums/RetailIntegrationModeEnum"), exports);
26
27
  // F3 — Portal Admin VentasLuga (metas de venta del periodo)
27
28
  __exportStar(require("./enums/GoalTargetTypeEnum"), exports);
28
29
  // Entity DTOs
@@ -69,6 +70,7 @@ __exportStar(require("./dtos/requests/PrivateGoalListQuery"), exports);
69
70
  __exportStar(require("./dtos/requests/KpiQuery"), exports);
70
71
  __exportStar(require("./dtos/requests/PrivateSellerListQuery"), exports);
71
72
  __exportStar(require("./dtos/requests/ActivateRetailerIntegrationRequest"), exports);
73
+ __exportStar(require("./dtos/requests/SetRetailerIntegrationModeRequest"), exports);
72
74
  // Response DTOs
73
75
  __exportStar(require("./dtos/responses/RetailerHierarchyResponse"), exports);
74
76
  __exportStar(require("./dtos/responses/GoalListResponse"), exports);
@@ -0,0 +1,5 @@
1
+ import { CentralResendKindEnum } from '../../enums/CentralResendKindEnum';
2
+ /** Body de POST /backoffice/sales/{saleId}/central-resend. */
3
+ export declare class ResendCentralSaleRequest {
4
+ kind: CentralResendKindEnum;
5
+ }
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.ResendCentralSaleRequest = void 0;
13
+ const class_transformer_1 = require("class-transformer");
14
+ const class_validator_1 = require("class-validator");
15
+ const CentralResendKindEnum_1 = require("../../enums/CentralResendKindEnum");
16
+ /** Body de POST /backoffice/sales/{saleId}/central-resend. */
17
+ class ResendCentralSaleRequest {
18
+ }
19
+ exports.ResendCentralSaleRequest = ResendCentralSaleRequest;
20
+ __decorate([
21
+ (0, class_transformer_1.Expose)(),
22
+ (0, class_validator_1.IsEnum)(CentralResendKindEnum_1.CentralResendKindEnum),
23
+ __metadata("design:type", String)
24
+ ], ResendCentralSaleRequest.prototype, "kind", void 0);
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Mensaje a Central que el backoffice reenvía.
3
+ *
4
+ * SALE_REGISTER - Registro de la venta.
5
+ * SALE_CANCEL - Cancelación de la venta.
6
+ */
7
+ export declare enum CentralResendKindEnum {
8
+ SALE_REGISTER = "SALE_REGISTER",
9
+ SALE_CANCEL = "SALE_CANCEL"
10
+ }
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CentralResendKindEnum = void 0;
4
+ /**
5
+ * Mensaje a Central que el backoffice reenvía.
6
+ *
7
+ * SALE_REGISTER - Registro de la venta.
8
+ * SALE_CANCEL - Cancelación de la venta.
9
+ */
10
+ var CentralResendKindEnum;
11
+ (function (CentralResendKindEnum) {
12
+ CentralResendKindEnum["SALE_REGISTER"] = "SALE_REGISTER";
13
+ CentralResendKindEnum["SALE_CANCEL"] = "SALE_CANCEL";
14
+ })(CentralResendKindEnum || (exports.CentralResendKindEnum = CentralResendKindEnum = {}));
@@ -149,6 +149,8 @@ export * from './dtos/requests/AddSaleExceptionNoteRequest';
149
149
  export * from './dtos/requests/RunSalesReportRequest';
150
150
  export * from './dtos/requests/BackofficeCancelSaleRequest';
151
151
  export * from './dtos/requests/PortalCancelSaleRequest';
152
+ export * from './enums/CentralResendKindEnum';
153
+ export * from './dtos/requests/ResendCentralSaleRequest';
152
154
  export * from './dtos/responses/BackofficeSalesStatsResponse';
153
155
  export * from './dtos/responses/BackofficeSalesKpisResponse';
154
156
  export * from './dtos/responses/BackofficeReportsResponse';
@@ -180,6 +180,8 @@ __exportStar(require("./dtos/requests/AddSaleExceptionNoteRequest"), exports);
180
180
  __exportStar(require("./dtos/requests/RunSalesReportRequest"), exports);
181
181
  __exportStar(require("./dtos/requests/BackofficeCancelSaleRequest"), exports);
182
182
  __exportStar(require("./dtos/requests/PortalCancelSaleRequest"), exports);
183
+ __exportStar(require("./enums/CentralResendKindEnum"), exports);
184
+ __exportStar(require("./dtos/requests/ResendCentralSaleRequest"), exports);
183
185
  // Responses
184
186
  __exportStar(require("./dtos/responses/BackofficeSalesStatsResponse"), exports);
185
187
  __exportStar(require("./dtos/responses/BackofficeSalesKpisResponse"), exports);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fiado/type-kit",
3
- "version": "3.580.0",
3
+ "version": "3.582.0",
4
4
  "description": "",
5
5
  "main": "bin/index.js",
6
6
  "types": "bin/index.d.ts",
@@ -1,32 +1,46 @@
1
+ import { Expose } from 'class-transformer';
1
2
  import { IsEnum, IsInt, IsNotEmpty, IsOptional, IsString, Min } from 'class-validator';
2
3
  import { ReconciliationEntityEnum } from '../enums/ReconciliationEntityEnum';
3
4
 
4
5
  /** Mensaje de la cola de revisión: una página, o una tienda completa en inventario. */
5
6
  export class ReconciliationPageMessage {
7
+ @Expose()
6
8
  @IsString()
7
9
  @IsNotEmpty()
8
10
  tenantId!: string;
9
11
 
12
+ @Expose()
10
13
  @IsString()
11
14
  @IsNotEmpty()
12
15
  retailerId!: string;
13
16
 
17
+ @Expose()
14
18
  @IsEnum(ReconciliationEntityEnum)
15
19
  entity!: ReconciliationEntityEnum;
16
20
 
17
21
  /** Corrida dueña del lease; otro runId en el LEASE vuelve el mensaje NOOP. */
22
+ @Expose()
18
23
  @IsString()
19
24
  @IsNotEmpty()
20
25
  runId!: string;
21
26
 
22
27
  /** Índice de la página que se pide; al re-encolar el resto lleva el índice siguiente. */
28
+ @Expose()
23
29
  @IsInt()
24
30
  @Min(0)
25
31
  pageIndex!: number;
26
32
 
27
33
  /** Tienda del mensaje en inventario. */
34
+ @Expose()
28
35
  @IsOptional()
29
36
  @IsString()
30
37
  @IsNotEmpty()
31
38
  storeId?: string;
39
+
40
+ /** Veces que el mensaje ya se re-encoló. */
41
+ @Expose()
42
+ @IsOptional()
43
+ @IsInt()
44
+ @Min(0)
45
+ requeueCount?: number;
32
46
  }
@@ -1,12 +1,15 @@
1
+ import { Expose } from 'class-transformer';
1
2
  import { IsIn, IsNotEmpty, IsOptional, IsString } from 'class-validator';
2
3
  import { ReconciliationEntityEnum } from '../enums/ReconciliationEntityEnum';
3
4
 
4
5
  /** Body de POST /backoffice/retailers/{retailerId}/reconciliations en catalog (backofficeStartCatalogReconciliation). */
5
6
  export class StartCatalogReconciliationRequest {
7
+ @Expose()
6
8
  @IsIn([ReconciliationEntityEnum.CATALOG, ReconciliationEntityEnum.INVENTORY])
7
9
  entity!: ReconciliationEntityEnum.CATALOG | ReconciliationEntityEnum.INVENTORY;
8
10
 
9
11
  /** Tienda a revisar en inventario; sin ella se revisan todas las del padrón. */
12
+ @Expose()
10
13
  @IsOptional()
11
14
  @IsString()
12
15
  @IsNotEmpty()
@@ -1,8 +1,10 @@
1
+ import { Expose } from 'class-transformer';
1
2
  import { IsIn } from 'class-validator';
2
3
  import { ReconciliationEntityEnum } from '../enums/ReconciliationEntityEnum';
3
4
 
4
5
  /** Body de POST /backoffice/retailers/{retailerId}/reconciliations en org (backofficeStartOrgReconciliation). */
5
6
  export class StartOrgReconciliationRequest {
7
+ @Expose()
6
8
  @IsIn([ReconciliationEntityEnum.STORES, ReconciliationEntityEnum.USERS])
7
9
  entity!: ReconciliationEntityEnum.STORES | ReconciliationEntityEnum.USERS;
8
10
  }
@@ -4,6 +4,7 @@ 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 { RetailIntegrationModeEnum } from '../enums/RetailIntegrationModeEnum';
7
8
  import { RetailIntegrationSystemEnum } from '../enums/RetailIntegrationSystemEnum';
8
9
 
9
10
  /**
@@ -96,4 +97,10 @@ export class Retailer {
96
97
  @IsOptional()
97
98
  @IsString()
98
99
  integrationActivatedBy?: string;
100
+
101
+ /** Modo de integración; ausente si el retailer no está integrado. */
102
+ @Expose()
103
+ @IsOptional()
104
+ @IsEnum(RetailIntegrationModeEnum)
105
+ integrationMode?: RetailIntegrationModeEnum;
99
106
  }
@@ -1,5 +1,6 @@
1
1
  import { Expose } from 'class-transformer';
2
- import { IsEnum } from 'class-validator';
2
+ import { IsEnum, IsOptional } from 'class-validator';
3
+ import { RetailIntegrationModeEnum } from '../../enums/RetailIntegrationModeEnum';
3
4
  import { RetailIntegrationSystemEnum } from '../../enums/RetailIntegrationSystemEnum';
4
5
 
5
6
  /** Body de POST /retailers/:retailerId/integration/activate. */
@@ -7,4 +8,10 @@ export class ActivateRetailerIntegrationRequest {
7
8
  @Expose()
8
9
  @IsEnum(RetailIntegrationSystemEnum)
9
10
  integrationSystem!: RetailIntegrationSystemEnum;
11
+
12
+ /** Si no viene, el back usa SOFT. */
13
+ @Expose()
14
+ @IsOptional()
15
+ @IsEnum(RetailIntegrationModeEnum)
16
+ integrationMode?: RetailIntegrationModeEnum;
10
17
  }
@@ -0,0 +1,10 @@
1
+ import { Expose } from 'class-transformer';
2
+ import { IsEnum } from 'class-validator';
3
+ import { RetailIntegrationModeEnum } from '../../enums/RetailIntegrationModeEnum';
4
+
5
+ /** Body del endpoint que cambia el modo de integración de un retailer ya integrado. */
6
+ export class SetRetailerIntegrationModeRequest {
7
+ @Expose()
8
+ @IsEnum(RetailIntegrationModeEnum)
9
+ integrationMode!: RetailIntegrationModeEnum;
10
+ }
@@ -1,5 +1,6 @@
1
1
  import type { RetailerStatusEnum } from '../../enums/RetailerStatusEnum';
2
2
  import type { RetailerTypeEnum } from '../../enums/RetailerTypeEnum';
3
+ import type { RetailIntegrationModeEnum } from '../../enums/RetailIntegrationModeEnum';
3
4
  import type { RetailIntegrationSystemEnum } from '../../enums/RetailIntegrationSystemEnum';
4
5
 
5
6
  /**
@@ -16,4 +17,5 @@ export interface RetailerValidationDto {
16
17
  /** Bandera «integrado»; ausente si el retailer no está integrado. */
17
18
  integrationSystem?: RetailIntegrationSystemEnum;
18
19
  integrationActivatedAt?: string;
20
+ integrationMode?: RetailIntegrationModeEnum;
19
21
  }
@@ -0,0 +1,5 @@
1
+ /** Alcance de la revisión contra el sistema externo: SOFT solo aplica altas y cambios, nunca bajas; FULL aplica todo. */
2
+ export enum RetailIntegrationModeEnum {
3
+ SOFT = 'SOFT',
4
+ FULL = 'FULL',
5
+ }
@@ -7,6 +7,7 @@ export * from './enums/EmploymentTypeEnum';
7
7
  export * from './enums/CollectorSeniorityEnum';
8
8
  export * from './enums/RetailUserWalletLinkMethodEnum';
9
9
  export * from './enums/RetailIntegrationSystemEnum';
10
+ export * from './enums/RetailIntegrationModeEnum';
10
11
  // F3 — Portal Admin VentasLuga (metas de venta del periodo)
11
12
  export * from './enums/GoalTargetTypeEnum';
12
13
 
@@ -58,6 +59,7 @@ export * from './dtos/requests/PrivateGoalListQuery';
58
59
  export * from './dtos/requests/KpiQuery';
59
60
  export * from './dtos/requests/PrivateSellerListQuery';
60
61
  export * from './dtos/requests/ActivateRetailerIntegrationRequest';
62
+ export * from './dtos/requests/SetRetailerIntegrationModeRequest';
61
63
 
62
64
  // Response DTOs
63
65
  export * from './dtos/responses/RetailerHierarchyResponse';
@@ -0,0 +1,10 @@
1
+ import { Expose } from 'class-transformer';
2
+ import { IsEnum } from 'class-validator';
3
+ import { CentralResendKindEnum } from '../../enums/CentralResendKindEnum';
4
+
5
+ /** Body de POST /backoffice/sales/{saleId}/central-resend. */
6
+ export class ResendCentralSaleRequest {
7
+ @Expose()
8
+ @IsEnum(CentralResendKindEnum)
9
+ kind!: CentralResendKindEnum;
10
+ }
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Mensaje a Central que el backoffice reenvía.
3
+ *
4
+ * SALE_REGISTER - Registro de la venta.
5
+ * SALE_CANCEL - Cancelación de la venta.
6
+ */
7
+ export enum CentralResendKindEnum {
8
+ SALE_REGISTER = 'SALE_REGISTER',
9
+ SALE_CANCEL = 'SALE_CANCEL',
10
+ }
@@ -171,6 +171,8 @@ export * from './dtos/requests/AddSaleExceptionNoteRequest';
171
171
  export * from './dtos/requests/RunSalesReportRequest';
172
172
  export * from './dtos/requests/BackofficeCancelSaleRequest';
173
173
  export * from './dtos/requests/PortalCancelSaleRequest';
174
+ export * from './enums/CentralResendKindEnum';
175
+ export * from './dtos/requests/ResendCentralSaleRequest';
174
176
 
175
177
  // Responses
176
178
  export * from './dtos/responses/BackofficeSalesStatsResponse';