@hed-hog/operations 0.0.317 → 0.0.319

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 (137) hide show
  1. package/dist/controllers/operations-collaborator-costs.controller.d.ts +144 -0
  2. package/dist/controllers/operations-collaborator-costs.controller.d.ts.map +1 -0
  3. package/dist/controllers/operations-collaborator-costs.controller.js +162 -0
  4. package/dist/controllers/operations-collaborator-costs.controller.js.map +1 -0
  5. package/dist/controllers/operations-collaborators.controller.d.ts +14 -0
  6. package/dist/controllers/operations-collaborators.controller.d.ts.map +1 -1
  7. package/dist/controllers/operations-collaborators.controller.js +11 -0
  8. package/dist/controllers/operations-collaborators.controller.js.map +1 -1
  9. package/dist/controllers/operations-projects.controller.d.ts +31 -0
  10. package/dist/controllers/operations-projects.controller.d.ts.map +1 -1
  11. package/dist/controllers/operations-projects.controller.js +23 -0
  12. package/dist/controllers/operations-projects.controller.js.map +1 -1
  13. package/dist/controllers/operations-reports.controller.d.ts +199 -0
  14. package/dist/controllers/operations-reports.controller.d.ts.map +1 -0
  15. package/dist/controllers/operations-reports.controller.js +53 -0
  16. package/dist/controllers/operations-reports.controller.js.map +1 -0
  17. package/dist/controllers/operations-tasks.controller.d.ts +41 -2
  18. package/dist/controllers/operations-tasks.controller.d.ts.map +1 -1
  19. package/dist/controllers/operations-tasks.controller.js +17 -5
  20. package/dist/controllers/operations-tasks.controller.js.map +1 -1
  21. package/dist/dto/create-collaborator-cost.dto.d.ts +16 -0
  22. package/dist/dto/create-collaborator-cost.dto.d.ts.map +1 -0
  23. package/dist/dto/create-collaborator-cost.dto.js +88 -0
  24. package/dist/dto/create-collaborator-cost.dto.js.map +1 -0
  25. package/dist/dto/create-collaborator.dto.d.ts +0 -1
  26. package/dist/dto/create-collaborator.dto.d.ts.map +1 -1
  27. package/dist/dto/create-collaborator.dto.js +0 -6
  28. package/dist/dto/create-collaborator.dto.js.map +1 -1
  29. package/dist/dto/create-cost-type.dto.d.ts +13 -0
  30. package/dist/dto/create-cost-type.dto.d.ts.map +1 -0
  31. package/dist/dto/create-cost-type.dto.js +87 -0
  32. package/dist/dto/create-cost-type.dto.js.map +1 -0
  33. package/dist/dto/list-approvals.dto.d.ts +2 -0
  34. package/dist/dto/list-approvals.dto.d.ts.map +1 -1
  35. package/dist/dto/list-approvals.dto.js +10 -0
  36. package/dist/dto/list-approvals.dto.js.map +1 -1
  37. package/dist/dto/list-collaborator-costs.dto.d.ts +5 -0
  38. package/dist/dto/list-collaborator-costs.dto.d.ts.map +1 -0
  39. package/dist/dto/list-collaborator-costs.dto.js +23 -0
  40. package/dist/dto/list-collaborator-costs.dto.js.map +1 -0
  41. package/dist/dto/list-cost-types.dto.d.ts +6 -0
  42. package/dist/dto/list-cost-types.dto.d.ts.map +1 -0
  43. package/dist/dto/list-cost-types.dto.js +35 -0
  44. package/dist/dto/list-cost-types.dto.js.map +1 -0
  45. package/dist/dto/list-my-projects.dto.d.ts +5 -0
  46. package/dist/dto/list-my-projects.dto.d.ts.map +1 -0
  47. package/dist/dto/list-my-projects.dto.js +23 -0
  48. package/dist/dto/list-my-projects.dto.js.map +1 -0
  49. package/dist/dto/list-my-tasks.dto.d.ts +6 -0
  50. package/dist/dto/list-my-tasks.dto.d.ts.map +1 -0
  51. package/dist/dto/list-my-tasks.dto.js +33 -0
  52. package/dist/dto/list-my-tasks.dto.js.map +1 -0
  53. package/dist/dto/list-projects.dto.d.ts +1 -0
  54. package/dist/dto/list-projects.dto.d.ts.map +1 -1
  55. package/dist/dto/list-projects.dto.js +7 -0
  56. package/dist/dto/list-projects.dto.js.map +1 -1
  57. package/dist/dto/list-reports.dto.d.ts +16 -0
  58. package/dist/dto/list-reports.dto.d.ts.map +1 -0
  59. package/dist/dto/list-reports.dto.js +75 -0
  60. package/dist/dto/list-reports.dto.js.map +1 -0
  61. package/dist/dto/list-tasks.dto.d.ts +2 -0
  62. package/dist/dto/list-tasks.dto.d.ts.map +1 -1
  63. package/dist/dto/list-tasks.dto.js +12 -0
  64. package/dist/dto/list-tasks.dto.js.map +1 -1
  65. package/dist/dto/list-timesheets.dto.d.ts +2 -0
  66. package/dist/dto/list-timesheets.dto.d.ts.map +1 -1
  67. package/dist/dto/list-timesheets.dto.js +10 -0
  68. package/dist/dto/list-timesheets.dto.js.map +1 -1
  69. package/dist/dto/update-collaborator-cost.dto.d.ts +6 -0
  70. package/dist/dto/update-collaborator-cost.dto.d.ts.map +1 -0
  71. package/dist/dto/update-collaborator-cost.dto.js +9 -0
  72. package/dist/dto/update-collaborator-cost.dto.js.map +1 -0
  73. package/dist/dto/update-task.dto.d.ts +1 -0
  74. package/dist/dto/update-task.dto.d.ts.map +1 -1
  75. package/dist/dto/update-task.dto.js +6 -0
  76. package/dist/dto/update-task.dto.js.map +1 -1
  77. package/dist/operations.module.d.ts.map +1 -1
  78. package/dist/operations.module.js +4 -0
  79. package/dist/operations.module.js.map +1 -1
  80. package/dist/operations.service.d.ts +457 -3
  81. package/dist/operations.service.d.ts.map +1 -1
  82. package/dist/operations.service.js +1445 -208
  83. package/dist/operations.service.js.map +1 -1
  84. package/dist/operations.service.spec.js +31 -7
  85. package/dist/operations.service.spec.js.map +1 -1
  86. package/hedhog/data/menu.yaml +112 -7
  87. package/hedhog/data/operations_cost_type.yaml +166 -0
  88. package/hedhog/data/route.yaml +185 -0
  89. package/hedhog/frontend/app/_components/collaborator-costs-section.tsx.ejs +884 -0
  90. package/hedhog/frontend/app/_components/collaborator-details-screen.tsx.ejs +94 -15
  91. package/hedhog/frontend/app/_components/collaborator-form-screen.tsx.ejs +219 -94
  92. package/hedhog/frontend/app/_components/contract-details-screen.tsx.ejs +21 -32
  93. package/hedhog/frontend/app/_components/contract-form-screen.tsx.ejs +178 -89
  94. package/hedhog/frontend/app/_components/my-project-summary-screen.tsx.ejs +1185 -0
  95. package/hedhog/frontend/app/_components/operations-calendar-view.tsx.ejs +306 -0
  96. package/hedhog/frontend/app/_components/project-details-screen.tsx.ejs +943 -782
  97. package/hedhog/frontend/app/_components/task-detail-sheet.tsx.ejs +223 -0
  98. package/hedhog/frontend/app/_lib/api.ts.ejs +162 -0
  99. package/hedhog/frontend/app/_lib/types.ts.ejs +229 -3
  100. package/hedhog/frontend/app/_lib/utils/format.ts.ejs +11 -3
  101. package/hedhog/frontend/app/approvals/page.tsx.ejs +191 -46
  102. package/hedhog/frontend/app/collaborators/page.tsx.ejs +133 -25
  103. package/hedhog/frontend/app/my-projects/[id]/page.tsx.ejs +11 -0
  104. package/hedhog/frontend/app/my-projects/page.tsx.ejs +440 -0
  105. package/hedhog/frontend/app/my-tasks/page.tsx.ejs +1304 -0
  106. package/hedhog/frontend/app/reports/collaborators/page.tsx.ejs +771 -0
  107. package/hedhog/frontend/app/reports/projects/page.tsx.ejs +809 -0
  108. package/hedhog/frontend/app/timesheets/page.tsx.ejs +322 -58
  109. package/hedhog/frontend/messages/en.json +234 -25
  110. package/hedhog/frontend/messages/pt.json +234 -25
  111. package/hedhog/table/operations_collaborator.yaml +0 -4
  112. package/hedhog/table/operations_collaborator_compensation_history.yaml +28 -0
  113. package/hedhog/table/operations_collaborator_cost.yaml +56 -0
  114. package/hedhog/table/operations_cost_type.yaml +38 -0
  115. package/package.json +6 -6
  116. package/src/controllers/operations-collaborator-costs.controller.ts +147 -0
  117. package/src/controllers/operations-collaborators.controller.ts +19 -8
  118. package/src/controllers/operations-projects.controller.ts +19 -8
  119. package/src/controllers/operations-reports.controller.ts +32 -0
  120. package/src/controllers/operations-tasks.controller.ts +32 -12
  121. package/src/dto/create-collaborator-cost.dto.ts +78 -0
  122. package/src/dto/create-collaborator.dto.ts +9 -14
  123. package/src/dto/create-cost-type.dto.ts +62 -0
  124. package/src/dto/list-approvals.dto.ts +8 -0
  125. package/src/dto/list-collaborator-costs.dto.ts +8 -0
  126. package/src/dto/list-cost-types.dto.ts +19 -0
  127. package/src/dto/list-my-projects.dto.ts +8 -0
  128. package/src/dto/list-my-tasks.dto.ts +17 -0
  129. package/src/dto/list-projects.dto.ts +7 -1
  130. package/src/dto/list-reports.dto.ts +51 -0
  131. package/src/dto/list-tasks.dto.ts +11 -1
  132. package/src/dto/list-timesheets.dto.ts +8 -0
  133. package/src/dto/update-collaborator-cost.dto.ts +4 -0
  134. package/src/dto/update-task.dto.ts +6 -0
  135. package/src/operations.module.ts +7 -3
  136. package/src/operations.service.spec.ts +45 -7
  137. package/src/operations.service.ts +1992 -225
