@hed-hog/operations 0.0.3 → 0.0.286

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.
Files changed (108) hide show
  1. package/README.md +122 -0
  2. package/dist/index.d.ts +1 -0
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +1 -0
  5. package/dist/index.js.map +1 -1
  6. package/dist/operations-data.controller.d.ts +139 -0
  7. package/dist/operations-data.controller.d.ts.map +1 -0
  8. package/dist/operations-data.controller.js +113 -0
  9. package/dist/operations-data.controller.js.map +1 -0
  10. package/dist/operations-growth.controller.d.ts +48 -0
  11. package/dist/operations-growth.controller.d.ts.map +1 -0
  12. package/dist/operations-growth.controller.js +90 -0
  13. package/dist/operations-growth.controller.js.map +1 -0
  14. package/dist/operations.module.d.ts.map +1 -1
  15. package/dist/operations.module.js +10 -4
  16. package/dist/operations.module.js.map +1 -1
  17. package/dist/operations.service.d.ts +178 -0
  18. package/dist/operations.service.d.ts.map +1 -0
  19. package/dist/operations.service.js +134 -0
  20. package/dist/operations.service.js.map +1 -0
  21. package/hedhog/data/menu.yaml +251 -132
  22. package/hedhog/data/operations_career_level.yaml +102 -0
  23. package/hedhog/data/operations_career_track.yaml +8 -0
  24. package/hedhog/data/operations_certification.yaml +38 -0
  25. package/hedhog/data/operations_evaluation_cycle.yaml +18 -0
  26. package/hedhog/data/operations_performance_criterion.yaml +48 -0
  27. package/hedhog/data/role.yaml +14 -7
  28. package/hedhog/data/route.yaml +143 -80
  29. package/hedhog/frontend/app/_components/allocation-calendar.tsx.ejs +56 -56
  30. package/hedhog/frontend/app/_components/kanban-board.tsx.ejs +626 -83
  31. package/hedhog/frontend/app/_components/operations-header.tsx.ejs +29 -29
  32. package/hedhog/frontend/app/_components/section-card.tsx.ejs +32 -32
  33. package/hedhog/frontend/app/_components/status-badge.tsx.ejs +15 -15
  34. package/hedhog/frontend/app/_components/timesheet-entry-dialog.tsx.ejs +142 -142
  35. package/hedhog/frontend/app/_lib/hooks/use-operations-data.ts.ejs +41 -41
  36. package/hedhog/frontend/app/_lib/hooks/use-operations-growth-data.ts.ejs +63 -0
  37. package/hedhog/frontend/app/_lib/mocks/allocations.mock.ts.ejs +74 -74
  38. package/hedhog/frontend/app/_lib/mocks/contracts.mock.ts.ejs +74 -74
  39. package/hedhog/frontend/app/_lib/mocks/operations-growth.mock.ts.ejs +824 -0
  40. package/hedhog/frontend/app/_lib/mocks/projects.mock.ts.ejs +455 -60
  41. package/hedhog/frontend/app/_lib/mocks/tasks.mock.ts.ejs +117 -88
  42. package/hedhog/frontend/app/_lib/mocks/timesheets.mock.ts.ejs +84 -84
  43. package/hedhog/frontend/app/_lib/mocks/users.mock.ts.ejs +67 -67
  44. package/hedhog/frontend/app/_lib/services/contracts.service.ts.ejs +10 -10
  45. package/hedhog/frontend/app/_lib/services/operations-growth.service.ts.ejs +31 -0
  46. package/hedhog/frontend/app/_lib/services/projects.service.ts.ejs +10 -10
  47. package/hedhog/frontend/app/_lib/services/tasks.service.ts.ejs +10 -10
  48. package/hedhog/frontend/app/_lib/services/timesheets.service.ts.ejs +10 -10
  49. package/hedhog/frontend/app/_lib/types/operations-growth.ts.ejs +209 -0
  50. package/hedhog/frontend/app/_lib/types/operations.ts.ejs +156 -95
  51. package/hedhog/frontend/app/_lib/utils/format.ts.ejs +25 -25
  52. package/hedhog/frontend/app/_lib/utils/growth.ts.ejs +62 -0
  53. package/hedhog/frontend/app/_lib/utils/metrics.ts.ejs +103 -103
  54. package/hedhog/frontend/app/_lib/utils/status.ts.ejs +80 -80
  55. package/hedhog/frontend/app/allocations/page.tsx.ejs +155 -99
  56. package/hedhog/frontend/app/approvals/page.tsx.ejs +147 -147
  57. package/hedhog/frontend/app/career/page.tsx.ejs +143 -0
  58. package/hedhog/frontend/app/certifications/page.tsx.ejs +202 -0
  59. package/hedhog/frontend/app/contracts/[id]/page.tsx.ejs +108 -108
  60. package/hedhog/frontend/app/contracts/page.tsx.ejs +181 -124
  61. package/hedhog/frontend/app/evaluations/page.tsx.ejs +278 -0
  62. package/hedhog/frontend/app/goals/page.tsx.ejs +171 -0
  63. package/hedhog/frontend/app/growth/page.tsx.ejs +288 -0
  64. package/hedhog/frontend/app/layout.tsx.ejs +9 -9
  65. package/hedhog/frontend/app/manager/page.tsx.ejs +175 -0
  66. package/hedhog/frontend/app/page.tsx.ejs +177 -177
  67. package/hedhog/frontend/app/projects/[id]/page.tsx.ejs +936 -186
  68. package/hedhog/frontend/app/projects/page.tsx.ejs +1074 -111
  69. package/hedhog/frontend/app/rewards/page.tsx.ejs +196 -0
  70. package/hedhog/frontend/app/tasks/page.tsx.ejs +999 -47
  71. package/hedhog/frontend/app/timesheets/page.tsx.ejs +126 -126
  72. package/hedhog/frontend/messages/en.json +454 -142
  73. package/hedhog/frontend/messages/pt.json +454 -142
  74. package/hedhog/table/operations_allocation.yaml +52 -0
  75. package/hedhog/table/operations_calibration_item.yaml +61 -0
  76. package/hedhog/table/operations_calibration_session.yaml +25 -0
  77. package/hedhog/table/operations_career_level.yaml +75 -0
  78. package/hedhog/table/operations_career_track.yaml +21 -0
  79. package/hedhog/table/operations_certification.yaml +48 -0
  80. package/hedhog/table/operations_contract.yaml +57 -0
  81. package/hedhog/table/operations_employee.yaml +64 -0
  82. package/hedhog/table/operations_employee_certification.yaml +43 -0
  83. package/hedhog/table/operations_employee_connect.yaml +61 -0
  84. package/hedhog/table/operations_employee_evaluation.yaml +113 -0
  85. package/hedhog/table/operations_employee_evaluation_item.yaml +39 -0
  86. package/hedhog/table/operations_employee_profile.yaml +80 -0
  87. package/hedhog/table/operations_employee_skill_matrix.yaml +30 -0
  88. package/hedhog/table/operations_evaluation_cycle.yaml +31 -0
  89. package/hedhog/table/operations_goal.yaml +67 -0
  90. package/hedhog/table/operations_goal_progress.yaml +31 -0
  91. package/hedhog/table/operations_performance_criterion.yaml +29 -0
  92. package/hedhog/table/operations_project.yaml +66 -0
  93. package/hedhog/table/operations_promotion_readiness.yaml +49 -0
  94. package/hedhog/table/operations_promotion_recommendation.yaml +63 -0
  95. package/hedhog/table/operations_public_recognition.yaml +46 -0
  96. package/hedhog/table/operations_reward.yaml +100 -0
  97. package/hedhog/table/operations_score_event.yaml +81 -0
  98. package/hedhog/table/operations_task.yaml +60 -0
  99. package/hedhog/table/operations_timesheet.yaml +49 -0
  100. package/hedhog/table/operations_timesheet_entry.yaml +51 -0
  101. package/package.json +4 -4
  102. package/src/index.ts +2 -1
  103. package/src/language/en.json +8 -8
  104. package/src/language/pt.json +8 -8
  105. package/src/operations-data.controller.ts +54 -0
  106. package/src/operations-growth.controller.ts +44 -0
  107. package/src/operations.module.ts +21 -15
  108. package/src/operations.service.ts +137 -0
