@fiado/type-kit 3.190.0 → 3.192.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
  });
@@ -9,6 +9,13 @@ export declare class RetailUser {
9
9
  retailUserId: string;
10
10
  cognitoSub: string;
11
11
  retailerId: string;
12
+ /**
13
+ * Nombre de display del usuario — ETIQUETA DE CONVENIENCIA (DEC-SKF1-021). NO es la fuente de
14
+ * verdad de la identidad: la identidad real (nombre/email) vive en platform-rbac (DEC-SKF1-005 /
15
+ * DEC-011). Es solo un rótulo que el admin teclea para reconocer al usuario en la lista; puede
16
+ * quedar desincronizado si el nombre cambia en RBAC. Opcional (usuarios previos no lo tienen).
17
+ */
18
+ displayName?: string;
12
19
  homeStoreId: string;
13
20
  /** Zona de operación del usuario; `null` si no está acotado a una zona. */
14
21
  zoneId: string | null;
@@ -38,6 +38,12 @@ __decorate([
38
38
  (0, class_validator_1.IsString)(),
39
39
  __metadata("design:type", String)
40
40
  ], RetailUser.prototype, "retailerId", void 0);
41
+ __decorate([
42
+ (0, class_transformer_1.Expose)(),
43
+ (0, class_validator_1.IsOptional)(),
44
+ (0, class_validator_1.IsString)(),
45
+ __metadata("design:type", String)
46
+ ], RetailUser.prototype, "displayName", void 0);
41
47
  __decorate([
42
48
  (0, class_transformer_1.Expose)(),
43
49
  (0, class_validator_1.IsString)(),
@@ -6,6 +6,11 @@ import { EmploymentTypeEnum } from '../../enums/EmploymentTypeEnum';
6
6
  */
7
7
  export declare class CreateRetailUserRequest {
8
8
  cognitoSub: string;
9
+ /**
10
+ * Nombre de display — etiqueta de conveniencia (DEC-SKF1-021). La identidad real vive en RBAC
11
+ * (DEC-SKF1-005); esto es solo un rótulo para reconocer al usuario en el backoffice. Opcional.
12
+ */
13
+ displayName?: string;
9
14
  homeStoreId: string;
10
15
  employmentType: EmploymentTypeEnum;
11
16
  commissionTier: string;
@@ -26,6 +26,12 @@ __decorate([
26
26
  (0, class_validator_1.IsString)(),
27
27
  __metadata("design:type", String)
28
28
  ], CreateRetailUserRequest.prototype, "cognitoSub", void 0);
29
+ __decorate([
30
+ (0, class_transformer_1.Expose)(),
31
+ (0, class_validator_1.IsOptional)(),
32
+ (0, class_validator_1.IsString)(),
33
+ __metadata("design:type", String)
34
+ ], CreateRetailUserRequest.prototype, "displayName", void 0);
29
35
  __decorate([
30
36
  (0, class_transformer_1.Expose)(),
31
37
  (0, class_validator_1.IsString)(),
@@ -6,6 +6,8 @@ import { EmploymentTypeEnum } from '../../enums/EmploymentTypeEnum';
6
6
  * el status se cambia con `ChangeRetailUserStatusRequest`.
7
7
  */
8
8
  export declare class UpdateRetailUserRequest {
9
+ /** Nombre de display — etiqueta de conveniencia editable (DEC-SKF1-021, identidad real en RBAC). */
10
+ displayName?: string;
9
11
  employmentType?: EmploymentTypeEnum;
10
12
  commissionTier?: string;
11
13
  zoneId?: string | null;
@@ -22,6 +22,12 @@ const EmploymentTypeEnum_1 = require("../../enums/EmploymentTypeEnum");
22
22
  class UpdateRetailUserRequest {
23
23
  }
24
24
  exports.UpdateRetailUserRequest = UpdateRetailUserRequest;
25
+ __decorate([
26
+ (0, class_transformer_1.Expose)(),
27
+ (0, class_validator_1.IsOptional)(),
28
+ (0, class_validator_1.IsString)(),
29
+ __metadata("design:type", String)
30
+ ], UpdateRetailUserRequest.prototype, "displayName", void 0);
25
31
  __decorate([
26
32
  (0, class_transformer_1.Expose)(),
27
33
  (0, class_validator_1.IsOptional)(),
@@ -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.192.0",
4
4
  "description": "",
5
5
  "main": "bin/index.js",
6
6
  "types": "bin/index.d.ts",
@@ -22,6 +22,17 @@ export class RetailUser {
22
22
  @IsString()
23
23
  retailerId!: string;
24
24
 
25
+ /**
26
+ * Nombre de display del usuario — ETIQUETA DE CONVENIENCIA (DEC-SKF1-021). NO es la fuente de
27
+ * verdad de la identidad: la identidad real (nombre/email) vive en platform-rbac (DEC-SKF1-005 /
28
+ * DEC-011). Es solo un rótulo que el admin teclea para reconocer al usuario en la lista; puede
29
+ * quedar desincronizado si el nombre cambia en RBAC. Opcional (usuarios previos no lo tienen).
30
+ */
31
+ @Expose()
32
+ @IsOptional()
33
+ @IsString()
34
+ displayName?: string;
35
+
25
36
  @Expose()
26
37
  @IsString()
27
38
  homeStoreId!: string;
@@ -12,6 +12,15 @@ export class CreateRetailUserRequest {
12
12
  @IsString()
13
13
  cognitoSub!: string;
14
14
 
15
+ /**
16
+ * Nombre de display — etiqueta de conveniencia (DEC-SKF1-021). La identidad real vive en RBAC
17
+ * (DEC-SKF1-005); esto es solo un rótulo para reconocer al usuario en el backoffice. Opcional.
18
+ */
19
+ @Expose()
20
+ @IsOptional()
21
+ @IsString()
22
+ displayName?: string;
23
+
15
24
  @Expose()
16
25
  @IsString()
17
26
  homeStoreId!: string;
@@ -9,6 +9,12 @@ import { EmploymentTypeEnum } from '../../enums/EmploymentTypeEnum';
9
9
  * el status se cambia con `ChangeRetailUserStatusRequest`.
10
10
  */
11
11
  export class UpdateRetailUserRequest {
12
+ /** Nombre de display — etiqueta de conveniencia editable (DEC-SKF1-021, identidad real en RBAC). */
13
+ @Expose()
14
+ @IsOptional()
15
+ @IsString()
16
+ displayName?: string;
17
+
12
18
  @Expose()
13
19
  @IsOptional()
14
20
  @IsEnum(EmploymentTypeEnum)
@@ -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';