@open-mercato/core 0.7.1-develop.7178.1.ab93fbaf4e → 0.7.1-develop.7180.1.9717fbbb43

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 (808) 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/data_sync/api/options.js +2 -0
  41. package/dist/modules/data_sync/api/options.js.map +2 -2
  42. package/dist/modules/data_sync/backend/data-sync/page.js +39 -17
  43. package/dist/modules/data_sync/backend/data-sync/page.js.map +2 -2
  44. package/dist/modules/data_sync/lib/start-controls.js +42 -0
  45. package/dist/modules/data_sync/lib/start-controls.js.map +7 -0
  46. package/dist/modules/staff/acl.js +9 -1
  47. package/dist/modules/staff/acl.js.map +2 -2
  48. package/dist/modules/staff/ai-agents.js +142 -0
  49. package/dist/modules/staff/ai-agents.js.map +7 -0
  50. package/dist/modules/staff/ai-tools/time-tracking-pack.js +348 -0
  51. package/dist/modules/staff/ai-tools/time-tracking-pack.js.map +7 -0
  52. package/dist/modules/staff/ai-tools/types.js +54 -0
  53. package/dist/modules/staff/ai-tools/types.js.map +7 -0
  54. package/dist/modules/staff/ai-tools.js +8 -0
  55. package/dist/modules/staff/ai-tools.js.map +7 -0
  56. package/dist/modules/staff/analytics.js +84 -1
  57. package/dist/modules/staff/analytics.js.map +2 -2
  58. package/dist/modules/staff/api/guards.js +37 -3
  59. package/dist/modules/staff/api/guards.js.map +2 -2
  60. package/dist/modules/staff/api/leave-requests/accept/route.js +1 -3
  61. package/dist/modules/staff/api/leave-requests/accept/route.js.map +2 -2
  62. package/dist/modules/staff/api/leave-requests/reject/route.js +1 -3
  63. package/dist/modules/staff/api/leave-requests/reject/route.js.map +2 -2
  64. package/dist/modules/staff/api/portal/time-reports/[id]/route.js +131 -0
  65. package/dist/modules/staff/api/portal/time-reports/[id]/route.js.map +7 -0
  66. package/dist/modules/staff/api/portal/time-reports/route.js +179 -0
  67. package/dist/modules/staff/api/portal/time-reports/route.js.map +7 -0
  68. package/dist/modules/staff/api/team-members/self/route.js +1 -3
  69. package/dist/modules/staff/api/team-members/self/route.js.map +2 -2
  70. package/dist/modules/staff/api/team-members/tags/assign/route.js +1 -3
  71. package/dist/modules/staff/api/team-members/tags/assign/route.js.map +2 -2
  72. package/dist/modules/staff/api/team-members/tags/unassign/route.js +1 -3
  73. package/dist/modules/staff/api/team-members/tags/unassign/route.js.map +2 -2
  74. package/dist/modules/staff/api/timesheets/_shared/withTimesheetInterceptors.js +174 -0
  75. package/dist/modules/staff/api/timesheets/_shared/withTimesheetInterceptors.js.map +7 -0
  76. package/dist/modules/staff/api/timesheets/access-requests/route.js +226 -0
  77. package/dist/modules/staff/api/timesheets/access-requests/route.js.map +7 -0
  78. package/dist/modules/staff/api/timesheets/my-projects/[projectId]/route.js +15 -8
  79. package/dist/modules/staff/api/timesheets/my-projects/[projectId]/route.js.map +2 -2
  80. package/dist/modules/staff/api/timesheets/my-projects/route.js +13 -1
  81. package/dist/modules/staff/api/timesheets/my-projects/route.js.map +2 -2
  82. package/dist/modules/staff/api/timesheets/my-work/myWorkAggregate.js +42 -0
  83. package/dist/modules/staff/api/timesheets/my-work/myWorkAggregate.js.map +7 -0
  84. package/dist/modules/staff/api/timesheets/my-work/route.js +383 -0
  85. package/dist/modules/staff/api/timesheets/my-work/route.js.map +7 -0
  86. package/dist/modules/staff/api/timesheets/projects/kpis/route.js +14 -2
  87. package/dist/modules/staff/api/timesheets/projects/kpis/route.js.map +2 -2
  88. package/dist/modules/staff/api/timesheets/reports/[id]/close/route.js +168 -0
  89. package/dist/modules/staff/api/timesheets/reports/[id]/close/route.js.map +7 -0
  90. package/dist/modules/staff/api/timesheets/reports/[id]/export/route.js +246 -0
  91. package/dist/modules/staff/api/timesheets/reports/[id]/export/route.js.map +7 -0
  92. package/dist/modules/staff/api/timesheets/reports/[id]/sheet/route.js +183 -0
  93. package/dist/modules/staff/api/timesheets/reports/[id]/sheet/route.js.map +7 -0
  94. package/dist/modules/staff/api/timesheets/reports/[id]/unlock/route.js +164 -0
  95. package/dist/modules/staff/api/timesheets/reports/[id]/unlock/route.js.map +7 -0
  96. package/dist/modules/staff/api/timesheets/reports/preview/route.js +360 -0
  97. package/dist/modules/staff/api/timesheets/reports/preview/route.js.map +7 -0
  98. package/dist/modules/staff/api/timesheets/reports/route.js +316 -0
  99. package/dist/modules/staff/api/timesheets/reports/route.js.map +7 -0
  100. package/dist/modules/staff/api/timesheets/reports/shared.js +63 -0
  101. package/dist/modules/staff/api/timesheets/reports/shared.js.map +7 -0
  102. package/dist/modules/staff/api/timesheets/settings/reapply-rounding/route.js +164 -0
  103. package/dist/modules/staff/api/timesheets/settings/reapply-rounding/route.js.map +7 -0
  104. package/dist/modules/staff/api/timesheets/settings/rounding-impact/route.js +168 -0
  105. package/dist/modules/staff/api/timesheets/settings/rounding-impact/route.js.map +7 -0
  106. package/dist/modules/staff/api/timesheets/settings/route.js +199 -0
  107. package/dist/modules/staff/api/timesheets/settings/route.js.map +7 -0
  108. package/dist/modules/staff/api/timesheets/tags/access.js +76 -0
  109. package/dist/modules/staff/api/timesheets/tags/access.js.map +7 -0
  110. package/dist/modules/staff/api/timesheets/tags/entry-assignments/route.js +235 -0
  111. package/dist/modules/staff/api/timesheets/tags/entry-assignments/route.js.map +7 -0
  112. package/dist/modules/staff/api/timesheets/tags/route.js +160 -0
  113. package/dist/modules/staff/api/timesheets/tags/route.js.map +7 -0
  114. package/dist/modules/staff/api/timesheets/tags/task-assignments/route.js +233 -0
  115. package/dist/modules/staff/api/timesheets/tags/task-assignments/route.js.map +7 -0
  116. package/dist/modules/staff/api/timesheets/task-statuses/route.js +188 -0
  117. package/dist/modules/staff/api/timesheets/task-statuses/route.js.map +7 -0
  118. package/dist/modules/staff/api/timesheets/tasks/[id]/comments/route.js +399 -0
  119. package/dist/modules/staff/api/timesheets/tasks/[id]/comments/route.js.map +7 -0
  120. package/dist/modules/staff/api/timesheets/tasks/[id]/status/route.js +210 -0
  121. package/dist/modules/staff/api/timesheets/tasks/[id]/status/route.js.map +7 -0
  122. package/dist/modules/staff/api/timesheets/tasks/route.js +333 -0
  123. package/dist/modules/staff/api/timesheets/tasks/route.js.map +7 -0
  124. package/dist/modules/staff/api/timesheets/time-entries/[id]/duplicate/route.js +228 -0
  125. package/dist/modules/staff/api/timesheets/time-entries/[id]/duplicate/route.js.map +7 -0
  126. package/dist/modules/staff/api/timesheets/time-entries/[id]/segments/[segmentId]/route.js +29 -10
  127. package/dist/modules/staff/api/timesheets/time-entries/[id]/segments/[segmentId]/route.js.map +2 -2
  128. package/dist/modules/staff/api/timesheets/time-entries/[id]/segments/route.js +31 -18
  129. package/dist/modules/staff/api/timesheets/time-entries/[id]/segments/route.js.map +2 -2
  130. package/dist/modules/staff/api/timesheets/time-entries/[id]/timer-start/route.js +21 -7
  131. package/dist/modules/staff/api/timesheets/time-entries/[id]/timer-start/route.js.map +2 -2
  132. package/dist/modules/staff/api/timesheets/time-entries/[id]/timer-stop/route.js +27 -7
  133. package/dist/modules/staff/api/timesheets/time-entries/[id]/timer-stop/route.js.map +2 -2
  134. package/dist/modules/staff/api/timesheets/time-entries/bulk/route.js +215 -32
  135. package/dist/modules/staff/api/timesheets/time-entries/bulk/route.js.map +2 -2
  136. package/dist/modules/staff/api/timesheets/time-entries/copy-day/route.js +378 -0
  137. package/dist/modules/staff/api/timesheets/time-entries/copy-day/route.js.map +7 -0
  138. package/dist/modules/staff/api/timesheets/time-entries/overlaps/route.js +340 -0
  139. package/dist/modules/staff/api/timesheets/time-entries/overlaps/route.js.map +7 -0
  140. package/dist/modules/staff/api/timesheets/time-entries/route.js +238 -26
  141. package/dist/modules/staff/api/timesheets/time-entries/route.js.map +2 -2
  142. package/dist/modules/staff/api/timesheets/time-entries/start-timer/route.js +23 -8
  143. package/dist/modules/staff/api/timesheets/time-entries/start-timer/route.js.map +2 -2
  144. package/dist/modules/staff/api/timesheets/time-projects/[id]/change-currency/route.js +209 -0
  145. package/dist/modules/staff/api/timesheets/time-projects/[id]/change-currency/route.js.map +7 -0
  146. package/dist/modules/staff/api/timesheets/time-projects/[id]/employees/route.js +59 -2
  147. package/dist/modules/staff/api/timesheets/time-projects/[id]/employees/route.js.map +2 -2
  148. package/dist/modules/staff/api/timesheets/time-projects/route.js +264 -22
  149. package/dist/modules/staff/api/timesheets/time-projects/route.js.map +2 -2
  150. package/dist/modules/staff/backend/staff/time-tracking/board/page.js +110 -0
  151. package/dist/modules/staff/backend/staff/time-tracking/board/page.js.map +7 -0
  152. package/dist/modules/staff/backend/staff/time-tracking/board/page.meta.js +18 -0
  153. package/dist/modules/staff/backend/staff/time-tracking/board/page.meta.js.map +7 -0
  154. package/dist/modules/staff/backend/staff/time-tracking/entries/page.js +981 -0
  155. package/dist/modules/staff/backend/staff/time-tracking/entries/page.js.map +7 -0
  156. package/dist/modules/staff/backend/staff/time-tracking/entries/page.meta.js +18 -0
  157. package/dist/modules/staff/backend/staff/time-tracking/entries/page.meta.js.map +7 -0
  158. package/dist/modules/staff/backend/staff/time-tracking/page.js +583 -0
  159. package/dist/modules/staff/backend/staff/time-tracking/page.js.map +7 -0
  160. package/dist/modules/staff/backend/staff/time-tracking/page.meta.js +15 -0
  161. package/dist/modules/staff/backend/staff/time-tracking/page.meta.js.map +7 -0
  162. package/dist/modules/staff/backend/staff/time-tracking/projects/[id]/board/page.js +65 -0
  163. package/dist/modules/staff/backend/staff/time-tracking/projects/[id]/board/page.js.map +7 -0
  164. package/dist/modules/staff/backend/staff/time-tracking/projects/[id]/board/page.meta.js +16 -0
  165. package/dist/modules/staff/backend/staff/time-tracking/projects/[id]/board/page.meta.js.map +7 -0
  166. package/dist/modules/staff/backend/staff/time-tracking/projects/[id]/edit/page.js +229 -0
  167. package/dist/modules/staff/backend/staff/time-tracking/projects/[id]/edit/page.js.map +7 -0
  168. package/dist/modules/staff/backend/staff/time-tracking/projects/[id]/edit/page.meta.js +16 -0
  169. package/dist/modules/staff/backend/staff/time-tracking/projects/[id]/edit/page.meta.js.map +7 -0
  170. package/dist/modules/staff/backend/staff/time-tracking/projects/[id]/page.js +1014 -0
  171. package/dist/modules/staff/backend/staff/time-tracking/projects/[id]/page.js.map +7 -0
  172. package/dist/modules/staff/backend/staff/time-tracking/projects/[id]/page.meta.js +16 -0
  173. package/dist/modules/staff/backend/staff/time-tracking/projects/[id]/page.meta.js.map +7 -0
  174. package/dist/modules/staff/backend/staff/time-tracking/projects/create/page.js +97 -0
  175. package/dist/modules/staff/backend/staff/time-tracking/projects/create/page.js.map +7 -0
  176. package/dist/modules/staff/backend/staff/time-tracking/projects/create/page.meta.js +16 -0
  177. package/dist/modules/staff/backend/staff/time-tracking/projects/create/page.meta.js.map +7 -0
  178. package/dist/modules/staff/backend/staff/time-tracking/projects/page.js +1040 -0
  179. package/dist/modules/staff/backend/staff/time-tracking/projects/page.js.map +7 -0
  180. package/dist/modules/staff/backend/staff/time-tracking/projects/page.meta.js +19 -0
  181. package/dist/modules/staff/backend/staff/time-tracking/projects/page.meta.js.map +7 -0
  182. package/dist/modules/staff/backend/staff/time-tracking/projects/projectFormConfig.js +353 -0
  183. package/dist/modules/staff/backend/staff/time-tracking/projects/projectFormConfig.js.map +7 -0
  184. package/dist/modules/staff/backend/staff/time-tracking/reports/[id]/page.js +457 -0
  185. package/dist/modules/staff/backend/staff/time-tracking/reports/[id]/page.js.map +7 -0
  186. package/dist/modules/staff/backend/staff/time-tracking/reports/[id]/page.meta.js +16 -0
  187. package/dist/modules/staff/backend/staff/time-tracking/reports/[id]/page.meta.js.map +7 -0
  188. package/dist/modules/staff/backend/staff/time-tracking/reports/create/page.js +697 -0
  189. package/dist/modules/staff/backend/staff/time-tracking/reports/create/page.js.map +7 -0
  190. package/dist/modules/staff/backend/staff/time-tracking/reports/create/page.meta.js +16 -0
  191. package/dist/modules/staff/backend/staff/time-tracking/reports/create/page.meta.js.map +7 -0
  192. package/dist/modules/staff/backend/staff/time-tracking/reports/page.js +174 -0
  193. package/dist/modules/staff/backend/staff/time-tracking/reports/page.js.map +7 -0
  194. package/dist/modules/staff/backend/staff/time-tracking/reports/page.meta.js +18 -0
  195. package/dist/modules/staff/backend/staff/time-tracking/reports/page.meta.js.map +7 -0
  196. package/dist/modules/staff/backend/staff/time-tracking/settings/page.js +546 -0
  197. package/dist/modules/staff/backend/staff/time-tracking/settings/page.js.map +7 -0
  198. package/dist/modules/staff/backend/staff/time-tracking/settings/page.meta.js +18 -0
  199. package/dist/modules/staff/backend/staff/time-tracking/settings/page.meta.js.map +7 -0
  200. package/dist/modules/staff/backend/staff/time-tracking/timesheet/GridView.js +710 -0
  201. package/dist/modules/staff/backend/staff/time-tracking/timesheet/GridView.js.map +7 -0
  202. package/dist/modules/staff/backend/staff/time-tracking/timesheet/page.js +646 -0
  203. package/dist/modules/staff/backend/staff/time-tracking/timesheet/page.js.map +7 -0
  204. package/dist/modules/staff/backend/staff/time-tracking/timesheet/page.meta.js +18 -0
  205. package/dist/modules/staff/backend/staff/time-tracking/timesheet/page.meta.js.map +7 -0
  206. package/dist/modules/staff/backend/staff/timesheets/page.js +4 -793
  207. package/dist/modules/staff/backend/staff/timesheets/page.js.map +2 -2
  208. package/dist/modules/staff/backend/staff/timesheets/page.meta.js +2 -7
  209. package/dist/modules/staff/backend/staff/timesheets/page.meta.js.map +2 -2
  210. package/dist/modules/staff/backend/staff/timesheets/projects/[id]/edit/page.js +5 -136
  211. package/dist/modules/staff/backend/staff/timesheets/projects/[id]/edit/page.js.map +2 -2
  212. package/dist/modules/staff/backend/staff/timesheets/projects/[id]/edit/page.meta.js +1 -7
  213. package/dist/modules/staff/backend/staff/timesheets/projects/[id]/edit/page.meta.js.map +2 -2
  214. package/dist/modules/staff/backend/staff/timesheets/projects/[id]/page.js +5 -445
  215. package/dist/modules/staff/backend/staff/timesheets/projects/[id]/page.js.map +3 -3
  216. package/dist/modules/staff/backend/staff/timesheets/projects/[id]/page.meta.js +1 -7
  217. package/dist/modules/staff/backend/staff/timesheets/projects/[id]/page.meta.js.map +2 -2
  218. package/dist/modules/staff/backend/staff/timesheets/projects/create/page.js +4 -76
  219. package/dist/modules/staff/backend/staff/timesheets/projects/create/page.js.map +2 -2
  220. package/dist/modules/staff/backend/staff/timesheets/projects/create/page.meta.js +1 -7
  221. package/dist/modules/staff/backend/staff/timesheets/projects/create/page.meta.js.map +2 -2
  222. package/dist/modules/staff/backend/staff/timesheets/projects/page.js +4 -613
  223. package/dist/modules/staff/backend/staff/timesheets/projects/page.js.map +2 -2
  224. package/dist/modules/staff/backend/staff/timesheets/projects/page.meta.js +2 -17
  225. package/dist/modules/staff/backend/staff/timesheets/projects/page.meta.js.map +2 -2
  226. package/dist/modules/staff/ce.js +40 -0
  227. package/dist/modules/staff/ce.js.map +2 -2
  228. package/dist/modules/staff/cli.js +166 -1
  229. package/dist/modules/staff/cli.js.map +2 -2
  230. package/dist/modules/staff/commands/index.js +5 -0
  231. package/dist/modules/staff/commands/index.js.map +2 -2
  232. package/dist/modules/staff/commands/timesheets-entries.js +569 -21
  233. package/dist/modules/staff/commands/timesheets-entries.js.map +3 -3
  234. package/dist/modules/staff/commands/timesheets-projects.js +450 -7
  235. package/dist/modules/staff/commands/timesheets-projects.js.map +2 -2
  236. package/dist/modules/staff/commands/timesheets-reports.js +1036 -0
  237. package/dist/modules/staff/commands/timesheets-reports.js.map +7 -0
  238. package/dist/modules/staff/commands/timesheets-tags.js +1015 -0
  239. package/dist/modules/staff/commands/timesheets-tags.js.map +7 -0
  240. package/dist/modules/staff/commands/timesheets-task-comments.js +438 -0
  241. package/dist/modules/staff/commands/timesheets-task-comments.js.map +7 -0
  242. package/dist/modules/staff/commands/timesheets-task-statuses.js +723 -0
  243. package/dist/modules/staff/commands/timesheets-task-statuses.js.map +7 -0
  244. package/dist/modules/staff/commands/timesheets-tasks.js +834 -0
  245. package/dist/modules/staff/commands/timesheets-tasks.js.map +7 -0
  246. package/dist/modules/staff/data/enrichers.js +426 -12
  247. package/dist/modules/staff/data/enrichers.js.map +2 -2
  248. package/dist/modules/staff/data/entities.js +552 -3
  249. package/dist/modules/staff/data/entities.js.map +2 -2
  250. package/dist/modules/staff/data/extensions.js +41 -0
  251. package/dist/modules/staff/data/extensions.js.map +7 -0
  252. package/dist/modules/staff/data/validators.js +254 -9
  253. package/dist/modules/staff/data/validators.js.map +2 -2
  254. package/dist/modules/staff/di.js +42 -1
  255. package/dist/modules/staff/di.js.map +2 -2
  256. package/dist/modules/staff/events.js +84 -6
  257. package/dist/modules/staff/events.js.map +2 -2
  258. package/dist/modules/staff/events.payloads.js +158 -0
  259. package/dist/modules/staff/events.payloads.js.map +7 -0
  260. package/dist/modules/staff/extension-points.js +261 -0
  261. package/dist/modules/staff/extension-points.js.map +7 -0
  262. package/dist/modules/staff/frontend/[orgSlug]/portal/time-reports/[id]/page.js +138 -0
  263. package/dist/modules/staff/frontend/[orgSlug]/portal/time-reports/[id]/page.js.map +7 -0
  264. package/dist/modules/staff/frontend/[orgSlug]/portal/time-reports/[id]/page.meta.js +12 -0
  265. package/dist/modules/staff/frontend/[orgSlug]/portal/time-reports/[id]/page.meta.js.map +7 -0
  266. package/dist/modules/staff/frontend/[orgSlug]/portal/time-reports/page.js +133 -0
  267. package/dist/modules/staff/frontend/[orgSlug]/portal/time-reports/page.js.map +7 -0
  268. package/dist/modules/staff/frontend/[orgSlug]/portal/time-reports/page.meta.js +19 -0
  269. package/dist/modules/staff/frontend/[orgSlug]/portal/time-reports/page.meta.js.map +7 -0
  270. package/dist/modules/staff/lib/crud.js +11 -1
  271. package/dist/modules/staff/lib/crud.js.map +2 -2
  272. package/dist/modules/staff/lib/time-tracking/access.js +92 -0
  273. package/dist/modules/staff/lib/time-tracking/access.js.map +7 -0
  274. package/dist/modules/staff/lib/time-tracking/billability.js +39 -0
  275. package/dist/modules/staff/lib/time-tracking/billability.js.map +7 -0
  276. package/dist/modules/staff/lib/time-tracking/capacity.js +68 -0
  277. package/dist/modules/staff/lib/time-tracking/capacity.js.map +7 -0
  278. package/dist/modules/staff/lib/time-tracking/componentContracts.js +15 -0
  279. package/dist/modules/staff/lib/time-tracking/componentContracts.js.map +7 -0
  280. package/dist/modules/staff/lib/time-tracking/cost.js +82 -0
  281. package/dist/modules/staff/lib/time-tracking/cost.js.map +7 -0
  282. package/dist/modules/staff/lib/time-tracking/duration.js +55 -0
  283. package/dist/modules/staff/lib/time-tracking/duration.js.map +7 -0
  284. package/dist/modules/staff/lib/time-tracking/featureAccess.js +41 -0
  285. package/dist/modules/staff/lib/time-tracking/featureAccess.js.map +7 -0
  286. package/dist/modules/staff/lib/time-tracking/interval.js +72 -0
  287. package/dist/modules/staff/lib/time-tracking/interval.js.map +7 -0
  288. package/dist/modules/staff/lib/time-tracking/migrateProjectCodes.js +88 -0
  289. package/dist/modules/staff/lib/time-tracking/migrateProjectCodes.js.map +7 -0
  290. package/dist/modules/staff/lib/time-tracking/moneyVisibility.js +10 -0
  291. package/dist/modules/staff/lib/time-tracking/moneyVisibility.js.map +7 -0
  292. package/dist/modules/staff/lib/time-tracking/overlap.js +87 -0
  293. package/dist/modules/staff/lib/time-tracking/overlap.js.map +7 -0
  294. package/dist/modules/staff/lib/time-tracking/portalRecipients.js +27 -0
  295. package/dist/modules/staff/lib/time-tracking/portalRecipients.js.map +7 -0
  296. package/dist/modules/staff/lib/time-tracking/portalReports.js +16 -0
  297. package/dist/modules/staff/lib/time-tracking/portalReports.js.map +7 -0
  298. package/dist/modules/staff/lib/time-tracking/projectCode.js +135 -0
  299. package/dist/modules/staff/lib/time-tracking/projectCode.js.map +7 -0
  300. package/dist/modules/staff/lib/time-tracking/reapplyRounding.js +187 -0
  301. package/dist/modules/staff/lib/time-tracking/reapplyRounding.js.map +7 -0
  302. package/dist/modules/staff/lib/time-tracking/recalculationRunner.js +80 -0
  303. package/dist/modules/staff/lib/time-tracking/recalculationRunner.js.map +7 -0
  304. package/dist/modules/staff/lib/time-tracking/recalculations.js +56 -0
  305. package/dist/modules/staff/lib/time-tracking/recalculations.js.map +7 -0
  306. package/dist/modules/staff/lib/time-tracking/registries/invoke.js +63 -0
  307. package/dist/modules/staff/lib/time-tracking/registries/invoke.js.map +7 -0
  308. package/dist/modules/staff/lib/time-tracking/registries/registry.js +62 -0
  309. package/dist/modules/staff/lib/time-tracking/registries/registry.js.map +7 -0
  310. package/dist/modules/staff/lib/time-tracking/registries/scope.js +21 -0
  311. package/dist/modules/staff/lib/time-tracking/registries/scope.js.map +7 -0
  312. package/dist/modules/staff/lib/time-tracking/rollup.js +34 -0
  313. package/dist/modules/staff/lib/time-tracking/rollup.js.map +7 -0
  314. package/dist/modules/staff/lib/time-tracking/rounding.js +66 -0
  315. package/dist/modules/staff/lib/time-tracking/rounding.js.map +7 -0
  316. package/dist/modules/staff/lib/time-tracking/roundingImpact.js +39 -0
  317. package/dist/modules/staff/lib/time-tracking/roundingImpact.js.map +7 -0
  318. package/dist/modules/staff/lib/time-tracking/settingKeys.js +214 -0
  319. package/dist/modules/staff/lib/time-tracking/settingKeys.js.map +7 -0
  320. package/dist/modules/staff/lib/time-tracking/settings.js +87 -0
  321. package/dist/modules/staff/lib/time-tracking/settings.js.map +7 -0
  322. package/dist/modules/staff/lib/time-tracking/sqlInClause.js +9 -0
  323. package/dist/modules/staff/lib/time-tracking/sqlInClause.js.map +7 -0
  324. package/dist/modules/staff/lib/time-tracking/timeEntrySources.js +48 -0
  325. package/dist/modules/staff/lib/time-tracking/timeEntrySources.js.map +7 -0
  326. package/dist/modules/staff/lib/time-tracking-ui/BoardFilterChips.js +283 -0
  327. package/dist/modules/staff/lib/time-tracking-ui/BoardFilterChips.js.map +7 -0
  328. package/dist/modules/staff/lib/time-tracking-ui/CustomerPicker.js +324 -0
  329. package/dist/modules/staff/lib/time-tracking-ui/CustomerPicker.js.map +7 -0
  330. package/dist/modules/staff/lib/time-tracking-ui/DurationInput.js +121 -0
  331. package/dist/modules/staff/lib/time-tracking-ui/DurationInput.js.map +7 -0
  332. package/dist/modules/staff/lib/time-tracking-ui/EntryDetailsFields.js +188 -0
  333. package/dist/modules/staff/lib/time-tracking-ui/EntryDetailsFields.js.map +7 -0
  334. package/dist/modules/staff/lib/time-tracking-ui/EntryFilterBar.js +89 -0
  335. package/dist/modules/staff/lib/time-tracking-ui/EntryFilterBar.js.map +7 -0
  336. package/dist/modules/staff/lib/time-tracking-ui/KanbanBoard.js +855 -0
  337. package/dist/modules/staff/lib/time-tracking-ui/KanbanBoard.js.map +7 -0
  338. package/dist/modules/staff/lib/time-tracking-ui/KanbanCard.js +360 -0
  339. package/dist/modules/staff/lib/time-tracking-ui/KanbanCard.js.map +7 -0
  340. package/dist/modules/staff/lib/time-tracking-ui/KanbanColumn.js +259 -0
  341. package/dist/modules/staff/lib/time-tracking-ui/KanbanColumn.js.map +7 -0
  342. package/dist/modules/staff/lib/time-tracking-ui/NewTaskDialog.js +238 -0
  343. package/dist/modules/staff/lib/time-tracking-ui/NewTaskDialog.js.map +7 -0
  344. package/dist/modules/staff/lib/time-tracking-ui/NoProjectAccess.js +130 -0
  345. package/dist/modules/staff/lib/time-tracking-ui/NoProjectAccess.js.map +7 -0
  346. package/dist/modules/staff/lib/time-tracking-ui/PeriodSelector.js +98 -0
  347. package/dist/modules/staff/lib/time-tracking-ui/PeriodSelector.js.map +7 -0
  348. package/dist/modules/staff/lib/time-tracking-ui/PhasePlaceholder.js +27 -0
  349. package/dist/modules/staff/lib/time-tracking-ui/PhasePlaceholder.js.map +7 -0
  350. package/dist/modules/staff/lib/time-tracking-ui/ProjectCodeField.js +166 -0
  351. package/dist/modules/staff/lib/time-tracking-ui/ProjectCodeField.js.map +7 -0
  352. package/dist/modules/staff/lib/time-tracking-ui/ProjectCurrencyField.js +295 -0
  353. package/dist/modules/staff/lib/time-tracking-ui/ProjectCurrencyField.js.map +7 -0
  354. package/dist/modules/staff/lib/time-tracking-ui/ProjectFormSections.js +212 -0
  355. package/dist/modules/staff/lib/time-tracking-ui/ProjectFormSections.js.map +7 -0
  356. package/dist/modules/staff/lib/time-tracking-ui/ProjectTeamDrawer.js +729 -0
  357. package/dist/modules/staff/lib/time-tracking-ui/ProjectTeamDrawer.js.map +7 -0
  358. package/dist/modules/staff/lib/time-tracking-ui/ReportSheet.js +217 -0
  359. package/dist/modules/staff/lib/time-tracking-ui/ReportSheet.js.map +7 -0
  360. package/dist/modules/staff/lib/time-tracking-ui/TagPicker.js +158 -0
  361. package/dist/modules/staff/lib/time-tracking-ui/TagPicker.js.map +7 -0
  362. package/dist/modules/staff/lib/time-tracking-ui/TaskBoardScreen.js +224 -0
  363. package/dist/modules/staff/lib/time-tracking-ui/TaskBoardScreen.js.map +7 -0
  364. package/dist/modules/staff/lib/time-tracking-ui/TaskCommentThread.js +93 -0
  365. package/dist/modules/staff/lib/time-tracking-ui/TaskCommentThread.js.map +7 -0
  366. package/dist/modules/staff/lib/time-tracking-ui/TaskDrawer.js +1196 -0
  367. package/dist/modules/staff/lib/time-tracking-ui/TaskDrawer.js.map +7 -0
  368. package/dist/modules/staff/lib/time-tracking-ui/TaskListView.js +176 -0
  369. package/dist/modules/staff/lib/time-tracking-ui/TaskListView.js.map +7 -0
  370. package/dist/modules/staff/lib/time-tracking-ui/TaskPicker.js +307 -0
  371. package/dist/modules/staff/lib/time-tracking-ui/TaskPicker.js.map +7 -0
  372. package/dist/modules/staff/lib/time-tracking-ui/TaskQuickLog.js +284 -0
  373. package/dist/modules/staff/lib/time-tracking-ui/TaskQuickLog.js.map +7 -0
  374. package/dist/modules/staff/lib/time-tracking-ui/TimeEntriesSummaryFooter.js +73 -0
  375. package/dist/modules/staff/lib/time-tracking-ui/TimeEntriesSummaryFooter.js.map +7 -0
  376. package/dist/modules/staff/lib/time-tracking-ui/TimeEntryDialog.js +1499 -0
  377. package/dist/modules/staff/lib/time-tracking-ui/TimeEntryDialog.js.map +7 -0
  378. package/dist/modules/staff/lib/time-tracking-ui/TimeEntryDurationCell.js +95 -0
  379. package/dist/modules/staff/lib/time-tracking-ui/TimeEntryDurationCell.js.map +7 -0
  380. package/dist/modules/staff/lib/time-tracking-ui/TimesheetCalendar.js +188 -0
  381. package/dist/modules/staff/lib/time-tracking-ui/TimesheetCalendar.js.map +7 -0
  382. package/dist/modules/staff/lib/time-tracking-ui/TimesheetPeriodFooter.js +61 -0
  383. package/dist/modules/staff/lib/time-tracking-ui/TimesheetPeriodFooter.js.map +7 -0
  384. package/dist/modules/staff/lib/time-tracking-ui/TimesheetViewSwitch.js +45 -0
  385. package/dist/modules/staff/lib/time-tracking-ui/TimesheetViewSwitch.js.map +7 -0
  386. package/dist/modules/staff/lib/time-tracking-ui/boardDirectory.js +176 -0
  387. package/dist/modules/staff/lib/time-tracking-ui/boardDirectory.js.map +7 -0
  388. package/dist/modules/staff/lib/time-tracking-ui/boardFilters.js +82 -0
  389. package/dist/modules/staff/lib/time-tracking-ui/boardFilters.js.map +7 -0
  390. package/dist/modules/staff/lib/time-tracking-ui/boardSummary.js +5 -0
  391. package/dist/modules/staff/lib/time-tracking-ui/boardSummary.js.map +7 -0
  392. package/dist/modules/staff/lib/time-tracking-ui/kanbanBoardData.js +152 -0
  393. package/dist/modules/staff/lib/time-tracking-ui/kanbanBoardData.js.map +7 -0
  394. package/dist/modules/staff/lib/time-tracking-ui/projectTeamAssignment.js +92 -0
  395. package/dist/modules/staff/lib/time-tracking-ui/projectTeamAssignment.js.map +7 -0
  396. package/dist/modules/staff/lib/time-tracking-ui/taskDrawerData.js +111 -0
  397. package/dist/modules/staff/lib/time-tracking-ui/taskDrawerData.js.map +7 -0
  398. package/dist/modules/staff/lib/time-tracking-ui/timeEntryDialogState.js +243 -0
  399. package/dist/modules/staff/lib/time-tracking-ui/timeEntryDialogState.js.map +7 -0
  400. package/dist/modules/staff/lib/time-tracking-ui/timeEntryListData.js +151 -0
  401. package/dist/modules/staff/lib/time-tracking-ui/timeEntryListData.js.map +7 -0
  402. package/dist/modules/staff/lib/time-tracking-ui/timeTrackingSettingsForm.js +105 -0
  403. package/dist/modules/staff/lib/time-tracking-ui/timeTrackingSettingsForm.js.map +7 -0
  404. package/dist/modules/staff/lib/time-tracking-ui/timesheetData.js +132 -0
  405. package/dist/modules/staff/lib/time-tracking-ui/timesheetData.js.map +7 -0
  406. package/dist/modules/staff/lib/time-tracking-ui/timesheetPeriod.js +205 -0
  407. package/dist/modules/staff/lib/time-tracking-ui/timesheetPeriod.js.map +7 -0
  408. package/dist/modules/staff/lib/time-tracking-ui/timesheetTargets.js +53 -0
  409. package/dist/modules/staff/lib/time-tracking-ui/timesheetTargets.js.map +7 -0
  410. package/dist/modules/staff/lib/time-tracking-ui/useBoardFilters.js +77 -0
  411. package/dist/modules/staff/lib/time-tracking-ui/useBoardFilters.js.map +7 -0
  412. package/dist/modules/staff/lib/time-tracking-ui/useTimesheetPreferences.js +151 -0
  413. package/dist/modules/staff/lib/time-tracking-ui/useTimesheetPreferences.js.map +7 -0
  414. package/dist/modules/staff/lib/timeTrackingSeeds.js +809 -0
  415. package/dist/modules/staff/lib/timeTrackingSeeds.js.map +7 -0
  416. package/dist/modules/staff/lib/timesheets/timeEntryCacheInvalidation.js +2 -3
  417. package/dist/modules/staff/lib/timesheets/timeEntryCacheInvalidation.js.map +2 -2
  418. package/dist/modules/staff/lib/timesheets/timeEntryDecoration.js +152 -0
  419. package/dist/modules/staff/lib/timesheets/timeEntryDecoration.js.map +7 -0
  420. package/dist/modules/staff/lib/timesheets-projects/budgetBurn.js +36 -0
  421. package/dist/modules/staff/lib/timesheets-projects/budgetBurn.js.map +7 -0
  422. package/dist/modules/staff/lib/timesheets-projects/budgetThreshold.js +66 -0
  423. package/dist/modules/staff/lib/timesheets-projects/budgetThreshold.js.map +7 -0
  424. package/dist/modules/staff/lib/timesheets-projects/budgetThresholdState.js +78 -0
  425. package/dist/modules/staff/lib/timesheets-projects/budgetThresholdState.js.map +7 -0
  426. package/dist/modules/staff/lib/timesheets-projects/computeProjectFinancials.js +81 -0
  427. package/dist/modules/staff/lib/timesheets-projects/computeProjectFinancials.js.map +7 -0
  428. package/dist/modules/staff/lib/timesheets-projects/reportSelection.js +44 -0
  429. package/dist/modules/staff/lib/timesheets-projects/reportSelection.js.map +7 -0
  430. package/dist/modules/staff/lib/timesheets-projects-ui/AssignMembersDialog.js +169 -0
  431. package/dist/modules/staff/lib/timesheets-projects-ui/AssignMembersDialog.js.map +7 -0
  432. package/dist/modules/staff/lib/timesheets-projects-ui/ProjectBudgetCell.js +22 -0
  433. package/dist/modules/staff/lib/timesheets-projects-ui/ProjectBudgetCell.js.map +7 -0
  434. package/dist/modules/staff/lib/timesheets-projects-ui/ProjectCard.js +51 -1
  435. package/dist/modules/staff/lib/timesheets-projects-ui/ProjectCard.js.map +2 -2
  436. package/dist/modules/staff/lib/timesheets-projects-ui/ProjectsBulkActionsBar.js +70 -0
  437. package/dist/modules/staff/lib/timesheets-projects-ui/ProjectsBulkActionsBar.js.map +7 -0
  438. package/dist/modules/staff/lib/timesheets-reports/buildReportSheet.js +63 -0
  439. package/dist/modules/staff/lib/timesheets-reports/buildReportSheet.js.map +7 -0
  440. package/dist/modules/staff/lib/timesheets-reports/loadReportData.js +170 -0
  441. package/dist/modules/staff/lib/timesheets-reports/loadReportData.js.map +7 -0
  442. package/dist/modules/staff/lib/timesheets-reports/pdf.js +205 -0
  443. package/dist/modules/staff/lib/timesheets-reports/pdf.js.map +7 -0
  444. package/dist/modules/staff/lib/timesheets-reports/reportApprovalPolicies.js +68 -0
  445. package/dist/modules/staff/lib/timesheets-reports/reportApprovalPolicies.js.map +7 -0
  446. package/dist/modules/staff/lib/timesheets-reports/reportConfigData.js +135 -0
  447. package/dist/modules/staff/lib/timesheets-reports/reportConfigData.js.map +7 -0
  448. package/dist/modules/staff/lib/timesheets-reports/reportConfigState.js +48 -0
  449. package/dist/modules/staff/lib/timesheets-reports/reportConfigState.js.map +7 -0
  450. package/dist/modules/staff/lib/timesheets-reports/reportExport.js +262 -0
  451. package/dist/modules/staff/lib/timesheets-reports/reportExport.js.map +7 -0
  452. package/dist/modules/staff/lib/timesheets-reports/reportExportFormats.js +34 -0
  453. package/dist/modules/staff/lib/timesheets-reports/reportExportFormats.js.map +7 -0
  454. package/dist/modules/staff/lib/timesheets-reports/reportGroupings.js +79 -0
  455. package/dist/modules/staff/lib/timesheets-reports/reportGroupings.js.map +7 -0
  456. package/dist/modules/staff/lib/timesheets-reports/reportLabels.js +11 -0
  457. package/dist/modules/staff/lib/timesheets-reports/reportLabels.js.map +7 -0
  458. package/dist/modules/staff/lib/timesheets-reports/reportReference.js +83 -0
  459. package/dist/modules/staff/lib/timesheets-reports/reportReference.js.map +7 -0
  460. package/dist/modules/staff/lib/timesheets-reports/reportRows.js +42 -0
  461. package/dist/modules/staff/lib/timesheets-reports/reportRows.js.map +7 -0
  462. package/dist/modules/staff/lib/timesheets-reports/reportSheetData.js +107 -0
  463. package/dist/modules/staff/lib/timesheets-reports/reportSheetData.js.map +7 -0
  464. package/dist/modules/staff/lib/timesheets-reports/reportTotals.js +289 -0
  465. package/dist/modules/staff/lib/timesheets-reports/reportTotals.js.map +7 -0
  466. package/dist/modules/staff/lib/timesheets-reports/xlsx.js +145 -0
  467. package/dist/modules/staff/lib/timesheets-reports/xlsx.js.map +7 -0
  468. package/dist/modules/staff/lib/timesheets-tasks/computeTaskRollups.js +116 -0
  469. package/dist/modules/staff/lib/timesheets-tasks/computeTaskRollups.js.map +7 -0
  470. package/dist/modules/staff/lib/timesheets-tasks/defaultStatusTemplate.js +50 -0
  471. package/dist/modules/staff/lib/timesheets-tasks/defaultStatusTemplate.js.map +7 -0
  472. package/dist/modules/staff/lib/timesheets-tasks/seedProjectStatuses.js +27 -0
  473. package/dist/modules/staff/lib/timesheets-tasks/seedProjectStatuses.js.map +7 -0
  474. package/dist/modules/staff/lib/timesheets-tasks/statusPositions.js +65 -0
  475. package/dist/modules/staff/lib/timesheets-tasks/statusPositions.js.map +7 -0
  476. package/dist/modules/staff/lib/timesheets-tasks/statusSlug.js +31 -0
  477. package/dist/modules/staff/lib/timesheets-tasks/statusSlug.js.map +7 -0
  478. package/dist/modules/staff/lib/timesheets-tasks/taskHierarchy.js +31 -0
  479. package/dist/modules/staff/lib/timesheets-tasks/taskHierarchy.js.map +7 -0
  480. package/dist/modules/staff/lib/timesheets-tasks/taskHoursTotals.js +17 -0
  481. package/dist/modules/staff/lib/timesheets-tasks/taskHoursTotals.js.map +7 -0
  482. package/dist/modules/staff/lib/timesheets-tasks/taskReference.js +51 -0
  483. package/dist/modules/staff/lib/timesheets-tasks/taskReference.js.map +7 -0
  484. package/dist/modules/staff/lib/timesheets-ui/CreateProjectDialog.js +11 -4
  485. package/dist/modules/staff/lib/timesheets-ui/CreateProjectDialog.js.map +2 -2
  486. package/dist/modules/staff/lib/timesheets-ui/ListView.js +369 -111
  487. package/dist/modules/staff/lib/timesheets-ui/ListView.js.map +2 -2
  488. package/dist/modules/staff/lib/timesheets-ui/TimerBar.js +47 -2
  489. package/dist/modules/staff/lib/timesheets-ui/TimerBar.js.map +2 -2
  490. package/dist/modules/staff/migrations/Migration20260813073131_staff.js +79 -0
  491. package/dist/modules/staff/migrations/Migration20260813073131_staff.js.map +7 -0
  492. package/dist/modules/staff/migrations/Migration20260824143357_staff.js +15 -0
  493. package/dist/modules/staff/migrations/Migration20260824143357_staff.js.map +7 -0
  494. package/dist/modules/staff/notifications.client.js +16 -0
  495. package/dist/modules/staff/notifications.client.js.map +7 -0
  496. package/dist/modules/staff/notifications.handlers.js +80 -0
  497. package/dist/modules/staff/notifications.handlers.js.map +7 -0
  498. package/dist/modules/staff/notifications.js +168 -0
  499. package/dist/modules/staff/notifications.js.map +2 -2
  500. package/dist/modules/staff/search.js +159 -1
  501. package/dist/modules/staff/search.js.map +2 -2
  502. package/dist/modules/staff/setup.js +20 -1
  503. package/dist/modules/staff/setup.js.map +2 -2
  504. package/dist/modules/staff/subscribers/time-project-access-requested-notification.js +68 -0
  505. package/dist/modules/staff/subscribers/time-project-access-requested-notification.js.map +7 -0
  506. package/dist/modules/staff/subscribers/time-project-budget-threshold-notification.js +149 -0
  507. package/dist/modules/staff/subscribers/time-project-budget-threshold-notification.js.map +7 -0
  508. package/dist/modules/staff/subscribers/time-report-approved-notification.js +78 -0
  509. package/dist/modules/staff/subscribers/time-report-approved-notification.js.map +7 -0
  510. package/dist/modules/staff/subscribers/time-report-portal-broadcast.js +78 -0
  511. package/dist/modules/staff/subscribers/time-report-portal-broadcast.js.map +7 -0
  512. package/dist/modules/staff/translations.js +4 -1
  513. package/dist/modules/staff/translations.js.map +2 -2
  514. package/dist/modules/staff/widgets/components.js +7 -0
  515. package/dist/modules/staff/widgets/components.js.map +7 -0
  516. package/dist/modules/staff/widgets/injection/timer-sidebar-indicator/widget.js +5 -4
  517. package/dist/modules/staff/widgets/injection/timer-sidebar-indicator/widget.js.map +2 -2
  518. package/dist/modules/staff/widgets/notifications/TimeProjectAccessRequestedRenderer.js +135 -0
  519. package/dist/modules/staff/widgets/notifications/TimeProjectAccessRequestedRenderer.js.map +7 -0
  520. package/dist/modules/staff/widgets/notifications/index.js +5 -0
  521. package/dist/modules/staff/widgets/notifications/index.js.map +7 -0
  522. package/dist/modules/staff/workers/timesheets-reapply-rounding.js +43 -0
  523. package/dist/modules/staff/workers/timesheets-reapply-rounding.js.map +7 -0
  524. package/generated/entities/staff_time_entry/index.ts +7 -0
  525. package/generated/entities/staff_time_entry_tag/index.ts +6 -0
  526. package/generated/entities/staff_time_project/index.ts +8 -0
  527. package/generated/entities/staff_time_report/index.ts +27 -0
  528. package/generated/entities/staff_time_report_entry/index.ts +12 -0
  529. package/generated/entities/staff_time_report_event/index.ts +9 -0
  530. package/generated/entities/staff_time_report_project/index.ts +6 -0
  531. package/generated/entities/staff_time_tag/index.ts +9 -0
  532. package/generated/entities/staff_time_task/index.ts +17 -0
  533. package/generated/entities/staff_time_task_comment/index.ts +9 -0
  534. package/generated/entities/staff_time_task_status/index.ts +13 -0
  535. package/generated/entities/staff_time_task_tag/index.ts +6 -0
  536. package/generated/entities.ids.generated.ts +11 -1
  537. package/generated/entity-fields-registry.ts +149 -0
  538. package/package.json +7 -7
  539. package/src/helpers/integration/timesheetFixtures.ts +31 -1
  540. package/src/modules/auth/README.md +1 -1
  541. package/src/modules/auth/cli.ts +35 -1
  542. package/src/modules/auth/i18n/de.json +7 -0
  543. package/src/modules/auth/i18n/en.json +7 -0
  544. package/src/modules/auth/i18n/es.json +7 -0
  545. package/src/modules/auth/i18n/ko.json +7 -0
  546. package/src/modules/auth/i18n/pl.json +7 -0
  547. package/src/modules/auth/lib/backendChrome.tsx +1 -0
  548. package/src/modules/customer_accounts/lib/customerRoleAcls.ts +79 -0
  549. package/src/modules/customer_accounts/setup.ts +1 -45
  550. package/src/modules/data_sync/AGENTS.md +34 -0
  551. package/src/modules/data_sync/api/options.ts +2 -0
  552. package/src/modules/data_sync/backend/data-sync/page.tsx +82 -33
  553. package/src/modules/data_sync/i18n/de.json +1 -0
  554. package/src/modules/data_sync/i18n/en.json +1 -0
  555. package/src/modules/data_sync/i18n/es.json +1 -0
  556. package/src/modules/data_sync/i18n/ko.json +1 -0
  557. package/src/modules/data_sync/i18n/pl.json +1 -0
  558. package/src/modules/data_sync/lib/adapter.ts +45 -0
  559. package/src/modules/data_sync/lib/start-controls.ts +89 -0
  560. package/src/modules/staff/AGENTS.md +769 -1
  561. package/src/modules/staff/acl.ts +9 -0
  562. package/src/modules/staff/ai-agents.ts +189 -0
  563. package/src/modules/staff/ai-tools/time-tracking-pack.ts +494 -0
  564. package/src/modules/staff/ai-tools/types.ts +82 -0
  565. package/src/modules/staff/ai-tools.ts +13 -0
  566. package/src/modules/staff/analytics.ts +113 -0
  567. package/src/modules/staff/api/guards.ts +85 -3
  568. package/src/modules/staff/api/leave-requests/accept/route.ts +0 -2
  569. package/src/modules/staff/api/leave-requests/reject/route.ts +0 -2
  570. package/src/modules/staff/api/portal/time-reports/[id]/route.ts +182 -0
  571. package/src/modules/staff/api/portal/time-reports/route.ts +270 -0
  572. package/src/modules/staff/api/team-members/self/route.ts +0 -2
  573. package/src/modules/staff/api/team-members/tags/assign/route.ts +0 -2
  574. package/src/modules/staff/api/team-members/tags/unassign/route.ts +0 -2
  575. package/src/modules/staff/api/timesheets/_shared/withTimesheetInterceptors.ts +292 -0
  576. package/src/modules/staff/api/timesheets/access-requests/route.ts +299 -0
  577. package/src/modules/staff/api/timesheets/my-projects/[projectId]/route.ts +15 -7
  578. package/src/modules/staff/api/timesheets/my-projects/route.ts +14 -1
  579. package/src/modules/staff/api/timesheets/my-work/myWorkAggregate.ts +90 -0
  580. package/src/modules/staff/api/timesheets/my-work/route.ts +475 -0
  581. package/src/modules/staff/api/timesheets/projects/kpis/route.ts +15 -2
  582. package/src/modules/staff/api/timesheets/reports/[id]/close/route.ts +203 -0
  583. package/src/modules/staff/api/timesheets/reports/[id]/export/route.ts +315 -0
  584. package/src/modules/staff/api/timesheets/reports/[id]/sheet/route.ts +220 -0
  585. package/src/modules/staff/api/timesheets/reports/[id]/unlock/route.ts +208 -0
  586. package/src/modules/staff/api/timesheets/reports/preview/route.ts +449 -0
  587. package/src/modules/staff/api/timesheets/reports/route.ts +386 -0
  588. package/src/modules/staff/api/timesheets/reports/shared.ts +121 -0
  589. package/src/modules/staff/api/timesheets/settings/reapply-rounding/route.ts +205 -0
  590. package/src/modules/staff/api/timesheets/settings/rounding-impact/route.ts +226 -0
  591. package/src/modules/staff/api/timesheets/settings/route.ts +242 -0
  592. package/src/modules/staff/api/timesheets/tags/access.ts +134 -0
  593. package/src/modules/staff/api/timesheets/tags/entry-assignments/route.ts +290 -0
  594. package/src/modules/staff/api/timesheets/tags/route.ts +177 -0
  595. package/src/modules/staff/api/timesheets/tags/task-assignments/route.ts +294 -0
  596. package/src/modules/staff/api/timesheets/task-statuses/route.ts +232 -0
  597. package/src/modules/staff/api/timesheets/tasks/[id]/comments/route.ts +532 -0
  598. package/src/modules/staff/api/timesheets/tasks/[id]/status/route.ts +271 -0
  599. package/src/modules/staff/api/timesheets/tasks/route.ts +443 -0
  600. package/src/modules/staff/api/timesheets/time-entries/[id]/duplicate/route.ts +306 -0
  601. package/src/modules/staff/api/timesheets/time-entries/[id]/segments/[segmentId]/route.ts +32 -10
  602. package/src/modules/staff/api/timesheets/time-entries/[id]/segments/route.ts +32 -17
  603. package/src/modules/staff/api/timesheets/time-entries/[id]/timer-start/route.ts +27 -6
  604. package/src/modules/staff/api/timesheets/time-entries/[id]/timer-stop/route.ts +36 -6
  605. package/src/modules/staff/api/timesheets/time-entries/bulk/route.ts +331 -34
  606. package/src/modules/staff/api/timesheets/time-entries/copy-day/route.ts +533 -0
  607. package/src/modules/staff/api/timesheets/time-entries/overlaps/route.ts +457 -0
  608. package/src/modules/staff/api/timesheets/time-entries/route.ts +378 -24
  609. package/src/modules/staff/api/timesheets/time-entries/start-timer/route.ts +31 -9
  610. package/src/modules/staff/api/timesheets/time-projects/[id]/change-currency/route.ts +246 -0
  611. package/src/modules/staff/api/timesheets/time-projects/[id]/employees/route.ts +62 -2
  612. package/src/modules/staff/api/timesheets/time-projects/route.ts +397 -22
  613. package/src/modules/staff/backend/staff/time-tracking/board/page.meta.ts +14 -0
  614. package/src/modules/staff/backend/staff/time-tracking/board/page.tsx +151 -0
  615. package/src/modules/staff/backend/staff/time-tracking/entries/page.meta.ts +14 -0
  616. package/src/modules/staff/backend/staff/time-tracking/entries/page.tsx +1229 -0
  617. package/src/modules/staff/backend/staff/time-tracking/page.meta.ts +11 -0
  618. package/src/modules/staff/backend/staff/time-tracking/page.tsx +823 -0
  619. package/src/modules/staff/backend/staff/time-tracking/projects/[id]/board/page.meta.ts +12 -0
  620. package/src/modules/staff/backend/staff/time-tracking/projects/[id]/board/page.tsx +81 -0
  621. package/src/modules/staff/backend/staff/time-tracking/projects/[id]/edit/page.meta.ts +12 -0
  622. package/src/modules/staff/backend/staff/time-tracking/projects/[id]/edit/page.tsx +275 -0
  623. package/src/modules/staff/backend/staff/time-tracking/projects/[id]/page.meta.ts +12 -0
  624. package/src/modules/staff/backend/staff/time-tracking/projects/[id]/page.tsx +1420 -0
  625. package/src/modules/staff/backend/staff/time-tracking/projects/create/page.meta.ts +12 -0
  626. package/src/modules/staff/backend/staff/time-tracking/projects/create/page.tsx +109 -0
  627. package/src/modules/staff/backend/staff/time-tracking/projects/page.meta.ts +15 -0
  628. package/src/modules/staff/backend/staff/time-tracking/projects/page.tsx +1254 -0
  629. package/src/modules/staff/backend/staff/time-tracking/projects/projectFormConfig.ts +466 -0
  630. package/src/modules/staff/backend/staff/time-tracking/reports/[id]/page.meta.ts +12 -0
  631. package/src/modules/staff/backend/staff/time-tracking/reports/[id]/page.tsx +632 -0
  632. package/src/modules/staff/backend/staff/time-tracking/reports/create/page.meta.ts +12 -0
  633. package/src/modules/staff/backend/staff/time-tracking/reports/create/page.tsx +867 -0
  634. package/src/modules/staff/backend/staff/time-tracking/reports/page.meta.ts +14 -0
  635. package/src/modules/staff/backend/staff/time-tracking/reports/page.tsx +246 -0
  636. package/src/modules/staff/backend/staff/time-tracking/settings/page.meta.ts +14 -0
  637. package/src/modules/staff/backend/staff/time-tracking/settings/page.tsx +701 -0
  638. package/src/modules/staff/backend/staff/time-tracking/timesheet/GridView.tsx +953 -0
  639. package/src/modules/staff/backend/staff/time-tracking/timesheet/page.meta.ts +14 -0
  640. package/src/modules/staff/backend/staff/time-tracking/timesheet/page.tsx +800 -0
  641. package/src/modules/staff/backend/staff/timesheets/page.meta.ts +6 -6
  642. package/src/modules/staff/backend/staff/timesheets/page.tsx +12 -1010
  643. package/src/modules/staff/backend/staff/timesheets/projects/[id]/edit/page.meta.ts +0 -6
  644. package/src/modules/staff/backend/staff/timesheets/projects/[id]/edit/page.tsx +4 -158
  645. package/src/modules/staff/backend/staff/timesheets/projects/[id]/page.meta.ts +0 -6
  646. package/src/modules/staff/backend/staff/timesheets/projects/[id]/page.tsx +4 -609
  647. package/src/modules/staff/backend/staff/timesheets/projects/create/page.meta.ts +0 -6
  648. package/src/modules/staff/backend/staff/timesheets/projects/create/page.tsx +3 -89
  649. package/src/modules/staff/backend/staff/timesheets/projects/page.meta.ts +2 -19
  650. package/src/modules/staff/backend/staff/timesheets/projects/page.tsx +3 -778
  651. package/src/modules/staff/ce.ts +63 -0
  652. package/src/modules/staff/cli.ts +207 -1
  653. package/src/modules/staff/commands/index.ts +5 -0
  654. package/src/modules/staff/commands/timesheets-entries.ts +1006 -28
  655. package/src/modules/staff/commands/timesheets-projects.ts +593 -7
  656. package/src/modules/staff/commands/timesheets-reports.ts +1329 -0
  657. package/src/modules/staff/commands/timesheets-tags.ts +1315 -0
  658. package/src/modules/staff/commands/timesheets-task-comments.ts +583 -0
  659. package/src/modules/staff/commands/timesheets-task-statuses.ts +889 -0
  660. package/src/modules/staff/commands/timesheets-tasks.ts +1121 -0
  661. package/src/modules/staff/data/enrichers.ts +675 -10
  662. package/src/modules/staff/data/entities.ts +494 -2
  663. package/src/modules/staff/data/extensions.ts +68 -0
  664. package/src/modules/staff/data/validators.ts +348 -3
  665. package/src/modules/staff/di.ts +96 -0
  666. package/src/modules/staff/events.payloads.ts +268 -0
  667. package/src/modules/staff/events.ts +87 -5
  668. package/src/modules/staff/extension-points.ts +308 -0
  669. package/src/modules/staff/frontend/[orgSlug]/portal/time-reports/[id]/page.meta.ts +10 -0
  670. package/src/modules/staff/frontend/[orgSlug]/portal/time-reports/[id]/page.tsx +225 -0
  671. package/src/modules/staff/frontend/[orgSlug]/portal/time-reports/page.meta.ts +17 -0
  672. package/src/modules/staff/frontend/[orgSlug]/portal/time-reports/page.tsx +182 -0
  673. package/src/modules/staff/i18n/de.json +899 -0
  674. package/src/modules/staff/i18n/en.json +899 -0
  675. package/src/modules/staff/i18n/es.json +899 -0
  676. package/src/modules/staff/i18n/ko.json +899 -0
  677. package/src/modules/staff/i18n/pl.json +899 -0
  678. package/src/modules/staff/lib/crud.ts +14 -3
  679. package/src/modules/staff/lib/time-tracking/access.ts +155 -0
  680. package/src/modules/staff/lib/time-tracking/billability.ts +68 -0
  681. package/src/modules/staff/lib/time-tracking/capacity.ts +124 -0
  682. package/src/modules/staff/lib/time-tracking/componentContracts.ts +26 -0
  683. package/src/modules/staff/lib/time-tracking/cost.ts +144 -0
  684. package/src/modules/staff/lib/time-tracking/duration.ts +68 -0
  685. package/src/modules/staff/lib/time-tracking/featureAccess.ts +115 -0
  686. package/src/modules/staff/lib/time-tracking/interval.ts +90 -0
  687. package/src/modules/staff/lib/time-tracking/migrateProjectCodes.ts +161 -0
  688. package/src/modules/staff/lib/time-tracking/moneyVisibility.ts +37 -0
  689. package/src/modules/staff/lib/time-tracking/overlap.ts +159 -0
  690. package/src/modules/staff/lib/time-tracking/portalRecipients.ts +76 -0
  691. package/src/modules/staff/lib/time-tracking/portalReports.ts +31 -0
  692. package/src/modules/staff/lib/time-tracking/projectCode.ts +221 -0
  693. package/src/modules/staff/lib/time-tracking/reapplyRounding.ts +313 -0
  694. package/src/modules/staff/lib/time-tracking/recalculationRunner.ts +118 -0
  695. package/src/modules/staff/lib/time-tracking/recalculations.ts +135 -0
  696. package/src/modules/staff/lib/time-tracking/registries/invoke.ts +122 -0
  697. package/src/modules/staff/lib/time-tracking/registries/registry.ts +124 -0
  698. package/src/modules/staff/lib/time-tracking/registries/scope.ts +56 -0
  699. package/src/modules/staff/lib/time-tracking/rollup.ts +59 -0
  700. package/src/modules/staff/lib/time-tracking/rounding.ts +126 -0
  701. package/src/modules/staff/lib/time-tracking/roundingImpact.ts +75 -0
  702. package/src/modules/staff/lib/time-tracking/settingKeys.ts +274 -0
  703. package/src/modules/staff/lib/time-tracking/settings.ts +168 -0
  704. package/src/modules/staff/lib/time-tracking/sqlInClause.ts +22 -0
  705. package/src/modules/staff/lib/time-tracking/timeEntrySources.ts +85 -0
  706. package/src/modules/staff/lib/time-tracking-ui/BoardFilterChips.tsx +360 -0
  707. package/src/modules/staff/lib/time-tracking-ui/CustomerPicker.tsx +427 -0
  708. package/src/modules/staff/lib/time-tracking-ui/DurationInput.tsx +192 -0
  709. package/src/modules/staff/lib/time-tracking-ui/EntryDetailsFields.tsx +224 -0
  710. package/src/modules/staff/lib/time-tracking-ui/EntryFilterBar.tsx +144 -0
  711. package/src/modules/staff/lib/time-tracking-ui/KanbanBoard.tsx +1065 -0
  712. package/src/modules/staff/lib/time-tracking-ui/KanbanCard.tsx +435 -0
  713. package/src/modules/staff/lib/time-tracking-ui/KanbanColumn.tsx +316 -0
  714. package/src/modules/staff/lib/time-tracking-ui/NewTaskDialog.tsx +291 -0
  715. package/src/modules/staff/lib/time-tracking-ui/NoProjectAccess.tsx +162 -0
  716. package/src/modules/staff/lib/time-tracking-ui/PeriodSelector.tsx +149 -0
  717. package/src/modules/staff/lib/time-tracking-ui/PhasePlaceholder.tsx +31 -0
  718. package/src/modules/staff/lib/time-tracking-ui/ProjectCodeField.tsx +230 -0
  719. package/src/modules/staff/lib/time-tracking-ui/ProjectCurrencyField.tsx +432 -0
  720. package/src/modules/staff/lib/time-tracking-ui/ProjectFormSections.tsx +323 -0
  721. package/src/modules/staff/lib/time-tracking-ui/ProjectTeamDrawer.tsx +930 -0
  722. package/src/modules/staff/lib/time-tracking-ui/ReportSheet.tsx +357 -0
  723. package/src/modules/staff/lib/time-tracking-ui/TagPicker.tsx +195 -0
  724. package/src/modules/staff/lib/time-tracking-ui/TaskBoardScreen.tsx +243 -0
  725. package/src/modules/staff/lib/time-tracking-ui/TaskCommentThread.tsx +137 -0
  726. package/src/modules/staff/lib/time-tracking-ui/TaskDrawer.tsx +1405 -0
  727. package/src/modules/staff/lib/time-tracking-ui/TaskListView.tsx +260 -0
  728. package/src/modules/staff/lib/time-tracking-ui/TaskPicker.tsx +435 -0
  729. package/src/modules/staff/lib/time-tracking-ui/TaskQuickLog.tsx +296 -0
  730. package/src/modules/staff/lib/time-tracking-ui/TimeEntriesSummaryFooter.tsx +97 -0
  731. package/src/modules/staff/lib/time-tracking-ui/TimeEntryDialog.tsx +1929 -0
  732. package/src/modules/staff/lib/time-tracking-ui/TimeEntryDurationCell.tsx +126 -0
  733. package/src/modules/staff/lib/time-tracking-ui/TimesheetCalendar.tsx +265 -0
  734. package/src/modules/staff/lib/time-tracking-ui/TimesheetPeriodFooter.tsx +78 -0
  735. package/src/modules/staff/lib/time-tracking-ui/TimesheetViewSwitch.tsx +70 -0
  736. package/src/modules/staff/lib/time-tracking-ui/boardDirectory.ts +231 -0
  737. package/src/modules/staff/lib/time-tracking-ui/boardFilters.ts +128 -0
  738. package/src/modules/staff/lib/time-tracking-ui/boardSummary.ts +20 -0
  739. package/src/modules/staff/lib/time-tracking-ui/kanbanBoardData.ts +228 -0
  740. package/src/modules/staff/lib/time-tracking-ui/projectTeamAssignment.ts +143 -0
  741. package/src/modules/staff/lib/time-tracking-ui/taskDrawerData.ts +194 -0
  742. package/src/modules/staff/lib/time-tracking-ui/timeEntryDialogState.ts +400 -0
  743. package/src/modules/staff/lib/time-tracking-ui/timeEntryListData.ts +271 -0
  744. package/src/modules/staff/lib/time-tracking-ui/timeTrackingSettingsForm.ts +168 -0
  745. package/src/modules/staff/lib/time-tracking-ui/timesheetData.ts +225 -0
  746. package/src/modules/staff/lib/time-tracking-ui/timesheetPeriod.ts +278 -0
  747. package/src/modules/staff/lib/time-tracking-ui/timesheetTargets.ts +93 -0
  748. package/src/modules/staff/lib/time-tracking-ui/useBoardFilters.ts +107 -0
  749. package/src/modules/staff/lib/time-tracking-ui/useTimesheetPreferences.ts +245 -0
  750. package/src/modules/staff/lib/timeTrackingSeeds.ts +1037 -0
  751. package/src/modules/staff/lib/timesheets/timeEntryCacheInvalidation.ts +11 -10
  752. package/src/modules/staff/lib/timesheets/timeEntryDecoration.ts +256 -0
  753. package/src/modules/staff/lib/timesheets-projects/budgetBurn.ts +60 -0
  754. package/src/modules/staff/lib/timesheets-projects/budgetThreshold.ts +135 -0
  755. package/src/modules/staff/lib/timesheets-projects/budgetThresholdState.ts +137 -0
  756. package/src/modules/staff/lib/timesheets-projects/computeProjectFinancials.ts +142 -0
  757. package/src/modules/staff/lib/timesheets-projects/reportSelection.ts +82 -0
  758. package/src/modules/staff/lib/timesheets-projects-ui/AssignMembersDialog.tsx +237 -0
  759. package/src/modules/staff/lib/timesheets-projects-ui/ProjectBudgetCell.tsx +33 -0
  760. package/src/modules/staff/lib/timesheets-projects-ui/ProjectCard.tsx +56 -1
  761. package/src/modules/staff/lib/timesheets-projects-ui/ProjectsBulkActionsBar.tsx +90 -0
  762. package/src/modules/staff/lib/timesheets-reports/buildReportSheet.ts +125 -0
  763. package/src/modules/staff/lib/timesheets-reports/loadReportData.ts +251 -0
  764. package/src/modules/staff/lib/timesheets-reports/pdf.ts +263 -0
  765. package/src/modules/staff/lib/timesheets-reports/reportApprovalPolicies.ts +137 -0
  766. package/src/modules/staff/lib/timesheets-reports/reportConfigData.ts +247 -0
  767. package/src/modules/staff/lib/timesheets-reports/reportConfigState.ts +89 -0
  768. package/src/modules/staff/lib/timesheets-reports/reportExport.ts +373 -0
  769. package/src/modules/staff/lib/timesheets-reports/reportExportFormats.ts +71 -0
  770. package/src/modules/staff/lib/timesheets-reports/reportGroupings.ts +153 -0
  771. package/src/modules/staff/lib/timesheets-reports/reportLabels.ts +23 -0
  772. package/src/modules/staff/lib/timesheets-reports/reportReference.ts +146 -0
  773. package/src/modules/staff/lib/timesheets-reports/reportRows.ts +89 -0
  774. package/src/modules/staff/lib/timesheets-reports/reportSheetData.ts +196 -0
  775. package/src/modules/staff/lib/timesheets-reports/reportTotals.ts +544 -0
  776. package/src/modules/staff/lib/timesheets-reports/xlsx.ts +207 -0
  777. package/src/modules/staff/lib/timesheets-tasks/computeTaskRollups.ts +238 -0
  778. package/src/modules/staff/lib/timesheets-tasks/defaultStatusTemplate.ts +90 -0
  779. package/src/modules/staff/lib/timesheets-tasks/seedProjectStatuses.ts +43 -0
  780. package/src/modules/staff/lib/timesheets-tasks/statusPositions.ts +132 -0
  781. package/src/modules/staff/lib/timesheets-tasks/statusSlug.ts +43 -0
  782. package/src/modules/staff/lib/timesheets-tasks/taskHierarchy.ts +99 -0
  783. package/src/modules/staff/lib/timesheets-tasks/taskHoursTotals.ts +42 -0
  784. package/src/modules/staff/lib/timesheets-tasks/taskReference.ts +108 -0
  785. package/src/modules/staff/lib/timesheets-ui/CreateProjectDialog.tsx +18 -4
  786. package/src/modules/staff/lib/timesheets-ui/ListView.tsx +504 -149
  787. package/src/modules/staff/lib/timesheets-ui/TimerBar.tsx +50 -2
  788. package/src/modules/staff/migrations/.snapshot-open-mercato.json +3244 -228
  789. package/src/modules/staff/migrations/Migration20260813073131_staff.ts +94 -0
  790. package/src/modules/staff/migrations/Migration20260824143357_staff.ts +17 -0
  791. package/src/modules/staff/notifications.client.ts +16 -0
  792. package/src/modules/staff/notifications.handlers.ts +88 -0
  793. package/src/modules/staff/notifications.ts +163 -0
  794. package/src/modules/staff/search.ts +191 -1
  795. package/src/modules/staff/setup.ts +22 -0
  796. package/src/modules/staff/subscribers/time-project-access-requested-notification.ts +95 -0
  797. package/src/modules/staff/subscribers/time-project-budget-threshold-notification.ts +226 -0
  798. package/src/modules/staff/subscribers/time-report-approved-notification.ts +116 -0
  799. package/src/modules/staff/subscribers/time-report-portal-broadcast.ts +120 -0
  800. package/src/modules/staff/translations.ts +17 -0
  801. package/src/modules/staff/widgets/components.ts +34 -0
  802. package/src/modules/staff/widgets/injection/timer-sidebar-indicator/widget.tsx +6 -5
  803. package/src/modules/staff/widgets/notifications/TimeProjectAccessRequestedRenderer.tsx +138 -0
  804. package/src/modules/staff/widgets/notifications/index.ts +1 -0
  805. package/src/modules/staff/workers/timesheets-reapply-rounding.ts +59 -0
  806. package/dist/modules/staff/backend/staff/timesheets/projects/projectFormConfig.js +0 -123
  807. package/dist/modules/staff/backend/staff/timesheets/projects/projectFormConfig.js.map +0 -7
  808. package/src/modules/staff/backend/staff/timesheets/projects/projectFormConfig.ts +0 -138
