@open-mercato/core 0.7.1-develop.7178.1.ab93fbaf4e → 0.7.1-develop.7179.1.e8c03264b6

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 (792) hide show
  1. package/.turbo/turbo-build.log +2 -2
  2. package/dist/generated/entities/staff_time_entry/index.js +14 -0
  3. package/dist/generated/entities/staff_time_entry/index.js.map +2 -2
  4. package/dist/generated/entities/staff_time_entry_tag/index.js +15 -0
  5. package/dist/generated/entities/staff_time_entry_tag/index.js.map +7 -0
  6. package/dist/generated/entities/staff_time_project/index.js +16 -0
  7. package/dist/generated/entities/staff_time_project/index.js.map +2 -2
  8. package/dist/generated/entities/staff_time_report/index.js +57 -0
  9. package/dist/generated/entities/staff_time_report/index.js.map +7 -0
  10. package/dist/generated/entities/staff_time_report_entry/index.js +27 -0
  11. package/dist/generated/entities/staff_time_report_entry/index.js.map +7 -0
  12. package/dist/generated/entities/staff_time_report_event/index.js +21 -0
  13. package/dist/generated/entities/staff_time_report_event/index.js.map +7 -0
  14. package/dist/generated/entities/staff_time_report_project/index.js +15 -0
  15. package/dist/generated/entities/staff_time_report_project/index.js.map +7 -0
  16. package/dist/generated/entities/staff_time_tag/index.js +21 -0
  17. package/dist/generated/entities/staff_time_tag/index.js.map +7 -0
  18. package/dist/generated/entities/staff_time_task/index.js +37 -0
  19. package/dist/generated/entities/staff_time_task/index.js.map +7 -0
  20. package/dist/generated/entities/staff_time_task_comment/index.js +21 -0
  21. package/dist/generated/entities/staff_time_task_comment/index.js.map +7 -0
  22. package/dist/generated/entities/staff_time_task_status/index.js +29 -0
  23. package/dist/generated/entities/staff_time_task_status/index.js.map +7 -0
  24. package/dist/generated/entities/staff_time_task_tag/index.js +15 -0
  25. package/dist/generated/entities/staff_time_task_tag/index.js.map +7 -0
  26. package/dist/generated/entities.ids.generated.js +11 -1
  27. package/dist/generated/entities.ids.generated.js.map +2 -2
  28. package/dist/generated/entity-fields-registry.js +149 -0
  29. package/dist/generated/entity-fields-registry.js.map +2 -2
  30. package/dist/helpers/integration/timesheetFixtures.js +7 -0
  31. package/dist/helpers/integration/timesheetFixtures.js.map +2 -2
  32. package/dist/modules/auth/cli.js +16 -0
  33. package/dist/modules/auth/cli.js.map +2 -2
  34. package/dist/modules/auth/lib/backendChrome.js +1 -0
  35. package/dist/modules/auth/lib/backendChrome.js.map +2 -2
  36. package/dist/modules/customer_accounts/lib/customerRoleAcls.js +44 -0
  37. package/dist/modules/customer_accounts/lib/customerRoleAcls.js.map +7 -0
  38. package/dist/modules/customer_accounts/setup.js +1 -28
  39. package/dist/modules/customer_accounts/setup.js.map +2 -2
  40. package/dist/modules/staff/acl.js +9 -1
  41. package/dist/modules/staff/acl.js.map +2 -2
  42. package/dist/modules/staff/ai-agents.js +142 -0
  43. package/dist/modules/staff/ai-agents.js.map +7 -0
  44. package/dist/modules/staff/ai-tools/time-tracking-pack.js +348 -0
  45. package/dist/modules/staff/ai-tools/time-tracking-pack.js.map +7 -0
  46. package/dist/modules/staff/ai-tools/types.js +54 -0
  47. package/dist/modules/staff/ai-tools/types.js.map +7 -0
  48. package/dist/modules/staff/ai-tools.js +8 -0
  49. package/dist/modules/staff/ai-tools.js.map +7 -0
  50. package/dist/modules/staff/analytics.js +84 -1
  51. package/dist/modules/staff/analytics.js.map +2 -2
  52. package/dist/modules/staff/api/guards.js +37 -3
  53. package/dist/modules/staff/api/guards.js.map +2 -2
  54. package/dist/modules/staff/api/leave-requests/accept/route.js +1 -3
  55. package/dist/modules/staff/api/leave-requests/accept/route.js.map +2 -2
  56. package/dist/modules/staff/api/leave-requests/reject/route.js +1 -3
  57. package/dist/modules/staff/api/leave-requests/reject/route.js.map +2 -2
  58. package/dist/modules/staff/api/portal/time-reports/[id]/route.js +131 -0
  59. package/dist/modules/staff/api/portal/time-reports/[id]/route.js.map +7 -0
  60. package/dist/modules/staff/api/portal/time-reports/route.js +179 -0
  61. package/dist/modules/staff/api/portal/time-reports/route.js.map +7 -0
  62. package/dist/modules/staff/api/team-members/self/route.js +1 -3
  63. package/dist/modules/staff/api/team-members/self/route.js.map +2 -2
  64. package/dist/modules/staff/api/team-members/tags/assign/route.js +1 -3
  65. package/dist/modules/staff/api/team-members/tags/assign/route.js.map +2 -2
  66. package/dist/modules/staff/api/team-members/tags/unassign/route.js +1 -3
  67. package/dist/modules/staff/api/team-members/tags/unassign/route.js.map +2 -2
  68. package/dist/modules/staff/api/timesheets/_shared/withTimesheetInterceptors.js +174 -0
  69. package/dist/modules/staff/api/timesheets/_shared/withTimesheetInterceptors.js.map +7 -0
  70. package/dist/modules/staff/api/timesheets/access-requests/route.js +226 -0
  71. package/dist/modules/staff/api/timesheets/access-requests/route.js.map +7 -0
  72. package/dist/modules/staff/api/timesheets/my-projects/[projectId]/route.js +15 -8
  73. package/dist/modules/staff/api/timesheets/my-projects/[projectId]/route.js.map +2 -2
  74. package/dist/modules/staff/api/timesheets/my-projects/route.js +13 -1
  75. package/dist/modules/staff/api/timesheets/my-projects/route.js.map +2 -2
  76. package/dist/modules/staff/api/timesheets/my-work/myWorkAggregate.js +42 -0
  77. package/dist/modules/staff/api/timesheets/my-work/myWorkAggregate.js.map +7 -0
  78. package/dist/modules/staff/api/timesheets/my-work/route.js +383 -0
  79. package/dist/modules/staff/api/timesheets/my-work/route.js.map +7 -0
  80. package/dist/modules/staff/api/timesheets/projects/kpis/route.js +14 -2
  81. package/dist/modules/staff/api/timesheets/projects/kpis/route.js.map +2 -2
  82. package/dist/modules/staff/api/timesheets/reports/[id]/close/route.js +168 -0
  83. package/dist/modules/staff/api/timesheets/reports/[id]/close/route.js.map +7 -0
  84. package/dist/modules/staff/api/timesheets/reports/[id]/export/route.js +246 -0
  85. package/dist/modules/staff/api/timesheets/reports/[id]/export/route.js.map +7 -0
  86. package/dist/modules/staff/api/timesheets/reports/[id]/sheet/route.js +183 -0
  87. package/dist/modules/staff/api/timesheets/reports/[id]/sheet/route.js.map +7 -0
  88. package/dist/modules/staff/api/timesheets/reports/[id]/unlock/route.js +164 -0
  89. package/dist/modules/staff/api/timesheets/reports/[id]/unlock/route.js.map +7 -0
  90. package/dist/modules/staff/api/timesheets/reports/preview/route.js +360 -0
  91. package/dist/modules/staff/api/timesheets/reports/preview/route.js.map +7 -0
  92. package/dist/modules/staff/api/timesheets/reports/route.js +316 -0
  93. package/dist/modules/staff/api/timesheets/reports/route.js.map +7 -0
  94. package/dist/modules/staff/api/timesheets/reports/shared.js +63 -0
  95. package/dist/modules/staff/api/timesheets/reports/shared.js.map +7 -0
  96. package/dist/modules/staff/api/timesheets/settings/reapply-rounding/route.js +164 -0
  97. package/dist/modules/staff/api/timesheets/settings/reapply-rounding/route.js.map +7 -0
  98. package/dist/modules/staff/api/timesheets/settings/rounding-impact/route.js +168 -0
  99. package/dist/modules/staff/api/timesheets/settings/rounding-impact/route.js.map +7 -0
  100. package/dist/modules/staff/api/timesheets/settings/route.js +199 -0
  101. package/dist/modules/staff/api/timesheets/settings/route.js.map +7 -0
  102. package/dist/modules/staff/api/timesheets/tags/access.js +76 -0
  103. package/dist/modules/staff/api/timesheets/tags/access.js.map +7 -0
  104. package/dist/modules/staff/api/timesheets/tags/entry-assignments/route.js +235 -0
  105. package/dist/modules/staff/api/timesheets/tags/entry-assignments/route.js.map +7 -0
  106. package/dist/modules/staff/api/timesheets/tags/route.js +160 -0
  107. package/dist/modules/staff/api/timesheets/tags/route.js.map +7 -0
  108. package/dist/modules/staff/api/timesheets/tags/task-assignments/route.js +233 -0
  109. package/dist/modules/staff/api/timesheets/tags/task-assignments/route.js.map +7 -0
  110. package/dist/modules/staff/api/timesheets/task-statuses/route.js +188 -0
  111. package/dist/modules/staff/api/timesheets/task-statuses/route.js.map +7 -0
  112. package/dist/modules/staff/api/timesheets/tasks/[id]/comments/route.js +399 -0
  113. package/dist/modules/staff/api/timesheets/tasks/[id]/comments/route.js.map +7 -0
  114. package/dist/modules/staff/api/timesheets/tasks/[id]/status/route.js +210 -0
  115. package/dist/modules/staff/api/timesheets/tasks/[id]/status/route.js.map +7 -0
  116. package/dist/modules/staff/api/timesheets/tasks/route.js +333 -0
  117. package/dist/modules/staff/api/timesheets/tasks/route.js.map +7 -0
  118. package/dist/modules/staff/api/timesheets/time-entries/[id]/duplicate/route.js +228 -0
  119. package/dist/modules/staff/api/timesheets/time-entries/[id]/duplicate/route.js.map +7 -0
  120. package/dist/modules/staff/api/timesheets/time-entries/[id]/segments/[segmentId]/route.js +29 -10
  121. package/dist/modules/staff/api/timesheets/time-entries/[id]/segments/[segmentId]/route.js.map +2 -2
  122. package/dist/modules/staff/api/timesheets/time-entries/[id]/segments/route.js +31 -18
  123. package/dist/modules/staff/api/timesheets/time-entries/[id]/segments/route.js.map +2 -2
  124. package/dist/modules/staff/api/timesheets/time-entries/[id]/timer-start/route.js +21 -7
  125. package/dist/modules/staff/api/timesheets/time-entries/[id]/timer-start/route.js.map +2 -2
  126. package/dist/modules/staff/api/timesheets/time-entries/[id]/timer-stop/route.js +27 -7
  127. package/dist/modules/staff/api/timesheets/time-entries/[id]/timer-stop/route.js.map +2 -2
  128. package/dist/modules/staff/api/timesheets/time-entries/bulk/route.js +215 -32
  129. package/dist/modules/staff/api/timesheets/time-entries/bulk/route.js.map +2 -2
  130. package/dist/modules/staff/api/timesheets/time-entries/copy-day/route.js +378 -0
  131. package/dist/modules/staff/api/timesheets/time-entries/copy-day/route.js.map +7 -0
  132. package/dist/modules/staff/api/timesheets/time-entries/overlaps/route.js +340 -0
  133. package/dist/modules/staff/api/timesheets/time-entries/overlaps/route.js.map +7 -0
  134. package/dist/modules/staff/api/timesheets/time-entries/route.js +238 -26
  135. package/dist/modules/staff/api/timesheets/time-entries/route.js.map +2 -2
  136. package/dist/modules/staff/api/timesheets/time-entries/start-timer/route.js +23 -8
  137. package/dist/modules/staff/api/timesheets/time-entries/start-timer/route.js.map +2 -2
  138. package/dist/modules/staff/api/timesheets/time-projects/[id]/change-currency/route.js +209 -0
  139. package/dist/modules/staff/api/timesheets/time-projects/[id]/change-currency/route.js.map +7 -0
  140. package/dist/modules/staff/api/timesheets/time-projects/[id]/employees/route.js +59 -2
  141. package/dist/modules/staff/api/timesheets/time-projects/[id]/employees/route.js.map +2 -2
  142. package/dist/modules/staff/api/timesheets/time-projects/route.js +264 -22
  143. package/dist/modules/staff/api/timesheets/time-projects/route.js.map +2 -2
  144. package/dist/modules/staff/backend/staff/time-tracking/board/page.js +110 -0
  145. package/dist/modules/staff/backend/staff/time-tracking/board/page.js.map +7 -0
  146. package/dist/modules/staff/backend/staff/time-tracking/board/page.meta.js +18 -0
  147. package/dist/modules/staff/backend/staff/time-tracking/board/page.meta.js.map +7 -0
  148. package/dist/modules/staff/backend/staff/time-tracking/entries/page.js +981 -0
  149. package/dist/modules/staff/backend/staff/time-tracking/entries/page.js.map +7 -0
  150. package/dist/modules/staff/backend/staff/time-tracking/entries/page.meta.js +18 -0
  151. package/dist/modules/staff/backend/staff/time-tracking/entries/page.meta.js.map +7 -0
  152. package/dist/modules/staff/backend/staff/time-tracking/page.js +583 -0
  153. package/dist/modules/staff/backend/staff/time-tracking/page.js.map +7 -0
  154. package/dist/modules/staff/backend/staff/time-tracking/page.meta.js +15 -0
  155. package/dist/modules/staff/backend/staff/time-tracking/page.meta.js.map +7 -0
  156. package/dist/modules/staff/backend/staff/time-tracking/projects/[id]/board/page.js +65 -0
  157. package/dist/modules/staff/backend/staff/time-tracking/projects/[id]/board/page.js.map +7 -0
  158. package/dist/modules/staff/backend/staff/time-tracking/projects/[id]/board/page.meta.js +16 -0
  159. package/dist/modules/staff/backend/staff/time-tracking/projects/[id]/board/page.meta.js.map +7 -0
  160. package/dist/modules/staff/backend/staff/time-tracking/projects/[id]/edit/page.js +229 -0
  161. package/dist/modules/staff/backend/staff/time-tracking/projects/[id]/edit/page.js.map +7 -0
  162. package/dist/modules/staff/backend/staff/time-tracking/projects/[id]/edit/page.meta.js +16 -0
  163. package/dist/modules/staff/backend/staff/time-tracking/projects/[id]/edit/page.meta.js.map +7 -0
  164. package/dist/modules/staff/backend/staff/time-tracking/projects/[id]/page.js +1014 -0
  165. package/dist/modules/staff/backend/staff/time-tracking/projects/[id]/page.js.map +7 -0
  166. package/dist/modules/staff/backend/staff/time-tracking/projects/[id]/page.meta.js +16 -0
  167. package/dist/modules/staff/backend/staff/time-tracking/projects/[id]/page.meta.js.map +7 -0
  168. package/dist/modules/staff/backend/staff/time-tracking/projects/create/page.js +97 -0
  169. package/dist/modules/staff/backend/staff/time-tracking/projects/create/page.js.map +7 -0
  170. package/dist/modules/staff/backend/staff/time-tracking/projects/create/page.meta.js +16 -0
  171. package/dist/modules/staff/backend/staff/time-tracking/projects/create/page.meta.js.map +7 -0
  172. package/dist/modules/staff/backend/staff/time-tracking/projects/page.js +1040 -0
  173. package/dist/modules/staff/backend/staff/time-tracking/projects/page.js.map +7 -0
  174. package/dist/modules/staff/backend/staff/time-tracking/projects/page.meta.js +19 -0
  175. package/dist/modules/staff/backend/staff/time-tracking/projects/page.meta.js.map +7 -0
  176. package/dist/modules/staff/backend/staff/time-tracking/projects/projectFormConfig.js +353 -0
  177. package/dist/modules/staff/backend/staff/time-tracking/projects/projectFormConfig.js.map +7 -0
  178. package/dist/modules/staff/backend/staff/time-tracking/reports/[id]/page.js +457 -0
  179. package/dist/modules/staff/backend/staff/time-tracking/reports/[id]/page.js.map +7 -0
  180. package/dist/modules/staff/backend/staff/time-tracking/reports/[id]/page.meta.js +16 -0
  181. package/dist/modules/staff/backend/staff/time-tracking/reports/[id]/page.meta.js.map +7 -0
  182. package/dist/modules/staff/backend/staff/time-tracking/reports/create/page.js +697 -0
  183. package/dist/modules/staff/backend/staff/time-tracking/reports/create/page.js.map +7 -0
  184. package/dist/modules/staff/backend/staff/time-tracking/reports/create/page.meta.js +16 -0
  185. package/dist/modules/staff/backend/staff/time-tracking/reports/create/page.meta.js.map +7 -0
  186. package/dist/modules/staff/backend/staff/time-tracking/reports/page.js +174 -0
  187. package/dist/modules/staff/backend/staff/time-tracking/reports/page.js.map +7 -0
  188. package/dist/modules/staff/backend/staff/time-tracking/reports/page.meta.js +18 -0
  189. package/dist/modules/staff/backend/staff/time-tracking/reports/page.meta.js.map +7 -0
  190. package/dist/modules/staff/backend/staff/time-tracking/settings/page.js +546 -0
  191. package/dist/modules/staff/backend/staff/time-tracking/settings/page.js.map +7 -0
  192. package/dist/modules/staff/backend/staff/time-tracking/settings/page.meta.js +18 -0
  193. package/dist/modules/staff/backend/staff/time-tracking/settings/page.meta.js.map +7 -0
  194. package/dist/modules/staff/backend/staff/time-tracking/timesheet/GridView.js +710 -0
  195. package/dist/modules/staff/backend/staff/time-tracking/timesheet/GridView.js.map +7 -0
  196. package/dist/modules/staff/backend/staff/time-tracking/timesheet/page.js +646 -0
  197. package/dist/modules/staff/backend/staff/time-tracking/timesheet/page.js.map +7 -0
  198. package/dist/modules/staff/backend/staff/time-tracking/timesheet/page.meta.js +18 -0
  199. package/dist/modules/staff/backend/staff/time-tracking/timesheet/page.meta.js.map +7 -0
  200. package/dist/modules/staff/backend/staff/timesheets/page.js +4 -793
  201. package/dist/modules/staff/backend/staff/timesheets/page.js.map +2 -2
  202. package/dist/modules/staff/backend/staff/timesheets/page.meta.js +2 -7
  203. package/dist/modules/staff/backend/staff/timesheets/page.meta.js.map +2 -2
  204. package/dist/modules/staff/backend/staff/timesheets/projects/[id]/edit/page.js +5 -136
  205. package/dist/modules/staff/backend/staff/timesheets/projects/[id]/edit/page.js.map +2 -2
  206. package/dist/modules/staff/backend/staff/timesheets/projects/[id]/edit/page.meta.js +1 -7
  207. package/dist/modules/staff/backend/staff/timesheets/projects/[id]/edit/page.meta.js.map +2 -2
  208. package/dist/modules/staff/backend/staff/timesheets/projects/[id]/page.js +5 -445
  209. package/dist/modules/staff/backend/staff/timesheets/projects/[id]/page.js.map +3 -3
  210. package/dist/modules/staff/backend/staff/timesheets/projects/[id]/page.meta.js +1 -7
  211. package/dist/modules/staff/backend/staff/timesheets/projects/[id]/page.meta.js.map +2 -2
  212. package/dist/modules/staff/backend/staff/timesheets/projects/create/page.js +4 -76
  213. package/dist/modules/staff/backend/staff/timesheets/projects/create/page.js.map +2 -2
  214. package/dist/modules/staff/backend/staff/timesheets/projects/create/page.meta.js +1 -7
  215. package/dist/modules/staff/backend/staff/timesheets/projects/create/page.meta.js.map +2 -2
  216. package/dist/modules/staff/backend/staff/timesheets/projects/page.js +4 -613
  217. package/dist/modules/staff/backend/staff/timesheets/projects/page.js.map +2 -2
  218. package/dist/modules/staff/backend/staff/timesheets/projects/page.meta.js +2 -17
  219. package/dist/modules/staff/backend/staff/timesheets/projects/page.meta.js.map +2 -2
  220. package/dist/modules/staff/ce.js +40 -0
  221. package/dist/modules/staff/ce.js.map +2 -2
  222. package/dist/modules/staff/cli.js +166 -1
  223. package/dist/modules/staff/cli.js.map +2 -2
  224. package/dist/modules/staff/commands/index.js +5 -0
  225. package/dist/modules/staff/commands/index.js.map +2 -2
  226. package/dist/modules/staff/commands/timesheets-entries.js +569 -21
  227. package/dist/modules/staff/commands/timesheets-entries.js.map +3 -3
  228. package/dist/modules/staff/commands/timesheets-projects.js +450 -7
  229. package/dist/modules/staff/commands/timesheets-projects.js.map +2 -2
  230. package/dist/modules/staff/commands/timesheets-reports.js +1036 -0
  231. package/dist/modules/staff/commands/timesheets-reports.js.map +7 -0
  232. package/dist/modules/staff/commands/timesheets-tags.js +1015 -0
  233. package/dist/modules/staff/commands/timesheets-tags.js.map +7 -0
  234. package/dist/modules/staff/commands/timesheets-task-comments.js +438 -0
  235. package/dist/modules/staff/commands/timesheets-task-comments.js.map +7 -0
  236. package/dist/modules/staff/commands/timesheets-task-statuses.js +723 -0
  237. package/dist/modules/staff/commands/timesheets-task-statuses.js.map +7 -0
  238. package/dist/modules/staff/commands/timesheets-tasks.js +834 -0
  239. package/dist/modules/staff/commands/timesheets-tasks.js.map +7 -0
  240. package/dist/modules/staff/data/enrichers.js +426 -12
  241. package/dist/modules/staff/data/enrichers.js.map +2 -2
  242. package/dist/modules/staff/data/entities.js +552 -3
  243. package/dist/modules/staff/data/entities.js.map +2 -2
  244. package/dist/modules/staff/data/extensions.js +41 -0
  245. package/dist/modules/staff/data/extensions.js.map +7 -0
  246. package/dist/modules/staff/data/validators.js +254 -9
  247. package/dist/modules/staff/data/validators.js.map +2 -2
  248. package/dist/modules/staff/di.js +42 -1
  249. package/dist/modules/staff/di.js.map +2 -2
  250. package/dist/modules/staff/events.js +84 -6
  251. package/dist/modules/staff/events.js.map +2 -2
  252. package/dist/modules/staff/events.payloads.js +158 -0
  253. package/dist/modules/staff/events.payloads.js.map +7 -0
  254. package/dist/modules/staff/extension-points.js +261 -0
  255. package/dist/modules/staff/extension-points.js.map +7 -0
  256. package/dist/modules/staff/frontend/[orgSlug]/portal/time-reports/[id]/page.js +138 -0
  257. package/dist/modules/staff/frontend/[orgSlug]/portal/time-reports/[id]/page.js.map +7 -0
  258. package/dist/modules/staff/frontend/[orgSlug]/portal/time-reports/[id]/page.meta.js +12 -0
  259. package/dist/modules/staff/frontend/[orgSlug]/portal/time-reports/[id]/page.meta.js.map +7 -0
  260. package/dist/modules/staff/frontend/[orgSlug]/portal/time-reports/page.js +133 -0
  261. package/dist/modules/staff/frontend/[orgSlug]/portal/time-reports/page.js.map +7 -0
  262. package/dist/modules/staff/frontend/[orgSlug]/portal/time-reports/page.meta.js +19 -0
  263. package/dist/modules/staff/frontend/[orgSlug]/portal/time-reports/page.meta.js.map +7 -0
  264. package/dist/modules/staff/lib/crud.js +11 -1
  265. package/dist/modules/staff/lib/crud.js.map +2 -2
  266. package/dist/modules/staff/lib/time-tracking/access.js +92 -0
  267. package/dist/modules/staff/lib/time-tracking/access.js.map +7 -0
  268. package/dist/modules/staff/lib/time-tracking/billability.js +39 -0
  269. package/dist/modules/staff/lib/time-tracking/billability.js.map +7 -0
  270. package/dist/modules/staff/lib/time-tracking/capacity.js +68 -0
  271. package/dist/modules/staff/lib/time-tracking/capacity.js.map +7 -0
  272. package/dist/modules/staff/lib/time-tracking/componentContracts.js +15 -0
  273. package/dist/modules/staff/lib/time-tracking/componentContracts.js.map +7 -0
  274. package/dist/modules/staff/lib/time-tracking/cost.js +82 -0
  275. package/dist/modules/staff/lib/time-tracking/cost.js.map +7 -0
  276. package/dist/modules/staff/lib/time-tracking/duration.js +55 -0
  277. package/dist/modules/staff/lib/time-tracking/duration.js.map +7 -0
  278. package/dist/modules/staff/lib/time-tracking/featureAccess.js +41 -0
  279. package/dist/modules/staff/lib/time-tracking/featureAccess.js.map +7 -0
  280. package/dist/modules/staff/lib/time-tracking/interval.js +72 -0
  281. package/dist/modules/staff/lib/time-tracking/interval.js.map +7 -0
  282. package/dist/modules/staff/lib/time-tracking/migrateProjectCodes.js +88 -0
  283. package/dist/modules/staff/lib/time-tracking/migrateProjectCodes.js.map +7 -0
  284. package/dist/modules/staff/lib/time-tracking/moneyVisibility.js +10 -0
  285. package/dist/modules/staff/lib/time-tracking/moneyVisibility.js.map +7 -0
  286. package/dist/modules/staff/lib/time-tracking/overlap.js +87 -0
  287. package/dist/modules/staff/lib/time-tracking/overlap.js.map +7 -0
  288. package/dist/modules/staff/lib/time-tracking/portalRecipients.js +27 -0
  289. package/dist/modules/staff/lib/time-tracking/portalRecipients.js.map +7 -0
  290. package/dist/modules/staff/lib/time-tracking/portalReports.js +16 -0
  291. package/dist/modules/staff/lib/time-tracking/portalReports.js.map +7 -0
  292. package/dist/modules/staff/lib/time-tracking/projectCode.js +135 -0
  293. package/dist/modules/staff/lib/time-tracking/projectCode.js.map +7 -0
  294. package/dist/modules/staff/lib/time-tracking/reapplyRounding.js +187 -0
  295. package/dist/modules/staff/lib/time-tracking/reapplyRounding.js.map +7 -0
  296. package/dist/modules/staff/lib/time-tracking/recalculationRunner.js +80 -0
  297. package/dist/modules/staff/lib/time-tracking/recalculationRunner.js.map +7 -0
  298. package/dist/modules/staff/lib/time-tracking/recalculations.js +56 -0
  299. package/dist/modules/staff/lib/time-tracking/recalculations.js.map +7 -0
  300. package/dist/modules/staff/lib/time-tracking/registries/invoke.js +63 -0
  301. package/dist/modules/staff/lib/time-tracking/registries/invoke.js.map +7 -0
  302. package/dist/modules/staff/lib/time-tracking/registries/registry.js +62 -0
  303. package/dist/modules/staff/lib/time-tracking/registries/registry.js.map +7 -0
  304. package/dist/modules/staff/lib/time-tracking/registries/scope.js +21 -0
  305. package/dist/modules/staff/lib/time-tracking/registries/scope.js.map +7 -0
  306. package/dist/modules/staff/lib/time-tracking/rollup.js +34 -0
  307. package/dist/modules/staff/lib/time-tracking/rollup.js.map +7 -0
  308. package/dist/modules/staff/lib/time-tracking/rounding.js +66 -0
  309. package/dist/modules/staff/lib/time-tracking/rounding.js.map +7 -0
  310. package/dist/modules/staff/lib/time-tracking/roundingImpact.js +39 -0
  311. package/dist/modules/staff/lib/time-tracking/roundingImpact.js.map +7 -0
  312. package/dist/modules/staff/lib/time-tracking/settingKeys.js +214 -0
  313. package/dist/modules/staff/lib/time-tracking/settingKeys.js.map +7 -0
  314. package/dist/modules/staff/lib/time-tracking/settings.js +87 -0
  315. package/dist/modules/staff/lib/time-tracking/settings.js.map +7 -0
  316. package/dist/modules/staff/lib/time-tracking/sqlInClause.js +9 -0
  317. package/dist/modules/staff/lib/time-tracking/sqlInClause.js.map +7 -0
  318. package/dist/modules/staff/lib/time-tracking/timeEntrySources.js +48 -0
  319. package/dist/modules/staff/lib/time-tracking/timeEntrySources.js.map +7 -0
  320. package/dist/modules/staff/lib/time-tracking-ui/BoardFilterChips.js +283 -0
  321. package/dist/modules/staff/lib/time-tracking-ui/BoardFilterChips.js.map +7 -0
  322. package/dist/modules/staff/lib/time-tracking-ui/CustomerPicker.js +324 -0
  323. package/dist/modules/staff/lib/time-tracking-ui/CustomerPicker.js.map +7 -0
  324. package/dist/modules/staff/lib/time-tracking-ui/DurationInput.js +121 -0
  325. package/dist/modules/staff/lib/time-tracking-ui/DurationInput.js.map +7 -0
  326. package/dist/modules/staff/lib/time-tracking-ui/EntryDetailsFields.js +188 -0
  327. package/dist/modules/staff/lib/time-tracking-ui/EntryDetailsFields.js.map +7 -0
  328. package/dist/modules/staff/lib/time-tracking-ui/EntryFilterBar.js +89 -0
  329. package/dist/modules/staff/lib/time-tracking-ui/EntryFilterBar.js.map +7 -0
  330. package/dist/modules/staff/lib/time-tracking-ui/KanbanBoard.js +855 -0
  331. package/dist/modules/staff/lib/time-tracking-ui/KanbanBoard.js.map +7 -0
  332. package/dist/modules/staff/lib/time-tracking-ui/KanbanCard.js +360 -0
  333. package/dist/modules/staff/lib/time-tracking-ui/KanbanCard.js.map +7 -0
  334. package/dist/modules/staff/lib/time-tracking-ui/KanbanColumn.js +259 -0
  335. package/dist/modules/staff/lib/time-tracking-ui/KanbanColumn.js.map +7 -0
  336. package/dist/modules/staff/lib/time-tracking-ui/NewTaskDialog.js +238 -0
  337. package/dist/modules/staff/lib/time-tracking-ui/NewTaskDialog.js.map +7 -0
  338. package/dist/modules/staff/lib/time-tracking-ui/NoProjectAccess.js +130 -0
  339. package/dist/modules/staff/lib/time-tracking-ui/NoProjectAccess.js.map +7 -0
  340. package/dist/modules/staff/lib/time-tracking-ui/PeriodSelector.js +98 -0
  341. package/dist/modules/staff/lib/time-tracking-ui/PeriodSelector.js.map +7 -0
  342. package/dist/modules/staff/lib/time-tracking-ui/PhasePlaceholder.js +27 -0
  343. package/dist/modules/staff/lib/time-tracking-ui/PhasePlaceholder.js.map +7 -0
  344. package/dist/modules/staff/lib/time-tracking-ui/ProjectCodeField.js +166 -0
  345. package/dist/modules/staff/lib/time-tracking-ui/ProjectCodeField.js.map +7 -0
  346. package/dist/modules/staff/lib/time-tracking-ui/ProjectCurrencyField.js +295 -0
  347. package/dist/modules/staff/lib/time-tracking-ui/ProjectCurrencyField.js.map +7 -0
  348. package/dist/modules/staff/lib/time-tracking-ui/ProjectFormSections.js +212 -0
  349. package/dist/modules/staff/lib/time-tracking-ui/ProjectFormSections.js.map +7 -0
  350. package/dist/modules/staff/lib/time-tracking-ui/ProjectTeamDrawer.js +729 -0
  351. package/dist/modules/staff/lib/time-tracking-ui/ProjectTeamDrawer.js.map +7 -0
  352. package/dist/modules/staff/lib/time-tracking-ui/ReportSheet.js +217 -0
  353. package/dist/modules/staff/lib/time-tracking-ui/ReportSheet.js.map +7 -0
  354. package/dist/modules/staff/lib/time-tracking-ui/TagPicker.js +158 -0
  355. package/dist/modules/staff/lib/time-tracking-ui/TagPicker.js.map +7 -0
  356. package/dist/modules/staff/lib/time-tracking-ui/TaskBoardScreen.js +224 -0
  357. package/dist/modules/staff/lib/time-tracking-ui/TaskBoardScreen.js.map +7 -0
  358. package/dist/modules/staff/lib/time-tracking-ui/TaskCommentThread.js +93 -0
  359. package/dist/modules/staff/lib/time-tracking-ui/TaskCommentThread.js.map +7 -0
  360. package/dist/modules/staff/lib/time-tracking-ui/TaskDrawer.js +1196 -0
  361. package/dist/modules/staff/lib/time-tracking-ui/TaskDrawer.js.map +7 -0
  362. package/dist/modules/staff/lib/time-tracking-ui/TaskListView.js +176 -0
  363. package/dist/modules/staff/lib/time-tracking-ui/TaskListView.js.map +7 -0
  364. package/dist/modules/staff/lib/time-tracking-ui/TaskPicker.js +307 -0
  365. package/dist/modules/staff/lib/time-tracking-ui/TaskPicker.js.map +7 -0
  366. package/dist/modules/staff/lib/time-tracking-ui/TaskQuickLog.js +284 -0
  367. package/dist/modules/staff/lib/time-tracking-ui/TaskQuickLog.js.map +7 -0
  368. package/dist/modules/staff/lib/time-tracking-ui/TimeEntriesSummaryFooter.js +73 -0
  369. package/dist/modules/staff/lib/time-tracking-ui/TimeEntriesSummaryFooter.js.map +7 -0
  370. package/dist/modules/staff/lib/time-tracking-ui/TimeEntryDialog.js +1499 -0
  371. package/dist/modules/staff/lib/time-tracking-ui/TimeEntryDialog.js.map +7 -0
  372. package/dist/modules/staff/lib/time-tracking-ui/TimeEntryDurationCell.js +95 -0
  373. package/dist/modules/staff/lib/time-tracking-ui/TimeEntryDurationCell.js.map +7 -0
  374. package/dist/modules/staff/lib/time-tracking-ui/TimesheetCalendar.js +188 -0
  375. package/dist/modules/staff/lib/time-tracking-ui/TimesheetCalendar.js.map +7 -0
  376. package/dist/modules/staff/lib/time-tracking-ui/TimesheetPeriodFooter.js +61 -0
  377. package/dist/modules/staff/lib/time-tracking-ui/TimesheetPeriodFooter.js.map +7 -0
  378. package/dist/modules/staff/lib/time-tracking-ui/TimesheetViewSwitch.js +45 -0
  379. package/dist/modules/staff/lib/time-tracking-ui/TimesheetViewSwitch.js.map +7 -0
  380. package/dist/modules/staff/lib/time-tracking-ui/boardDirectory.js +176 -0
  381. package/dist/modules/staff/lib/time-tracking-ui/boardDirectory.js.map +7 -0
  382. package/dist/modules/staff/lib/time-tracking-ui/boardFilters.js +82 -0
  383. package/dist/modules/staff/lib/time-tracking-ui/boardFilters.js.map +7 -0
  384. package/dist/modules/staff/lib/time-tracking-ui/boardSummary.js +5 -0
  385. package/dist/modules/staff/lib/time-tracking-ui/boardSummary.js.map +7 -0
  386. package/dist/modules/staff/lib/time-tracking-ui/kanbanBoardData.js +152 -0
  387. package/dist/modules/staff/lib/time-tracking-ui/kanbanBoardData.js.map +7 -0
  388. package/dist/modules/staff/lib/time-tracking-ui/projectTeamAssignment.js +92 -0
  389. package/dist/modules/staff/lib/time-tracking-ui/projectTeamAssignment.js.map +7 -0
  390. package/dist/modules/staff/lib/time-tracking-ui/taskDrawerData.js +111 -0
  391. package/dist/modules/staff/lib/time-tracking-ui/taskDrawerData.js.map +7 -0
  392. package/dist/modules/staff/lib/time-tracking-ui/timeEntryDialogState.js +243 -0
  393. package/dist/modules/staff/lib/time-tracking-ui/timeEntryDialogState.js.map +7 -0
  394. package/dist/modules/staff/lib/time-tracking-ui/timeEntryListData.js +151 -0
  395. package/dist/modules/staff/lib/time-tracking-ui/timeEntryListData.js.map +7 -0
  396. package/dist/modules/staff/lib/time-tracking-ui/timeTrackingSettingsForm.js +105 -0
  397. package/dist/modules/staff/lib/time-tracking-ui/timeTrackingSettingsForm.js.map +7 -0
  398. package/dist/modules/staff/lib/time-tracking-ui/timesheetData.js +132 -0
  399. package/dist/modules/staff/lib/time-tracking-ui/timesheetData.js.map +7 -0
  400. package/dist/modules/staff/lib/time-tracking-ui/timesheetPeriod.js +205 -0
  401. package/dist/modules/staff/lib/time-tracking-ui/timesheetPeriod.js.map +7 -0
  402. package/dist/modules/staff/lib/time-tracking-ui/timesheetTargets.js +53 -0
  403. package/dist/modules/staff/lib/time-tracking-ui/timesheetTargets.js.map +7 -0
  404. package/dist/modules/staff/lib/time-tracking-ui/useBoardFilters.js +77 -0
  405. package/dist/modules/staff/lib/time-tracking-ui/useBoardFilters.js.map +7 -0
  406. package/dist/modules/staff/lib/time-tracking-ui/useTimesheetPreferences.js +151 -0
  407. package/dist/modules/staff/lib/time-tracking-ui/useTimesheetPreferences.js.map +7 -0
  408. package/dist/modules/staff/lib/timeTrackingSeeds.js +809 -0
  409. package/dist/modules/staff/lib/timeTrackingSeeds.js.map +7 -0
  410. package/dist/modules/staff/lib/timesheets/timeEntryCacheInvalidation.js +2 -3
  411. package/dist/modules/staff/lib/timesheets/timeEntryCacheInvalidation.js.map +2 -2
  412. package/dist/modules/staff/lib/timesheets/timeEntryDecoration.js +152 -0
  413. package/dist/modules/staff/lib/timesheets/timeEntryDecoration.js.map +7 -0
  414. package/dist/modules/staff/lib/timesheets-projects/budgetBurn.js +36 -0
  415. package/dist/modules/staff/lib/timesheets-projects/budgetBurn.js.map +7 -0
  416. package/dist/modules/staff/lib/timesheets-projects/budgetThreshold.js +66 -0
  417. package/dist/modules/staff/lib/timesheets-projects/budgetThreshold.js.map +7 -0
  418. package/dist/modules/staff/lib/timesheets-projects/budgetThresholdState.js +78 -0
  419. package/dist/modules/staff/lib/timesheets-projects/budgetThresholdState.js.map +7 -0
  420. package/dist/modules/staff/lib/timesheets-projects/computeProjectFinancials.js +81 -0
  421. package/dist/modules/staff/lib/timesheets-projects/computeProjectFinancials.js.map +7 -0
  422. package/dist/modules/staff/lib/timesheets-projects/reportSelection.js +44 -0
  423. package/dist/modules/staff/lib/timesheets-projects/reportSelection.js.map +7 -0
  424. package/dist/modules/staff/lib/timesheets-projects-ui/AssignMembersDialog.js +169 -0
  425. package/dist/modules/staff/lib/timesheets-projects-ui/AssignMembersDialog.js.map +7 -0
  426. package/dist/modules/staff/lib/timesheets-projects-ui/ProjectBudgetCell.js +22 -0
  427. package/dist/modules/staff/lib/timesheets-projects-ui/ProjectBudgetCell.js.map +7 -0
  428. package/dist/modules/staff/lib/timesheets-projects-ui/ProjectCard.js +51 -1
  429. package/dist/modules/staff/lib/timesheets-projects-ui/ProjectCard.js.map +2 -2
  430. package/dist/modules/staff/lib/timesheets-projects-ui/ProjectsBulkActionsBar.js +70 -0
  431. package/dist/modules/staff/lib/timesheets-projects-ui/ProjectsBulkActionsBar.js.map +7 -0
  432. package/dist/modules/staff/lib/timesheets-reports/buildReportSheet.js +63 -0
  433. package/dist/modules/staff/lib/timesheets-reports/buildReportSheet.js.map +7 -0
  434. package/dist/modules/staff/lib/timesheets-reports/loadReportData.js +170 -0
  435. package/dist/modules/staff/lib/timesheets-reports/loadReportData.js.map +7 -0
  436. package/dist/modules/staff/lib/timesheets-reports/pdf.js +205 -0
  437. package/dist/modules/staff/lib/timesheets-reports/pdf.js.map +7 -0
  438. package/dist/modules/staff/lib/timesheets-reports/reportApprovalPolicies.js +68 -0
  439. package/dist/modules/staff/lib/timesheets-reports/reportApprovalPolicies.js.map +7 -0
  440. package/dist/modules/staff/lib/timesheets-reports/reportConfigData.js +135 -0
  441. package/dist/modules/staff/lib/timesheets-reports/reportConfigData.js.map +7 -0
  442. package/dist/modules/staff/lib/timesheets-reports/reportConfigState.js +48 -0
  443. package/dist/modules/staff/lib/timesheets-reports/reportConfigState.js.map +7 -0
  444. package/dist/modules/staff/lib/timesheets-reports/reportExport.js +262 -0
  445. package/dist/modules/staff/lib/timesheets-reports/reportExport.js.map +7 -0
  446. package/dist/modules/staff/lib/timesheets-reports/reportExportFormats.js +34 -0
  447. package/dist/modules/staff/lib/timesheets-reports/reportExportFormats.js.map +7 -0
  448. package/dist/modules/staff/lib/timesheets-reports/reportGroupings.js +79 -0
  449. package/dist/modules/staff/lib/timesheets-reports/reportGroupings.js.map +7 -0
  450. package/dist/modules/staff/lib/timesheets-reports/reportLabels.js +11 -0
  451. package/dist/modules/staff/lib/timesheets-reports/reportLabels.js.map +7 -0
  452. package/dist/modules/staff/lib/timesheets-reports/reportReference.js +83 -0
  453. package/dist/modules/staff/lib/timesheets-reports/reportReference.js.map +7 -0
  454. package/dist/modules/staff/lib/timesheets-reports/reportRows.js +42 -0
  455. package/dist/modules/staff/lib/timesheets-reports/reportRows.js.map +7 -0
  456. package/dist/modules/staff/lib/timesheets-reports/reportSheetData.js +107 -0
  457. package/dist/modules/staff/lib/timesheets-reports/reportSheetData.js.map +7 -0
  458. package/dist/modules/staff/lib/timesheets-reports/reportTotals.js +289 -0
  459. package/dist/modules/staff/lib/timesheets-reports/reportTotals.js.map +7 -0
  460. package/dist/modules/staff/lib/timesheets-reports/xlsx.js +145 -0
  461. package/dist/modules/staff/lib/timesheets-reports/xlsx.js.map +7 -0
  462. package/dist/modules/staff/lib/timesheets-tasks/computeTaskRollups.js +116 -0
  463. package/dist/modules/staff/lib/timesheets-tasks/computeTaskRollups.js.map +7 -0
  464. package/dist/modules/staff/lib/timesheets-tasks/defaultStatusTemplate.js +50 -0
  465. package/dist/modules/staff/lib/timesheets-tasks/defaultStatusTemplate.js.map +7 -0
  466. package/dist/modules/staff/lib/timesheets-tasks/seedProjectStatuses.js +27 -0
  467. package/dist/modules/staff/lib/timesheets-tasks/seedProjectStatuses.js.map +7 -0
  468. package/dist/modules/staff/lib/timesheets-tasks/statusPositions.js +65 -0
  469. package/dist/modules/staff/lib/timesheets-tasks/statusPositions.js.map +7 -0
  470. package/dist/modules/staff/lib/timesheets-tasks/statusSlug.js +31 -0
  471. package/dist/modules/staff/lib/timesheets-tasks/statusSlug.js.map +7 -0
  472. package/dist/modules/staff/lib/timesheets-tasks/taskHierarchy.js +31 -0
  473. package/dist/modules/staff/lib/timesheets-tasks/taskHierarchy.js.map +7 -0
  474. package/dist/modules/staff/lib/timesheets-tasks/taskHoursTotals.js +17 -0
  475. package/dist/modules/staff/lib/timesheets-tasks/taskHoursTotals.js.map +7 -0
  476. package/dist/modules/staff/lib/timesheets-tasks/taskReference.js +51 -0
  477. package/dist/modules/staff/lib/timesheets-tasks/taskReference.js.map +7 -0
  478. package/dist/modules/staff/lib/timesheets-ui/CreateProjectDialog.js +11 -4
  479. package/dist/modules/staff/lib/timesheets-ui/CreateProjectDialog.js.map +2 -2
  480. package/dist/modules/staff/lib/timesheets-ui/ListView.js +369 -111
  481. package/dist/modules/staff/lib/timesheets-ui/ListView.js.map +2 -2
  482. package/dist/modules/staff/lib/timesheets-ui/TimerBar.js +47 -2
  483. package/dist/modules/staff/lib/timesheets-ui/TimerBar.js.map +2 -2
  484. package/dist/modules/staff/migrations/Migration20260813073131_staff.js +79 -0
  485. package/dist/modules/staff/migrations/Migration20260813073131_staff.js.map +7 -0
  486. package/dist/modules/staff/migrations/Migration20260824143357_staff.js +15 -0
  487. package/dist/modules/staff/migrations/Migration20260824143357_staff.js.map +7 -0
  488. package/dist/modules/staff/notifications.client.js +16 -0
  489. package/dist/modules/staff/notifications.client.js.map +7 -0
  490. package/dist/modules/staff/notifications.handlers.js +80 -0
  491. package/dist/modules/staff/notifications.handlers.js.map +7 -0
  492. package/dist/modules/staff/notifications.js +168 -0
  493. package/dist/modules/staff/notifications.js.map +2 -2
  494. package/dist/modules/staff/search.js +159 -1
  495. package/dist/modules/staff/search.js.map +2 -2
  496. package/dist/modules/staff/setup.js +20 -1
  497. package/dist/modules/staff/setup.js.map +2 -2
  498. package/dist/modules/staff/subscribers/time-project-access-requested-notification.js +68 -0
  499. package/dist/modules/staff/subscribers/time-project-access-requested-notification.js.map +7 -0
  500. package/dist/modules/staff/subscribers/time-project-budget-threshold-notification.js +149 -0
  501. package/dist/modules/staff/subscribers/time-project-budget-threshold-notification.js.map +7 -0
  502. package/dist/modules/staff/subscribers/time-report-approved-notification.js +78 -0
  503. package/dist/modules/staff/subscribers/time-report-approved-notification.js.map +7 -0
  504. package/dist/modules/staff/subscribers/time-report-portal-broadcast.js +78 -0
  505. package/dist/modules/staff/subscribers/time-report-portal-broadcast.js.map +7 -0
  506. package/dist/modules/staff/translations.js +4 -1
  507. package/dist/modules/staff/translations.js.map +2 -2
  508. package/dist/modules/staff/widgets/components.js +7 -0
  509. package/dist/modules/staff/widgets/components.js.map +7 -0
  510. package/dist/modules/staff/widgets/injection/timer-sidebar-indicator/widget.js +5 -4
  511. package/dist/modules/staff/widgets/injection/timer-sidebar-indicator/widget.js.map +2 -2
  512. package/dist/modules/staff/widgets/notifications/TimeProjectAccessRequestedRenderer.js +135 -0
  513. package/dist/modules/staff/widgets/notifications/TimeProjectAccessRequestedRenderer.js.map +7 -0
  514. package/dist/modules/staff/widgets/notifications/index.js +5 -0
  515. package/dist/modules/staff/widgets/notifications/index.js.map +7 -0
  516. package/dist/modules/staff/workers/timesheets-reapply-rounding.js +43 -0
  517. package/dist/modules/staff/workers/timesheets-reapply-rounding.js.map +7 -0
  518. package/generated/entities/staff_time_entry/index.ts +7 -0
  519. package/generated/entities/staff_time_entry_tag/index.ts +6 -0
  520. package/generated/entities/staff_time_project/index.ts +8 -0
  521. package/generated/entities/staff_time_report/index.ts +27 -0
  522. package/generated/entities/staff_time_report_entry/index.ts +12 -0
  523. package/generated/entities/staff_time_report_event/index.ts +9 -0
  524. package/generated/entities/staff_time_report_project/index.ts +6 -0
  525. package/generated/entities/staff_time_tag/index.ts +9 -0
  526. package/generated/entities/staff_time_task/index.ts +17 -0
  527. package/generated/entities/staff_time_task_comment/index.ts +9 -0
  528. package/generated/entities/staff_time_task_status/index.ts +13 -0
  529. package/generated/entities/staff_time_task_tag/index.ts +6 -0
  530. package/generated/entities.ids.generated.ts +11 -1
  531. package/generated/entity-fields-registry.ts +149 -0
  532. package/package.json +7 -7
  533. package/src/helpers/integration/timesheetFixtures.ts +31 -1
  534. package/src/modules/auth/README.md +1 -1
  535. package/src/modules/auth/cli.ts +35 -1
  536. package/src/modules/auth/i18n/de.json +7 -0
  537. package/src/modules/auth/i18n/en.json +7 -0
  538. package/src/modules/auth/i18n/es.json +7 -0
  539. package/src/modules/auth/i18n/ko.json +7 -0
  540. package/src/modules/auth/i18n/pl.json +7 -0
  541. package/src/modules/auth/lib/backendChrome.tsx +1 -0
  542. package/src/modules/customer_accounts/lib/customerRoleAcls.ts +79 -0
  543. package/src/modules/customer_accounts/setup.ts +1 -45
  544. package/src/modules/staff/AGENTS.md +769 -1
  545. package/src/modules/staff/acl.ts +9 -0
  546. package/src/modules/staff/ai-agents.ts +189 -0
  547. package/src/modules/staff/ai-tools/time-tracking-pack.ts +494 -0
  548. package/src/modules/staff/ai-tools/types.ts +82 -0
  549. package/src/modules/staff/ai-tools.ts +13 -0
  550. package/src/modules/staff/analytics.ts +113 -0
  551. package/src/modules/staff/api/guards.ts +85 -3
  552. package/src/modules/staff/api/leave-requests/accept/route.ts +0 -2
  553. package/src/modules/staff/api/leave-requests/reject/route.ts +0 -2
  554. package/src/modules/staff/api/portal/time-reports/[id]/route.ts +182 -0
  555. package/src/modules/staff/api/portal/time-reports/route.ts +270 -0
  556. package/src/modules/staff/api/team-members/self/route.ts +0 -2
  557. package/src/modules/staff/api/team-members/tags/assign/route.ts +0 -2
  558. package/src/modules/staff/api/team-members/tags/unassign/route.ts +0 -2
  559. package/src/modules/staff/api/timesheets/_shared/withTimesheetInterceptors.ts +292 -0
  560. package/src/modules/staff/api/timesheets/access-requests/route.ts +299 -0
  561. package/src/modules/staff/api/timesheets/my-projects/[projectId]/route.ts +15 -7
  562. package/src/modules/staff/api/timesheets/my-projects/route.ts +14 -1
  563. package/src/modules/staff/api/timesheets/my-work/myWorkAggregate.ts +90 -0
  564. package/src/modules/staff/api/timesheets/my-work/route.ts +475 -0
  565. package/src/modules/staff/api/timesheets/projects/kpis/route.ts +15 -2
  566. package/src/modules/staff/api/timesheets/reports/[id]/close/route.ts +203 -0
  567. package/src/modules/staff/api/timesheets/reports/[id]/export/route.ts +315 -0
  568. package/src/modules/staff/api/timesheets/reports/[id]/sheet/route.ts +220 -0
  569. package/src/modules/staff/api/timesheets/reports/[id]/unlock/route.ts +208 -0
  570. package/src/modules/staff/api/timesheets/reports/preview/route.ts +449 -0
  571. package/src/modules/staff/api/timesheets/reports/route.ts +386 -0
  572. package/src/modules/staff/api/timesheets/reports/shared.ts +121 -0
  573. package/src/modules/staff/api/timesheets/settings/reapply-rounding/route.ts +205 -0
  574. package/src/modules/staff/api/timesheets/settings/rounding-impact/route.ts +226 -0
  575. package/src/modules/staff/api/timesheets/settings/route.ts +242 -0
  576. package/src/modules/staff/api/timesheets/tags/access.ts +134 -0
  577. package/src/modules/staff/api/timesheets/tags/entry-assignments/route.ts +290 -0
  578. package/src/modules/staff/api/timesheets/tags/route.ts +177 -0
  579. package/src/modules/staff/api/timesheets/tags/task-assignments/route.ts +294 -0
  580. package/src/modules/staff/api/timesheets/task-statuses/route.ts +232 -0
  581. package/src/modules/staff/api/timesheets/tasks/[id]/comments/route.ts +532 -0
  582. package/src/modules/staff/api/timesheets/tasks/[id]/status/route.ts +271 -0
  583. package/src/modules/staff/api/timesheets/tasks/route.ts +443 -0
  584. package/src/modules/staff/api/timesheets/time-entries/[id]/duplicate/route.ts +306 -0
  585. package/src/modules/staff/api/timesheets/time-entries/[id]/segments/[segmentId]/route.ts +32 -10
  586. package/src/modules/staff/api/timesheets/time-entries/[id]/segments/route.ts +32 -17
  587. package/src/modules/staff/api/timesheets/time-entries/[id]/timer-start/route.ts +27 -6
  588. package/src/modules/staff/api/timesheets/time-entries/[id]/timer-stop/route.ts +36 -6
  589. package/src/modules/staff/api/timesheets/time-entries/bulk/route.ts +331 -34
  590. package/src/modules/staff/api/timesheets/time-entries/copy-day/route.ts +533 -0
  591. package/src/modules/staff/api/timesheets/time-entries/overlaps/route.ts +457 -0
  592. package/src/modules/staff/api/timesheets/time-entries/route.ts +378 -24
  593. package/src/modules/staff/api/timesheets/time-entries/start-timer/route.ts +31 -9
  594. package/src/modules/staff/api/timesheets/time-projects/[id]/change-currency/route.ts +246 -0
  595. package/src/modules/staff/api/timesheets/time-projects/[id]/employees/route.ts +62 -2
  596. package/src/modules/staff/api/timesheets/time-projects/route.ts +397 -22
  597. package/src/modules/staff/backend/staff/time-tracking/board/page.meta.ts +14 -0
  598. package/src/modules/staff/backend/staff/time-tracking/board/page.tsx +151 -0
  599. package/src/modules/staff/backend/staff/time-tracking/entries/page.meta.ts +14 -0
  600. package/src/modules/staff/backend/staff/time-tracking/entries/page.tsx +1229 -0
  601. package/src/modules/staff/backend/staff/time-tracking/page.meta.ts +11 -0
  602. package/src/modules/staff/backend/staff/time-tracking/page.tsx +823 -0
  603. package/src/modules/staff/backend/staff/time-tracking/projects/[id]/board/page.meta.ts +12 -0
  604. package/src/modules/staff/backend/staff/time-tracking/projects/[id]/board/page.tsx +81 -0
  605. package/src/modules/staff/backend/staff/time-tracking/projects/[id]/edit/page.meta.ts +12 -0
  606. package/src/modules/staff/backend/staff/time-tracking/projects/[id]/edit/page.tsx +275 -0
  607. package/src/modules/staff/backend/staff/time-tracking/projects/[id]/page.meta.ts +12 -0
  608. package/src/modules/staff/backend/staff/time-tracking/projects/[id]/page.tsx +1420 -0
  609. package/src/modules/staff/backend/staff/time-tracking/projects/create/page.meta.ts +12 -0
  610. package/src/modules/staff/backend/staff/time-tracking/projects/create/page.tsx +109 -0
  611. package/src/modules/staff/backend/staff/time-tracking/projects/page.meta.ts +15 -0
  612. package/src/modules/staff/backend/staff/time-tracking/projects/page.tsx +1254 -0
  613. package/src/modules/staff/backend/staff/time-tracking/projects/projectFormConfig.ts +466 -0
  614. package/src/modules/staff/backend/staff/time-tracking/reports/[id]/page.meta.ts +12 -0
  615. package/src/modules/staff/backend/staff/time-tracking/reports/[id]/page.tsx +632 -0
  616. package/src/modules/staff/backend/staff/time-tracking/reports/create/page.meta.ts +12 -0
  617. package/src/modules/staff/backend/staff/time-tracking/reports/create/page.tsx +867 -0
  618. package/src/modules/staff/backend/staff/time-tracking/reports/page.meta.ts +14 -0
  619. package/src/modules/staff/backend/staff/time-tracking/reports/page.tsx +246 -0
  620. package/src/modules/staff/backend/staff/time-tracking/settings/page.meta.ts +14 -0
  621. package/src/modules/staff/backend/staff/time-tracking/settings/page.tsx +701 -0
  622. package/src/modules/staff/backend/staff/time-tracking/timesheet/GridView.tsx +953 -0
  623. package/src/modules/staff/backend/staff/time-tracking/timesheet/page.meta.ts +14 -0
  624. package/src/modules/staff/backend/staff/time-tracking/timesheet/page.tsx +800 -0
  625. package/src/modules/staff/backend/staff/timesheets/page.meta.ts +6 -6
  626. package/src/modules/staff/backend/staff/timesheets/page.tsx +12 -1010
  627. package/src/modules/staff/backend/staff/timesheets/projects/[id]/edit/page.meta.ts +0 -6
  628. package/src/modules/staff/backend/staff/timesheets/projects/[id]/edit/page.tsx +4 -158
  629. package/src/modules/staff/backend/staff/timesheets/projects/[id]/page.meta.ts +0 -6
  630. package/src/modules/staff/backend/staff/timesheets/projects/[id]/page.tsx +4 -609
  631. package/src/modules/staff/backend/staff/timesheets/projects/create/page.meta.ts +0 -6
  632. package/src/modules/staff/backend/staff/timesheets/projects/create/page.tsx +3 -89
  633. package/src/modules/staff/backend/staff/timesheets/projects/page.meta.ts +2 -19
  634. package/src/modules/staff/backend/staff/timesheets/projects/page.tsx +3 -778
  635. package/src/modules/staff/ce.ts +63 -0
  636. package/src/modules/staff/cli.ts +207 -1
  637. package/src/modules/staff/commands/index.ts +5 -0
  638. package/src/modules/staff/commands/timesheets-entries.ts +1006 -28
  639. package/src/modules/staff/commands/timesheets-projects.ts +593 -7
  640. package/src/modules/staff/commands/timesheets-reports.ts +1329 -0
  641. package/src/modules/staff/commands/timesheets-tags.ts +1315 -0
  642. package/src/modules/staff/commands/timesheets-task-comments.ts +583 -0
  643. package/src/modules/staff/commands/timesheets-task-statuses.ts +889 -0
  644. package/src/modules/staff/commands/timesheets-tasks.ts +1121 -0
  645. package/src/modules/staff/data/enrichers.ts +675 -10
  646. package/src/modules/staff/data/entities.ts +494 -2
  647. package/src/modules/staff/data/extensions.ts +68 -0
  648. package/src/modules/staff/data/validators.ts +348 -3
  649. package/src/modules/staff/di.ts +96 -0
  650. package/src/modules/staff/events.payloads.ts +268 -0
  651. package/src/modules/staff/events.ts +87 -5
  652. package/src/modules/staff/extension-points.ts +308 -0
  653. package/src/modules/staff/frontend/[orgSlug]/portal/time-reports/[id]/page.meta.ts +10 -0
  654. package/src/modules/staff/frontend/[orgSlug]/portal/time-reports/[id]/page.tsx +225 -0
  655. package/src/modules/staff/frontend/[orgSlug]/portal/time-reports/page.meta.ts +17 -0
  656. package/src/modules/staff/frontend/[orgSlug]/portal/time-reports/page.tsx +182 -0
  657. package/src/modules/staff/i18n/de.json +899 -0
  658. package/src/modules/staff/i18n/en.json +899 -0
  659. package/src/modules/staff/i18n/es.json +899 -0
  660. package/src/modules/staff/i18n/ko.json +899 -0
  661. package/src/modules/staff/i18n/pl.json +899 -0
  662. package/src/modules/staff/lib/crud.ts +14 -3
  663. package/src/modules/staff/lib/time-tracking/access.ts +155 -0
  664. package/src/modules/staff/lib/time-tracking/billability.ts +68 -0
  665. package/src/modules/staff/lib/time-tracking/capacity.ts +124 -0
  666. package/src/modules/staff/lib/time-tracking/componentContracts.ts +26 -0
  667. package/src/modules/staff/lib/time-tracking/cost.ts +144 -0
  668. package/src/modules/staff/lib/time-tracking/duration.ts +68 -0
  669. package/src/modules/staff/lib/time-tracking/featureAccess.ts +115 -0
  670. package/src/modules/staff/lib/time-tracking/interval.ts +90 -0
  671. package/src/modules/staff/lib/time-tracking/migrateProjectCodes.ts +161 -0
  672. package/src/modules/staff/lib/time-tracking/moneyVisibility.ts +37 -0
  673. package/src/modules/staff/lib/time-tracking/overlap.ts +159 -0
  674. package/src/modules/staff/lib/time-tracking/portalRecipients.ts +76 -0
  675. package/src/modules/staff/lib/time-tracking/portalReports.ts +31 -0
  676. package/src/modules/staff/lib/time-tracking/projectCode.ts +221 -0
  677. package/src/modules/staff/lib/time-tracking/reapplyRounding.ts +313 -0
  678. package/src/modules/staff/lib/time-tracking/recalculationRunner.ts +118 -0
  679. package/src/modules/staff/lib/time-tracking/recalculations.ts +135 -0
  680. package/src/modules/staff/lib/time-tracking/registries/invoke.ts +122 -0
  681. package/src/modules/staff/lib/time-tracking/registries/registry.ts +124 -0
  682. package/src/modules/staff/lib/time-tracking/registries/scope.ts +56 -0
  683. package/src/modules/staff/lib/time-tracking/rollup.ts +59 -0
  684. package/src/modules/staff/lib/time-tracking/rounding.ts +126 -0
  685. package/src/modules/staff/lib/time-tracking/roundingImpact.ts +75 -0
  686. package/src/modules/staff/lib/time-tracking/settingKeys.ts +274 -0
  687. package/src/modules/staff/lib/time-tracking/settings.ts +168 -0
  688. package/src/modules/staff/lib/time-tracking/sqlInClause.ts +22 -0
  689. package/src/modules/staff/lib/time-tracking/timeEntrySources.ts +85 -0
  690. package/src/modules/staff/lib/time-tracking-ui/BoardFilterChips.tsx +360 -0
  691. package/src/modules/staff/lib/time-tracking-ui/CustomerPicker.tsx +427 -0
  692. package/src/modules/staff/lib/time-tracking-ui/DurationInput.tsx +192 -0
  693. package/src/modules/staff/lib/time-tracking-ui/EntryDetailsFields.tsx +224 -0
  694. package/src/modules/staff/lib/time-tracking-ui/EntryFilterBar.tsx +144 -0
  695. package/src/modules/staff/lib/time-tracking-ui/KanbanBoard.tsx +1065 -0
  696. package/src/modules/staff/lib/time-tracking-ui/KanbanCard.tsx +435 -0
  697. package/src/modules/staff/lib/time-tracking-ui/KanbanColumn.tsx +316 -0
  698. package/src/modules/staff/lib/time-tracking-ui/NewTaskDialog.tsx +291 -0
  699. package/src/modules/staff/lib/time-tracking-ui/NoProjectAccess.tsx +162 -0
  700. package/src/modules/staff/lib/time-tracking-ui/PeriodSelector.tsx +149 -0
  701. package/src/modules/staff/lib/time-tracking-ui/PhasePlaceholder.tsx +31 -0
  702. package/src/modules/staff/lib/time-tracking-ui/ProjectCodeField.tsx +230 -0
  703. package/src/modules/staff/lib/time-tracking-ui/ProjectCurrencyField.tsx +432 -0
  704. package/src/modules/staff/lib/time-tracking-ui/ProjectFormSections.tsx +323 -0
  705. package/src/modules/staff/lib/time-tracking-ui/ProjectTeamDrawer.tsx +930 -0
  706. package/src/modules/staff/lib/time-tracking-ui/ReportSheet.tsx +357 -0
  707. package/src/modules/staff/lib/time-tracking-ui/TagPicker.tsx +195 -0
  708. package/src/modules/staff/lib/time-tracking-ui/TaskBoardScreen.tsx +243 -0
  709. package/src/modules/staff/lib/time-tracking-ui/TaskCommentThread.tsx +137 -0
  710. package/src/modules/staff/lib/time-tracking-ui/TaskDrawer.tsx +1405 -0
  711. package/src/modules/staff/lib/time-tracking-ui/TaskListView.tsx +260 -0
  712. package/src/modules/staff/lib/time-tracking-ui/TaskPicker.tsx +435 -0
  713. package/src/modules/staff/lib/time-tracking-ui/TaskQuickLog.tsx +296 -0
  714. package/src/modules/staff/lib/time-tracking-ui/TimeEntriesSummaryFooter.tsx +97 -0
  715. package/src/modules/staff/lib/time-tracking-ui/TimeEntryDialog.tsx +1929 -0
  716. package/src/modules/staff/lib/time-tracking-ui/TimeEntryDurationCell.tsx +126 -0
  717. package/src/modules/staff/lib/time-tracking-ui/TimesheetCalendar.tsx +265 -0
  718. package/src/modules/staff/lib/time-tracking-ui/TimesheetPeriodFooter.tsx +78 -0
  719. package/src/modules/staff/lib/time-tracking-ui/TimesheetViewSwitch.tsx +70 -0
  720. package/src/modules/staff/lib/time-tracking-ui/boardDirectory.ts +231 -0
  721. package/src/modules/staff/lib/time-tracking-ui/boardFilters.ts +128 -0
  722. package/src/modules/staff/lib/time-tracking-ui/boardSummary.ts +20 -0
  723. package/src/modules/staff/lib/time-tracking-ui/kanbanBoardData.ts +228 -0
  724. package/src/modules/staff/lib/time-tracking-ui/projectTeamAssignment.ts +143 -0
  725. package/src/modules/staff/lib/time-tracking-ui/taskDrawerData.ts +194 -0
  726. package/src/modules/staff/lib/time-tracking-ui/timeEntryDialogState.ts +400 -0
  727. package/src/modules/staff/lib/time-tracking-ui/timeEntryListData.ts +271 -0
  728. package/src/modules/staff/lib/time-tracking-ui/timeTrackingSettingsForm.ts +168 -0
  729. package/src/modules/staff/lib/time-tracking-ui/timesheetData.ts +225 -0
  730. package/src/modules/staff/lib/time-tracking-ui/timesheetPeriod.ts +278 -0
  731. package/src/modules/staff/lib/time-tracking-ui/timesheetTargets.ts +93 -0
  732. package/src/modules/staff/lib/time-tracking-ui/useBoardFilters.ts +107 -0
  733. package/src/modules/staff/lib/time-tracking-ui/useTimesheetPreferences.ts +245 -0
  734. package/src/modules/staff/lib/timeTrackingSeeds.ts +1037 -0
  735. package/src/modules/staff/lib/timesheets/timeEntryCacheInvalidation.ts +11 -10
  736. package/src/modules/staff/lib/timesheets/timeEntryDecoration.ts +256 -0
  737. package/src/modules/staff/lib/timesheets-projects/budgetBurn.ts +60 -0
  738. package/src/modules/staff/lib/timesheets-projects/budgetThreshold.ts +135 -0
  739. package/src/modules/staff/lib/timesheets-projects/budgetThresholdState.ts +137 -0
  740. package/src/modules/staff/lib/timesheets-projects/computeProjectFinancials.ts +142 -0
  741. package/src/modules/staff/lib/timesheets-projects/reportSelection.ts +82 -0
  742. package/src/modules/staff/lib/timesheets-projects-ui/AssignMembersDialog.tsx +237 -0
  743. package/src/modules/staff/lib/timesheets-projects-ui/ProjectBudgetCell.tsx +33 -0
  744. package/src/modules/staff/lib/timesheets-projects-ui/ProjectCard.tsx +56 -1
  745. package/src/modules/staff/lib/timesheets-projects-ui/ProjectsBulkActionsBar.tsx +90 -0
  746. package/src/modules/staff/lib/timesheets-reports/buildReportSheet.ts +125 -0
  747. package/src/modules/staff/lib/timesheets-reports/loadReportData.ts +251 -0
  748. package/src/modules/staff/lib/timesheets-reports/pdf.ts +263 -0
  749. package/src/modules/staff/lib/timesheets-reports/reportApprovalPolicies.ts +137 -0
  750. package/src/modules/staff/lib/timesheets-reports/reportConfigData.ts +247 -0
  751. package/src/modules/staff/lib/timesheets-reports/reportConfigState.ts +89 -0
  752. package/src/modules/staff/lib/timesheets-reports/reportExport.ts +373 -0
  753. package/src/modules/staff/lib/timesheets-reports/reportExportFormats.ts +71 -0
  754. package/src/modules/staff/lib/timesheets-reports/reportGroupings.ts +153 -0
  755. package/src/modules/staff/lib/timesheets-reports/reportLabels.ts +23 -0
  756. package/src/modules/staff/lib/timesheets-reports/reportReference.ts +146 -0
  757. package/src/modules/staff/lib/timesheets-reports/reportRows.ts +89 -0
  758. package/src/modules/staff/lib/timesheets-reports/reportSheetData.ts +196 -0
  759. package/src/modules/staff/lib/timesheets-reports/reportTotals.ts +544 -0
  760. package/src/modules/staff/lib/timesheets-reports/xlsx.ts +207 -0
  761. package/src/modules/staff/lib/timesheets-tasks/computeTaskRollups.ts +238 -0
  762. package/src/modules/staff/lib/timesheets-tasks/defaultStatusTemplate.ts +90 -0
  763. package/src/modules/staff/lib/timesheets-tasks/seedProjectStatuses.ts +43 -0
  764. package/src/modules/staff/lib/timesheets-tasks/statusPositions.ts +132 -0
  765. package/src/modules/staff/lib/timesheets-tasks/statusSlug.ts +43 -0
  766. package/src/modules/staff/lib/timesheets-tasks/taskHierarchy.ts +99 -0
  767. package/src/modules/staff/lib/timesheets-tasks/taskHoursTotals.ts +42 -0
  768. package/src/modules/staff/lib/timesheets-tasks/taskReference.ts +108 -0
  769. package/src/modules/staff/lib/timesheets-ui/CreateProjectDialog.tsx +18 -4
  770. package/src/modules/staff/lib/timesheets-ui/ListView.tsx +504 -149
  771. package/src/modules/staff/lib/timesheets-ui/TimerBar.tsx +50 -2
  772. package/src/modules/staff/migrations/.snapshot-open-mercato.json +3244 -228
  773. package/src/modules/staff/migrations/Migration20260813073131_staff.ts +94 -0
  774. package/src/modules/staff/migrations/Migration20260824143357_staff.ts +17 -0
  775. package/src/modules/staff/notifications.client.ts +16 -0
  776. package/src/modules/staff/notifications.handlers.ts +88 -0
  777. package/src/modules/staff/notifications.ts +163 -0
  778. package/src/modules/staff/search.ts +191 -1
  779. package/src/modules/staff/setup.ts +22 -0
  780. package/src/modules/staff/subscribers/time-project-access-requested-notification.ts +95 -0
  781. package/src/modules/staff/subscribers/time-project-budget-threshold-notification.ts +226 -0
  782. package/src/modules/staff/subscribers/time-report-approved-notification.ts +116 -0
  783. package/src/modules/staff/subscribers/time-report-portal-broadcast.ts +120 -0
  784. package/src/modules/staff/translations.ts +17 -0
  785. package/src/modules/staff/widgets/components.ts +34 -0
  786. package/src/modules/staff/widgets/injection/timer-sidebar-indicator/widget.tsx +6 -5
  787. package/src/modules/staff/widgets/notifications/TimeProjectAccessRequestedRenderer.tsx +138 -0
  788. package/src/modules/staff/widgets/notifications/index.ts +1 -0
  789. package/src/modules/staff/workers/timesheets-reapply-rounding.ts +59 -0
  790. package/dist/modules/staff/backend/staff/timesheets/projects/projectFormConfig.js +0 -123
  791. package/dist/modules/staff/backend/staff/timesheets/projects/projectFormConfig.js.map +0 -7
  792. package/src/modules/staff/backend/staff/timesheets/projects/projectFormConfig.ts +0 -138
