@hed-hog/operations 0.0.303 → 0.0.305

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 (178) hide show
  1. package/README.md +200 -43
  2. package/dist/controllers/operations-approvals.controller.d.ts +9 -0
  3. package/dist/controllers/operations-approvals.controller.d.ts.map +1 -0
  4. package/dist/controllers/operations-approvals.controller.js +64 -0
  5. package/dist/controllers/operations-approvals.controller.js.map +1 -0
  6. package/dist/controllers/operations-collaborators.controller.d.ts +223 -0
  7. package/dist/controllers/operations-collaborators.controller.d.ts.map +1 -0
  8. package/dist/controllers/operations-collaborators.controller.js +96 -0
  9. package/dist/controllers/operations-collaborators.controller.js.map +1 -0
  10. package/dist/controllers/operations-contracts.controller.d.ts +683 -0
  11. package/dist/controllers/operations-contracts.controller.d.ts.map +1 -0
  12. package/dist/controllers/operations-contracts.controller.js +198 -0
  13. package/dist/controllers/operations-contracts.controller.js.map +1 -0
  14. package/dist/controllers/operations-org-structure.controller.d.ts +108 -0
  15. package/dist/controllers/operations-org-structure.controller.d.ts.map +1 -0
  16. package/dist/controllers/operations-org-structure.controller.js +143 -0
  17. package/dist/controllers/operations-org-structure.controller.js.map +1 -0
  18. package/dist/controllers/operations-projects.controller.d.ts +184 -0
  19. package/dist/controllers/operations-projects.controller.d.ts.map +1 -0
  20. package/dist/controllers/operations-projects.controller.js +87 -0
  21. package/dist/controllers/operations-projects.controller.js.map +1 -0
  22. package/dist/controllers/operations-tasks.controller.d.ts +85 -0
  23. package/dist/controllers/operations-tasks.controller.d.ts.map +1 -0
  24. package/dist/controllers/operations-tasks.controller.js +90 -0
  25. package/dist/controllers/operations-tasks.controller.js.map +1 -0
  26. package/dist/controllers/operations-timesheets.controller.d.ts +99 -0
  27. package/dist/controllers/operations-timesheets.controller.d.ts.map +1 -0
  28. package/dist/controllers/operations-timesheets.controller.js +154 -0
  29. package/dist/controllers/operations-timesheets.controller.js.map +1 -0
  30. package/dist/dto/create-collaborator-type.dto.d.ts +10 -0
  31. package/dist/dto/create-collaborator-type.dto.d.ts.map +1 -0
  32. package/dist/dto/create-collaborator-type.dto.js +56 -0
  33. package/dist/dto/create-collaborator-type.dto.js.map +1 -0
  34. package/dist/dto/create-collaborator.dto.d.ts +42 -0
  35. package/dist/dto/create-collaborator.dto.d.ts.map +1 -0
  36. package/dist/dto/create-collaborator.dto.js +228 -0
  37. package/dist/dto/create-collaborator.dto.js.map +1 -0
  38. package/dist/dto/create-schedule-adjustment-request.dto.d.ts +17 -0
  39. package/dist/dto/create-schedule-adjustment-request.dto.d.ts.map +1 -0
  40. package/dist/dto/create-schedule-adjustment-request.dto.js +89 -0
  41. package/dist/dto/create-schedule-adjustment-request.dto.js.map +1 -0
  42. package/dist/dto/create-task.dto.d.ts +14 -0
  43. package/dist/dto/create-task.dto.d.ts.map +1 -0
  44. package/dist/dto/create-task.dto.js +83 -0
  45. package/dist/dto/create-task.dto.js.map +1 -0
  46. package/dist/dto/create-time-off-request.dto.d.ts +9 -0
  47. package/dist/dto/create-time-off-request.dto.d.ts.map +1 -0
  48. package/dist/dto/create-time-off-request.dto.js +54 -0
  49. package/dist/dto/create-time-off-request.dto.js.map +1 -0
  50. package/dist/dto/create-timesheet-entry.dto.d.ts +12 -0
  51. package/dist/dto/create-timesheet-entry.dto.d.ts.map +1 -0
  52. package/dist/dto/create-timesheet-entry.dto.js +75 -0
  53. package/dist/dto/create-timesheet-entry.dto.js.map +1 -0
  54. package/dist/dto/list-collaborator-types.dto.d.ts +4 -0
  55. package/dist/dto/list-collaborator-types.dto.d.ts.map +1 -0
  56. package/dist/dto/list-collaborator-types.dto.js +29 -0
  57. package/dist/dto/list-collaborator-types.dto.js.map +1 -0
  58. package/dist/dto/list-collaborators.dto.d.ts +8 -0
  59. package/dist/dto/list-collaborators.dto.d.ts.map +1 -0
  60. package/dist/dto/list-collaborators.dto.js +42 -0
  61. package/dist/dto/list-collaborators.dto.js.map +1 -0
  62. package/dist/dto/list-project-options.dto.d.ts +4 -0
  63. package/dist/dto/list-project-options.dto.d.ts.map +1 -0
  64. package/dist/dto/list-project-options.dto.js +8 -0
  65. package/dist/dto/list-project-options.dto.js.map +1 -0
  66. package/dist/dto/list-tasks.dto.d.ts +7 -0
  67. package/dist/dto/list-tasks.dto.d.ts.map +1 -0
  68. package/dist/dto/list-tasks.dto.js +38 -0
  69. package/dist/dto/list-tasks.dto.js.map +1 -0
  70. package/dist/dto/list-timesheet-entries.dto.d.ts +10 -0
  71. package/dist/dto/list-timesheet-entries.dto.d.ts.map +1 -0
  72. package/dist/dto/list-timesheet-entries.dto.js +54 -0
  73. package/dist/dto/list-timesheet-entries.dto.js.map +1 -0
  74. package/dist/dto/update-collaborator-type.dto.d.ts +4 -0
  75. package/dist/dto/update-collaborator-type.dto.d.ts.map +1 -0
  76. package/dist/dto/update-collaborator-type.dto.js +8 -0
  77. package/dist/dto/update-collaborator-type.dto.js.map +1 -0
  78. package/dist/dto/update-collaborator.dto.d.ts +4 -0
  79. package/dist/dto/update-collaborator.dto.d.ts.map +1 -0
  80. package/dist/dto/update-collaborator.dto.js +8 -0
  81. package/dist/dto/update-collaborator.dto.js.map +1 -0
  82. package/dist/dto/update-task.dto.d.ts +14 -0
  83. package/dist/dto/update-task.dto.d.ts.map +1 -0
  84. package/dist/dto/update-task.dto.js +84 -0
  85. package/dist/dto/update-task.dto.js.map +1 -0
  86. package/dist/operations.controller.d.ts +0 -1045
  87. package/dist/operations.controller.d.ts.map +1 -1
  88. package/dist/operations.controller.js +0 -429
  89. package/dist/operations.controller.js.map +1 -1
  90. package/dist/operations.module.d.ts.map +1 -1
  91. package/dist/operations.module.js +23 -2
  92. package/dist/operations.module.js.map +1 -1
  93. package/dist/operations.service.d.ts +429 -8
  94. package/dist/operations.service.d.ts.map +1 -1
  95. package/dist/operations.service.js +1931 -165
  96. package/dist/operations.service.js.map +1 -1
  97. package/dist/operations.service.spec.js +315 -1
  98. package/dist/operations.service.spec.js.map +1 -1
  99. package/dist/services/shared/operations-access.service.d.ts +16 -0
  100. package/dist/services/shared/operations-access.service.d.ts.map +1 -0
  101. package/dist/services/shared/operations-access.service.js +48 -0
  102. package/dist/services/shared/operations-access.service.js.map +1 -0
  103. package/hedhog/data/dashboard.yaml +20 -0
  104. package/hedhog/data/dashboard_component.yaml +274 -0
  105. package/hedhog/data/dashboard_component_role.yaml +174 -0
  106. package/hedhog/data/dashboard_item.yaml +299 -0
  107. package/hedhog/data/dashboard_role.yaml +20 -0
  108. package/hedhog/data/menu.yaml +30 -13
  109. package/hedhog/data/operations_collaborator_type.yaml +76 -0
  110. package/hedhog/data/route.yaml +196 -0
  111. package/hedhog/frontend/app/_components/async-options-combobox.tsx.ejs +231 -0
  112. package/hedhog/frontend/app/_components/collaborator-details-screen.tsx.ejs +125 -40
  113. package/hedhog/frontend/app/_components/collaborator-form-screen.tsx.ejs +740 -106
  114. package/hedhog/frontend/app/_components/collaborator-select-with-create.tsx.ejs +256 -256
  115. package/hedhog/frontend/app/_components/contract-form-screen.tsx.ejs +7 -7
  116. package/hedhog/frontend/app/_components/contract-template-form-screen.tsx.ejs +306 -306
  117. package/hedhog/frontend/app/_components/contract-template-select-with-create.tsx.ejs +247 -247
  118. package/hedhog/frontend/app/_components/contract-wizard-sheet.tsx.ejs +3520 -3520
  119. package/hedhog/frontend/app/_components/department-select-with-create.tsx.ejs +38 -16
  120. package/hedhog/frontend/app/_components/project-details-screen.tsx.ejs +1504 -52
  121. package/hedhog/frontend/app/_components/project-form-screen.tsx.ejs +1017 -649
  122. package/hedhog/frontend/app/_components/section-card.tsx.ejs +25 -18
  123. package/hedhog/frontend/app/_components/system-user-select-with-create.tsx.ejs +609 -0
  124. package/hedhog/frontend/app/_components/timesheet-task-create-sheet.tsx.ejs +213 -0
  125. package/hedhog/frontend/app/_lib/api.ts.ejs +30 -1
  126. package/hedhog/frontend/app/_lib/types.ts.ejs +147 -39
  127. package/hedhog/frontend/app/_lib/utils/format.ts.ejs +40 -9
  128. package/hedhog/frontend/app/_lib/utils/forms.ts.ejs +48 -1
  129. package/hedhog/frontend/app/approvals/page.tsx.ejs +116 -98
  130. package/hedhog/frontend/app/collaborator-types/page.tsx.ejs +502 -0
  131. package/hedhog/frontend/app/collaborators/page.tsx.ejs +116 -72
  132. package/hedhog/frontend/app/contracts/page.tsx.ejs +938 -938
  133. package/hedhog/frontend/app/contracts/templates/page.tsx.ejs +11 -9
  134. package/hedhog/frontend/app/departments/page.tsx.ejs +1 -1
  135. package/hedhog/frontend/app/projects/[id]/edit/page.tsx.ejs +1 -1
  136. package/hedhog/frontend/app/projects/page.tsx.ejs +364 -133
  137. package/hedhog/frontend/app/schedule-adjustments/page.tsx.ejs +244 -120
  138. package/hedhog/frontend/app/team/page.tsx.ejs +15 -2
  139. package/hedhog/frontend/app/time-off/page.tsx.ejs +158 -82
  140. package/hedhog/frontend/app/timesheets/page.tsx.ejs +814 -357
  141. package/hedhog/frontend/messages/en.json +268 -53
  142. package/hedhog/frontend/messages/pt.json +484 -271
  143. package/hedhog/table/operations_collaborator.yaml +26 -13
  144. package/hedhog/table/operations_collaborator_equity_participation.yaml +43 -0
  145. package/hedhog/table/operations_collaborator_type.yaml +33 -0
  146. package/hedhog/table/operations_job_title.yaml +24 -0
  147. package/hedhog/table/operations_project.yaml +9 -0
  148. package/hedhog/table/operations_project_assignment.yaml +9 -0
  149. package/hedhog/table/operations_project_role.yaml +39 -0
  150. package/hedhog/table/operations_task.yaml +69 -0
  151. package/hedhog/table/operations_timesheet_entry.yaml +12 -0
  152. package/package.json +6 -6
  153. package/src/controllers/operations-approvals.controller.ts +24 -0
  154. package/src/controllers/operations-collaborators.controller.ts +60 -0
  155. package/src/controllers/operations-contracts.controller.ts +138 -0
  156. package/src/controllers/operations-org-structure.controller.ts +92 -0
  157. package/src/controllers/operations-projects.controller.ts +50 -0
  158. package/src/controllers/operations-tasks.controller.ts +63 -0
  159. package/src/controllers/operations-timesheets.controller.ts +100 -0
  160. package/src/dto/create-collaborator-type.dto.ts +43 -0
  161. package/src/dto/create-collaborator.dto.ts +223 -0
  162. package/src/dto/create-schedule-adjustment-request.dto.ts +91 -0
  163. package/src/dto/create-task.dto.ts +75 -0
  164. package/src/dto/create-time-off-request.dto.ts +53 -0
  165. package/src/dto/create-timesheet-entry.dto.ts +67 -0
  166. package/src/dto/list-collaborator-types.dto.ts +15 -0
  167. package/src/dto/list-collaborators.dto.ts +30 -0
  168. package/src/dto/list-project-options.dto.ts +3 -0
  169. package/src/dto/list-tasks.dto.ts +25 -0
  170. package/src/dto/list-timesheet-entries.dto.ts +40 -0
  171. package/src/dto/update-collaborator-type.dto.ts +3 -0
  172. package/src/dto/update-collaborator.dto.ts +3 -0
  173. package/src/dto/update-task.dto.ts +76 -0
  174. package/src/operations.controller.ts +1 -278
  175. package/src/operations.module.ts +23 -2
  176. package/src/operations.service.spec.ts +450 -0
  177. package/src/operations.service.ts +4507 -1561
  178. package/src/services/shared/operations-access.service.ts +52 -0
