@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
@@ -119,12 +119,37 @@
119
119
  "staff.audit.teams.create": "Crear equipo",
120
120
  "staff.audit.teams.delete": "Eliminar equipo",
121
121
  "staff.audit.teams.update": "Actualizar equipo",
122
+ "staff.audit.timesheets.reports.close": "Cerrar y bloquear informe",
123
+ "staff.audit.timesheets.reports.create": "Crear informe",
124
+ "staff.audit.timesheets.reports.delete": "Eliminar informe",
125
+ "staff.audit.timesheets.reports.unlock": "Desbloquear entradas del informe",
126
+ "staff.audit.timesheets.reports.update": "Actualizar informe",
127
+ "staff.audit.timesheets.tags.assign_entry": "Asignar etiquetas de registro de tiempo",
128
+ "staff.audit.timesheets.tags.assign_task": "Asignar etiquetas de tarea",
129
+ "staff.audit.timesheets.tags.create": "Crear etiqueta",
130
+ "staff.audit.timesheets.tags.delete": "Eliminar etiqueta",
131
+ "staff.audit.timesheets.tags.unassign_entry": "Quitar etiquetas de registro de tiempo",
132
+ "staff.audit.timesheets.tags.unassign_task": "Quitar etiquetas de tarea",
133
+ "staff.audit.timesheets.tags.update": "Actualizar etiqueta",
134
+ "staff.audit.timesheets.task_comments.create": "Crear comentario de tarea",
135
+ "staff.audit.timesheets.task_comments.delete": "Eliminar comentario de tarea",
136
+ "staff.audit.timesheets.task_comments.update": "Actualizar comentario de tarea",
137
+ "staff.audit.timesheets.task_statuses.create": "Crear estado de tarea",
138
+ "staff.audit.timesheets.task_statuses.delete": "Eliminar estado de tarea",
139
+ "staff.audit.timesheets.task_statuses.reorder": "Reordenar estados de tarea",
140
+ "staff.audit.timesheets.task_statuses.update": "Actualizar estado de tarea",
141
+ "staff.audit.timesheets.tasks.create": "Crear tarea",
142
+ "staff.audit.timesheets.tasks.delete": "Eliminar tarea",
143
+ "staff.audit.timesheets.tasks.statusChange": "Mover tarea",
144
+ "staff.audit.timesheets.tasks.update": "Actualizar tarea",
122
145
  "staff.audit.timesheets.time_entries.create": "Crear registro de tiempo",
123
146
  "staff.audit.timesheets.time_entries.delete": "Eliminar registro de tiempo",
124
147
  "staff.audit.timesheets.time_entries.startTimer": "Iniciar temporizador",
125
148
  "staff.audit.timesheets.time_entries.update": "Actualizar registro de tiempo",
126
149
  "staff.audit.timesheets.time_project_members.assign": "Asignar miembro del proyecto de tiempo",
127
150
  "staff.audit.timesheets.time_project_members.unassign": "Desasignar miembro del proyecto de tiempo",
151
+ "staff.audit.timesheets.time_project_members.update": "Actualizar miembro del proyecto de tiempo",
152
+ "staff.audit.timesheets.time_projects.change_currency": "Cambiar la moneda del proyecto de tiempo",
128
153
  "staff.audit.timesheets.time_projects.create": "Crear proyecto de tiempo",
129
154
  "staff.audit.timesheets.time_projects.delete": "Eliminar proyecto de tiempo",
130
155
  "staff.audit.timesheets.time_projects.update": "Actualizar proyecto de tiempo",
@@ -212,7 +237,13 @@
212
237
  "staff.availabilityRuleSets.tabs.availability": "Disponibilidad",
213
238
  "staff.availabilityRuleSets.tabs.details": "Detalles",
214
239
  "staff.availabilityRuleSets.tabs.label": "Secciones del horario",
240
+ "staff.errors.customerAccountNotLinked": "Esta cuenta del portal no está vinculada a un cliente.",
241
+ "staff.errors.forbidden": "Prohibido",
242
+ "staff.errors.internal": "Error interno del servidor",
243
+ "staff.errors.invalidInput": "Solicitud no válida",
244
+ "staff.errors.invalid_request": "Solicitud no válida",
215
245
  "staff.errors.missingScope": "Falta el contexto de inquilino u organización.",
246
+ "staff.errors.notFound": "No encontrado",
216
247
  "staff.errors.unauthorized": "No autorizado",
217
248
  "staff.leaveRequests.actions.accept": "Aprobar",
218
249
  "staff.leaveRequests.actions.add": "Nueva solicitud",
@@ -309,6 +340,45 @@
309
340
  "staff.notifications.leaveRequest.pending.title": "Solicitud de ausencia pendiente",
310
341
  "staff.notifications.leaveRequest.rejected.body": "Su solicitud de licencia del {startDate} al {endDate} ha sido rechazada{reason, select, other { - {reason}}}",
311
342
  "staff.notifications.leaveRequest.rejected.title": "Solicitud de licencia rechazada",
343
+ "staff.notifications.timeEntryTimer.runningLong.body": "Un temporizador lleva mucho tiempo en marcha. Deténlo si el trabajo ha terminado.",
344
+ "staff.notifications.timeEntryTimer.runningLong.title": "El temporizador sigue en marcha",
345
+ "staff.notifications.timeProjectAccess.actions.openTeam": "Abrir el equipo del proyecto",
346
+ "staff.notifications.timeProjectAccess.renderer.generalRequest": "Ningún proyecto seleccionado",
347
+ "staff.notifications.timeProjectAccess.renderer.project": "Proyecto",
348
+ "staff.notifications.timeProjectAccess.requested.body": "{requesterName} solicita acceso a los proyectos de control de tiempo.",
349
+ "staff.notifications.timeProjectAccess.requested.title": "Acceso a proyecto solicitado",
350
+ "staff.notifications.timeProjectBudget.actions.openProject": "Abrir el proyecto",
351
+ "staff.notifications.timeProjectBudget.thresholdReached.body": "{projectName} alcanzó el {percent}% de su presupuesto (alerta configurada en {thresholdPercent}%).",
352
+ "staff.notifications.timeProjectBudget.thresholdReached.title": "Umbral de presupuesto del proyecto alcanzado",
353
+ "staff.notifications.timeReport.actions.openReport": "Abrir informe",
354
+ "staff.notifications.timeReport.actions.reviewReport": "Revisar informe",
355
+ "staff.notifications.timeReport.approved.body": "El informe {reference} ({title}) se ha cerrado.",
356
+ "staff.notifications.timeReport.approved.title": "Informe de tiempo cerrado",
357
+ "staff.notifications.timeReport.readyForApproval.body": "El informe {reference} espera tu aprobación.",
358
+ "staff.notifications.timeReport.readyForApproval.title": "Informe de tiempo listo para aprobación",
359
+ "staff.notifications.timesheet.actions.openTimesheet": "Abrir parte de horas",
360
+ "staff.notifications.timesheet.periodIncomplete.body": "Algunos días laborables entre {periodFrom} y {periodTo} no tienen tiempo registrado.",
361
+ "staff.notifications.timesheet.periodIncomplete.title": "Periodo de parte de horas incompleto",
362
+ "staff.portal.timeReports.backToList": "Todos los informes de tiempo",
363
+ "staff.portal.timeReports.billableHours": "Horas facturables",
364
+ "staff.portal.timeReports.detailTitle": "Informe de tiempo",
365
+ "staff.portal.timeReports.emptyDescription": "Un informe aparece aquí cuando se cierra el periodo que cubre.",
366
+ "staff.portal.timeReports.emptyTitle": "Aún no hay informes de tiempo",
367
+ "staff.portal.timeReports.listDescription": "Horas dedicadas a tus proyectos, según el informe al cierre de cada periodo.",
368
+ "staff.portal.timeReports.listTitle": "Informes de tiempo",
369
+ "staff.portal.timeReports.loadFailed": "No se pudieron cargar tus informes de tiempo.",
370
+ "staff.portal.timeReports.nav": "Informes de tiempo",
371
+ "staff.portal.timeReports.next": "Siguiente",
372
+ "staff.portal.timeReports.nonBillableHours": "Horas no facturables",
373
+ "staff.portal.timeReports.notFoundDescription": "Este informe no existe o no pertenece a tu cuenta.",
374
+ "staff.portal.timeReports.notFoundTitle": "Informe no disponible",
375
+ "staff.portal.timeReports.pageLabel": "Página",
376
+ "staff.portal.timeReports.previous": "Anterior",
377
+ "staff.portal.timeReports.projectColumn": "Proyecto",
378
+ "staff.portal.timeReports.projectUnassigned": "Sin asignar",
379
+ "staff.portal.timeReports.projectsEmpty": "No hay desglose por proyecto para este periodo.",
380
+ "staff.portal.timeReports.projectsTitle": "Por proyecto",
381
+ "staff.portal.timeReports.totalsTitle": "Totales",
312
382
  "staff.resourceTypes.actions.add": "Agregar tipo de recurso",
313
383
  "staff.resourceTypes.actions.delete": "Eliminar",
314
384
  "staff.resourceTypes.actions.deleteConfirm": "Eliminar el tipo de recurso \"{{name}}\"?",
@@ -426,7 +496,11 @@
426
496
  "staff.search.badge.team": "Equipo",
427
497
  "staff.search.badge.teamMember": "Miembro del equipo",
428
498
  "staff.search.badge.teamRole": "Rol del equipo",
499
+ "staff.search.badge.timeEntry": "Registro de tiempo",
429
500
  "staff.search.badge.timeProject": "Proyecto",
501
+ "staff.search.badge.timeReport": "Informe",
502
+ "staff.search.badge.timeTag": "Etiqueta",
503
+ "staff.search.badge.timeTask": "Tarea",
430
504
  "staff.search.service.maxAttendees": "Máx. {{count}}",
431
505
  "staff.search.status.active": "Activo",
432
506
  "staff.search.status.inactive": "Inactivo",
@@ -936,10 +1010,784 @@
936
1010
  "staff.teams.tabs.details": "Detalles",
937
1011
  "staff.teams.tabs.label": "Secciones del equipo",
938
1012
  "staff.teams.tabs.members": "Miembros del equipo",
