@fiado/type-kit 3.581.0 → 3.583.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 (34) hide show
  1. package/_test_/unit/mdm/MdmProviderEnum.test.ts +12 -0
  2. package/_test_/unit/retailCatalog/backofficeRequests.test.ts +3 -0
  3. package/_test_/unit/retailCatalog/catalogEnums.test.ts +4 -0
  4. package/_test_/unit/retailIntegration/eventPayloads.test.ts +8 -0
  5. package/_test_/unit/retailIntegration/retailSystemEnums.test.ts +1 -1
  6. package/_test_/unit/retailOrg/dtos/retailerIntegrationMode.test.ts +106 -0
  7. package/bin/mdm/enums/MdmProviderEnum.d.ts +2 -1
  8. package/bin/mdm/enums/MdmProviderEnum.js +1 -0
  9. package/bin/retailCatalog/enums/MdmProviderEnum.d.ts +3 -1
  10. package/bin/retailCatalog/enums/MdmProviderEnum.js +2 -0
  11. package/bin/retailIntegration/enums/RetailMdmProviderEnum.d.ts +2 -1
  12. package/bin/retailIntegration/enums/RetailMdmProviderEnum.js +1 -0
  13. package/bin/retailOrg/dtos/Retailer.d.ts +3 -0
  14. package/bin/retailOrg/dtos/Retailer.js +7 -0
  15. package/bin/retailOrg/dtos/requests/ActivateRetailerIntegrationRequest.d.ts +3 -0
  16. package/bin/retailOrg/dtos/requests/ActivateRetailerIntegrationRequest.js +7 -0
  17. package/bin/retailOrg/dtos/requests/SetRetailerIntegrationModeRequest.d.ts +5 -0
  18. package/bin/retailOrg/dtos/requests/SetRetailerIntegrationModeRequest.js +24 -0
  19. package/bin/retailOrg/dtos/validation/RetailerValidationDto.d.ts +2 -0
  20. package/bin/retailOrg/enums/RetailIntegrationModeEnum.d.ts +5 -0
  21. package/bin/retailOrg/enums/RetailIntegrationModeEnum.js +9 -0
  22. package/bin/retailOrg/index.d.ts +2 -0
  23. package/bin/retailOrg/index.js +2 -0
  24. package/package.json +1 -1
  25. package/src/mdm/README.md +17 -17
  26. package/src/mdm/enums/MdmProviderEnum.ts +2 -1
  27. package/src/retailCatalog/enums/MdmProviderEnum.ts +2 -0
  28. package/src/retailIntegration/enums/RetailMdmProviderEnum.ts +1 -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
@@ -0,0 +1,12 @@
1
+ import 'reflect-metadata';
2
+ import { MdmProviderEnum } from '../../../src/mdm/enums/MdmProviderEnum';
3
+
4
+ describe('MdmProviderEnum', () => {
5
+ it('trae exactamente los proveedores MDM del contrato, en orden', () => {
6
+ expect(Object.values(MdmProviderEnum)).toEqual(['TRUSTONIC', 'DATACULTR', 'MOTOSAFE']);
7
+ });
8
+
9
+ it('MOTOSAFE vale su propio nombre', () => {
10
+ expect(MdmProviderEnum.MOTOSAFE).toBe('MOTOSAFE');
11
+ });
12
+ });
@@ -236,6 +236,9 @@ describe('financiamiento, MDM y externalId en las altas y edición backoffice',
236
236
  const errors = errorsOf(cls, { ...ok, ...financed, mdmProvider: 'KNOX', mdmLockMode: 'NEVER' });
237
237
  expect(errors).toEqual(expect.arrayContaining(['mdmProvider', 'mdmLockMode']));
238
238
  });