@@ -10,6 +10,8 @@
10
10
  "deactivate": "Deactivate",
11
11
  "save": "Save",
12
12
  "delete": "Delete",
13
+ "archive": "Archive",
14
+ "unarchive": "Unarchive",
13
15
  "addLine": "Add line",
14
16
  "approve": "Approve",
15
17
  "reject": "Reject",
@@ -24,7 +26,9 @@
24
26
  },
25
27
  "filters": {
26
28
  "allStatuses": "All statuses",
27
- "allTypes": "All types"
29
+ "allTypes": "All types",
30
+ "dateFrom": "From",
31
+ "dateTo": "To"
28
32
  },
29
33
  "labels": {
30
34
  "notAvailable": "Not available",
@@ -38,7 +42,9 @@
38
42
  "joinedAt": "Joined at",
39
43
  "leftAt": "Left at",
40
44
  "actions": "Actions",
45
+ "name": "Name",
41
46
  "status": "Status",
47
+ "task": "Task",
42
48
  "project": "Project",
43
49
  "contract": "Contract",
44
50
  "contractStatus": "Contract status",
@@ -72,6 +78,7 @@
72
78
  "projectAssignment": "Project assignment",
73
79
  "activity": "Task / activity",
74
80
  "description": "Description",
81
+ "deadline": "Deadline",
75
82
  "workDate": "Work date",
76
83
  "hours": "Hours",
77
84
  "days": "Days",
@@ -100,7 +107,8 @@
100
107
  "searchCollaborator": "Search collaborator...",
101
108
  "noCollaboratorsFound": "No collaborators found.",
102
109
  "searchTemplate": "Search template...",
103
- "noTemplatesFound": "No templates found."
110
+ "noTemplatesFound": "No templates found.",
111
+ "loading": "Loading..."
104
112
  },