1013
+ "staff.time_tracking.access.denied.back": "Volver a «Mi trabajo»",
1014
+ "staff.time_tracking.access.denied.description": "El acceso a los proyectos lo concede un Team Leader proyecto por proyecto. Si antes tenías acceso, es posible que te lo hayan retirado — tus registros de tiempo anteriores se conservan.",
1015
+ "staff.time_tracking.access.denied.request": "Solicitar acceso",
1016
+ "staff.time_tracking.access.denied.title": "No tienes acceso a este proyecto",
1017
+ "staff.time_tracking.access.empty.description": "El acceso a los proyectos lo concede un Team Leader. En cuanto te añada a un proyecto, aparecerá aquí al instante, sin volver a iniciar sesión.",
1018
+ "staff.time_tracking.access.empty.request": "Pedir acceso al Team Leader",
1019
+ "staff.time_tracking.access.empty.title": "Todavía no tienes proyectos asignados",
1020
+ "staff.time_tracking.access.request.error": "No se ha podido enviar la solicitud de acceso.",
1021
+ "staff.time_tracking.access.request.sent": "Solicitud enviada",
1022
+ "staff.time_tracking.access.request.success": "Tu solicitud se ha enviado a los Team Leaders.",
1023
+ "staff.time_tracking.board.addStatus.cta": "Añadir estado",
1024
+ "staff.time_tracking.board.addStatus.error": "No se pudo añadir la columna.",
1025
+ "staff.time_tracking.board.addStatus.placeholder": "Nombre de la columna",
1026
+ "staff.time_tracking.board.backToProject": "Volver al proyecto",
1027
+ "staff.time_tracking.board.card.addTime": "Añadir tiempo",
1028
+ "staff.time_tracking.board.card.addTimeAria": "Añadir tiempo a {title}",
1029
+ "staff.time_tracking.board.card.aria": "Tarea: {title}",
1030
+ "staff.time_tracking.board.card.assignee": "Asignada a {name}",
1031
+ "staff.time_tracking.board.card.moveTo.aria": "Mover {title} a otra columna",
1032
+ "staff.time_tracking.board.card.moveTo.cta": "Mover",
1033
+ "staff.time_tracking.board.card.moveTo.menu": "Mover {title} a",
1034
+ "staff.time_tracking.board.card.startTimer": "Iniciar",
1035
+ "staff.time_tracking.board.card.startTimerAria": "Iniciar un temporizador para {title}",
1036
+ "staff.time_tracking.board.card.stopTimer": "Detener",
1037
+ "staff.time_tracking.board.card.stopTimerAria": "Detener el temporizador de {title}",
1038
+ "staff.time_tracking.board.card.subtasks": "{done}/{total} subtareas",
1039
+ "staff.time_tracking.board.card.timerRunning": "temporizador",
1040
+ "staff.time_tracking.board.card.unassigned": "Sin asignar",
1041
+ "staff.time_tracking.board.dnd.dragCancel": "Se canceló el movimiento de la tarea {task}.",
1042
+ "staff.time_tracking.board.dnd.dragEnd": "La tarea {task} se soltó en la columna {column}.",
1043
+ "staff.time_tracking.board.dnd.dragEndOutside": "La tarea {task} se soltó fuera de las columnas.",
1044
+ "staff.time_tracking.board.dnd.dragOver": "La tarea {task} está sobre la columna {column}.",
1045
+ "staff.time_tracking.board.dnd.dragOverNothing": "La tarea {task} no está sobre ninguna columna.",
1046
+ "staff.time_tracking.board.dnd.dragStart": "Se ha tomado la tarea {task}.",
1047
+ "staff.time_tracking.board.dnd.instructions": "Arrastra una tarjeta con el puntero para moverla entre columnas. Con el teclado, pulsa Intro en una tarjeta para abrirla o usa el botón Mover de las acciones de la tarjeta para elegir la columna de destino.",
1048
+ "staff.time_tracking.board.empty.description": "Un Team Leader configura las columnas del tablero de cada proyecto.",
1049
+ "staff.time_tracking.board.empty.title": "Este proyecto aún no tiene columnas",
1050
+ "staff.time_tracking.board.filters.add": "Añadir filtro",
1051
+ "staff.time_tracking.board.filters.assignedToMe": "Asignadas a mí",
1052
+ "staff.time_tracking.board.filters.assignee": "Responsable",
1053
+ "staff.time_tracking.board.filters.clear": "Borrar filtros",
1054
+ "staff.time_tracking.board.filters.cta": "Filtros",
1055
+ "staff.time_tracking.board.filters.noOptions": "Todavía no hay nada por lo que filtrar.",
1056
+ "staff.time_tracking.board.filters.remove": "Quitar filtro: {label}",
1057
+ "staff.time_tracking.board.filters.status": "Estado",
1058
+ "staff.time_tracking.board.filters.tag": "Etiqueta",
1059
+ "staff.time_tracking.board.list.caption": "Tareas",
1060
+ "staff.time_tracking.board.list.columns.assignee": "Responsable",
1061
+ "staff.time_tracking.board.list.columns.hours": "Registradas",
1062
+ "staff.time_tracking.board.list.columns.reference": "Ref.",
1063
+ "staff.time_tracking.board.list.columns.status": "Estado",
1064
+ "staff.time_tracking.board.list.columns.tags": "Etiquetas",
1065
+ "staff.time_tracking.board.list.columns.title": "Tarea",
1066
+ "staff.time_tracking.board.list.empty.description": "Quita un filtro para ver más.",
1067
+ "staff.time_tracking.board.list.empty.title": "Ninguna tarea coincide con estos filtros",
1068
+ "staff.time_tracking.board.loadError": "No se pudo cargar el tablero.",
1069
+ "staff.time_tracking.board.loadMore": "Mostrar más ({remaining})",
1070
+ "staff.time_tracking.board.loading": "Cargando el tablero…",
1071
+ "staff.time_tracking.board.move.error": "No se pudo mover la tarea.",
1072
+ "staff.time_tracking.board.move.retry": "Reintentar",
1073
+ "staff.time_tracking.board.move.rolledBack": "La tarea volvió a su sitio: el cambio no se guardó.",
1074
+ "staff.time_tracking.board.newTask.cancel": "Cancelar",
1075
+ "staff.time_tracking.board.newTask.cta": "Nueva tarea",
1076
+ "staff.time_tracking.board.newTask.error": "No se pudo crear la tarea.",
1077
+ "staff.time_tracking.board.newTask.status": "Estado",
1078
+ "staff.time_tracking.board.newTask.submit": "Crear tarea",
1079
+ "staff.time_tracking.board.newTask.title": "Nueva tarea",
1080
+ "staff.time_tracking.board.newTask.titleLabel": "Título de la tarea",
1081
+ "staff.time_tracking.board.noProject.description": "El tablero necesita un proyecto. Pide acceso a un Team Leader.",
1082
+ "staff.time_tracking.board.noProject.title": "No hay proyecto que mostrar",
1083
+ "staff.time_tracking.board.projectPicker": "Proyecto",
1084
+ "staff.time_tracking.board.projectsLoadError": "No se pudieron cargar tus proyectos.",
1085
+ "staff.time_tracking.board.quickAdd.cta": "Añadir tarea rápida",
1086
+ "staff.time_tracking.board.quickAdd.error": "No se pudo crear la tarea.",
1087
+ "staff.time_tracking.board.quickAdd.label": "Añadir tarea rápida",
1088
+ "staff.time_tracking.board.quickAdd.placeholder": "Título de la tarea",
1089
+ "staff.time_tracking.board.reload": "Intentar de nuevo",
1090
+ "staff.time_tracking.board.summary.logged": "{hours} registradas",
1091
+ "staff.time_tracking.board.summary.tasks": "{count} tareas",
1092
+ "staff.time_tracking.board.timer.linkWarning": "El temporizador está en marcha pero aún no está vinculado a esta tarea.",
1093
+ "staff.time_tracking.board.timer.startError": "No se pudo iniciar el temporizador.",
1094
+ "staff.time_tracking.board.timer.stopError": "No se pudo detener el temporizador.",
1095
+ "staff.time_tracking.board.view.board": "Tablero",
1096
+ "staff.time_tracking.board.view.label": "Vista",
1097
+ "staff.time_tracking.board.view.list": "Lista",
1098
+ "staff.time_tracking.duration.hint": "Entiende 1h 40m, 1.5h, 90m, 1:40.",
1099
+ "staff.time_tracking.duration.invalid": "No entiendo ese formato. Prueba 1h 40m, 1.5h, 90m o 1:40.",
1100
+ "staff.time_tracking.duration.placeholder": "1h 30m",
1101
+ "staff.time_tracking.entries.actions.add": "Añadir registro",
1102
+ "staff.time_tracking.entries.actions.copyDay": "Copiar el día de ayer",
1103
+ "staff.time_tracking.entries.actions.delete": "Eliminar",
1104
+ "staff.time_tracking.entries.actions.duplicate": "Duplicar",
1105
+ "staff.time_tracking.entries.actions.refresh": "Actualizar",
1106
+ "staff.time_tracking.entries.actions.showReport": "Ver el informe",
1107
+ "staff.time_tracking.entries.badges.locked": "bloqueado",
1108
+ "staff.time_tracking.entries.badges.nonBillable": "no facturable",
1109
+ "staff.time_tracking.entries.badges.rateOverride": "{amount}/h",
1110
+ "staff.time_tracking.entries.columns.clock": "Horario",
1111
+ "staff.time_tracking.entries.columns.cost": "Coste",
1112
+ "staff.time_tracking.entries.columns.date": "Fecha",
1113
+ "staff.time_tracking.entries.columns.duration": "Tiempo",
1114
+ "staff.time_tracking.entries.columns.project": "Proyecto",
1115
+ "staff.time_tracking.entries.columns.task": "Tarea / descripción",
1116
+ "staff.time_tracking.entries.copyDay.confirmDuplicates": "Añadir las copias de todos modos",
1117
+ "staff.time_tracking.entries.copyDay.conflict": "Hoy ya tiene {count} registros. ¿Añadir encima las copias de ayer?",
1118
+ "staff.time_tracking.entries.copyDay.nothing": "Ayer no hay registros que copiar.",
1119
+ "staff.time_tracking.entries.copyDay.skipped": "Se omitieron {count} registros porque están bloqueados.",
1120
+ "staff.time_tracking.entries.copyDay.success": "{count} registros copiados como borradores: revísalos.",
1121
+ "staff.time_tracking.entries.empty": "No hay registros de tiempo en este periodo.",
1122
+ "staff.time_tracking.entries.errors.copyDay": "No se pudo copiar el día.",
1123
+ "staff.time_tracking.entries.errors.delete": "No se pudo eliminar el registro de tiempo.",
1124
+ "staff.time_tracking.entries.errors.duplicate": "No se pudo duplicar el registro de tiempo.",
1125
+ "staff.time_tracking.entries.errors.entriesLocked": "Algunos de estos registros de tiempo están bloqueados en un informe cerrado y no se pueden cambiar. Desbloquea el informe primero.",
1126
+ "staff.time_tracking.entries.errors.entryLocked": "Este registro de tiempo está bloqueado en un informe cerrado y no se puede cambiar. Desbloquea el informe primero.",
1127
+ "staff.time_tracking.entries.errors.load": "No se pudieron cargar los registros de tiempo.",
1128
+ "staff.time_tracking.entries.errors.save": "No se pudo guardar el registro de tiempo.",
1129
+ "staff.time_tracking.entries.filters.billable": "Facturable",
1130
+ "staff.time_tracking.entries.filters.billableNo": "Solo no facturable",
1131
+ "staff.time_tracking.entries.filters.billableYes": "Solo facturable",
1132
+ "staff.time_tracking.entries.filters.clearAll": "Borrar todo",
1133
+ "staff.time_tracking.entries.filters.customer": "Cliente",
1134
+ "staff.time_tracking.entries.filters.entry": "Entrada",
1135
+ "staff.time_tracking.entries.filters.entrySelection": "Entradas: {count}",
1136
+ "staff.time_tracking.entries.filters.locked": "Estado del informe",
1137
+ "staff.time_tracking.entries.filters.lockedNo": "Aún sin informar",
1138
+ "staff.time_tracking.entries.filters.lockedYes": "Bloqueado en un informe",
1139
+ "staff.time_tracking.entries.filters.period": "Periodo",
1140
+ "staff.time_tracking.entries.filters.person": "Persona",
1141
+ "staff.time_tracking.entries.filters.project": "Proyecto",
1142
+ "staff.time_tracking.entries.filters.remove": "Quitar filtro {name}",
1143
+ "staff.time_tracking.entries.filters.tag": "Etiqueta",
1144
+ "staff.time_tracking.entries.filters.task": "Tarea",
1145
+ "staff.time_tracking.entries.filters.text": "La descripción contiene",
1146
+ "staff.time_tracking.entries.messages.deleted": "Se eliminó «{name}» ({duration}). Usa «Deshacer» para restaurarlo.",
1147
+ "staff.time_tracking.entries.messages.duplicated": "Registro duplicado.",
1148
+ "staff.time_tracking.entries.presets.mineWeek": "Míos, esta semana",
1149
+ "staff.time_tracking.entries.presets.nonBillable": "No facturable",
1150
+ "staff.time_tracking.entries.presets.thisMonth": "Este mes",
1151
+ "staff.time_tracking.entries.presets.unbilled": "Sin facturar",
1152
+ "staff.time_tracking.entries.readOnlyNotice": "Puedes ver estos registros, pero no modificarlos.",
1153
+ "staff.time_tracking.entries.source.kiosk": "Quiosco",
1154
+ "staff.time_tracking.entries.source.manual": "Manual",
1155
+ "staff.time_tracking.entries.source.mobile": "Móvil",
1156
+ "staff.time_tracking.entries.source.timer": "Cronómetro",
1157
+ "staff.time_tracking.entries.summary.count": "Total ({visible} de {total} registros)",
1158
+ "staff.time_tracking.entries.summary.multiCurrencyHint": "Estos registros se facturan en más de una moneda, por eso se muestran por separado en lugar de sumarse.",
1159
+ "staff.time_tracking.entries.table.durationAria": "Duración del registro",
1160
+ "staff.time_tracking.entries.table.noTask": "Sin tarea",
1161
+ "staff.time_tracking.entries.table.selectAll": "Seleccionar todos los registros",
1162
+ "staff.time_tracking.entries.table.selectRow": "Seleccionar registro",
1163
+ "staff.time_tracking.entries.title": "Registros de tiempo",
1164
+ "staff.time_tracking.entryDialog.addTag": "Añadir etiqueta",
1165
+ "staff.time_tracking.entryDialog.billable": "Facturable",
1166
+ "staff.time_tracking.entryDialog.billableHint": "Activado por defecto en este proyecto.",
1167
+ "staff.time_tracking.entryDialog.cancel": "Cancelar",
1168
+ "staff.time_tracking.entryDialog.close": "Cerrar",
1169
+ "staff.time_tracking.entryDialog.computed": "calculado",
1170
+ "staff.time_tracking.entryDialog.cost": "Coste",
1171
+ "staff.time_tracking.entryDialog.costHint": "{raw} redondeado a {rounded} × {rate}",
1172
+ "staff.time_tracking.entryDialog.createTag": "Crear «{name}»",
1173
+ "staff.time_tracking.entryDialog.creator": "Autor de la entrada: {name} — se asigna automáticamente y no se puede editar.",
1174
+ "staff.time_tracking.entryDialog.creatorUnknown": "El autor de la entrada se asigna automáticamente y no se puede editar.",
1175
+ "staff.time_tracking.entryDialog.date": "Fecha",
1176
+ "staff.time_tracking.entryDialog.description": "Descripción",
1177
+ "staff.time_tracking.entryDialog.discard.cancel": "Seguir editando",
1178
+ "staff.time_tracking.entryDialog.discard.confirm": "Descartar",
1179
+ "staff.time_tracking.entryDialog.discard.text": "Todavía no se ha guardado, así que si cierras ahora perderás lo que has introducido.",
1180
+ "staff.time_tracking.entryDialog.discard.title": "¿Descartar esta entrada de tiempo?",
1181
+ "staff.time_tracking.entryDialog.duration": "Duración",
1182
+ "staff.time_tracking.entryDialog.end": "Fin",
1183
+ "staff.time_tracking.entryDialog.endHint": "Cambia este campo y la duración se recalcula sola.",
1184
+ "staff.time_tracking.entryDialog.errors.createTag": "No se pudo crear la etiqueta.",
1185
+ "staff.time_tracking.entryDialog.errors.durationRequired": "Indica cuánto duró el trabajo.",
1186
+ "staff.time_tracking.entryDialog.errors.load": "No se pudo cargar la entrada de tiempo.",
1187
+ "staff.time_tracking.entryDialog.errors.noStaffMember": "Tu cuenta no está vinculada a ningún empleado, así que no se puede registrar tiempo.",
1188
+ "staff.time_tracking.entryDialog.errors.notFound": "Entrada de tiempo no encontrada o sin acceso.",
1189
+ "staff.time_tracking.entryDialog.errors.save": "No se pudo guardar la entrada de tiempo.",
1190
+ "staff.time_tracking.entryDialog.errors.taskRequired": "Elige la tarea a la que pertenece este tiempo.",
1191
+ "staff.time_tracking.entryDialog.loading": "Cargando la entrada de tiempo…",
1192
+ "staff.time_tracking.entryDialog.locked.badge": "Bloqueada",
1193
+ "staff.time_tracking.entryDialog.locked.notice": "Esta entrada está cerrada en un informe, así que ya no se puede editar.",
1194
+ "staff.time_tracking.entryDialog.locked.showReport": "Ver el informe",
1195
+ "staff.time_tracking.entryDialog.midnight": "Esta entrada termina al día siguiente, {date}.",
1196
+ "staff.time_tracking.entryDialog.moneyHidden": "Las tarifas y el coste están ocultos — tus permisos no incluyen los importes de las entradas de tiempo.",
1197
+ "staff.time_tracking.entryDialog.noTags": "Ninguna etiqueta coincide",
1198
+ "staff.time_tracking.entryDialog.overlap.body": "{start} – {end} · „{task}” · {project} ({duration}). El solapamiento está permitido — si es intencionado, guarda con normalidad.",
1199
+ "staff.time_tracking.entryDialog.overlap.noProject": "sin proyecto",
1200
+ "staff.time_tracking.entryDialog.overlap.noTask": "sin tarea",
1201
+ "staff.time_tracking.entryDialog.overlap.show": "Ver esa entrada",
1202
+ "staff.time_tracking.entryDialog.overlap.snap": "Ajustar el inicio a {time}",
1203
+ "staff.time_tracking.entryDialog.overlap.title": "Este tiempo se solapa con otra entrada",
1204
+ "staff.time_tracking.entryDialog.rate": "Tarifa",
1205
+ "staff.time_tracking.entryDialog.rateHint": "Por defecto {amount} (tarifa del proyecto).",
1206
+ "staff.time_tracking.entryDialog.rateOverride": "Tarifa propia para esta entrada",
1207
+ "staff.time_tracking.entryDialog.rateOverrideHint": "Sustituye la tarifa del proyecto solo aquí.",
1208
+ "staff.time_tracking.entryDialog.ratePerHour": "{amount}/h",
1209
+ "staff.time_tracking.entryDialog.removeTag": "Quitar la etiqueta {label}",
1210
+ "staff.time_tracking.entryDialog.save": "Guardar",
1211
+ "staff.time_tracking.entryDialog.saveAndNew": "Guardar y añadir otra",
1212
+ "staff.time_tracking.entryDialog.saved": "Entrada de tiempo guardada.",
1213
+ "staff.time_tracking.entryDialog.shortcutCancel": "cancelar",
1214
+ "staff.time_tracking.entryDialog.shortcutSave": "guardar",
1215
+ "staff.time_tracking.entryDialog.shortcutSaveAgain": "guardar y añadir otra",
1216
+ "staff.time_tracking.entryDialog.start": "Inicio",
1217
+ "staff.time_tracking.entryDialog.tags": "Etiquetas",
1218
+ "staff.time_tracking.entryDialog.task": "Tarea",
1219
+ "staff.time_tracking.entryDialog.taskHint": "El proyecto y el cliente se derivan de la tarea — no se eligen por separado.",
1220
+ "staff.time_tracking.entryDialog.taskPlaceholder": "Elige una tarea",
1221
+ "staff.time_tracking.entryDialog.titleCreate": "Nueva entrada de tiempo",
1222
+ "staff.time_tracking.entryDialog.titleEdit": "Entrada de tiempo",
1223
+ "staff.time_tracking.myWork.copyDay.done": "Se han copiado {count} entradas de ayer.",
1224
+ "staff.time_tracking.myWork.errors.load": "No se pudo cargar el resumen de tu trabajo.",
1225
+ "staff.time_tracking.myWork.errors.retry": "Intentar de nuevo",
1226
+ "staff.time_tracking.myWork.kpi.month": "Este mes",
1227
+ "staff.time_tracking.myWork.kpi.nonBillable": "No facturable",
1228
+ "staff.time_tracking.myWork.kpi.ofTarget": "de {target}",
1229
+ "staff.time_tracking.myWork.kpi.shareOfMonth": "{percent}% del mes",
1230
+ "staff.time_tracking.myWork.kpi.targetGap": "objetivo {target}: faltan {gap}",
1231
+ "staff.time_tracking.myWork.kpi.today": "Hoy",
1232
+ "staff.time_tracking.myWork.kpi.week": "Esta semana",
1233
+ "staff.time_tracking.myWork.kpi.workingDays": "{days} días laborables",
1234
+ "staff.time_tracking.myWork.projects.budget": "{percent}% del presupuesto ({value})",
1235
+ "staff.time_tracking.myWork.projects.budgetHours": "{hours} h",
1236
+ "staff.time_tracking.myWork.projects.empty": "Todavía no tienes proyectos asignados.",
1237
+ "staff.time_tracking.myWork.projects.rate": "{rate}/h",
1238
+ "staff.time_tracking.myWork.projects.title": "Mis proyectos",
1239
+ "staff.time_tracking.myWork.quickEntry.duration": "Duración",
1240
+ "staff.time_tracking.myWork.quickEntry.save": "Guardar",
1241
+ "staff.time_tracking.myWork.quickEntry.target": "Proyecto o tarea",
1242
+ "staff.time_tracking.myWork.recentTasks.empty": "Aún no has registrado tiempo en ninguna tarea.",
1243
+ "staff.time_tracking.myWork.recentTasks.title": "Tareas recientes",
1244
+ "staff.time_tracking.myWork.today.allEntries": "Todas las entradas",
1245
+ "staff.time_tracking.myWork.today.copyYesterday": "Copiar ayer",
1246
+ "staff.time_tracking.myWork.today.empty": "Aún no hay nada registrado hoy.",
1247
+ "staff.time_tracking.myWork.today.title": "Entradas de hoy",
1248
+ "staff.time_tracking.myWork.today.total": "Total de hoy",
1249
+ "staff.time_tracking.nav.entries": "Registros de tiempo",
1250
+ "staff.time_tracking.nav.group": "Seguimiento del tiempo",
1251
+ "staff.time_tracking.nav.my_work": "Mi trabajo",
1252
+ "staff.time_tracking.nav.projects": "Proyectos",
1253
+ "staff.time_tracking.nav.reports": "Informes",
1254
+ "staff.time_tracking.nav.settings": "Configuración",
1255
+ "staff.time_tracking.nav.tasks": "Tareas",
1256
+ "staff.time_tracking.nav.timesheet": "Hoja de horas",
1257
+ "staff.time_tracking.placeholder.description": "Esta pantalla forma parte del despliegue del seguimiento del tiempo y aún no está disponible.",
1258
+ "staff.time_tracking.placeholder.title": "Disponible en una fase posterior",
1259
+ "staff.time_tracking.projects.actions.assignCustomer": "Asignar un cliente",
1260
+ "staff.time_tracking.projects.assignMembers.confirm": "Asignar",
1261
+ "staff.time_tracking.projects.assignMembers.description": "Proyectos seleccionados: {count}.",
1262
+ "staff.time_tracking.projects.assignMembers.error": "No se pudieron asignar los miembros.",
1263
+ "staff.time_tracking.projects.assignMembers.loadError": "No se pudieron cargar los miembros del equipo. Comprueba tu conexión e inténtalo de nuevo.",
1264
+ "staff.time_tracking.projects.assignMembers.progressName": "Asignar miembros a proyectos",
1265
+ "staff.time_tracking.projects.assignMembers.success": "Miembros asignados a {count} proyectos.",
1266
+ "staff.time_tracking.projects.assignMembers.title": "Asignar miembros",
1267
+ "staff.time_tracking.projects.budget.amountUnit": "importe",
1268
+ "staff.time_tracking.projects.budget.ariaLabel": "Uso del presupuesto",
1269
+ "staff.time_tracking.projects.budget.enable": "Vigilar el límite",
1270
+ "staff.time_tracking.projects.budget.enableHint": "Avisa al {{percent}}% y al 100% del límite.",
1271
+ "staff.time_tracking.projects.budget.hoursUnit": "h",
1272
+ "staff.time_tracking.projects.budget.hoursValue": "{value} h",
1273
+ "staff.time_tracking.projects.budget.kind": "Tipo de límite",
1274
+ "staff.time_tracking.projects.budget.kindAmount": "Importe",
1275
+ "staff.time_tracking.projects.budget.kindHours": "Horas",
1276
+ "staff.time_tracking.projects.budget.none": "sin presupuesto",
1277
+ "staff.time_tracking.projects.budget.usage": "{percent}% de {value}",
1278
+ "staff.time_tracking.projects.budget.value": "Límite",
1279
+ "staff.time_tracking.projects.budget.warnAt": "Avisar al",
1280
+ "staff.time_tracking.projects.bulk.assignMembers": "Asignar miembros",
1281
+ "staff.time_tracking.projects.bulk.clear": "Limpiar",
1282
+ "staff.time_tracking.projects.bulk.report": "Informe de la selección",
1283
+ "staff.time_tracking.projects.bulk.reportBlocked.missingCustomer": "Estos proyectos aún no tienen cliente: {projects}.",
1284
+ "staff.time_tracking.projects.bulk.reportBlocked.multipleCurrencies": "Un informe siempre abarca una sola moneda. Seleccionadas: {currencies}.",
1285
+ "staff.time_tracking.projects.bulk.reportBlocked.multipleCustomers": "Un informe siempre abarca un solo cliente. Seleccionados: {customers}.",
1286
+ "staff.time_tracking.projects.bulk.selectedCount": "{count} seleccionados",
1287
+ "staff.time_tracking.projects.code.autoHint": "Se deriva del nombre del proyecto; precede a cada referencia de tarea.",
1288
+ "staff.time_tracking.projects.code.done": "Listo",
1289
+ "staff.time_tracking.projects.code.duplicate": "Este código ya lo usa otro proyecto.",
1290
+ "staff.time_tracking.projects.code.edit": "Editar código",
1291
+ "staff.time_tracking.projects.code.empty": "—",
1292
+ "staff.time_tracking.projects.code.manualHint": "Definido manualmente: ya no sigue al nombre.",
1293
+ "staff.time_tracking.projects.code.reset": "Usar el código derivado",
1294
+ "staff.time_tracking.projects.columns.budget": "Presupuesto",
1295
+ "staff.time_tracking.projects.columns.cost": "Coste",
1296
+ "staff.time_tracking.projects.columns.customer": "Cliente",
1297
+ "staff.time_tracking.projects.columns.hours": "Horas",
1298
+ "staff.time_tracking.projects.columns.rate": "Tarifa",
1299
+ "staff.time_tracking.projects.currency.acknowledge": "Entiendo que los importes históricos no se convierten.",
1300
+ "staff.time_tracking.projects.currency.change": "Cambiar moneda",
1301
+ "staff.time_tracking.projects.currency.changeError": "No se pudo cambiar la moneda del proyecto.",
1302
+ "staff.time_tracking.projects.currency.changeTitle": "Cambiar moneda",
1303
+ "staff.time_tracking.projects.currency.changed": "Moneda del proyecto cambiada.",
1304
+ "staff.time_tracking.projects.currency.confirm": "Cambiar moneda",
1305
+ "staff.time_tracking.projects.currency.emptyBody": "Aún no se ha registrado tiempo en este proyecto, así que el cambio solo fija la moneda: no se reetiqueta ningún importe.",
1306
+ "staff.time_tracking.projects.currency.emptyTitle": "Todavía no hay nada que reetiquetar",
1307
+ "staff.time_tracking.projects.currency.hint": "La moneda es fija para el proyecto y rige todo el reporte de costes.",
1308
+ "staff.time_tracking.projects.currency.label": "Moneda",
1309
+ "staff.time_tracking.projects.currency.lockedBody": "{{count}} entradas están congeladas en informes cerrados: {{reports}}. Desbloquéalas primero.",
1310
+ "staff.time_tracking.projects.currency.lockedHint": "La moneda es fija para el proyecto y rige todo el reporte de costes. Es de solo lectura porque ya se han registrado {{count}} entradas.",
1311
+ "staff.time_tracking.projects.currency.lockedTitle": "Las horas bloqueadas impiden este cambio",
1312
+ "staff.time_tracking.projects.currency.placeholder": "Selecciona una moneda",
1313
+ "staff.time_tracking.projects.currency.postCreateHint": "La moneda es fija para el proyecto y rige todo el reporte de costes. Tras la creación solo cambia mediante esta acción, así que todo cambio queda registrado.",
1314
+ "staff.time_tracking.projects.currency.unset": "Sin definir",
1315
+ "staff.time_tracking.projects.currency.warnBody": "Las {{count}} entradas ya registradas conservan su valor numérico y simplemente se leen en la nueva moneda.",
1316
+ "staff.time_tracking.projects.currency.warnTitle": "Los importes se reetiquetan, no se convierten",
1317
+ "staff.time_tracking.projects.customer.kind.company": "Empresa",
1318
+ "staff.time_tracking.projects.customer.kind.person": "Autónomo",
1319
+ "staff.time_tracking.projects.customer.new.company": "Empresa",
1320
+ "staff.time_tracking.projects.customer.new.email": "Correo electrónico",
1321
+ "staff.time_tracking.projects.customer.new.error": "No se pudo crear el cliente.",
1322
+ "staff.time_tracking.projects.customer.new.firstName": "Nombre",
1323
+ "staff.time_tracking.projects.customer.new.kind": "Tipo de cliente",
1324
+ "staff.time_tracking.projects.customer.new.lastName": "Apellidos",
1325
+ "staff.time_tracking.projects.customer.new.name": "Nombre",
1326
+ "staff.time_tracking.projects.customer.new.nameRequired": "El nombre es obligatorio.",
1327
+ "staff.time_tracking.projects.customer.new.person": "Autónomo",
1328
+ "staff.time_tracking.projects.customer.new.submit": "Crear cliente",
1329
+ "staff.time_tracking.projects.customer.new.title": "Nuevo cliente",
1330
+ "staff.time_tracking.projects.customer.new.trigger": "Nuevo cliente",
1331
+ "staff.time_tracking.projects.customer.placeholder": "Buscar clientes…",
1332
+ "staff.time_tracking.projects.errors.required": "Rellena los campos obligatorios.",
1333
+ "staff.time_tracking.projects.form.actions.cancel": "Cancelar",
1334
+ "staff.time_tracking.projects.form.billableByDefault": "Facturable por defecto",
1335
+ "staff.time_tracking.projects.form.billableByDefaultHint": "Las nuevas entradas de este proyecto empiezan como facturables.",
1336
+ "staff.time_tracking.projects.form.code": "Código del proyecto",
1337
+ "staff.time_tracking.projects.form.createTitle": "Nuevo proyecto",
1338
+ "staff.time_tracking.projects.form.currency": "Moneda",
1339
+ "staff.time_tracking.projects.form.customer": "Cliente",
1340
+ "staff.time_tracking.projects.form.customerHint": "El tiempo se organiza por cliente: no se puede guardar un proyecto sin él.",
1341
+ "staff.time_tracking.projects.form.description": "Descripción",
1342
+ "staff.time_tracking.projects.form.descriptionPlaceholder": "Alcance del trabajo, lo acordado con el cliente…",
1343
+ "staff.time_tracking.projects.form.editTitle": "Editar proyecto",
1344
+ "staff.time_tracking.projects.form.groupBasics": "Datos básicos",
1345
+ "staff.time_tracking.projects.form.groupBilling": "Facturación",
1346
+ "staff.time_tracking.projects.form.groupBillingHint": "Puedes dejarlo vacío y completarlo antes del primer informe.",
1347
+ "staff.time_tracking.projects.form.groupBudget": "Presupuesto",
1348
+ "staff.time_tracking.projects.form.groupStatus": "Estado",
1349
+ "staff.time_tracking.projects.form.groupTeam": "Equipo",
1350
+ "staff.time_tracking.projects.form.hourlyRate": "Tarifa por hora",
1351
+ "staff.time_tracking.projects.form.name": "Nombre del proyecto",
1352
+ "staff.time_tracking.projects.form.namePlaceholder": "p. ej. Nordvik — portal de servicio",
1353
+ "staff.time_tracking.projects.form.perHour": "/ h",
1354
+ "staff.time_tracking.projects.form.status": "Estado",
1355
+ "staff.time_tracking.projects.rounding.body": "Actualmente: {{summary}}. El cambio afecta a todos los proyectos: configúralo en los ajustes del módulo.",
1356
+ "staff.time_tracking.projects.rounding.bodyUnknown": "El cambio afecta a todos los proyectos: configúralo en los ajustes del módulo.",
1357
+ "staff.time_tracking.projects.rounding.nearest": "a los {{unit}} min más cercanos",
1358
+ "staff.time_tracking.projects.rounding.none": "sin redondeo",
1359
+ "staff.time_tracking.projects.rounding.title": "El redondeo es global",
1360
+ "staff.time_tracking.projects.rounding.up": "al alza a {{unit}} min",
1361
+ "staff.time_tracking.projects.selection.selectAll": "Seleccionar todos los proyectos de esta página",
1362
+ "staff.time_tracking.projects.selection.selectRow": "Seleccionar proyecto",
1363
+ "staff.time_tracking.projects.team.afterCreate": "Podrás asignar personas cuando guardes el proyecto.",
1364
+ "staff.time_tracking.projects.team.drawer.assigned": "Asignados ({count})",
1365
+ "staff.time_tracking.projects.team.drawer.badges.adding": "se añadirá",
1366
+ "staff.time_tracking.projects.team.drawer.badges.always": "siempre",
1367
+ "staff.time_tracking.projects.team.drawer.badges.expired": "caducó el {date}",
1368
+ "staff.time_tracking.projects.team.drawer.badges.removing": "se quitará",
1369
+ "staff.time_tracking.projects.team.drawer.badges.scheduled": "desde {date}",
1370
+ "staff.time_tracking.projects.team.drawer.cancel": "Cancelar",
1371
+ "staff.time_tracking.projects.team.drawer.close": "Cerrar",
1372
+ "staff.time_tracking.projects.team.drawer.directoryTruncated": "Se muestran las primeras {count} personas — usa el buscador para encontrar las demás.",
1373
+ "staff.time_tracking.projects.team.drawer.discard.cancel": "Seguir editando",
1374
+ "staff.time_tracking.projects.team.drawer.discard.confirm": "Descartar",
1375
+ "staff.time_tracking.projects.team.drawer.discard.text": "Todavía no se ha guardado nada, así que si cierras ahora perderás todos los cambios de este panel.",
1376
+ "staff.time_tracking.projects.team.drawer.discard.title": "¿Descartar los cambios del equipo?",
1377
+ "staff.time_tracking.projects.team.drawer.footer.changes.few": "{count} cambios por guardar",
1378
+ "staff.time_tracking.projects.team.drawer.footer.changes.many": "{count} cambios por guardar",
1379
+ "staff.time_tracking.projects.team.drawer.footer.changes.one": "1 cambio por guardar",
1380
+ "staff.time_tracking.projects.team.drawer.footer.noChanges": "Sin cambios",
1381
+ "staff.time_tracking.projects.team.drawer.hintFromRole": "{role} · acceso por rol",
1382
+ "staff.time_tracking.projects.team.drawer.hintInProject": "{role} · {hours} en este proyecto",
1383
+ "staff.time_tracking.projects.team.drawer.hintPerson": "{role} · {hours}",
1384
+ "staff.time_tracking.projects.team.drawer.hoursAtLeast": "al menos {hours}",
1385
+ "staff.time_tracking.projects.team.drawer.info.immediate": "El acceso funciona inmediatamente después de guardar — sin volver a iniciar sesión.",
1386
+ "staff.time_tracking.projects.team.drawer.info.keepsTime": "Quitar el acceso no elimina el tiempo registrado — las entradas siguen en el proyecto y en los informes.",
1387
+ "staff.time_tracking.projects.team.drawer.loadError": "No se pudo cargar el equipo del proyecto.",
1388
+ "staff.time_tracking.projects.team.drawer.loading": "Cargando el equipo…",
1389
+ "staff.time_tracking.projects.team.drawer.lockedHint": "El acceso del líder del equipo proviene del permiso de proyectos, no de una asignación, por lo que no se puede cambiar aquí.",
1390
+ "staff.time_tracking.projects.team.drawer.others": "El resto de la organización",
1391
+ "staff.time_tracking.projects.team.drawer.othersEmpty": "No se encontraron otras personas.",
1392
+ "staff.time_tracking.projects.team.drawer.partialSaveError": "{reason} El guardado se interrumpió a medias, así que el equipo que aparece abajo se ha recargado desde el servidor: revísalo y vuelve a aplicar los cambios restantes.",
1393
+ "staff.time_tracking.projects.team.drawer.removeConfirm.text": "{name} tiene {hours} en este proyecto, ¿quitar el acceso?",
1394
+ "staff.time_tracking.projects.team.drawer.removeConfirm.textUnknown": "{name} puede tener tiempo registrado en este proyecto, ¿quitar el acceso?",
1395
+ "staff.time_tracking.projects.team.drawer.removeConfirm.title": "¿Quitar el acceso?",
1396
+ "staff.time_tracking.projects.team.drawer.roleLeader": "Líder del equipo",
1397
+ "staff.time_tracking.projects.team.drawer.roleMember": "Miembro del equipo",
1398
+ "staff.time_tracking.projects.team.drawer.save": "Guardar",
1399
+ "staff.time_tracking.projects.team.drawer.saveError": "No se pudo guardar el equipo del proyecto.",
1400
+ "staff.time_tracking.projects.team.drawer.saved": "Equipo del proyecto actualizado.",
1401
+ "staff.time_tracking.projects.team.drawer.saving": "Guardando…",
1402
+ "staff.time_tracking.projects.team.drawer.search": "Buscar una persona…",
1403
+ "staff.time_tracking.projects.team.drawer.selectPerson": "Asignar a {name}",
1404
+ "staff.time_tracking.projects.team.drawer.title": "Equipo del proyecto",
1405
+ "staff.time_tracking.projects.team.drawer.window.clear": "Borrar",
1406
+ "staff.time_tracking.projects.team.drawer.window.expiredHint": "La asignación caducó — esta persona ya no tiene acceso al proyecto.",
1407
+ "staff.time_tracking.projects.team.drawer.window.label": "Fin de la asignación",
1408
+ "staff.time_tracking.projects.team.drawer.window.range": "desde {start} · hasta {end}",
1409
+ "staff.time_tracking.projects.team.drawer.window.startOnly": "desde {start}",
1410
+ "staff.time_tracking.projects.team.empty": "Aún no hay nadie asignado.",
1411
+ "staff.time_tracking.projects.team.hint": "Sin asignación solo el Team Leader ve el proyecto.",
1412
+ "staff.time_tracking.projects.team.manage": "Gestionar equipo",
1413
+ "staff.time_tracking.projects.validation.budgetFormat": "Introduce el límite como número.",
1414
+ "staff.time_tracking.projects.validation.codeFormat": "Usa solo letras, dígitos y guiones.",
1415
+ "staff.time_tracking.projects.validation.codeRequired": "El código del proyecto es obligatorio.",
1416
+ "staff.time_tracking.projects.validation.color": "Elige un color de la paleta.",
1417
+ "staff.time_tracking.projects.validation.customerRequired": "El cliente es obligatorio.",
1418
+ "staff.time_tracking.projects.validation.nameRequired": "El nombre del proyecto es obligatorio.",
1419
+ "staff.time_tracking.projects.validation.rateFormat": "Introduce la tarifa como número.",
1420
+ "staff.time_tracking.recalculate.jobName": "Recalcular el seguimiento de tiempo",
1421
+ "staff.time_tracking.reports.alreadyReported.body": "Se excluyen de este informe para no facturar la misma hora dos veces. Incluirlas añade {hours} con los valores congelados al cerrar aquellos informes.",
1422
+ "staff.time_tracking.reports.alreadyReported.optIn": "Incluirlas de todos modos, con sus valores congelados",
1423
+ "staff.time_tracking.reports.alreadyReported.title": "{count} entradas ya están en otro informe",
1424
+ "staff.time_tracking.reports.close.action": "Cerrar y bloquear",
1425
+ "staff.time_tracking.reports.close.confirmBody": "Las {count} entradas que cubre pasan a ser de solo lectura con sus valores actuales. Se puede seguir registrando tiempo nuevo en las mismas tareas: irá al siguiente informe.",
1426
+ "staff.time_tracking.reports.close.confirmTitle": "¿Cerrar y bloquear este informe?",
1427
+ "staff.time_tracking.reports.close.done": "Informe cerrado. Sus entradas están bloqueadas.",
1428
+ "staff.time_tracking.reports.create.cancel": "Cancelar",
1429
+ "staff.time_tracking.reports.create.created": "Informe generado.",
1430
+ "staff.time_tracking.reports.create.customer": "Cliente",
1431
+ "staff.time_tracking.reports.create.customerHint": "Moneda del informe: {currency} — proviene de los proyectos de este cliente.",
1432
+ "staff.time_tracking.reports.create.entriesInPeriod": "{count} entradas en el periodo",
1433
+ "staff.time_tracking.reports.create.from": "Desde",
1434
+ "staff.time_tracking.reports.create.grouping": "Agrupación",
1435
+ "staff.time_tracking.reports.create.invalidPeriod": "La fecha final no puede ser anterior a la inicial.",
1436
+ "staff.time_tracking.reports.create.loadingProjects": "Cargando proyectos…",
1437
+ "staff.time_tracking.reports.create.noProjects": "Este cliente aún no tiene proyectos de tiempo.",
1438
+ "staff.time_tracking.reports.create.nonbillable": "Tiempo no facturable",
1439
+ "staff.time_tracking.reports.create.period": "Periodo",
1440
+ "staff.time_tracking.reports.create.pickCustomer": "Elige un cliente para ver sus proyectos.",
1441
+ "staff.time_tracking.reports.create.presentation": "Presentación",
1442
+ "staff.time_tracking.reports.create.preset.month": "Mes",
1443
+ "staff.time_tracking.reports.create.preset.week": "Semana",
1444
+ "staff.time_tracking.reports.create.preset.year": "Año",
1445
+ "staff.time_tracking.reports.create.projects": "Proyectos del cliente",
1446
+ "staff.time_tracking.reports.create.projectsHint": "Marca los proyectos que debe incluir el informe.",
1447
+ "staff.time_tracking.reports.create.reportTitle": "Título del informe",
1448
+ "staff.time_tracking.reports.create.roundingNearest": "al más cercano",
1449
+ "staff.time_tracking.reports.create.roundingNotice": "Redondeo: {rule} (global). Cada importe se redondea en la entrada y luego se suma, por lo que las líneas impresas cuadran con el total.",
1450
+ "staff.time_tracking.reports.create.roundingOff": "desactivado",
1451
+ "staff.time_tracking.reports.create.roundingRule": "{minutes} min, {direction}",
1452
+ "staff.time_tracking.reports.create.roundingUp": "siempre hacia arriba",
1453
+ "staff.time_tracking.reports.create.showRates": "Mostrar tarifas por hora",
1454
+ "staff.time_tracking.reports.create.showRatesHint": "Desactívalo si el cliente solo debe ver importes.",
1455
+ "staff.time_tracking.reports.create.spansMonths": "Este rango abarca más de un mes: ajusta las fechas si solo quieres uno.",
1456
+ "staff.time_tracking.reports.create.submit": "Generar vista previa",
1457
+ "staff.time_tracking.reports.create.subtitle": "Un informe siempre cubre un único cliente.",
1458
+ "staff.time_tracking.reports.create.summary": "Resumen del rango",
1459
+ "staff.time_tracking.reports.create.summaryBillable": "Tiempo facturable",
1460
+ "staff.time_tracking.reports.create.summaryEntries": "Entradas",
1461
+ "staff.time_tracking.reports.create.summaryNonbillable": "No facturable",
1462
+ "staff.time_tracking.reports.create.summaryProjects": "Proyectos",
1463
+ "staff.time_tracking.reports.create.summaryTotal": "A facturar",
1464
+ "staff.time_tracking.reports.create.title": "Nuevo informe",
1465
+ "staff.time_tracking.reports.create.to": "Hasta",
1466
+ "staff.time_tracking.reports.create.unknownCustomer": "Cliente",
1467
+ "staff.time_tracking.reports.detail.excludedHint": "{count} entradas de este periodo ya están congeladas en otro informe y se excluyen aquí ({hours}).",
1468
+ "staff.time_tracking.reports.detail.loading": "Cargando informe…",
1469
+ "staff.time_tracking.reports.detail.title": "Informe",
1470
+ "staff.time_tracking.reports.errors.closeFailed": "No se pudo cerrar este informe.",
1471
+ "staff.time_tracking.reports.errors.closed": "Este informe está cerrado. Desbloquéalo antes de cambiar nada.",
1472
+ "staff.time_tracking.reports.errors.createFailed": "No se pudo crear el informe.",
1473
+ "staff.time_tracking.reports.errors.currencyConflict": "Un informe siempre cubre una moneda. Los proyectos seleccionados usan {currencies}.",
1474
+ "staff.time_tracking.reports.errors.currencyConflictTitle": "Monedas mezcladas en esta selección",
1475
+ "staff.time_tracking.reports.errors.customerMismatch": "Un informe siempre cubre un cliente. Estos proyectos pertenecen a otro: {projects}.",
1476
+ "staff.time_tracking.reports.errors.empty": "Este informe no cubre ninguna entrada de tiempo, así que no hay nada que congelar. Ajusta antes el periodo o la selección de proyectos.",
1477
+ "staff.time_tracking.reports.errors.exportFailed": "No se pudo exportar este informe.",
1478
+ "staff.time_tracking.reports.errors.idRequired": "Se requiere el identificador del informe.",
1479
+ "staff.time_tracking.reports.errors.loadFailed": "No se pudo cargar este informe.",
1480
+ "staff.time_tracking.reports.errors.notClosed": "Este informe no está cerrado, así que no hay nada que desbloquear.",
1481
+ "staff.time_tracking.reports.errors.notFound": "Informe no encontrado o sin acceso.",
1482
+ "staff.time_tracking.reports.errors.previewFailed": "No se pudieron calcular los totales del informe.",
1483
+ "staff.time_tracking.reports.errors.projectNotFound": "Algunos de los proyectos seleccionados no están disponibles.",
1484
+ "staff.time_tracking.reports.errors.projectsRequired": "Elige al menos un proyecto para este informe.",
1485
+ "staff.time_tracking.reports.errors.reasonRequired": "Se requiere un motivo de desbloqueo.",
1486
+ "staff.time_tracking.reports.errors.referenceConflict": "No se pudo asignar un número de informe ahora. Inténtalo de nuevo.",
1487
+ "staff.time_tracking.reports.errors.unlockFailed": "No se pudo desbloquear este informe.",
1488
+ "staff.time_tracking.reports.errors.unsupportedFormat": "Los formatos de exportación admitidos son pdf, csv y xlsx.",
1489
+ "staff.time_tracking.reports.export.billable": "Facturable",
1490
+ "staff.time_tracking.reports.export.date": "Fecha",
1491
+ "staff.time_tracking.reports.export.description": "Descripción",
1492
+ "staff.time_tracking.reports.export.format.csv": "CSV",
1493
+ "staff.time_tracking.reports.export.format.pdf": "PDF",
1494
+ "staff.time_tracking.reports.export.format.xlsx": "Excel (XLSX)",
1495
+ "staff.time_tracking.reports.export.no": "No",
1496
+ "staff.time_tracking.reports.export.person": "Persona",
1497
+ "staff.time_tracking.reports.export.project": "Proyecto",
1498
+ "staff.time_tracking.reports.export.rawMinutes": "Minutos brutos",
1499
+ "staff.time_tracking.reports.export.roundedMinutes": "Minutos redondeados",
1500
+ "staff.time_tracking.reports.export.task": "Tarea",
1501
+ "staff.time_tracking.reports.export.yes": "Sí",
1502
+ "staff.time_tracking.reports.grouping.project_day": "Proyecto → día",
1503
+ "staff.time_tracking.reports.grouping.project_person": "Proyecto → persona",
1504
+ "staff.time_tracking.reports.grouping.project_task": "Proyecto → tarea",
1505
+ "staff.time_tracking.reports.history.closed": "Cerró el informe y bloqueó sus entradas.",
1506
+ "staff.time_tracking.reports.history.exported": "Exportó el informe.",
1507
+ "staff.time_tracking.reports.history.title": "Historial",
1508
+ "staff.time_tracking.reports.history.unlocked": "Desbloqueó las entradas del informe.",
1509
+ "staff.time_tracking.reports.list.amount": "Total",
1510
+ "staff.time_tracking.reports.list.create": "Nuevo informe",
1511
+ "staff.time_tracking.reports.list.empty": "Aún no hay informes. Genera uno para un cliente y verás qué es facturable.",
1512
+ "staff.time_tracking.reports.list.hours": "Facturable",
1513
+ "staff.time_tracking.reports.list.period": "Periodo",
1514
+ "staff.time_tracking.reports.list.readOnly": "Puedes ver informes, pero no crearlos.",
1515
+ "staff.time_tracking.reports.list.reference": "Número",
1516
+ "staff.time_tracking.reports.list.status": "Estado",
1517
+ "staff.time_tracking.reports.list.title": "Informe",
1518
+ "staff.time_tracking.reports.locked.body": "No se pueden cambiar su tiempo, tarifa ni marca de facturable sin desbloquear. Se puede seguir registrando tiempo nuevo en las mismas tareas: irá al siguiente informe.",
1519
+ "staff.time_tracking.reports.locked.tableCount": "{count} entradas · {hours}",
1520
+ "staff.time_tracking.reports.locked.tableTitle": "Entradas bloqueadas",
1521
+ "staff.time_tracking.reports.locked.title": "Las entradas de este informe son de solo lectura",
1522
+ "staff.time_tracking.reports.locked.truncated": "Se muestran las primeras {shown} de {total} entradas: exporta el informe para verlas todas.",
1523
+ "staff.time_tracking.reports.nonbillable.exclude": "Omitir por completo",
1524
+ "staff.time_tracking.reports.nonbillable.separate": "Mostrar por separado, sin coste",
1525
+ "staff.time_tracking.reports.rounding.nearest": "al más cercano",
1526
+ "staff.time_tracking.reports.rounding.off": "sin redondeo",
1527
+ "staff.time_tracking.reports.rounding.rule": "redondeo de {minutes} min, {direction}",
1528
+ "staff.time_tracking.reports.rounding.up": "siempre hacia arriba",
1529
+ "staff.time_tracking.reports.sheet.amount": "Importe",
1530
+ "staff.time_tracking.reports.sheet.collapse": "Ocultar subtareas",
1531
+ "staff.time_tracking.reports.sheet.empty": "No se registró tiempo en este periodo para los proyectos seleccionados.",
1532
+ "staff.time_tracking.reports.sheet.expand": "Mostrar subtareas",
1533
+ "staff.time_tracking.reports.sheet.issuedBy": "Emitido por",
1534
+ "staff.time_tracking.reports.sheet.lineLabel": "Línea",
1535
+ "staff.time_tracking.reports.sheet.noPerson": "Sin asignar",
1536
+ "staff.time_tracking.reports.sheet.noSubtasks": "Sin subtareas",
1537
+ "staff.time_tracking.reports.sheet.noTask": "Sin tarea",
1538
+ "staff.time_tracking.reports.sheet.nonbillable": "Tiempo no facturable",
1539
+ "staff.time_tracking.reports.sheet.nonbillableHint": "Mostrado a título informativo, fuera de la factura",
1540
+ "staff.time_tracking.reports.sheet.overline": "Resumen de tiempo y costes",
1541
+ "staff.time_tracking.reports.sheet.overrideBadge": "tarifa acordada",
1542
+ "staff.time_tracking.reports.sheet.period": "Periodo",
1543
+ "staff.time_tracking.reports.sheet.rate": "Tarifa",
1544
+ "staff.time_tracking.reports.sheet.reference": "Referencia",
1545
+ "staff.time_tracking.reports.sheet.time": "Tiempo",
1546
+ "staff.time_tracking.reports.sheet.total": "Total a facturar",
1547
+ "staff.time_tracking.reports.sheet.totalHint": "{billable} facturable · {nonbillable} no facturable · {rounding}",
1548
+ "staff.time_tracking.reports.status.closed": "Cerrado",
1549
+ "staff.time_tracking.reports.status.draft": "Borrador",
1550
+ "staff.time_tracking.reports.unlock.action": "Desbloquear entradas",
1551
+ "staff.time_tracking.reports.unlock.cancel": "Cancelar",
1552
+ "staff.time_tracking.reports.unlock.dialogTitle": "¿Desbloquear {count} entradas?",
1553
+ "staff.time_tracking.reports.unlock.done": "Informe desbloqueado. Sus entradas se pueden editar de nuevo.",
1554
+ "staff.time_tracking.reports.unlock.reason": "Motivo del desbloqueo",
1555
+ "staff.time_tracking.reports.unlock.reasonHint": "El motivo queda registrado en el historial del informe con tu nombre y la fecha.",
1556
+ "staff.time_tracking.reports.unlock.reasonPlaceholder": "p. ej. el cliente cuestionó 4 h de la refactorización: corrección acordada el día 21.",
1557
+ "staff.time_tracking.reports.unlock.sentBody": "Se descargó un archivo el {date}. Los cambios en las entradas desbloqueadas divergirán de la copia que tiene el cliente.",
1558
+ "staff.time_tracking.reports.unlock.sentTitle": "Este informe ya se ha exportado",
1559
+ "staff.time_tracking.rounding.strategy.unit": "Redondeo por unidad",
1560
+ "staff.time_tracking.settings.access.daysUnit": "días",
1561
+ "staff.time_tracking.settings.access.graceDays": "Periodo de gracia de acceso tras finalizar la asignación",
1562
+ "staff.time_tracking.settings.access.graceDaysError": "Introduce un número entero de días entre 0 y 365.",
1563
+ "staff.time_tracking.settings.access.graceDaysHint": "Un miembro conserva el acceso al proyecto durante estos días tras la fecha de fin de su asignación, para poder registrar y corregir la última semana de trabajo. Con 0, el acceso termina el mismo día de fin.",
1564
+ "staff.time_tracking.settings.access.title": "Acceso a los proyectos",
1565
+ "staff.time_tracking.settings.actions.cancel": "Cancelar",
1566
+ "staff.time_tracking.settings.actions.save": "Guardar",
1567
+ "staff.time_tracking.settings.defaults.billable": "Las entradas nuevas son facturables",
1568
+ "staff.time_tracking.settings.defaults.billableHint": "Un proyecto puede anularlo.",
1569
+ "staff.time_tracking.settings.defaults.chainStart": "Inicio = fin de la entrada anterior",
1570
+ "staff.time_tracking.settings.defaults.chainStartHint": "Una sugerencia al añadir otra entrada el mismo día.",
1571
+ "staff.time_tracking.settings.defaults.title": "Valores predeterminados de la entrada",
1572
+ "staff.time_tracking.settings.impact.body": "Con las {count} entradas actuales de los últimos {days} días, {rule} da {rounded} ({delta} frente al tiempo bruto). Los informes cerrados no cambian.",
1573
+ "staff.time_tracking.settings.impact.empty": "No hay entradas desbloqueadas en los últimos {days} días sobre las que proyectar.",
1574
+ "staff.time_tracking.settings.impact.error": "La vista previa del impacto no está disponible.",
1575
+ "staff.time_tracking.settings.impact.loading": "Calculando el impacto…",
1576
+ "staff.time_tracking.settings.impact.locked": "{count} entradas del periodo están bloqueadas en informes cerrados y quedan excluidas.",
1577
+ "staff.time_tracking.settings.impact.rule.nearest": "{unit} min al más cercano",
1578
+ "staff.time_tracking.settings.impact.rule.none": "sin redondeo",
1579
+ "staff.time_tracking.settings.impact.rule.up": "{unit} min hacia arriba",
1580
+ "staff.time_tracking.settings.impact.title": "Cambiar el redondeo afecta a los importes",
1581
+ "staff.time_tracking.settings.loadError": "No se han podido cargar los ajustes.",
1582
+ "staff.time_tracking.settings.loading": "Cargando los ajustes…",
1583
+ "staff.time_tracking.settings.retro.confirmText": "El tiempo redondeado de las entradas existentes se recalculará con la regla guardada. Las entradas bloqueadas en informes cerrados no se modifican.",
1584
+ "staff.time_tracking.settings.retro.confirmTitle": "¿Aplicar el redondeo a las entradas existentes?",
1585
+ "staff.time_tracking.settings.retro.cta": "Aplicar a las entradas existentes",
1586
+ "staff.time_tracking.settings.retro.error": "No se ha podido iniciar el recálculo.",
1587
+ "staff.time_tracking.settings.retro.hint": "Al guardar solo cambian las entradas nuevas. Recalcular las existentes es una acción aparte y explícita, y nunca modifica las entradas bloqueadas en informes cerrados.",
1588
+ "staff.time_tracking.settings.retro.jobDescription": "Recalculando el tiempo redondeado de las entradas existentes. Las entradas bloqueadas no se modifican.",
1589
+ "staff.time_tracking.settings.retro.jobName": "Aplicar el redondeo a las entradas existentes",
1590
+ "staff.time_tracking.settings.retro.nothing": "No hay nada que recalcular.",
1591
+ "staff.time_tracking.settings.retro.queued": "Recalculando el tiempo redondeado de {count} entradas. El progreso se muestra en la barra superior.",
1592
+ "staff.time_tracking.settings.retro.saveFirst": "Guarda primero la regla: el recálculo usa la regla guardada, no la que se ve en pantalla.",
1593
+ "staff.time_tracking.settings.retro.title": "Aplicar retroactivamente a las entradas existentes",
1594
+ "staff.time_tracking.settings.retry": "Reintentar",
1595
+ "staff.time_tracking.settings.rounding.description": "Se aplica a todos los proyectos. El valor redondeado es el que se usa para calcular el coste.",
1596
+ "staff.time_tracking.settings.rounding.direction": "Dirección",
1597
+ "staff.time_tracking.settings.rounding.direction.nearest": "Al más cercano",
1598
+ "staff.time_tracking.settings.rounding.direction.up": "Hacia arriba",
1599
+ "staff.time_tracking.settings.rounding.examples.title": "Ejemplos con el ajuste actual",
1600
+ "staff.time_tracking.settings.rounding.title": "Redondeo del tiempo",
1601
+ "staff.time_tracking.settings.rounding.unit": "Unidad",
1602
+ "staff.time_tracking.settings.rounding.unit.minutes": "{count} min",
1603
+ "staff.time_tracking.settings.rounding.unit.none": "Ninguno",
1604
+ "staff.time_tracking.settings.saveError": "No se han podido guardar los ajustes.",
1605
+ "staff.time_tracking.settings.saved": "Ajustes guardados.",
1606
+ "staff.time_tracking.settings.scope.body": "Estas reglas son globales: no se pueden definir por cliente ni por proyecto.",
1607
+ "staff.time_tracking.settings.scope.hint": "La tarifa y la moneda se mantienen a nivel de proyecto, y la tarifa específica a nivel de entrada.",
1608
+ "staff.time_tracking.settings.scope.title": "Alcance de los ajustes",
1609
+ "staff.time_tracking.settings.subtitle": "Reglas comunes a todos los clientes y proyectos",
1610
+ "staff.time_tracking.settings.targets.dailyHours": "Objetivo diario de horas",
1611
+ "staff.time_tracking.settings.targets.dailyHoursError": "Introduce un número de horas entre 0 y 24, o deja el campo vacío.",
1612
+ "staff.time_tracking.settings.targets.dailyHoursHint": "Escala las barras de carga en la hoja de horas. Déjalo vacío para desactivar los objetivos.",
1613
+ "staff.time_tracking.settings.targets.hoursUnit": "h",
1614
+ "staff.time_tracking.settings.title": "Ajustes del módulo",
1615
+ "staff.time_tracking.settings.warnings.overlap": "Avisar de entradas solapadas",
1616
+ "staff.time_tracking.settings.warnings.overlapHint": "Un aviso, no un bloqueo.",
1617
+ "staff.time_tracking.settings.warnings.runningTimer": "Recordar que hay un temporizador en marcha",
1618
+ "staff.time_tracking.settings.warnings.runningTimerHint": "Un recordatorio discreto al salir del módulo y tras 8 h de marcha continua.",
1619
+ "staff.time_tracking.settings.warnings.title": "Avisos",
1620
+ "staff.time_tracking.tags.add": "Añadir etiqueta",
1621
+ "staff.time_tracking.tags.deleted": "Etiqueta eliminada y quitada de {count} lugares.",
1622
+ "staff.time_tracking.tags.empty": "Aún no hay etiquetas",
1623
+ "staff.time_tracking.tags.errors.entryLocked": "Este registro de tiempo está bloqueado en un informe cerrado y sus etiquetas no se pueden cambiar.",
1624
+ "staff.time_tracking.tags.errors.entryNotFound": "Registro de tiempo no encontrado o sin acceso.",
1625
+ "staff.time_tracking.tags.errors.idRequired": "Se requiere el identificador de la etiqueta.",
1626
+ "staff.time_tracking.tags.errors.notFound": "Etiqueta no encontrada o sin acceso.",
1627
+ "staff.time_tracking.tags.errors.slugDuplicate": "Ya existe una etiqueta con este identificador.",
1628
+ "staff.time_tracking.tags.errors.taskNotFound": "Tarea no encontrada o sin acceso.",
1629
+ "staff.time_tracking.tags.errors.unknownIds": "Algunas etiquetas no existen en esta organización.",
1630
+ "staff.time_tracking.tags.fields.color": "Color",
1631
+ "staff.time_tracking.tags.fields.label": "Nombre",
1632
+ "staff.time_tracking.tags.fields.slug": "Identificador",
1633
+ "staff.time_tracking.tags.placeholder": "Buscar etiquetas",
1634
+ "staff.time_tracking.tags.remove": "Quitar etiqueta",
1635
+ "staff.time_tracking.tags.title": "Etiquetas",
1636
+ "staff.time_tracking.taskComments.empty": "Aún no hay comentarios.",
1637
+ "staff.time_tracking.taskComments.errors.idRequired": "Se requiere el identificador del comentario.",
1638
+ "staff.time_tracking.taskComments.errors.notAuthor": "Solo puedes editar o eliminar tus propios comentarios.",
1639
+ "staff.time_tracking.taskComments.errors.notFound": "Comentario no encontrado o no accesible.",
1640
+ "staff.time_tracking.taskComments.errors.taskIdRequired": "Se requiere el identificador de la tarea.",
1641
+ "staff.time_tracking.taskComments.placeholder": "Escribe un comentario…",
1642
+ "staff.time_tracking.taskComments.submit": "Comentar",
1643
+ "staff.time_tracking.taskComments.submitHint": "⌘↵ envía",
1644
+ "staff.time_tracking.taskComments.title": "Comentarios",
1645
+ "staff.time_tracking.taskDrawer.autoSave": "Los cambios se guardan automáticamente",
1646
+ "staff.time_tracking.taskDrawer.close": "Cerrar",
1647
+ "staff.time_tracking.taskDrawer.comments.empty": "Todavía no hay comentarios.",
1648
+ "staff.time_tracking.taskDrawer.comments.error": "No se pudo publicar el comentario.",
1649
+ "staff.time_tracking.taskDrawer.comments.hint": "envía",
1650
+ "staff.time_tracking.taskDrawer.comments.loadError": "No se pudieron cargar los comentarios.",
1651
+ "staff.time_tracking.taskDrawer.comments.loading": "Cargando los comentarios…",
1652
+ "staff.time_tracking.taskDrawer.comments.placeholder": "Escribe un comentario…",
1653
+ "staff.time_tracking.taskDrawer.comments.submit": "Comentar",
1654
+ "staff.time_tracking.taskDrawer.comments.title": "Comentarios ({count})",
1655
+ "staff.time_tracking.taskDrawer.comments.unknownAuthor": "Autor desconocido",
1656
+ "staff.time_tracking.taskDrawer.created": "creada el {date}",
1657
+ "staff.time_tracking.taskDrawer.entries.empty": "Todavía no hay registros de tiempo.",
1658
+ "staff.time_tracking.taskDrawer.entries.noDescription": "Sin descripción",
1659
+ "staff.time_tracking.taskDrawer.entries.showAll": "Mostrar todos",
1660
+ "staff.time_tracking.taskDrawer.entries.title": "Registros de tiempo ({count})",
1661
+ "staff.time_tracking.taskDrawer.loadError": "No se pudo cargar la tarea.",
1662
+ "staff.time_tracking.taskDrawer.loading": "Cargando la tarea…",
1663
+ "staff.time_tracking.taskDrawer.logged.billable": "facturable {hours}",
1664
+ "staff.time_tracking.taskDrawer.logged.cost": "coste {amount}",
1665
+ "staff.time_tracking.taskDrawer.logged.nonBillable": "no facturable {hours}",
1666
+ "staff.time_tracking.taskDrawer.logged.partialHint": "El desglose se calcula a partir de los registros más recientes de este proyecto.",
1667
+ "staff.time_tracking.taskDrawer.logged.split": "propio {own} · subtareas {children}",
1668
+ "staff.time_tracking.taskDrawer.logged.title": "Tiempo registrado",
1669
+ "staff.time_tracking.taskDrawer.properties.addTag": "Añadir etiqueta",
1670
+ "staff.time_tracking.taskDrawer.properties.assignee": "Asignada a",
1671
+ "staff.time_tracking.taskDrawer.properties.removeTag": "Quitar la etiqueta {label}",
1672
+ "staff.time_tracking.taskDrawer.properties.saveError": "No se pudo guardar el cambio.",
1673
+ "staff.time_tracking.taskDrawer.properties.status": "Estado",
1674
+ "staff.time_tracking.taskDrawer.properties.tagError": "No se pudieron guardar las etiquetas.",
1675
+ "staff.time_tracking.taskDrawer.properties.tags": "Etiquetas",
1676
+ "staff.time_tracking.taskDrawer.properties.tagsPending": "Las etiquetas ya guardadas en esta tarea aparecerán aquí cuando la lista de tareas las devuelva.",
1677
+ "staff.time_tracking.taskDrawer.properties.title": "Propiedades",
1678
+ "staff.time_tracking.taskDrawer.properties.unassigned": "Sin asignar",
1679
+ "staff.time_tracking.taskDrawer.quickLog.cta": "Registrar",
1680
+ "staff.time_tracking.taskDrawer.quickLog.descriptionPlaceholder": "¿En qué se empleó el tiempo?",
1681
+ "staff.time_tracking.taskDrawer.quickLog.details": "Detalles",
1682
+ "staff.time_tracking.taskDrawer.quickLog.error": "No se pudo guardar el registro de tiempo.",
1683
+ "staff.time_tracking.taskDrawer.quickLog.label": "Tiempo a registrar",
1684
+ "staff.time_tracking.taskDrawer.quickLog.placeholder": "1h 40m",
1685
+ "staff.time_tracking.taskDrawer.quickLog.saved": "Tiempo registrado.",
1686
+ "staff.time_tracking.taskDrawer.subtasks.add": "Añadir subtarea",
1687
+ "staff.time_tracking.taskDrawer.subtasks.addError": "No se pudo añadir la subtarea.",
1688
+ "staff.time_tracking.taskDrawer.subtasks.count": "{done}/{total}",
1689
+ "staff.time_tracking.taskDrawer.subtasks.empty": "Todavía no hay subtareas.",
1690
+ "staff.time_tracking.taskDrawer.subtasks.noDoneColumn": "Este proyecto no tiene columna de hechas, así que una subtarea no puede cerrarse.",
1691
+ "staff.time_tracking.taskDrawer.subtasks.placeholder": "Título de la subtarea",
1692
+ "staff.time_tracking.taskDrawer.subtasks.title": "Subtareas",
1693
+ "staff.time_tracking.taskDrawer.subtasks.toggle": "Marcar {title} como hecha",
1694
+ "staff.time_tracking.taskDrawer.subtasks.toggleError": "No se pudo cambiar el estado de la subtarea.",
1695
+ "staff.time_tracking.taskDrawer.timer.start": "Iniciar",
1696
+ "staff.time_tracking.taskDrawer.timer.stop": "Detener {elapsed}",
1697
+ "staff.time_tracking.taskDrawer.timer.switchText": "Solo puede haber un temporizador en marcha. ¿Detener el otro e iniciarlo aquí?",
1698
+ "staff.time_tracking.taskDrawer.timer.switchTitle": "Hay un temporizador en marcha en otra tarea",
1699
+ "staff.time_tracking.taskPicker.change": "Cambiar",
1700
+ "staff.time_tracking.taskPicker.count": "{shown} de {total}",
1701
+ "staff.time_tracking.taskPicker.empty": "Nada coincide con {term}",
1702
+ "staff.time_tracking.taskPicker.keyClose": "cerrar",
1703
+ "staff.time_tracking.taskPicker.keyMove": "mover",
1704
+ "staff.time_tracking.taskPicker.keyPick": "elegir",
1705
+ "staff.time_tracking.taskPicker.loading": "Cargando tareas…",
1706
+ "staff.time_tracking.taskPicker.noProject": "Sin proyecto",
1707
+ "staff.time_tracking.taskPicker.placeholder": "Elegir tarea",
1708
+ "staff.time_tracking.taskPicker.recent": "Recientes",
1709
+ "staff.time_tracking.taskPicker.search": "Buscar tareas",
1710
+ "staff.time_tracking.taskPicker.searchScoped": "Buscar tareas de {project}",
1711
+ "staff.time_tracking.taskStatuses.defaults.backlog": "Backlog",
1712
+ "staff.time_tracking.taskStatuses.defaults.done": "Hecho",
1713
+ "staff.time_tracking.taskStatuses.defaults.inProgress": "En curso",
1714
+ "staff.time_tracking.taskStatuses.defaults.inReview": "En revisión",
1715
+ "staff.time_tracking.taskStatuses.errors.defaultRequired": "Un proyecto necesita una columna predeterminada. Marca otra columna como predeterminada.",
1716
+ "staff.time_tracking.taskStatuses.errors.doneRequired": "Un proyecto necesita al menos una columna final. Marca antes otra columna como hecha.",
1717
+ "staff.time_tracking.taskStatuses.errors.hasTasks": "Esta columna todavía contiene tareas. Muévelas a otra columna antes de eliminarla.",
1718
+ "staff.time_tracking.taskStatuses.errors.idRequired": "Se requiere el identificador del estado de tarea.",
1719
+ "staff.time_tracking.taskStatuses.errors.lastColumn": "Un proyecto necesita al menos una columna. Añade otra columna antes de eliminar esta.",
1720
+ "staff.time_tracking.taskStatuses.errors.notFound": "Estado de tarea no encontrado o no accesible.",
1721
+ "staff.time_tracking.taskStatuses.errors.slugDuplicate": "Ya existe una columna con este slug en este proyecto.",
1722
+ "staff.time_tracking.taskStatuses.errors.unknownIds": "Algunas columnas no pertenecen a este proyecto.",
1723
+ "staff.time_tracking.tasks.errors.idRequired": "El identificador de la tarea es obligatorio.",
1724
+ "staff.time_tracking.tasks.errors.notFound": "Tarea no encontrada o sin acceso.",
1725
+ "staff.time_tracking.tasks.errors.parentNotFound": "Tarea principal no encontrada o sin acceso.",
1726
+ "staff.time_tracking.tasks.errors.parentProjectMismatch": "Una subtarea debe permanecer en el mismo proyecto que su tarea principal.",
1727
+ "staff.time_tracking.tasks.errors.parentSelf": "Una tarea no puede ser subtarea de sí misma.",
1728
+ "staff.time_tracking.tasks.errors.projectMoveUnsupported": "Una tarea no se puede mover a otro proyecto. Créala en el proyecto de destino.",
1729
+ "staff.time_tracking.tasks.errors.referenceConflict": "No se pudo asignar un número de tarea en este momento. Inténtalo de nuevo.",
1730
+ "staff.time_tracking.tasks.errors.statusMissing": "Este proyecto todavía no tiene columnas, así que no se puede colocar una tarea en su tablero.",
1731
+ "staff.time_tracking.tasks.errors.statusNotFound": "Esa columna no pertenece a este proyecto.",
1732
+ "staff.time_tracking.tasks.errors.subtaskDepthExceeded": "Las subtareas tienen un solo nivel. Una subtarea no puede tener subtareas propias.",
1733
+ "staff.time_tracking.timesheet.calendar.add": "+ añadir",
1734
+ "staff.time_tracking.timesheet.calendar.nonBillable": "No facturable",
1735
+ "staff.time_tracking.timesheet.filters.allProjects": "Todos los proyectos",
1736
+ "staff.time_tracking.timesheet.filters.me": "Yo",
1737
+ "staff.time_tracking.timesheet.filters.person": "Persona",
1738
+ "staff.time_tracking.timesheet.footer.billable": "Facturable:",
1739
+ "staff.time_tracking.timesheet.footer.overTarget": "+{duration} sobre el objetivo",
1740
+ "staff.time_tracking.timesheet.footer.period": "Periodo:",
1741
+ "staff.time_tracking.timesheet.footer.target": "Objetivo",
1742
+ "staff.time_tracking.timesheet.footer.targetWithDays": "Objetivo ({days} d × {hours} h)",
1743
+ "staff.time_tracking.timesheet.footer.underTarget": "−{duration} hasta el objetivo",
1744
+ "staff.time_tracking.timesheet.grid.addTaskRow": "Añadir una fila de tarea",
1745
+ "staff.time_tracking.timesheet.grid.caption": "Cuadrícula de la hoja de horas: una fila por proyecto o tarea y una columna por cada día del periodo.",
1746
+ "staff.time_tracking.timesheet.grid.empty.title": "Esta cuadrícula todavía no tiene filas",
1747
+ "staff.time_tracking.timesheet.grid.errors.locked": "Algunas de estas celdas pertenecen a un informe cerrado y no se pueden cambiar. Ahora aparecen como bloqueadas.",
1748
+ "staff.time_tracking.timesheet.grid.invalid": "Corrige la celda resaltada antes de guardar.",
1749
+ "staff.time_tracking.timesheet.grid.loading": "Cargando la cuadrícula de la hoja de horas…",
1750
+ "staff.time_tracking.timesheet.grid.lockedCell": "Bloqueado por un informe cerrado",
1751
+ "staff.time_tracking.timesheet.grid.noRows": "Añade una fila de proyecto para empezar a rellenar la cuadrícula.",
1752
+ "staff.time_tracking.timesheet.grid.rowMode.label": "Filas de la cuadrícula",
1753
+ "staff.time_tracking.timesheet.grid.rowMode.projects": "Proyectos",
1754
+ "staff.time_tracking.timesheet.grid.rowMode.tasks": "Proyectos + tareas",
1755
+ "staff.time_tracking.timesheet.grid.weekend": "Día de fin de semana",
1756
+ "staff.time_tracking.timesheet.list.aboveTarget": "{duration} por encima del objetivo",
1757
+ "staff.time_tracking.timesheet.list.belowTarget": "{duration} por debajo del objetivo",
1758
+ "staff.time_tracking.timesheet.list.duplicate": "Duplicar",
1759
+ "staff.time_tracking.timesheet.list.edit": "Editar",
1760
+ "staff.time_tracking.timesheet.list.empty": "No hay días en este periodo.",
1761
+ "staff.time_tracking.timesheet.list.locked": "bloqueado",
1762
+ "staff.time_tracking.timesheet.list.noEntries": "Aún no hay nada registrado este día.",
1763
+ "staff.time_tracking.timesheet.list.noTask": "Sin tarea",
1764
+ "staff.time_tracking.timesheet.list.nonBillable": "no facturable",
1765
+ "staff.time_tracking.timesheet.list.quickAdd.duration": "Duración",
1766
+ "staff.time_tracking.timesheet.list.quickAdd.start": "Hora de inicio",
1767
+ "staff.time_tracking.timesheet.list.quickAdd.startPlaceholder": "13:30",
1768
+ "staff.time_tracking.timesheet.list.quickAdd.submit": "Añadir",
1769
+ "staff.time_tracking.timesheet.list.quickAdd.target": "Proyecto o tarea",
1770
+ "staff.time_tracking.timesheet.period.label": "Periodo",
1771
+ "staff.time_tracking.timesheet.period.month": "Mes",
1772
+ "staff.time_tracking.timesheet.period.next": "Periodo siguiente",
1773
+ "staff.time_tracking.timesheet.period.previous": "Periodo anterior",
1774
+ "staff.time_tracking.timesheet.period.quarter": "Trimestre",
1775
+ "staff.time_tracking.timesheet.period.today": "Hoy",
1776
+ "staff.time_tracking.timesheet.period.week": "Semana",
1777
+ "staff.time_tracking.timesheet.period.year": "Año",
1778
+ "staff.time_tracking.timesheet.truncated": "Se muestran las primeras {count} entradas de este periodo: acota el periodo o los filtros para ver el resto.",
1779
+ "staff.time_tracking.timesheet.view.calendar": "Calendario",
1780
+ "staff.time_tracking.timesheet.view.grid": "Cuadrícula",
1781
+ "staff.time_tracking.timesheet.view.label": "Vista de la hoja de horas",
1782
+ "staff.time_tracking.timesheet.view.list": "Lista",
939
1783
  "staff.timesheets.errors.bulkSave": "No se pudieron guardar en lote los registros de tiempo.",