@@ -1,5 +1,12 @@
1
1
  import { z } from "zod";
2
2
  import { PROJECT_COLOR_KEYS } from "../lib/timesheets-ui/colors.js";
3
+ import { hasTimeEntrySource, timeEntrySourceIds } from "../lib/time-tracking/timeEntrySources.js";
4
+ import { hasReportGrouping, reportGroupingIds } from "../lib/timesheets-reports/reportGroupings.js";
5
+ import {
6
+ buildTimeTrackingSettingsSchema,
7
+ timeTrackingRoundingDirectionSchema,
8
+ timeTrackingRoundingUnitMinutesSchema
9
+ } from "../lib/time-tracking/settingKeys.js";
3
10
  const projectColorSchema = z.string().refine(
4
11
  (value) => PROJECT_COLOR_KEYS.includes(value),
5
12
  { message: "Invalid project color key." }
@@ -172,11 +179,34 @@ const staffTeamMemberSelfCreateSchema = z.object({
172
179
  displayName: z.string().min(1),
173
180
  description: z.string().max(2e3).optional().nullable()
174
181
  });
175
- const timeEntrySourceSchema = z.enum(["manual", "timer", "kiosk", "mobile"]);
182
+ const timeEntrySourceSchema = z.string().superRefine((value, ctx) => {
183
+ if (hasTimeEntrySource(value)) return;
184
+ ctx.addIssue({
185
+ code: z.ZodIssueCode.custom,
186
+ message: `[internal] unknown time entry source: ${value}`,
187
+ params: { accepted: timeEntrySourceIds() }
188
+ });
189
+ });
176
190
  const timeProjectStatusSchema = z.enum(["active", "on_hold", "completed"]);
177
191
  const timeProjectMemberStatusSchema = z.enum(["active", "inactive"]);
178
192
  const timeEntrySegmentTypeSchema = z.enum(["work", "break"]);
179
193
  const projectCodeSchema = z.string().min(1).max(50).regex(/^[a-zA-Z0-9-]+$/);
194
+ const moneyAmountSchema = z.number().min(0).max(99999999);
195
+ const timeProjectBudgetKindSchema = z.enum(["none", "hours", "amount"]);
196
+ const currencyCodeSchema = z.string().trim().length(3).transform((value) => value.toUpperCase());
197
+ const numericAmountPattern = /^\d{1,10}(?:\.\d{1,4})?$/;
198
+ const numericAmountSchema = z.union([z.number(), z.string()]).transform((value, ctx) => {
199
+ const raw = typeof value === "number" ? String(value) : value.trim().replace(",", ".");
200
+ if (raw.length === 0) return null;
201
+ if (!numericAmountPattern.test(raw)) {
202
+ ctx.addIssue({
203
+ code: z.ZodIssueCode.custom,
204
+ message: "Expected a non-negative amount with at most 10 digits and 4 decimals."
205
+ });
206
+ return z.NEVER;
207
+ }
208
+ return raw;
209
+ });
180
210
  const staffTimeEntryCreateSchema = z.object({
181
211
  ...scopedCreateFields,
182
212
  staffMemberId: z.string().uuid(),
@@ -189,31 +219,59 @@ const staffTimeEntryCreateSchema = z.object({
189
219
  dealId: z.string().uuid().optional().nullable(),
190
220
  orderId: z.string().uuid().optional().nullable(),
191
221
  notes: z.string().max(2e3).optional().nullable(),
192
- source: timeEntrySourceSchema.optional().default("manual")
222
+ source: timeEntrySourceSchema.optional().default("manual"),
223
+ taskId: z.string().uuid().optional().nullable(),
224
+ description: z.string().max(2e3).optional().nullable(),
225
+ isBillable: z.boolean().optional(),
226
+ tagIds: z.array(z.string().uuid()).max(50).optional(),
227
+ rateOverrideAmount: moneyAmountSchema.optional().nullable()
193
228
  });
194
229
  const staffTimeEntryUpdateSchema = z.object({
195
230
  ...scopedUpdateFields,
196
231
  date: z.coerce.date().optional(),
197
232
  durationMinutes: z.number().int().min(0).max(1440).optional(),
233
+ startedAt: z.coerce.date().optional().nullable(),
234
+ endedAt: z.coerce.date().optional().nullable(),
198
235
  timeProjectId: z.string().uuid().optional().nullable(),
199
236
  customerId: z.string().uuid().optional().nullable(),
200
237
  dealId: z.string().uuid().optional().nullable(),
201
238
  orderId: z.string().uuid().optional().nullable(),
202
- notes: z.string().max(2e3).optional().nullable()
239
+ notes: z.string().max(2e3).optional().nullable(),
240
+ taskId: z.string().uuid().optional().nullable(),
241
+ description: z.string().max(2e3).optional().nullable(),
242
+ isBillable: z.boolean().optional(),
243
+ tagIds: z.array(z.string().uuid()).max(50).optional(),
244
+ rateOverrideAmount: moneyAmountSchema.optional().nullable()
203
245
  });
204
246
  const staffTimeEntryStartTimerSchema = z.object({
205
247
  ...scopedCreateFields,
206
248
  staffMemberId: z.string().uuid(),
207
249
  date: z.coerce.date(),
208
250
  timeProjectId: z.string().uuid().optional().nullable(),
251
+ taskId: z.string().uuid().optional().nullable(),
209
252
  notes: z.string().max(2e3).optional().nullable()
210
253
  });
211
254
  const staffTimeEntryBulkItemSchema = z.object({
212
255
  id: z.string().uuid().optional().nullable(),
213
256
  date: z.coerce.date(),
214
- timeProjectId: z.string().uuid(),
257
+ // Optional only because a task carries its project: a row naming a `taskId`
258
+ // inherits the project from it, exactly as the single-entry path does. The
259
+ // route refuses a row that names neither with `staff.timesheets.errors.projectRequired`,
260
+ // so every stored row still lands on a project — the (project, date) cell the
261
+ // lock gate addresses is never blank.
262
+ timeProjectId: z.string().uuid().optional().nullable(),
215
263
  durationMinutes: z.number().int().min(0).max(1440),
216
- notes: z.string().max(2e3).optional().nullable()
264
+ notes: z.string().max(2e3).optional().nullable(),
265
+ taskId: z.string().uuid().optional().nullable(),
266
+ description: z.string().max(2e3).optional().nullable(),
267
+ isBillable: z.boolean().optional(),
268
+ // Accepted by the schema and REFUSED by the route with 422: assigning tags
269
+ // means dispatching the tag commands, which fork their own EntityManager and
270
+ // cannot participate in this route's per-row transaction. Kept in the schema
271
+ // so the refusal is explicit — dropping the key would let zod strip it and
272
+ // restore the silent no-op.
273
+ tagIds: z.array(z.string().uuid()).max(50).optional(),
274
+ rateOverrideAmount: moneyAmountSchema.optional().nullable()
217
275
  });
218
276
  const staffTimeEntryBulkSaveSchema = z.object({
219
277
  entries: z.array(staffTimeEntryBulkItemSchema).min(1).max(200)
@@ -234,7 +292,11 @@ const staffTimeEntrySegmentUpdateSchema = z.object({
234
292
  const staffTimeProjectCreateSchema = z.object({
235
293
  ...scopedCreateFields,
236
294
  name: z.string().min(1).max(255),
237
- customerId: z.string().uuid().optional().nullable(),
295
+ // D-9 / US-B1: time is organised per customer, so a new project always names one.
296
+ // Rows created before this change keep their null customer and stay editable
297
+ // (see the update schema below), which is why only create is constrained.
298
+ customerId: z.string().uuid(),
299
+ customerSnapshot: z.record(z.string(), z.unknown()).optional().nullable(),
238
300
  code: projectCodeSchema,
239
301
  description: z.string().max(2e3).optional().nullable(),
240
302
  projectType: z.string().max(100).optional().nullable(),
@@ -242,12 +304,22 @@ const staffTimeProjectCreateSchema = z.object({
242
304
  status: timeProjectStatusSchema.optional().default("active"),
243
305
  ownerUserId: z.string().uuid().optional().nullable(),
244
306
  costCenter: z.string().max(100).optional().nullable(),
245
- startDate: z.coerce.date().optional().nullable()
307
+ startDate: z.coerce.date().optional().nullable(),
308
+ hourlyRate: numericAmountSchema.optional().nullable(),
309
+ // D-3: the currency may be chosen once, at creation. Every later change goes
310
+ // through `POST .../change-currency`, which carries the non-conversion
311
+ // acknowledgement and refuses while entries sit frozen in a closed report.
312
+ currencyCode: currencyCodeSchema.optional().nullable(),
313
+ billableByDefault: z.boolean().optional(),
314
+ budgetKind: timeProjectBudgetKindSchema.optional().default("none"),
315
+ budgetValue: numericAmountSchema.optional().nullable(),
316
+ budgetWarnAtPercent: z.number().int().min(1).max(100).optional()
246
317
  });
247
318
  const staffTimeProjectUpdateSchema = z.object({
248
319
  ...scopedUpdateFields,
249
320
  name: z.string().min(1).max(255).optional(),
250
321
  customerId: z.string().uuid().optional().nullable(),
322
+ customerSnapshot: z.record(z.string(), z.unknown()).optional().nullable(),
251
323
  code: projectCodeSchema.optional(),
252
324
  description: z.string().max(2e3).optional().nullable(),
253
325
  projectType: z.string().max(100).optional().nullable(),
@@ -255,7 +327,12 @@ const staffTimeProjectUpdateSchema = z.object({
255
327
  status: timeProjectStatusSchema.optional(),
256
328
  ownerUserId: z.string().uuid().optional().nullable(),
257
329
  costCenter: z.string().max(100).optional().nullable(),
258
- startDate: z.coerce.date().optional().nullable()
330
+ startDate: z.coerce.date().optional().nullable(),
331
+ hourlyRate: numericAmountSchema.optional().nullable(),
332
+ billableByDefault: z.boolean().optional(),
333
+ budgetKind: timeProjectBudgetKindSchema.optional(),
334
+ budgetValue: numericAmountSchema.optional().nullable(),
335
+ budgetWarnAtPercent: z.number().int().min(1).max(100).optional()
259
336
  });
260
337
  const staffTimeProjectMemberAssignSchema = z.object({
261
338
  ...scopedCreateFields,
@@ -275,6 +352,156 @@ const staffTimeProjectMemberUpdateSchema = z.object({
275
352
  const staffMyProjectVisibilityUpdateSchema = z.object({
276
353
  showInGrid: z.boolean()
277
354
  });
355
+ const timeSlugSchema = z.string().trim().min(1).max(60).regex(/^[a-z0-9]+(?:-[a-z0-9]+)*$/);
356
+ const timeReportPeriodKindSchema = z.enum(["week", "month", "year", "custom"]);
357
+ const timeReportGroupingSchema = z.string().superRefine((value, ctx) => {
358
+ if (hasReportGrouping(value)) return;
359
+ ctx.addIssue({
360
+ code: z.ZodIssueCode.custom,
361
+ message: `[internal] unknown report grouping: ${value}`,
362
+ params: { accepted: reportGroupingIds() }
363
+ });
364
+ });
365
+ const timeReportNonbillableModeSchema = z.enum(["separate", "exclude"]);
366
+ const timeRoundingDirectionSchema = timeTrackingRoundingDirectionSchema;
367
+ const timeRoundingUnitMinutesSchema = timeTrackingRoundingUnitMinutesSchema;
368
+ const positionSchema = z.number().int().min(0).max(1e6);
369
+ const staffTimeTaskStatusCreateSchema = z.object({
370
+ ...scopedCreateFields,
371
+ timeProjectId: z.string().uuid(),
372
+ name: z.string().trim().min(1).max(100),
373
+ slug: timeSlugSchema.optional(),
374
+ color: projectColorSchema.optional().nullable(),
375
+ position: positionSchema.optional(),
376
+ isDefault: z.boolean().optional(),
377
+ isDone: z.boolean().optional()
378
+ });
379
+ const staffTimeTaskStatusUpdateSchema = z.object({
380
+ ...scopedUpdateFields,
381
+ name: z.string().trim().min(1).max(100).optional(),
382
+ color: projectColorSchema.optional().nullable(),
383
+ position: positionSchema.optional(),
384
+ isDefault: z.boolean().optional(),
385
+ isDone: z.boolean().optional()
386
+ });
387
+ const staffTimeTaskStatusReorderSchema = z.object({
388
+ statuses: z.array(
389
+ z.object({
390
+ id: z.string().uuid(),
391
+ position: positionSchema
392
+ })
393
+ ).min(1).max(100)
394
+ });
395
+ const staffTimeTaskCreateSchema = z.object({
396
+ ...scopedCreateFields,
397
+ timeProjectId: z.string().uuid(),
398
+ parentTaskId: z.string().uuid().optional().nullable(),
399
+ taskStatusId: z.string().uuid().optional().nullable(),
400
+ title: z.string().trim().min(1).max(255),
401
+ description: z.string().max(8e3).optional().nullable(),
402
+ assigneeStaffMemberId: z.string().uuid().optional().nullable(),
403
+ position: positionSchema.optional(),
404
+ tagIds: z.array(z.string().uuid()).max(50).optional()
405
+ });
406
+ const staffTimeTaskUpdateSchema = z.object({
407
+ ...scopedUpdateFields,
408
+ parentTaskId: z.string().uuid().optional().nullable(),
409
+ taskStatusId: z.string().uuid().optional(),
410
+ title: z.string().trim().min(1).max(255).optional(),
411
+ description: z.string().max(8e3).optional().nullable(),
412
+ assigneeStaffMemberId: z.string().uuid().optional().nullable(),
413
+ position: positionSchema.optional(),
414
+ tagIds: z.array(z.string().uuid()).max(50).optional()
415
+ });
416
+ const staffTimeTaskStatusChangeSchema = z.object({
417
+ taskStatusId: z.string().uuid(),
418
+ position: positionSchema.optional()
419
+ });
420
+ const staffTimeTaskCommentCreateSchema = z.object({
421
+ ...scopedCreateFields,
422
+ taskId: z.string().uuid(),
423
+ body: z.string().trim().min(1).max(5e3),
424
+ authorUserId: z.string().uuid().optional().nullable()
425
+ });
426
+ const staffTimeTaskCommentUpdateSchema = z.object({
427
+ ...scopedUpdateFields,
428
+ body: z.string().trim().min(1).max(5e3)
429
+ });
430
+ const staffTimeTagCreateSchema = z.object({
431
+ ...scopedCreateFields,
432
+ slug: timeSlugSchema,
433
+ label: z.string().trim().min(1).max(100),
434
+ color: projectColorSchema.optional().nullable()
435
+ });
436
+ const staffTimeTaskTagAssignmentSchema = z.object({
437
+ ...scopedCreateFields,
438
+ taskId: z.string().uuid(),
439
+ tagIds: z.array(z.string().uuid()).max(50)
440
+ });
441
+ const staffTimeEntryTagAssignmentSchema = z.object({
442
+ ...scopedCreateFields,
443
+ timeEntryId: z.string().uuid(),
444
+ tagIds: z.array(z.string().uuid()).max(50)
445
+ });
446
+ const validateStaffTimeReportPeriod = (value, ctx) => {
447
+ if (!value.periodFrom || !value.periodTo) return;
448
+ if (value.periodTo < value.periodFrom) {
449
+ ctx.addIssue({
450
+ code: z.ZodIssueCode.custom,
451
+ message: "Period end must be after period start.",
452
+ path: ["periodTo"]
453
+ });
454
+ }
455
+ };
456
+ const staffTimeReportCreateSchema = z.object({
457
+ ...scopedCreateFields,
458
+ customerId: z.string().uuid(),
459
+ title: z.string().trim().min(1).max(255),
460
+ periodKind: timeReportPeriodKindSchema,
461
+ periodFrom: z.coerce.date(),
462
+ periodTo: z.coerce.date(),
463
+ grouping: timeReportGroupingSchema.optional().default("project_task"),
464
+ nonbillableMode: timeReportNonbillableModeSchema.optional().default("separate"),
465
+ includeAlreadyReported: z.boolean().optional().default(false),
466
+ showRates: z.boolean().optional().default(true),
467
+ timeProjectIds: z.array(z.string().uuid()).min(1).max(100)
468
+ }).superRefine(validateStaffTimeReportPeriod);
469
+ const staffTimeReportUpdateSchema = z.object({
470
+ ...scopedUpdateFields,
471
+ customerId: z.string().uuid().optional(),
472
+ title: z.string().trim().min(1).max(255).optional(),
473
+ periodKind: timeReportPeriodKindSchema.optional(),
474
+ periodFrom: z.coerce.date().optional(),
475
+ periodTo: z.coerce.date().optional(),
476
+ grouping: timeReportGroupingSchema.optional(),
477
+ nonbillableMode: timeReportNonbillableModeSchema.optional(),
478
+ includeAlreadyReported: z.boolean().optional(),
479
+ showRates: z.boolean().optional(),
480
+ timeProjectIds: z.array(z.string().uuid()).min(1).max(100).optional()
481
+ }).superRefine(validateStaffTimeReportPeriod);
482
+ const staffTimeReportPreviewSchema = z.object({
483
+ customerId: z.string().uuid().optional().nullable(),
484
+ periodKind: timeReportPeriodKindSchema.optional().default("custom"),
485
+ periodFrom: z.coerce.date(),
486
+ periodTo: z.coerce.date(),
487
+ grouping: timeReportGroupingSchema.optional().default("project_task"),
488
+ nonbillableMode: timeReportNonbillableModeSchema.optional().default("separate"),
489
+ includeAlreadyReported: z.boolean().optional().default(false),
490
+ showRates: z.boolean().optional().default(true),
491
+ timeProjectIds: z.array(z.string().uuid()).min(1).max(100)
492
+ }).superRefine(validateStaffTimeReportPeriod);
493
+ const staffTimeReportCloseSchema = z.object({
494
+ id: z.string().uuid()
495
+ });
496
+ const staffTimeReportUnlockSchema = z.object({
497
+ id: z.string().uuid(),
498
+ reason: z.string().trim().min(1).max(2e3)
499
+ });
500
+ const staffTimeProjectChangeCurrencySchema = z.object({
501
+ currencyCode: currencyCodeSchema,
502
+ acknowledged: z.literal(true)
503
+ });
504
+ const staffTimeTrackingSettingsSchema = buildTimeTrackingSettingsSchema();
278
505
  export {
279
506
  optimisticUpdatedAtSchema,
280
507
  staffLeaveRequestCreateSchema,
@@ -303,10 +530,28 @@ export {
303
530
  staffTimeEntrySegmentCreateSchema,
304
531
  staffTimeEntrySegmentUpdateSchema,
305
532
  staffTimeEntryStartTimerSchema,
533
+ staffTimeEntryTagAssignmentSchema,
306
534
  staffTimeEntryUpdateSchema,
535
+ staffTimeProjectChangeCurrencySchema,
307
536
  staffTimeProjectCreateSchema,
308
537
  staffTimeProjectMemberAssignSchema,
309
538
  staffTimeProjectMemberUpdateSchema,
310
- staffTimeProjectUpdateSchema
539
+ staffTimeProjectUpdateSchema,
540
+ staffTimeReportCloseSchema,
541
+ staffTimeReportCreateSchema,
542
+ staffTimeReportPreviewSchema,
543
+ staffTimeReportUnlockSchema,
544
+ staffTimeReportUpdateSchema,
545
+ staffTimeTagCreateSchema,
546
+ staffTimeTaskCommentCreateSchema,
547
+ staffTimeTaskCommentUpdateSchema,
548
+ staffTimeTaskCreateSchema,
549
+ staffTimeTaskStatusChangeSchema,
550
+ staffTimeTaskStatusCreateSchema,
551
+ staffTimeTaskStatusReorderSchema,
552
+ staffTimeTaskStatusUpdateSchema,
553
+ staffTimeTaskTagAssignmentSchema,
554
+ staffTimeTaskUpdateSchema,
555
+ staffTimeTrackingSettingsSchema
311
556
  };
312
557
  //# sourceMappingURL=validators.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/modules/staff/data/validators.ts"],
4
- "sourcesContent": ["import { z } from 'zod'\nimport { PROJECT_COLOR_KEYS } from '../lib/timesheets-ui/colors'\n\nconst projectColorSchema = z\n .string()\n .refine(\n (value) => (PROJECT_COLOR_KEYS as readonly string[]).includes(value),\n { message: 'Invalid project color key.' },\n )\n\nconst tagsSchema = z.array(z.string().min(1)).optional().default([])\n\nexport const optimisticUpdatedAtSchema = z.string().refine(\n (value) => !Number.isNaN(new Date(value).getTime()),\n { message: 'Invalid datetime' },\n)\n\nconst scopedCreateFields = {\n tenantId: z.string().uuid(),\n organizationId: z.string().uuid(),\n}\n\nconst scopedUpdateFields = {\n id: z.string().uuid(),\n}\n\nexport const staffTeamCreateSchema = z.object({\n ...scopedCreateFields,\n name: z.string().min(1),\n description: z.string().optional().nullable(),\n isActive: z.boolean().optional(),\n})\n\nexport const staffTeamUpdateSchema = z.object({\n ...scopedUpdateFields,\n name: z.string().min(1).optional(),\n description: z.string().optional().nullable(),\n isActive: z.boolean().optional(),\n})\n\nexport const staffTeamRoleCreateSchema = z.object({\n ...scopedCreateFields,\n teamId: z.string().uuid().optional().nullable(),\n name: z.string().min(1),\n description: z.string().optional().nullable(),\n appearanceIcon: z.string().trim().max(100).optional().nullable(),\n appearanceColor: z\n .string()\n .trim()\n .regex(/^#([0-9a-fA-F]{6})$/)\n .optional()\n .nullable(),\n})\n\nexport const staffTeamRoleUpdateSchema = z.object({\n ...scopedUpdateFields,\n teamId: z.string().uuid().optional().nullable(),\n name: z.string().min(1).optional(),\n description: z.string().optional().nullable(),\n appearanceIcon: z.string().trim().max(100).optional().nullable(),\n appearanceColor: z\n .string()\n .trim()\n .regex(/^#([0-9a-fA-F]{6})$/)\n .optional()\n .nullable(),\n})\n\nexport const staffTeamMemberCreateSchema = z.object({\n ...scopedCreateFields,\n teamId: z.string().uuid().optional().nullable(),\n displayName: z.string().min(1),\n description: z.string().optional().nullable(),\n userId: z.string().uuid().optional().nullable(),\n roleIds: z.array(z.string().uuid()).optional().default([]),\n tags: tagsSchema,\n availabilityRuleSetId: z.string().uuid().optional().nullable(),\n isActive: z.boolean().optional(),\n})\n\nexport const staffTeamMemberUpdateSchema = z.object({\n ...scopedUpdateFields,\n teamId: z.string().uuid().optional().nullable(),\n displayName: z.string().min(1).optional(),\n description: z.string().optional().nullable(),\n userId: z.string().uuid().optional().nullable(),\n roleIds: z.array(z.string().uuid()).optional(),\n tags: z.array(z.string().min(1)).optional(),\n availabilityRuleSetId: z.string().uuid().optional().nullable(),\n isActive: z.boolean().optional(),\n})\n\nexport const staffTeamMemberActivityCreateSchema = z.object({\n ...scopedCreateFields,\n entityId: z.string().uuid(),\n activityType: z.string().min(1).max(100),\n subject: z.string().max(200).optional(),\n body: z.string().max(8000).optional(),\n occurredAt: z.coerce.date().optional(),\n authorUserId: z.string().uuid().optional(),\n appearanceIcon: z.string().trim().max(100).optional().nullable(),\n appearanceColor: z\n .string()\n .trim()\n .regex(/^#([0-9a-fA-F]{6})$/)\n .optional()\n .nullable(),\n})\n\nexport const staffTeamMemberActivityUpdateSchema = z\n .object({\n id: z.string().uuid(),\n })\n .merge(staffTeamMemberActivityCreateSchema.partial())\n\nexport const staffTeamMemberJobHistoryCreateSchema = z.object({\n ...scopedCreateFields,\n entityId: z.string().uuid(),\n name: z.string().min(1).max(200),\n companyName: z.string().max(200).optional().nullable(),\n description: z.string().max(2000).optional().nullable(),\n startDate: z.coerce.date(),\n endDate: z.coerce.date().optional().nullable(),\n})\n\nexport const staffTeamMemberJobHistoryUpdateSchema = z\n .object({\n id: z.string().uuid(),\n updatedAt: optimisticUpdatedAtSchema.optional(),\n })\n .merge(staffTeamMemberJobHistoryCreateSchema.partial())\n\nexport const staffTeamMemberCommentCreateSchema = z.object({\n ...scopedCreateFields,\n entityId: z.string().uuid(),\n body: z.string().min(1).max(8000),\n authorUserId: z.string().uuid().optional(),\n appearanceIcon: z.string().trim().max(100).optional().nullable(),\n appearanceColor: z\n .string()\n .trim()\n .regex(/^#([0-9a-fA-F]{6})$/)\n .optional()\n .nullable(),\n})\n\nexport const staffTeamMemberCommentUpdateSchema = z\n .object({\n id: z.string().uuid(),\n })\n .merge(staffTeamMemberCommentCreateSchema.partial())\n\nexport const staffTeamMemberAddressCreateSchema = z.object({\n ...scopedCreateFields,\n entityId: z.string().uuid(),\n name: z.string().max(150).optional(),\n purpose: z.string().max(150).optional(),\n companyName: z.string().max(200).optional(),\n addressLine1: z.string().min(1).max(300),\n addressLine2: z.string().max(300).optional(),\n buildingNumber: z.string().max(50).optional(),\n flatNumber: z.string().max(50).optional(),\n city: z.string().max(150).optional(),\n region: z.string().max(150).optional(),\n postalCode: z.string().max(30).optional(),\n country: z.string().max(150).optional(),\n latitude: z.coerce.number().optional(),\n longitude: z.coerce.number().optional(),\n isPrimary: z.boolean().optional(),\n})\n\nexport const staffTeamMemberAddressUpdateSchema = z\n .object({\n id: z.string().uuid(),\n })\n .merge(staffTeamMemberAddressCreateSchema.partial())\n\nexport const staffTeamMemberTagAssignmentSchema = z.object({\n ...scopedCreateFields,\n memberId: z.string().uuid(),\n tag: z.string().min(1),\n})\n\nconst staffLeaveRequestStatusSchema = z.enum(['pending', 'approved', 'rejected'])\n\nconst validateStaffLeaveRequestDateRange = (\n value: { startDate?: Date; endDate?: Date },\n ctx: z.RefinementCtx,\n) => {\n if (!value.startDate || !value.endDate) return\n if (value.endDate < value.startDate) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: 'End date must be after start date.',\n path: ['endDate'],\n })\n }\n}\n\nexport const staffLeaveRequestCreateSchema = z\n .object({\n ...scopedCreateFields,\n memberId: z.string().uuid(),\n timezone: z.string().min(1),\n startDate: z.coerce.date(),\n endDate: z.coerce.date(),\n unavailabilityReasonEntryId: z.string().uuid().optional().nullable(),\n unavailabilityReasonValue: z.string().trim().min(1).max(150).optional().nullable(),\n note: z.string().max(2000).optional().nullable(),\n submittedByUserId: z.string().uuid().optional().nullable(),\n })\n .superRefine(validateStaffLeaveRequestDateRange)\n\nexport const staffLeaveRequestUpdateSchema = z\n .object({\n ...scopedUpdateFields,\n timezone: z.string().min(1).optional(),\n memberId: z.string().uuid().optional(),\n startDate: z.coerce.date().optional(),\n endDate: z.coerce.date().optional(),\n unavailabilityReasonEntryId: z.string().uuid().optional().nullable(),\n unavailabilityReasonValue: z.string().trim().min(1).max(150).optional().nullable(),\n note: z.string().max(2000).optional().nullable(),\n })\n .superRefine(validateStaffLeaveRequestDateRange)\n\nexport const staffLeaveRequestDecisionSchema = z.object({\n id: z.string().uuid(),\n decisionComment: z.string().max(2000).optional().nullable(),\n decidedByUserId: z.string().uuid().optional().nullable(),\n})\n\nexport const staffTeamMemberSelfCreateSchema = z.object({\n ...scopedCreateFields,\n displayName: z.string().min(1),\n description: z.string().max(2000).optional().nullable(),\n})\n\nexport type StaffTeamCreateInput = z.infer<typeof staffTeamCreateSchema>\nexport type StaffTeamUpdateInput = z.infer<typeof staffTeamUpdateSchema>\nexport type StaffTeamRoleCreateInput = z.infer<typeof staffTeamRoleCreateSchema>\nexport type StaffTeamRoleUpdateInput = z.infer<typeof staffTeamRoleUpdateSchema>\nexport type StaffTeamMemberCreateInput = z.infer<typeof staffTeamMemberCreateSchema>\nexport type StaffTeamMemberUpdateInput = z.infer<typeof staffTeamMemberUpdateSchema>\nexport type StaffTeamMemberTagAssignmentInput = z.infer<typeof staffTeamMemberTagAssignmentSchema>\nexport type StaffTeamMemberActivityCreateInput = z.infer<typeof staffTeamMemberActivityCreateSchema>\nexport type StaffTeamMemberActivityUpdateInput = z.infer<typeof staffTeamMemberActivityUpdateSchema>\nexport type StaffTeamMemberJobHistoryCreateInput = z.infer<typeof staffTeamMemberJobHistoryCreateSchema>\nexport type StaffTeamMemberJobHistoryUpdateInput = z.infer<typeof staffTeamMemberJobHistoryUpdateSchema>\nexport type StaffTeamMemberCommentCreateInput = z.infer<typeof staffTeamMemberCommentCreateSchema>\nexport type StaffTeamMemberCommentUpdateInput = z.infer<typeof staffTeamMemberCommentUpdateSchema>\nexport type StaffTeamMemberAddressCreateInput = z.infer<typeof staffTeamMemberAddressCreateSchema>\nexport type StaffTeamMemberAddressUpdateInput = z.infer<typeof staffTeamMemberAddressUpdateSchema>\nexport type StaffLeaveRequestStatus = z.infer<typeof staffLeaveRequestStatusSchema>\nexport type StaffLeaveRequestCreateInput = z.infer<typeof staffLeaveRequestCreateSchema>\nexport type StaffLeaveRequestUpdateInput = z.infer<typeof staffLeaveRequestUpdateSchema>\nexport type StaffLeaveRequestDecisionInput = z.infer<typeof staffLeaveRequestDecisionSchema>\nexport type StaffTeamMemberSelfCreateInput = z.infer<typeof staffTeamMemberSelfCreateSchema>\n\n// --- Timesheets validators (Phase 1) ---\n\nconst timeEntrySourceSchema = z.enum(['manual', 'timer', 'kiosk', 'mobile'])\nconst timeProjectStatusSchema = z.enum(['active', 'on_hold', 'completed'])\nconst timeProjectMemberStatusSchema = z.enum(['active', 'inactive'])\nconst timeEntrySegmentTypeSchema = z.enum(['work', 'break'])\nconst projectCodeSchema = z.string().min(1).max(50).regex(/^[a-zA-Z0-9-]+$/)\n\nexport const staffTimeEntryCreateSchema = z.object({\n ...scopedCreateFields,\n staffMemberId: z.string().uuid(),\n date: z.coerce.date(),\n durationMinutes: z.number().int().min(0).max(1440),\n startedAt: z.coerce.date().optional().nullable(),\n endedAt: z.coerce.date().optional().nullable(),\n timeProjectId: z.string().uuid().optional().nullable(),\n customerId: z.string().uuid().optional().nullable(),\n dealId: z.string().uuid().optional().nullable(),\n orderId: z.string().uuid().optional().nullable(),\n notes: z.string().max(2000).optional().nullable(),\n source: timeEntrySourceSchema.optional().default('manual'),\n})\n\nexport const staffTimeEntryUpdateSchema = z.object({\n ...scopedUpdateFields,\n date: z.coerce.date().optional(),\n durationMinutes: z.number().int().min(0).max(1440).optional(),\n timeProjectId: z.string().uuid().optional().nullable(),\n customerId: z.string().uuid().optional().nullable(),\n dealId: z.string().uuid().optional().nullable(),\n orderId: z.string().uuid().optional().nullable(),\n notes: z.string().max(2000).optional().nullable(),\n})\n\nexport const staffTimeEntryStartTimerSchema = z.object({\n ...scopedCreateFields,\n staffMemberId: z.string().uuid(),\n date: z.coerce.date(),\n timeProjectId: z.string().uuid().optional().nullable(),\n notes: z.string().max(2000).optional().nullable(),\n})\n\nexport const staffTimeEntryBulkItemSchema = z.object({\n id: z.string().uuid().optional().nullable(),\n date: z.coerce.date(),\n timeProjectId: z.string().uuid(),\n durationMinutes: z.number().int().min(0).max(1440),\n notes: z.string().max(2000).optional().nullable(),\n})\n\nexport const staffTimeEntryBulkSaveSchema = z.object({\n entries: z.array(staffTimeEntryBulkItemSchema).min(1).max(200),\n})\n\nexport const staffTimeEntrySegmentCreateSchema = z.object({\n ...scopedCreateFields,\n timeEntryId: z.string().uuid(),\n startedAt: z.coerce.date(),\n endedAt: z.coerce.date().optional().nullable(),\n segmentType: timeEntrySegmentTypeSchema.optional().default('work'),\n})\n\nexport const staffTimeEntrySegmentUpdateSchema = z.object({\n ...scopedUpdateFields,\n startedAt: z.coerce.date().optional(),\n endedAt: z.coerce.date().optional().nullable(),\n segmentType: timeEntrySegmentTypeSchema.optional(),\n})\n\nexport const staffTimeProjectCreateSchema = z.object({\n ...scopedCreateFields,\n name: z.string().min(1).max(255),\n customerId: z.string().uuid().optional().nullable(),\n code: projectCodeSchema,\n description: z.string().max(2000).optional().nullable(),\n projectType: z.string().max(100).optional().nullable(),\n color: projectColorSchema.optional().nullable(),\n status: timeProjectStatusSchema.optional().default('active'),\n ownerUserId: z.string().uuid().optional().nullable(),\n costCenter: z.string().max(100).optional().nullable(),\n startDate: z.coerce.date().optional().nullable(),\n})\n\nexport const staffTimeProjectUpdateSchema = z.object({\n ...scopedUpdateFields,\n name: z.string().min(1).max(255).optional(),\n customerId: z.string().uuid().optional().nullable(),\n code: projectCodeSchema.optional(),\n description: z.string().max(2000).optional().nullable(),\n projectType: z.string().max(100).optional().nullable(),\n color: projectColorSchema.optional().nullable(),\n status: timeProjectStatusSchema.optional(),\n ownerUserId: z.string().uuid().optional().nullable(),\n costCenter: z.string().max(100).optional().nullable(),\n startDate: z.coerce.date().optional().nullable(),\n})\n\nexport const staffTimeProjectMemberAssignSchema = z.object({\n ...scopedCreateFields,\n timeProjectId: z.string().uuid(),\n staffMemberId: z.string().uuid(),\n role: z.string().max(100).optional().nullable(),\n status: timeProjectMemberStatusSchema.optional().default('active'),\n assignedStartDate: z.coerce.date(),\n assignedEndDate: z.coerce.date().optional().nullable(),\n})\n\nexport const staffTimeProjectMemberUpdateSchema = z.object({\n ...scopedUpdateFields,\n role: z.string().max(100).optional().nullable(),\n status: timeProjectMemberStatusSchema.optional(),\n assignedEndDate: z.coerce.date().optional().nullable(),\n})\n\nexport const staffMyProjectVisibilityUpdateSchema = z.object({\n showInGrid: z.boolean(),\n})\n\nexport type StaffTimeEntryCreateInput = z.infer<typeof staffTimeEntryCreateSchema>\nexport type StaffTimeEntryUpdateInput = z.infer<typeof staffTimeEntryUpdateSchema>\nexport type StaffTimeEntryStartTimerInput = z.infer<typeof staffTimeEntryStartTimerSchema>\nexport type StaffTimeEntryBulkSaveInput = z.infer<typeof staffTimeEntryBulkSaveSchema>\nexport type StaffTimeEntrySegmentCreateInput = z.infer<typeof staffTimeEntrySegmentCreateSchema>\nexport type StaffTimeEntrySegmentUpdateInput = z.infer<typeof staffTimeEntrySegmentUpdateSchema>\nexport type StaffTimeProjectCreateInput = z.infer<typeof staffTimeProjectCreateSchema>\nexport type StaffTimeProjectUpdateInput = z.infer<typeof staffTimeProjectUpdateSchema>\nexport type StaffTimeProjectMemberAssignInput = z.infer<typeof staffTimeProjectMemberAssignSchema>\nexport type StaffTimeProjectMemberUpdateInput = z.infer<typeof staffTimeProjectMemberUpdateSchema>\nexport type StaffMyProjectVisibilityUpdateInput = z.infer<typeof staffMyProjectVisibilityUpdateSchema>\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { z } from 'zod'\nimport { PROJECT_COLOR_KEYS } from '../lib/timesheets-ui/colors'\nimport { hasTimeEntrySource, timeEntrySourceIds } from '../lib/time-tracking/timeEntrySources'\nimport { hasReportGrouping, reportGroupingIds } from '../lib/timesheets-reports/reportGroupings'\nimport {\n buildTimeTrackingSettingsSchema,\n timeTrackingRoundingDirectionSchema,\n timeTrackingRoundingUnitMinutesSchema,\n} from '../lib/time-tracking/settingKeys'\n\nconst projectColorSchema = z\n .string()\n .refine(\n (value) => (PROJECT_COLOR_KEYS as readonly string[]).includes(value),\n { message: 'Invalid project color key.' },\n )\n\nconst tagsSchema = z.array(z.string().min(1)).optional().default([])\n\nexport const optimisticUpdatedAtSchema = z.string().refine(\n (value) => !Number.isNaN(new Date(value).getTime()),\n { message: 'Invalid datetime' },\n)\n\nconst scopedCreateFields = {\n tenantId: z.string().uuid(),\n organizationId: z.string().uuid(),\n}\n\nconst scopedUpdateFields = {\n id: z.string().uuid(),\n}\n\nexport const staffTeamCreateSchema = z.object({\n ...scopedCreateFields,\n name: z.string().min(1),\n description: z.string().optional().nullable(),\n isActive: z.boolean().optional(),\n})\n\nexport const staffTeamUpdateSchema = z.object({\n ...scopedUpdateFields,\n name: z.string().min(1).optional(),\n description: z.string().optional().nullable(),\n isActive: z.boolean().optional(),\n})\n\nexport const staffTeamRoleCreateSchema = z.object({\n ...scopedCreateFields,\n teamId: z.string().uuid().optional().nullable(),\n name: z.string().min(1),\n description: z.string().optional().nullable(),\n appearanceIcon: z.string().trim().max(100).optional().nullable(),\n appearanceColor: z\n .string()\n .trim()\n .regex(/^#([0-9a-fA-F]{6})$/)\n .optional()\n .nullable(),\n})\n\nexport const staffTeamRoleUpdateSchema = z.object({\n ...scopedUpdateFields,\n teamId: z.string().uuid().optional().nullable(),\n name: z.string().min(1).optional(),\n description: z.string().optional().nullable(),\n appearanceIcon: z.string().trim().max(100).optional().nullable(),\n appearanceColor: z\n .string()\n .trim()\n .regex(/^#([0-9a-fA-F]{6})$/)\n .optional()\n .nullable(),\n})\n\nexport const staffTeamMemberCreateSchema = z.object({\n ...scopedCreateFields,\n teamId: z.string().uuid().optional().nullable(),\n displayName: z.string().min(1),\n description: z.string().optional().nullable(),\n userId: z.string().uuid().optional().nullable(),\n roleIds: z.array(z.string().uuid()).optional().default([]),\n tags: tagsSchema,\n availabilityRuleSetId: z.string().uuid().optional().nullable(),\n isActive: z.boolean().optional(),\n})\n\nexport const staffTeamMemberUpdateSchema = z.object({\n ...scopedUpdateFields,\n teamId: z.string().uuid().optional().nullable(),\n displayName: z.string().min(1).optional(),\n description: z.string().optional().nullable(),\n userId: z.string().uuid().optional().nullable(),\n roleIds: z.array(z.string().uuid()).optional(),\n tags: z.array(z.string().min(1)).optional(),\n availabilityRuleSetId: z.string().uuid().optional().nullable(),\n isActive: z.boolean().optional(),\n})\n\nexport const staffTeamMemberActivityCreateSchema = z.object({\n ...scopedCreateFields,\n entityId: z.string().uuid(),\n activityType: z.string().min(1).max(100),\n subject: z.string().max(200).optional(),\n body: z.string().max(8000).optional(),\n occurredAt: z.coerce.date().optional(),\n authorUserId: z.string().uuid().optional(),\n appearanceIcon: z.string().trim().max(100).optional().nullable(),\n appearanceColor: z\n .string()\n .trim()\n .regex(/^#([0-9a-fA-F]{6})$/)\n .optional()\n .nullable(),\n})\n\nexport const staffTeamMemberActivityUpdateSchema = z\n .object({\n id: z.string().uuid(),\n })\n .merge(staffTeamMemberActivityCreateSchema.partial())\n\nexport const staffTeamMemberJobHistoryCreateSchema = z.object({\n ...scopedCreateFields,\n entityId: z.string().uuid(),\n name: z.string().min(1).max(200),\n companyName: z.string().max(200).optional().nullable(),\n description: z.string().max(2000).optional().nullable(),\n startDate: z.coerce.date(),\n endDate: z.coerce.date().optional().nullable(),\n})\n\nexport const staffTeamMemberJobHistoryUpdateSchema = z\n .object({\n id: z.string().uuid(),\n updatedAt: optimisticUpdatedAtSchema.optional(),\n })\n .merge(staffTeamMemberJobHistoryCreateSchema.partial())\n\nexport const staffTeamMemberCommentCreateSchema = z.object({\n ...scopedCreateFields,\n entityId: z.string().uuid(),\n body: z.string().min(1).max(8000),\n authorUserId: z.string().uuid().optional(),\n appearanceIcon: z.string().trim().max(100).optional().nullable(),\n appearanceColor: z\n .string()\n .trim()\n .regex(/^#([0-9a-fA-F]{6})$/)\n .optional()\n .nullable(),\n})\n\nexport const staffTeamMemberCommentUpdateSchema = z\n .object({\n id: z.string().uuid(),\n })\n .merge(staffTeamMemberCommentCreateSchema.partial())\n\nexport const staffTeamMemberAddressCreateSchema = z.object({\n ...scopedCreateFields,\n entityId: z.string().uuid(),\n name: z.string().max(150).optional(),\n purpose: z.string().max(150).optional(),\n companyName: z.string().max(200).optional(),\n addressLine1: z.string().min(1).max(300),\n addressLine2: z.string().max(300).optional(),\n buildingNumber: z.string().max(50).optional(),\n flatNumber: z.string().max(50).optional(),\n city: z.string().max(150).optional(),\n region: z.string().max(150).optional(),\n postalCode: z.string().max(30).optional(),\n country: z.string().max(150).optional(),\n latitude: z.coerce.number().optional(),\n longitude: z.coerce.number().optional(),\n isPrimary: z.boolean().optional(),\n})\n\nexport const staffTeamMemberAddressUpdateSchema = z\n .object({\n id: z.string().uuid(),\n })\n .merge(staffTeamMemberAddressCreateSchema.partial())\n\nexport const staffTeamMemberTagAssignmentSchema = z.object({\n ...scopedCreateFields,\n memberId: z.string().uuid(),\n tag: z.string().min(1),\n})\n\nconst staffLeaveRequestStatusSchema = z.enum(['pending', 'approved', 'rejected'])\n\nconst validateStaffLeaveRequestDateRange = (\n value: { startDate?: Date; endDate?: Date },\n ctx: z.RefinementCtx,\n) => {\n if (!value.startDate || !value.endDate) return\n if (value.endDate < value.startDate) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: 'End date must be after start date.',\n path: ['endDate'],\n })\n }\n}\n\nexport const staffLeaveRequestCreateSchema = z\n .object({\n ...scopedCreateFields,\n memberId: z.string().uuid(),\n timezone: z.string().min(1),\n startDate: z.coerce.date(),\n endDate: z.coerce.date(),\n unavailabilityReasonEntryId: z.string().uuid().optional().nullable(),\n unavailabilityReasonValue: z.string().trim().min(1).max(150).optional().nullable(),\n note: z.string().max(2000).optional().nullable(),\n submittedByUserId: z.string().uuid().optional().nullable(),\n })\n .superRefine(validateStaffLeaveRequestDateRange)\n\nexport const staffLeaveRequestUpdateSchema = z\n .object({\n ...scopedUpdateFields,\n timezone: z.string().min(1).optional(),\n memberId: z.string().uuid().optional(),\n startDate: z.coerce.date().optional(),\n endDate: z.coerce.date().optional(),\n unavailabilityReasonEntryId: z.string().uuid().optional().nullable(),\n unavailabilityReasonValue: z.string().trim().min(1).max(150).optional().nullable(),\n note: z.string().max(2000).optional().nullable(),\n })\n .superRefine(validateStaffLeaveRequestDateRange)\n\nexport const staffLeaveRequestDecisionSchema = z.object({\n id: z.string().uuid(),\n decisionComment: z.string().max(2000).optional().nullable(),\n decidedByUserId: z.string().uuid().optional().nullable(),\n})\n\nexport const staffTeamMemberSelfCreateSchema = z.object({\n ...scopedCreateFields,\n displayName: z.string().min(1),\n description: z.string().max(2000).optional().nullable(),\n})\n\nexport type StaffTeamCreateInput = z.infer<typeof staffTeamCreateSchema>\nexport type StaffTeamUpdateInput = z.infer<typeof staffTeamUpdateSchema>\nexport type StaffTeamRoleCreateInput = z.infer<typeof staffTeamRoleCreateSchema>\nexport type StaffTeamRoleUpdateInput = z.infer<typeof staffTeamRoleUpdateSchema>\nexport type StaffTeamMemberCreateInput = z.infer<typeof staffTeamMemberCreateSchema>\nexport type StaffTeamMemberUpdateInput = z.infer<typeof staffTeamMemberUpdateSchema>\nexport type StaffTeamMemberTagAssignmentInput = z.infer<typeof staffTeamMemberTagAssignmentSchema>\nexport type StaffTeamMemberActivityCreateInput = z.infer<typeof staffTeamMemberActivityCreateSchema>\nexport type StaffTeamMemberActivityUpdateInput = z.infer<typeof staffTeamMemberActivityUpdateSchema>\nexport type StaffTeamMemberJobHistoryCreateInput = z.infer<typeof staffTeamMemberJobHistoryCreateSchema>\nexport type StaffTeamMemberJobHistoryUpdateInput = z.infer<typeof staffTeamMemberJobHistoryUpdateSchema>\nexport type StaffTeamMemberCommentCreateInput = z.infer<typeof staffTeamMemberCommentCreateSchema>\nexport type StaffTeamMemberCommentUpdateInput = z.infer<typeof staffTeamMemberCommentUpdateSchema>\nexport type StaffTeamMemberAddressCreateInput = z.infer<typeof staffTeamMemberAddressCreateSchema>\nexport type StaffTeamMemberAddressUpdateInput = z.infer<typeof staffTeamMemberAddressUpdateSchema>\nexport type StaffLeaveRequestStatus = z.infer<typeof staffLeaveRequestStatusSchema>\nexport type StaffLeaveRequestCreateInput = z.infer<typeof staffLeaveRequestCreateSchema>\nexport type StaffLeaveRequestUpdateInput = z.infer<typeof staffLeaveRequestUpdateSchema>\nexport type StaffLeaveRequestDecisionInput = z.infer<typeof staffLeaveRequestDecisionSchema>\nexport type StaffTeamMemberSelfCreateInput = z.infer<typeof staffTeamMemberSelfCreateSchema>\n\n// --- Timesheets validators (Phase 1) ---\n\n/**\n * EP-37: validated against the time-entry source registry rather than a literal\n * enum, so a contributed source is accepted on write the moment its module is\n * enabled. `superRefine` rather than `z.enum(...)` because the accepted set is\n * only known at call time.\n */\nconst timeEntrySourceSchema = z\n .string()\n .superRefine((value, ctx) => {\n if (hasTimeEntrySource(value)) return\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `[internal] unknown time entry source: ${value}`,\n params: { accepted: timeEntrySourceIds() },\n })\n })\nconst timeProjectStatusSchema = z.enum(['active', 'on_hold', 'completed'])\nconst timeProjectMemberStatusSchema = z.enum(['active', 'inactive'])\nconst timeEntrySegmentTypeSchema = z.enum(['work', 'break'])\nconst projectCodeSchema = z.string().min(1).max(50).regex(/^[a-zA-Z0-9-]+$/)\nconst moneyAmountSchema = z.number().min(0).max(99_999_999)\nconst timeProjectBudgetKindSchema = z.enum(['none', 'hours', 'amount'])\n\n// Upper-cased at the boundary so every writer stores canonical ISO 4217. The report\n// single-currency assertion compares codes case-sensitively, so `pln` and `PLN` would\n// otherwise read as two currencies and wrongly block a customer report.\nconst currencyCodeSchema = z.string().trim().length(3).transform((value) => value.toUpperCase())\n\n// numeric(14,4): ten integer digits, four decimals, never negative.\nconst numericAmountPattern = /^\\d{1,10}(?:\\.\\d{1,4})?$/\n\n/**\n * `numeric(14,4)` columns are surfaced by MikroORM as strings, and the project\n * form posts a typed decimal string, so the canonical representation for a stored\n * amount is a STRING end to end \u2014 a JSON number would push a 14-significant-digit\n * amount through a float on the way in. Plain numbers stay accepted for API\n * callers and are normalized to the same decimal string. (Entry-level money keeps\n * `moneyAmountSchema` above: `rate_override_amount` is consumed by the cost\n * calculator as a number, not written straight onto a numeric column.)\n */\nconst numericAmountSchema = z\n .union([z.number(), z.string()])\n .transform((value, ctx) => {\n const raw = typeof value === 'number' ? String(value) : value.trim().replace(',', '.')\n if (raw.length === 0) return null\n if (!numericAmountPattern.test(raw)) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: 'Expected a non-negative amount with at most 10 digits and 4 decimals.',\n })\n return z.NEVER\n }\n return raw\n })\n\nexport const staffTimeEntryCreateSchema = z.object({\n ...scopedCreateFields,\n staffMemberId: z.string().uuid(),\n date: z.coerce.date(),\n durationMinutes: z.number().int().min(0).max(1440),\n startedAt: z.coerce.date().optional().nullable(),\n endedAt: z.coerce.date().optional().nullable(),\n timeProjectId: z.string().uuid().optional().nullable(),\n customerId: z.string().uuid().optional().nullable(),\n dealId: z.string().uuid().optional().nullable(),\n orderId: z.string().uuid().optional().nullable(),\n notes: z.string().max(2000).optional().nullable(),\n source: timeEntrySourceSchema.optional().default('manual'),\n taskId: z.string().uuid().optional().nullable(),\n description: z.string().max(2000).optional().nullable(),\n isBillable: z.boolean().optional(),\n tagIds: z.array(z.string().uuid()).max(50).optional(),\n rateOverrideAmount: moneyAmountSchema.optional().nullable(),\n})\n\n/**\n * `startedAt` / `endedAt` mirror the create schema key for key: without them zod\n * strips the two clocks the entry form sends on every save, so correcting a start\n * or an end reported success and changed nothing. Nullable because clearing a\n * clock is a real edit, optional because omitting one must leave it alone \u2014 the\n * update command reads `undefined` as \"not part of this write\" and `null` as\n * \"clear it\". US-D3 keeps the three time fields consistent in the command, not\n * here: a request may legitimately carry all three and let the clocks win.\n */\nexport const staffTimeEntryUpdateSchema = z.object({\n ...scopedUpdateFields,\n date: z.coerce.date().optional(),\n durationMinutes: z.number().int().min(0).max(1440).optional(),\n startedAt: z.coerce.date().optional().nullable(),\n endedAt: z.coerce.date().optional().nullable(),\n timeProjectId: z.string().uuid().optional().nullable(),\n customerId: z.string().uuid().optional().nullable(),\n dealId: z.string().uuid().optional().nullable(),\n orderId: z.string().uuid().optional().nullable(),\n notes: z.string().max(2000).optional().nullable(),\n taskId: z.string().uuid().optional().nullable(),\n description: z.string().max(2000).optional().nullable(),\n isBillable: z.boolean().optional(),\n tagIds: z.array(z.string().uuid()).max(50).optional(),\n rateOverrideAmount: moneyAmountSchema.optional().nullable(),\n})\n\n/**\n * `taskId` is what makes starting a timer from a board card or the task drawer a\n * single write. Without it the surface has to start a project-level timer and\n * then PATCH the task onto it, and a failure between the two leaves a running\n * timer filed against the wrong thing.\n */\nexport const staffTimeEntryStartTimerSchema = z.object({\n ...scopedCreateFields,\n staffMemberId: z.string().uuid(),\n date: z.coerce.date(),\n timeProjectId: z.string().uuid().optional().nullable(),\n taskId: z.string().uuid().optional().nullable(),\n notes: z.string().max(2000).optional().nullable(),\n})\n\nexport const staffTimeEntryBulkItemSchema = z.object({\n id: z.string().uuid().optional().nullable(),\n date: z.coerce.date(),\n // Optional only because a task carries its project: a row naming a `taskId`\n // inherits the project from it, exactly as the single-entry path does. The\n // route refuses a row that names neither with `staff.timesheets.errors.projectRequired`,\n // so every stored row still lands on a project \u2014 the (project, date) cell the\n // lock gate addresses is never blank.\n timeProjectId: z.string().uuid().optional().nullable(),\n durationMinutes: z.number().int().min(0).max(1440),\n notes: z.string().max(2000).optional().nullable(),\n taskId: z.string().uuid().optional().nullable(),\n description: z.string().max(2000).optional().nullable(),\n isBillable: z.boolean().optional(),\n // Accepted by the schema and REFUSED by the route with 422: assigning tags\n // means dispatching the tag commands, which fork their own EntityManager and\n // cannot participate in this route's per-row transaction. Kept in the schema\n // so the refusal is explicit \u2014 dropping the key would let zod strip it and\n // restore the silent no-op.\n tagIds: z.array(z.string().uuid()).max(50).optional(),\n rateOverrideAmount: moneyAmountSchema.optional().nullable(),\n})\n\nexport const staffTimeEntryBulkSaveSchema = z.object({\n entries: z.array(staffTimeEntryBulkItemSchema).min(1).max(200),\n})\n\nexport const staffTimeEntrySegmentCreateSchema = z.object({\n ...scopedCreateFields,\n timeEntryId: z.string().uuid(),\n startedAt: z.coerce.date(),\n endedAt: z.coerce.date().optional().nullable(),\n segmentType: timeEntrySegmentTypeSchema.optional().default('work'),\n})\n\nexport const staffTimeEntrySegmentUpdateSchema = z.object({\n ...scopedUpdateFields,\n startedAt: z.coerce.date().optional(),\n endedAt: z.coerce.date().optional().nullable(),\n segmentType: timeEntrySegmentTypeSchema.optional(),\n})\n\nexport const staffTimeProjectCreateSchema = z.object({\n ...scopedCreateFields,\n name: z.string().min(1).max(255),\n // D-9 / US-B1: time is organised per customer, so a new project always names one.\n // Rows created before this change keep their null customer and stay editable\n // (see the update schema below), which is why only create is constrained.\n customerId: z.string().uuid(),\n customerSnapshot: z.record(z.string(), z.unknown()).optional().nullable(),\n code: projectCodeSchema,\n description: z.string().max(2000).optional().nullable(),\n projectType: z.string().max(100).optional().nullable(),\n color: projectColorSchema.optional().nullable(),\n status: timeProjectStatusSchema.optional().default('active'),\n ownerUserId: z.string().uuid().optional().nullable(),\n costCenter: z.string().max(100).optional().nullable(),\n startDate: z.coerce.date().optional().nullable(),\n hourlyRate: numericAmountSchema.optional().nullable(),\n // D-3: the currency may be chosen once, at creation. Every later change goes\n // through `POST .../change-currency`, which carries the non-conversion\n // acknowledgement and refuses while entries sit frozen in a closed report.\n currencyCode: currencyCodeSchema.optional().nullable(),\n billableByDefault: z.boolean().optional(),\n budgetKind: timeProjectBudgetKindSchema.optional().default('none'),\n budgetValue: numericAmountSchema.optional().nullable(),\n budgetWarnAtPercent: z.number().int().min(1).max(100).optional(),\n})\n\n/**\n * Deliberately has NO `currencyCode`: D-3 routes every post-creation currency\n * change through the dedicated change-currency action, so a plain PUT that\n * carries the key has it stripped here rather than relabelling the project\n * behind the acknowledgement and the locked-entry check.\n */\nexport const staffTimeProjectUpdateSchema = z.object({\n ...scopedUpdateFields,\n name: z.string().min(1).max(255).optional(),\n customerId: z.string().uuid().optional().nullable(),\n customerSnapshot: z.record(z.string(), z.unknown()).optional().nullable(),\n code: projectCodeSchema.optional(),\n description: z.string().max(2000).optional().nullable(),\n projectType: z.string().max(100).optional().nullable(),\n color: projectColorSchema.optional().nullable(),\n status: timeProjectStatusSchema.optional(),\n ownerUserId: z.string().uuid().optional().nullable(),\n costCenter: z.string().max(100).optional().nullable(),\n startDate: z.coerce.date().optional().nullable(),\n hourlyRate: numericAmountSchema.optional().nullable(),\n billableByDefault: z.boolean().optional(),\n budgetKind: timeProjectBudgetKindSchema.optional(),\n budgetValue: numericAmountSchema.optional().nullable(),\n budgetWarnAtPercent: z.number().int().min(1).max(100).optional(),\n})\n\nexport const staffTimeProjectMemberAssignSchema = z.object({\n ...scopedCreateFields,\n timeProjectId: z.string().uuid(),\n staffMemberId: z.string().uuid(),\n role: z.string().max(100).optional().nullable(),\n status: timeProjectMemberStatusSchema.optional().default('active'),\n assignedStartDate: z.coerce.date(),\n assignedEndDate: z.coerce.date().optional().nullable(),\n})\n\nexport const staffTimeProjectMemberUpdateSchema = z.object({\n ...scopedUpdateFields,\n role: z.string().max(100).optional().nullable(),\n status: timeProjectMemberStatusSchema.optional(),\n assignedEndDate: z.coerce.date().optional().nullable(),\n})\n\nexport const staffMyProjectVisibilityUpdateSchema = z.object({\n showInGrid: z.boolean(),\n})\n\nexport type StaffTimeEntryCreateInput = z.infer<typeof staffTimeEntryCreateSchema>\nexport type StaffTimeEntryUpdateInput = z.infer<typeof staffTimeEntryUpdateSchema>\nexport type StaffTimeEntryStartTimerInput = z.infer<typeof staffTimeEntryStartTimerSchema>\nexport type StaffTimeEntryBulkSaveInput = z.infer<typeof staffTimeEntryBulkSaveSchema>\nexport type StaffTimeEntrySegmentCreateInput = z.infer<typeof staffTimeEntrySegmentCreateSchema>\nexport type StaffTimeEntrySegmentUpdateInput = z.infer<typeof staffTimeEntrySegmentUpdateSchema>\nexport type StaffTimeProjectCreateInput = z.infer<typeof staffTimeProjectCreateSchema>\nexport type StaffTimeProjectUpdateInput = z.infer<typeof staffTimeProjectUpdateSchema>\nexport type StaffTimeProjectMemberAssignInput = z.infer<typeof staffTimeProjectMemberAssignSchema>\nexport type StaffTimeProjectMemberUpdateInput = z.infer<typeof staffTimeProjectMemberUpdateSchema>\nexport type StaffMyProjectVisibilityUpdateInput = z.infer<typeof staffMyProjectVisibilityUpdateSchema>\n\n// --- Time tracking consulting suite validators (tasks, tags, reports, settings) ---\n\nconst timeSlugSchema = z.string().trim().min(1).max(60).regex(/^[a-z0-9]+(?:-[a-z0-9]+)*$/)\nconst timeReportPeriodKindSchema = z.enum(['week', 'month', 'year', 'custom'])\n/** EP-36: validated against the report grouping registry, not a literal enum. */\nconst timeReportGroupingSchema = z\n .string()\n .superRefine((value, ctx) => {\n if (hasReportGrouping(value)) return\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: `[internal] unknown report grouping: ${value}`,\n params: { accepted: reportGroupingIds() },\n })\n })\nconst timeReportNonbillableModeSchema = z.enum(['separate', 'exclude'])\nconst timeRoundingDirectionSchema = timeTrackingRoundingDirectionSchema\nconst timeRoundingUnitMinutesSchema = timeTrackingRoundingUnitMinutesSchema\nconst positionSchema = z.number().int().min(0).max(1_000_000)\n\nexport const staffTimeTaskStatusCreateSchema = z.object({\n ...scopedCreateFields,\n timeProjectId: z.string().uuid(),\n name: z.string().trim().min(1).max(100),\n slug: timeSlugSchema.optional(),\n color: projectColorSchema.optional().nullable(),\n position: positionSchema.optional(),\n isDefault: z.boolean().optional(),\n isDone: z.boolean().optional(),\n})\n\nexport const staffTimeTaskStatusUpdateSchema = z.object({\n ...scopedUpdateFields,\n name: z.string().trim().min(1).max(100).optional(),\n color: projectColorSchema.optional().nullable(),\n position: positionSchema.optional(),\n isDefault: z.boolean().optional(),\n isDone: z.boolean().optional(),\n})\n\nexport const staffTimeTaskStatusReorderSchema = z.object({\n statuses: z\n .array(\n z.object({\n id: z.string().uuid(),\n position: positionSchema,\n }),\n )\n .min(1)\n .max(100),\n})\n\nexport const staffTimeTaskCreateSchema = z.object({\n ...scopedCreateFields,\n timeProjectId: z.string().uuid(),\n parentTaskId: z.string().uuid().optional().nullable(),\n taskStatusId: z.string().uuid().optional().nullable(),\n title: z.string().trim().min(1).max(255),\n description: z.string().max(8000).optional().nullable(),\n assigneeStaffMemberId: z.string().uuid().optional().nullable(),\n position: positionSchema.optional(),\n tagIds: z.array(z.string().uuid()).max(50).optional(),\n})\n\nexport const staffTimeTaskUpdateSchema = z.object({\n ...scopedUpdateFields,\n parentTaskId: z.string().uuid().optional().nullable(),\n taskStatusId: z.string().uuid().optional(),\n title: z.string().trim().min(1).max(255).optional(),\n description: z.string().max(8000).optional().nullable(),\n assigneeStaffMemberId: z.string().uuid().optional().nullable(),\n position: positionSchema.optional(),\n tagIds: z.array(z.string().uuid()).max(50).optional(),\n})\n\nexport const staffTimeTaskStatusChangeSchema = z.object({\n taskStatusId: z.string().uuid(),\n position: positionSchema.optional(),\n})\n\nexport const staffTimeTaskCommentCreateSchema = z.object({\n ...scopedCreateFields,\n taskId: z.string().uuid(),\n body: z.string().trim().min(1).max(5000),\n authorUserId: z.string().uuid().optional().nullable(),\n})\n\nexport const staffTimeTaskCommentUpdateSchema = z.object({\n ...scopedUpdateFields,\n body: z.string().trim().min(1).max(5000),\n})\n\nexport const staffTimeTagCreateSchema = z.object({\n ...scopedCreateFields,\n slug: timeSlugSchema,\n label: z.string().trim().min(1).max(100),\n color: projectColorSchema.optional().nullable(),\n})\n\nexport const staffTimeTaskTagAssignmentSchema = z.object({\n ...scopedCreateFields,\n taskId: z.string().uuid(),\n tagIds: z.array(z.string().uuid()).max(50),\n})\n\nexport const staffTimeEntryTagAssignmentSchema = z.object({\n ...scopedCreateFields,\n timeEntryId: z.string().uuid(),\n tagIds: z.array(z.string().uuid()).max(50),\n})\n\nconst validateStaffTimeReportPeriod = (\n value: { periodFrom?: Date; periodTo?: Date },\n ctx: z.RefinementCtx,\n) => {\n if (!value.periodFrom || !value.periodTo) return\n if (value.periodTo < value.periodFrom) {\n ctx.addIssue({\n code: z.ZodIssueCode.custom,\n message: 'Period end must be after period start.',\n path: ['periodTo'],\n })\n }\n}\n\nexport const staffTimeReportCreateSchema = z\n .object({\n ...scopedCreateFields,\n customerId: z.string().uuid(),\n title: z.string().trim().min(1).max(255),\n periodKind: timeReportPeriodKindSchema,\n periodFrom: z.coerce.date(),\n periodTo: z.coerce.date(),\n grouping: timeReportGroupingSchema.optional().default('project_task'),\n nonbillableMode: timeReportNonbillableModeSchema.optional().default('separate'),\n includeAlreadyReported: z.boolean().optional().default(false),\n showRates: z.boolean().optional().default(true),\n timeProjectIds: z.array(z.string().uuid()).min(1).max(100),\n })\n .superRefine(validateStaffTimeReportPeriod)\n\nexport const staffTimeReportUpdateSchema = z\n .object({\n ...scopedUpdateFields,\n customerId: z.string().uuid().optional(),\n title: z.string().trim().min(1).max(255).optional(),\n periodKind: timeReportPeriodKindSchema.optional(),\n periodFrom: z.coerce.date().optional(),\n periodTo: z.coerce.date().optional(),\n grouping: timeReportGroupingSchema.optional(),\n nonbillableMode: timeReportNonbillableModeSchema.optional(),\n includeAlreadyReported: z.boolean().optional(),\n showRates: z.boolean().optional(),\n timeProjectIds: z.array(z.string().uuid()).min(1).max(100).optional(),\n })\n .superRefine(validateStaffTimeReportPeriod)\n\nexport const staffTimeReportPreviewSchema = z\n .object({\n customerId: z.string().uuid().optional().nullable(),\n periodKind: timeReportPeriodKindSchema.optional().default('custom'),\n periodFrom: z.coerce.date(),\n periodTo: z.coerce.date(),\n grouping: timeReportGroupingSchema.optional().default('project_task'),\n nonbillableMode: timeReportNonbillableModeSchema.optional().default('separate'),\n includeAlreadyReported: z.boolean().optional().default(false),\n showRates: z.boolean().optional().default(true),\n timeProjectIds: z.array(z.string().uuid()).min(1).max(100),\n })\n .superRefine(validateStaffTimeReportPeriod)\n\nexport const staffTimeReportCloseSchema = z.object({\n id: z.string().uuid(),\n})\n\nexport const staffTimeReportUnlockSchema = z.object({\n id: z.string().uuid(),\n reason: z.string().trim().min(1).max(2000),\n})\n\nexport const staffTimeProjectChangeCurrencySchema = z.object({\n currencyCode: currencyCodeSchema,\n acknowledged: z.literal(true),\n})\n\n/**\n * EP-42 \u2014 built from the setting-key registry rather than a literal, so a module can\n * contribute a key without patching this file. With no contribution the shape is the\n * eight built-in keys in their five groups, exactly as it was.\n *\n * This constant is evaluated once at module load. A key registered later still\n * validates on the wire because the settings route parses with\n * `buildTimeTrackingSettingsSchema()` per request and publishes it through an\n * OpenAPI getter.\n */\nexport const staffTimeTrackingSettingsSchema = buildTimeTrackingSettingsSchema()\n\nexport type StaffTimeReportPeriodKind = z.infer<typeof timeReportPeriodKindSchema>\nexport type StaffTimeReportGrouping = z.infer<typeof timeReportGroupingSchema>\nexport type StaffTimeReportNonbillableMode = z.infer<typeof timeReportNonbillableModeSchema>\nexport type StaffTimeRoundingDirection = z.infer<typeof timeRoundingDirectionSchema>\nexport type StaffTimeRoundingUnitMinutes = z.infer<typeof timeRoundingUnitMinutesSchema>\nexport type StaffTimeTaskStatusCreateInput = z.infer<typeof staffTimeTaskStatusCreateSchema>\nexport type StaffTimeTaskStatusUpdateInput = z.infer<typeof staffTimeTaskStatusUpdateSchema>\nexport type StaffTimeTaskStatusReorderInput = z.infer<typeof staffTimeTaskStatusReorderSchema>\nexport type StaffTimeTaskCreateInput = z.infer<typeof staffTimeTaskCreateSchema>\nexport type StaffTimeTaskUpdateInput = z.infer<typeof staffTimeTaskUpdateSchema>\nexport type StaffTimeTaskStatusChangeInput = z.infer<typeof staffTimeTaskStatusChangeSchema>\nexport type StaffTimeTaskCommentCreateInput = z.infer<typeof staffTimeTaskCommentCreateSchema>\nexport type StaffTimeTaskCommentUpdateInput = z.infer<typeof staffTimeTaskCommentUpdateSchema>\nexport type StaffTimeTagCreateInput = z.infer<typeof staffTimeTagCreateSchema>\nexport type StaffTimeTaskTagAssignmentInput = z.infer<typeof staffTimeTaskTagAssignmentSchema>\nexport type StaffTimeEntryTagAssignmentInput = z.infer<typeof staffTimeEntryTagAssignmentSchema>\nexport type StaffTimeReportCreateInput = z.infer<typeof staffTimeReportCreateSchema>\nexport type StaffTimeReportUpdateInput = z.infer<typeof staffTimeReportUpdateSchema>\nexport type StaffTimeReportPreviewInput = z.infer<typeof staffTimeReportPreviewSchema>\nexport type StaffTimeReportCloseInput = z.infer<typeof staffTimeReportCloseSchema>\nexport type StaffTimeReportUnlockInput = z.infer<typeof staffTimeReportUnlockSchema>\nexport type StaffTimeProjectChangeCurrencyInput = z.infer<typeof staffTimeProjectChangeCurrencySchema>\nexport type StaffTimeTrackingSettingsInput = z.infer<typeof staffTimeTrackingSettingsSchema>\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -2,10 +2,51 @@ import { asValue } from "awilix";
2
2
  import {
3
3
  resolveAvailabilityWriteAccess
4
4
  } from "./lib/availabilityAccess.js";
5
+ import {
6
+ resolveProjectAccess
7
+ } from "./lib/time-tracking/access.js";
8
+ import {
9
+ resolveTimeRoundingStrategy,
10
+ roundMinutes
11
+ } from "./lib/time-tracking/rounding.js";
12
+ import {
13
+ resolveTimeRate
14
+ } from "./lib/time-tracking/cost.js";
15
+ import {
16
+ resolveBillability
17
+ } from "./lib/time-tracking/billability.js";
18
+ import {
19
+ resolveTimesheetCapacity
20
+ } from "./lib/time-tracking/capacity.js";
21
+ import {
22
+ evaluateOverlapPolicies
23
+ } from "./lib/time-tracking/overlap.js";
24
+ import {
25
+ deriveProjectCode
26
+ } from "./lib/time-tracking/projectCode.js";
5
27
  function register(container) {
6
28
  const resolver = { resolveAvailabilityWriteAccess };
29
+ const timeTrackingResolver = { resolveProjectAccess };
30
+ const timeRoundingResolver = {
31
+ resolveStrategy: resolveTimeRoundingStrategy,
32
+ roundMinutes
33
+ };
34
+ const timeRateResolver = { resolveRate: resolveTimeRate };
35
+ const timeBillabilityResolver = { resolveBillability };
36
+ const timeCapacityResolver = { resolveCapacity: resolveTimesheetCapacity };
37
+ const timeOverlapPolicyResolver = { evaluate: evaluateOverlapPolicies };
38
+ const timeProjectCodeResolver = {
39
+ generate: (name, taken, ctx) => deriveProjectCode(name, taken, ctx ?? void 0)
40
+ };
7
41
  container.register({
8
- availabilityAccessResolver: asValue(resolver)
42
+ availabilityAccessResolver: asValue(resolver),
43
+ timeTrackingAccessResolver: asValue(timeTrackingResolver),
44
+ timeRoundingResolver: asValue(timeRoundingResolver),
45
+ timeRateResolver: asValue(timeRateResolver),
46
+ timeBillabilityResolver: asValue(timeBillabilityResolver),
47
+ timeCapacityResolver: asValue(timeCapacityResolver),
48
+ timeOverlapPolicyResolver: asValue(timeOverlapPolicyResolver),
49
+ timeProjectCodeResolver: asValue(timeProjectCodeResolver)
9
50
  });
10
51
  }
11
52
  export {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/modules/staff/di.ts"],
4
- "sourcesContent": ["import { asValue } from 'awilix'\nimport type { AppContainer } from '@open-mercato/shared/lib/di/container'\nimport {\n resolveAvailabilityWriteAccess,\n type AvailabilityAccessContext,\n type AvailabilityWriteAccess,\n} from './lib/availabilityAccess'\n\nexport type AvailabilityAccessResolver = {\n resolveAvailabilityWriteAccess(\n ctx: AvailabilityAccessContext,\n ): Promise<AvailabilityWriteAccess>\n}\n\nexport function register(container: AppContainer) {\n const resolver: AvailabilityAccessResolver = { resolveAvailabilityWriteAccess }\n container.register({\n availabilityAccessResolver: asValue(resolver),\n })\n}\n"],
5
- "mappings": "AAAA,SAAS,eAAe;AAExB;AAAA,EACE;AAAA,OAGK;AAQA,SAAS,SAAS,WAAyB;AAChD,QAAM,WAAuC,EAAE,+BAA+B;AAC9E,YAAU,SAAS;AAAA,IACjB,4BAA4B,QAAQ,QAAQ;AAAA,EAC9C,CAAC;AACH;",
4
+ "sourcesContent": ["import { asValue } from 'awilix'\nimport type { AppContainer } from '@open-mercato/shared/lib/di/container'\nimport {\n resolveAvailabilityWriteAccess,\n type AvailabilityAccessContext,\n type AvailabilityWriteAccess,\n} from './lib/availabilityAccess'\nimport {\n resolveProjectAccess,\n type ProjectAccess,\n type ProjectAccessContext,\n} from './lib/time-tracking/access'\nimport {\n resolveTimeRoundingStrategy,\n roundMinutes,\n type RoundingSettings,\n type TimeRoundingStrategy,\n} from './lib/time-tracking/rounding'\nimport {\n resolveTimeRate,\n type TimeRateContext,\n} from './lib/time-tracking/cost'\nimport {\n resolveBillability,\n type BillabilityContext,\n} from './lib/time-tracking/billability'\nimport {\n resolveTimesheetCapacity,\n type CapacityContext,\n type CapacityDateRange,\n type CapacityResult,\n} from './lib/time-tracking/capacity'\nimport {\n evaluateOverlapPolicies,\n type Overlap,\n type OverlapDecision,\n type OverlapPolicyContext,\n} from './lib/time-tracking/overlap'\nimport {\n deriveProjectCode,\n type ProjectCodeContext,\n} from './lib/time-tracking/projectCode'\nimport type { ScopedResolverContext } from './lib/time-tracking/registries/scope'\n\nexport type AvailabilityAccessResolver = {\n resolveAvailabilityWriteAccess(\n ctx: AvailabilityAccessContext,\n ): Promise<AvailabilityWriteAccess>\n}\n\nexport type TimeTrackingAccessResolver = {\n resolveProjectAccess(ctx: ProjectAccessContext): Promise<ProjectAccess>\n}\n\n/**\n * EP-32\u2026EP-41 keep their registries in plain module scope so the browser bundle\n * can reach them (four of the strategies back client previews that cannot\n * resolve DI). These DI keys are the SERVER entry point to the same registries:\n * they exist so an app can replace a resolver wholesale through `entry.overrides`\n * DI without patching the module, and so server code follows the \"never `new` a\n * resolver\" rule. Resolving one and calling the module function are equivalent.\n */\nexport type TimeRoundingResolver = {\n resolveStrategy(ctx?: ScopedResolverContext | null): TimeRoundingStrategy\n roundMinutes(raw: number, settings: RoundingSettings, ctx?: ScopedResolverContext | null): number\n}\n\nexport type TimeRateResolverService = {\n resolveRate(ctx: TimeRateContext): number | null\n}\n\nexport type BillabilityResolverService = {\n resolveBillability(ctx: BillabilityContext): boolean\n}\n\nexport type TimeCapacityResolver = {\n resolveCapacity(\n staffMemberId: string | null,\n dateRange: CapacityDateRange,\n ctx: CapacityContext,\n ): CapacityResult\n}\n\nexport type OverlapPolicyResolver = {\n evaluate(spans: readonly Overlap[], ctx: OverlapPolicyContext): OverlapDecision\n}\n\nexport type ProjectCodeResolver = {\n generate(name: string, taken: Set<string>, ctx?: ProjectCodeContext | null): string\n}\n\nexport function register(container: AppContainer) {\n const resolver: AvailabilityAccessResolver = { resolveAvailabilityWriteAccess }\n const timeTrackingResolver: TimeTrackingAccessResolver = { resolveProjectAccess }\n const timeRoundingResolver: TimeRoundingResolver = {\n resolveStrategy: resolveTimeRoundingStrategy,\n roundMinutes,\n }\n const timeRateResolver: TimeRateResolverService = { resolveRate: resolveTimeRate }\n const timeBillabilityResolver: BillabilityResolverService = { resolveBillability }\n const timeCapacityResolver: TimeCapacityResolver = { resolveCapacity: resolveTimesheetCapacity }\n const timeOverlapPolicyResolver: OverlapPolicyResolver = { evaluate: evaluateOverlapPolicies }\n const timeProjectCodeResolver: ProjectCodeResolver = {\n generate: (name, taken, ctx) => deriveProjectCode(name, taken, ctx ?? undefined),\n }\n container.register({\n availabilityAccessResolver: asValue(resolver),\n timeTrackingAccessResolver: asValue(timeTrackingResolver),\n timeRoundingResolver: asValue(timeRoundingResolver),\n timeRateResolver: asValue(timeRateResolver),\n timeBillabilityResolver: asValue(timeBillabilityResolver),\n timeCapacityResolver: asValue(timeCapacityResolver),\n timeOverlapPolicyResolver: asValue(timeOverlapPolicyResolver),\n timeProjectCodeResolver: asValue(timeProjectCodeResolver),\n })\n}\n"],
5
+ "mappings": "AAAA,SAAS,eAAe;AAExB;AAAA,EACE;AAAA,OAGK;AACP;AAAA,EACE;AAAA,OAGK;AACP;AAAA,EACE;AAAA,EACA;AAAA,OAGK;AACP;AAAA,EACE;AAAA,OAEK;AACP;AAAA,EACE;AAAA,OAEK;AACP;AAAA,EACE;AAAA,OAIK;AACP;AAAA,EACE;AAAA,OAIK;AACP;AAAA,EACE;AAAA,OAEK;AAkDA,SAAS,SAAS,WAAyB;AAChD,QAAM,WAAuC,EAAE,+BAA+B;AAC9E,QAAM,uBAAmD,EAAE,qBAAqB;AAChF,QAAM,uBAA6C;AAAA,IACjD,iBAAiB;AAAA,IACjB;AAAA,EACF;AACA,QAAM,mBAA4C,EAAE,aAAa,gBAAgB;AACjF,QAAM,0BAAsD,EAAE,mBAAmB;AACjF,QAAM,uBAA6C,EAAE,iBAAiB,yBAAyB;AAC/F,QAAM,4BAAmD,EAAE,UAAU,wBAAwB;AAC7F,QAAM,0BAA+C;AAAA,IACnD,UAAU,CAAC,MAAM,OAAO,QAAQ,kBAAkB,MAAM,OAAO,OAAO,MAAS;AAAA,EACjF;AACA,YAAU,SAAS;AAAA,IACjB,4BAA4B,QAAQ,QAAQ;AAAA,IAC5C,4BAA4B,QAAQ,oBAAoB;AAAA,IACxD,sBAAsB,QAAQ,oBAAoB;AAAA,IAClD,kBAAkB,QAAQ,gBAAgB;AAAA,IAC1C,yBAAyB,QAAQ,uBAAuB;AAAA,IACxD,sBAAsB,QAAQ,oBAAoB;AAAA,IAClD,2BAA2B,QAAQ,yBAAyB;AAAA,IAC5D,yBAAyB,QAAQ,uBAAuB;AAAA,EAC1D,CAAC;AACH;",
6
6
  "names": []
7
7
  }