105
113
  "states": {
106
114
  "emptyTitle": "No records found",
@@ -169,13 +177,29 @@
169
177
  "viewModeCards": "Grid",
170
178
  "cards": {
171
179
  "total": "Total collaborators",
172
- "totalDescription": "All operational collaborators registered in the system.",
180
+ "totalDescription": "All registered collaborators.",
181
+ "totalTooltip": "Includes all operational collaborators in the system, regardless of status.",
173
182
  "active": "Active",
174
- "activeDescription": "Currently working with an active operational status.",
183
+ "activeDescription": "With active operational status.",
184
+ "activeTooltip": "Collaborators currently working with an active status at the time of the query.",
175
185
  "onLeave": "On leave",
176
- "onLeaveDescription": "Temporarily away — included in capacity but not deployable.",
186
+ "onLeaveDescription": "Temporarily away.",
187
+ "onLeaveTooltip": "Temporarily unavailable — counted in capacity but not deployable for allocation.",
177
188
  "withContracts": "With contract",
178
- "withContractsDescription": "Collaborators linked to at least one contract."
189
+ "withContractsDescription": "Linked to at least one contract.",
190
+ "withContractsTooltip": "Collaborators with at least one active or historical contract on record.",
191
+ "totalSalary": "Total salary",
192
+ "totalSalaryDescription": "Sum of base compensation (all).",
193
+ "totalSalaryTooltip": "Sum of the base compensation from the primary contract of every collaborator in the system.",
194
+ "totalCosts": "Total costs",
195
+ "totalCostsDescription": "Sum of additional costs (all).",
196
+ "totalCostsTooltip": "Sum of all extra costs recorded (benefits, charges, equipment, etc.) for all collaborators.",
197
+ "avgSalaryPlusCosts": "Total salary + costs",
198
+ "avgSalaryPlusCostsDescription": "Compensation + costs combined (all).",
199
+ "avgSalaryPlusCostsTooltip": "Global sum of base compensation and additional costs for all collaborators in the system.",
200
+ "avgSalaryPlusCostsPerCollaborator": "Average per collaborator",
201
+ "avgSalaryPlusCostsPerCollaboratorDescription": "Average total cost per collaborator (all).",
202
+ "avgSalaryPlusCostsPerCollaboratorTooltip": "Average of (salary + costs) divided by the total number of collaborators in the system."
179
203
  },
180
204
  "sheet": {
181
205
  "createTitle": "Create collaborator",
@@ -265,8 +289,11 @@
265
289
  "equityDescription": "Fill this section only when the selected relationship requires ownership or governance data.",
266
290
  "supervisor": "Supervisor assignment",
267
291
  "supervisorDescription": "Link the direct supervisor used for team visibility and approvals.",
268
- "contract": "Compensation and contract draft",
269
- "contractDescription": "Capture baseline contract data and choose whether a hiring-origin draft should be created automatically.",
292
+ "contract": "Compensation and contract",
293
+ "contractDescription": "Set the base compensation and link or create the related contract for this collaborator.",
294
+ "costs": "Collaborator costs",
295
+ "costsDescription": "Manage recurring and one-time costs associated with this collaborator.",
296
+ "costsSaveBefore": "Save the collaborator before adding costs.",
270
297
  "schedule": "Default weekly schedule",
271
298
  "scheduleDescription": "Define the expected recurring work schedule used by operations and approvals."
272
299
  },
@@ -289,7 +316,12 @@
289
316
  "collaboratorTypeDescription": "Select the nature of the relationship with the company. Role and equity participation stay separate.",
290
317
  "weeklyCapacityHours": "Weekly workload",
291
318
  "compensationAmount": "Compensation amount",
292
- "contractDescription": "Contract draft notes",
319
+ "contract": "Contract",
320
+ "contractPlaceholder": "Search or select a contract…",
321
+ "contractEmpty": "No contract linked",
322
+ "contractCreateTitle": "New contract",
323
+ "contractCreateDescription": "Create a new contract and link it to this collaborator.",
324
+ "contractNameField": "Contract name",
293
325
  "equityParticipationType": "Participation type",
294
326
  "equityPercentage": "Ownership percentage",
295
327
  "votingPower": "Voting power (%)",
@@ -352,7 +384,8 @@
352
384
  "createUserPassword": "Strong password"
353
385
  },