1784
+ "staff.timesheets.errors.bulkTagsUnsupported": "Las etiquetas no se pueden cambiar desde la cuadrícula de la hoja de horas. Abre el registro de tiempo para editar sus etiquetas.",
1785
+ "staff.timesheets.errors.copyDaySameDate": "El día de origen y el de destino deben ser diferentes.",
1786
+ "staff.timesheets.errors.copyDayTargetNotEmpty": "El día de destino ya tiene registros de tiempo. Revísalos primero o confirma para añadir estas copias de todos modos.",
940
1787
  "staff.timesheets.errors.entryNotFound": "Registro de tiempo no encontrado, eliminado o no asignado a ti.",
941
1788
  "staff.timesheets.errors.invalidBody": "Cuerpo de la solicitud no válido.",
942
1789
  "staff.timesheets.errors.invalidProjectId": "Identificador de proyecto no válido.",
1790
+ "staff.timesheets.errors.memberNotFound": "Miembro del proyecto de tiempo no encontrado o no accesible.",
943
1791
  "staff.timesheets.errors.memberRequired": "El identificador del miembro del proyecto de tiempo es obligatorio.",
944
1792
  "staff.timesheets.errors.missingEntryId": "Falta el identificador del registro.",
945
1793
  "staff.timesheets.errors.myProjects": "No se pudieron cargar tus proyectos.",
