@fiado/type-kit 3.581.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.
@@ -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,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.582.0",
4
4
  "description": "",
5
5
  "main": "bin/index.js",
6
6
  "types": "bin/index.d.ts",
@@ -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';