354
386
  "actions": {
355
- "createUser": "Create system user"
387
+ "createUser": "Create system user",
388
+ "editPersonCrm": "Edit person record (CRM)"
356
389
  },
357
390
  "states": {
358
391
  "loadingCollaboratorTypes": "Loading relationship types..."
@@ -447,11 +480,21 @@
447
480
  "timeOff": "Time off summary",
448
481
  "timeOffDescription": "Request counts visible from the collaborator history.",
449
482
  "scheduleAdjustments": "Schedule adjustments",
450
- "scheduleAdjustmentsDescription": "Recent schedule adjustment requests created by this collaborator."
483
+ "scheduleAdjustmentsDescription": "Recent schedule adjustment requests created by this collaborator.",
484
+ "compensationHistory": "Salary history",
485
+ "compensationHistoryDescription": "Historical record of salary changes for this collaborator."
451
486
  },
452
487
  "noContracts": "No related contracts are linked to this collaborator yet.",
453
488
  "noProjects": "No projects are assigned to this collaborator yet.",
454
- "noScheduleAdjustments": "No schedule adjustment requests were found."
489
+ "noScheduleAdjustments": "No schedule adjustment requests were found.",
490
+ "noCompensationHistory": "No salary changes have been recorded for this collaborator yet.",
491
+ "compensationHistory": {
492
+ "amount": "Amount",
493
+ "effectiveDate": "Effective date",
494
+ "recordedAt": "Recorded at",
495
+ "changedBy": "Changed by",
496
+ "notes": "Notes"
497
+ }
455
498
  },