@@ -948,10 +1796,13 @@
948
1796
  "staff.timesheets.errors.notAssigned": "No estás asignado a este proyecto.",
949
1797
  "staff.timesheets.errors.notOwner": "Solo puedes gestionar tus propios registros de tiempo.",
950
1798
  "staff.timesheets.errors.projectCodeDuplicate": "Ya existe un proyecto con este código.",
1799
+ "staff.timesheets.errors.projectCurrencyLocked": "Este proyecto tiene entradas de tiempo congeladas en un informe cerrado. Desbloquea esos informes antes de cambiar la moneda.",
951
1800
  "staff.timesheets.errors.projectNotFound": "Proyecto de tiempo no encontrado o no accesible.",
1801
+ "staff.timesheets.errors.projectRequired": "Se requiere el identificador del proyecto de tiempo.",
952
1802
  "staff.timesheets.errors.projectsKpis": "Failed to load project KPIs.",
953
1803
  "staff.timesheets.errors.segmentCreate": "No se pudo crear el segmento del registro de tiempo.",
954
1804
  "staff.timesheets.errors.staffMemberNotFound": "Miembro del personal no encontrado o no accesible.",
1805
+ "staff.timesheets.errors.taskNotFound": "Tarea no encontrada o no accesible.",
955
1806
  "staff.timesheets.errors.timerAlreadyRunning": "Ya hay otro temporizador en marcha. Detenlo antes de iniciar uno nuevo.",