239
+ it('acepta MOTOSAFE como proveedor MDM', () => {
240
+ expect(errorsOf(cls, { ...ok, ...financed, mdmProvider: 'MOTOSAFE' })).toEqual([]);
241
+ });
239
242
  it('rechaza MDM incoherente', () => {
240
243
  expect(errorsOf(cls, { ...ok, mdmEnabled: true })).toContain('mdmEnabled');
241
244
  expect(errorsOf(cls, { ...ok, mdmEnabled: false, mdmProvider: 'TRUSTONIC', mdmLockMode: 'ONDEMAND' })).toContain('mdmEnabled');
@@ -10,6 +10,10 @@ describe('retailCatalog — enums del inventario multi-item', () => {
10
10
  expect(Object.values(RetailCatalog.TrackingModeEnum)).toEqual(['IMEI', 'SERIAL', 'QUANTITY']);
11
11
  });
12
12
 
13
+ it('expone los proveedores MDM, con MOTOSAFE', () => {
14
+ expect(Object.values(RetailCatalog.MdmProviderEnum)).toEqual(['TRUSTONIC', 'DATACULTR', 'MOTOSAFE']);
15
+ });
16
+
13
17
  it('expone los tipos de movimiento', () => {
14
18
  expect(Object.values(RetailCatalog.InventoryMovementTypeEnum)).toEqual([
15
19
  'ENTRY', 'RESERVATION', 'RELEASE', 'SALE', 'RETURN', 'ADJUSTMENT',
@@ -88,6 +88,14 @@ describe('ProductEventPayload', () => {
88
88
  expect(await errorsOf(ProductEventPayload, product)).toEqual([]);
89
89
  });
90
90
 
91
+ it.each(['TRUSTONIC', 'DATACULTR', 'MOTOSAFE'])('acepta mdmProvider %s', async (mdmProvider) => {
92
+ expect(await errorsOf(ProductEventPayload, { ...product, mdmProvider })).toEqual([]);
93
+ });
94
+
95
+ it('rechaza un mdmProvider fuera del enum', async () => {
96
+ expect(await errorsOf(ProductEventPayload, { ...product, mdmProvider: 'KNOX' })).toContain('mdmProvider');
97
+ });
98
+
91
99
  it.each([
92
100
  ['sku', { sku: 'SAM_A17' }],
93
101
  ['price.basePrice', { price: { ...product.price, basePrice: '4299' } }],
@@ -27,7 +27,7 @@ describe('enums de los objetos del retailer', () => {
27
27
  [RetailProductTierEnum, ['LOW', 'MID', 'HIGH', 'PREMIUM']],
28
28
  [RetailCurrencyEnum, ['MXN', 'USD']],
29
29
  [RetailFinancierEnum, ['SUREKEEP', 'PAYJOY', 'CREDIYA', 'LESPAGO', 'INNOVA']],
30
- [RetailMdmProviderEnum, ['TRUSTONIC', 'DATACULTR']],
30
+ [RetailMdmProviderEnum, ['TRUSTONIC', 'DATACULTR', 'MOTOSAFE']],
31
31
  [RetailProductStatusEnum, ['ACTIVE', 'INACTIVE', 'DISCONTINUED']],
32
32
  [RetailPieceStatusEnum, ['AVAILABLE', 'IN_TRANSIT', 'SOLD', 'DAMAGED']],
33
33
  [RetailPieceReasonEnum, ['WARRANTY', 'DAMAGED_RETURN', 'SHRINKAGE']],
@@ -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
+ });
@@ -1,4 +1,5 @@
1
1
  export declare enum MdmProviderEnum {
2
2
  TRUSTONIC = "TRUSTONIC",
3
- DATACULTR = "DATACULTR"
3
+ DATACULTR = "DATACULTR",
4
+ MOTOSAFE = "MOTOSAFE"
4
5
  }
@@ -5,4 +5,5 @@ var MdmProviderEnum;
5
5
  (function (MdmProviderEnum) {
6
6
  MdmProviderEnum["TRUSTONIC"] = "TRUSTONIC";
7
7
  MdmProviderEnum["DATACULTR"] = "DATACULTR";
8
+ MdmProviderEnum["MOTOSAFE"] = "MOTOSAFE";
8
9
  })(MdmProviderEnum || (exports.MdmProviderEnum = MdmProviderEnum = {}));
@@ -4,8 +4,10 @@
4
4
  *
5
5
  * @property {string} TRUSTONIC - Proveedor Trustonic.
6
6
  * @property {string} DATACULTR - Proveedor Datacultr.
7
+ * @property {string} MOTOSAFE - Proveedor Motosafe (MDM embebido de Motorola); solo opera en ONDEMAND.
7
8
  */
8
9
  export declare enum MdmProviderEnum {
9
10
  TRUSTONIC = "TRUSTONIC",
10
- DATACULTR = "DATACULTR"
11
+ DATACULTR = "DATACULTR",
12
+ MOTOSAFE = "MOTOSAFE"
11
13
  }
@@ -7,9 +7,11 @@ exports.MdmProviderEnum = void 0;
7
7
  *
8
8
  * @property {string} TRUSTONIC - Proveedor Trustonic.
9
9
  * @property {string} DATACULTR - Proveedor Datacultr.
10
+ * @property {string} MOTOSAFE - Proveedor Motosafe (MDM embebido de Motorola); solo opera en ONDEMAND.
10
11
  */
11
12
  var MdmProviderEnum;
12
13
  (function (MdmProviderEnum) {
13
14
  MdmProviderEnum["TRUSTONIC"] = "TRUSTONIC";
14
15
  MdmProviderEnum["DATACULTR"] = "DATACULTR";
16
+ MdmProviderEnum["MOTOSAFE"] = "MOTOSAFE";
15
17
  })(MdmProviderEnum || (exports.MdmProviderEnum = MdmProviderEnum = {}));
@@ -1,5 +1,6 @@
1
1
  /** Proveedor de MDM del equipo. */
2
2
  export declare enum RetailMdmProviderEnum {
3
3
  TRUSTONIC = "TRUSTONIC",
4
- DATACULTR = "DATACULTR"
4
+ DATACULTR = "DATACULTR",
5
+ MOTOSAFE = "MOTOSAFE"
5
6
  }
@@ -6,4 +6,5 @@ var RetailMdmProviderEnum;
6
6
  (function (RetailMdmProviderEnum) {
7
7
  RetailMdmProviderEnum["TRUSTONIC"] = "TRUSTONIC";
8
8
  RetailMdmProviderEnum["DATACULTR"] = "DATACULTR";
9
+ RetailMdmProviderEnum["MOTOSAFE"] = "MOTOSAFE";
9
10
  })(RetailMdmProviderEnum || (exports.RetailMdmProviderEnum = RetailMdmProviderEnum = {}));
@@ -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);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fiado/type-kit",
3
- "version": "3.581.0",
3
+ "version": "3.583.0",
4
4
  "description": "",
5
5
  "main": "bin/index.js",
6
6
  "types": "bin/index.d.ts",
package/src/mdm/README.md CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  ## Qué es esto
6
6
 
7
- DTOs y enums para el servicio MDM (Mobile Device Management) de SureKeep. Son agnósticos al proveedor — la misma forma sirve para Trustonic, Datacultr o cualquier otro proveedor que se integre en el futuro.
7
+ DTOs y enums para el servicio MDM (Mobile Device Management) de SureKeep. Son agnósticos al proveedor — la misma forma sirve para Trustonic, Datacultr, Motosafe o cualquier otro proveedor que se integre en el futuro.
8
8
 
9
9
  ## Convenciones
10
10
 
@@ -43,22 +43,22 @@ import { Mdm } from "@fiado/type-kit";
43
43
 
44
44
  ## Acciones soportadas
45
45
 
46
- | Acción | Trustonic | Datacultr |
47
- |---|---|---|
48
- | DeviceNotify | HEADSUP / FULLSCREEN | Notification (con `notification_code`) |
49
- | DeviceRestrictApps | ⚠️ Por confirmar configuración | Nudge (App Block) |
50
- | DeviceLock (FIRM) | Lock LOCK | Bulk Lock |
51
- | DeviceLock (TEMPORARY) | Lock DIMISSABLE | ❌ Error: no soporta |
52
- | DeviceUnlock | Unlock | Unlock |
53
- | DevicePinUnlock | PIN Unlock | get_device_passcode |
54
- | DeviceStatus | Device Info | Device Status by IMEI |
55
- | DeviceEnroll | Upload + Activate (síncrono) | Registra y espera webhook |
56
- | DeviceRelease | Release | Release |
57
- | DeviceServiceDeactivate | Deactivate Service | ❌ Error: no soporta |
58
- | DeviceArchive | Archive | ❌ Error: no soporta |
59
- | DeviceAutoLockSchedule | ❌ Error: no soporta postpaid | Adhoc Auto Lock |
60
- | DeviceLastSeen | (incluido en Device Info) | Device Last Seen |
61
- | DeviceLog | ❌ Error: no expone | Device Log |
46
+ | Acción | Trustonic | Datacultr | Motosafe |
47
+ |---|---|---|---|
48
+ | DeviceNotify | HEADSUP / FULLSCREEN | Notification (con `notification_code`) | send-message (título ≤ 30, cuerpo ≤ 100; un IMEI por llamada) |
49
+ | DeviceRestrictApps | ⚠️ Por confirmar configuración | Nudge (App Block) | ❌ Error: no soporta |
50
+ | DeviceLock (FIRM) | Lock LOCK | Bulk Lock | command `lock` (sin mensaje en pantalla) |
51
+ | DeviceLock (TEMPORARY) | Lock DIMISSABLE | ❌ Error: no soporta | ❌ Error: no soporta |
52
+ | DeviceUnlock | Unlock | Unlock | command `unlock` (sin `unlockUntil`: solo ONDEMAND) |
53
+ | DevicePinUnlock | PIN Unlock | get_device_passcode | ❌ Error: no soporta |
54
+ | DeviceStatus | Device Info | Device Status by IMEI | Device (`status` / `nextStatus`) |
55
+ | DeviceEnroll | Upload + Activate (síncrono) | Registra y espera webhook | register (sin handle; se concilia por estado) |
56
+ | DeviceRelease | Release | Release | command `release` |
57
+ | DeviceServiceDeactivate | Deactivate Service | ❌ Error: no soporta | ❌ Error: no soporta |
58
+ | DeviceArchive | Archive | ❌ Error: no soporta | Cancel Device |
59
+ | DeviceAutoLockSchedule | ❌ Error: no soporta postpaid | Adhoc Auto Lock | ❌ Error: no soporta |
60
+ | DeviceLastSeen | (incluido en Device Info) | Device Last Seen | ❌ Error: no expone |
61
+ | DeviceLog | ❌ Error: no expone | Device Log | ❌ Error: no expone |
62
62
 
63
63
  ## Modo de bloqueo (`MdmLockModeEnum`)
64
64
 
@@ -1,4 +1,5 @@
1
1
  export enum MdmProviderEnum {
2
2
  TRUSTONIC = "TRUSTONIC",
3
- DATACULTR = "DATACULTR"
3
+ DATACULTR = "DATACULTR",
4
+ MOTOSAFE = "MOTOSAFE"
4
5
  }
@@ -4,8 +4,10 @@
4
4
  *
5
5
  * @property {string} TRUSTONIC - Proveedor Trustonic.
6
6
  * @property {string} DATACULTR - Proveedor Datacultr.
7
+ * @property {string} MOTOSAFE - Proveedor Motosafe (MDM embebido de Motorola); solo opera en ONDEMAND.
7
8
  */
8
9
  export enum MdmProviderEnum {
9
10
  TRUSTONIC = 'TRUSTONIC',
10
11
  DATACULTR = 'DATACULTR',
12
+ MOTOSAFE = 'MOTOSAFE',
11
13
  }
@@ -2,4 +2,5 @@
2
2
  export enum RetailMdmProviderEnum {
3
3
  TRUSTONIC = 'TRUSTONIC',
4
4
  DATACULTR = 'DATACULTR',
5
+ MOTOSAFE = 'MOTOSAFE',
5
6
  }
@@ -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';