@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.
- package/_test_/unit/retailOrg/dtos/validation/validationDtos.test.ts +27 -0
- package/bin/retailOrg/dtos/RetailUser.d.ts +7 -0
- package/bin/retailOrg/dtos/RetailUser.js +6 -0
- package/bin/retailOrg/dtos/requests/CreateRetailUserRequest.d.ts +5 -0
- package/bin/retailOrg/dtos/requests/CreateRetailUserRequest.js +6 -0
- package/bin/retailOrg/dtos/requests/UpdateRetailUserRequest.d.ts +2 -0
- package/bin/retailOrg/dtos/requests/UpdateRetailUserRequest.js +6 -0
- package/bin/retailOrg/dtos/validation/CollectorValidationDto.d.ts +21 -0
- package/bin/retailOrg/dtos/validation/CollectorValidationDto.js +2 -0
- package/bin/retailOrg/index.d.ts +1 -0
- package/bin/retailOrg/index.js +1 -0
- package/package.json +1 -1
- package/src/retailOrg/dtos/RetailUser.ts +11 -0
- package/src/retailOrg/dtos/requests/CreateRetailUserRequest.ts +9 -0
- package/src/retailOrg/dtos/requests/UpdateRetailUserRequest.ts +6 -0
- package/src/retailOrg/dtos/validation/CollectorValidationDto.ts +22 -0
- package/src/retailOrg/index.ts +1 -0
|
@@ -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
|
+
}
|
package/bin/retailOrg/index.d.ts
CHANGED
|
@@ -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';
|
package/bin/retailOrg/index.js
CHANGED
|
@@ -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
|
@@ -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
|
+
}
|
package/src/retailOrg/index.ts
CHANGED
|
@@ -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';
|