456
499
  "ProjectsPage": {
457
500
  "title": "Projects",
@@ -495,6 +538,72 @@
495
538
  "statusError": "Unable to update project status."
496
539
  }
497
540
  },
541
+ "MyProjectsPage": {
542
+ "title": "My Projects",
543
+ "description": "Projects you are assigned to.",
544
+ "breadcrumb": "My Projects",
545
+ "searchPlaceholder": "Search project, client, or contract...",
546
+ "emptyDescription": "You are not currently assigned to any project.",
547
+ "cards": {
548
+ "total": "My Projects",
549
+ "totalDescription": "Projects you have an active allocation in.",
550
+ "active": "Active",
551
+ "activeDescription": "Projects open for timesheet entries.",
552
+ "atRisk": "At risk",
553
+ "atRiskDescription": "Flagged projects with delivery issues.",
554
+ "upcomingDeliveries": "With deadline",
555
+ "upcomingDeliveriesDescription": "Projects that have an end date defined."
556
+ },
557
+ "viewMode": "View mode",
558
+ "viewModeTable": "Table",
559
+ "viewModeCards": "Cards"
560
+ },
561
+ "MyTasksPage": {
562
+ "title": "My Tasks",
563
+ "description": "Your tasks across all projects.",
564
+ "breadcrumb": "My Tasks",
565
+ "searchPlaceholder": "Search task or project...",
566
+ "viewMode": "View mode",
567
+ "viewModeTable": "Table",
568
+ "viewModeCards": "Cards",
569
+ "viewModeBoard": "Board",
570
+ "emptyDescription": "You have no tasks assigned at the moment.",
571
+ "collections": {
572
+ "active": "Active",
573
+ "archived": "Archived"
574
+ },
575
+ "actions": {
576
+ "create": "New task"
577
+ },
578
+ "dialogs": {
579
+ "createTitle": "Create new task",
580
+ "createProjectPlaceholder": "Select a project",
581
+ "createNameLabel": "Name",
582
+ "createNamePlaceholder": "Task name",
583
+ "createDescriptionLabel": "Description",
584
+ "createDescriptionPlaceholder": "Optional description",
585
+ "archiveTitle": "Archive task",
586
+ "archiveDescription": "The task will leave the main list and move to the archived list. If you prefer, you can also delete it now.",
587
+ "deleteTitle": "Delete task",
588
+ "deleteDescription": "Are you sure you want to permanently delete this task? This action cannot be undone."
589
+ },
590
+ "cards": {
591
+ "total": "Tasks",
592
+ "totalDescription": "Total tasks assigned to you.",
593
+ "doing": "In progress",
594
+ "doingDescription": "Tasks currently being worked on.",
595
+ "review": "In review",
596
+ "reviewDescription": "Tasks awaiting review.",
597
+ "done": "Done",
598
+ "doneDescription": "Completed tasks."
599
+ },
600
+ "status": {
601
+ "todo": "To do",
602
+ "doing": "In progress",
603
+ "review": "In review",
604
+ "done": "Done"
605
+ }
606
+ },
498
607
  "ProjectFormPage": {
499
608
  "newTitle": "New Project",
500
609
  "editTitle": "Edit Project",
@@ -644,7 +753,9 @@
644
753
  "quickRadar": "Quick radar",
645
754
  "quickRadarDescription": "Short-term decision signals.",
646
755
  "taskBoard": "Task board",
647
- "taskBoardDescription": "Kanban-style board with drag between columns and task side panel."
756
+ "taskBoardDescription": "Kanban-style board with drag between columns and task side panel.",
757
+ "archivedTasks": "Archived tasks",
758
+ "archivedTasksDescription": "Review archived project tasks, open details, restore them, or delete them permanently."
648
759
  },