@@ -9,6 +9,7 @@
9
9
  "activate": "Activate",
10
10
  "deactivate": "Deactivate",
11
11
  "save": "Save",
12
+ "delete": "Delete",
12
13
  "addLine": "Add line",
13
14
  "approve": "Approve",
14
15
  "reject": "Reject",
@@ -16,6 +17,7 @@
16
17
  "loadMore": "Load more",
17
18
  "clearSelection": "Clear selection",
18
19
  "manageDepartments": "Manage departments",
20
+ "manageCollaboratorTypes": "Manage relationship types",
19
21
  "manageTemplates": "Manage templates",
20
22
  "useTemplate": "Use template"
21
23
  },
@@ -27,7 +29,7 @@
27
29
  "notAvailable": "Not available",
28
30
  "notAssigned": "Not assigned",
29
31
  "collaborator": "Collaborator",
30
- "collaboratorType": "Type",
32
+ "collaboratorType": "Relationship type",
31
33
  "department": "Department",
32
34
  "supervisor": "Supervisor",
33
35
  "weeklyCapacity": "Weekly capacity",
@@ -39,10 +41,15 @@
39
41
  "contract": "Contract",
40
42
  "contractStatus": "Contract status",
41
43
  "contractCategory": "Contract category",
44
+ "contractType": "Contract type",
45
+ "signatureStatus": "Signature status",
42
46
  "manager": "Manager",
