@fiado/type-kit 3.190.0 → 3.191.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.
@@ -1,11 +1,13 @@
1
1
  import { RetailerValidationDto } from '../../../../../src/retailOrg/dtos/validation/RetailerValidationDto';
2
2
  import { StoreValidationDto } from '../../../../../src/retailOrg/dtos/validation/StoreValidationDto';
3
3
  import { RetailUserValidationDto } from '../../../../../src/retailOrg/dtos/validation/RetailUserValidationDto';
4
+ import { CollectorValidationDto } from '../../../../../src/retailOrg/dtos/validation/CollectorValidationDto';
4
5
  import { RetailerTypeEnum } from '../../../../../src/retailOrg/enums/RetailerTypeEnum';
5
6
  import { RetailerStatusEnum } from '../../../../../src/retailOrg/enums/RetailerStatusEnum';
6
7
  import { StoreStatusEnum } from '../../../../../src/retailOrg/enums/StoreStatusEnum';
7
8
  import { EmploymentTypeEnum } from '../../../../../src/retailOrg/enums/EmploymentTypeEnum';
8
9
  import { RetailUserStatusEnum } from '../../../../../src/retailOrg/enums/RetailUserStatusEnum';
10
+ import { CollectorSeniorityEnum } from '../../../../../src/retailOrg/enums/CollectorSeniorityEnum';
9
11
 
