@grapadigital/shared-schemas 1.0.218 → 1.0.219

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.
@@ -34,6 +34,17 @@ export type ClientDocument = HydratedDocument<Client>;
34
34
  */
35
35
  export declare const CLIENT_CUSTOMIZATION_VALUES: readonly ["samsung"];
36
36
  export type ClientCustomization = (typeof CLIENT_CUSTOMIZATION_VALUES)[number];
37
+ /**
38
+ * Catálogo de métricas que podem virar meta no Tier ou na Meta anual do
39
+ * cliente. Quem cadastra escolhe a métrica e o valor; nada fica fixo.
40
+ * `viralReachEngagementRate` é o limite de viral e só vale no Tier.
41
+ * Ver GD-687.
42
+ */
43
+ export declare const CLIENT_GOAL_METRIC_VALUES: readonly ["potentialReach", "reachCount", "impressionCount", "engagementCount", "engagementRate", "reachEngagementRate", "qualifiedEngagementRate", "effectiveReach", "emv", "score", "cpmi", "cpi", "cpe", "viralReachEngagementRate"];
44
+ export type ClientGoalMetric = (typeof CLIENT_GOAL_METRIC_VALUES)[number];
45
+ export type ClientGoalMetricUnit = 'count' | 'rate' | 'currency';
46
+ /** Unidade de cada métrica. `rate` é guardado como fração (0,10 = 10%). */
47
+ export declare const CLIENT_GOAL_METRIC_UNITS: Record<ClientGoalMetric, ClientGoalMetricUnit>;
37
48
  export declare class Cluster {
38
49
  key: string;
39
50
  label: string;
@@ -74,6 +85,56 @@ export declare const CommissionRangeSchema: MongooseSchema<CommissionRange, impo
74
85
  } & {
75
86
  __v: number;
76
87
  }>;
