@hed-hog/operations 0.0.329 → 0.0.331

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 (290) hide show
  1. package/README.md +5 -5
  2. package/dist/controllers/operations-collaborators.controller.d.ts +7 -216
  3. package/dist/controllers/operations-collaborators.controller.d.ts.map +1 -1
  4. package/dist/controllers/operations-contracts.controller.d.ts +6 -6
  5. package/dist/controllers/operations-projects.controller.d.ts +25 -0
  6. package/dist/controllers/operations-projects.controller.d.ts.map +1 -1
  7. package/dist/controllers/operations-projects.controller.js +48 -0
  8. package/dist/controllers/operations-projects.controller.js.map +1 -1
  9. package/dist/controllers/operations-reports.controller.d.ts +1 -1
  10. package/dist/controllers/operations-tasks.controller.d.ts +30 -5
  11. package/dist/controllers/operations-tasks.controller.d.ts.map +1 -1
  12. package/dist/controllers/operations-tasks.controller.js +43 -32
  13. package/dist/controllers/operations-tasks.controller.js.map +1 -1
  14. package/dist/controllers/operations-timesheets.controller.d.ts +9 -9
  15. package/dist/dashboard/components/DashboardLayout.d.ts +30 -0
  16. package/dist/dashboard/components/DashboardLayout.d.ts.map +1 -0
  17. package/dist/dashboard/components/DashboardLayout.js +87 -0
  18. package/dist/dashboard/components/DashboardLayout.js.map +1 -0
  19. package/dist/dashboard/components/widget-registry.d.ts +23 -0
  20. package/dist/dashboard/components/widget-registry.d.ts.map +1 -0
  21. package/dist/dashboard/components/widget-registry.js +245 -0
  22. package/dist/dashboard/components/widget-registry.js.map +1 -0
  23. package/dist/dashboard/hooks/useDashboardData.d.ts +20 -0
  24. package/dist/dashboard/hooks/useDashboardData.d.ts.map +1 -0
  25. package/dist/dashboard/hooks/useDashboardData.js +24 -0
  26. package/dist/dashboard/hooks/useDashboardData.js.map +1 -0
  27. package/dist/dashboard/types/widgets.types.d.ts +233 -0
  28. package/dist/dashboard/types/widgets.types.d.ts.map +1 -0
  29. package/dist/dashboard/types/widgets.types.js +6 -0
  30. package/dist/dashboard/types/widgets.types.js.map +1 -0
  31. package/dist/dashboard/widgets/CapacityDistribution.d.ts +23 -0
  32. package/dist/dashboard/widgets/CapacityDistribution.d.ts.map +1 -0
  33. package/dist/dashboard/widgets/CapacityDistribution.js +11 -0
  34. package/dist/dashboard/widgets/CapacityDistribution.js.map +1 -0
  35. package/dist/dashboard/widgets/EffortByProject.d.ts +22 -0
  36. package/dist/dashboard/widgets/EffortByProject.d.ts.map +1 -0
  37. package/dist/dashboard/widgets/EffortByProject.js +11 -0
  38. package/dist/dashboard/widgets/EffortByProject.js.map +1 -0
  39. package/dist/dashboard/widgets/HeadcountByArea.d.ts +24 -0
  40. package/dist/dashboard/widgets/HeadcountByArea.d.ts.map +1 -0
  41. package/dist/dashboard/widgets/HeadcountByArea.js +11 -0
  42. package/dist/dashboard/widgets/HeadcountByArea.js.map +1 -0
  43. package/dist/dashboard/widgets/ManagedProjectsStatus.d.ts +18 -0
  44. package/dist/dashboard/widgets/ManagedProjectsStatus.d.ts.map +1 -0
  45. package/dist/dashboard/widgets/ManagedProjectsStatus.js +12 -0
  46. package/dist/dashboard/widgets/ManagedProjectsStatus.js.map +1 -0
  47. package/dist/dashboard/widgets/MyHoursPeriodKpi.d.ts +22 -0
  48. package/dist/dashboard/widgets/MyHoursPeriodKpi.d.ts.map +1 -0
  49. package/dist/dashboard/widgets/MyHoursPeriodKpi.js +12 -0
  50. package/dist/dashboard/widgets/MyHoursPeriodKpi.js.map +1 -0
  51. package/dist/dashboard/widgets/MyOpenRequestsKpi.d.ts +19 -0
  52. package/dist/dashboard/widgets/MyOpenRequestsKpi.d.ts.map +1 -0
  53. package/dist/dashboard/widgets/MyOpenRequestsKpi.js +17 -0
  54. package/dist/dashboard/widgets/MyOpenRequestsKpi.js.map +1 -0
  55. package/dist/dashboard/widgets/MyPendingRequestsList.d.ts +23 -0
  56. package/dist/dashboard/widgets/MyPendingRequestsList.d.ts.map +1 -0
  57. package/dist/dashboard/widgets/MyPendingRequestsList.js +14 -0
  58. package/dist/dashboard/widgets/MyPendingRequestsList.js.map +1 -0
  59. package/dist/dashboard/widgets/MyProjectAllocationsKpi.d.ts +22 -0
  60. package/dist/dashboard/widgets/MyProjectAllocationsKpi.d.ts.map +1 -0
  61. package/dist/dashboard/widgets/MyProjectAllocationsKpi.js +11 -0
  62. package/dist/dashboard/widgets/MyProjectAllocationsKpi.js.map +1 -0
  63. package/dist/dashboard/widgets/MyQuickActions.d.ts +23 -0
  64. package/dist/dashboard/widgets/MyQuickActions.d.ts.map +1 -0
  65. package/dist/dashboard/widgets/MyQuickActions.js +18 -0
  66. package/dist/dashboard/widgets/MyQuickActions.js.map +1 -0
  67. package/dist/dashboard/widgets/MyRelevantDeadlines.d.ts +23 -0
  68. package/dist/dashboard/widgets/MyRelevantDeadlines.d.ts.map +1 -0
  69. package/dist/dashboard/widgets/MyRelevantDeadlines.js +22 -0
  70. package/dist/dashboard/widgets/MyRelevantDeadlines.js.map +1 -0
  71. package/dist/dashboard/widgets/MyTimesheetStatusKpi.d.ts +17 -0
  72. package/dist/dashboard/widgets/MyTimesheetStatusKpi.d.ts.map +1 -0
  73. package/dist/dashboard/widgets/MyTimesheetStatusKpi.js +11 -0
  74. package/dist/dashboard/widgets/MyTimesheetStatusKpi.js.map +1 -0
  75. package/dist/dashboard/widgets/MyWeeklyJourney.d.ts +21 -0
  76. package/dist/dashboard/widgets/MyWeeklyJourney.d.ts.map +1 -0
  77. package/dist/dashboard/widgets/MyWeeklyJourney.js +19 -0
  78. package/dist/dashboard/widgets/MyWeeklyJourney.js.map +1 -0
  79. package/dist/dashboard/widgets/PortfolioCostsKpi.d.ts +19 -0
  80. package/dist/dashboard/widgets/PortfolioCostsKpi.d.ts.map +1 -0
  81. package/dist/dashboard/widgets/PortfolioCostsKpi.js +12 -0
  82. package/dist/dashboard/widgets/PortfolioCostsKpi.js.map +1 -0
  83. package/dist/dashboard/widgets/PortfolioEffortKpi.d.ts +18 -0
  84. package/dist/dashboard/widgets/PortfolioEffortKpi.d.ts.map +1 -0
  85. package/dist/dashboard/widgets/PortfolioEffortKpi.js +8 -0
  86. package/dist/dashboard/widgets/PortfolioEffortKpi.js.map +1 -0
  87. package/dist/dashboard/widgets/PortfolioProjectsKpi.d.ts +22 -0
  88. package/dist/dashboard/widgets/PortfolioProjectsKpi.d.ts.map +1 -0
  89. package/dist/dashboard/widgets/PortfolioProjectsKpi.js +56 -0
  90. package/dist/dashboard/widgets/PortfolioProjectsKpi.js.map +1 -0
  91. package/dist/dashboard/widgets/PortfolioRiskKpi.d.ts +19 -0
  92. package/dist/dashboard/widgets/PortfolioRiskKpi.d.ts.map +1 -0
  93. package/dist/dashboard/widgets/PortfolioRiskKpi.js +11 -0
  94. package/dist/dashboard/widgets/PortfolioRiskKpi.js.map +1 -0
  95. package/dist/dashboard/widgets/ProjectStatusOverview.d.ts +19 -0
  96. package/dist/dashboard/widgets/ProjectStatusOverview.d.ts.map +1 -0
  97. package/dist/dashboard/widgets/ProjectStatusOverview.js +18 -0
  98. package/dist/dashboard/widgets/ProjectStatusOverview.js.map +1 -0
  99. package/dist/dashboard/widgets/StrategicDeadlines.d.ts +24 -0
  100. package/dist/dashboard/widgets/StrategicDeadlines.d.ts.map +1 -0
  101. package/dist/dashboard/widgets/StrategicDeadlines.js +22 -0
  102. package/dist/dashboard/widgets/StrategicDeadlines.js.map +1 -0
  103. package/dist/dashboard/widgets/TeamApprovalQueue.d.ts +24 -0
  104. package/dist/dashboard/widgets/TeamApprovalQueue.d.ts.map +1 -0
  105. package/dist/dashboard/widgets/TeamApprovalQueue.js +12 -0
  106. package/dist/dashboard/widgets/TeamApprovalQueue.js.map +1 -0
  107. package/dist/dashboard/widgets/TeamCapacityKpi.d.ts +18 -0
  108. package/dist/dashboard/widgets/TeamCapacityKpi.d.ts.map +1 -0
  109. package/dist/dashboard/widgets/TeamCapacityKpi.js +19 -0
  110. package/dist/dashboard/widgets/TeamCapacityKpi.js.map +1 -0
  111. package/dist/dashboard/widgets/TeamHeadcountKpi.d.ts +22 -0
  112. package/dist/dashboard/widgets/TeamHeadcountKpi.d.ts.map +1 -0
  113. package/dist/dashboard/widgets/TeamHeadcountKpi.js +56 -0
  114. package/dist/dashboard/widgets/TeamHeadcountKpi.js.map +1 -0
  115. package/dist/dashboard/widgets/TeamHoursKpi.d.ts +19 -0
  116. package/dist/dashboard/widgets/TeamHoursKpi.d.ts.map +1 -0
  117. package/dist/dashboard/widgets/TeamHoursKpi.js +13 -0
  118. package/dist/dashboard/widgets/TeamHoursKpi.js.map +1 -0
  119. package/dist/dashboard/widgets/TeamPendingApprovalsKpi.d.ts +20 -0
  120. package/dist/dashboard/widgets/TeamPendingApprovalsKpi.d.ts.map +1 -0
  121. package/dist/dashboard/widgets/TeamPendingApprovalsKpi.js +11 -0
  122. package/dist/dashboard/widgets/TeamPendingApprovalsKpi.js.map +1 -0
  123. package/dist/dashboard/widgets/TeamUtilizationOverview.d.ts +18 -0
  124. package/dist/dashboard/widgets/TeamUtilizationOverview.d.ts.map +1 -0
  125. package/dist/dashboard/widgets/TeamUtilizationOverview.js +17 -0
  126. package/dist/dashboard/widgets/TeamUtilizationOverview.js.map +1 -0
  127. package/dist/dashboard/widgets/TeamWorkloadAlerts.d.ts +24 -0
  128. package/dist/dashboard/widgets/TeamWorkloadAlerts.d.ts.map +1 -0
  129. package/dist/dashboard/widgets/TeamWorkloadAlerts.js +19 -0
  130. package/dist/dashboard/widgets/TeamWorkloadAlerts.js.map +1 -0
  131. package/dist/dashboard/widgets/index.d.ts +24 -0
  132. package/dist/dashboard/widgets/index.d.ts.map +1 -0
  133. package/dist/dashboard/widgets/index.js +54 -0
  134. package/dist/dashboard/widgets/index.js.map +1 -0
  135. package/dist/dto/create-collaborator.dto.d.ts +0 -1
  136. package/dist/dto/create-collaborator.dto.d.ts.map +1 -1
  137. package/dist/dto/create-collaborator.dto.js +0 -6
  138. package/dist/dto/create-collaborator.dto.js.map +1 -1
  139. package/dist/index.d.ts +2 -0
  140. package/dist/index.d.ts.map +1 -1
  141. package/dist/index.js +2 -0
  142. package/dist/index.js.map +1 -1
  143. package/dist/operations.controller.d.ts +42 -0
  144. package/dist/operations.controller.d.ts.map +1 -1
  145. package/dist/operations.service.d.ts +178 -264
  146. package/dist/operations.service.d.ts.map +1 -1
  147. package/dist/operations.service.js +2170 -1340
  148. package/dist/operations.service.js.map +1 -1
  149. package/dist/operations.service.spec.js +345 -174
  150. package/dist/operations.service.spec.js.map +1 -1
  151. package/hedhog/data/dashboard_component.yaml +66 -0
  152. package/hedhog/data/dashboard_component_role.yaml +8 -8
  153. package/hedhog/data/dashboard_item.yaml +25 -25
  154. package/hedhog/data/dashboard_role.yaml +1 -1
  155. package/hedhog/data/menu.yaml +6 -16
  156. package/hedhog/data/role.yaml +1 -1
  157. package/hedhog/data/route.yaml +116 -55
  158. package/hedhog/frontend/app/_components/async-options-combobox.tsx.ejs +15 -9
  159. package/hedhog/frontend/app/_components/collaborator-form-screen.tsx.ejs +39 -99
  160. package/hedhog/frontend/app/_components/collaborator-picker.tsx.ejs +158 -0
  161. package/hedhog/frontend/app/_components/my-project-summary-screen.tsx.ejs +314 -116
  162. package/hedhog/frontend/app/_components/project-assignments-tab.tsx.ejs +434 -449
  163. package/hedhog/frontend/app/_components/project-costs-section.tsx.ejs +51 -81
  164. package/hedhog/frontend/app/_components/project-details-screen.tsx.ejs +328 -423
  165. package/hedhog/frontend/app/_components/project-file-attachments.tsx.ejs +371 -0
  166. package/hedhog/frontend/app/_components/project-form-screen.tsx.ejs +446 -377
  167. package/hedhog/frontend/app/_components/task-detail-sheet.tsx.ejs +803 -581
  168. package/hedhog/frontend/app/_components/task-file-attachments.tsx.ejs +14 -9
  169. package/hedhog/frontend/app/_components/task-form-fields.tsx.ejs +406 -0
  170. package/hedhog/frontend/app/_components/task-form-sheet.tsx.ejs +629 -784
  171. package/hedhog/frontend/app/_components/task-info-display.tsx.ejs +137 -0
  172. package/hedhog/frontend/app/_components/timesheet-entry-create-sheet.tsx.ejs +306 -0
  173. package/hedhog/frontend/app/_lib/api.ts.ejs +480 -476
  174. package/hedhog/frontend/app/_lib/hooks/use-values-visibility.ts.ejs +61 -0
  175. package/hedhog/frontend/app/_lib/types.ts.ejs +66 -5
  176. package/hedhog/frontend/app/_lib/utils/format.ts.ejs +0 -2
  177. package/hedhog/frontend/app/_lib/utils/task-ui.ts.ejs +43 -0
  178. package/hedhog/frontend/app/approvals/page.tsx.ejs +11 -2
  179. package/hedhog/frontend/app/collaborator-types/page.tsx.ejs +6 -1
  180. package/hedhog/frontend/app/collaborators/page.tsx.ejs +127 -42
  181. package/hedhog/frontend/app/contracts/page.tsx.ejs +29 -8
  182. package/hedhog/frontend/app/dashboard/widgets/CapacityDistribution.tsx.ejs +84 -0
  183. package/hedhog/frontend/app/dashboard/widgets/EffortByProject.tsx.ejs +85 -0
  184. package/hedhog/frontend/app/dashboard/widgets/HeadcountByArea.tsx.ejs +101 -0
  185. package/hedhog/frontend/app/dashboard/widgets/ManagedProjectsStatus.tsx.ejs +113 -0
  186. package/hedhog/frontend/app/dashboard/widgets/MyHoursPeriodKpi.tsx.ejs +87 -0
  187. package/hedhog/frontend/app/dashboard/widgets/MyOpenRequestsKpi.tsx.ejs +97 -0
  188. package/hedhog/frontend/app/dashboard/widgets/MyPendingRequestsList.tsx.ejs +99 -0
  189. package/hedhog/frontend/app/dashboard/widgets/MyProjectAllocationsKpi.tsx.ejs +78 -0
  190. package/hedhog/frontend/app/dashboard/widgets/MyQuickActions.tsx.ejs +130 -0
  191. package/hedhog/frontend/app/dashboard/widgets/MyRelevantDeadlines.tsx.ejs +144 -0
  192. package/hedhog/frontend/app/dashboard/widgets/MyTimesheetStatusKpi.tsx.ejs +78 -0
  193. package/hedhog/frontend/app/dashboard/widgets/MyWeeklyJourney.tsx.ejs +99 -0
  194. package/hedhog/frontend/app/dashboard/widgets/PortfolioCostsKpi.tsx.ejs +112 -0
  195. package/hedhog/frontend/app/dashboard/widgets/PortfolioEffortKpi.tsx.ejs +93 -0
  196. package/hedhog/frontend/app/dashboard/widgets/PortfolioProjectsKpi.tsx.ejs +96 -0
  197. package/hedhog/frontend/app/dashboard/widgets/PortfolioRiskKpi.tsx.ejs +115 -0
  198. package/hedhog/frontend/app/dashboard/widgets/ProjectStatusOverview.tsx.ejs +120 -0
  199. package/hedhog/frontend/app/dashboard/widgets/StrategicDeadlines.tsx.ejs +146 -0
  200. package/hedhog/frontend/app/dashboard/widgets/TeamApprovalQueue.tsx.ejs +108 -0
  201. package/hedhog/frontend/app/dashboard/widgets/TeamCapacityKpi.tsx.ejs +97 -0
  202. package/hedhog/frontend/app/dashboard/widgets/TeamHeadcountKpi.tsx.ejs +100 -0
  203. package/hedhog/frontend/app/dashboard/widgets/TeamHoursKpi.tsx.ejs +104 -0
  204. package/hedhog/frontend/app/dashboard/widgets/TeamPendingApprovalsKpi.tsx.ejs +110 -0
  205. package/hedhog/frontend/app/dashboard/widgets/TeamUtilizationOverview.tsx.ejs +115 -0
  206. package/hedhog/frontend/app/dashboard/widgets/TeamWorkloadAlerts.tsx.ejs +117 -0
  207. package/hedhog/frontend/app/dashboard/widgets/index.ts.ejs +26 -0
  208. package/hedhog/frontend/app/departments/page.tsx.ejs +6 -1
  209. package/hedhog/frontend/app/my-projects/page.tsx.ejs +59 -16
  210. package/hedhog/frontend/app/my-tasks/page.tsx.ejs +329 -106
  211. package/hedhog/frontend/app/project-cost-categories/page.tsx.ejs +58 -52
  212. package/hedhog/frontend/app/project-cost-types/page.tsx.ejs +58 -51
  213. package/hedhog/frontend/app/projects/page.tsx.ejs +436 -35
  214. package/hedhog/frontend/app/reports/collaborators/page.tsx.ejs +65 -52
  215. package/hedhog/frontend/app/reports/projects/page.tsx.ejs +80 -82
  216. package/hedhog/frontend/app/schedule-adjustments/page.tsx.ejs +13 -2
  217. package/hedhog/frontend/app/time-off/page.tsx.ejs +6 -1
  218. package/hedhog/frontend/app/timesheets/page.tsx.ejs +10 -4
  219. package/hedhog/frontend/messages/en.json +460 -61
  220. package/hedhog/frontend/messages/operations/en.json +61 -52
  221. package/hedhog/frontend/messages/operations/pt.json +59 -43
  222. package/hedhog/frontend/messages/pt.json +460 -61
  223. package/hedhog/frontend/widgets/capacity-distribution.tsx.ejs +17 -0
  224. package/hedhog/frontend/widgets/effort-by-project.tsx.ejs +17 -0
  225. package/hedhog/frontend/widgets/headcount-by-area.tsx.ejs +17 -0
  226. package/hedhog/frontend/widgets/index.ts.ejs +25 -0
  227. package/hedhog/frontend/widgets/managed-projects-status.tsx.ejs +17 -0
  228. package/hedhog/frontend/widgets/my-hours-period-kpi.tsx.ejs +17 -0
  229. package/hedhog/frontend/widgets/my-open-requests-kpi.tsx.ejs +17 -0
  230. package/hedhog/frontend/widgets/my-pending-requests-list.tsx.ejs +17 -0
  231. package/hedhog/frontend/widgets/my-project-allocations-kpi.tsx.ejs +17 -0
  232. package/hedhog/frontend/widgets/my-quick-actions.tsx.ejs +17 -0
  233. package/hedhog/frontend/widgets/my-relevant-deadlines.tsx.ejs +17 -0
  234. package/hedhog/frontend/widgets/my-timesheet-status-kpi.tsx.ejs +17 -0
  235. package/hedhog/frontend/widgets/my-weekly-journey.tsx.ejs +17 -0
  236. package/hedhog/frontend/widgets/portfolio-costs-kpi.tsx.ejs +17 -0
  237. package/hedhog/frontend/widgets/portfolio-effort-kpi.tsx.ejs +17 -0
  238. package/hedhog/frontend/widgets/portfolio-projects-kpi.tsx.ejs +17 -0
  239. package/hedhog/frontend/widgets/portfolio-risk-kpi.tsx.ejs +17 -0
  240. package/hedhog/frontend/widgets/project-status-overview.tsx.ejs +17 -0
  241. package/hedhog/frontend/widgets/shared-operations-widget.tsx.ejs +170 -0
  242. package/hedhog/frontend/widgets/strategic-deadlines.tsx.ejs +17 -0
  243. package/hedhog/frontend/widgets/team-approval-queue.tsx.ejs +17 -0
  244. package/hedhog/frontend/widgets/team-capacity-kpi.tsx.ejs +17 -0
  245. package/hedhog/frontend/widgets/team-headcount-kpi.tsx.ejs +17 -0
  246. package/hedhog/frontend/widgets/team-hours-kpi.tsx.ejs +17 -0
  247. package/hedhog/frontend/widgets/team-pending-approvals-kpi.tsx.ejs +17 -0
  248. package/hedhog/frontend/widgets/team-utilization-overview.tsx.ejs +17 -0
  249. package/hedhog/frontend/widgets/team-workload-alerts.tsx.ejs +17 -0
  250. package/hedhog/table/operations_collaborator.yaml +8 -13
  251. package/hedhog/table/operations_project.yaml +1 -1
  252. package/hedhog/table/operations_project_file.yaml +23 -0
  253. package/hedhog/table/operations_task.yaml +76 -69
  254. package/hedhog/table/operations_task_activity.yaml +51 -0
  255. package/package.json +7 -6
  256. package/src/controllers/operations-projects.controller.ts +41 -8
  257. package/src/controllers/operations-tasks.controller.ts +156 -166
  258. package/src/dashboard/README.md +214 -0
  259. package/src/dashboard/components/DashboardLayout.tsx +131 -0
  260. package/src/dashboard/components/widget-registry.ts +255 -0
  261. package/src/dashboard/hooks/useDashboardData.ts +29 -0
  262. package/src/dashboard/types/widgets.types.ts +237 -0
  263. package/src/dashboard/widgets/CapacityDistribution.tsx +56 -0
  264. package/src/dashboard/widgets/EffortByProject.tsx +51 -0
  265. package/src/dashboard/widgets/HeadcountByArea.tsx +57 -0
  266. package/src/dashboard/widgets/ManagedProjectsStatus.tsx +53 -0
  267. package/src/dashboard/widgets/MyHoursPeriodKpi.tsx +87 -0
  268. package/src/dashboard/widgets/MyOpenRequestsKpi.tsx +51 -0
  269. package/src/dashboard/widgets/MyPendingRequestsList.tsx +63 -0
  270. package/src/dashboard/widgets/MyProjectAllocationsKpi.tsx +57 -0
  271. package/src/dashboard/widgets/MyQuickActions.tsx +62 -0
  272. package/src/dashboard/widgets/MyRelevantDeadlines.tsx +84 -0
  273. package/src/dashboard/widgets/MyTimesheetStatusKpi.tsx +65 -0
  274. package/src/dashboard/widgets/MyWeeklyJourney.tsx +57 -0
  275. package/src/dashboard/widgets/PortfolioCostsKpi.tsx +48 -0
  276. package/src/dashboard/widgets/PortfolioEffortKpi.tsx +41 -0
  277. package/src/dashboard/widgets/PortfolioRiskKpi.tsx +50 -0
  278. package/src/dashboard/widgets/ProjectStatusOverview.tsx +52 -0
  279. package/src/dashboard/widgets/StrategicDeadlines.tsx +93 -0
  280. package/src/dashboard/widgets/TeamApprovalQueue.tsx +70 -0
  281. package/src/dashboard/widgets/TeamCapacityKpi.tsx +50 -0
  282. package/src/dashboard/widgets/TeamHoursKpi.tsx +51 -0
  283. package/src/dashboard/widgets/TeamPendingApprovalsKpi.tsx +53 -0
  284. package/src/dashboard/widgets/TeamUtilizationOverview.tsx +62 -0
  285. package/src/dashboard/widgets/TeamWorkloadAlerts.tsx +81 -0
  286. package/src/dashboard/widgets/index.ts +26 -0
  287. package/src/dto/create-collaborator.dto.ts +4 -11
  288. package/src/index.ts +3 -0
  289. package/src/operations.service.spec.ts +988 -764
  290. package/src/operations.service.ts +4300 -2538