@@ -0,0 +1,51 @@
1
+ columns:
2
+ - type: pk
3
+ - name: timesheet_id
4
+ type: fk
5
+ references:
6
+ table: operations_timesheet
7
+ column: id
8
+ onDelete: CASCADE
9
+ onUpdate: CASCADE
10
+ - name: project_id
11
+ type: fk
12
+ isNullable: true
13
+ references:
14
+ table: operations_project
15
+ column: id
16
+ onDelete: SET NULL
17
+ onUpdate: CASCADE
18
+ - name: task_id
19
+ type: fk
20
+ isNullable: true
21
+ references:
22
+ table: operations_task
23
+ column: id
24
+ onDelete: SET NULL
25
+ onUpdate: CASCADE
26
+ - name: work_date
27
+ type: date
28
+ - name: hours
29
+ type: decimal
30
+ precision: 6
31
+ scale: 2
32
+ - name: description
33
+ type: text
34
+ isNullable: true
35
+ - name: approval_status
36
+ type: enum
37
+ values: [pending, approved, rejected]
38
+ default: pending
39
+ - name: deleted_at
40
+ type: datetime
41
+ isNullable: true
42
+ - type: created_at
43
+ - type: updated_at
44
+
45
+ indices:
46
+ - columns: [timesheet_id]
47
+ - columns: [project_id]
48
+ - columns: [task_id]
49
+ - columns: [work_date]
50
+ - columns: [approval_status]
51
+ - columns: [deleted_at]
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hed-hog/operations",
3
- "version": "0.0.3",
3
+ "version": "0.0.286",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "dependencies": {
@@ -9,11 +9,11 @@
9
9
  "@nestjs/core": "^11",
10
10
  "@nestjs/jwt": "^11",
11
11
  "@nestjs/mapped-types": "*",
12
- "@hed-hog/api-locale": "0.0.13",
13
12
  "@hed-hog/api": "0.0.4",
14
13
  "@hed-hog/api-pagination": "0.0.6",
15
- "@hed-hog/api-types": "0.0.1",
16
- "@hed-hog/api-prisma": "0.0.5"
14
+ "@hed-hog/api-locale": "0.0.13",
15
+ "@hed-hog/api-prisma": "0.0.5",
16
+ "@hed-hog/api-types": "0.0.1"
17
17
  },