649
760
  "charts": {
650
761
  "allocationByCollaborator": "Allocation by collaborator",
@@ -669,7 +780,14 @@
669
780
  "tagsLabel": "Tags",
670
781
  "tagsPlaceholder": "planning, client, design (comma-separated)",
671
782
  "saving": "Saving..."
672
- }
783
+ },
784
+ "dialogs": {
785
+ "archiveTitle": "Archive task",
786
+ "archiveDescription": "The task will be moved to the archived list. If needed, you can also permanently delete it now.",
787
+ "deleteTitle": "Delete task",
788
+ "deleteDescription": "Are you sure you want to permanently delete this task? This action cannot be undone."
789
+ },
790
+ "emptyArchivedDescription": "There are no archived tasks in this project."
673
791
  },
674
792
  "ContractsPage": {
675
793
  "title": "Contracts",
@@ -1024,6 +1142,17 @@
1024
1142
  "completed": "Completed",
1025
1143
  "failed": "Failed",
1026
1144
  "skipped": "Skipped"
1145
+ },
1146
+ "documentTypes": {
1147
+ "source_upload": "Primary document",
1148
+ "generated_pdf": "Generated PDF",
1149
+ "attachment": "Attachment",
1150
+ "other": "Other"
1151
+ },
1152
+ "historyActions": {
1153
+ "created": "Created",
1154
+ "updated": "Updated",
1155
+ "deleted": "Deleted"
1027
1156
  }
1028
1157
  },
1029
1158
  "messages": {
@@ -1032,7 +1161,7 @@
1032
1161
  "createError": "Unable to create the contract.",
1033
1162
  "updateSuccess": "Contract updated successfully.",
1034
1163
  "updateError": "Unable to update the contract.",
1035
- "pdfHint": "Upload a PDF, DOC, or DOCX file to attach it as the current contract document.",
1164
+ "pdfHint": "Upload one or more PDF, DOC, or DOCX files. The first file becomes the main contract document and the others are saved as attachments.",
1036
1165
  "pdfReady": "Document ready to save: {name}"
1037
1166
  }
1038
1167
  },