10
12
  describe('ValidationDtos (shapes mínimos de endpoints privados)', () => {
11
13
  it('RetailerValidationDto acepta el shape mínimo', () => {
@@ -46,4 +48,29 @@ describe('ValidationDtos (shapes mínimos de endpoints privados)', () => {
46
48
  expect(dto.employmentType).toBe(EmploymentTypeEnum.EMPLOYEE);
47
49
  expect(dto.commissionTier).toBe('TIER_A');
48
50
  });
51
+
52
+ it('CollectorValidationDto acepta el shape con seniority (coverageStoreIds requerido)', () => {
53
+ const dto: CollectorValidationDto = {
54
+ retailUserId: 'ru_001',
55
+ coverageStoreIds: ['store_001', 'store_002'],
56
+ collectorSeniority: CollectorSeniorityEnum.SENIOR,
57
+ status: RetailUserStatusEnum.ACTIVE,
58
+ commissionTier: 'TIER_A',
59
+ };
60
+ expect(dto.coverageStoreIds).toHaveLength(2);
61
+ expect(dto.collectorSeniority).toBe(CollectorSeniorityEnum.SENIOR);
62
+ expect(dto.status).toBe(RetailUserStatusEnum.ACTIVE);
63
+ });
64
+
65
+ it('CollectorValidationDto acepta un cobrador SIN seniority (collectorSeniority opcional)', () => {
66
+ const dto: CollectorValidationDto = {
67
+ retailUserId: 'ru_002',
68
+ coverageStoreIds: [],
69
+ status: RetailUserStatusEnum.ACTIVE,
70
+ commissionTier: 'collector',
71
+ };
72
+ expect(dto.collectorSeniority).toBeUndefined();
73
+ expect(dto.coverageStoreIds).toHaveLength(0);
74
+ expect(dto.commissionTier).toBe('collector');
75
+ });
49
76
  });
@@ -0,0 +1,21 @@
1
+ import type { CollectorSeniorityEnum } from '../../enums/CollectorSeniorityEnum';
2
+ import type { RetailUserStatusEnum } from '../../enums/RetailUserStatusEnum';
3
+ /**
4
+ * Shape mínimo de un cobrador retail que devuelve el endpoint privado de validación de cobradores
5
+ * (consumido por loan-collector-assignment-business vía @fiado/api-invoker) para alimentar el
6
+ * algoritmo de asignación de cartera.
7
+ *
8
+ * `coverageStoreIds` va requerido (siempre presente; si el cobrador aún no cubre tiendas, `[]`).
9
+ *
10
+ * `collectorSeniority` es OPCIONAL: el modelo de datos no obliga a que un usuario con
11
+ * `commissionTier === 'collector'` tenga seniority poblado, así que un cobrador sin seniority es
12
+ * válido. Las estrategias de asignación BY_STORE / BY_LOAD / ROUND_ROBIN no lo necesitan; solo
13
+ * BY_SENIORITY lo usa para rankear (y ahí un cobrador sin seniority simplemente no rankea).
14
+ */
15
+ export interface CollectorValidationDto {
16
+ retailUserId: string;
17
+ coverageStoreIds: string[];
18
+ collectorSeniority?: CollectorSeniorityEnum;
19
+ status: RetailUserStatusEnum;
20
+ commissionTier: string;
21
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -13,6 +13,7 @@ export * from './dtos/RetailUser';
13
13
  export * from './dtos/validation/RetailerValidationDto';
14
14
  export * from './dtos/validation/StoreValidationDto';
15
15
  export * from './dtos/validation/RetailUserValidationDto';
16
+ export * from './dtos/validation/CollectorValidationDto';
16
17
  export * from './dtos/PaginatedResult';
17
18
  export * from './dtos/requests/RetailAddressInput';
18
19
  export * from './dtos/requests/CreateRetailerRequest';
@@ -31,6 +31,7 @@ __exportStar(require("./dtos/RetailUser"), exports);
31
31
  __exportStar(require("./dtos/validation/RetailerValidationDto"), exports);
32
32
  __exportStar(require("./dtos/validation/StoreValidationDto"), exports);
33
33
  __exportStar(require("./dtos/validation/RetailUserValidationDto"), exports);
34
+ __exportStar(require("./dtos/validation/CollectorValidationDto"), exports);
34
35
  // Paginación genérica
35
36
  __exportStar(require("./dtos/PaginatedResult"), exports);
36
37
  // Request DTOs (input validado por endpoint)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fiado/type-kit",
3
- "version": "3.190.0",
3
+ "version": "3.191.0",
4
4
  "description": "",
5
5
  "main": "bin/index.js",
6
6
  "types": "bin/index.d.ts",
@@ -0,0 +1,22 @@
1
+ import type { CollectorSeniorityEnum } from '../../enums/CollectorSeniorityEnum';
2
+ import type { RetailUserStatusEnum } from '../../enums/RetailUserStatusEnum';
3
+
4
+ /**
5
+ * Shape mínimo de un cobrador retail que devuelve el endpoint privado de validación de cobradores
6
+ * (consumido por loan-collector-assignment-business vía @fiado/api-invoker) para alimentar el
7
+ * algoritmo de asignación de cartera.
8
+ *
9
+ * `coverageStoreIds` va requerido (siempre presente; si el cobrador aún no cubre tiendas, `[]`).
10
+ *
11
+ * `collectorSeniority` es OPCIONAL: el modelo de datos no obliga a que un usuario con
12
+ * `commissionTier === 'collector'` tenga seniority poblado, así que un cobrador sin seniority es
13
+ * válido. Las estrategias de asignación BY_STORE / BY_LOAD / ROUND_ROBIN no lo necesitan; solo
14
+ * BY_SENIORITY lo usa para rankear (y ahí un cobrador sin seniority simplemente no rankea).
15
+ */
16
+ export interface CollectorValidationDto {
17
+ retailUserId: string;
18
+ coverageStoreIds: string[];
19
+ collectorSeniority?: CollectorSeniorityEnum;
20
+ status: RetailUserStatusEnum;
21
+ commissionTier: string;
22
+ }
@@ -17,6 +17,7 @@ export * from './dtos/RetailUser';
17
17
  export * from './dtos/validation/RetailerValidationDto';
18
18
  export * from './dtos/validation/StoreValidationDto';
19
19
  export * from './dtos/validation/RetailUserValidationDto';
20
+ export * from './dtos/validation/CollectorValidationDto';
20
21
 
21
22
  // Paginación genérica
22
23
  export * from './dtos/PaginatedResult';