956
1807
  "staff.timesheets.errors.timerAlreadyStarted": "El temporizador ya está iniciado para este registro.",
957
1808
  "staff.timesheets.errors.timerStart": "No se pudo iniciar el temporizador.",
@@ -1038,13 +1889,56 @@
1038
1889
  "staff.timesheets.projects.actions.viewDetails": "View Details",
1039
1890
  "staff.timesheets.projects.active_employees": "Active Employees",
1040
1891
  "staff.timesheets.projects.add_employee": "Add Employee",
1892
+ "staff.timesheets.projects.detail.administration": "Administración",
1893
+ "staff.timesheets.projects.detail.autoColor": "Automático",
1894
+ "staff.timesheets.projects.detail.billableHours": "Horas facturables",
1895
+ "staff.timesheets.projects.detail.budgetAmount": "{percent}% de {value}",
1896
+ "staff.timesheets.projects.detail.budgetBadge": "Presupuesto {percent}%",
1897
+ "staff.timesheets.projects.detail.budgetHint": "Defínelo para seguir el consumo",
1898
+ "staff.timesheets.projects.detail.budgetHours": "{percent}% de {value} h",
1899
+ "staff.timesheets.projects.detail.budgetUsage": "Uso del presupuesto",
1900
+ "staff.timesheets.projects.detail.colDate": "Fecha",
1901
+ "staff.timesheets.projects.detail.colDescription": "Descripción",
1902
+ "staff.timesheets.projects.detail.colHours": "Horas",
1903
+ "staff.timesheets.projects.detail.colWho": "Persona",
1904
+ "staff.timesheets.projects.detail.commercials": "Facturación",
1905
+ "staff.timesheets.projects.detail.cost": "Coste hasta la fecha",
1906
+ "staff.timesheets.projects.detail.costBasis": "{hours} × {rate}",
1907
+ "staff.timesheets.projects.detail.createdAt": "Creado",
1908
+ "staff.timesheets.projects.detail.currencyLockedHint": "Bloqueada porque ya hay horas registradas en este proyecto.",
1909
+ "staff.timesheets.projects.detail.delivery": "Entrega",
1910
+ "staff.timesheets.projects.detail.details": "Detalles",
1911
+ "staff.timesheets.projects.detail.entryCount": "Registros de tiempo",
1912
+ "staff.timesheets.projects.detail.entryCountOne": "1 registro",
1913
+ "staff.timesheets.projects.detail.entryCountShort": "{count} registros",
1914
+ "staff.timesheets.projects.detail.loadingTasks": "Cargando tareas…",
1915
+ "staff.timesheets.projects.detail.loadingTime": "Cargando registros de tiempo…",
1916
+ "staff.timesheets.projects.detail.locked": "bloqueada",
1917
+ "staff.timesheets.projects.detail.lockedEntries": "Bloqueadas en informes",
1918
+ "staff.timesheets.projects.detail.loggedHours": "Horas registradas",
1919
+ "staff.timesheets.projects.detail.no": "No",
1920
+ "staff.timesheets.projects.detail.noBudget": "Sin presupuesto",
1921
+ "staff.timesheets.projects.detail.noTasks": "Aún no hay tareas",
1922
+ "staff.timesheets.projects.detail.noTime": "Aún no hay tiempo registrado",
1923
+ "staff.timesheets.projects.detail.noTimeHint": "Las horas registradas en este proyecto aparecerán aquí.",
1924
+ "staff.timesheets.projects.detail.nonBillable": "{hours} no facturables",
1925
+ "staff.timesheets.projects.detail.nonBillableTag": "no facturable",
1926
+ "staff.timesheets.projects.detail.startedOn": "Inicio {date}",
1041
1927
  "staff.timesheets.projects.detail.subtitle": "Project Settings",