@@ -1056,7 +1185,7 @@
1056
1185
  "ContractDetailsPage": {
1057
1186
  "title": "Contract Details",
1058
1187
  "breadcrumb": "Contract Details",
1059
- "description": "Preview the contract, download the file, and review linked relationships.",
1188
+ "description": "Download contract files and review linked relationships.",
1060
1189
  "notFound": "The requested contract could not be found or is not visible in your access scope.",
1061
1190
  "tabs": {
1062
1191
  "overview": "Overview",
@@ -1109,11 +1238,16 @@
1109
1238
  "noDocuments": "No contract documents are available yet.",
1110
1239
  "noRevisions": "No amendments, renewals, or revisions are linked yet.",
1111
1240
  "noHistory": "No audit history is available yet."
1241
+ },
1242
+ "historyNotes": {
1243
+ "manualCreated": "Manual contract created from the registry.",
1244
+ "registryUpdated": "Contract registry data updated.",
1245
+ "documentsRemoved": "Contract files removed."
1112
1246
  }
1113
1247
  },
1114
1248
  "TimesheetsPage": {
1115
1249
  "title": "Timesheets",
1116
- "description": "Log project work in seconds, keep weekly drafts organized, and submit them when ready.",
1250
+ "description": "Log project work one day at a time, keep drafts organized, and submit them when ready.",
1117
1251
  "breadcrumb": "Timesheets",
1118
1252
  "searchPlaceholder": "Search collaborator, project, task, approver, or notes...",
1119
1253
  "emptyDescription": "No timesheets match the current filters.",
@@ -1141,7 +1275,7 @@
1141
1275
  "task": "Only tasks from the selected project assignment appear here.",
1142
1276
  "selectProjectFirst": "Select a project first to load or create tasks.",
1143
1277
  "keepContext": "Keep project, task, and date after saving",
1144
- "keepContextDescription": "Best for logging several entries in sequence."
1278
+ "keepContextDescription": "Best for logging several entries for the same day in sequence."
1145
1279
  },
1146
1280
  "validation": {
1147
1281
  "descriptionMaxLength": "The description can have at most 500 characters."
@@ -1172,9 +1306,9 @@
1172
1306
  },
1173
1307
  "details": {
1174
1308
  "title": "Timesheet details",
1175
- "description": "Review the submitted summary and the list of entries linked to this week.",
1176
- "period": "Period",
1177
- "entriesTitle": "Week entries",
1309
+ "description": "Review the submitted summary and the list of entries linked to this day.",
1310
+ "period": "Day",
1311
+ "entriesTitle": "Day entries",
1178
1312
  "noEntries": "No entries are linked to this timesheet."
1179
1313
  },
1180
1314
  "recentEntries": {
@@ -1188,7 +1322,7 @@
1188
1322
  },