43
47
  "progress": "Progress",
44
48
  "timeline": "Timeline",
45
49
  "budget": "Budget",
50
+ "code": "Code",
51
+ "deliveryModel": "Delivery model",
52
+ "allocationPercent": "Allocation %",
46
53
  "teamSize": "Team size",
47
54
  "client": "Client",
48
55
  "billingModel": "Billing model",
@@ -52,6 +59,7 @@
52
59
  "totalHours": "Total hours",
53
60
  "approver": "Approver",
54
61
  "noNotes": "No notes",
62
+ "decisionNote": "Decision note",
55
63
  "lines": "lines",
56
64
  "unassigned": "Unassigned",
57
65
  "viewOnly": "View only",
@@ -84,7 +92,9 @@
84
92
  "role": "Role",
85
93
  "total": "Total",
86
94
  "pending": "Pending",
87
- "approved": "Approved"
95
+ "approved": "Approved",
96
+ "equityParticipation": "Equity participation",
97
+ "votingPower": "Voting power"
88
98
  },
89
99
  "states": {
90
100
  "emptyTitle": "No records found",
@@ -153,9 +163,13 @@
153
163
  "viewModeCards": "Grid",
154
164
  "cards": {
155
165
  "total": "Total collaborators",
156
- "active": "Active collaborators",
166
+ "totalDescription": "All operational collaborators registered in the system.",
167
+ "active": "Active",
168
+ "activeDescription": "Currently working with an active operational status.",
157
169
  "onLeave": "On leave",
158
- "withContracts": "With contract"
170
+ "onLeaveDescription": "Temporarily away — included in capacity but not deployable.",
171
+ "withContracts": "With contract",
172
+ "withContractsDescription": "Collaborators linked to at least one contract."
159
173
  },
160
174
  "sheet": {
161
175
  "createTitle": "Create collaborator",
@@ -235,8 +249,11 @@
235
249
  "sections": {
236
250
  "basicInfo": "Basic info",
237
251
  "basicInfoDescription": "Core identity and profile data used across operations.",
238
- "employmentInfo": "Employment info",
239
- "employmentInfoDescription": "Choose the collaborator type, lifecycle status, and start dates.",
252
+ "employmentInfo": "Relationship details",
253
+ "employmentInfoDescription": "Choose the nature of the relationship with the company, lifecycle status, and key dates.",
254
+ "employmentInfoCreateDescription": "Choose the relationship type and initial dates. Weekly capacity and compensation can be adjusted after creation.",
255
+ "equity": "Equity details",
256
+ "equityDescription": "Fill this section only when the selected relationship requires ownership or governance data.",
240
257
  "supervisor": "Supervisor assignment",
241
258
  "supervisorDescription": "Link the direct supervisor used for team visibility and approvals.",
242
259
  "contract": "Compensation and contract draft",
@@ -248,26 +265,36 @@
248
265
  "person": "Person",
249
266
  "personEntityLabel": "person",
250
267
  "personDescription": "Select an existing person or register a new one without leaving this screen.",
251
- "userId": "User ID",
252
- "userIdOptional": "User ID (optional)",
253
- "userIdDescription": "Use this only when you need to bind a platform account after the person record is created.",
268
+ "userId": "System user",
269
+ "userIdOptional": "System user (optional)",
270
+ "userIdDescription": "Link the platform account this collaborator will use for sign-in, timesheets, and self-service actions.",
254
271
  "code": "Code",
255
272
  "displayName": "Display name",
256
273
  "department": "Department",
257
274
  "departmentDescription": "Select an existing department or create a new one for this collaborator.",
258
275
  "title": "Role / position",
276
+ "titleDescription": "Select an existing role or create a new one to reuse across collaborators.",
259
277
  "levelLabel": "Level",
260
278
  "notes": "Notes",
261
- "collaboratorType": "Collaborator type",
279
+ "collaboratorType": "Relationship type",
280
+ "collaboratorTypeDescription": "Select the nature of the relationship with the company. Role and equity participation stay separate.",
262
281
  "weeklyCapacityHours": "Weekly workload",
263
282
  "compensationAmount": "Compensation amount",
264
283
  "contractDescription": "Contract draft notes",
284
+ "equityParticipationType": "Participation type",
285
+ "equityPercentage": "Ownership percentage",
286
+ "votingPower": "Voting power (%)",
287
+ "equityNotes": "Equity notes",
265
288
  "startTime": "Start",
266
289
  "endTime": "End",
267
290
  "breakMinutes": "Break (min)",
268
291
  "breakMinutesDescription": "The last numeric field defines the daily break in minutes. Example: 60 = a 1-hour lunch break.",
269
292
  "autoGenerateContractDraft": "Generate contract draft automatically",
270
- "autoGenerateContractDraftDescription": "Creates a related draft contract classified from the collaborator type and linked to the hiring origin."
293
+ "autoGenerateContractDraftDescription": "Creates a related draft contract classified from the relationship type and linked to the hiring origin.",
294
+ "createUserDescription": "Enter the new system user's credentials. The account will be created immediately and linked to this collaborator.",
295
+ "createUserName": "Full name",
296
+ "createUserEmail": "Email",
297
+ "createUserPassword": "Password"
271
298
  },
272
299
  "options": {
273
300
  "collaboratorTypes": {
@@ -277,6 +304,20 @@
277
304
  "intern": "Intern",
278
305
  "other": "Other"
279
306
  },
307
+ "levels": {
308
+ "junior": "Junior",
309
+ "mid": "Mid-level",
310
+ "senior": "Senior",
311
+ "coordinator": "Coordinator",
312
+ "manager": "Manager"
313
+ },
314
+ "equityParticipationTypes": {
315
+ "partner_quota_holder": "Quota holder partner",
316
+ "common_shareholder": "Common shareholder",
317
+ "preferred_shareholder": "Preferred shareholder",
318
+ "administrator": "Administrator",
319
+ "other": "Other"
320
+ },
280
321
  "statuses": {
281
322
  "active": "Active",
282
323
  "on_leave": "On Leave",
@@ -288,17 +329,78 @@
288
329
  "person": "Select or create a person",
289
330
  "department": "Select or create a department",
290
331
  "departmentCreate": "Department name",
332
+ "title": "Select or create a role / position",
333
+ "titleCreate": "Role / position name",
334
+ "collaboratorType": "Select the relationship type",
335
+ "equityPercentage": "Ex.: 25",
336
+ "votingPower": "Ex.: 50",
337
+ "equityNotes": "Notes about quotas, shares, term, or powers",
338
+ "levelLabel": "Select a level",
291
339
  "supervisor": "Search a collaborator",
292
- "userIdOptional": "Link a user later if needed"
340
+ "userIdOptional": "Select a system user",
341
+ "createUserName": "Full name",
342
+ "createUserEmail": "user@example.com",
343
+ "createUserPassword": "Strong password"
344
+ },
345
+ "actions": {
346
+ "createUser": "Create system user"
347
+ },
348
+ "states": {
349
+ "loadingCollaboratorTypes": "Loading relationship types..."
293
350
  },
294
351
  "messages": {
295
352
  "userRequired": "The user binding can be completed after the initial collaborator setup.",
296
353
  "personRequired": "Select or create a person for the collaborator.",
354
+ "collaboratorTypeRequired": "Select a relationship type.",
297
355
  "requiredFields": "The collaborator code is required.",
298
356
  "createSuccess": "Collaborator created successfully.",
299
357
  "createError": "Unable to create the collaborator.",
300
358
  "updateSuccess": "Collaborator updated successfully.",
301
- "updateError": "Unable to update the collaborator."
359
+ "updateError": "Unable to update the collaborator.",
360
+ "createUserSuccess": "User created and linked successfully.",
361
+ "createUserError": "Failed to create the system user."
362
+ }
363
+ },
364
+ "CollaboratorTypesPage": {
365
+ "title": "Relationship Types",
366
+ "description": "Manage the relationship catalog used by collaborator records and operational rules.",
367
+ "breadcrumb": "Relationship Types",
368
+ "searchPlaceholder": "Search relationship type, slug, category, or description...",
369
+ "emptyDescription": "No relationship types match the current filters.",
370
+ "noAccessDescription": "Director permissions are required to manage relationship types.",
371
+ "cards": {
372
+ "total": "Total types",
373
+ "active": "Active types",
374
+ "linkedCollaborators": "Linked collaborators",
375
+ "inactive": "Inactive types"
376
+ },
377
+ "columns": {
378
+ "name": "Name",
379
+ "slug": "Slug",
380
+ "category": "Category",
381
+ "description": "Description",
382
+ "sortOrder": "Order",
383
+ "collaborators": "Collaborators"
384
+ },
385
+ "sheet": {
386
+ "createTitle": "Create relationship type",
387
+ "editTitle": "Edit relationship type",
388
+ "description": "Keep the relationship catalog organized for collaborator records and operational rules."
389
+ },
390
+ "form": {
391
+ "name": "Name",
392
+ "slug": "Slug",
393
+ "category": "Category",
394
+ "description": "Description",
395
+ "sortOrder": "Display order",
396
+ "status": "Status"
397
+ },
398
+ "messages": {
399
+ "requiredFields": "Relationship type name is required.",
400
+ "saveSuccess": "Relationship type saved successfully.",
401
+ "saveError": "Unable to save the relationship type.",
402
+ "statusSuccess": "Relationship type status updated successfully.",
403
+ "statusError": "Unable to update the relationship type status."
302
404
  }
303
405
  },
304
406
  "CollaboratorDetailsPage": {
@@ -340,10 +442,17 @@
340
442
  "emptyDescription": "No projects match the current filters.",
341
443
  "cards": {
342
444
  "total": "Projects",
445
+ "totalDescription": "All delivery projects visible to your access scope.",
343
446
  "active": "Active",
447
+ "activeDescription": "Open for timesheet entries and ongoing team work.",
344
448
  "atRisk": "At risk",
345
- "upcomingDeliveries": "With deadline"
449
+ "atRiskDescription": "Flagged for delivery, staffing, or budget issues.",
450
+ "upcomingDeliveries": "With deadline",
451
+ "upcomingDeliveriesDescription": "Projects that have an end date defined."
346
452
  },
453
+ "viewMode": "View mode",
454
+ "viewModeTable": "Table",
455
+ "viewModeCards": "Cards",
347
456
  "actions": {
348
457
  "archive": "Archive"
349
458
  },
@@ -371,20 +480,24 @@
371
480
  "newTitle": "New Project",
372
481
  "editTitle": "Edit Project",
373
482
  "breadcrumb": "Project Form",
374
- "description": "Register client projects or service engagements and optionally generate a related draft contract from the project flow.",
483
+ "description": "Create the project with the essential client and delivery info first. Staffing, contracts, and controls can be completed after saving.",
375
484
  "noAccessDescription": "Director permissions are required to manage projects.",
376
485
  "loading": "Loading project data...",
377
486
  "sections": {
378
487
  "basicInfo": "Basic project info",
379
488
  "basicInfoDescription": "Define the client-facing engagement and operational summary.",
489
+ "basicInfoCreateDescription": "Start with the essentials needed to open the project and continue setup after saving.",
380
490
  "governance": "Responsible and dates",
381
491
  "governanceDescription": "Set the project owner, lifecycle status, and date range.",
492
+ "governanceCreateDescription": "Optionally assign the manager and the start date now. Progress and lifecycle controls can be refined later.",
382
493
  "team": "Team assignment",
383
- "teamDescription": "{count} collaborators selected for the initial team.",
494
+ "teamDescription": "{count} collaborators selected for the initial team. You can refine assignments after saving.",
384
495
  "financials": "Financial and contract basis",
385
- "financialsDescription": "Baseline data used for project controls and draft contract creation.",
496
+ "financialsDescription": "Financial, billing, and contract settings can be completed after the project is saved.",
386
497
  "contract": "Contract generation settings",
387
- "contractDescription": "Choose a reusable template, link an existing contract, or generate a new draft from the project flow."
498
+ "contractDescription": "Link an existing contract or configure draft generation after the initial project save.",
499
+ "nextSteps": "Continue after saving",
500
+ "nextStepsDescription": "Once the project is created, you can add the team, connect a contract or template, and track detailed delivery controls from the project screen."
388
501
  },
389
502
  "fields": {
390
503
  "code": "Project code",
@@ -424,7 +537,7 @@
424
537
  "placeholders": {
425
538
  "code": "Ex: PRJ-2026-001",
426
539
  "name": "Enter the project name",
427
- "clientName": "Enter the client or account name",
540
+ "clientName": "Select or create the client company/account",
428
541
  "summary": "Describe scope, goals, and relevant delivery context",
429
542
  "progressPercent": "0 to 100",
430
543
  "managerSearch": "Search manager...",
@@ -434,7 +547,9 @@
434
547
  "monthlyHourCap": "Monthly hour cap",
435
548
  "contractCode": "Used only when creating a draft contract",
436
549
  "contractName": "Visible name for the generated draft",
437
- "contractDescription": "Add commercial notes or delivery clauses"
550
+ "contractDescription": "Add commercial notes or delivery clauses",
551
+ "roleLabel": "Select or type a role...",
552
+ "roleLabelCreate": "New role or responsibility"
438
553
  },
439
554
  "options": {
440
555
  "deliveryModels": {
@@ -458,7 +573,8 @@
458
573
  }
459
574
  },
460
575
  "messages": {
461
- "requiredFields": "Project code, project name, and client name are required.",
576
+ "requiredFields": "Only the project code, name, and client name are required to create the project.",
577
+ "roleRequired": "Select or type a role for each assigned collaborator.",
462
578
  "createSuccess": "Project created successfully.",
463
579
  "createError": "Unable to create the project.",
464
580
  "updateSuccess": "Project updated successfully.",
@@ -922,33 +1038,93 @@
922
1038
  },
923
1039
  "TimesheetsPage": {
924
1040
  "title": "Timesheets",
925
- "description": "Create weekly timesheets, keep entries organized, and submit them for approval.",
1041
+ "description": "Log project work in seconds, keep weekly drafts organized, and submit them when ready.",
926
1042
  "breadcrumb": "Timesheets",
927
- "searchPlaceholder": "Search collaborator, project, approver, or notes...",
928
- "emptyDescription": "No timesheets are available yet.",
1043
+ "searchPlaceholder": "Search collaborator, project, task, approver, or notes...",
1044
+ "emptyDescription": "No timesheets match the current filters.",
929
1045
  "sheet": {
930
- "createTitle": "Create timesheet",
931
- "editTitle": "Edit timesheet",
932
- "description": "Draft timesheets stay editable until they are submitted for approval."
1046
+ "createTitle": "Quick entry",
1047
+ "editTitle": "Edit entry",
1048
+ "description": "Choose the project, task, date, and duration to log work with minimal friction.",
1049
+ "fields": {
1050
+ "project": "Project",
1051
+ "task": "Task",
1052
+ "duration": "Duration",
1053
+ "unit": "Unit",
1054
+ "hours": "Hours",
1055
+ "minutes": "Minutes"
1056
+ },
1057
+ "placeholders": {
1058
+ "project": "Search by project or client...",
1059
+ "projectSearch": "Type to search projects...",
1060
+ "task": "Search or select a task",
1061
+ "taskSearch": "Type to search tasks...",
1062
+ "duration": "Example: 1.5",
1063
+ "description": "Optional context for this work log"
1064
+ },
1065
+ "helper": {
1066
+ "task": "Only tasks from the selected project assignment appear here.",
1067
+ "selectProjectFirst": "Select a project first to load or create tasks.",
1068
+ "keepContext": "Keep project, task, and date after saving",
1069
+ "keepContextDescription": "Best for logging several entries in sequence."
1070
+ },
1071
+ "validation": {
1072
+ "descriptionMaxLength": "The description can have at most 500 characters."
1073
+ },
1074
+ "task": {
1075
+ "title": "Quick task",
1076
+ "description": "Create a task for the current project assignment without leaving the timesheet flow.",
1077
+ "projectLabel": "Selected project",
1078
+ "name": "Task name",
1079
+ "descriptionLabel": "Task description",
1080
+ "createAction": "New task",
1081
+ "submit": "Create task",
1082
+ "placeholders": {
1083
+ "name": "Example: Client review, bug fix, deployment",
1084
+ "description": "Optional details about this task"
1085
+ },
1086
+ "validation": {
1087
+ "nameMinLength": "Enter at least 2 characters for the task name.",
1088
+ "descriptionMaxLength": "The task description can have at most 500 characters."
1089
+ }
1090
+ }
933
1091
  },
934
1092
  "entries": {
935
- "title": "Entries",
936
- "description": "Attach work lines to your active project assignments whenever possible.",
1093
+ "title": "Entry details",
1094
+ "description": "Attach each work log to an active project assignment while keeping the description optional.",
937
1095
  "projectHint": "Projects with active assignments appear here automatically.",
938
1096
  "activityPlaceholder": "Example: Standup, implementation, QA, client sync"
939
1097
  },
1098
+ "recentEntries": {
1099
+ "title": "Recent entries",
1100
+ "description": "Your newest work logs appear here right after saving.",
1101
+ "empty": "Your recent entries will appear here.",
1102
+ "loading": "Loading recent entries..."
1103
+ },
940
1104
  "cards": {
941
1105
  "visible": "Visible timesheets",
1106
+ "visibleDescription": "Weekly records visible to your role scope.",
942
1107
  "pending": "Pending review",
943
- "hours": "Logged hours"
1108
+ "pendingDescription": "Submitted and waiting for a supervisor decision.",
1109
+ "hours": "Logged hours",
1110
+ "hoursDescription": "Total work hours across all visible timesheets."
944
1111
  },
945
1112
  "messages": {
946
- "requiredFields": "Week start and end dates are required.",
947
- "entryValidation": "Each populated entry needs a work date and hours value.",
948
- "saveSuccess": "Timesheet saved successfully.",
949
- "saveError": "Unable to save the timesheet.",
1113
+ "requiredFields": "Project, task, date, and duration are required.",
1114
+ "entryValidation": "Enter a valid duration greater than zero.",
1115
+ "selectProjectRequired": "Select a project assignment first.",
1116
+ "selectTaskRequired": "Select or create a task first.",
1117
+ "selectProjectFirst": "Select a project before creating a task.",
1118
+ "saveSuccess": "Entry saved successfully.",
1119
+ "saveError": "Unable to save the entry.",
1120
+ "deleteSuccess": "Entry deleted successfully.",
1121
+ "deleteError": "Unable to delete the entry.",
1122
+ "confirmDeleteTitle": "Delete entry?",
1123
+ "confirmDeleteDescription": "This will remove the entry for \"{name}\" from the current weekly draft.",
950
1124
  "submitSuccess": "Timesheet submitted successfully.",
951
- "submitError": "Unable to submit the timesheet."
1125
+ "submitError": "Unable to submit the timesheet.",
1126
+ "taskCreateSuccess": "Task created successfully.",
1127
+ "taskCreateError": "Unable to create the task."
952
1128
  }
953
1129
  },
954
1130
  "ApprovalsPage": {
@@ -960,13 +1136,17 @@
960
1136
  "emptyDescription": "No approvals match the current filters.",
961
1137
  "cards": {
962
1138
  "pending": "Pending",
1139
+ "pendingDescription": "Submitted requests waiting for a supervisor decision.",
963
1140
  "approved": "Approved",
964
- "rejected": "Rejected"
1141
+ "approvedDescription": "Requests that received a positive decision.",
1142
+ "rejected": "Rejected",
1143
+ "rejectedDescription": "Requests that were not approved by the supervisor."
965
1144
  },
966
1145
  "dialog": {
967
1146
  "approveTitle": "Approve request",
968
1147
  "rejectTitle": "Reject request",
969
- "description": "Add an optional note for {requester}'s request: {target}."
1148
+ "description": "Add an optional note for {requester}'s request: {target}.",
1149
+ "notePlaceholder": "e.g. Approved for the requested period. Check your calendar for team coverage."
970
1150
  },
971
1151
  "options": {
972
1152
  "statuses": {
@@ -1001,18 +1181,24 @@
1001
1181
  },
1002
1182
  "TimeOffPage": {
1003
1183
  "title": "Time Off",
1004
- "description": "Create and review vacation or other leave requests.",
1184
+ "description": "Request vacation or other leave and track what is awaiting review, approved, or not approved.",
1005
1185
  "breadcrumb": "Time Off",
1006
1186
  "searchPlaceholder": "Search collaborator, approver, reason, or request type...",
1007
1187
  "emptyDescription": "No time-off requests match the current filters.",
1008
1188
  "sheet": {
1009
1189
  "title": "Create time-off request",
1010
- "description": "New requests are submitted directly into the approval workflow."
1190
+ "description": "Vacation stays in this same flow. Choose the dates, add context if needed, and your supervisor will review it.",
1191
+ "helperTitle": "Use this same form for vacation",
1192
+ "helperDescription": "Keep vacation, sick leave, personal time, and other absences in one place so the status history stays easy to follow.",
1193
+ "reasonPlaceholder": "Add any context that will help your supervisor review this request."
1011
1194
  },
1012
1195
  "cards": {
1013
- "submitted": "Submitted requests",
1196
+ "submitted": "Awaiting review",
1197
+ "submittedDescription": "Requests sent and pending a supervisor decision.",
1014
1198
  "approved": "Approved requests",
1015
- "days": "Requested days"
1199
+ "approvedDescription": "Requests that were approved and counted in capacity.",
1200
+ "days": "Requested days",
1201
+ "daysDescription": "Total calendar days across all submitted requests."
1016
1202
  },
1017
1203
  "options": {
1018
1204
  "requestTypes": {
@@ -1024,12 +1210,17 @@
1024
1210
  },
1025
1211
  "statuses": {
1026
1212
  "draft": "Draft",
1027
- "submitted": "Submitted",
1213
+ "submitted": "Awaiting review",
1028
1214
  "approved": "Approved",
1029
- "rejected": "Rejected",
1215
+ "rejected": "Not approved",
1030
1216
  "cancelled": "Cancelled"
1031
1217
  }
1032
1218
  },
1219
+ "statusHelp": {
1220
+ "submitted": "Waiting for supervisor review.",
1221
+ "approved": "Approved and kept in your history.",
1222
+ "rejected": "Check the manager notes for next steps."
1223
+ },
1033
1224
  "messages": {
1034
1225
  "requiredFields": "Start date and end date are required.",
1035
1226
  "saveSuccess": "Time-off request submitted successfully.",
@@ -1038,34 +1229,52 @@
1038
1229
  },
1039
1230
  "ScheduleAdjustmentsPage": {
1040
1231
  "title": "Schedule Adjustments",
1041
- "description": "Request temporary or permanent weekly schedule changes.",
1232
+ "description": "Request temporary or permanent weekly schedule changes and compare the current vs requested schedule clearly.",
1042
1233
  "breadcrumb": "Schedule Adjustments",
1043
1234
  "searchPlaceholder": "Search collaborator, approver, scope, or reason...",
1044
1235
  "emptyDescription": "No schedule adjustment requests match the current filters.",
1045
1236
  "sheet": {
1046
1237
  "title": "Create schedule adjustment",
1047
- "description": "Weekly schedule requests are routed to the collaborator's supervisor for review."
1238
+ "description": "Share the days and hours you want to change. Your supervisor will compare this request with your current weekly schedule.",
1239
+ "reasonPlaceholder": "Briefly explain why this schedule change is needed."
1048
1240
  },
1049
1241
  "cards": {
1050
- "submitted": "Submitted requests",
1242
+ "submitted": "Awaiting review",
1243
+ "submittedDescription": "Adjustment requests sent and waiting for approval.",
1051
1244
  "approved": "Approved requests",
1052
- "permanent": "Permanent requests"
1245
+ "approvedDescription": "Adjustments that were accepted and applied.",
1246
+ "permanent": "Permanent requests",
1247
+ "permanentDescription": "Requests for a lasting schedule change (not just one period)."
1053
1248
  },
1054
1249
  "options": {
1055
1250
  "requestScopes": {
1056
- "temporary": "Temporary",
1057
- "permanent": "Permanent"
1251
+ "temporary": "Temporary change",
1252
+ "permanent": "Permanent update"
1058
1253
  },
1059
1254
  "statuses": {
1060
1255
  "draft": "Draft",
1061
- "submitted": "Submitted",
1256
+ "submitted": "Awaiting review",
1062
1257
  "approved": "Approved",
1063
- "rejected": "Rejected",
1258
+ "rejected": "Not approved",
1064
1259
  "cancelled": "Cancelled"
1065
1260
  }
1066
1261
  },
1067
1262
  "table": {
1068
- "currentSchedule": "Current schedule"
1263
+ "currentSchedule": "Current schedule",
1264
+ "requestedSchedule": "Requested schedule"
1265
+ },
1266
+ "scheduleEditor": {
1267
+ "summaryLabel": "Requested weekly summary",
1268
+ "daysPerWeek": "{count} working day(s) selected",
1269
+ "helper": "Turn a day off if you will not work it. Start, end, and break values are only used for enabled working days.",
1270
+ "startTime": "Start",
1271
+ "endTime": "End",
1272
+ "breakMinutes": "Break (min)"
1273
+ },
1274
+ "statusHelp": {
1275
+ "submitted": "Waiting for supervisor review.",
1276
+ "approved": "Approved and kept in your history.",
1277
+ "rejected": "Check the manager notes for next steps."
1069
1278
  },
1070
1279
  "messages": {
1071
1280
  "requiredFields": "An effective start date is required.",
@@ -1081,11 +1290,17 @@
1081
1290
  "emptyDescription": "No direct reports are linked to this supervisor yet.",
1082
1291
  "cards": {
1083
1292
  "members": "Team members",
1293
+ "membersDescription": "Direct reports linked to this supervisor.",
1084
1294
  "projects": "Visible projects",
1295
+ "projectsDescription": "Active projects linked to at least one team member.",
1085
1296
  "pendingApprovals": "Pending approvals",
1297
+ "pendingApprovalsDescription": "Requests waiting for supervisor action.",
1086
1298
  "timeOff": "Time-off queue",
1299
+ "timeOffDescription": "Time-off requests pending review.",
1087
1300
  "scheduleAdjustments": "Schedule queue",
1088
- "timesheets": "Timesheets queue"
1301
+ "scheduleAdjustmentsDescription": "Schedule change requests pending review.",
1302
+ "timesheets": "Timesheets queue",
1303
+ "timesheetsDescription": "Timesheets submitted and waiting for decision."
1089
1304
  },
1090
1305
  "sections": {
1091
1306
  "requests": "Open requests",