1928
+ "staff.timesheets.projects.detail.tabTasks": "Tareas",
1929
+ "staff.timesheets.projects.detail.tabTeam": "Equipo",
1930
+ "staff.timesheets.projects.detail.tabTime": "Tiempo",
1931
+ "staff.timesheets.projects.detail.tabs": "Secciones del proyecto",
1932
+ "staff.timesheets.projects.detail.trendAria": "Horas por semana, últimas 7 semanas",
1933
+ "staff.timesheets.projects.detail.updatedAt": "Última actualización",
1934
+ "staff.timesheets.projects.detail.yes": "Sí",
1042
1935
  "staff.timesheets.projects.employees.addError": "Failed to add employee.",
1043
1936
  "staff.timesheets.projects.employees.added": "Employee added.",
1044
1937
  "staff.timesheets.projects.employees.assignmentStartDate": "Assignment Start Date",
1045
1938
  "staff.timesheets.projects.employees.department": "Department",
1046
1939
  "staff.timesheets.projects.employees.empty": "No employees assigned yet.",
1047
1940
  "staff.timesheets.projects.employees.endDate": "Assignment end",
1941
+ "staff.timesheets.projects.employees.loadError": "No se pudieron cargar los miembros del equipo. Comprueba tu conexión e inténtalo de nuevo.",
1048
1942
  "staff.timesheets.projects.employees.loading": "Loading employees...",