1189
1323
  "cards": {
1190
1324
  "visible": "Visible timesheets",
1191
- "visibleDescription": "Weekly records visible to your role scope.",
1325
+ "visibleDescription": "Daily records visible to your role scope.",
1192
1326
  "pending": "Pending review",
1193
1327
  "pendingDescription": "Submitted and waiting for a supervisor decision.",
1194
1328
  "hours": "Logged hours",
@@ -1197,6 +1331,7 @@
1197
1331
  "viewMode": "View mode",
1198
1332
  "viewModeTable": "Table",
1199
1333
  "viewModeCards": "Grid",
1334
+ "viewModeCalendar": "Calendar",
1200
1335
  "messages": {
1201
1336
  "requiredFields": "Project, task, date, and duration are required.",
1202
1337
  "collaboratorContextRequired": "Your user must be linked to a collaborator profile to report time.",
@@ -1213,7 +1348,7 @@
1213
1348
  "deleteSuccess": "Entry deleted successfully.",
1214
1349
  "deleteError": "Unable to delete the entry.",
1215
1350
  "confirmDeleteTitle": "Delete entry?",
1216
- "confirmDeleteDescription": "This will remove the entry for \"{name}\" from the current weekly draft.",
1351
+ "confirmDeleteDescription": "This will remove the entry for \"{name}\" from the current draft.",
1217
1352
  "submitSuccess": "Timesheet submitted successfully.",
1218
1353
  "submitError": "Unable to submit the timesheet.",
1219
1354
  "taskCreateSuccess": "Task created successfully.",
@@ -1249,8 +1384,8 @@
1249
1384
  },
1250
1385
  "details": {
1251
1386
  "title": "Approval details",
1252
- "description": "Review the submitted request, the requested period, and the approver response.",
1253
- "period": "Period",
1387
+ "description": "Review the submitted request, the informed day, and the approver response.",
1388
+ "period": "Day",
1254
1389
  "projects": "Linked projects",
1255
1390
  "decidedAt": "Decided at"
1256
1391
  },
@@ -1284,6 +1419,7 @@
1284
1419
  "viewMode": "View mode",
1285
1420
  "viewModeTable": "Table",
1286
1421
  "viewModeCards": "Grid",
1422
+ "viewModeCalendar": "Calendar",
1287
1423
  "messages": {
1288
1424
  "approveSuccess": "Approval completed successfully.",
1289
1425
  "approveError": "Unable to approve the request.",
@@ -1454,5 +1590,78 @@
1454
1590
  "noTimeOff": "No pending time-off requests were found.",
1455
1591
  "noScheduleAdjustments": "No pending schedule adjustments were found."
1456
1592
  }
1593
+ },
1594
+ "CollaboratorCostsSection": {
1595
+ "title": "Collaborator costs",
1596
+ "description": "Recurring or one-time costs associated with this collaborator beyond the base compensation.",
1597
+ "empty": "No costs registered for this collaborator.",
1598
+ "confirmDelete": "Remove this cost?",
1599
+ "summary": {
1600
+ "monthlyEstimate": "Est. monthly cost",
1601
+ "allocatable": "Allocatable",
1602
+ "nonAllocatable": "Non-allocatable",
1603
+ "costPerHour": "Est. cost/hour"
1604
+ },
1605
+ "table": {
1606
+ "type": "Type",
1607
+ "amount": "Amount",
1608
+ "recurrence": "Recurrence",
1609
+ "allocatable": "Allocatable",
1610
+ "validity": "Validity",
1611
+ "actions": "Actions"
1612
+ },
1613
+ "fields": {
1614
+ "costType": "Cost type",
1615
+ "costTypeName": "Name",
1616
+ "costTypeCode": "Code",
1617
+ "costTypeDescription": "Description",
1618
+ "category": "Category",
1619
+ "description": "Description",
1620
+ "amount": "Amount",
1621
+ "recurrence": "Recurrence",
1622
+ "startDate": "Start date",
1623
+ "endDate": "End date",
1624
+ "allocatable": "Allocatable (project cost)",
1625
+ "depreciationMonths": "Depreciation months",
1626
+ "notes": "Notes"
1627
+ },
1628
+ "placeholders": {
1629
+ "costType": "Select or create a cost type",
1630
+ "costTypeName": "Cost type name",
1631
+ "costTypeCode": "e.g. INFRA-001",
1632
+ "costTypeDescription": "Brief description (optional)",
1633
+ "category": "e.g. Infrastructure, Benefits",
1634
+ "description": "Brief description of this cost",
1635
+ "depreciationMonths": "e.g. 12",
1636
+ "notes": "Additional observations (optional)"
1637
+ },
1638
+ "hints": {
1639
+ "depreciationMonths": "The one-time cost will be spread over this many months for the estimated monthly cost calculation."
1640
+ },
1641
+ "recurrence": {
1642
+ "one_time": "One-time",
1643
+ "monthly": "Monthly",
1644
+ "yearly": "Yearly"
1645
+ },
1646
+ "validation": {
1647
+ "required": "This field is required.",
1648
+ "greaterThanZero": "Amount must be greater than zero.",
1649
+ "endDateAfterStart": "End date must be after the start date.",
1650
+ "positiveInteger": "Enter a whole number greater than zero."
1651
+ },
1652
+ "actions": {
1653
+ "add": "Add cost",
1654
+ "edit": "Edit cost",
1655
+ "saving": "Saving…",
1656
+ "createCostType": "Create cost type"
1657
+ },
1658
+ "messages": {
1659
+ "createSuccess": "Cost added successfully.",
1660
+ "updateSuccess": "Cost updated successfully.",
1661
+ "deleteSuccess": "Cost removed successfully.",
1662
+ "saveError": "Unable to save the cost.",
1663
+ "deleteError": "Unable to remove the cost.",
1664
+ "loadError": "Unable to load costs. Please try again."
1665
+ }
1457
1666
  }
1458
1667
  }