@hed-hog/operations 0.0.294 → 0.0.296

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 (126) hide show
  1. package/dist/operations.controller.d.ts +415 -0
  2. package/dist/operations.controller.d.ts.map +1 -0
  3. package/dist/operations.controller.js +333 -0
  4. package/dist/operations.controller.js.map +1 -0
  5. package/dist/operations.module.d.ts.map +1 -1
  6. package/dist/operations.module.js +4 -3
  7. package/dist/operations.module.js.map +1 -1
  8. package/dist/operations.service.d.ts +589 -153
  9. package/dist/operations.service.d.ts.map +1 -1
  10. package/dist/operations.service.js +2229 -100
  11. package/dist/operations.service.js.map +1 -1
  12. package/hedhog/data/menu.yaml +198 -251
  13. package/hedhog/data/role.yaml +23 -14
  14. package/hedhog/data/route.yaml +317 -143
  15. package/hedhog/frontend/app/_components/collaborator-details-screen.tsx.ejs +310 -0
  16. package/hedhog/frontend/app/_components/collaborator-form-screen.tsx.ejs +631 -0
  17. package/hedhog/frontend/app/_components/contract-details-screen.tsx.ejs +132 -0
  18. package/hedhog/frontend/app/_components/contract-form-screen.tsx.ejs +558 -0
  19. package/hedhog/frontend/app/_components/project-details-screen.tsx.ejs +291 -0
  20. package/hedhog/frontend/app/_components/project-form-screen.tsx.ejs +689 -0
  21. package/hedhog/frontend/app/_lib/api.ts.ejs +32 -0
  22. package/hedhog/frontend/app/_lib/hooks/use-operations-access.ts.ejs +44 -0
  23. package/hedhog/frontend/app/_lib/types.ts.ejs +360 -0
  24. package/hedhog/frontend/app/_lib/utils/format.ts.ejs +129 -25
  25. package/hedhog/frontend/app/_lib/utils/forms.ts.ejs +14 -0
  26. package/hedhog/frontend/app/approvals/page.tsx.ejs +386 -147
  27. package/hedhog/frontend/app/collaborators/[id]/edit/page.tsx.ejs +11 -0
  28. package/hedhog/frontend/app/collaborators/[id]/page.tsx.ejs +11 -0
  29. package/hedhog/frontend/app/collaborators/new/page.tsx.ejs +5 -0
  30. package/hedhog/frontend/app/collaborators/page.tsx.ejs +261 -0
  31. package/hedhog/frontend/app/contracts/[id]/edit/page.tsx.ejs +11 -0
  32. package/hedhog/frontend/app/contracts/[id]/page.tsx.ejs +11 -108
  33. package/hedhog/frontend/app/contracts/new/page.tsx.ejs +17 -0
  34. package/hedhog/frontend/app/contracts/page.tsx.ejs +262 -181
  35. package/hedhog/frontend/app/page.tsx.ejs +319 -177
  36. package/hedhog/frontend/app/projects/[id]/edit/page.tsx.ejs +11 -0
  37. package/hedhog/frontend/app/projects/[id]/page.tsx.ejs +11 -936
  38. package/hedhog/frontend/app/projects/new/page.tsx.ejs +5 -0
  39. package/hedhog/frontend/app/projects/page.tsx.ejs +236 -1074
  40. package/hedhog/frontend/app/schedule-adjustments/page.tsx.ejs +418 -0
  41. package/hedhog/frontend/app/team/page.tsx.ejs +339 -0
  42. package/hedhog/frontend/app/time-off/page.tsx.ejs +328 -0
  43. package/hedhog/frontend/app/timesheets/page.tsx.ejs +636 -126
  44. package/hedhog/frontend/messages/en.json +648 -454
  45. package/hedhog/frontend/messages/pt.json +647 -454
  46. package/hedhog/table/operations_approval.yaml +49 -0
  47. package/hedhog/table/operations_approval_history.yaml +29 -0
  48. package/hedhog/table/{operations_employee.yaml → operations_collaborator.yaml} +67 -64
  49. package/hedhog/table/operations_collaborator_schedule_day.yaml +34 -0
  50. package/hedhog/table/operations_contract.yaml +100 -48
  51. package/hedhog/table/operations_contract_document.yaml +39 -0
  52. package/hedhog/table/operations_contract_financial_term.yaml +40 -0
  53. package/hedhog/table/operations_contract_history.yaml +27 -0
  54. package/hedhog/table/operations_contract_party.yaml +46 -0
  55. package/hedhog/table/operations_contract_revision.yaml +38 -0
  56. package/hedhog/table/operations_contract_signature.yaml +38 -0
  57. package/hedhog/table/operations_project.yaml +54 -50
  58. package/hedhog/table/{operations_allocation.yaml → operations_project_assignment.yaml} +55 -52
  59. package/hedhog/table/operations_schedule_adjustment_day.yaml +34 -0
  60. package/hedhog/table/operations_schedule_adjustment_request.yaml +53 -0
  61. package/hedhog/table/operations_time_off_request.yaml +57 -0
  62. package/hedhog/table/operations_timesheet.yaml +41 -36
  63. package/hedhog/table/operations_timesheet_entry.yaml +40 -50
  64. package/package.json +7 -6
  65. package/src/operations.controller.ts +182 -0
  66. package/src/operations.module.ts +22 -21
  67. package/src/operations.service.ts +3595 -137
  68. package/hedhog/data/operations_career_level.yaml +0 -102
  69. package/hedhog/data/operations_career_track.yaml +0 -8
  70. package/hedhog/data/operations_certification.yaml +0 -38
  71. package/hedhog/data/operations_evaluation_cycle.yaml +0 -18
  72. package/hedhog/data/operations_performance_criterion.yaml +0 -48
  73. package/hedhog/frontend/app/_components/allocation-calendar.tsx.ejs +0 -56
  74. package/hedhog/frontend/app/_components/kanban-board.tsx.ejs +0 -626
  75. package/hedhog/frontend/app/_components/timesheet-entry-dialog.tsx.ejs +0 -142
  76. package/hedhog/frontend/app/_lib/hooks/use-operations-data.ts.ejs +0 -41
  77. package/hedhog/frontend/app/_lib/hooks/use-operations-growth-data.ts.ejs +0 -63
  78. package/hedhog/frontend/app/_lib/mocks/allocations.mock.ts.ejs +0 -74
  79. package/hedhog/frontend/app/_lib/mocks/contracts.mock.ts.ejs +0 -74
  80. package/hedhog/frontend/app/_lib/mocks/operations-growth.mock.ts.ejs +0 -824
  81. package/hedhog/frontend/app/_lib/mocks/projects.mock.ts.ejs +0 -455
  82. package/hedhog/frontend/app/_lib/mocks/tasks.mock.ts.ejs +0 -117
  83. package/hedhog/frontend/app/_lib/mocks/timesheets.mock.ts.ejs +0 -84
  84. package/hedhog/frontend/app/_lib/mocks/users.mock.ts.ejs +0 -67
  85. package/hedhog/frontend/app/_lib/services/contracts.service.ts.ejs +0 -10
  86. package/hedhog/frontend/app/_lib/services/operations-growth.service.ts.ejs +0 -31
  87. package/hedhog/frontend/app/_lib/services/projects.service.ts.ejs +0 -10
  88. package/hedhog/frontend/app/_lib/services/tasks.service.ts.ejs +0 -10
  89. package/hedhog/frontend/app/_lib/services/timesheets.service.ts.ejs +0 -10
  90. package/hedhog/frontend/app/_lib/types/operations-growth.ts.ejs +0 -209
  91. package/hedhog/frontend/app/_lib/types/operations.ts.ejs +0 -156
  92. package/hedhog/frontend/app/_lib/utils/growth.ts.ejs +0 -62
  93. package/hedhog/frontend/app/_lib/utils/metrics.ts.ejs +0 -103
  94. package/hedhog/frontend/app/_lib/utils/status.ts.ejs +0 -80
  95. package/hedhog/frontend/app/allocations/page.tsx.ejs +0 -155
  96. package/hedhog/frontend/app/career/page.tsx.ejs +0 -143
  97. package/hedhog/frontend/app/certifications/page.tsx.ejs +0 -202
  98. package/hedhog/frontend/app/evaluations/page.tsx.ejs +0 -278
  99. package/hedhog/frontend/app/goals/page.tsx.ejs +0 -171
  100. package/hedhog/frontend/app/growth/page.tsx.ejs +0 -288
  101. package/hedhog/frontend/app/manager/page.tsx.ejs +0 -175
  102. package/hedhog/frontend/app/rewards/page.tsx.ejs +0 -196
  103. package/hedhog/frontend/app/tasks/page.tsx.ejs +0 -999
  104. package/hedhog/table/operations_calibration_item.yaml +0 -61
  105. package/hedhog/table/operations_calibration_session.yaml +0 -25
  106. package/hedhog/table/operations_career_level.yaml +0 -75
  107. package/hedhog/table/operations_career_track.yaml +0 -21
  108. package/hedhog/table/operations_certification.yaml +0 -48
  109. package/hedhog/table/operations_employee_certification.yaml +0 -43
  110. package/hedhog/table/operations_employee_connect.yaml +0 -61
  111. package/hedhog/table/operations_employee_evaluation.yaml +0 -113
  112. package/hedhog/table/operations_employee_evaluation_item.yaml +0 -39
  113. package/hedhog/table/operations_employee_profile.yaml +0 -80
  114. package/hedhog/table/operations_employee_skill_matrix.yaml +0 -30
  115. package/hedhog/table/operations_evaluation_cycle.yaml +0 -31
  116. package/hedhog/table/operations_goal.yaml +0 -67
  117. package/hedhog/table/operations_goal_progress.yaml +0 -31
  118. package/hedhog/table/operations_performance_criterion.yaml +0 -29
  119. package/hedhog/table/operations_promotion_readiness.yaml +0 -49
  120. package/hedhog/table/operations_promotion_recommendation.yaml +0 -63
  121. package/hedhog/table/operations_public_recognition.yaml +0 -46
  122. package/hedhog/table/operations_reward.yaml +0 -100
  123. package/hedhog/table/operations_score_event.yaml +0 -81
  124. package/hedhog/table/operations_task.yaml +0 -60
  125. package/src/operations-data.controller.ts +0 -54
  126. package/src/operations-growth.controller.ts +0 -44
