@hed-hog/operations 0.0.3 → 0.0.285
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/README.md +122 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/operations-data.controller.d.ts +139 -0
- package/dist/operations-data.controller.d.ts.map +1 -0
- package/dist/operations-data.controller.js +113 -0
- package/dist/operations-data.controller.js.map +1 -0
- package/dist/operations-growth.controller.d.ts +48 -0
- package/dist/operations-growth.controller.d.ts.map +1 -0
- package/dist/operations-growth.controller.js +90 -0
- package/dist/operations-growth.controller.js.map +1 -0
- package/dist/operations.module.d.ts.map +1 -1
- package/dist/operations.module.js +10 -4
- package/dist/operations.module.js.map +1 -1
- package/dist/operations.service.d.ts +178 -0
- package/dist/operations.service.d.ts.map +1 -0
- package/dist/operations.service.js +134 -0
- package/dist/operations.service.js.map +1 -0
- package/hedhog/data/menu.yaml +251 -132
- package/hedhog/data/operations_career_level.yaml +102 -0
- package/hedhog/data/operations_career_track.yaml +8 -0
- package/hedhog/data/operations_certification.yaml +38 -0
- package/hedhog/data/operations_evaluation_cycle.yaml +18 -0
- package/hedhog/data/operations_performance_criterion.yaml +48 -0
- package/hedhog/data/role.yaml +14 -7
- package/hedhog/data/route.yaml +143 -80
- package/hedhog/frontend/app/_components/allocation-calendar.tsx.ejs +56 -56
- package/hedhog/frontend/app/_components/kanban-board.tsx.ejs +83 -83
- package/hedhog/frontend/app/_components/operations-header.tsx.ejs +29 -29
- package/hedhog/frontend/app/_components/section-card.tsx.ejs +32 -32
- package/hedhog/frontend/app/_components/status-badge.tsx.ejs +15 -15
- package/hedhog/frontend/app/_components/timesheet-entry-dialog.tsx.ejs +142 -142
- package/hedhog/frontend/app/_lib/hooks/use-operations-data.ts.ejs +41 -41
- package/hedhog/frontend/app/_lib/hooks/use-operations-growth-data.ts.ejs +63 -0
- package/hedhog/frontend/app/_lib/mocks/allocations.mock.ts.ejs +74 -74
- package/hedhog/frontend/app/_lib/mocks/contracts.mock.ts.ejs +74 -74
- package/hedhog/frontend/app/_lib/mocks/operations-growth.mock.ts.ejs +824 -0
- package/hedhog/frontend/app/_lib/mocks/projects.mock.ts.ejs +60 -60
- package/hedhog/frontend/app/_lib/mocks/tasks.mock.ts.ejs +88 -88
- package/hedhog/frontend/app/_lib/mocks/timesheets.mock.ts.ejs +84 -84
- package/hedhog/frontend/app/_lib/mocks/users.mock.ts.ejs +67 -67
- package/hedhog/frontend/app/_lib/services/contracts.service.ts.ejs +10 -10
- package/hedhog/frontend/app/_lib/services/operations-growth.service.ts.ejs +31 -0
- package/hedhog/frontend/app/_lib/services/projects.service.ts.ejs +10 -10
- package/hedhog/frontend/app/_lib/services/tasks.service.ts.ejs +10 -10
- package/hedhog/frontend/app/_lib/services/timesheets.service.ts.ejs +10 -10
- package/hedhog/frontend/app/_lib/types/operations-growth.ts.ejs +209 -0
- package/hedhog/frontend/app/_lib/types/operations.ts.ejs +95 -95
- package/hedhog/frontend/app/_lib/utils/format.ts.ejs +25 -25
- package/hedhog/frontend/app/_lib/utils/growth.ts.ejs +62 -0
- package/hedhog/frontend/app/_lib/utils/metrics.ts.ejs +103 -103
- package/hedhog/frontend/app/_lib/utils/status.ts.ejs +80 -80
- package/hedhog/frontend/app/allocations/page.tsx.ejs +154 -99
- package/hedhog/frontend/app/approvals/page.tsx.ejs +147 -147
- package/hedhog/frontend/app/career/page.tsx.ejs +143 -0
- package/hedhog/frontend/app/certifications/page.tsx.ejs +201 -0
- package/hedhog/frontend/app/contracts/[id]/page.tsx.ejs +108 -108
- package/hedhog/frontend/app/contracts/page.tsx.ejs +180 -124
- package/hedhog/frontend/app/evaluations/page.tsx.ejs +277 -0
- package/hedhog/frontend/app/goals/page.tsx.ejs +170 -0
- package/hedhog/frontend/app/growth/page.tsx.ejs +288 -0
- package/hedhog/frontend/app/layout.tsx.ejs +9 -9
- package/hedhog/frontend/app/manager/page.tsx.ejs +175 -0
- package/hedhog/frontend/app/page.tsx.ejs +177 -177
- package/hedhog/frontend/app/projects/[id]/page.tsx.ejs +186 -186
- package/hedhog/frontend/app/projects/page.tsx.ejs +111 -111
- package/hedhog/frontend/app/rewards/page.tsx.ejs +195 -0
- package/hedhog/frontend/app/tasks/page.tsx.ejs +47 -47
- package/hedhog/frontend/app/timesheets/page.tsx.ejs +126 -126
- package/hedhog/frontend/messages/en.json +152 -142
- package/hedhog/frontend/messages/pt.json +152 -142
- package/hedhog/table/operations_allocation.yaml +52 -0
- package/hedhog/table/operations_calibration_item.yaml +61 -0
- package/hedhog/table/operations_calibration_session.yaml +25 -0
- package/hedhog/table/operations_career_level.yaml +75 -0
- package/hedhog/table/operations_career_track.yaml +21 -0
- package/hedhog/table/operations_certification.yaml +48 -0
- package/hedhog/table/operations_contract.yaml +57 -0
- package/hedhog/table/operations_employee.yaml +64 -0
- package/hedhog/table/operations_employee_certification.yaml +43 -0
- package/hedhog/table/operations_employee_connect.yaml +61 -0
- package/hedhog/table/operations_employee_evaluation.yaml +113 -0
- package/hedhog/table/operations_employee_evaluation_item.yaml +39 -0
- package/hedhog/table/operations_employee_profile.yaml +80 -0
- package/hedhog/table/operations_employee_skill_matrix.yaml +30 -0
- package/hedhog/table/operations_evaluation_cycle.yaml +31 -0
- package/hedhog/table/operations_goal.yaml +67 -0
- package/hedhog/table/operations_goal_progress.yaml +31 -0
- package/hedhog/table/operations_performance_criterion.yaml +29 -0
- package/hedhog/table/operations_project.yaml +66 -0
- package/hedhog/table/operations_promotion_readiness.yaml +49 -0
- package/hedhog/table/operations_promotion_recommendation.yaml +63 -0
- package/hedhog/table/operations_public_recognition.yaml +46 -0
- package/hedhog/table/operations_reward.yaml +100 -0
- package/hedhog/table/operations_score_event.yaml +81 -0
- package/hedhog/table/operations_task.yaml +60 -0
- package/hedhog/table/operations_timesheet.yaml +49 -0
- package/hedhog/table/operations_timesheet_entry.yaml +51 -0
- package/package.json +4 -4
- package/src/index.ts +2 -1
- package/src/language/en.json +8 -8
- package/src/language/pt.json +8 -8
- package/src/operations-data.controller.ts +54 -0
- package/src/operations-growth.controller.ts +44 -0
- package/src/operations.module.ts +21 -15
- package/src/operations.service.ts +137 -0
|
@@ -0,0 +1,824 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
CareerLevelPlan,
|
|
3
|
+
CareerTrackSummary,
|
|
4
|
+
CertificationCatalogItem,
|
|
5
|
+
EmployeeCertificationRecord,
|
|
6
|
+
EmployeeEvaluationRecord,
|
|
7
|
+
EmployeeGrowthProfile,
|
|
8
|
+
EvaluationCycleSummary,
|
|
9
|
+
GoalRecord,
|
|
10
|
+
PerformanceCriterionSummary,
|
|
11
|
+
PromotionRecommendationRecord,
|
|
12
|
+
RecognitionRecord,
|
|
13
|
+
RewardRecord,
|
|
14
|
+
ScoreEventRecord,
|
|
15
|
+
} from '../types/operations-growth';
|
|
16
|
+
|
|
17
|
+
export const careerTracksMock: CareerTrackSummary[] = [
|
|
18
|
+
{
|
|
19
|
+
id: 'track-delivery',
|
|
20
|
+
slug: 'delivery',
|
|
21
|
+
name: 'Delivery',
|
|
22
|
+
description:
|
|
23
|
+
'Career lane focused on execution, delivery leadership, and client outcomes.',
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
id: 'track-specialist',
|
|
27
|
+
slug: 'specialist',
|
|
28
|
+
name: 'Specialist',
|
|
29
|
+
description:
|
|
30
|
+
'Career lane focused on technical depth, quality, and enablement.',
|
|
31
|
+
},
|
|
32
|
+
];
|
|
33
|
+
|
|
34
|
+
export const careerLevelsMock: CareerLevelPlan[] = [
|
|
35
|
+
{
|
|
36
|
+
id: 'lvl-junior-consultant',
|
|
37
|
+
trackId: 'track-delivery',
|
|
38
|
+
slug: 'junior-consultant',
|
|
39
|
+
name: 'Junior Consultant',
|
|
40
|
+
code: 'JC',
|
|
41
|
+
order: 1,
|
|
42
|
+
minScore: 0,
|
|
43
|
+
maxScore: 199,
|
|
44
|
+
salaryMin: 2500,
|
|
45
|
+
salaryMax: 4200,
|
|
46
|
+
summaryCriteria: [
|
|
47
|
+
'Follow structured rituals',
|
|
48
|
+
'Deliver scoped tasks',
|
|
49
|
+
'Build consistency',
|
|
50
|
+
],
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
id: 'lvl-consultant',
|
|
54
|
+
trackId: 'track-delivery',
|
|
55
|
+
slug: 'consultant',
|
|
56
|
+
name: 'Consultant',
|
|
57
|
+
code: 'C1',
|
|
58
|
+
order: 2,
|
|
59
|
+
minScore: 200,
|
|
60
|
+
maxScore: 399,
|
|
61
|
+
salaryMin: 4200,
|
|
62
|
+
salaryMax: 6500,
|
|
63
|
+
summaryCriteria: [
|
|
64
|
+
'Own delivery slices',
|
|
65
|
+
'Reduce rework',
|
|
66
|
+
'Communicate risk early',
|
|
67
|
+
],
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
id: 'lvl-senior-consultant',
|
|
71
|
+
trackId: 'track-delivery',
|
|
72
|
+
slug: 'senior-consultant',
|
|
73
|
+
name: 'Senior Consultant',
|
|
74
|
+
code: 'SC',
|
|
75
|
+
order: 3,
|
|
76
|
+
minScore: 400,
|
|
77
|
+
maxScore: 649,
|
|
78
|
+
salaryMin: 6500,
|
|
79
|
+
salaryMax: 9500,
|
|
80
|
+
summaryCriteria: [
|
|
81
|
+
'Lead complex deliveries',
|
|
82
|
+
'Mentor peers',
|
|
83
|
+
'Raise quality standards',
|
|
84
|
+
],
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
id: 'lvl-delivery-lead',
|
|
88
|
+
trackId: 'track-delivery',
|
|
89
|
+
slug: 'delivery-lead',
|
|
90
|
+
name: 'Delivery Lead',
|
|
91
|
+
code: 'DL',
|
|
92
|
+
order: 4,
|
|
93
|
+
minScore: 650,
|
|
94
|
+
maxScore: 999,
|
|
95
|
+
salaryMin: 9500,
|
|
96
|
+
salaryMax: 14000,
|
|
97
|
+
summaryCriteria: [
|
|
98
|
+
'Lead multi-stream execution',
|
|
99
|
+
'Coach people',
|
|
100
|
+
'Protect margins and predictability',
|
|
101
|
+
],
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
id: 'lvl-specialist-ii',
|
|
105
|
+
trackId: 'track-specialist',
|
|
106
|
+
slug: 'specialist-ii',
|
|
107
|
+
name: 'Specialist II',
|
|
108
|
+
code: 'SP2',
|
|
109
|
+
order: 1,
|
|
110
|
+
minScore: 250,
|
|
111
|
+
maxScore: 499,
|
|
112
|
+
salaryMin: 5000,
|
|
113
|
+
salaryMax: 8000,
|
|
114
|
+
summaryCriteria: [
|
|
115
|
+
'Own a specialty lane',
|
|
116
|
+
'Create reusable assets',
|
|
117
|
+
'Improve standards',
|
|
118
|
+
],
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
id: 'lvl-principal-specialist',
|
|
122
|
+
trackId: 'track-specialist',
|
|
123
|
+
slug: 'principal-specialist',
|
|
124
|
+
name: 'Principal Specialist',
|
|
125
|
+
code: 'PS',
|
|
126
|
+
order: 2,
|
|
127
|
+
minScore: 500,
|
|
128
|
+
maxScore: 900,
|
|
129
|
+
salaryMin: 9000,
|
|
130
|
+
salaryMax: 15000,
|
|
131
|
+
summaryCriteria: [
|
|
132
|
+
'Scale expertise',
|
|
133
|
+
'Certify others',
|
|
134
|
+
'Improve leverage across teams',
|
|
135
|
+
],
|
|
136
|
+
},
|
|
137
|
+
];
|
|
138
|
+
|
|
139
|
+
export const employeeGrowthProfilesMock: EmployeeGrowthProfile[] = [
|
|
140
|
+
{
|
|
141
|
+
employeeId: 'usr-diego',
|
|
142
|
+
trackId: 'track-delivery',
|
|
143
|
+
currentLevelId: 'lvl-consultant',
|
|
144
|
+
nextLevelId: 'lvl-senior-consultant',
|
|
145
|
+
currentScore: 382,
|
|
146
|
+
nextLevelScore: 400,
|
|
147
|
+
promotionProgress: 96,
|
|
148
|
+
promotionStatus: 'recommended',
|
|
149
|
+
admissionDate: '2024-02-12',
|
|
150
|
+
story:
|
|
151
|
+
'Strong delivery performance with consistent technical execution and growing leadership signal.',
|
|
152
|
+
strengths: ['On-time delivery', 'Autonomy', 'Client trust'],
|
|
153
|
+
gaps: ['Advanced quality certification', 'Mentoring cadence'],
|
|
154
|
+
},
|
|
155
|
+
{
|
|
156
|
+
employeeId: 'usr-elisa',
|
|
157
|
+
trackId: 'track-delivery',
|
|
158
|
+
currentLevelId: 'lvl-consultant',
|
|
159
|
+
nextLevelId: 'lvl-senior-consultant',
|
|
160
|
+
currentScore: 338,
|
|
161
|
+
nextLevelScore: 400,
|
|
162
|
+
promotionProgress: 84,
|
|
163
|
+
promotionStatus: 'eligible',
|
|
164
|
+
admissionDate: '2024-05-08',
|
|
165
|
+
story:
|
|
166
|
+
'Reliable product delivery and design-system contribution, but still missing a key certification milestone.',
|
|
167
|
+
strengths: ['Quality', 'Collaboration', 'UX ownership'],
|
|
168
|
+
gaps: ['Certification completion', 'Cross-team influence'],
|
|
169
|
+
},
|
|
170
|
+
{
|
|
171
|
+
employeeId: 'usr-fabio',
|
|
172
|
+
trackId: 'track-specialist',
|
|
173
|
+
currentLevelId: 'lvl-specialist-ii',
|
|
174
|
+
nextLevelId: 'lvl-principal-specialist',
|
|
175
|
+
currentScore: 246,
|
|
176
|
+
nextLevelScore: 500,
|
|
177
|
+
promotionProgress: 49,
|
|
178
|
+
promotionStatus: 'developing',
|
|
179
|
+
admissionDate: '2024-08-01',
|
|
180
|
+
story:
|
|
181
|
+
'Well recognized for critical QA interventions, but still building the score foundation for a level jump.',
|
|
182
|
+
strengths: [
|
|
183
|
+
'Recognition moments',
|
|
184
|
+
'Quality discipline',
|
|
185
|
+
'Incident support',
|
|
186
|
+
],
|
|
187
|
+
gaps: ['Portfolio impact', 'Certifications', 'Knowledge scaling'],
|
|
188
|
+
},
|
|
189
|
+
{
|
|
190
|
+
employeeId: 'usr-gabi',
|
|
191
|
+
trackId: 'track-specialist',
|
|
192
|
+
currentLevelId: 'lvl-specialist-ii',
|
|
193
|
+
nextLevelId: 'lvl-principal-specialist',
|
|
194
|
+
currentScore: 468,
|
|
195
|
+
nextLevelScore: 500,
|
|
196
|
+
promotionProgress: 94,
|
|
197
|
+
promotionStatus: 'recommended',
|
|
198
|
+
admissionDate: '2023-11-10',
|
|
199
|
+
story:
|
|
200
|
+
'High-impact specialist profile with visible contribution to reporting clarity and stakeholder communication.',
|
|
201
|
+
strengths: ['Storytelling', 'Collaboration', 'Business context'],
|
|
202
|
+
gaps: ['Formal mentorship footprint'],
|
|
203
|
+
},
|
|
204
|
+
{
|
|
205
|
+
employeeId: 'usr-carla',
|
|
206
|
+
trackId: 'track-delivery',
|
|
207
|
+
currentLevelId: 'lvl-senior-consultant',
|
|
208
|
+
nextLevelId: 'lvl-delivery-lead',
|
|
209
|
+
currentScore: 604,
|
|
210
|
+
nextLevelScore: 650,
|
|
211
|
+
promotionProgress: 93,
|
|
212
|
+
promotionStatus: 'eligible',
|
|
213
|
+
admissionDate: '2023-02-15',
|
|
214
|
+
story:
|
|
215
|
+
'Stable project orchestration with clear RH/manager potential and strong process discipline.',
|
|
216
|
+
strengths: ['Methodology', 'Commitment', 'Cross-project visibility'],
|
|
217
|
+
gaps: ['Leadership practicum certification'],
|
|
218
|
+
},
|
|
219
|
+
];
|
|
220
|
+
|
|
221
|
+
export const evaluationCyclesMock: EvaluationCycleSummary[] = [
|
|
222
|
+
{
|
|
223
|
+
id: 'cycle-h1-2026',
|
|
224
|
+
name: '2026 H1 Growth Cycle',
|
|
225
|
+
type: 'semiannual',
|
|
226
|
+
startDate: '2026-01-01',
|
|
227
|
+
endDate: '2026-06-30',
|
|
228
|
+
status: 'active',
|
|
229
|
+
},
|
|
230
|
+
{
|
|
231
|
+
id: 'cycle-q1-2026',
|
|
232
|
+
name: '2026 Delivery Sprint Review',
|
|
233
|
+
type: 'quarterly',
|
|
234
|
+
startDate: '2026-01-01',
|
|
235
|
+
endDate: '2026-03-31',
|
|
236
|
+
status: 'active',
|
|
237
|
+
},
|
|
238
|
+
];
|
|
239
|
+
|
|
240
|
+
export const performanceCriteriaMock: PerformanceCriterionSummary[] = [
|
|
241
|
+
{
|
|
242
|
+
id: 'crit-punctuality',
|
|
243
|
+
slug: 'punctuality',
|
|
244
|
+
name: 'Punctuality',
|
|
245
|
+
weight: 1,
|
|
246
|
+
},
|
|
247
|
+
{ id: 'crit-quality', slug: 'quality', name: 'Quality', weight: 1.4 },
|
|
248
|
+
{
|
|
249
|
+
id: 'crit-on-time',
|
|
250
|
+
slug: 'on_time_delivery',
|
|
251
|
+
name: 'On-time Delivery',
|
|
252
|
+
weight: 1.2,
|
|
253
|
+
},
|
|
254
|
+
{
|
|
255
|
+
id: 'crit-above',
|
|
256
|
+
slug: 'above_expectations',
|
|
257
|
+
name: 'Above Expectations',
|
|
258
|
+
weight: 1.1,
|
|
259
|
+
},
|
|
260
|
+
{
|
|
261
|
+
id: 'crit-commitment',
|
|
262
|
+
slug: 'commitment',
|
|
263
|
+
name: 'Commitment',
|
|
264
|
+
weight: 1.3,
|
|
265
|
+
},
|
|
266
|
+
{
|
|
267
|
+
id: 'crit-process',
|
|
268
|
+
slug: 'process_methodology',
|
|
269
|
+
name: 'Process and Methodology',
|
|
270
|
+
weight: 1,
|
|
271
|
+
},
|
|
272
|
+
{ id: 'crit-autonomy', slug: 'autonomy', name: 'Autonomy', weight: 1.2 },
|
|
273
|
+
{
|
|
274
|
+
id: 'crit-collaboration',
|
|
275
|
+
slug: 'collaboration',
|
|
276
|
+
name: 'Collaboration',
|
|
277
|
+
weight: 1.3,
|
|
278
|
+
},
|
|
279
|
+
];
|
|
280
|
+
|
|
281
|
+
export const employeeEvaluationsMock: EmployeeEvaluationRecord[] = [
|
|
282
|
+
{
|
|
283
|
+
id: 'eval-diego-q1',
|
|
284
|
+
employeeId: 'usr-diego',
|
|
285
|
+
evaluatorId: 'usr-ana',
|
|
286
|
+
projectId: 'prj-zenith-cloud',
|
|
287
|
+
taskId: 'tsk-106',
|
|
288
|
+
timesheetId: 'time-007',
|
|
289
|
+
cycleId: 'cycle-q1-2026',
|
|
290
|
+
evaluationDate: '2026-03-15',
|
|
291
|
+
totalRating: 4.6,
|
|
292
|
+
generatedScore: 84,
|
|
293
|
+
publicComment:
|
|
294
|
+
'Closed a critical automation stream with low supervision and strong client confidence.',
|
|
295
|
+
privateComment:
|
|
296
|
+
'Promotion-ready signal if mentoring consistency is maintained for the next cycle.',
|
|
297
|
+
status: 'finalized',
|
|
298
|
+
criteria: [
|
|
299
|
+
{
|
|
300
|
+
criterionId: 'crit-on-time',
|
|
301
|
+
rating: 4.8,
|
|
302
|
+
appliedWeight: 1.2,
|
|
303
|
+
generatedScore: 15,
|
|
304
|
+
},
|
|
305
|
+
{
|
|
306
|
+
criterionId: 'crit-quality',
|
|
307
|
+
rating: 4.5,
|
|
308
|
+
appliedWeight: 1.4,
|
|
309
|
+
generatedScore: 21,
|
|
310
|
+
},
|
|
311
|
+
{
|
|
312
|
+
criterionId: 'crit-autonomy',
|
|
313
|
+
rating: 4.7,
|
|
314
|
+
appliedWeight: 1.2,
|
|
315
|
+
generatedScore: 18,
|
|
316
|
+
},
|
|
317
|
+
{
|
|
318
|
+
criterionId: 'crit-collaboration',
|
|
319
|
+
rating: 4.3,
|
|
320
|
+
appliedWeight: 1.3,
|
|
321
|
+
generatedScore: 14,
|
|
322
|
+
},
|
|
323
|
+
],
|
|
324
|
+
},
|
|
325
|
+
{
|
|
326
|
+
id: 'eval-elisa-h1',
|
|
327
|
+
employeeId: 'usr-elisa',
|
|
328
|
+
evaluatorId: 'usr-ana',
|
|
329
|
+
projectId: 'prj-orion-web',
|
|
330
|
+
taskId: 'tsk-103',
|
|
331
|
+
timesheetId: 'time-001',
|
|
332
|
+
cycleId: 'cycle-h1-2026',
|
|
333
|
+
evaluationDate: '2026-03-14',
|
|
334
|
+
totalRating: 4.2,
|
|
335
|
+
generatedScore: 72,
|
|
336
|
+
publicComment:
|
|
337
|
+
'Strong design-system focus and reliable frontend delivery cadence.',
|
|
338
|
+
privateComment:
|
|
339
|
+
'The next level depends more on certification and broader cross-stream leadership.',
|
|
340
|
+
status: 'submitted',
|
|
341
|
+
criteria: [
|
|
342
|
+
{
|
|
343
|
+
criterionId: 'crit-quality',
|
|
344
|
+
rating: 4.6,
|
|
345
|
+
appliedWeight: 1.4,
|
|
346
|
+
generatedScore: 20,
|
|
347
|
+
},
|
|
348
|
+
{
|
|
349
|
+
criterionId: 'crit-collaboration',
|
|
350
|
+
rating: 4.7,
|
|
351
|
+
appliedWeight: 1.3,
|
|
352
|
+
generatedScore: 18,
|
|
353
|
+
},
|
|
354
|
+
{
|
|
355
|
+
criterionId: 'crit-above',
|
|
356
|
+
rating: 3.9,
|
|
357
|
+
appliedWeight: 1.1,
|
|
358
|
+
generatedScore: 12,
|
|
359
|
+
},
|
|
360
|
+
{
|
|
361
|
+
criterionId: 'crit-process',
|
|
362
|
+
rating: 4.1,
|
|
363
|
+
appliedWeight: 1,
|
|
364
|
+
generatedScore: 11,
|
|
365
|
+
},
|
|
366
|
+
],
|
|
367
|
+
},
|
|
368
|
+
{
|
|
369
|
+
id: 'eval-fabio-h1',
|
|
370
|
+
employeeId: 'usr-fabio',
|
|
371
|
+
evaluatorId: 'usr-bruno',
|
|
372
|
+
projectId: 'prj-orion-web',
|
|
373
|
+
taskId: 'tsk-101',
|
|
374
|
+
timesheetId: 'time-003',
|
|
375
|
+
cycleId: 'cycle-h1-2026',
|
|
376
|
+
evaluationDate: '2026-03-11',
|
|
377
|
+
totalRating: 3.8,
|
|
378
|
+
generatedScore: 54,
|
|
379
|
+
publicComment:
|
|
380
|
+
'Critical QA interventions protected release quality in a sensitive flow.',
|
|
381
|
+
privateComment:
|
|
382
|
+
'Still needs more visible ownership outside tactical QA rescue moments.',
|
|
383
|
+
status: 'acknowledged',
|
|
384
|
+
criteria: [
|
|
385
|
+
{
|
|
386
|
+
criterionId: 'crit-quality',
|
|
387
|
+
rating: 4.5,
|
|
388
|
+
appliedWeight: 1.4,
|
|
389
|
+
generatedScore: 18,
|
|
390
|
+
},
|
|
391
|
+
{
|
|
392
|
+
criterionId: 'crit-punctuality',
|
|
393
|
+
rating: 4.1,
|
|
394
|
+
appliedWeight: 1,
|
|
395
|
+
generatedScore: 10,
|
|
396
|
+
},
|
|
397
|
+
{
|
|
398
|
+
criterionId: 'crit-autonomy',
|
|
399
|
+
rating: 3.4,
|
|
400
|
+
appliedWeight: 1.2,
|
|
401
|
+
generatedScore: 12,
|
|
402
|
+
},
|
|
403
|
+
{
|
|
404
|
+
criterionId: 'crit-above',
|
|
405
|
+
rating: 3.3,
|
|
406
|
+
appliedWeight: 1.1,
|
|
407
|
+
generatedScore: 8,
|
|
408
|
+
},
|
|
409
|
+
],
|
|
410
|
+
},
|
|
411
|
+
{
|
|
412
|
+
id: 'eval-gabi-h1',
|
|
413
|
+
employeeId: 'usr-gabi',
|
|
414
|
+
evaluatorId: 'usr-carla',
|
|
415
|
+
projectId: 'prj-orion-data',
|
|
416
|
+
taskId: 'tsk-105',
|
|
417
|
+
timesheetId: 'time-004',
|
|
418
|
+
cycleId: 'cycle-h1-2026',
|
|
419
|
+
evaluationDate: '2026-03-12',
|
|
420
|
+
totalRating: 4.7,
|
|
421
|
+
generatedScore: 88,
|
|
422
|
+
publicComment:
|
|
423
|
+
'Turned a hard metrics conversation into a decision-ready dashboard narrative.',
|
|
424
|
+
privateComment:
|
|
425
|
+
'Principal path is realistic if the mentoring footprint becomes more explicit.',
|
|
426
|
+
status: 'finalized',
|
|
427
|
+
criteria: [
|
|
428
|
+
{
|
|
429
|
+
criterionId: 'crit-collaboration',
|
|
430
|
+
rating: 4.8,
|
|
431
|
+
appliedWeight: 1.3,
|
|
432
|
+
generatedScore: 19,
|
|
433
|
+
},
|
|
434
|
+
{
|
|
435
|
+
criterionId: 'crit-quality',
|
|
436
|
+
rating: 4.6,
|
|
437
|
+
appliedWeight: 1.4,
|
|
438
|
+
generatedScore: 22,
|
|
439
|
+
},
|
|
440
|
+
{
|
|
441
|
+
criterionId: 'crit-above',
|
|
442
|
+
rating: 4.9,
|
|
443
|
+
appliedWeight: 1.1,
|
|
444
|
+
generatedScore: 18,
|
|
445
|
+
},
|
|
446
|
+
{
|
|
447
|
+
criterionId: 'crit-commitment',
|
|
448
|
+
rating: 4.5,
|
|
449
|
+
appliedWeight: 1.3,
|
|
450
|
+
generatedScore: 17,
|
|
451
|
+
},
|
|
452
|
+
],
|
|
453
|
+
},
|
|
454
|
+
];
|
|
455
|
+
|
|
456
|
+
export const goalsMock: GoalRecord[] = [
|
|
457
|
+
{
|
|
458
|
+
id: 'goal-diego-rework',
|
|
459
|
+
employeeId: 'usr-diego',
|
|
460
|
+
projectId: 'prj-zenith-cloud',
|
|
461
|
+
title: 'Reduce critical incident rework under 5%',
|
|
462
|
+
description:
|
|
463
|
+
'Consolidate automation hardening and release checklist discipline.',
|
|
464
|
+
type: 'individual',
|
|
465
|
+
periodLabel: 'Q1 2026',
|
|
466
|
+
targetScore: 60,
|
|
467
|
+
currentScore: 48,
|
|
468
|
+
progressPercent: 80,
|
|
469
|
+
completionRule: 'Close 3 sprint cycles with less than 5% urgent rework.',
|
|
470
|
+
status: 'active',
|
|
471
|
+
},
|
|
472
|
+
{
|
|
473
|
+
id: 'goal-elisa-cert',
|
|
474
|
+
employeeId: 'usr-elisa',
|
|
475
|
+
title: 'Complete Scrum Master Foundations certification',
|
|
476
|
+
description:
|
|
477
|
+
'Certification milestone required for stronger senior promotion case.',
|
|
478
|
+
type: 'individual',
|
|
479
|
+
periodLabel: 'H1 2026',
|
|
480
|
+
targetScore: 45,
|
|
481
|
+
currentScore: 20,
|
|
482
|
+
progressPercent: 44,
|
|
483
|
+
completionRule:
|
|
484
|
+
'Pass the certification and apply facilitation learnings in two squad rituals.',
|
|
485
|
+
status: 'at_risk',
|
|
486
|
+
},
|
|
487
|
+
{
|
|
488
|
+
id: 'goal-fabio-quality',
|
|
489
|
+
employeeId: 'usr-fabio',
|
|
490
|
+
projectId: 'prj-orion-web',
|
|
491
|
+
title: 'Create reusable checkout regression pack',
|
|
492
|
+
description:
|
|
493
|
+
'Turn rescue QA activity into a reusable quality asset for the team.',
|
|
494
|
+
type: 'project',
|
|
495
|
+
periodLabel: 'Q1 2026',
|
|
496
|
+
targetScore: 50,
|
|
497
|
+
currentScore: 26,
|
|
498
|
+
progressPercent: 52,
|
|
499
|
+
completionRule:
|
|
500
|
+
'Document, automate, and hand over the regression pack to the squad.',
|
|
501
|
+
status: 'active',
|
|
502
|
+
},
|
|
503
|
+
{
|
|
504
|
+
id: 'goal-pmo-team',
|
|
505
|
+
teamName: 'PMO',
|
|
506
|
+
title: 'Keep portfolio review SLA under 48h',
|
|
507
|
+
description:
|
|
508
|
+
'Shared goal to improve response speed on operational escalations.',
|
|
509
|
+
type: 'team',
|
|
510
|
+
periodLabel: 'H1 2026',
|
|
511
|
+
targetScore: 120,
|
|
512
|
+
currentScore: 96,
|
|
513
|
+
progressPercent: 80,
|
|
514
|
+
completionRule:
|
|
515
|
+
'Portfolio review decisions must happen inside 48h in 90% of cases.',
|
|
516
|
+
status: 'active',
|
|
517
|
+
},
|
|
518
|
+
{
|
|
519
|
+
id: 'goal-gabi-mentoring',
|
|
520
|
+
employeeId: 'usr-gabi',
|
|
521
|
+
title: 'Mentor two designers on operational storytelling',
|
|
522
|
+
description:
|
|
523
|
+
'Explicitly create leadership proof points for the principal specialist path.',
|
|
524
|
+
type: 'cycle',
|
|
525
|
+
periodLabel: 'H1 2026',
|
|
526
|
+
targetScore: 40,
|
|
527
|
+
currentScore: 34,
|
|
528
|
+
progressPercent: 85,
|
|
529
|
+
completionRule:
|
|
530
|
+
'Run two mentoring sessions and publish a reusable narrative framework.',
|
|
531
|
+
status: 'completed',
|
|
532
|
+
},
|
|
533
|
+
];
|
|
534
|
+
|
|
535
|
+
export const certificationsCatalogMock: CertificationCatalogItem[] = [
|
|
536
|
+
{
|
|
537
|
+
id: 'cert-scrum',
|
|
538
|
+
slug: 'scrum-master-foundations',
|
|
539
|
+
name: 'Scrum Master Foundations',
|
|
540
|
+
provider: 'Scrum.org',
|
|
541
|
+
category: 'Delivery',
|
|
542
|
+
defaultScore: 45,
|
|
543
|
+
description: 'Supports facilitation and agile operating fundamentals.',
|
|
544
|
+
},
|
|
545
|
+
{
|
|
546
|
+
id: 'cert-storytelling',
|
|
547
|
+
slug: 'data-storytelling',
|
|
548
|
+
name: 'Data Storytelling for Delivery',
|
|
549
|
+
provider: 'Internal Academy',
|
|
550
|
+
category: 'Communication',
|
|
551
|
+
defaultScore: 30,
|
|
552
|
+
description:
|
|
553
|
+
'Improves executive updates and operational dashboard narratives.',
|
|
554
|
+
},
|
|
555
|
+
{
|
|
556
|
+
id: 'cert-quality',
|
|
557
|
+
slug: 'advanced-quality-assurance',
|
|
558
|
+
name: 'Advanced Quality Assurance',
|
|
559
|
+
provider: 'ISTQB',
|
|
560
|
+
category: 'Quality',
|
|
561
|
+
defaultScore: 55,
|
|
562
|
+
requiredLevelId: 'lvl-senior-consultant',
|
|
563
|
+
description:
|
|
564
|
+
'Recommended milestone for senior delivery and specialist growth.',
|
|
565
|
+
},
|
|
566
|
+
{
|
|
567
|
+
id: 'cert-feedback',
|
|
568
|
+
slug: 'leadership-feedback-practicum',
|
|
569
|
+
name: 'Leadership Feedback Practicum',
|
|
570
|
+
provider: 'Internal Academy',
|
|
571
|
+
category: 'Leadership',
|
|
572
|
+
defaultScore: 40,
|
|
573
|
+
requiredLevelId: 'lvl-delivery-lead',
|
|
574
|
+
description:
|
|
575
|
+
'Supports people leadership readiness and promotion discussions.',
|
|
576
|
+
},
|
|
577
|
+
];
|
|
578
|
+
|
|
579
|
+
export const employeeCertificationsMock: EmployeeCertificationRecord[] = [
|
|
580
|
+
{
|
|
581
|
+
id: 'emp-cert-diego-quality',
|
|
582
|
+
employeeId: 'usr-diego',
|
|
583
|
+
certificationId: 'cert-quality',
|
|
584
|
+
grantedScore: 55,
|
|
585
|
+
status: 'in_progress',
|
|
586
|
+
},
|
|
587
|
+
{
|
|
588
|
+
id: 'emp-cert-elisa-scrum',
|
|
589
|
+
employeeId: 'usr-elisa',
|
|
590
|
+
certificationId: 'cert-scrum',
|
|
591
|
+
grantedScore: 0,
|
|
592
|
+
status: 'in_progress',
|
|
593
|
+
},
|
|
594
|
+
{
|
|
595
|
+
id: 'emp-cert-gabi-story',
|
|
596
|
+
employeeId: 'usr-gabi',
|
|
597
|
+
certificationId: 'cert-storytelling',
|
|
598
|
+
obtainedAt: '2026-02-20',
|
|
599
|
+
validUntil: '2027-02-20',
|
|
600
|
+
grantedScore: 30,
|
|
601
|
+
status: 'achieved',
|
|
602
|
+
},
|
|
603
|
+
{
|
|
604
|
+
id: 'emp-cert-carla-feedback',
|
|
605
|
+
employeeId: 'usr-carla',
|
|
606
|
+
certificationId: 'cert-feedback',
|
|
607
|
+
grantedScore: 0,
|
|
608
|
+
status: 'planned',
|
|
609
|
+
},
|
|
610
|
+
];
|
|
611
|
+
|
|
612
|
+
export const rewardsMock: RewardRecord[] = [
|
|
613
|
+
{
|
|
614
|
+
id: 'reward-diego-bonus',
|
|
615
|
+
employeeId: 'usr-diego',
|
|
616
|
+
type: 'bonus',
|
|
617
|
+
origin: 'project',
|
|
618
|
+
amount: 900,
|
|
619
|
+
currency: 'USD',
|
|
620
|
+
relatedScore: 32,
|
|
621
|
+
description:
|
|
622
|
+
'Critical incident automation bonus after measurable MTTR reduction.',
|
|
623
|
+
rewardDate: '2026-03-16',
|
|
624
|
+
status: 'granted',
|
|
625
|
+
},
|
|
626
|
+
{
|
|
627
|
+
id: 'reward-fabio-badge',
|
|
628
|
+
employeeId: 'usr-fabio',
|
|
629
|
+
type: 'badge',
|
|
630
|
+
origin: 'spot',
|
|
631
|
+
relatedScore: 12,
|
|
632
|
+
description:
|
|
633
|
+
'Recognized for protecting release quality during the checkout hardening week.',
|
|
634
|
+
rewardDate: '2026-03-12',
|
|
635
|
+
status: 'granted',
|
|
636
|
+
},
|
|
637
|
+
{
|
|
638
|
+
id: 'reward-gabi-recognition',
|
|
639
|
+
employeeId: 'usr-gabi',
|
|
640
|
+
type: 'recognition',
|
|
641
|
+
origin: 'evaluation',
|
|
642
|
+
relatedScore: 20,
|
|
643
|
+
description:
|
|
644
|
+
'Recognition for making the operations dashboard actionable for executives.',
|
|
645
|
+
rewardDate: '2026-03-13',
|
|
646
|
+
status: 'granted',
|
|
647
|
+
},
|
|
648
|
+
{
|
|
649
|
+
id: 'reward-carla-financial',
|
|
650
|
+
employeeId: 'usr-carla',
|
|
651
|
+
type: 'financial',
|
|
652
|
+
origin: 'goal',
|
|
653
|
+
amount: 650,
|
|
654
|
+
currency: 'USD',
|
|
655
|
+
relatedScore: 18,
|
|
656
|
+
description: 'Shared PMO bonus tied to response SLA improvement.',
|
|
657
|
+
rewardDate: '2026-03-17',
|
|
658
|
+
status: 'planned',
|
|
659
|
+
},
|
|
660
|
+
];
|
|
661
|
+
|
|
662
|
+
export const recognitionsMock: RecognitionRecord[] = [
|
|
663
|
+
{
|
|
664
|
+
id: 'rec-diego-client',
|
|
665
|
+
employeeId: 'usr-diego',
|
|
666
|
+
authorId: 'usr-ana',
|
|
667
|
+
projectId: 'prj-zenith-cloud',
|
|
668
|
+
message:
|
|
669
|
+
'Diego handled a risky automation stream with ownership and zero noise for the client.',
|
|
670
|
+
relatedScore: 14,
|
|
671
|
+
date: '2026-03-15',
|
|
672
|
+
visible: true,
|
|
673
|
+
},
|
|
674
|
+
{
|
|
675
|
+
id: 'rec-elisa-design',
|
|
676
|
+
employeeId: 'usr-elisa',
|
|
677
|
+
authorId: 'usr-gabi',
|
|
678
|
+
projectId: 'prj-orion-web',
|
|
679
|
+
message:
|
|
680
|
+
'Elisa kept the mobile experience sharp while still respecting delivery deadlines.',
|
|
681
|
+
relatedScore: 10,
|
|
682
|
+
date: '2026-03-14',
|
|
683
|
+
visible: true,
|
|
684
|
+
},
|
|
685
|
+
{
|
|
686
|
+
id: 'rec-fabio-quality',
|
|
687
|
+
employeeId: 'usr-fabio',
|
|
688
|
+
authorId: 'usr-bruno',
|
|
689
|
+
projectId: 'prj-orion-web',
|
|
690
|
+
message:
|
|
691
|
+
'Fabio found a release blocker hours before deploy and saved a risky production push.',
|
|
692
|
+
relatedScore: 8,
|
|
693
|
+
date: '2026-03-11',
|
|
694
|
+
visible: true,
|
|
695
|
+
},
|
|
696
|
+
{
|
|
697
|
+
id: 'rec-gabi-story',
|
|
698
|
+
employeeId: 'usr-gabi',
|
|
699
|
+
authorId: 'usr-carla',
|
|
700
|
+
projectId: 'prj-orion-data',
|
|
701
|
+
message:
|
|
702
|
+
'Gabriela transformed metrics into a board-ready story that accelerated decision-making.',
|
|
703
|
+
relatedScore: 12,
|
|
704
|
+
date: '2026-03-13',
|
|
705
|
+
visible: true,
|
|
706
|
+
},
|
|
707
|
+
];
|
|
708
|
+
|
|
709
|
+
export const scoreEventsMock: ScoreEventRecord[] = [
|
|
710
|
+
{
|
|
711
|
+
id: 'score-1',
|
|
712
|
+
employeeId: 'usr-diego',
|
|
713
|
+
sourceType: 'evaluation',
|
|
714
|
+
sourceId: 'eval-diego-q1',
|
|
715
|
+
scoreDelta: 84,
|
|
716
|
+
description: 'Sprint review evaluation',
|
|
717
|
+
referenceDate: '2026-03-15',
|
|
718
|
+
},
|
|
719
|
+
{
|
|
720
|
+
id: 'score-2',
|
|
721
|
+
employeeId: 'usr-diego',
|
|
722
|
+
sourceType: 'recognition',
|
|
723
|
+
sourceId: 'rec-diego-client',
|
|
724
|
+
scoreDelta: 14,
|
|
725
|
+
description: 'Public manager recognition',
|
|
726
|
+
referenceDate: '2026-03-15',
|
|
727
|
+
},
|
|
728
|
+
{
|
|
729
|
+
id: 'score-3',
|
|
730
|
+
employeeId: 'usr-elisa',
|
|
731
|
+
sourceType: 'evaluation',
|
|
732
|
+
sourceId: 'eval-elisa-h1',
|
|
733
|
+
scoreDelta: 72,
|
|
734
|
+
description: 'Semester evaluation',
|
|
735
|
+
referenceDate: '2026-03-14',
|
|
736
|
+
},
|
|
737
|
+
{
|
|
738
|
+
id: 'score-4',
|
|
739
|
+
employeeId: 'usr-elisa',
|
|
740
|
+
sourceType: 'goal',
|
|
741
|
+
sourceId: 'goal-elisa-cert',
|
|
742
|
+
scoreDelta: 20,
|
|
743
|
+
description: 'Certification preparation milestone',
|
|
744
|
+
referenceDate: '2026-03-10',
|
|
745
|
+
},
|
|
746
|
+
{
|
|
747
|
+
id: 'score-5',
|
|
748
|
+
employeeId: 'usr-fabio',
|
|
749
|
+
sourceType: 'evaluation',
|
|
750
|
+
sourceId: 'eval-fabio-h1',
|
|
751
|
+
scoreDelta: 54,
|
|
752
|
+
description: 'Semester evaluation',
|
|
753
|
+
referenceDate: '2026-03-11',
|
|
754
|
+
},
|
|
755
|
+
{
|
|
756
|
+
id: 'score-6',
|
|
757
|
+
employeeId: 'usr-fabio',
|
|
758
|
+
sourceType: 'recognition',
|
|
759
|
+
sourceId: 'rec-fabio-quality',
|
|
760
|
+
scoreDelta: 8,
|
|
761
|
+
description: 'Release save recognition',
|
|
762
|
+
referenceDate: '2026-03-11',
|
|
763
|
+
},
|
|
764
|
+
{
|
|
765
|
+
id: 'score-7',
|
|
766
|
+
employeeId: 'usr-gabi',
|
|
767
|
+
sourceType: 'evaluation',
|
|
768
|
+
sourceId: 'eval-gabi-h1',
|
|
769
|
+
scoreDelta: 88,
|
|
770
|
+
description: 'Semester evaluation',
|
|
771
|
+
referenceDate: '2026-03-12',
|
|
772
|
+
},
|
|
773
|
+
{
|
|
774
|
+
id: 'score-8',
|
|
775
|
+
employeeId: 'usr-gabi',
|
|
776
|
+
sourceType: 'certification',
|
|
777
|
+
sourceId: 'emp-cert-gabi-story',
|
|
778
|
+
scoreDelta: 30,
|
|
779
|
+
description: 'Data storytelling certification',
|
|
780
|
+
referenceDate: '2026-02-20',
|
|
781
|
+
},
|
|
782
|
+
];
|
|
783
|
+
|
|
784
|
+
export const promotionRecommendationsMock: PromotionRecommendationRecord[] = [
|
|
785
|
+
{
|
|
786
|
+
id: 'promo-diego',
|
|
787
|
+
employeeId: 'usr-diego',
|
|
788
|
+
currentLevelId: 'lvl-consultant',
|
|
789
|
+
suggestedLevelId: 'lvl-senior-consultant',
|
|
790
|
+
cycleId: 'cycle-h1-2026',
|
|
791
|
+
currentScore: 382,
|
|
792
|
+
requiredScore: 400,
|
|
793
|
+
eligible: true,
|
|
794
|
+
justification:
|
|
795
|
+
'Near threshold with strong autonomy and delivery evidence; certification remains the final gap.',
|
|
796
|
+
status: 'under_review',
|
|
797
|
+
},
|
|
798
|
+
{
|
|
799
|
+
id: 'promo-gabi',
|
|
800
|
+
employeeId: 'usr-gabi',
|
|
801
|
+
currentLevelId: 'lvl-specialist-ii',
|
|
802
|
+
suggestedLevelId: 'lvl-principal-specialist',
|
|
803
|
+
cycleId: 'cycle-h1-2026',
|
|
804
|
+
currentScore: 468,
|
|
805
|
+
requiredScore: 500,
|
|
806
|
+
eligible: true,
|
|
807
|
+
justification:
|
|
808
|
+
'High score momentum and visible stakeholder impact justify recommendation before cycle close.',
|
|
809
|
+
status: 'approved',
|
|
810
|
+
},
|
|
811
|
+
{
|
|
812
|
+
id: 'promo-carla',
|
|
813
|
+
employeeId: 'usr-carla',
|
|
814
|
+
currentLevelId: 'lvl-senior-consultant',
|
|
815
|
+
suggestedLevelId: 'lvl-delivery-lead',
|
|
816
|
+
cycleId: 'cycle-h1-2026',
|
|
817
|
+
currentScore: 604,
|
|
818
|
+
requiredScore: 650,
|
|
819
|
+
eligible: false,
|
|
820
|
+
justification:
|
|
821
|
+
'Leadership potential is strong, but the practicum certification is still open.',
|
|
822
|
+
status: 'draft',
|
|
823
|
+
},
|
|
824
|
+
];
|