@@ -39,6 +39,7 @@ import {
39
39
  TrendingUp,
40
40
  UsersRound,
41
41
  } from 'lucide-react';
42
+ import { useTranslations } from 'next-intl';
42
43
  import { useState } from 'react';
43
44
  import { OperationsHeader } from '../../_components/operations-header';
44
45
  import { fetchOperations } from '../../_lib/api';
@@ -49,9 +50,9 @@ import type {
49
50
  import { formatCurrency, formatHours } from '../../_lib/utils/format';
50
51
 
51
52
  const scenarioLabels: Record<OperationsReportScenario, string> = {
52
- base: 'Base',
53
- growth: 'Crescimento',
54
- conservative: 'Conservador',
53
+ base: 'scenario.base',
54
+ growth: 'scenario.growth',
55
+ conservative: 'scenario.conservative',
55
56
  };
56
57
 
57
58
  function getDefaultRange() {
@@ -70,23 +71,24 @@ function getTotalCost(row: OperationsCollaboratorsReport['rows'][number]) {
70
71
  function getAllocationStatus(allocation: number) {
71
72
  if (allocation >= 98) {
72
73
  return {
73
- label: 'Sobrecarga',
74
+ labelKey: 'allocationStatus.overload',
74
75
  className: 'border-rose-200 bg-rose-50 text-rose-700',
75
76
  };
76
77
  }
77
78
  if (allocation < 75) {
78
79
  return {
79
- label: 'Ocioso',
80
+ labelKey: 'allocationStatus.idle',
80
81
  className: 'border-amber-200 bg-amber-50 text-amber-700',
81
82
  };
82
83
  }
83
84
  return {
84
- label: 'Saudável',
85
+ labelKey: 'allocationStatus.healthy',
85
86
  className: 'border-emerald-200 bg-emerald-50 text-emerald-700',
86
87
  };
87
88
  }
88
89
 
89
90
  export default function OperationsCollaboratorReportsPage() {
91
+ const t = useTranslations('operations.ReportsCollaboratorsPage');
90
92
  const defaults = getDefaultRange();
91
93
  const { request } = useApp();
92
94
  const [startDate, setStartDate] = useState(defaults.from);
@@ -140,20 +142,22 @@ export default function OperationsCollaboratorReportsPage() {
140
142
  hourlyCost: 0,
141
143
  };
142
144
  const costHourReferenceLabel =
143
- summary.allocatedHours > 0 ? 'por hora alocada' : 'por hora de capacidade';
145
+ summary.allocatedHours > 0
146
+ ? t('cards.cost.perAllocatedHour')
147
+ : t('cards.cost.perCapacityHour');
144
148
 
145
149
  return (
146
150
  <Page>
147
151
  <OperationsHeader
148
- title="Relatório de Colaboradores"
149
- description="Dashboard executivo com custo, lucro, capacidade atual e planejamento dos próximos 12 meses."
150
- current="Relatórios / Colaboradores"
152
+ title={t('title')}
153
+ description={t('description')}
154
+ current={t('breadcrumb')}
151
155
  />
152
156
 
153
157
  <div className="grid gap-3 rounded-lg border bg-card p-3 md:grid-cols-[1fr_1fr_180px_160px_180px_auto]">
154
158
  <div className="space-y-1">
155
159
  <span className="text-xs font-medium text-muted-foreground">
156
- Início
160
+ {t('filters.start')}
157
161
  </span>
158
162
  <Input
159
163
  type="date"
@@ -162,7 +166,9 @@ export default function OperationsCollaboratorReportsPage() {
162
166
  />
163
167
  </div>
164
168
  <div className="space-y-1">
165
- <span className="text-xs font-medium text-muted-foreground">Fim</span>
169
+ <span className="text-xs font-medium text-muted-foreground">
170
+ {t('filters.end')}
171
+ </span>
166
172
  <Input
167
173
  type="date"
168
174
  value={endDate}
@@ -171,14 +177,14 @@ export default function OperationsCollaboratorReportsPage() {
171
177
  </div>
172
178
  <div className="space-y-1">
173
179
  <span className="text-xs font-medium text-muted-foreground">
174
- Departamento
180
+ {t('filters.department')}
175
181
  </span>
176
182
  <Select value={departmentFilter} onValueChange={setDepartmentFilter}>
177
183
  <SelectTrigger className="w-full">
178
184
  <SelectValue />
179
185
  </SelectTrigger>
180
186
  <SelectContent>
181
- <SelectItem value="all">Todos</SelectItem>
187
+ <SelectItem value="all">{t('filters.all')}</SelectItem>
182
188
  {(data?.filters.departments ?? []).map((department) => (
183
189
  <SelectItem key={department} value={department}>
184
190
  {department}
@@ -189,14 +195,14 @@ export default function OperationsCollaboratorReportsPage() {
189
195
  </div>
190
196
  <div className="space-y-1">
191
197
  <span className="text-xs font-medium text-muted-foreground">
192
- Vínculo
198
+ {t('filters.contract')}
193
199
  </span>
194
200
  <Select value={contractFilter} onValueChange={setContractFilter}>
195
201
  <SelectTrigger className="w-full">
196
202
  <SelectValue />
197
203
  </SelectTrigger>
198
204
  <SelectContent>
199
- <SelectItem value="all">Todos</SelectItem>
205
+ <SelectItem value="all">{t('filters.all')}</SelectItem>
200
206
  {(data?.filters.contractTypes ?? []).map((contractType) => (
201
207
  <SelectItem key={contractType} value={contractType}>
202
208
  {contractType}
@@ -207,7 +213,7 @@ export default function OperationsCollaboratorReportsPage() {
207
213
  </div>
208
214
  <div className="space-y-1">
209
215
  <span className="text-xs font-medium text-muted-foreground">
210
- Cenário
216
+ {t('filters.scenario')}
211
217
  </span>
212
218
  <Select
213
219
  value={scenario}
@@ -219,9 +225,11 @@ export default function OperationsCollaboratorReportsPage() {
219
225
  <SelectValue />
220
226
  </SelectTrigger>
221
227
  <SelectContent>
222
- <SelectItem value="base">Base</SelectItem>
223
- <SelectItem value="growth">Crescimento</SelectItem>
224
- <SelectItem value="conservative">Conservador</SelectItem>
228
+ <SelectItem value="base">{t('scenario.base')}</SelectItem>
229
+ <SelectItem value="growth">{t('scenario.growth')}</SelectItem>
230
+ <SelectItem value="conservative">
231
+ {t('scenario.conservative')}
232
+ </SelectItem>
225
233
  </SelectContent>
226
234
  </Select>
227
235
  </div>
@@ -237,7 +245,7 @@ export default function OperationsCollaboratorReportsPage() {
237
245
  setScenario('base');
238
246
  }}
239
247
  >
240
- Limpar
248
+ {t('actions.clear')}
241
249
  </Button>
242
250
  </div>
243
251
  </div>
@@ -247,16 +255,16 @@ export default function OperationsCollaboratorReportsPage() {
247
255
  items={[
248
256
  {
249
257
  key: 'headcount',
250
- title: 'Headcount',
258
+ title: t('cards.headcount.title'),
251
259
  value: data?.rows.length ?? 0,
252
- description: 'Colaboradores no recorte',
260
+ description: t('cards.headcount.description'),
253
261
  icon: UsersRound,
254
262
  accentClassName: 'from-sky-500/20 via-cyan-400/10 to-transparent',
255
263
  iconContainerClassName: 'bg-sky-50 text-sky-700',
256
264
  },
257
265
  {
258
266
  key: 'cost',
259
- title: 'Custo total',
267
+ title: t('cards.cost.title'),
260
268
  value: formatCurrency(summary.cost),
261
269
  description: `${formatCurrency(summary.hourlyCost)} ${costHourReferenceLabel}`,
262
270
  icon: Banknote,
@@ -265,9 +273,11 @@ export default function OperationsCollaboratorReportsPage() {
265
273
  },
266
274
  {
267
275
  key: 'revenue',
268
- title: 'Valor gerado',
276
+ title: t('cards.revenue.title'),
269
277
  value: formatCurrency(summary.billableValue),
270
- description: `${formatHours(summary.billableHours)} faturáveis`,
278
+ description: t('cards.revenue.description', {
279
+ hours: formatHours(summary.billableHours),
280
+ }),
271
281
  icon: BriefcaseBusiness,
272
282
  accentClassName:
273
283
  'from-emerald-500/20 via-green-400/10 to-transparent',
@@ -275,7 +285,7 @@ export default function OperationsCollaboratorReportsPage() {
275
285
  },
276
286
  {
277
287
  key: 'margin',
278
- title: 'Margem',
288
+ title: t('cards.margin.title'),
279
289
  value: formatPercent(summary.margin),
280
290
  description: formatCurrency(summary.profit),
281
291
  icon: Target,
@@ -285,9 +295,9 @@ export default function OperationsCollaboratorReportsPage() {
285
295
  },
286
296
  {
287
297
  key: 'utilization',
288
- title: 'Utilização',
298
+ title: t('cards.utilization.title'),
289
299
  value: formatPercent(summary.utilization),
290
- description: 'Horas faturáveis comprometidas sobre capacidade',
300
+ description: t('cards.utilization.description'),
291
301
  icon: Clock3,
292
302
  layout: 'compact',
293
303
  accentClassName: 'from-cyan-500/20 via-blue-400/10 to-transparent',
@@ -295,9 +305,11 @@ export default function OperationsCollaboratorReportsPage() {
295
305
  },
296
306
  {
297
307
  key: 'free',
298
- title: 'Capacidade livre',
308
+ title: t('cards.freeCapacity.title'),
299
309
  value: formatHours(summary.freeHours),
300
- description: `${formatPercent(Math.max(100 - summary.allocation, 0))} disponível`,
310
+ description: t('cards.freeCapacity.description', {
311
+ percent: formatPercent(Math.max(100 - summary.allocation, 0)),
312
+ }),
301
313
  icon: CalendarClock,
302
314
  layout: 'compact',
303
315
  accentClassName:
@@ -306,9 +318,11 @@ export default function OperationsCollaboratorReportsPage() {
306
318
  },
307
319
  {
308
320
  key: 'overtime',
309
- title: 'Horas extras',
321
+ title: t('cards.overtime.title'),
310
322
  value: formatHours(summary.overtimeHours),
311
- description: `${summary.overloadCount} pessoas em sobrecarga`,
323
+ description: t('cards.overtime.description', {
324
+ count: summary.overloadCount,
325
+ }),
312
326
  icon: AlertTriangle,
313
327
  layout: 'compact',
314
328
  accentClassName:
@@ -317,9 +331,9 @@ export default function OperationsCollaboratorReportsPage() {
317
331
  },
318
332
  {
319
333
  key: 'scenario',
320
- title: 'Cenário 12 meses',
321
- value: scenarioLabels[scenario],
322
- description: 'Projeção calculada no backend',
334
+ title: t('cards.scenario.title'),
335
+ value: t(scenarioLabels[scenario]),
336
+ description: t('cards.scenario.description'),
323
337
  icon: TrendingUp,
324
338
  layout: 'compact',
325
339
  accentClassName:
@@ -331,24 +345,21 @@ export default function OperationsCollaboratorReportsPage() {
331
345
 
332
346
  <Card>
333
347
  <CardHeader>
334
- <CardTitle>Detalhamento por colaborador</CardTitle>
335
- <CardDescription>
336
- Custo fixo do período, valor apontado, lucro, capacidade
337
- comprometida e recomendação executiva.
338
- </CardDescription>
348
+ <CardTitle>{t('table.title')}</CardTitle>
349
+ <CardDescription>{t('table.description')}</CardDescription>
339
350
  </CardHeader>
340
351
  <CardContent className="overflow-x-auto">
341
352
  <Table>
342
353
  <TableHeader>
343
354
  <TableRow>
344
- <TableHead>Colaborador</TableHead>
345
- <TableHead>Custo</TableHead>
346
- <TableHead>Valor gerado</TableHead>
347
- <TableHead>Lucro</TableHead>
348
- <TableHead>Horas</TableHead>
349
- <TableHead>Alocação</TableHead>
350
- <TableHead>Risco</TableHead>
351
- <TableHead>Recomendação</TableHead>
355
+ <TableHead>{t('table.headers.collaborator')}</TableHead>
356
+ <TableHead>{t('table.headers.cost')}</TableHead>
357
+ <TableHead>{t('table.headers.generatedValue')}</TableHead>
358
+ <TableHead>{t('table.headers.profit')}</TableHead>
359
+ <TableHead>{t('table.headers.hours')}</TableHead>
360
+ <TableHead>{t('table.headers.allocation')}</TableHead>
361
+ <TableHead>{t('table.headers.risk')}</TableHead>
362
+ <TableHead>{t('table.headers.recommendation')}</TableHead>
352
363
  </TableRow>
353
364
  </TableHeader>
354
365
  <TableBody>
@@ -392,8 +403,10 @@ export default function OperationsCollaboratorReportsPage() {
392
403
  <div className="min-w-36 space-y-1">
393
404
  <div className="flex items-center justify-between text-xs">
394
405
  <span>
395
- {formatHours(row.billableHours)} fat. de{' '}
396
- {formatHours(row.allocatedHours)}
406
+ {t('table.hoursBillableOf', {
407
+ billable: formatHours(row.billableHours),
408
+ allocated: formatHours(row.allocatedHours),
409
+ })}
397
410
  </span>
398
411
  <span>{formatPercent(utilization)}</span>
399
412
  </div>
@@ -404,7 +417,7 @@ export default function OperationsCollaboratorReportsPage() {
404
417
  <div className="min-w-32 space-y-1">
405
418
  <div className="flex items-center justify-between gap-2">
406
419
  <Badge variant="outline" className={status.className}>
407
- {status.label}
420
+ {t(status.labelKey)}
408
421
  </Badge>
409
422
  <span className="text-xs">
410
423
  {formatPercent(allocation)}