88
+ export declare class ClientMetricGoal {
89
+ metric: ClientGoalMetric;
90
+ /** Na unidade da métrica (`CLIENT_GOAL_METRIC_UNITS`); `rate` em fração. */
91
+ value: number;
92
+ }
93
+ export declare const ClientMetricGoalSchema: MongooseSchema<ClientMetricGoal, import("mongoose").Model<ClientMetricGoal, any, any, any, import("mongoose").Document<unknown, any, ClientMetricGoal, any, {}> & ClientMetricGoal & {
94
+ _id: Types.ObjectId;
95
+ } & {
96
+ __v: number;
97
+ }, any>, {}, {}, {}, {}, import("mongoose").DefaultSchemaOptions, ClientMetricGoal, import("mongoose").Document<unknown, {}, import("mongoose").FlatRecord<ClientMetricGoal>, {}, import("mongoose").ResolveSchemaOptions<import("mongoose").DefaultSchemaOptions>> & import("mongoose").FlatRecord<ClientMetricGoal> & {
98
+ _id: Types.ObjectId;
99
+ } & {
100
+ __v: number;
101
+ }>;
102
+ /**
103
+ * Faixa de seguidores do cliente com as metas dela (ex.: Micro, Macro, Hero,
104
+ * Icon da Samsung). O Tier é do cliente, não do Influenciador: para mudar a
105
+ * meta, edita o Tier. Faixas inclusivas nas duas pontas, contínuas e sem
106
+ * sobreposição (validado na api-entities). Ver GD-687.
107
+ */
108
+ export declare class ClientTier {
109
+ name: string;
110
+ minFollowers: number;
111
+ /** `null` = sem teto (só o último Tier). */
112
+ maxFollowers?: number | null;
113
+ goals: ClientMetricGoal[];
114
+ }
115
+ export declare const ClientTierSchema: MongooseSchema<ClientTier, import("mongoose").Model<ClientTier, any, any, any, import("mongoose").Document<unknown, any, ClientTier, any, {}> & ClientTier & {
116
+ _id: Types.ObjectId;
117
+ } & {
118
+ __v: number;
119
+ }, any>, {}, {}, {}, {}, import("mongoose").DefaultSchemaOptions, ClientTier, import("mongoose").Document<unknown, {}, import("mongoose").FlatRecord<ClientTier>, {}, import("mongoose").ResolveSchemaOptions<import("mongoose").DefaultSchemaOptions>> & import("mongoose").FlatRecord<ClientTier> & {
120
+ _id: Types.ObjectId;
121
+ } & {
122
+ __v: number;
123
+ }>;
124
+ /** Metas do cliente num ano (alimentam os cards do gen_ia). Ver GD-687. */
125
+ export declare class ClientAnnualGoal {
126
+ year: number;
127
+ goals: ClientMetricGoal[];
128
+ }
129
+ export declare const ClientAnnualGoalSchema: MongooseSchema<ClientAnnualGoal, import("mongoose").Model<ClientAnnualGoal, any, any, any, import("mongoose").Document<unknown, any, ClientAnnualGoal, any, {}> & ClientAnnualGoal & {
130
+ _id: Types.ObjectId;
131
+ } & {
132
+ __v: number;
133
+ }, any>, {}, {}, {}, {}, import("mongoose").DefaultSchemaOptions, ClientAnnualGoal, import("mongoose").Document<unknown, {}, import("mongoose").FlatRecord<ClientAnnualGoal>, {}, import("mongoose").ResolveSchemaOptions<import("mongoose").DefaultSchemaOptions>> & import("mongoose").FlatRecord<ClientAnnualGoal> & {
134
+ _id: Types.ObjectId;
135
+ } & {
136
+ __v: number;
137
+ }>;
77
138
  export declare class AgencyCommissionPeriod {
78
139
  ranges: CommissionRange[];
79
140
  startDate: Date;
@@ -149,6 +210,10 @@ export declare class Client extends Party {
149
210
  * Ver GD-683.
150
211
  */
151
212
  customization?: ClientCustomization | null;
213
+ /** Tiers do cliente (só com Personalização Samsung por enquanto). Ver GD-687. */
214
+ tiers: ClientTier[];
215
+ /** Metas anuais do cliente (só com Personalização Samsung por enquanto). Ver GD-687. */
216
+ annualGoals: ClientAnnualGoal[];
152
217
  /**
153
218
  * Client de organização (ex.: "Oma Creators"): representa a organização
154
219
  * inteira, não uma marca. No hub, mostra todas as actions dessa organização
@@ -9,7 +9,7 @@ var __metadata = (this && this.__metadata) || function (k, v) {
9
9
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.ClientModel = exports.ClientSchema = exports.Client = exports.ClientResponsibleSchema = exports.ClientResponsible = exports.NicheItemSchema = exports.NicheItem = exports.AgencyCommissionPeriodSchema = exports.AgencyCommissionPeriod = exports.CommissionRangeSchema = exports.CommissionRange = exports.CompanySchema = exports.Company = exports.ClusterSchema = exports.Cluster = exports.CLIENT_CUSTOMIZATION_VALUES = void 0;
12
+ exports.ClientModel = exports.ClientSchema = exports.Client = exports.ClientResponsibleSchema = exports.ClientResponsible = exports.NicheItemSchema = exports.NicheItem = exports.AgencyCommissionPeriodSchema = exports.AgencyCommissionPeriod = exports.ClientAnnualGoalSchema = exports.ClientAnnualGoal = exports.ClientTierSchema = exports.ClientTier = exports.ClientMetricGoalSchema = exports.ClientMetricGoal = exports.CommissionRangeSchema = exports.CommissionRange = exports.CompanySchema = exports.Company = exports.ClusterSchema = exports.Cluster = exports.CLIENT_GOAL_METRIC_UNITS = exports.CLIENT_GOAL_METRIC_VALUES = exports.CLIENT_CUSTOMIZATION_VALUES = void 0;
13
13
  const mongoose_1 = require("@nestjs/mongoose");
14
14
  const swagger_1 = require("@nestjs/swagger");
15
15
  const mongoose_2 = require("mongoose");
@@ -20,6 +20,45 @@ const responsible_schema_1 = require("./responsible.schema");
20
20
  * Ver GD-683.
21
21
  */
22
22
  exports.CLIENT_CUSTOMIZATION_VALUES = ['samsung'];
23
+ /**
24
+ * Catálogo de métricas que podem virar meta no Tier ou na Meta anual do
25
+ * cliente. Quem cadastra escolhe a métrica e o valor; nada fica fixo.
26
+ * `viralReachEngagementRate` é o limite de viral e só vale no Tier.
27
+ * Ver GD-687.
28
+ */
29
+ exports.CLIENT_GOAL_METRIC_VALUES = [
30
+ 'potentialReach',
31
+ 'reachCount',
32
+ 'impressionCount',
33
+ 'engagementCount',
34
+ 'engagementRate',
35
+ 'reachEngagementRate',
36
+ 'qualifiedEngagementRate',
37
+ 'effectiveReach',
38
+ 'emv',
39
+ 'score',
40
+ 'cpmi',
41
+ 'cpi',
42
+ 'cpe',
43
+ 'viralReachEngagementRate',
44
+ ];
45
+ /** Unidade de cada métrica. `rate` é guardado como fração (0,10 = 10%). */
46
+ exports.CLIENT_GOAL_METRIC_UNITS = {
47
+ potentialReach: 'count',
48
+ reachCount: 'count',
49
+ impressionCount: 'count',
50
+ engagementCount: 'count',
51
+ engagementRate: 'rate',
52
+ reachEngagementRate: 'rate',
53
+ qualifiedEngagementRate: 'rate',
54
+ effectiveReach: 'count',
55
+ emv: 'currency',
56
+ score: 'count',
57
+ cpmi: 'currency',
58
+ cpi: 'currency',
59
+ cpe: 'currency',
60
+ viralReachEngagementRate: 'rate',
61
+ };
23
62
  let Cluster = class Cluster {
24
63
  };
25
64
  __decorate([
@@ -69,6 +108,66 @@ CommissionRange = __decorate([
69
108
  ], CommissionRange);
70
109
  exports.CommissionRange = CommissionRange;
71
110
  exports.CommissionRangeSchema = mongoose_1.SchemaFactory.createForClass(CommissionRange);
111
+ let ClientMetricGoal = class ClientMetricGoal {
112
+ };
113
+ __decorate([
114
+ (0, mongoose_1.Prop)({ type: String, enum: exports.CLIENT_GOAL_METRIC_VALUES, required: true }),
115
+ __metadata("design:type", String)
116
+ ], ClientMetricGoal.prototype, "metric", void 0);
117
+ __decorate([
118
+ (0, mongoose_1.Prop)({ type: Number, required: true }),
119
+ __metadata("design:type", Number)
120
+ ], ClientMetricGoal.prototype, "value", void 0);
121
+ ClientMetricGoal = __decorate([
122
+ (0, mongoose_1.Schema)({ _id: false })
123
+ ], ClientMetricGoal);
124
+ exports.ClientMetricGoal = ClientMetricGoal;
125
+ exports.ClientMetricGoalSchema = mongoose_1.SchemaFactory.createForClass(ClientMetricGoal);
126
+ /**
127
+ * Faixa de seguidores do cliente com as metas dela (ex.: Micro, Macro, Hero,
128
+ * Icon da Samsung). O Tier é do cliente, não do Influenciador: para mudar a
129
+ * meta, edita o Tier. Faixas inclusivas nas duas pontas, contínuas e sem
130
+ * sobreposição (validado na api-entities). Ver GD-687.
131
+ */
132
+ let ClientTier = class ClientTier {
133
+ };
134
+ __decorate([
135
+ (0, mongoose_1.Prop)({ type: String, required: true }),
136
+ __metadata("design:type", String)
137
+ ], ClientTier.prototype, "name", void 0);
138
+ __decorate([
139
+ (0, mongoose_1.Prop)({ type: Number, required: true }),
140
+ __metadata("design:type", Number)
141
+ ], ClientTier.prototype, "minFollowers", void 0);
142
+ __decorate([
143
+ (0, mongoose_1.Prop)({ type: Number, required: false, default: null }),
144
+ __metadata("design:type", Object)
145
+ ], ClientTier.prototype, "maxFollowers", void 0);
146
+ __decorate([
147
+ (0, mongoose_1.Prop)({ type: [exports.ClientMetricGoalSchema], default: [] }),
148
+ __metadata("design:type", Array)
149
+ ], ClientTier.prototype, "goals", void 0);
150
+ ClientTier = __decorate([
151
+ (0, mongoose_1.Schema)({ _id: false })
152
+ ], ClientTier);
153
+ exports.ClientTier = ClientTier;
154
+ exports.ClientTierSchema = mongoose_1.SchemaFactory.createForClass(ClientTier);
155
+ /** Metas do cliente num ano (alimentam os cards do gen_ia). Ver GD-687. */
156
+ let ClientAnnualGoal = class ClientAnnualGoal {
157
+ };
158
+ __decorate([
159
+ (0, mongoose_1.Prop)({ type: Number, required: true }),
160
+ __metadata("design:type", Number)
161
+ ], ClientAnnualGoal.prototype, "year", void 0);
162
+ __decorate([
163
+ (0, mongoose_1.Prop)({ type: [exports.ClientMetricGoalSchema], default: [] }),
164
+ __metadata("design:type", Array)
165
+ ], ClientAnnualGoal.prototype, "goals", void 0);
166
+ ClientAnnualGoal = __decorate([
167
+ (0, mongoose_1.Schema)({ _id: false })
168
+ ], ClientAnnualGoal);
169
+ exports.ClientAnnualGoal = ClientAnnualGoal;
170
+ exports.ClientAnnualGoalSchema = mongoose_1.SchemaFactory.createForClass(ClientAnnualGoal);
72
171
  let AgencyCommissionPeriod = class AgencyCommissionPeriod {
73
172
  };
74
173
  __decorate([
@@ -178,6 +277,14 @@ __decorate([
178
277
  (0, mongoose_1.Prop)({ type: String, enum: exports.CLIENT_CUSTOMIZATION_VALUES, required: false, default: null }),
179
278
  __metadata("design:type", Object)
180
279
  ], Client.prototype, "customization", void 0);
280
+ __decorate([
281
+ (0, mongoose_1.Prop)({ type: [exports.ClientTierSchema], default: [] }),
282
+ __metadata("design:type", Array)
283
+ ], Client.prototype, "tiers", void 0);
284
+ __decorate([
285
+ (0, mongoose_1.Prop)({ type: [exports.ClientAnnualGoalSchema], default: [] }),
286
+ __metadata("design:type", Array)
287
+ ], Client.prototype, "annualGoals", void 0);
181
288
  __decorate([
182
289
  (0, mongoose_1.Prop)({ type: mongoose_2.Schema.Types.ObjectId, ref: 'Organization', required: false }),
183
290
  __metadata("design:type", mongoose_2.Types.ObjectId)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@grapadigital/shared-schemas",
3
- "version": "1.0.218",
3
+ "version": "1.0.219",
4
4
  "description": "Shared Mongoose Schemas",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -19,6 +19,50 @@ export type ClientDocument = HydratedDocument<Client>;
19
19
  export const CLIENT_CUSTOMIZATION_VALUES = ['samsung'] as const;
20
20
  export type ClientCustomization = (typeof CLIENT_CUSTOMIZATION_VALUES)[number];
21
21
 
22
+ /**
23
+ * Catálogo de métricas que podem virar meta no Tier ou na Meta anual do
24
+ * cliente. Quem cadastra escolhe a métrica e o valor; nada fica fixo.
25
+ * `viralReachEngagementRate` é o limite de viral e só vale no Tier.
26
+ * Ver GD-687.
27
+ */
28
+ export const CLIENT_GOAL_METRIC_VALUES = [
29
+ 'potentialReach',
30
+ 'reachCount',
31
+ 'impressionCount',
32
+ 'engagementCount',
33
+ 'engagementRate',
34
+ 'reachEngagementRate',
35
+ 'qualifiedEngagementRate',
36
+ 'effectiveReach',
37
+ 'emv',
38
+ 'score',
39
+ 'cpmi',
40
+ 'cpi',
41
+ 'cpe',
42
+ 'viralReachEngagementRate',
43
+ ] as const;
44
+ export type ClientGoalMetric = (typeof CLIENT_GOAL_METRIC_VALUES)[number];
45
+
46
+ export type ClientGoalMetricUnit = 'count' | 'rate' | 'currency';
47
+
48
+ /** Unidade de cada métrica. `rate` é guardado como fração (0,10 = 10%). */
49
+ export const CLIENT_GOAL_METRIC_UNITS: Record<ClientGoalMetric, ClientGoalMetricUnit> = {
50
+ potentialReach: 'count',
51
+ reachCount: 'count',
52
+ impressionCount: 'count',
53
+ engagementCount: 'count',
54
+ engagementRate: 'rate',
55
+ reachEngagementRate: 'rate',
56
+ qualifiedEngagementRate: 'rate',
57
+ effectiveReach: 'count',
58
+ emv: 'currency',
59
+ score: 'count',
60
+ cpmi: 'currency',
61
+ cpi: 'currency',
62
+ cpe: 'currency',
63
+ viralReachEngagementRate: 'rate',
64
+ };
65
+
22
66
  @Schema({ _id: false })
23
67
  export class Cluster {
24
68
  @Prop({ required: true })
@@ -55,6 +99,54 @@ export class CommissionRange {
55
99
 
56
100
  export const CommissionRangeSchema = SchemaFactory.createForClass(CommissionRange);
57
101
 
102
+ @Schema({ _id: false })
103
+ export class ClientMetricGoal {
104
+ @Prop({ type: String, enum: CLIENT_GOAL_METRIC_VALUES, required: true })
105
+ metric: ClientGoalMetric;
106
+
107
+ /** Na unidade da métrica (`CLIENT_GOAL_METRIC_UNITS`); `rate` em fração. */
108
+ @Prop({ type: Number, required: true })
109
+ value: number;
110
+ }
111
+
112
+ export const ClientMetricGoalSchema = SchemaFactory.createForClass(ClientMetricGoal);
113
+
114
+ /**
115
+ * Faixa de seguidores do cliente com as metas dela (ex.: Micro, Macro, Hero,
116
+ * Icon da Samsung). O Tier é do cliente, não do Influenciador: para mudar a
117
+ * meta, edita o Tier. Faixas inclusivas nas duas pontas, contínuas e sem
118
+ * sobreposição (validado na api-entities). Ver GD-687.
119
+ */
120
+ @Schema({ _id: false })
121
+ export class ClientTier {
122
+ @Prop({ type: String, required: true })
123
+ name: string;
124
+
125
+ @Prop({ type: Number, required: true })
126
+ minFollowers: number;
127
+
128
+ /** `null` = sem teto (só o último Tier). */
129
+ @Prop({ type: Number, required: false, default: null })
130
+ maxFollowers?: number | null;
131
+
132
+ @Prop({ type: [ClientMetricGoalSchema], default: [] })
133
+ goals: ClientMetricGoal[];
134
+ }
135
+
136
+ export const ClientTierSchema = SchemaFactory.createForClass(ClientTier);
137
+
138
+ /** Metas do cliente num ano (alimentam os cards do gen_ia). Ver GD-687. */
139
+ @Schema({ _id: false })
140
+ export class ClientAnnualGoal {
141
+ @Prop({ type: Number, required: true })
142
+ year: number;
143
+
144
+ @Prop({ type: [ClientMetricGoalSchema], default: [] })
145
+ goals: ClientMetricGoal[];
146
+ }
147
+
148
+ export const ClientAnnualGoalSchema = SchemaFactory.createForClass(ClientAnnualGoal);
149
+
58
150
  @Schema({ _id: false })
59
151
  export class AgencyCommissionPeriod {
60
152
  @Prop({ type: [CommissionRangeSchema], required: true, default: [] })
@@ -157,6 +249,14 @@ export class Client extends Party {
157
249
  @Prop({ type: String, enum: CLIENT_CUSTOMIZATION_VALUES, required: false, default: null })
158
250
  customization?: ClientCustomization | null;
159
251
 
252
+ /** Tiers do cliente (só com Personalização Samsung por enquanto). Ver GD-687. */
253
+ @Prop({ type: [ClientTierSchema], default: [] })
254
+ tiers: ClientTier[];
255
+
256
+ /** Metas anuais do cliente (só com Personalização Samsung por enquanto). Ver GD-687. */
257
+ @Prop({ type: [ClientAnnualGoalSchema], default: [] })
258
+ annualGoals: ClientAnnualGoal[];
259
+
160
260
  /**
161
261
  * Client de organização (ex.: "Oma Creators"): representa a organização
162
262
  * inteira, não uma marca. No hub, mostra todas as actions dessa organização