18
18
  "exports": {
19
19
  ".": {
package/src/index.ts CHANGED
@@ -1 +1,2 @@
1
- export * from './operations.module';
1
+ export * from './operations.module';
2
+ export * from './operations.service';
@@ -1,8 +1,8 @@
1
- {
2
- "HomePage": {
3
- "title": "Operations",
4
- "description": "Manage your operations.",
5
- "breadcrumbHome": "Home",
6
- "breadcrumbCurrent": "Operations"
7
- }
8
- }
1
+ {
2
+ "HomePage": {
3
+ "title": "Operations",
4
+ "description": "Manage your operations.",
5
+ "breadcrumbHome": "Home",
6
+ "breadcrumbCurrent": "Operations"
7
+ }
8
+ }
@@ -1,8 +1,8 @@
1
- {
2
- "HomePage": {
3
- "title": "Operations",
4
- "description": "Gerencie seu operations.",
5
- "breadcrumbHome": "Inicio",
6
- "breadcrumbCurrent": "Operations"
7
- }
8
- }
1
+ {
2
+ "HomePage": {
3
+ "title": "Operations",
4
+ "description": "Gerencie seu operations.",
5
+ "breadcrumbHome": "Inicio",
6
+ "breadcrumbCurrent": "Operations"
7
+ }
8
+ }
@@ -0,0 +1,54 @@
1
+ import { Role } from '@hed-hog/api';
2
+ import { Controller, Get, Param, ParseIntPipe } from '@nestjs/common';
3
+ import { OperationsService } from './operations.service';
4
+
5
+ @Role()
6
+ @Controller('operations')
7
+ export class OperationsDataController {
8
+ constructor(private readonly operationsService: OperationsService) {}
9
+
10
+ @Get()
11
+ getDashboard() {
12
+ return this.operationsService.getDashboard();
13
+ }
14
+
15
+ @Get('contracts')
16
+ listContracts() {
17
+ return this.operationsService.listContracts();
18
+ }
19
+
20
+ @Get('contracts/:id')
21
+ getContract(@Param('id', ParseIntPipe) id: number) {
22
+ return this.operationsService.getContractById(id);
23
+ }
24
+
25
+ @Get('projects')
26
+ listProjects() {
27
+ return this.operationsService.listProjects();
28
+ }
29
+
30
+ @Get('projects/:id')
31
+ getProject(@Param('id', ParseIntPipe) id: number) {
32
+ return this.operationsService.getProjectById(id);
33
+ }
34
+
35
+ @Get('allocations')
36
+ listAllocations() {
37
+ return this.operationsService.listAllocations();
38
+ }
39
+
40
+ @Get('tasks')
41
+ listTasks() {
42
+ return this.operationsService.listTasks();
43
+ }
44
+
45
+ @Get('timesheets')
46
+ listTimesheets() {
47
+ return this.operationsService.listTimesheets();
48
+ }
49
+
50
+ @Get('approvals')
51
+ listApprovals() {
52
+ return this.operationsService.listApprovals();
53
+ }
54
+ }
@@ -0,0 +1,44 @@
1
+ import { Role } from '@hed-hog/api';
2
+ import { Controller, Get } from '@nestjs/common';
3
+ import { OperationsService } from './operations.service';
4
+
5
+ @Role()
6
+ @Controller('operations')
7
+ export class OperationsGrowthController {
8
+ constructor(private readonly operationsService: OperationsService) {}
9
+
10
+ @Get('growth')
11
+ getGrowthDashboard() {
12
+ return this.operationsService.getGrowthDashboard();
13
+ }
14
+
15
+ @Get('evaluations')
16
+ listEvaluations() {
17
+ return this.operationsService.listEvaluations();
18
+ }
19
+
20
+ @Get('goals')
21
+ listGoals() {
22
+ return this.operationsService.listGoals();
23
+ }
24
+
25
+ @Get('certifications')
26
+ listCertifications() {
27
+ return this.operationsService.listCertifications();
28
+ }
29
+
30
+ @Get('rewards')
31
+ listRewards() {
32
+ return this.operationsService.listRewards();
33
+ }
34
+
35
+ @Get('career')
36
+ listCareerPaths() {
37
+ return this.operationsService.listCareerPaths();
38
+ }
39
+
40
+ @Get('manager')
41
+ getManagerOverview() {
42
+ return this.operationsService.getManagerOverview();
43
+ }
44
+ }
@@ -1,15 +1,21 @@
1
- import { forwardRef, Module } from '@nestjs/common';
2
- import { ConfigModule } from '@nestjs/config';
3
- import { LocaleModule } from '@hed-hog/api-locale';
4
- import { PaginationModule } from '@hed-hog/api-pagination';
5
- import { PrismaModule } from '@hed-hog/api-prisma';
6
-
7
- @Module({
8
- imports: [
9
- ConfigModule.forRoot(),
10
- forwardRef(() => PaginationModule),
11
- forwardRef(() => PrismaModule),
12
- forwardRef(() => LocaleModule)
13
- ]
14
- })
15
- export class OperationsModule {}
1
+ import { LocaleModule } from '@hed-hog/api-locale';
2
+ import { PaginationModule } from '@hed-hog/api-pagination';
3
+ import { PrismaModule } from '@hed-hog/api-prisma';
4
+ import { forwardRef, Module } from '@nestjs/common';
5
+ import { ConfigModule } from '@nestjs/config';
6
+ import { OperationsDataController } from './operations-data.controller';
7
+ import { OperationsGrowthController } from './operations-growth.controller';
8
+ import { OperationsService } from './operations.service';
9
+
10
+ @Module({
11
+ imports: [
12
+ ConfigModule.forRoot(),
13
+ forwardRef(() => PaginationModule),
14
+ forwardRef(() => PrismaModule),
15
+ forwardRef(() => LocaleModule),
16
+ ],
17
+ controllers: [OperationsDataController, OperationsGrowthController],
18
+ providers: [OperationsService],
19
+ exports: [OperationsService],
20
+ })
21
+ export class OperationsModule {}
@@ -0,0 +1,137 @@
1
+ import { Injectable } from '@nestjs/common';
2
+
3
+ const operationalCollections = {
4
+ contracts: [
5
+ { id: 1, code: 'CTR-001', name: 'Northwind Retainer', status: 'active' },
6
+ { id: 2, code: 'CTR-002', name: 'BluePeak Migration', status: 'renewal' },
7
+ ],
8
+ projects: [
9
+ { id: 1, code: 'PRJ-OPS-1', name: 'Phoenix Platform Rollout', status: 'active' },
10
+ { id: 2, code: 'PRJ-OPS-2', name: 'Northwind Service Desk', status: 'at_risk' },
11
+ ],
12
+ allocations: [
13
+ { id: 1, employeeId: 1, projectId: 1, weeklyHours: 30, allocationPercent: 75 },
14
+ { id: 2, employeeId: 2, projectId: 2, weeklyHours: 20, allocationPercent: 50 },
15
+ ],
16
+ tasks: [
17
+ { id: 1, title: 'Deploy onboarding workflow', status: 'review' },
18
+ { id: 2, title: 'Refine support KPI dashboard', status: 'in_progress' },
19
+ ],
20
+ timesheets: [
21
+ { id: 1, employeeId: 1, status: 'submitted', cycleStartDate: '2026-03-09' },
22
+ { id: 2, employeeId: 2, status: 'approved', cycleStartDate: '2026-03-09' },
23
+ ],
24
+ approvals: [
25
+ { id: 1, employeeId: 1, status: 'pending', hours: 8 },
26
+ { id: 2, employeeId: 3, status: 'pending', hours: 6.5 },
27
+ ],
28
+ };
29
+
30
+ const growthCollections = {
31
+ growth: {
32
+ topSignals: ['score_events', 'career_tracks', 'goals', 'recognitions'],
33
+ note: 'Foundation endpoint for the employee growth dashboard.',
34
+ },
35
+ evaluations: [
36
+ { id: 1, employeeId: 1, cycle: '2026 H1 Growth Cycle', status: 'finalized', generatedScore: 84 },
37
+ { id: 2, employeeId: 2, cycle: '2026 Delivery Sprint Review', status: 'submitted', generatedScore: 72 },
38
+ ],
39
+ goals: [
40
+ { id: 1, employeeId: 1, title: 'Reduce rework under 5%', status: 'active', progressPercent: 68 },
41
+ { id: 2, employeeId: 2, title: 'Close Scrum certification', status: 'at_risk', progressPercent: 35 },
42
+ ],
43
+ certifications: [
44
+ { id: 1, slug: 'scrum-master-foundations', status: 'achieved' },
45
+ { id: 2, slug: 'advanced-quality-assurance', status: 'planned' },
46
+ ],
47
+ rewards: [
48
+ { id: 1, employeeId: 1, rewardType: 'bonus', status: 'granted' },
49
+ { id: 2, employeeId: 3, rewardType: 'recognition', status: 'granted' },
50
+ ],
51
+ career: [
52
+ { id: 1, track: 'Delivery', currentLevel: 'Consultant', nextLevel: 'Senior Consultant' },
53
+ { id: 2, track: 'Specialist', currentLevel: 'Specialist II', nextLevel: 'Principal Specialist' },
54
+ ],
55
+ manager: {
56
+ summary: {
57
+ promotionEligible: 2,
58
+ goalsAtRisk: 3,
59
+ pendingCertifications: 4,
60
+ },
61
+ },
62
+ };
63
+
64
+ @Injectable()
65
+ export class OperationsService {
66
+ // TODO: Replace static collections with Prisma queries after the first schema apply.
67
+ // TODO: Promotion must not be derived from score alone; score remains only a support signal.
68
+ // TODO: Certifications are supporting evidence and do not guarantee promotion on their own.
69
+ // TODO: Future readiness logic must consider individual, team, and org impact, plus time operating at the next level and calibration outcomes.
70
+ getDashboard() {
71
+ return {
72
+ module: 'operations',
73
+ operationalCollections,
74
+ growthCollections,
75
+ };
76
+ }
77
+
78
+ listContracts() {
79
+ return operationalCollections.contracts;
80
+ }
81
+
82
+ getContractById(id: number) {
83
+ return operationalCollections.contracts.find((item) => item.id === id) ?? null;
84
+ }
85
+
86
+ listProjects() {
87
+ return operationalCollections.projects;
88
+ }
89
+
90
+ getProjectById(id: number) {
91
+ return operationalCollections.projects.find((item) => item.id === id) ?? null;
92
+ }
93
+
94
+ listAllocations() {
95
+ return operationalCollections.allocations;
96
+ }
97
+
98
+ listTasks() {
99
+ return operationalCollections.tasks;
100
+ }
101
+
102
+ listTimesheets() {
103
+ return operationalCollections.timesheets;
104
+ }
105
+
106
+ listApprovals() {
107
+ return operationalCollections.approvals;
108
+ }
109
+
110
+ getGrowthDashboard() {
111
+ return growthCollections.growth;
112
+ }
113
+
114
+ listEvaluations() {
115
+ return growthCollections.evaluations;
116
+ }
117
+
118
+ listGoals() {
119
+ return growthCollections.goals;
120
+ }
121
+
122
+ listCertifications() {
123
+ return growthCollections.certifications;
124
+ }
125
+
126
+ listRewards() {
127
+ return growthCollections.rewards;
128
+ }
129
+
130
+ listCareerPaths() {
131
+ return growthCollections.career;
132
+ }
133
+
134
+ getManagerOverview() {
135
+ return growthCollections.manager;
136
+ }
137
+ }