@fiado/type-kit 3.514.0 → 3.516.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/group/groupOwnerFields.test.ts +32 -0
- package/_test_/unit/referral-business/groupOwnersByGroupIdsDtos.test.ts +46 -0
- package/_test_/unit/rewardsEligibility/domainDtos.test.ts +40 -0
- package/_test_/unit/rewardsEligibility/domainEnums.test.ts +35 -0
- package/bin/group/dtos/GroupCreateRequest.d.ts +1 -0
- package/bin/group/dtos/GroupCreateRequest.js +5 -0
- package/bin/group/dtos/GroupResponse.d.ts +2 -0
- package/bin/referral-business/dtos/GroupOwnersByGroupIdsRequest.d.ts +4 -0
- package/bin/referral-business/dtos/GroupOwnersByGroupIdsRequest.js +25 -0
- package/bin/referral-business/dtos/GroupOwnersByGroupIdsResponse.d.ts +8 -0
- package/bin/referral-business/dtos/GroupOwnersByGroupIdsResponse.js +2 -0
- package/bin/referral-business/index.d.ts +2 -0
- package/bin/referral-business/index.js +2 -0
- package/bin/rewardsEligibility/dtos/CampaignAlerts.d.ts +4 -0
- package/bin/rewardsEligibility/dtos/CampaignAlerts.js +7 -0
- package/bin/rewardsEligibility/dtos/CampaignQuota.d.ts +8 -0
- package/bin/rewardsEligibility/dtos/CampaignQuota.js +7 -0
- package/bin/rewardsEligibility/dtos/EvaluationReward.d.ts +6 -0
- package/bin/rewardsEligibility/dtos/EvaluationReward.js +7 -0
- package/bin/rewardsEligibility/dtos/EvaluationTrigger.d.ts +14 -0
- package/bin/rewardsEligibility/dtos/EvaluationTrigger.js +7 -0
- package/bin/rewardsEligibility/dtos/GrantPolicy.d.ts +12 -0
- package/bin/rewardsEligibility/dtos/GrantPolicy.js +7 -0
- package/bin/rewardsEligibility/dtos/PopulationRef.d.ts +6 -0
- package/bin/rewardsEligibility/dtos/PopulationRef.js +7 -0
- package/bin/rewardsEligibility/enums/ApprovalModeEnum.d.ts +4 -0
- package/bin/rewardsEligibility/enums/ApprovalModeEnum.js +8 -0
- package/bin/rewardsEligibility/enums/BatchPublishStateEnum.d.ts +7 -0
- package/bin/rewardsEligibility/enums/BatchPublishStateEnum.js +11 -0
- package/bin/rewardsEligibility/enums/CampaignPausedReasonEnum.d.ts +7 -0
- package/bin/rewardsEligibility/enums/CampaignPausedReasonEnum.js +11 -0
- package/bin/rewardsEligibility/enums/CampaignStatusEnum.d.ts +8 -0
- package/bin/rewardsEligibility/enums/CampaignStatusEnum.js +12 -0
- package/bin/rewardsEligibility/enums/EvaluationStatusEnum.d.ts +6 -0
- package/bin/rewardsEligibility/enums/EvaluationStatusEnum.js +10 -0
- package/bin/rewardsEligibility/enums/GrantPeriodEnum.d.ts +5 -0
- package/bin/rewardsEligibility/enums/GrantPeriodEnum.js +9 -0
- package/bin/rewardsEligibility/enums/GrantPolicyModeEnum.d.ts +11 -0
- package/bin/rewardsEligibility/enums/GrantPolicyModeEnum.js +15 -0
- package/bin/rewardsEligibility/enums/LedgerStatusEnum.d.ts +5 -0
- package/bin/rewardsEligibility/enums/LedgerStatusEnum.js +9 -0
- package/bin/rewardsEligibility/enums/QuotaExhaustedActionEnum.d.ts +7 -0
- package/bin/rewardsEligibility/enums/QuotaExhaustedActionEnum.js +11 -0
- package/bin/rewardsEligibility/enums/QuotaPeriodEnum.d.ts +7 -0
- package/bin/rewardsEligibility/enums/QuotaPeriodEnum.js +11 -0
- package/bin/rewardsEligibility/enums/TraceOriginEnum.d.ts +5 -0
- package/bin/rewardsEligibility/enums/TraceOriginEnum.js +9 -0
- package/bin/rewardsEligibility/index.d.ts +18 -0
- package/bin/rewardsEligibility/index.js +21 -0
- package/bin/rewardsEligibility/types/RewardInputRef.d.ts +7 -0
- package/bin/rewardsEligibility/types/RewardInputRef.js +2 -0
- package/package.json +1 -1
- package/src/group/dtos/GroupCreateRequest.ts +7 -1
- package/src/group/dtos/GroupResponse.ts +4 -0
- package/src/referral-business/dtos/GroupOwnersByGroupIdsRequest.ts +12 -0
- package/src/referral-business/dtos/GroupOwnersByGroupIdsResponse.ts +11 -0
- package/src/referral-business/index.ts +2 -0
- package/src/rewardsEligibility/dtos/CampaignAlerts.ts +4 -0
- package/src/rewardsEligibility/dtos/CampaignQuota.ts +9 -0
- package/src/rewardsEligibility/dtos/EvaluationReward.ts +7 -0
- package/src/rewardsEligibility/dtos/EvaluationTrigger.ts +15 -0
- package/src/rewardsEligibility/dtos/GrantPolicy.ts +13 -0
- package/src/rewardsEligibility/dtos/PopulationRef.ts +7 -0
- package/src/rewardsEligibility/enums/ApprovalModeEnum.ts +4 -0
- package/src/rewardsEligibility/enums/BatchPublishStateEnum.ts +7 -0
- package/src/rewardsEligibility/enums/CampaignPausedReasonEnum.ts +7 -0
- package/src/rewardsEligibility/enums/CampaignStatusEnum.ts +8 -0
- package/src/rewardsEligibility/enums/EvaluationStatusEnum.ts +6 -0
- package/src/rewardsEligibility/enums/GrantPeriodEnum.ts +5 -0
- package/src/rewardsEligibility/enums/GrantPolicyModeEnum.ts +11 -0
- package/src/rewardsEligibility/enums/LedgerStatusEnum.ts +5 -0
- package/src/rewardsEligibility/enums/QuotaExhaustedActionEnum.ts +7 -0
- package/src/rewardsEligibility/enums/QuotaPeriodEnum.ts +7 -0
- package/src/rewardsEligibility/enums/TraceOriginEnum.ts +5 -0
- package/src/rewardsEligibility/index.ts +24 -0
- package/src/rewardsEligibility/types/RewardInputRef.ts +4 -0
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import 'reflect-metadata';
|
|
2
|
+
import { plainToInstance } from 'class-transformer';
|
|
3
|
+
import { validate } from 'class-validator';
|
|
4
|
+
import { GroupCreateRequest, GroupResponse, GroupStatus } from '../../../src/group';
|
|
5
|
+
|
|
6
|
+
const base = { id: 'TAXMA', name: 'Taxma', status: GroupStatus.ACTIVE };
|
|
7
|
+
|
|
8
|
+
describe('GroupCreateRequest.ownerDirectoryId', () => {
|
|
9
|
+
it('es opcional (la carga masiva por CSV no lo manda)', async () => {
|
|
10
|
+
expect(await validate(plainToInstance(GroupCreateRequest, base))).toEqual([]);
|
|
11
|
+
});
|
|
12
|
+
it('acepta un uuid v4', async () => {
|
|
13
|
+
const dto = plainToInstance(GroupCreateRequest, { ...base, ownerDirectoryId: 'b298ec6b-00b6-487b-b096-f4ac6ac8c91d' });
|
|
14
|
+
expect(await validate(dto)).toEqual([]);
|
|
15
|
+
});
|
|
16
|
+
it('rechaza lo que no es uuid v4', async () => {
|
|
17
|
+
const errors = await validate(plainToInstance(GroupCreateRequest, { ...base, ownerDirectoryId: 'no-es-uuid' }));
|
|
18
|
+
expect(errors[0].property).toBe('ownerDirectoryId');
|
|
19
|
+
expect(errors[0].constraints?.isUuid).toBeDefined();
|
|
20
|
+
});
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
describe('GroupResponse.owner', () => {
|
|
24
|
+
it('admite owner o null', () => {
|
|
25
|
+
const withOwner: Partial<GroupResponse> = {
|
|
26
|
+
owner: { agentId: 'AG-1', directoryId: 'DIR-1', name: null, email: null, status: 'ACTIVE' },
|
|
27
|
+
};
|
|
28
|
+
const withoutOwner: Partial<GroupResponse> = { owner: null };
|
|
29
|
+
expect(withOwner.owner?.agentId).toBe('AG-1');
|
|
30
|
+
expect(withoutOwner.owner).toBeNull();
|
|
31
|
+
});
|
|
32
|
+
});
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import 'reflect-metadata';
|
|
2
|
+
import { plainToInstance } from 'class-transformer';
|
|
3
|
+
import { validate } from 'class-validator';
|
|
4
|
+
import {
|
|
5
|
+
GroupOwnersByGroupIdsRequest,
|
|
6
|
+
GROUP_OWNERS_BY_GROUP_IDS_MAX_BATCH,
|
|
7
|
+
} from '../../../src/referral-business';
|
|
8
|
+
import type { GroupOwnerItem, GroupOwnersByGroupIdsResponse } from '../../../src/referral-business';
|
|
9
|
+
|
|
10
|
+
describe('GroupOwnersByGroupIdsRequest', () => {
|
|
11
|
+
it('el tope del lote es 100', () => {
|
|
12
|
+
expect(GROUP_OWNERS_BY_GROUP_IDS_MAX_BATCH).toBe(100);
|
|
13
|
+
});
|
|
14
|
+
it('acepta una lista de groupIds', async () => {
|
|
15
|
+
const dto = plainToInstance(GroupOwnersByGroupIdsRequest, { groupIds: ['FIADO', 'TAXMA'] });
|
|
16
|
+
expect(await validate(dto)).toEqual([]);
|
|
17
|
+
});
|
|
18
|
+
it('acepta la lista vacía', async () => {
|
|
19
|
+
const dto = plainToInstance(GroupOwnersByGroupIdsRequest, { groupIds: [] });
|
|
20
|
+
expect(await validate(dto)).toEqual([]);
|
|
21
|
+
});
|
|
22
|
+
it('rechaza 101 ids con arrayMaxSize', async () => {
|
|
23
|
+
const ids = Array.from({ length: 101 }, (_, i) => `G${i}`);
|
|
24
|
+
const errors = await validate(plainToInstance(GroupOwnersByGroupIdsRequest, { groupIds: ids }));
|
|
25
|
+
expect(errors[0].property).toBe('groupIds');
|
|
26
|
+
expect(errors[0].constraints?.arrayMaxSize).toBeDefined();
|
|
27
|
+
});
|
|
28
|
+
it('rechaza si groupIds no es arreglo', async () => {
|
|
29
|
+
const errors = await validate(plainToInstance(GroupOwnersByGroupIdsRequest, { groupIds: 'FIADO' }));
|
|
30
|
+
expect(errors[0].constraints?.isArray).toBeDefined();
|
|
31
|
+
});
|
|
32
|
+
it('rechaza elementos que no son string', async () => {
|
|
33
|
+
const errors = await validate(plainToInstance(GroupOwnersByGroupIdsRequest, { groupIds: [1] }));
|
|
34
|
+
expect(errors[0].constraints?.isString).toBeDefined();
|
|
35
|
+
});
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
describe('GroupOwnersByGroupIdsResponse', () => {
|
|
39
|
+
it('es un mapa groupId → GroupOwnerItem', () => {
|
|
40
|
+
const owner: GroupOwnerItem = {
|
|
41
|
+
agentId: 'AG-1', directoryId: 'DIR-1', name: 'MARIA DAVALOS', email: 'm@taxma.com', status: 'ACTIVE',
|
|
42
|
+
};
|
|
43
|
+
const res: GroupOwnersByGroupIdsResponse = { TAXMA: owner };
|
|
44
|
+
expect(res.TAXMA.directoryId).toBe('DIR-1');
|
|
45
|
+
});
|
|
46
|
+
});
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import 'reflect-metadata';
|
|
2
|
+
import {
|
|
3
|
+
ApprovalModeEnum,
|
|
4
|
+
CampaignAlerts,
|
|
5
|
+
CampaignQuota,
|
|
6
|
+
EvaluationReward,
|
|
7
|
+
EvaluationTrigger,
|
|
8
|
+
GrantPeriodEnum,
|
|
9
|
+
GrantPolicy,
|
|
10
|
+
GrantPolicyModeEnum,
|
|
11
|
+
QuotaPeriodEnum,
|
|
12
|
+
RewardInputRef,
|
|
13
|
+
TriggerTypeEnum,
|
|
14
|
+
} from '../../../src/rewardsEligibility';
|
|
15
|
+
|
|
16
|
+
// Son formas de lo que se guarda como JSON en las tablas: el compilador es el test principal (ts-jest falla si cambian).
|
|
17
|
+
describe('DTOs de configuracion de rewardsEligibility', () => {
|
|
18
|
+
it('modelan el caso phone-sales del spec B 5.1 (PER_REFERENCE + disparador EVENT + inputs const/input)', () => {
|
|
19
|
+
const policy: GrantPolicy = { mode: GrantPolicyModeEnum.PER_REFERENCE, referenceInput: 'saleId' };
|
|
20
|
+
const trigger: EvaluationTrigger = { type: TriggerTypeEnum.EVENT, eventKey: 'PHONE_SALES_CODE_REDEEMED', approval: ApprovalModeEnum.AUTO };
|
|
21
|
+
const fromConst: RewardInputRef = { const: true };
|
|
22
|
+
const fromInput: RewardInputRef = { input: 'saleId' };
|
|
23
|
+
const reward: EvaluationReward = { packageId: 'paquete-referido', inputs: { topup: { accountNumberMatchesOperator: fromConst, ref: fromInput } } };
|
|
24
|
+
expect(policy.referenceInput).toBe('saleId');
|
|
25
|
+
expect(trigger.eventKey).toBe('PHONE_SALES_CODE_REDEEMED');
|
|
26
|
+
expect(reward.inputs.topup?.ref).toEqual({ input: 'saleId' });
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
it('modelan el caso de los lunes (PER_PERIOD WEEK) y los cupos de campania', () => {
|
|
30
|
+
const policy: GrantPolicy = { mode: GrantPolicyModeEnum.PER_PERIOD, period: GrantPeriodEnum.WEEK };
|
|
31
|
+
const quotas: CampaignQuota[] = [
|
|
32
|
+
{ id: 'primeros-500', limit: 500, period: QuotaPeriodEnum.TOTAL },
|
|
33
|
+
{ id: 'semanal', limit: 100, period: QuotaPeriodEnum.WEEK },
|
|
34
|
+
];
|
|
35
|
+
const alerts: CampaignAlerts = { thresholds: [0.8, 1] };
|
|
36
|
+
expect(policy.period).toBe('WEEK');
|
|
37
|
+
expect(quotas.map((q) => q.id)).toEqual(['primeros-500', 'semanal']);
|
|
38
|
+
expect(alerts.thresholds).toHaveLength(2);
|
|
39
|
+
});
|
|
40
|
+
});
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import 'reflect-metadata';
|
|
2
|
+
import {
|
|
3
|
+
ApprovalModeEnum,
|
|
4
|
+
BatchPublishStateEnum,
|
|
5
|
+
CampaignPausedReasonEnum,
|
|
6
|
+
CampaignStatusEnum,
|
|
7
|
+
EvaluationStatusEnum,
|
|
8
|
+
GrantPeriodEnum,
|
|
9
|
+
GrantPolicyModeEnum,
|
|
10
|
+
LedgerStatusEnum,
|
|
11
|
+
QuotaExhaustedActionEnum,
|
|
12
|
+
QuotaPeriodEnum,
|
|
13
|
+
TraceOriginEnum,
|
|
14
|
+
} from '../../../src/rewardsEligibility';
|
|
15
|
+
|
|
16
|
+
// Los valores se guardan en DynamoDB y viajan por colas: cambiarlos rompe datos. Este test los fija.
|
|
17
|
+
describe('enums del dominio de rewardsEligibility (spec B 5.1, 5.5, 5.6, 5.8)', () => {
|
|
18
|
+
it.each<[string, Record<string, string>, string[]]>([
|
|
19
|
+
['CampaignStatusEnum', CampaignStatusEnum, ['DRAFT', 'ACTIVE', 'PAUSED', 'ENDED', 'ARCHIVED']],
|
|
20
|
+
['CampaignPausedReasonEnum', CampaignPausedReasonEnum, ['MANUAL', 'QUOTA_EXHAUSTED']],
|
|
21
|
+
['EvaluationStatusEnum', EvaluationStatusEnum, ['DRAFT', 'ACTIVE', 'PAUSED', 'ARCHIVED']],
|
|
22
|
+
['GrantPolicyModeEnum', GrantPolicyModeEnum, ['ONCE', 'PER_PERIOD', 'PER_REFERENCE', 'MAX_N']],
|
|
23
|
+
['GrantPeriodEnum', GrantPeriodEnum, ['WEEK', 'MONTH']],
|
|
24
|
+
['QuotaPeriodEnum', QuotaPeriodEnum, ['TOTAL', 'DAY', 'WEEK', 'MONTH']],
|
|
25
|
+
['QuotaExhaustedActionEnum', QuotaExhaustedActionEnum, ['PAUSE_CAMPAIGN', 'RECORD_ONLY']],
|
|
26
|
+
['ApprovalModeEnum', ApprovalModeEnum, ['AUTO', 'REQUIRED']],
|
|
27
|
+
['LedgerStatusEnum', LedgerStatusEnum, ['RESERVED', 'RELEASED']],
|
|
28
|
+
['BatchPublishStateEnum', BatchPublishStateEnum, ['PENDING_APPROVAL', 'PENDING', 'PUBLISHED', 'CANCELLED']],
|
|
29
|
+
['TraceOriginEnum', TraceOriginEnum, ['PREFETCHED', 'RESOLVED']],
|
|
30
|
+
])('%s tiene exactamente los valores del spec', (_name, enumObject, values) => {
|
|
31
|
+
expect(Object.values(enumObject).sort()).toEqual([...values].sort());
|
|
32
|
+
// cada miembro vale su propio nombre (el valor viaja como string)
|
|
33
|
+
for (const [key, value] of Object.entries(enumObject)) expect(value).toBe(key);
|
|
34
|
+
});
|
|
35
|
+
});
|
|
@@ -44,6 +44,11 @@ __decorate([
|
|
|
44
44
|
(0, class_transformer_1.Transform)(({ value }) => value ?? null),
|
|
45
45
|
__metadata("design:type", String)
|
|
46
46
|
], GroupCreateRequest.prototype, "leaderDirectoryId", void 0);
|
|
47
|
+
__decorate([
|
|
48
|
+
(0, class_validator_1.IsOptional)(),
|
|
49
|
+
(0, class_validator_1.IsUUID)('4'),
|
|
50
|
+
__metadata("design:type", String)
|
|
51
|
+
], GroupCreateRequest.prototype, "ownerDirectoryId", void 0);
|
|
47
52
|
__decorate([
|
|
48
53
|
(0, class_validator_1.IsEnum)(GroupStatus_1.GroupStatus),
|
|
49
54
|
__metadata("design:type", String)
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { GroupStatus } from "../enums/GroupStatus";
|
|
2
|
+
import type { GroupOwnerItem } from "../../referral-business/dtos/GroupOwnersByGroupIdsResponse";
|
|
2
3
|
export declare class GroupResponse {
|
|
3
4
|
id: string;
|
|
4
5
|
name: string;
|
|
@@ -15,4 +16,5 @@ export declare class GroupResponse {
|
|
|
15
16
|
imageUrl?: string | null;
|
|
16
17
|
imageUrlSigned?: string | null;
|
|
17
18
|
parentGroupId: string;
|
|
19
|
+
owner?: GroupOwnerItem | null;
|
|
18
20
|
}
|
|
@@ -0,0 +1,25 @@
|
|
|
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.GroupOwnersByGroupIdsRequest = exports.GROUP_OWNERS_BY_GROUP_IDS_MAX_BATCH = void 0;
|
|
13
|
+
const class_validator_1 = require("class-validator");
|
|
14
|
+
// Tope de groupIds por request del endpoint batch de owners de grupo.
|
|
15
|
+
exports.GROUP_OWNERS_BY_GROUP_IDS_MAX_BATCH = 100;
|
|
16
|
+
// Body de POST /private/agents/owners/by-group-ids; la lista vacía es válida y responde {}.
|
|
17
|
+
class GroupOwnersByGroupIdsRequest {
|
|
18
|
+
}
|
|
19
|
+
exports.GroupOwnersByGroupIdsRequest = GroupOwnersByGroupIdsRequest;
|
|
20
|
+
__decorate([
|
|
21
|
+
(0, class_validator_1.IsArray)(),
|
|
22
|
+
(0, class_validator_1.ArrayMaxSize)(exports.GROUP_OWNERS_BY_GROUP_IDS_MAX_BATCH),
|
|
23
|
+
(0, class_validator_1.IsString)({ each: true }),
|
|
24
|
+
__metadata("design:type", Array)
|
|
25
|
+
], GroupOwnersByGroupIdsRequest.prototype, "groupIds", void 0);
|
|
@@ -19,3 +19,5 @@ __exportStar(require("./enums/AgentRoleEnum"), exports);
|
|
|
19
19
|
//dtos
|
|
20
20
|
__exportStar(require("./dtos/AgentsByDirectoryIdsRequest"), exports);
|
|
21
21
|
__exportStar(require("./dtos/AgentsByDirectoryIdsResponse"), exports);
|
|
22
|
+
__exportStar(require("./dtos/GroupOwnersByGroupIdsRequest"), exports);
|
|
23
|
+
__exportStar(require("./dtos/GroupOwnersByGroupIdsResponse"), exports);
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { QuotaPeriodEnum } from '../enums/QuotaPeriodEnum';
|
|
2
|
+
/** Un cupo de campania: cantidad maxima de premios (no dinero) en un periodo (spec B 5.6). */
|
|
3
|
+
export declare class CampaignQuota {
|
|
4
|
+
/** Unico dentro de la campania (ej. `primeros-500`). Entra en la llave del consumo (`{id}#{periodo}`). */
|
|
5
|
+
id: string;
|
|
6
|
+
limit: number;
|
|
7
|
+
period: QuotaPeriodEnum;
|
|
8
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CampaignQuota = void 0;
|
|
4
|
+
/** Un cupo de campania: cantidad maxima de premios (no dinero) en un periodo (spec B 5.6). */
|
|
5
|
+
class CampaignQuota {
|
|
6
|
+
}
|
|
7
|
+
exports.CampaignQuota = CampaignQuota;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { RewardInputRef } from '../types/RewardInputRef';
|
|
2
|
+
/** Que se pide a rewards-business al calificar: el paquete y sus inputs `itemKey -> inputKey -> valor`. */
|
|
3
|
+
export declare class EvaluationReward {
|
|
4
|
+
packageId: string;
|
|
5
|
+
inputs: Record<string, Record<string, RewardInputRef>>;
|
|
6
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.EvaluationReward = void 0;
|
|
4
|
+
/** Que se pide a rewards-business al calificar: el paquete y sus inputs `itemKey -> inputKey -> valor`. */
|
|
5
|
+
class EvaluationReward {
|
|
6
|
+
}
|
|
7
|
+
exports.EvaluationReward = EvaluationReward;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { ApprovalModeEnum } from '../enums/ApprovalModeEnum';
|
|
2
|
+
import { TriggerTypeEnum } from '../enums/TriggerTypeEnum';
|
|
3
|
+
import { PopulationRef } from './PopulationRef';
|
|
4
|
+
/** Disparador de una evaluacion (spec B 5.1). Una evaluacion tiene a lo sumo UN disparador `EVENT`. */
|
|
5
|
+
export declare class EvaluationTrigger {
|
|
6
|
+
type: TriggerTypeEnum;
|
|
7
|
+
approval: ApprovalModeEnum;
|
|
8
|
+
/** Solo `EVENT`. */
|
|
9
|
+
eventKey?: string;
|
|
10
|
+
/** Solo `CRON`: cron de 5 campos, granularidad de 15 minutos (fase 4). */
|
|
11
|
+
schedule?: string;
|
|
12
|
+
/** Solo `CRON` (fase 4). */
|
|
13
|
+
population?: PopulationRef;
|
|
14
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.EvaluationTrigger = void 0;
|
|
4
|
+
/** Disparador de una evaluacion (spec B 5.1). Una evaluacion tiene a lo sumo UN disparador `EVENT`. */
|
|
5
|
+
class EvaluationTrigger {
|
|
6
|
+
}
|
|
7
|
+
exports.EvaluationTrigger = EvaluationTrigger;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { GrantPeriodEnum } from '../enums/GrantPeriodEnum';
|
|
2
|
+
import { GrantPolicyModeEnum } from '../enums/GrantPolicyModeEnum';
|
|
3
|
+
/** Politica de frecuencia de una evaluacion (spec B 5.1). Cada modo exige su campo (lo valida el backoffice). */
|
|
4
|
+
export declare class GrantPolicy {
|
|
5
|
+
mode: GrantPolicyModeEnum;
|
|
6
|
+
/** Solo `PER_PERIOD`. */
|
|
7
|
+
period?: GrantPeriodEnum;
|
|
8
|
+
/** Solo `PER_REFERENCE`: la `key` de un input del contrato (ej. `saleId`). */
|
|
9
|
+
referenceInput?: string;
|
|
10
|
+
/** Solo `MAX_N`: tope de premios en total (>= 1). */
|
|
11
|
+
max?: number;
|
|
12
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GrantPolicy = void 0;
|
|
4
|
+
/** Politica de frecuencia de una evaluacion (spec B 5.1). Cada modo exige su campo (lo valida el backoffice). */
|
|
5
|
+
class GrantPolicy {
|
|
6
|
+
}
|
|
7
|
+
exports.GrantPolicy = GrantPolicy;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ApprovalModeEnum = void 0;
|
|
4
|
+
var ApprovalModeEnum;
|
|
5
|
+
(function (ApprovalModeEnum) {
|
|
6
|
+
ApprovalModeEnum["AUTO"] = "AUTO";
|
|
7
|
+
ApprovalModeEnum["REQUIRED"] = "REQUIRED";
|
|
8
|
+
})(ApprovalModeEnum || (exports.ApprovalModeEnum = ApprovalModeEnum = {}));
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BatchPublishStateEnum = void 0;
|
|
4
|
+
/** Estado de publicacion del registro de reserva de un lote (spec B 5.8). */
|
|
5
|
+
var BatchPublishStateEnum;
|
|
6
|
+
(function (BatchPublishStateEnum) {
|
|
7
|
+
BatchPublishStateEnum["PENDING_APPROVAL"] = "PENDING_APPROVAL";
|
|
8
|
+
BatchPublishStateEnum["PENDING"] = "PENDING";
|
|
9
|
+
BatchPublishStateEnum["PUBLISHED"] = "PUBLISHED";
|
|
10
|
+
BatchPublishStateEnum["CANCELLED"] = "CANCELLED";
|
|
11
|
+
})(BatchPublishStateEnum || (exports.BatchPublishStateEnum = BatchPublishStateEnum = {}));
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/** Por que esta pausada una campania: decide si se siguen soltando sus lotes reservados (spec B 7.6). */
|
|
2
|
+
export declare enum CampaignPausedReasonEnum {
|
|
3
|
+
/** Lo pauso un operador: no se sueltan lotes. */
|
|
4
|
+
MANUAL = "MANUAL",
|
|
5
|
+
/** Se agoto un cupo con `PAUSE_CAMPAIGN`: lo reservado igual se suelta. */
|
|
6
|
+
QUOTA_EXHAUSTED = "QUOTA_EXHAUSTED"
|
|
7
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CampaignPausedReasonEnum = void 0;
|
|
4
|
+
/** Por que esta pausada una campania: decide si se siguen soltando sus lotes reservados (spec B 7.6). */
|
|
5
|
+
var CampaignPausedReasonEnum;
|
|
6
|
+
(function (CampaignPausedReasonEnum) {
|
|
7
|
+
/** Lo pauso un operador: no se sueltan lotes. */
|
|
8
|
+
CampaignPausedReasonEnum["MANUAL"] = "MANUAL";
|
|
9
|
+
/** Se agoto un cupo con `PAUSE_CAMPAIGN`: lo reservado igual se suelta. */
|
|
10
|
+
CampaignPausedReasonEnum["QUOTA_EXHAUSTED"] = "QUOTA_EXHAUSTED";
|
|
11
|
+
})(CampaignPausedReasonEnum || (exports.CampaignPausedReasonEnum = CampaignPausedReasonEnum = {}));
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CampaignStatusEnum = void 0;
|
|
4
|
+
var CampaignStatusEnum;
|
|
5
|
+
(function (CampaignStatusEnum) {
|
|
6
|
+
CampaignStatusEnum["DRAFT"] = "DRAFT";
|
|
7
|
+
CampaignStatusEnum["ACTIVE"] = "ACTIVE";
|
|
8
|
+
CampaignStatusEnum["PAUSED"] = "PAUSED";
|
|
9
|
+
/** Llego a `endsAt` (lo marca el tick, spec B 5.6). */
|
|
10
|
+
CampaignStatusEnum["ENDED"] = "ENDED";
|
|
11
|
+
CampaignStatusEnum["ARCHIVED"] = "ARCHIVED";
|
|
12
|
+
})(CampaignStatusEnum || (exports.CampaignStatusEnum = CampaignStatusEnum = {}));
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.EvaluationStatusEnum = void 0;
|
|
4
|
+
var EvaluationStatusEnum;
|
|
5
|
+
(function (EvaluationStatusEnum) {
|
|
6
|
+
EvaluationStatusEnum["DRAFT"] = "DRAFT";
|
|
7
|
+
EvaluationStatusEnum["ACTIVE"] = "ACTIVE";
|
|
8
|
+
EvaluationStatusEnum["PAUSED"] = "PAUSED";
|
|
9
|
+
EvaluationStatusEnum["ARCHIVED"] = "ARCHIVED";
|
|
10
|
+
})(EvaluationStatusEnum || (exports.EvaluationStatusEnum = EvaluationStatusEnum = {}));
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GrantPeriodEnum = void 0;
|
|
4
|
+
/** Periodos validos de `GrantPolicy.period` (modo `PER_PERIOD`). */
|
|
5
|
+
var GrantPeriodEnum;
|
|
6
|
+
(function (GrantPeriodEnum) {
|
|
7
|
+
GrantPeriodEnum["WEEK"] = "WEEK";
|
|
8
|
+
GrantPeriodEnum["MONTH"] = "MONTH";
|
|
9
|
+
})(GrantPeriodEnum || (exports.GrantPeriodEnum = GrantPeriodEnum = {}));
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/** Politica de frecuencia de una evaluacion (spec B E5 y 5.5). */
|
|
2
|
+
export declare enum GrantPolicyModeEnum {
|
|
3
|
+
/** Una vez en la vida por evaluacion. */
|
|
4
|
+
ONCE = "ONCE",
|
|
5
|
+
/** Una por periodo (`GrantPeriodEnum`). */
|
|
6
|
+
PER_PERIOD = "PER_PERIOD",
|
|
7
|
+
/** Una por valor del `referenceInput` (ej. `saleId`). */
|
|
8
|
+
PER_REFERENCE = "PER_REFERENCE",
|
|
9
|
+
/** Hasta N en total (`max`), con un contador. */
|
|
10
|
+
MAX_N = "MAX_N"
|
|
11
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GrantPolicyModeEnum = void 0;
|
|
4
|
+
/** Politica de frecuencia de una evaluacion (spec B E5 y 5.5). */
|
|
5
|
+
var GrantPolicyModeEnum;
|
|
6
|
+
(function (GrantPolicyModeEnum) {
|
|
7
|
+
/** Una vez en la vida por evaluacion. */
|
|
8
|
+
GrantPolicyModeEnum["ONCE"] = "ONCE";
|
|
9
|
+
/** Una por periodo (`GrantPeriodEnum`). */
|
|
10
|
+
GrantPolicyModeEnum["PER_PERIOD"] = "PER_PERIOD";
|
|
11
|
+
/** Una por valor del `referenceInput` (ej. `saleId`). */
|
|
12
|
+
GrantPolicyModeEnum["PER_REFERENCE"] = "PER_REFERENCE";
|
|
13
|
+
/** Hasta N en total (`max`), con un contador. */
|
|
14
|
+
GrantPolicyModeEnum["MAX_N"] = "MAX_N";
|
|
15
|
+
})(GrantPolicyModeEnum || (exports.GrantPolicyModeEnum = GrantPolicyModeEnum = {}));
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.LedgerStatusEnum = void 0;
|
|
4
|
+
/** Estado de una reserva del ledger de frecuencia (spec B 5.5). */
|
|
5
|
+
var LedgerStatusEnum;
|
|
6
|
+
(function (LedgerStatusEnum) {
|
|
7
|
+
LedgerStatusEnum["RESERVED"] = "RESERVED";
|
|
8
|
+
LedgerStatusEnum["RELEASED"] = "RELEASED";
|
|
9
|
+
})(LedgerStatusEnum || (exports.LedgerStatusEnum = LedgerStatusEnum = {}));
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/** Que pasa al agotarse un cupo (`onExhausted`, spec B 5.6). */
|
|
2
|
+
export declare enum QuotaExhaustedActionEnum {
|
|
3
|
+
/** Pausa la campania; sus evaluaciones dejan de correr. */
|
|
4
|
+
PAUSE_CAMPAIGN = "PAUSE_CAMPAIGN",
|
|
5
|
+
/** Siguen corriendo y registrando, sin entregar (`QUOTA_EXHAUSTED`). */
|
|
6
|
+
RECORD_ONLY = "RECORD_ONLY"
|
|
7
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.QuotaExhaustedActionEnum = void 0;
|
|
4
|
+
/** Que pasa al agotarse un cupo (`onExhausted`, spec B 5.6). */
|
|
5
|
+
var QuotaExhaustedActionEnum;
|
|
6
|
+
(function (QuotaExhaustedActionEnum) {
|
|
7
|
+
/** Pausa la campania; sus evaluaciones dejan de correr. */
|
|
8
|
+
QuotaExhaustedActionEnum["PAUSE_CAMPAIGN"] = "PAUSE_CAMPAIGN";
|
|
9
|
+
/** Siguen corriendo y registrando, sin entregar (`QUOTA_EXHAUSTED`). */
|
|
10
|
+
QuotaExhaustedActionEnum["RECORD_ONLY"] = "RECORD_ONLY";
|
|
11
|
+
})(QuotaExhaustedActionEnum || (exports.QuotaExhaustedActionEnum = QuotaExhaustedActionEnum = {}));
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.QuotaPeriodEnum = void 0;
|
|
4
|
+
/** Periodo de un cupo de campania (spec B 5.6). `TOTAL` no se reinicia nunca. */
|
|
5
|
+
var QuotaPeriodEnum;
|
|
6
|
+
(function (QuotaPeriodEnum) {
|
|
7
|
+
QuotaPeriodEnum["TOTAL"] = "TOTAL";
|
|
8
|
+
QuotaPeriodEnum["DAY"] = "DAY";
|
|
9
|
+
QuotaPeriodEnum["WEEK"] = "WEEK";
|
|
10
|
+
QuotaPeriodEnum["MONTH"] = "MONTH";
|
|
11
|
+
})(QuotaPeriodEnum || (exports.QuotaPeriodEnum = QuotaPeriodEnum = {}));
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TraceOriginEnum = void 0;
|
|
4
|
+
/** De donde salio el dato con el que se decidio una condicion (spec B 7.4.1). */
|
|
5
|
+
var TraceOriginEnum;
|
|
6
|
+
(function (TraceOriginEnum) {
|
|
7
|
+
TraceOriginEnum["PREFETCHED"] = "PREFETCHED";
|
|
8
|
+
TraceOriginEnum["RESOLVED"] = "RESOLVED";
|
|
9
|
+
})(TraceOriginEnum || (exports.TraceOriginEnum = TraceOriginEnum = {}));
|
|
@@ -11,3 +11,21 @@ export * from './dtos/PostEventResponse';
|
|
|
11
11
|
export * from './dtos/RunCounts';
|
|
12
12
|
export * from './dtos/RunResultItem';
|
|
13
13
|
export * from './dtos/GetRunResponse';
|
|
14
|
+
export * from './enums/CampaignStatusEnum';
|
|
15
|
+
export * from './enums/CampaignPausedReasonEnum';
|
|
16
|
+
export * from './enums/EvaluationStatusEnum';
|
|
17
|
+
export * from './enums/GrantPolicyModeEnum';
|
|
18
|
+
export * from './enums/GrantPeriodEnum';
|
|
19
|
+
export * from './enums/QuotaPeriodEnum';
|
|
20
|
+
export * from './enums/QuotaExhaustedActionEnum';
|
|
21
|
+
export * from './enums/ApprovalModeEnum';
|
|
22
|
+
export * from './enums/LedgerStatusEnum';
|
|
23
|
+
export * from './enums/BatchPublishStateEnum';
|
|
24
|
+
export * from './enums/TraceOriginEnum';
|
|
25
|
+
export * from './types/RewardInputRef';
|
|
26
|
+
export * from './dtos/GrantPolicy';
|
|
27
|
+
export * from './dtos/CampaignQuota';
|
|
28
|
+
export * from './dtos/CampaignAlerts';
|
|
29
|
+
export * from './dtos/PopulationRef';
|
|
30
|
+
export * from './dtos/EvaluationReward';
|
|
31
|
+
export * from './dtos/EvaluationTrigger';
|
|
@@ -29,3 +29,24 @@ __exportStar(require("./dtos/PostEventResponse"), exports);
|
|
|
29
29
|
__exportStar(require("./dtos/RunCounts"), exports);
|
|
30
30
|
__exportStar(require("./dtos/RunResultItem"), exports);
|
|
31
31
|
__exportStar(require("./dtos/GetRunResponse"), exports);
|
|
32
|
+
//Enums del dominio (campanias, evaluaciones, ledger)
|
|
33
|
+
__exportStar(require("./enums/CampaignStatusEnum"), exports);
|
|
34
|
+
__exportStar(require("./enums/CampaignPausedReasonEnum"), exports);
|
|
35
|
+
__exportStar(require("./enums/EvaluationStatusEnum"), exports);
|
|
36
|
+
__exportStar(require("./enums/GrantPolicyModeEnum"), exports);
|
|
37
|
+
__exportStar(require("./enums/GrantPeriodEnum"), exports);
|
|
38
|
+
__exportStar(require("./enums/QuotaPeriodEnum"), exports);
|
|
39
|
+
__exportStar(require("./enums/QuotaExhaustedActionEnum"), exports);
|
|
40
|
+
__exportStar(require("./enums/ApprovalModeEnum"), exports);
|
|
41
|
+
__exportStar(require("./enums/LedgerStatusEnum"), exports);
|
|
42
|
+
__exportStar(require("./enums/BatchPublishStateEnum"), exports);
|
|
43
|
+
__exportStar(require("./enums/TraceOriginEnum"), exports);
|
|
44
|
+
//Types
|
|
45
|
+
__exportStar(require("./types/RewardInputRef"), exports);
|
|
46
|
+
//DTOs de configuracion (forma guardada de campanias y evaluaciones)
|
|
47
|
+
__exportStar(require("./dtos/GrantPolicy"), exports);
|
|
48
|
+
__exportStar(require("./dtos/CampaignQuota"), exports);
|
|
49
|
+
__exportStar(require("./dtos/CampaignAlerts"), exports);
|
|
50
|
+
__exportStar(require("./dtos/PopulationRef"), exports);
|
|
51
|
+
__exportStar(require("./dtos/EvaluationReward"), exports);
|
|
52
|
+
__exportStar(require("./dtos/EvaluationTrigger"), exports);
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { DynamicFormValue } from '../../dynamicForm/types/DynamicFormValue';
|
|
2
|
+
/** Valor de un input de `reward.inputs`: constante o tomado de un input de la evaluacion (spec B 5.1). */
|
|
3
|
+
export type RewardInputRef = {
|
|
4
|
+
const: DynamicFormValue;
|
|
5
|
+
} | {
|
|
6
|
+
input: string;
|
|
7
|
+
};
|
package/package.json
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {IsEnum, IsNotEmpty, IsOptional, IsString, Length} from "class-validator";
|
|
1
|
+
import {IsEnum, IsNotEmpty, IsOptional, IsString, IsUUID, Length} from "class-validator";
|
|
2
2
|
import {Transform} from "class-transformer";
|
|
3
3
|
import {GroupStatus} from "../enums/GroupStatus";
|
|
4
4
|
|
|
@@ -26,6 +26,12 @@ export class GroupCreateRequest {
|
|
|
26
26
|
@Transform(({value}) => value ?? null)
|
|
27
27
|
leaderDirectoryId?: string | null;
|
|
28
28
|
|
|
29
|
+
// Directorio que será el agente OWNER_<grupo>. Opcional en el DTO porque la carga por CSV no lo trae;
|
|
30
|
+
// el alta del backoffice lo exige en el controller de group-business.
|
|
31
|
+
@IsOptional()
|
|
32
|
+
@IsUUID('4')
|
|
33
|
+
ownerDirectoryId?: string;
|
|
34
|
+
|
|
29
35
|
@IsEnum(GroupStatus)
|
|
30
36
|
status: GroupStatus;
|
|
31
37
|
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { GroupStatus } from "../enums/GroupStatus"
|
|
2
|
+
import type { GroupOwnerItem } from "../../referral-business/dtos/GroupOwnersByGroupIdsResponse"
|
|
2
3
|
|
|
3
4
|
|
|
4
5
|
export class GroupResponse {
|
|
@@ -17,6 +18,9 @@ export class GroupResponse {
|
|
|
17
18
|
imageUrl?: string | null
|
|
18
19
|
imageUrlSigned?: string | null
|
|
19
20
|
parentGroupId: string
|
|
21
|
+
// Agente OWNER_<grupo> resuelto en vivo desde referral-business. null = sin owner o no se pudo resolver;
|
|
22
|
+
// ausente = la lectura no lo pidió. Reemplaza a leaderNames/leaderEmail/leaderDirectoryId (ya no se escriben).
|
|
23
|
+
owner?: GroupOwnerItem | null
|
|
20
24
|
}
|
|
21
25
|
|
|
22
26
|
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { ArrayMaxSize, IsArray, IsString } from "class-validator";
|
|
2
|
+
|
|
3
|
+
// Tope de groupIds por request del endpoint batch de owners de grupo.
|
|
4
|
+
export const GROUP_OWNERS_BY_GROUP_IDS_MAX_BATCH = 100;
|
|
5
|
+
|
|
6
|
+
// Body de POST /private/agents/owners/by-group-ids; la lista vacía es válida y responde {}.
|
|
7
|
+
export class GroupOwnersByGroupIdsRequest {
|
|
8
|
+
@IsArray()
|
|
9
|
+
@ArrayMaxSize(GROUP_OWNERS_BY_GROUP_IDS_MAX_BATCH)
|
|
10
|
+
@IsString({ each: true })
|
|
11
|
+
groupIds!: string[];
|
|
12
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
// Agente OWNER_<grupo> de Agents_GT (excluye DELETE; ACTIVE gana). name/email null si no se pudieron resolver.
|
|
2
|
+
export interface GroupOwnerItem {
|
|
3
|
+
agentId: string;
|
|
4
|
+
directoryId: string;
|
|
5
|
+
name: string | null;
|
|
6
|
+
email: string | null;
|
|
7
|
+
status: string;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
// Respuesta de POST /private/agents/owners/by-group-ids; un grupo sin owner no aparece.
|
|
11
|
+
export type GroupOwnersByGroupIdsResponse = Record<string, GroupOwnerItem>;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { QuotaPeriodEnum } from '../enums/QuotaPeriodEnum';
|
|
2
|
+
|
|
3
|
+
/** Un cupo de campania: cantidad maxima de premios (no dinero) en un periodo (spec B 5.6). */
|
|
4
|
+
export class CampaignQuota {
|
|
5
|
+
/** Unico dentro de la campania (ej. `primeros-500`). Entra en la llave del consumo (`{id}#{periodo}`). */
|
|
6
|
+
id: string;
|
|
7
|
+
limit: number;
|
|
8
|
+
period: QuotaPeriodEnum;
|
|
9
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { RewardInputRef } from '../types/RewardInputRef';
|
|
2
|
+
|
|
3
|
+
/** Que se pide a rewards-business al calificar: el paquete y sus inputs `itemKey -> inputKey -> valor`. */
|
|
4
|
+
export class EvaluationReward {
|
|
5
|
+
packageId: string;
|
|
6
|
+
inputs: Record<string, Record<string, RewardInputRef>>;
|
|
7
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { ApprovalModeEnum } from '../enums/ApprovalModeEnum';
|
|
2
|
+
import { TriggerTypeEnum } from '../enums/TriggerTypeEnum';
|
|
3
|
+
import { PopulationRef } from './PopulationRef';
|
|
4
|
+
|
|
5
|
+
/** Disparador de una evaluacion (spec B 5.1). Una evaluacion tiene a lo sumo UN disparador `EVENT`. */
|
|
6
|
+
export class EvaluationTrigger {
|
|
7
|
+
type: TriggerTypeEnum;
|
|
8
|
+
approval: ApprovalModeEnum;
|
|
9
|
+
/** Solo `EVENT`. */
|
|
10
|
+
eventKey?: string;
|
|
11
|
+
/** Solo `CRON`: cron de 5 campos, granularidad de 15 minutos (fase 4). */
|
|
12
|
+
schedule?: string;
|
|
13
|
+
/** Solo `CRON` (fase 4). */
|
|
14
|
+
population?: PopulationRef;
|
|
15
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { GrantPeriodEnum } from '../enums/GrantPeriodEnum';
|
|
2
|
+
import { GrantPolicyModeEnum } from '../enums/GrantPolicyModeEnum';
|
|
3
|
+
|
|
4
|
+
/** Politica de frecuencia de una evaluacion (spec B 5.1). Cada modo exige su campo (lo valida el backoffice). */
|
|
5
|
+
export class GrantPolicy {
|
|
6
|
+
mode: GrantPolicyModeEnum;
|
|
7
|
+
/** Solo `PER_PERIOD`. */
|
|
8
|
+
period?: GrantPeriodEnum;
|
|
9
|
+
/** Solo `PER_REFERENCE`: la `key` de un input del contrato (ej. `saleId`). */
|
|
10
|
+
referenceInput?: string;
|
|
11
|
+
/** Solo `MAX_N`: tope de premios en total (>= 1). */
|
|
12
|
+
max?: number;
|
|
13
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/** Por que esta pausada una campania: decide si se siguen soltando sus lotes reservados (spec B 7.6). */
|
|
2
|
+
export enum CampaignPausedReasonEnum {
|
|
3
|
+
/** Lo pauso un operador: no se sueltan lotes. */
|
|
4
|
+
MANUAL = 'MANUAL',
|
|
5
|
+
/** Se agoto un cupo con `PAUSE_CAMPAIGN`: lo reservado igual se suelta. */
|
|
6
|
+
QUOTA_EXHAUSTED = 'QUOTA_EXHAUSTED',
|
|
7
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/** Politica de frecuencia de una evaluacion (spec B E5 y 5.5). */
|
|
2
|
+
export enum GrantPolicyModeEnum {
|
|
3
|
+
/** Una vez en la vida por evaluacion. */
|
|
4
|
+
ONCE = 'ONCE',
|
|
5
|
+
/** Una por periodo (`GrantPeriodEnum`). */
|
|
6
|
+
PER_PERIOD = 'PER_PERIOD',
|
|
7
|
+
/** Una por valor del `referenceInput` (ej. `saleId`). */
|
|
8
|
+
PER_REFERENCE = 'PER_REFERENCE',
|
|
9
|
+
/** Hasta N en total (`max`), con un contador. */
|
|
10
|
+
MAX_N = 'MAX_N',
|
|
11
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/** Que pasa al agotarse un cupo (`onExhausted`, spec B 5.6). */
|
|
2
|
+
export enum QuotaExhaustedActionEnum {
|
|
3
|
+
/** Pausa la campania; sus evaluaciones dejan de correr. */
|
|
4
|
+
PAUSE_CAMPAIGN = 'PAUSE_CAMPAIGN',
|
|
5
|
+
/** Siguen corriendo y registrando, sin entregar (`QUOTA_EXHAUSTED`). */
|
|
6
|
+
RECORD_ONLY = 'RECORD_ONLY',
|
|
7
|
+
}
|
|
@@ -14,3 +14,27 @@ export * from './dtos/PostEventResponse';
|
|
|
14
14
|
export * from './dtos/RunCounts';
|
|
15
15
|
export * from './dtos/RunResultItem';
|
|
16
16
|
export * from './dtos/GetRunResponse';
|
|
17
|
+
|
|
18
|
+
//Enums del dominio (campanias, evaluaciones, ledger)
|
|
19
|
+
export * from './enums/CampaignStatusEnum';
|
|
20
|
+
export * from './enums/CampaignPausedReasonEnum';
|
|
21
|
+
export * from './enums/EvaluationStatusEnum';
|
|
22
|
+
export * from './enums/GrantPolicyModeEnum';
|
|
23
|
+
export * from './enums/GrantPeriodEnum';
|
|
24
|
+
export * from './enums/QuotaPeriodEnum';
|
|
25
|
+
export * from './enums/QuotaExhaustedActionEnum';
|
|
26
|
+
export * from './enums/ApprovalModeEnum';
|
|
27
|
+
export * from './enums/LedgerStatusEnum';
|
|
28
|
+
export * from './enums/BatchPublishStateEnum';
|
|
29
|
+
export * from './enums/TraceOriginEnum';
|
|
30
|
+
|
|
31
|
+
//Types
|
|
32
|
+
export * from './types/RewardInputRef';
|
|
33
|
+
|
|
34
|
+
//DTOs de configuracion (forma guardada de campanias y evaluaciones)
|
|
35
|
+
export * from './dtos/GrantPolicy';
|
|
36
|
+
export * from './dtos/CampaignQuota';
|
|
37
|
+
export * from './dtos/CampaignAlerts';
|
|
38
|
+
export * from './dtos/PopulationRef';
|
|
39
|
+
export * from './dtos/EvaluationReward';
|
|
40
|
+
export * from './dtos/EvaluationTrigger';
|