@@ -1,454 +1,648 @@
1
- {
2
- "DashboardPage": {
3
- "title": "Operations Dashboard",
4
- "description": "Track delivery health, utilization, approvals, and team throughput.",
5
- "breadcrumb": "Dashboard",
6
- "cards": {
7
- "activeProjects": "Total Active Projects",
8
- "loggedHours": "Hours Logged This Month",
9
- "pendingHours": "Hours Pending Approval",
10
- "revenue": "Revenue",
11
- "utilization": "Team Utilization"
12
- },
13
- "charts": {
14
- "hoursByProject": "Hours by Project",
15
- "hoursByProjectDescription": "Logged effort grouped by active engagements.",
16
- "hoursByUser": "Hours by User",
17
- "hoursByUserDescription": "Delivery effort by consultant.",
18
- "approvalStatus": "Approval Status",
19
- "approvalStatusDescription": "Approved, pending, and rejected entries.",
20
- "weeklyTrend": "Weekly Timesheet Trend",
21
- "weeklyTrendDescription": "Recent weekly delivery cadence."
22
- },
23
- "recentTable": {
24
- "title": "Recent Timesheet Entries",
25
- "description": "Latest operational logging activity.",
26
- "user": "User",
27
- "project": "Project",
28
- "task": "Task",
29
- "hours": "Hours",
30
- "status": "Status"
31
- }
32
- },
33
- "ContractsPage": {
34
- "title": "Contracts",
35
- "description": "Review commercial agreements, caps, and linked delivery streams.",
36
- "breadcrumb": "Contracts",
37
- "tableTitle": "Contract Registry",
38
- "tableDescription": "Static mock list ready for future API pagination and filters.",
39
- "searchPlaceholder": "Search contract or client...",
40
- "filters": {
41
- "all": "All statuses",
42
- "active": "Active",
43
- "renewal": "Renewal",
44
- "expired": "Expired",
45
- "draft": "Draft"
46
- },
47
- "emptyState": {
48
- "title": "No contracts found",
49
- "description": "Adjust your search filters to view registered contracts.",
50
- "action": "Clear filters"
51
- },
52
- "columns": {
53
- "name": "Contract Name",
54
- "client": "Client",
55
- "type": "Type",
56
- "startDate": "Start Date",
57
- "endDate": "End Date",
58
- "hourRate": "Hour Rate",
59
- "hourLimit": "Hour Limit",
60
- "status": "Status"
61
- }
62
- },
63
- "ProjectsPage": {
64
- "title": "Projects",
65
- "description": "Navigate portfolio health, progress, and staffing at a glance.",
66
- "breadcrumb": "Projects",
67
- "searchPlaceholder": "Search project or client...",
68
- "budget": "Budget",
69
- "dateRange": "Date Range",
70
- "view": {
71
- "table": "Table view",
72
- "grid": "Grid view"
73
- },
74
- "actions": {
75
- "create": "New Project",
76
- "edit": "Edit",
77
- "save": "Save Project"
78
- },
79
- "stats": {
80
- "totalProjects": "Total Projects",
81
- "activeProjects": "Active Projects",
82
- "avgProgress": "Average Progress",
83
- "totalHours": "Total Logged Hours"
84
- },
85
- "filters": {
86
- "statusAll": "All statuses",
87
- "progressAll": "Any progress",
88
- "progress0To25": "0% to 25%",
89
- "progress26To50": "26% to 50%",
90
- "progress51To75": "51% to 75%",
91
- "progress76To100": "76% to 100%"
92
- },
93
- "statusOptions": {
94
- "planning": "Planning",
95
- "active": "Active",
96
- "atRisk": "At Risk",
97
- "paused": "Paused",
98
- "completed": "Completed"
99
- },
100
- "columns": {
101
- "project": "Project",
102
- "client": "Client",
103
- "status": "Status",
104
- "progress": "Progress",
105
- "team": "Team",
106
- "hours": "Hours",
107
- "dates": "Dates",
108
- "budget": "Budget",
109
- "actions": "Actions"
110
- },
111
- "emptyState": {
112
- "title": "No projects match your current filters",
113
- "description": "Try broadening search criteria to view projects.",
114
- "action": "Clear filters"
115
- },
116
- "sheet": {
117
- "createTitle": "Create project",
118
- "createDescription": "Add a new project to your operations portfolio.",
119
- "editTitle": "Edit project",
120
- "editDescription": "Adjust project details and keep delivery planning updated."
121
- },
122
- "form": {
123
- "nameLabel": "Project name",
124
- "namePlaceholder": "Ex: Atlas CRM Expansion",
125
- "clientLabel": "Client",
126
- "clientPlaceholder": "Ex: Atlas Logistics",
127
- "contractLabel": "Contract",
128
- "contractPlaceholder": "Select a linked contract",
129
- "statusLabel": "Status",
130
- "statusPlaceholder": "Select a status",
131
- "progressLabel": "Progress (%)",
132
- "progressPlaceholder": "Ex: 45",
133
- "hoursLabel": "Logged hours",
134
- "hoursPlaceholder": "Ex: 120",
135
- "budgetLabel": "Budget",
136
- "budgetPlaceholder": "Ex: 98000",
137
- "startDateLabel": "Start date",
138
- "startDatePlaceholder": "Select start date",
139
- "endDateLabel": "End date",
140
- "endDatePlaceholder": "Select end date",
141
- "invalidDateRange": "End date must be after start date.",
142
- "teamMembersLabel": "Team members",
143
- "teamMembersDescription": "Select at least one contributor for the project.",
144
- "descriptionLabel": "Project description",
145
- "descriptionHint": "Describe project scope, deliverables, and operational context."
146
- },
147
- "toasts": {
148
- "created": "Project created successfully.",
149
- "updated": "Project updated successfully."
150
- },
151
- "progress": "Progress",
152
- "teamMembers": "Team Members",
153
- "hoursLogged": "Hours Logged",
154
- "startDate": "Start Date",
155
- "endDate": "End Date"
156
- },
157
- "ProjectDetailsPage": {
158
- "notFound": "Project not found.",
159
- "breadcrumb": "Project Details",
160
- "description": "Detailed project view for {client} with execution, team, finance, and governance data.",
161
- "tabs": {
162
- "overview": "Overview",
163
- "execution": "Execution",
164
- "team": "Team",
165
- "finance": "Finance",
166
- "timesheets": "Timesheets",
167
- "governance": "Governance"
168
- },
169
- "stats": {
170
- "progress": "Progress",
171
- "actualCost": "Actual Cost",
172
- "remainingBudget": "Remaining Budget",
173
- "throughput": "Throughput"
174
- },
175
- "projectStatus": {
176
- "planning": "Planning",
177
- "active": "Active",
178
- "at-risk": "At Risk",
179
- "paused": "Paused",
180
- "completed": "Completed"
181
- },
182
- "health": {
183
- "scope": "Scope",
184
- "schedule": "Schedule",
185
- "budget": "Budget",
186
- "quality": "Quality"
187
- },
188
- "healthStatus": {
189
- "excellent": "Excellent",
190
- "stable": "Stable",
191
- "attention": "Attention",
192
- "critical": "Critical"
193
- },
194
- "riskSeverity": {
195
- "low": "Low",
196
- "medium": "Medium",
197
- "high": "High"
198
- },
199
- "riskStatus": {
200
- "open": "Open",
201
- "mitigated": "Mitigated",
202
- "accepted": "Accepted"
203
- },
204
- "milestoneStatus": {
205
- "done": "Done",
206
- "next": "Next",
207
- "delayed": "Delayed"
208
- },
209
- "dependencyType": {
210
- "internal": "Internal",
211
- "client": "Client",
212
- "vendor": "Vendor"
213
- },
214
- "dependencyStatus": {
215
- "on-track": "On Track",
216
- "watch": "Watch",
217
- "blocked": "Blocked"
218
- },
219
- "approvals": {
220
- "approved": "Approved",
221
- "pending": "Pending",
222
- "rejected": "Rejected"
223
- },
224
- "taskStatus": {
225
- "backlog": "Backlog",
226
- "todo": "To Do",
227
- "inProgress": "In Progress",
228
- "review": "Review",
229
- "done": "Done"
230
- },
231
- "hero": {
232
- "progress": "Progress",
233
- "budget": "Budget",
234
- "hours": "Logged Hours",
235
- "scheduleVariance": "Schedule Variance"
236
- },
237
- "labels": {
238
- "health": "Health",
239
- "risks": "Risks",
240
- "period": "Period",
241
- "contract": "Contract",
242
- "teamSize": "Team: {count} people",
243
- "owner": "Owner",
244
- "impact": "Impact",
245
- "mitigation": "Mitigation",
246
- "type": "Type",
247
- "totalTasks": "Total tasks",
248
- "estimatedHours": "Estimated hours"
249
- },
250
- "sections": {
251
- "progressTrend": "Progress Trend",
252
- "progressTrendDescription": "Planned versus actual progress trend by month.",
253
- "health": "Project Health",
254
- "healthDescription": "Executive health view by delivery dimension.",
255
- "milestones": "Milestones",
256
- "milestonesDescription": "Timeline of key milestones and deliverables.",
257
- "risks": "Risks and Mitigation",
258
- "risksDescription": "Active risks, impacts, and mitigation plans.",
259
- "taskDistribution": "Task Distribution",
260
- "taskDistributionDescription": "Task volume by workflow status.",
261
- "kanban": "Kanban",
262
- "kanbanDescription": "Current team workflow board.",
263
- "taskTable": "Detailed Backlog",
264
- "taskTableDescription": "Tasks, owners, due dates, and estimates.",
265
- "teamAllocation": "Team Allocation",
266
- "teamAllocationDescription": "Capacity and utilization by contributor.",
267
- "teamCost": "Team Cost Composition",
268
- "teamCostDescription": "Distribution of hourly rates by allocated member.",
269
- "budgetStatus": "Budget Status",
270
- "budgetStatusDescription": "Consolidated current financial consumption.",
271
- "costForecast": "Cost Forecast",
272
- "costForecastDescription": "Planned versus actual cost over time.",
273
- "approvalsDistribution": "Approvals Distribution",
274
- "approvalsDistributionDescription": "Overview of timesheet approval statuses.",
275
- "timesheets": "Timesheet Entries",
276
- "timesheetsDescription": "Detailed project timesheet records.",
277
- "governance": "Governance and Contract",
278
- "governanceDescription": "Contract and operating governance details.",
279
- "dependencies": "Dependencies",
280
- "dependenciesDescription": "Internal and external delivery dependencies.",
281
- "decisions": "Decisions",
282
- "decisionsDescription": "Governance decision log.",
283
- "nextActions": "Next Actions",
284
- "nextActionsDescription": "Immediate actions to keep delivery health on track."
285
- },
286
- "table": {
287
- "task": "Task",
288
- "assignee": "Assignee",
289
- "dueDate": "Due Date",
290
- "estimate": "Estimate",
291
- "status": "Status",
292
- "member": "Member",
293
- "role": "Role",
294
- "hourRate": "Hour Rate",
295
- "utilization": "Utilization",
296
- "date": "Date",
297
- "user": "User",
298
- "hours": "Hours",
299
- "description": "Description"
300
- },
301
- "finance": {
302
- "totalBudget": "Total Budget",
303
- "actualCost": "Actual Cost",
304
- "remainingBudget": "Remaining Budget",
305
- "budgetConsumption": "Budget Consumption"
306
- },
307
- "charts": {
308
- "plannedProgress": "Planned Progress",
309
- "actualProgress": "Actual Progress",
310
- "plannedCost": "Planned Cost",
311
- "actualCost": "Actual Cost"
312
- },
313
- "governance": {
314
- "client": "Client",
315
- "contract": "Contract",
316
- "sla": "SLA",
317
- "billingRules": "Billing Rules"
318
- }
319
- },
320
- "AllocationsPage": {
321
- "title": "Allocations",
322
- "description": "Track weekly capacity, staffing coverage, and allocation windows.",
323
- "breadcrumb": "Allocations",
324
- "tableTitle": "Allocation Matrix",
325
- "tableDescription": "Delivery allocation snapshot by user and project.",
326
- "searchPlaceholder": "Search user or project...",
327
- "emptyState": {
328
- "title": "No allocations found",
329
- "description": "Try a different search to view team allocations.",
330
- "action": "Clear search"
331
- },
332
- "columns": {
333
- "user": "User",
334
- "role": "Role",
335
- "project": "Project",
336
- "weeklyHours": "Weekly Hours",
337
- "allocation": "Allocation %",
338
- "startDate": "Start Date",
339
- "endDate": "End Date"
340
- },
341
- "calendarTitle": "Allocation Calendar View",
342
- "calendarDescription": "Mock weekly planner for future scheduling APIs."
343
- },
344
- "TasksPage": {
345
- "title": "Tasks / Kanban",
346
- "description": "Trello-inspired execution board with drag-and-drop, keyboard shortcuts, and mock data.",
347
- "breadcrumb": "Tasks",
348
- "boardTitle": "Kanban Board",
349
- "boardDescription": "Operational work items grouped by delivery stage.",
350
- "searchPlaceholder": "Search title, project, label, or description...",
351
- "newTask": "New Task",
352
- "openCommands": "Commands",
353
- "applyFilters": "Search",
354
- "clearFilters": "Clear",
355
- "archiveSelection": "Archive selected",
356
- "openFocused": "Open focused",
357
- "selectedCount": "{count} selected",
358
- "newTaskTitle": "New planning task",
359
- "newTaskDescription": "Task created from keyboard shortcut in mock mode.",
360
- "filters": {
361
- "assignee": "Assignee",
362
- "allAssignees": "All assignees",
363
- "unassigned": "Unassigned",
364
- "project": "Project",
365
- "allProjects": "All projects"
366
- },
367
- "stats": {
368
- "totalTasks": "Total active",
369
- "inProgress": "In progress",
370
- "review": "In review",
371
- "done": "Done",
372
- "critical": "High priority"
373
- },
374
- "keyboardMode": {
375
- "enabled": "Keyboard drag enabled",
376
- "disabled": "Keyboard drag disabled"
377
- },
378
- "shortcuts": {
379
- "create": "Create task",
380
- "focusSearch": "Focus search",
381
- "toggleKeyboardDrag": "Toggle keyboard drag",
382
- "openTask": "Open focused task",
383
- "archive": "Archive selection",
384
- "navigate": "Navigate cards"
385
- },
386
- "commands": {
387
- "title": "Task Commands",
388
- "description": "Run quick actions without leaving the board.",
389
- "placeholder": "Type a command or jump to an action...",
390
- "empty": "No command found.",
391
- "actions": "Actions",
392
- "newTask": "Create a new mock task",
393
- "enableKeyboardDrag": "Enable keyboard drag mode",
394
- "disableKeyboardDrag": "Disable keyboard drag mode",
395
- "archiveSelected": "Archive selected cards",
396
- "openFocused": "Open focused task details"
397
- },
398
- "empty": {
399
- "title": "No visible tasks",
400
- "description": "Your current filters removed all cards from the board. Clear filters or create a new task."
401
- },
402
- "detail": {
403
- "descriptionLabel": "Description",
404
- "priority": "Priority",
405
- "estimate": "Estimate",
406
- "labels": "Labels",
407
- "quickActions": "Quick status actions"
408
- }
409
- },
410
- "TimesheetsPage": {
411
- "title": "Timesheets",
412
- "description": "Manage weekly entries, summaries, and approvals with a mock-first flow.",
413
- "breadcrumb": "Timesheets",
414
- "summary": {
415
- "totalHours": "Total Hours",
416
- "dailyTotals": "Daily Totals",
417
- "weeklyTotal": "Weekly Total"
418
- },
419
- "gridTitle": "Weekly Timesheet Grid",
420
- "gridDescription": "Entries are static for now but use a replaceable service layer.",
421
- "searchPlaceholder": "Search user, project, task, or description...",
422
- "columns": {
423
- "date": "Date",
424
- "user": "User",
425
- "project": "Project",
426
- "task": "Task",
427
- "hours": "Hours",
428
- "description": "Description",
429
- "status": "Status"
430
- }
431
- },
432
- "ApprovalsPage": {
433
- "title": "Approvals",
434
- "description": "Manager queue for timesheet review and approval decisions.",
435
- "breadcrumb": "Approvals",
436
- "cards": {
437
- "pending": "Pending",
438
- "approved": "Approved",
439
- "rejected": "Rejected"
440
- },
441
- "queueTitle": "Approval Queue",
442
- "queueDescription": "Static approval actions change local UI state only.",
443
- "searchPlaceholder": "Search user, project, or description...",
444
- "columns": {
445
- "user": "User",
446
- "project": "Project",
447
- "date": "Date",
448
- "hours": "Hours",
449
- "description": "Description",
450
- "status": "Status",
451
- "actions": "Actions"
452
- }
453
- }
454
- }
1
+ {
2
+ "Common": {
3
+ "actions": {
4
+ "refresh": "Refresh",
5
+ "create": "Create",
6
+ "back": "Back",
7
+ "edit": "Edit",
8
+ "openContract": "Open contract",
9
+ "activate": "Activate",
10
+ "deactivate": "Deactivate",
11
+ "save": "Save",
12
+ "addLine": "Add line",
13
+ "approve": "Approve",
14
+ "reject": "Reject",
15
+ "cancel": "Cancel"
16
+ },
17
+ "filters": {
18
+ "allStatuses": "All statuses",
19
+ "allTypes": "All types"
20
+ },
21
+ "labels": {
22
+ "notAvailable": "Not available",
23
+ "notAssigned": "Not assigned",
24
+ "collaborator": "Collaborator",
25
+ "collaboratorType": "Type",
26
+ "department": "Department",
27
+ "supervisor": "Supervisor",
28
+ "weeklyCapacity": "Weekly capacity",
29
+ "joinedAt": "Joined at",
30
+ "leftAt": "Left at",
31
+ "actions": "Actions",
32
+ "status": "Status",
33
+ "project": "Project",
34
+ "contract": "Contract",
35
+ "contractStatus": "Contract status",
36
+ "contractCategory": "Contract category",
37
+ "manager": "Manager",
38
+ "progress": "Progress",
39
+ "timeline": "Timeline",
40
+ "budget": "Budget",
41
+ "teamSize": "Team size",
42
+ "client": "Client",
43
+ "billingModel": "Billing model",
44
+ "accountManager": "Account manager",
45
+ "projectCount": "Project count",
46
+ "entries": "Entries",
47
+ "totalHours": "Total hours",
48
+ "approver": "Approver",
49
+ "noNotes": "No notes",
50
+ "lines": "lines",
51
+ "unassigned": "Unassigned",
52
+ "viewOnly": "View only",
53
+ "week": "Week",
54
+ "weekStart": "Week start",
55
+ "weekEnd": "Week end",
56
+ "notes": "Notes",
57
+ "projectAssignment": "Project assignment",
58
+ "activity": "Task / activity",
59
+ "description": "Description",
60
+ "workDate": "Work date",
61
+ "hours": "Hours",
62
+ "days": "Days",
63
+ "reason": "Reason",
64
+ "requestType": "Request type",
65
+ "requestScope": "Request scope",
66
+ "schedule": "Schedule",
67
+ "weeklySchedule": "Weekly schedule",
68
+ "workingDay": "Working day",
69
+ "dayOff": "Day off",
70
+ "requester": "Requester",
71
+ "submittedAt": "Submitted at",
72
+ "noteOptional": "Optional note",
73
+ "activeAssignments": "Active assignments",
74
+ "pendingApprovals": "Pending approvals",
75
+ "startDate": "Start date",
76
+ "endDate": "End date",
77
+ "monthlyHourCap": "Monthly hour cap"
78
+ ,
79
+ "title": "Title",
80
+ "role": "Role",
81
+ "total": "Total",
82
+ "pending": "Pending",
83
+ "approved": "Approved"
84
+ },
85
+ "states": {
86
+ "emptyTitle": "No records found",
87
+ "emptyDescription": "Adjust the current filters or create a new record.",
88
+ "noAccessTitle": "Access required"
89
+ }
90
+ },
91
+ "DashboardPage": {
92
+ "title": "Operations Dashboard",
93
+ "description": "Monitor delivery, requests, and team approvals from one place.",
94
+ "breadcrumb": "Dashboard",
95
+ "cards": {
96
+ "projects": "Visible projects",
97
+ "projectsDescription": "{active} active right now",
98
+ "timesheets": "Visible timesheets",
99
+ "timesheetsDescription": "{pending} waiting for approval",
100
+ "timeOff": "Time-off requests",
101
+ "timeOffDescription": "Approved, pending, and rejected requests",
102
+ "approvals": "Pending approvals",
103
+ "approvalsDescription": "Items that still need a supervisor decision"
104
+ },
105
+ "actions": {
106
+ "openTimesheets": "Open timesheets"
107
+ },
108
+ "scope": {
109
+ "title": "Access scope",
110
+ "description": "The dashboard automatically follows your collaborator, supervisor, or director view.",
111
+ "roleScope": "Role scope",
112
+ "collaborator": "Linked collaborator",
113
+ "teamSize": "Direct reports"
114
+ },
115
+ "recentTimesheets": {
116
+ "title": "Recent timesheets",
117
+ "description": "Latest weekly records visible to your role.",
118
+ "empty": "No timesheets are available yet."
119
+ },
120
+ "nextSteps": {
121
+ "title": "What you can do next",
122
+ "description": "Common workforce operations actions available in this module.",
123
+ "submitTimesheet": "Create or submit your weekly timesheet for review.",
124
+ "requestTimeOff": "Open a new vacation or time-off request.",
125
+ "adjustSchedule": "Send a weekly schedule adjustment for approval."
126
+ },
127
+ "team": {
128
+ "title": "Team snapshot",
129
+ "description": "Direct-report visibility for supervisors and directors.",
130
+ "members": "Team members",
131
+ "projects": "Visible projects",
132
+ "pendingApprovals": "Pending approvals",
133
+ "assignments": "assignments",
134
+ "awaitingReview": "awaiting review",
135
+ "empty": "No direct reports are linked to this supervisor yet.",
136
+ "collaboratorMessage": "Supervisor and director roles unlock the team operational overview."
137
+ }
138
+ },
139
+ "CollaboratorsPage": {
140
+ "title": "Collaborators",
141
+ "description": "Maintain operational collaborator profiles, reporting lines, and capacity.",
142
+ "breadcrumb": "Collaborators",
143
+ "searchPlaceholder": "Search collaborator, code, department, or title...",
144
+ "profileTitle": "My collaborator profile",
145
+ "profileDescription": "Self-service view of the operational profile linked to your user.",
146
+ "emptyDescription": "No collaborator records match the current filters.",
147
+ "sheet": {
148
+ "createTitle": "Create collaborator",
149
+ "editTitle": "Edit collaborator",
150
+ "description": "Create or update the workforce profile used across projects, contracts, and approvals."
151
+ },
152
+ "form": {
153
+ "userId": "User ID",
154
+ "code": "Code",
155
+ "displayName": "Display name",
156
+ "department": "Department",
157
+ "title": "Title",
158
+ "levelLabel": "Level label",
159
+ "weeklyCapacityHours": "Weekly capacity hours",
160
+ "notes": "Notes"
161
+ },
162
+ "messages": {
163
+ "userRequired": "A user ID is required for new collaborators.",
164
+ "requiredFields": "Code and display name are required.",
165
+ "saveSuccess": "Collaborator saved successfully.",
166
+ "saveError": "Unable to save the collaborator.",
167
+ "statusSuccess": "Collaborator status updated successfully.",
168
+ "statusError": "Unable to update collaborator status."
169
+ }
170
+ },
171
+ "CollaboratorFormPage": {
172
+ "newTitle": "New Collaborator",
173
+ "editTitle": "Edit Collaborator",
174
+ "breadcrumb": "Collaborator Form",
175
+ "description": "Register collaborators with the right employment profile and optionally generate a draft contract from the hiring flow.",
176
+ "noAccessDescription": "Director permissions are required to manage collaborator registration.",
177
+ "loading": "Loading collaborator data...",
178
+ "sections": {
179
+ "basicInfo": "Basic info",
180
+ "basicInfoDescription": "Core identity and profile data used across operations.",
181
+ "employmentInfo": "Employment info",
182
+ "employmentInfoDescription": "Choose the collaborator type, lifecycle status, and start dates.",
183
+ "supervisor": "Supervisor assignment",
184
+ "supervisorDescription": "Link the direct supervisor used for team visibility and approvals.",
185
+ "contract": "Compensation and contract draft",
186
+ "contractDescription": "Capture baseline contract data and choose whether a hiring-origin draft should be created automatically.",
187
+ "schedule": "Default weekly schedule",
188
+ "scheduleDescription": "Define the expected recurring work schedule used by operations and approvals."
189
+ },
190
+ "fields": {
191
+ "userId": "User ID",
192
+ "code": "Code",
193
+ "displayName": "Display name",
194
+ "department": "Department",
195
+ "title": "Role / position",
196
+ "levelLabel": "Level",
197
+ "notes": "Notes",
198
+ "collaboratorType": "Collaborator type",
199
+ "weeklyCapacityHours": "Weekly workload",
200
+ "compensationAmount": "Compensation amount",
201
+ "contractDescription": "Contract draft notes",
202
+ "autoGenerateContractDraft": "Generate contract draft automatically",
203
+ "autoGenerateContractDraftDescription": "Creates a related draft contract classified from the collaborator type and linked to the hiring origin."
204
+ },
205
+ "messages": {
206
+ "userRequired": "A user ID is required for new collaborators.",
207
+ "requiredFields": "Code and display name are required.",
208
+ "createSuccess": "Collaborator created successfully.",
209
+ "createError": "Unable to create the collaborator.",
210
+ "updateSuccess": "Collaborator updated successfully.",
211
+ "updateError": "Unable to update the collaborator."
212
+ }
213
+ },
214
+ "CollaboratorDetailsPage": {
215
+ "title": "Collaborator Details",
216
+ "breadcrumb": "Collaborator Details",
217
+ "description": "Review operational collaborator information, related contracts, assignments, schedule, and request summaries.",
218
+ "notFound": "The requested collaborator could not be found or is not visible in your access scope.",
219
+ "cards": {
220
+ "timesheets": "Timesheets",
221
+ "timesheetsDescription": "{pending} pending review",
222
+ "loggedHours": "Logged hours",
223
+ "loggedHoursDescription": "Total approved and draft hours recorded so far.",
224
+ "timeOff": "Time-off requests",
225
+ "timeOffDescription": "{pending} pending request(s)",
226
+ "assignments": "Project assignments",
227
+ "assignmentsDescription": "Active and historical project links."
228
+ },
229
+ "sections": {
230
+ "profile": "Profile",
231
+ "primaryContract": "Related contracts",
232
+ "projects": "Assigned projects",
233
+ "projectsDescription": "Projects currently or previously linked to this collaborator.",
234
+ "schedule": "Weekly schedule",
235
+ "scheduleDescription": "Default schedule currently stored for this collaborator.",
236
+ "timeOff": "Time off summary",
237
+ "timeOffDescription": "Request counts visible from the collaborator history.",
238
+ "scheduleAdjustments": "Schedule adjustments",
239
+ "scheduleAdjustmentsDescription": "Recent schedule adjustment requests created by this collaborator."
240
+ },
241
+ "noContracts": "No related contracts are linked to this collaborator yet.",
242
+ "noProjects": "No projects are assigned to this collaborator yet.",
243
+ "noScheduleAdjustments": "No schedule adjustment requests were found."
244
+ },
245
+ "ProjectsPage": {
246
+ "title": "Projects",
247
+ "description": "Track client projects and service engagements connected to staffing, delivery, and contracts.",
248
+ "breadcrumb": "Projects",
249
+ "searchPlaceholder": "Search project, client, manager, or contract...",
250
+ "emptyDescription": "No projects match the current filters.",
251
+ "actions": {
252
+ "archive": "Archive"
253
+ },
254
+ "sheet": {
255
+ "createTitle": "Create project",
256
+ "editTitle": "Edit project",
257
+ "description": "Create or update a delivery project used by timesheets and team visibility."
258
+ },
259
+ "form": {
260
+ "code": "Code",
261
+ "name": "Project name",
262
+ "clientName": "Client name",
263
+ "deliveryModel": "Delivery model",
264
+ "summary": "Summary"
265
+ },
266
+ "messages": {
267
+ "requiredFields": "Project code and name are required.",
268
+ "saveSuccess": "Project saved successfully.",
269
+ "saveError": "Unable to save the project.",
270
+ "statusSuccess": "Project status updated successfully.",
271
+ "statusError": "Unable to update project status."
272
+ }
273
+ },
274
+ "ProjectFormPage": {
275
+ "newTitle": "New Project",
276
+ "editTitle": "Edit Project",
277
+ "breadcrumb": "Project Form",
278
+ "description": "Register client projects or service engagements and optionally generate a related draft contract from the project flow.",
279
+ "noAccessDescription": "Director permissions are required to manage projects.",
280
+ "loading": "Loading project data...",
281
+ "sections": {
282
+ "basicInfo": "Basic project info",
283
+ "basicInfoDescription": "Define the client-facing engagement and operational summary.",
284
+ "governance": "Responsible and dates",
285
+ "governanceDescription": "Set the project owner, lifecycle status, and date range.",
286
+ "team": "Team assignment",
287
+ "teamDescription": "Select the collaborators that should start linked to this project.",
288
+ "financials": "Financial and contract basis",
289
+ "financialsDescription": "Baseline data used for project controls and draft contract creation.",
290
+ "contract": "Contract generation settings",
291
+ "contractDescription": "Choose whether to reuse an existing contract or generate a project-origin draft."
292
+ },
293
+ "fields": {
294
+ "code": "Project code",
295
+ "name": "Project name",
296
+ "clientName": "Client name",
297
+ "deliveryModel": "Delivery model",
298
+ "summary": "Operational summary",
299
+ "roleLabel": "Role / responsibility",
300
+ "weeklyHours": "Weekly hours",
301
+ "allocationPercent": "Allocation %",
302
+ "contractCode": "Draft contract code",
303
+ "contractName": "Draft contract name",
304
+ "contractDescription": "Draft contract notes",
305
+ "autoGenerateContractDraft": "Generate contract draft automatically",
306
+ "autoGenerateContractDraftDescription": "Creates a draft project/service contract with originType client_project linked to this project.",
307
+ "existingContractSelected": "An existing contract is already selected for this project."
308
+ },
309
+ "messages": {
310
+ "requiredFields": "Project code, project name, and client name are required.",
311
+ "createSuccess": "Project created successfully.",
312
+ "createError": "Unable to create the project.",
313
+ "updateSuccess": "Project updated successfully.",
314
+ "updateError": "Unable to update the project.",
315
+ "currentContractStatus": "Current related contract status: {status}"
316
+ }
317
+ },
318
+ "ProjectDetailsPage": {
319
+ "title": "Project Details",
320
+ "breadcrumb": "Project Details",
321
+ "description": "Review project delivery data, staffing, related contract, timesheet activity, and operational indicators.",
322
+ "notFound": "The requested project could not be found or is not visible in your access scope.",
323
+ "cards": {
324
+ "teamSize": "Team size",
325
+ "teamSizeDescription": "Collaborators currently linked to this project.",
326
+ "timesheets": "Timesheets",
327
+ "timesheetsDescription": "{pending} pending review",
328
+ "loggedHours": "Logged hours",
329
+ "loggedHoursDescription": "Total hours linked to this project.",
330
+ "allocation": "Average allocation",
331
+ "allocationDescription": "Average assignment allocation across linked collaborators."
332
+ },
333
+ "sections": {
334
+ "overview": "Overview",
335
+ "contract": "Related contract",
336
+ "team": "Assigned collaborators",
337
+ "teamDescription": "Initial and ongoing staffing linked to this project.",
338
+ "indicators": "Operational indicators",
339
+ "indicatorsDescription": "Current project staffing and delivery metrics."
340
+ },
341
+ "indicators": {
342
+ "activeAssignments": "Active assignments",
343
+ "billableAssignments": "Billable assignments",
344
+ "averageAllocation": "Average allocation",
345
+ "totalWeeklyHours": "Total weekly hours"
346
+ },
347
+ "noContract": "No related contract is linked to this project yet.",
348
+ "noAssignments": "No collaborators are assigned to this project yet."
349
+ },
350
+ "ContractsPage": {
351
+ "title": "Contracts",
352
+ "description": "Central registry for manual and business-origin contracts, lifecycle status, documents, and financial oversight.",
353
+ "breadcrumb": "Contracts",
354
+ "searchPlaceholder": "Search contract, party, client, type, or code...",
355
+ "emptyDescription": "No contracts match the current filters.",
356
+ "columns": {
357
+ "title": "Title",
358
+ "code": "Code",
359
+ "type": "Type",
360
+ "origin": "Origin",
361
+ "party": "Main related party",
362
+ "signatureStatus": "Signature status",
363
+ "active": "Active",
364
+ "financials": "Financial summary"
365
+ },
366
+ "actions": {
367
+ "duplicate": "Duplicate",
368
+ "archive": "Archive"
369
+ },
370
+ "filters": {
371
+ "originType": "Origin type"
372
+ },
373
+ "messages": {
374
+ "statusSuccess": "Contract status updated successfully.",
375
+ "statusError": "Unable to update contract status.",
376
+ "uploadSuccess": "Contract PDF uploaded successfully.",
377
+ "uploadError": "Unable to upload the contract PDF.",
378
+ "noPdf": "No PDF is currently available for this contract."
379
+ }
380
+ },
381
+ "ContractFormPage": {
382
+ "newTitle": "New Contract",
383
+ "editTitle": "Edit Contract",
384
+ "duplicateTitle": "Duplicate Contract",
385
+ "breadcrumb": "Contract Form",
386
+ "description": "Create or update contracts manually while managing parties, signatures, financials, revisions, documents, and editor content.",
387
+ "noAccessDescription": "Director permissions are required to manage contracts.",
388
+ "loading": "Loading contract data...",
389
+ "tabs": {
390
+ "overview": "Overview",
391
+ "parties": "Parties",
392
+ "signatures": "Signatures",
393
+ "financials": "Financials",
394
+ "documents": "Documents",
395
+ "revisions": "Revisions",
396
+ "editor": "Editor"
397
+ },
398
+ "sections": {
399
+ "overview": "Overview",
400
+ "overviewDescription": "Core registry, lifecycle, origin, and ownership fields.",
401
+ "parties": "Parties",
402
+ "partiesDescription": "Main people and companies related to this contract.",
403
+ "signatures": "Signatures",
404
+ "signaturesDescription": "Signer roster and signature progress.",
405
+ "financials": "Financial terms",
406
+ "financialsDescription": "Track values, revenues, payments, and fines.",
407
+ "documents": "Documents",
408
+ "documentsDescription": "Upload or replace the current contract PDF.",
409
+ "revisions": "Amendments / renewals",
410
+ "revisionsDescription": "Track addendums, amendments, and renewals.",
411
+ "editor": "Contract editor",
412
+ "editorDescription": "Edit the contract content in rich text.",
413
+ "preview": "Preview",
414
+ "previewDescription": "Live preview of the rich text contract content."
415
+ },
416
+ "fields": {
417
+ "code": "Code",
418
+ "name": "Contract title",
419
+ "clientName": "Client name",
420
+ "contractCategory": "Category",
421
+ "contractType": "Type",
422
+ "originType": "Origin type",
423
+ "originId": "Origin ID",
424
+ "signatureStatus": "Signature status",
425
+ "isActive": "Active contract",
426
+ "isActiveDescription": "Use this to deactivate or reactivate the contract without deleting its registry entry.",
427
+ "budgetAmount": "Budget amount",
428
+ "monthlyHourCap": "Monthly hour cap",
429
+ "partyDisplayName": "Party name",
430
+ "partyRole": "Party role",
431
+ "partyType": "Party type",
432
+ "documentNumber": "Document number",
433
+ "email": "Email",
434
+ "phone": "Phone",
435
+ "isPrimaryParty": "Primary related party",
436
+ "signerName": "Signer name",
437
+ "signerRole": "Signer role",
438
+ "signerEmail": "Signer email",
439
+ "signatureItemStatus": "Signature status",
440
+ "financialLabel": "Financial label",
441
+ "termType": "Financial type",
442
+ "amount": "Amount",
443
+ "recurrence": "Recurrence",
444
+ "dueDay": "Due day",
445
+ "notes": "Notes",
446
+ "revisionTitle": "Revision title",
447
+ "revisionType": "Revision type",
448
+ "revisionStatus": "Revision status",
449
+ "summary": "Summary"
450
+ },
451
+ "messages": {
452
+ "requiredFields": "Code, contract title, and client name are required.",
453
+ "createSuccess": "Contract created successfully.",
454
+ "createError": "Unable to create the contract.",
455
+ "updateSuccess": "Contract updated successfully.",
456
+ "updateError": "Unable to update the contract.",
457
+ "pdfHint": "Upload a PDF to attach it as the current contract document.",
458
+ "pdfReady": "PDF ready to save: {name}"
459
+ }
460
+ },
461
+ "ContractDetailsPage": {
462
+ "title": "Contract Details",
463
+ "breadcrumb": "Contract Details",
464
+ "description": "Review the contract registry entry, related parties, signatures, financials, documents, revisions, and audit history.",
465
+ "notFound": "The requested contract could not be found or is not visible in your access scope.",
466
+ "tabs": {
467
+ "overview": "Overview",
468
+ "parties": "Parties",
469
+ "signatures": "Signatures",
470
+ "financials": "Financials",
471
+ "documents": "Documents",
472
+ "revisions": "Revisions",
473
+ "history": "History"
474
+ },
475
+ "sections": {
476
+ "overview": "Overview",
477
+ "parties": "Parties",
478
+ "signatures": "Signatures",
479
+ "financials": "Financials",
480
+ "documents": "Documents",
481
+ "revisions": "Amendments / renewals",
482
+ "history": "History / Audit"
483
+ },
484
+ "actions": {
485
+ "downloadPdf": "Download PDF",
486
+ "download": "Download"
487
+ },
488
+ "labels": {
489
+ "origin": "Origin",
490
+ "mainParty": "Main related party",
491
+ "contractType": "Contract type",
492
+ "signatureStatus": "Signature status",
493
+ "activeState": "Active state",
494
+ "active": "Active",
495
+ "inactive": "Inactive",
496
+ "partyRole": "Party role",
497
+ "partyType": "Party type",
498
+ "documentNumber": "Document number",
499
+ "signer": "Signer",
500
+ "signedAt": "Signed at",
501
+ "value": "Value",
502
+ "payment": "Payments",
503
+ "revenue": "Revenue",
504
+ "fine": "Fines",
505
+ "revision": "Revision"
506
+ },
507
+ "states": {
508
+ "noParties": "No parties are linked to this contract yet.",
509
+ "noSignatures": "No signatures are registered yet.",
510
+ "noDocuments": "No contract documents are available yet.",
511
+ "noRevisions": "No amendments, renewals, or revisions are linked yet.",
512
+ "noHistory": "No audit history is available yet."
513
+ }
514
+ },
515
+ "TimesheetsPage": {
516
+ "title": "Timesheets",
517
+ "description": "Create weekly timesheets, keep entries organized, and submit them for approval.",
518
+ "breadcrumb": "Timesheets",
519
+ "searchPlaceholder": "Search collaborator, project, approver, or notes...",
520
+ "emptyDescription": "No timesheets are available yet.",
521
+ "sheet": {
522
+ "createTitle": "Create timesheet",
523
+ "editTitle": "Edit timesheet",
524
+ "description": "Draft timesheets stay editable until they are submitted for approval."
525
+ },
526
+ "entries": {
527
+ "title": "Entries",
528
+ "description": "Attach work lines to your active project assignments whenever possible.",
529
+ "projectHint": "Projects with active assignments appear here automatically.",
530
+ "activityPlaceholder": "Example: Standup, implementation, QA, client sync"
531
+ },
532
+ "cards": {
533
+ "visible": "Visible timesheets",
534
+ "pending": "Pending review",
535
+ "hours": "Logged hours"
536
+ },
537
+ "messages": {
538
+ "requiredFields": "Week start and end dates are required.",
539
+ "entryValidation": "Each populated entry needs a work date and hours value.",
540
+ "saveSuccess": "Timesheet saved successfully.",
541
+ "saveError": "Unable to save the timesheet.",
542
+ "submitSuccess": "Timesheet submitted successfully.",
543
+ "submitError": "Unable to submit the timesheet."
544
+ }
545
+ },
546
+ "ApprovalsPage": {
547
+ "title": "Approvals",
548
+ "description": "Review submitted workforce requests and make supervisor decisions.",
549
+ "breadcrumb": "Approvals",
550
+ "searchPlaceholder": "Search requester, target, approver, or note...",
551
+ "noAccessDescription": "Supervisor or director permissions are required to review approvals.",
552
+ "emptyDescription": "No approvals match the current filters.",
553
+ "cards": {
554
+ "pending": "Pending",
555
+ "approved": "Approved",
556
+ "rejected": "Rejected"
557
+ },
558
+ "dialog": {
559
+ "approveTitle": "Approve request",
560
+ "rejectTitle": "Reject request",
561
+ "description": "Add an optional note for {requester}'s request: {target}."
562
+ },
563
+ "messages": {
564
+ "approveSuccess": "Approval completed successfully.",
565
+ "approveError": "Unable to approve the request.",
566
+ "rejectSuccess": "Request rejected successfully.",
567
+ "rejectError": "Unable to reject the request."
568
+ }
569
+ },
570
+ "TimeOffPage": {
571
+ "title": "Time Off",
572
+ "description": "Create and review vacation or other leave requests.",
573
+ "breadcrumb": "Time Off",
574
+ "searchPlaceholder": "Search collaborator, approver, reason, or request type...",
575
+ "emptyDescription": "No time-off requests match the current filters.",
576
+ "sheet": {
577
+ "title": "Create time-off request",
578
+ "description": "New requests are submitted directly into the approval workflow."
579
+ },
580
+ "cards": {
581
+ "submitted": "Submitted requests",
582
+ "approved": "Approved requests",
583
+ "days": "Requested days"
584
+ },
585
+ "messages": {
586
+ "requiredFields": "Start date and end date are required.",
587
+ "saveSuccess": "Time-off request submitted successfully.",
588
+ "saveError": "Unable to submit the time-off request."
589
+ }
590
+ },
591
+ "ScheduleAdjustmentsPage": {
592
+ "title": "Schedule Adjustments",
593
+ "description": "Request temporary or permanent weekly schedule changes.",
594
+ "breadcrumb": "Schedule Adjustments",
595
+ "searchPlaceholder": "Search collaborator, approver, scope, or reason...",
596
+ "emptyDescription": "No schedule adjustment requests match the current filters.",
597
+ "sheet": {
598
+ "title": "Create schedule adjustment",
599
+ "description": "Weekly schedule requests are routed to the collaborator's supervisor for review."
600
+ },
601
+ "cards": {
602
+ "submitted": "Submitted requests",
603
+ "approved": "Approved requests",
604
+ "permanent": "Permanent requests"
605
+ },
606
+ "table": {
607
+ "currentSchedule": "Current schedule"
608
+ },
609
+ "messages": {
610
+ "requiredFields": "An effective start date is required.",
611
+ "saveSuccess": "Schedule adjustment submitted successfully.",
612
+ "saveError": "Unable to submit the schedule adjustment."
613
+ }
614
+ },
615
+ "TeamPage": {
616
+ "title": "Team",
617
+ "description": "Supervisor view of direct reports, assignments, and pending approvals.",
618
+ "breadcrumb": "Team",
619
+ "noAccessDescription": "Supervisor or director permissions are required to view the team panel.",
620
+ "emptyDescription": "No direct reports are linked to this supervisor yet.",
621
+ "cards": {
622
+ "members": "Team members",
623
+ "projects": "Visible projects",
624
+ "pendingApprovals": "Pending approvals",
625
+ "timeOff": "Time-off queue",
626
+ "scheduleAdjustments": "Schedule queue",
627
+ "timesheets": "Timesheets queue"
628
+ },
629
+ "sections": {
630
+ "requests": "Open requests",
631
+ "pendingApprovals": "Pending approvals queue",
632
+ "projects": "Team project coverage",
633
+ "timeOff": "Pending time-off requests",
634
+ "scheduleAdjustments": "Pending schedule changes"
635
+ },
636
+ "labels": {
637
+ "timeOffRequestsCount": "{count} time-off request(s)",
638
+ "scheduleRequestsCount": "{count} schedule change request(s)",
639
+ "projectSummary": "{teamSize} collaborator(s) linked • {pendingTimesheets} pending timesheet(s)"
640
+ },
641
+ "states": {
642
+ "noPendingApprovals": "No pending approvals are assigned to this supervisor right now.",
643
+ "noProjects": "No active team-linked projects are visible yet.",
644
+ "noTimeOff": "No pending time-off requests were found.",
645
+ "noScheduleAdjustments": "No pending schedule adjustments were found."
646
+ }
647
+ }
648
+ }