@@ -2,16 +2,46 @@ import { expect, type APIRequestContext } from '@playwright/test'
2
2
  import { apiRequest } from './api'
3
3
  import { deleteStaffEntityIfExists } from './staffFixtures'
4
4
 
5
+ export type CreateTimeProjectFixtureInput = {
6
+ /**
7
+ * Required in practice: US-B1 makes a customer mandatory on project create, so a
8
+ * call without it cannot succeed. Pass an id from `customers.customer_entities`;
9
+ * `createCompanyFixture` returns one.
10
+ *
11
+ * It is typed optional only because this module is published as
12
+ * `@open-mercato/core/helpers/integration/timesheetFixtures`, and tightening the
13
+ * parameter would break every third-party spec at compile time with no
14
+ * deprecation window. The check below turns the omission into a named error
15
+ * instead of the 422 that six in-repo specs hit (T2.10).
16
+ */
17
+ customerId?: string
18
+ name?: string
19
+ code?: string
20
+ }
21
+
22
+ /**
23
+ * Creates a time project. `input.customerId` must be supplied — see the type above
24
+ * for why it is not enforced by the compiler.
25
+ */
5
26
  export async function createTimeProjectFixture(
6
27
  request: APIRequestContext,
7
28
  token: string,
8
- input?: { name?: string; code?: string },
29
+ input?: CreateTimeProjectFixtureInput,
9
30
  ): Promise<string> {
31
+ const customerId = input?.customerId
32
+ if (!customerId) {
33
+ throw new Error(
34
+ '[internal] createTimeProjectFixture requires input.customerId: a customer is mandatory on ' +
35
+ 'POST /api/staff/timesheets/time-projects, and there is no safe default to fall back to. ' +
36
+ 'Create one first (e.g. createCompanyFixture from crmFixtures) and pass its id.',
37
+ )
38
+ }
10
39
  const response = await apiRequest(request, 'POST', '/api/staff/timesheets/time-projects', {
11
40
  token,
12
41
  data: {
13
42
  name: input?.name ?? `QA Project ${Date.now()}`,
14
43
  code: input?.code ?? `QA-${Date.now()}`,
44
+ customerId,
15
45
  projectType: 'internal',
16
46
  status: 'active',
17
47
  },
@@ -9,7 +9,7 @@ Features:
9
9
  - `mercato auth seed-roles`
10
10
  - `mercato auth add-org --name <org>`
11
11
  - `mercato auth setup --orgName <org> --email <e> --password <p> [--roles superadmin,admin] [--skip-password-policy]`
12
- - `mercato auth sync-role-acls [--tenant <tenantId>] [--no-superadmin]` — re-applies each enabled module's `defaultRoleFeatures` to existing tenants. Idempotent and additive (existing custom features are preserved). Run after deploying new module features to ensure existing tenants pick them up; without `--tenant` it iterates every tenant.
12
+ - `mercato auth sync-role-acls [--tenant <tenantId>] [--no-superadmin]` — re-applies each enabled module's `defaultRoleFeatures` (staff roles) **and** `defaultCustomerRoleFeatures` (customer/portal roles) to existing tenants. Idempotent and additive (existing custom features are preserved; no role or ACL row is created). Run after deploying new module features to ensure existing tenants pick them up; without `--tenant` it iterates every tenant. The portal half is skipped in deployments without the `customer_accounts` module.
13
13
 
14
14
  DB entities used (defined in root schema):
15
15
  - `users` with: `email`, `password_hash`, `is_confirmed`, `last_login_at`, `organization_id`, timestamps.
@@ -21,7 +21,7 @@ import type { KmsService, TenantDek } from '@open-mercato/shared/lib/encryption/
21
21
  import crypto from 'node:crypto'
22
22
  import { formatPasswordRequirements, getPasswordPolicy, validatePassword } from '@open-mercato/shared/lib/auth/passwordPolicy'
23
23
  import { parseBooleanToken } from '@open-mercato/shared/lib/boolean'
24
- import { getCliModules } from '@open-mercato/shared/modules/registry'
24
+ import { getCliModules, type Module } from '@open-mercato/shared/modules/registry'
25
25
 
26
26
  async function resolveTenantScopedRole(em: any, name: string, normalizedTenantId: string | null) {
27
27
  const existing = await em.findOne(Role, { name, tenantId: normalizedTenantId })
@@ -784,6 +784,34 @@ const setPassword: ModuleCli = {
784
784
  },
785
785
  }
786
786
 
787
+ /**
788
+ * The portal half of the same sync.
789
+ *
790
+ * Staff roles pick up a module's newly declared features here; customer roles used
791
+ * to pick theirs up only at tenant bootstrap, so a portal feature that shipped
792
+ * after a tenant existed never reached that tenant's `Buyer`/`Viewer` roles and the
793
+ * page stayed invisible to every real customer. `customer_accounts` owns those
794
+ * entities and is optional, so it is reached through a guarded dynamic import: a
795
+ * deployment without the module syncs its staff roles exactly as before.
796
+ */
797
+ async function syncCustomerRoleAcls(
798
+ em: EntityManager,
799
+ tenantId: string,
800
+ modules: Module[],
801
+ ): Promise<{ updatedRoleSlugs: string[]; addedFeatures: string[] } | null> {
802
+ let ensure: typeof import('@open-mercato/core/modules/customer_accounts/lib/customerRoleAcls').ensureDefaultCustomerRoleAcls
803
+ try {
804
+ ;({ ensureDefaultCustomerRoleAcls: ensure } = await import(
805
+ '@open-mercato/core/modules/customer_accounts/lib/customerRoleAcls'
806
+ ))
807
+ } catch {
808
+ // The portal module is not part of this deployment; staff roles are still synced.
809
+ return null
810
+ }
811
+ // Deliberately outside the guard: a failure of the sync itself is a real error.
812
+ return ensure(em, tenantId, modules)
813
+ }
814
+
787
815
  const syncRoleAcls: ModuleCli = {
788
816
  command: 'sync-role-acls',
789
817
  async run(rest) {
@@ -841,7 +869,13 @@ const syncRoleAcls: ModuleCli = {
841
869
  for (const tenantId of targetTenantIds) {
842
870
  await ensureDefaultRoleAcls(em, tenantId, modules, { includeSuperadminRole })
843
871
  await ensureCustomRoleAcls(em, tenantId, modules)
872
+ const portal = await syncCustomerRoleAcls(em, tenantId, modules)
844
873
  console.log(`✅ Synced role ACLs for tenant ${tenantId}`)
874
+ if (portal && portal.addedFeatures.length) {
875
+ console.log(
876
+ ` ↳ portal roles ${portal.updatedRoleSlugs.join(', ')} gained ${portal.addedFeatures.join(', ')}`,
877
+ )
878
+ }
845
879
  }
846
880
  },
847
881
  }
@@ -277,6 +277,13 @@
277
277
  "auth.acl.features.staff.timesheets.manage_own": "Create/edit/delete own entries",
278
278
  "auth.acl.features.staff.timesheets.projects.manage": "Manage time projects",
279
279
  "auth.acl.features.staff.timesheets.projects.view": "View time projects",
280
+ "auth.acl.features.staff.timesheets.rates.view": "Sätze und Kosten ansehen",
281
+ "auth.acl.features.staff.timesheets.reports.manage": "Kundenberichte erstellen/bearbeiten",
282
+ "auth.acl.features.staff.timesheets.reports.unlock": "Berichtete Einträge entsperren",
283
+ "auth.acl.features.staff.timesheets.reports.view": "Kundenberichte ansehen",
284
+ "auth.acl.features.staff.timesheets.settings.manage": "Zeiterfassungseinstellungen verwalten",
285
+ "auth.acl.features.staff.timesheets.tasks.manage": "Aufgaben erstellen/bearbeiten",
286
+ "auth.acl.features.staff.timesheets.tasks.view": "Aufgaben ansehen",
280
287
  "auth.acl.features.staff.timesheets.view": "View own time entries",
281
288
  "auth.acl.features.staff.view": "View employees",
282
289
  "auth.acl.features.storage_providers.manage": "Manage storage providers",
@@ -277,6 +277,13 @@
277
277
  "auth.acl.features.staff.timesheets.manage_own": "Create/edit/delete own entries",
278
278
  "auth.acl.features.staff.timesheets.projects.manage": "Manage time projects",
279
279
  "auth.acl.features.staff.timesheets.projects.view": "View time projects",
280
+ "auth.acl.features.staff.timesheets.rates.view": "View rates and cost",
281
+ "auth.acl.features.staff.timesheets.reports.manage": "Create/edit customer reports",
282
+ "auth.acl.features.staff.timesheets.reports.unlock": "Unlock reported entries",
283
+ "auth.acl.features.staff.timesheets.reports.view": "View customer reports",
284
+ "auth.acl.features.staff.timesheets.settings.manage": "Manage time tracking settings",
285
+ "auth.acl.features.staff.timesheets.tasks.manage": "Create/edit tasks",
286
+ "auth.acl.features.staff.timesheets.tasks.view": "View tasks",
280
287
  "auth.acl.features.staff.timesheets.view": "View own time entries",
281
288
  "auth.acl.features.staff.view": "View employees",
282
289
  "auth.acl.features.storage_providers.manage": "Manage storage providers",
@@ -277,6 +277,13 @@
277
277
  "auth.acl.features.staff.timesheets.manage_own": "Create/edit/delete own entries",
278
278
  "auth.acl.features.staff.timesheets.projects.manage": "Manage time projects",
279
279
  "auth.acl.features.staff.timesheets.projects.view": "View time projects",
280
+ "auth.acl.features.staff.timesheets.rates.view": "Ver tarifas y costes",
281
+ "auth.acl.features.staff.timesheets.reports.manage": "Crear/editar informes de cliente",
282
+ "auth.acl.features.staff.timesheets.reports.unlock": "Desbloquear entradas reportadas",
283
+ "auth.acl.features.staff.timesheets.reports.view": "Ver informes de cliente",
284
+ "auth.acl.features.staff.timesheets.settings.manage": "Gestionar ajustes de control horario",
285
+ "auth.acl.features.staff.timesheets.tasks.manage": "Crear/editar tareas",
286
+ "auth.acl.features.staff.timesheets.tasks.view": "Ver tareas",
280
287
  "auth.acl.features.staff.timesheets.view": "View own time entries",
281
288
  "auth.acl.features.staff.view": "View employees",
282
289
  "auth.acl.features.storage_providers.manage": "Manage storage providers",
@@ -277,6 +277,13 @@
277
277
  "auth.acl.features.staff.timesheets.manage_own": "Create/edit/delete own entries",
278
278
  "auth.acl.features.staff.timesheets.projects.manage": "Manage time projects",
279
279
  "auth.acl.features.staff.timesheets.projects.view": "View time projects",
280
+ "auth.acl.features.staff.timesheets.rates.view": "요율 및 비용 보기",
281
+ "auth.acl.features.staff.timesheets.reports.manage": "고객 리포트 생성/편집",
282
+ "auth.acl.features.staff.timesheets.reports.unlock": "보고된 항목 잠금 해제",
283
+ "auth.acl.features.staff.timesheets.reports.view": "고객 리포트 보기",
284
+ "auth.acl.features.staff.timesheets.settings.manage": "시간 추적 설정 관리",
285
+ "auth.acl.features.staff.timesheets.tasks.manage": "작업 생성/편집",
286
+ "auth.acl.features.staff.timesheets.tasks.view": "작업 보기",
280
287
  "auth.acl.features.staff.timesheets.view": "View own time entries",
281
288
  "auth.acl.features.staff.view": "View employees",
282
289
  "auth.acl.features.storage_providers.manage": "Manage storage providers",
@@ -277,6 +277,13 @@
277
277
  "auth.acl.features.staff.timesheets.manage_own": "Twórz, edytuj i usuwaj własne wpisy",
278
278
  "auth.acl.features.staff.timesheets.projects.manage": "Zarządzaj projektami czasu pracy",
279
279
  "auth.acl.features.staff.timesheets.projects.view": "Wyświetl projekty czasu pracy",
280
+ "auth.acl.features.staff.timesheets.rates.view": "Podgląd stawek i kosztów",
281
+ "auth.acl.features.staff.timesheets.reports.manage": "Tworzenie/edycja raportów klienta",
282
+ "auth.acl.features.staff.timesheets.reports.unlock": "Odblokowanie zaraportowanych wpisów",
283
+ "auth.acl.features.staff.timesheets.reports.view": "Podgląd raportów klienta",
284
+ "auth.acl.features.staff.timesheets.settings.manage": "Zarządzanie ustawieniami śledzenia czasu",
285
+ "auth.acl.features.staff.timesheets.tasks.manage": "Tworzenie/edycja zadań",
286
+ "auth.acl.features.staff.timesheets.tasks.view": "Podgląd zadań",
280
287
  "auth.acl.features.staff.timesheets.view": "Wyświetl własne wpisy czasu pracy",
281
288
  "auth.acl.features.staff.view": "Wyświetl pracowników",
282
289
  "auth.acl.features.storage_providers.manage": "Zarządzaj dostawcami pamięci masowej",
@@ -220,6 +220,7 @@ const defaultGroupOrder = [
220
220
  'wms.nav.group',
221
221
  'resources.nav.group',
222
222
  'staff.nav.group',
223
+ 'staff.time_tracking.nav.group',
223
224
  'entities.nav.group',
224
225
  'directory.nav.group',
225
226
  'attachments.nav.group',
@@ -0,0 +1,79 @@
1
+ /**
2
+ * Merging every enabled module's `setup.defaultCustomerRoleFeatures` into the
3
+ * `CustomerRoleAcl` rows a tenant already has.
4
+ *
5
+ * The staff side of this has always had two entry points: tenant bootstrap, and
6
+ * `mercato auth sync-role-acls` for tenants that already existed when a module
7
+ * declared a new feature. The customer side only ever ran at bootstrap, so a
8
+ * portal feature shipped after a tenant was created never reached the `Buyer` and
9
+ * `Viewer` roles that tenant is actually using — the page was simply invisible to
10
+ * every real customer until somebody granted it by hand. It lives here rather than
11
+ * in `setup.ts` so both entry points can call the same merge.
12
+ *
13
+ * Additive and idempotent: a feature is only ever added, never removed, and a role
14
+ * or ACL row that does not exist is skipped rather than created — seeding roles is
15
+ * `seedDefaultRoles`' job.
16
+ */
17
+
18
+ import type { EntityManager } from '@mikro-orm/postgresql'
19
+ import type { Module } from '@open-mercato/shared/modules/registry'
20
+ import {
21
+ CustomerRole,
22
+ CustomerRoleAcl,
23
+ } from '@open-mercato/core/modules/customer_accounts/data/entities'
24
+
25
+ export type CustomerRoleAclSyncResult = {
26
+ /** Role slugs whose ACL row gained at least one feature. */
27
+ updatedRoleSlugs: string[]
28
+ /** Features added, across every role, deduplicated — what to report to an operator. */
29
+ addedFeatures: string[]
30
+ }
31
+
32
+ export async function ensureDefaultCustomerRoleAcls(
33
+ em: EntityManager,
34
+ tenantId: string,
35
+ modules: Module[],
36
+ ): Promise<CustomerRoleAclSyncResult> {
37
+ const featuresByRole: Record<string, string[]> = {}
38
+
39
+ for (const mod of modules) {
40
+ const customerRoleFeatures = mod.setup?.defaultCustomerRoleFeatures
41
+ if (!customerRoleFeatures) continue
42
+ for (const [roleSlug, features] of Object.entries(customerRoleFeatures)) {
43
+ if (!features || !features.length) continue
44
+ if (!featuresByRole[roleSlug]) featuresByRole[roleSlug] = []
45
+ featuresByRole[roleSlug].push(...features)
46
+ }
47
+ }
48
+
49
+ const result: CustomerRoleAclSyncResult = { updatedRoleSlugs: [], addedFeatures: [] }
50
+ const roleSlugs = Object.keys(featuresByRole)
51
+ if (!roleSlugs.length) return result
52
+
53
+ const added = new Set<string>()
54
+ for (const roleSlug of roleSlugs) {
55
+ const role = await em.findOne(CustomerRole, { tenantId, slug: roleSlug, deletedAt: null })
56
+ if (!role) continue
57
+
58
+ const acl = await em.findOne(CustomerRoleAcl, { role: role.id as any, tenantId })
59
+ if (!acl) continue
60
+
61
+ const currentFeatures = Array.isArray(acl.featuresJson) ? acl.featuresJson : []
62
+ const merged = Array.from(new Set([...currentFeatures, ...featuresByRole[roleSlug]]))
63
+ const changed =
64
+ merged.length !== currentFeatures.length ||
65
+ merged.some((value, index) => value !== currentFeatures[index])
66
+ if (!changed) continue
67
+
68
+ const known = new Set(currentFeatures)
69
+ acl.featuresJson = merged
70
+ em.persist(acl)
71
+ result.updatedRoleSlugs.push(roleSlug)
72
+ for (const feature of merged) {
73
+ if (!known.has(feature)) added.add(feature)
74
+ }
75
+ }
76
+ result.addedFeatures = Array.from(added)
77
+ await em.flush()
78
+ return result
79
+ }
@@ -1,7 +1,7 @@
1
1
  import type { ModuleSetupConfig, DefaultCustomerRoleFeatures } from '@open-mercato/shared/modules/setup'
2
2
  import type { EntityManager } from '@mikro-orm/postgresql'
3
- import type { Module } from '@open-mercato/shared/modules/registry'
4
3
  import { hash } from 'bcryptjs'
4
+ import { ensureDefaultCustomerRoleAcls } from '@open-mercato/core/modules/customer_accounts/lib/customerRoleAcls'
5
5
  import { hashForLookup } from '@open-mercato/shared/lib/encryption/aes'
6
6
  import { EXAMPLE_PORTAL_ACCOUNTS } from '@open-mercato/core/modules/customer_accounts/lib/exampleAccounts'
7
7
  import {
@@ -142,50 +142,6 @@ const DEFAULT_CUSTOMER_ROLE_FEATURES = Object.fromEntries(
142
142
  DEFAULT_ROLES.map((role) => [role.slug, [...role.acl.features]]),
143
143
  )
144
144
 
145
- /**
146
- * Collect defaultCustomerRoleFeatures from all enabled modules and merge
147
- * them into the corresponding CustomerRoleAcl records.
148
- */
149
- async function ensureDefaultCustomerRoleAcls(
150
- em: EntityManager,
151
- tenantId: string,
152
- modules: Module[],
153
- ): Promise<void> {
154
- const featuresByRole: Record<string, string[]> = {}
155
-
156
- for (const mod of modules) {
157
- const customerRoleFeatures = mod.setup?.defaultCustomerRoleFeatures
158
- if (!customerRoleFeatures) continue
159
- for (const [roleSlug, features] of Object.entries(customerRoleFeatures)) {
160
- if (!features || !features.length) continue
161
- if (!featuresByRole[roleSlug]) featuresByRole[roleSlug] = []
162
- featuresByRole[roleSlug].push(...features)
163
- }
164
- }
165
-
166
- const roleSlugs = Object.keys(featuresByRole)
167
- if (!roleSlugs.length) return
168
-
169
- for (const roleSlug of roleSlugs) {
170
- const role = await em.findOne(CustomerRole, { tenantId, slug: roleSlug, deletedAt: null })
171
- if (!role) continue
172
-
173
- const acl = await em.findOne(CustomerRoleAcl, { role: role.id as any, tenantId })
174
- if (!acl) continue
175
-
176
- const currentFeatures = Array.isArray(acl.featuresJson) ? acl.featuresJson : []
177
- const merged = Array.from(new Set([...currentFeatures, ...featuresByRole[roleSlug]]))
178
- const changed =
179
- merged.length !== currentFeatures.length ||
180
- merged.some((value, index) => value !== currentFeatures[index])
181
- if (changed) {
182
- acl.featuresJson = merged
183
- em.persist(acl)
184
- }
185
- }
186
- await em.flush()
187
- }
188
-
189
145
  async function seedDefaultRoles(em: EntityManager, scope: SeedScope): Promise<void> {
190
146
  for (const roleDef of DEFAULT_ROLES) {
191
147
  const existing = await em.findOne(CustomerRole, {