1049
1943
  "staff.timesheets.projects.employees.noResults": "No team members found",
1050
1944
  "staff.timesheets.projects.employees.remove": "Remove",
@@ -1069,6 +1963,8 @@
1069
1963
  "staff.timesheets.projects.form.actions.create": "Create",
1070
1964
  "staff.timesheets.projects.form.actions.edit": "Edit Project",
1071
1965
  "staff.timesheets.projects.form.actions.save": "Save",
1966
+ "staff.timesheets.projects.form.billableByDefault": "Facturable por defecto",
1967
+ "staff.timesheets.projects.form.budget": "Presupuesto",
1072
1968
  "staff.timesheets.projects.form.code": "Code",
1073
1969
  "staff.timesheets.projects.form.codePlaceholder": "PROJECT-001",
1074
1970
  "staff.timesheets.projects.form.color": "Color del proyecto",
@@ -1076,11 +1972,14 @@
1076
1972
  "staff.timesheets.projects.form.costCenter": "Cost center",
1077
1973
  "staff.timesheets.projects.form.costCenterPlaceholder": "Cost center code",
1078
1974
  "staff.timesheets.projects.form.createTitle": "Create project",
1975
+ "staff.timesheets.projects.form.currency": "Moneda",
1976
+ "staff.timesheets.projects.form.customer": "Cliente",
1079
1977
  "staff.timesheets.projects.form.description": "Description",
1080
1978
  "staff.timesheets.projects.form.descriptionPlaceholder": "Project description",
1081
1979
  "staff.timesheets.projects.form.editTitle": "Edit project",
1082
1980
  "staff.timesheets.projects.form.groupDetails": "Additional Information",
1083
1981
  "staff.timesheets.projects.form.groupMain": "Project Details",
1982
+ "staff.timesheets.projects.form.hourlyRate": "Tarifa por hora",
1084
1983
  "staff.timesheets.projects.form.name": "Name",
1085
1984
  "staff.timesheets.projects.form.namePlaceholder": "Project name",
1086
1985
  "staff.timesheets.projects.form.projectType": "Project type",