@dakkitor/api-contracts 1.1.154 → 1.5.0

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 (353) hide show
  1. package/dist/abilities/abilities.contract.d.ts +55 -1
  2. package/dist/abilities/abilities.contract.d.ts.map +1 -1
  3. package/dist/abilities/abilities.contract.js +95 -1
  4. package/dist/abilities/abilities.contract.spec.d.ts +2 -0
  5. package/dist/abilities/abilities.contract.spec.d.ts.map +1 -0
  6. package/dist/abilities/abilities.contract.spec.js +145 -0
  7. package/dist/abilities/admin-dashboard.abilities.test.d.ts +2 -0
  8. package/dist/abilities/admin-dashboard.abilities.test.d.ts.map +1 -0
  9. package/dist/abilities/admin-dashboard.abilities.test.js +33 -0
  10. package/dist/abilities/admin.abilities.json +19 -0
  11. package/dist/abilities/bot.abilities.json +13 -4
  12. package/dist/abilities/first-agent.abilities.json +330 -70
  13. package/dist/abilities/interconnection.abilities.json +75 -0
  14. package/dist/abilities/kpi.abilities.json +68 -0
  15. package/dist/abilities/office-manager.abilities.json +111 -0
  16. package/dist/abilities/outreach-service.abilities.json +14 -0
  17. package/dist/abilities/second-agent.abilities.json +430 -43
  18. package/dist/abilities/team-leads.json +71 -6
  19. package/dist/abilities/worker-curator.abilities.json +233 -0
  20. package/dist/actives/actives.contract.d.ts +15521 -19793
  21. package/dist/actives/actives.contract.d.ts.map +1 -1
  22. package/dist/actives/actives.contract.js +517 -114
  23. package/dist/agent-client-links/agent-client-links.contract.d.ts +1431 -291
  24. package/dist/agent-client-links/agent-client-links.contract.d.ts.map +1 -1
  25. package/dist/auth/auth.contract.d.ts +1050 -81
  26. package/dist/auth/auth.contract.d.ts.map +1 -1
  27. package/dist/auth/auth.contract.js +115 -3
  28. package/dist/bookings/booking-worker-summary.spec.d.ts +2 -0
  29. package/dist/bookings/booking-worker-summary.spec.d.ts.map +1 -0
  30. package/dist/bookings/booking-worker-summary.spec.js +25 -0
  31. package/dist/bookings/bookings.contract.d.ts +21631 -27105
  32. package/dist/bookings/bookings.contract.d.ts.map +1 -1
  33. package/dist/bookings/bookings.contract.js +383 -91
  34. package/dist/bookings/bookings.contract.spec.d.ts +2 -0
  35. package/dist/bookings/bookings.contract.spec.d.ts.map +1 -0
  36. package/dist/bookings/bookings.contract.spec.js +11 -0
  37. package/dist/bookings/job-lock.spec.d.ts +2 -0
  38. package/dist/bookings/job-lock.spec.d.ts.map +1 -0
  39. package/dist/bookings/job-lock.spec.js +56 -0
  40. package/dist/bot-parse-cache/bot-parse-cache.contract.d.ts +232 -0
  41. package/dist/bot-parse-cache/bot-parse-cache.contract.d.ts.map +1 -0
  42. package/dist/bot-parse-cache/bot-parse-cache.contract.js +64 -0
  43. package/dist/call-history/call-history.contract.d.ts +1336 -767
  44. package/dist/call-history/call-history.contract.d.ts.map +1 -1
  45. package/dist/call-history/call-history.contract.js +86 -10
  46. package/dist/calls-feed/calls-feed.contract.d.ts +417 -0
  47. package/dist/calls-feed/calls-feed.contract.d.ts.map +1 -0
  48. package/dist/calls-feed/calls-feed.contract.js +32 -0
  49. package/dist/client-contacts/client-contacts.contract.d.ts +410 -226
  50. package/dist/client-contacts/client-contacts.contract.d.ts.map +1 -1
  51. package/dist/client-contacts/client-contacts.contract.js +35 -4
  52. package/dist/clients/clients.contract.d.ts +227 -73
  53. package/dist/clients/clients.contract.d.ts.map +1 -1
  54. package/dist/clients/clients.contract.js +45 -21
  55. package/dist/collaboration-checkings/collaboration-checkings.contract.d.ts +2908 -1834
  56. package/dist/collaboration-checkings/collaboration-checkings.contract.d.ts.map +1 -1
  57. package/dist/collaboration-checkings/collaboration-checkings.contract.js +14 -9
  58. package/dist/collaborations/collaborations.contract.d.ts +2676 -1409
  59. package/dist/collaborations/collaborations.contract.d.ts.map +1 -1
  60. package/dist/collaborations/collaborations.contract.js +33 -9
  61. package/dist/common/call-rating.schema.d.ts.map +1 -1
  62. package/dist/common/call-rating.schema.js +4 -2
  63. package/dist/common/common-schemas.d.ts +59 -11
  64. package/dist/common/common-schemas.d.ts.map +1 -1
  65. package/dist/common/common-schemas.js +55 -29
  66. package/dist/common/error-schemas.d.ts +2 -2
  67. package/dist/common/pagination-query.schema.d.ts +13 -2
  68. package/dist/common/pagination-query.schema.d.ts.map +1 -1
  69. package/dist/common/pagination-query.schema.js +21 -2
  70. package/dist/common/pagination-query.schema.spec.d.ts +2 -0
  71. package/dist/common/pagination-query.schema.spec.d.ts.map +1 -0
  72. package/dist/common/pagination-query.schema.spec.js +53 -0
  73. package/dist/companies/companies.contract.d.ts +53 -28
  74. package/dist/companies/companies.contract.d.ts.map +1 -1
  75. package/dist/companies/companies.contract.js +11 -10
  76. package/dist/crews/crews.contract.d.ts +1010 -196
  77. package/dist/crews/crews.contract.d.ts.map +1 -1
  78. package/dist/crews/crews.contract.js +98 -17
  79. package/dist/crews/crews.contract.spec.d.ts +2 -0
  80. package/dist/crews/crews.contract.spec.d.ts.map +1 -0
  81. package/dist/crews/crews.contract.spec.js +67 -0
  82. package/dist/cron-executions/cron-executions.contract.d.ts +988 -59
  83. package/dist/cron-executions/cron-executions.contract.d.ts.map +1 -1
  84. package/dist/cron-executions/cron-executions.contract.js +127 -7
  85. package/dist/curated-worker-leads/__tests__/disposition-reason.spec.d.ts +2 -0
  86. package/dist/curated-worker-leads/__tests__/disposition-reason.spec.d.ts.map +1 -0
  87. package/dist/curated-worker-leads/__tests__/disposition-reason.spec.js +40 -0
  88. package/dist/curated-worker-leads/candidate-coordination-snapshot.spec.d.ts +2 -0
  89. package/dist/curated-worker-leads/candidate-coordination-snapshot.spec.d.ts.map +1 -0
  90. package/dist/curated-worker-leads/candidate-coordination-snapshot.spec.js +16 -0
  91. package/dist/curated-worker-leads/candidate-coordination.contract.d.ts +21650 -0
  92. package/dist/curated-worker-leads/candidate-coordination.contract.d.ts.map +1 -0
  93. package/dist/curated-worker-leads/candidate-coordination.contract.js +921 -0
  94. package/dist/curated-worker-leads/candidate-coordination.contract.spec.d.ts +2 -0
  95. package/dist/curated-worker-leads/candidate-coordination.contract.spec.d.ts.map +1 -0
  96. package/dist/curated-worker-leads/candidate-coordination.contract.spec.js +51 -0
  97. package/dist/curated-worker-leads/candidate-edit-session.contract.d.ts +2364 -0
  98. package/dist/curated-worker-leads/candidate-edit-session.contract.d.ts.map +1 -0
  99. package/dist/curated-worker-leads/candidate-edit-session.contract.js +173 -0
  100. package/dist/curated-worker-leads/consent-queue.contract.d.ts +4497 -0
  101. package/dist/curated-worker-leads/consent-queue.contract.d.ts.map +1 -0
  102. package/dist/curated-worker-leads/consent-queue.contract.js +201 -0
  103. package/dist/curated-worker-leads/contact-history.spec.d.ts +2 -0
  104. package/dist/curated-worker-leads/contact-history.spec.d.ts.map +1 -0
  105. package/dist/curated-worker-leads/contact-history.spec.js +88 -0
  106. package/dist/curated-worker-leads/contact-session.contract.spec.d.ts +2 -0
  107. package/dist/curated-worker-leads/contact-session.contract.spec.d.ts.map +1 -0
  108. package/dist/curated-worker-leads/contact-session.contract.spec.js +315 -0
  109. package/dist/curated-worker-leads/curated-worker-lead-config.contract.d.ts +489 -0
  110. package/dist/curated-worker-leads/curated-worker-lead-config.contract.d.ts.map +1 -0
  111. package/dist/curated-worker-leads/curated-worker-lead-config.contract.js +88 -0
  112. package/dist/curated-worker-leads/curated-worker-leads.contract.d.ts +135 -0
  113. package/dist/curated-worker-leads/curated-worker-leads.contract.d.ts.map +1 -0
  114. package/dist/curated-worker-leads/curated-worker-leads.contract.js +32 -0
  115. package/dist/curated-worker-leads/job-candidate-cards.spec.d.ts +2 -0
  116. package/dist/curated-worker-leads/job-candidate-cards.spec.d.ts.map +1 -0
  117. package/dist/curated-worker-leads/job-candidate-cards.spec.js +157 -0
  118. package/dist/curated-worker-leads/job-candidates.spec.d.ts +2 -0
  119. package/dist/curated-worker-leads/job-candidates.spec.d.ts.map +1 -0
  120. package/dist/curated-worker-leads/job-candidates.spec.js +140 -0
  121. package/dist/curated-worker-leads/job-feed-match-counts.contract.spec.d.ts +2 -0
  122. package/dist/curated-worker-leads/job-feed-match-counts.contract.spec.d.ts.map +1 -0
  123. package/dist/curated-worker-leads/job-feed-match-counts.contract.spec.js +19 -0
  124. package/dist/curated-worker-leads/jobs-tab.contract.d.ts +18547 -0
  125. package/dist/curated-worker-leads/jobs-tab.contract.d.ts.map +1 -0
  126. package/dist/curated-worker-leads/jobs-tab.contract.js +672 -0
  127. package/dist/curated-worker-leads/lead-agent-area.contract.d.ts +348 -0
  128. package/dist/curated-worker-leads/lead-agent-area.contract.d.ts.map +1 -0
  129. package/dist/curated-worker-leads/lead-agent-area.contract.js +51 -0
  130. package/dist/curated-worker-leads/owned-jobs-tab.contract.d.ts +1116 -0
  131. package/dist/curated-worker-leads/owned-jobs-tab.contract.d.ts.map +1 -0
  132. package/dist/curated-worker-leads/owned-jobs-tab.contract.js +93 -0
  133. package/dist/curated-workers/curated-filter-additions.spec.d.ts +2 -0
  134. package/dist/curated-workers/curated-filter-additions.spec.d.ts.map +1 -0
  135. package/dist/curated-workers/curated-filter-additions.spec.js +17 -0
  136. package/dist/curated-workers/curated-job-seeking.spec.d.ts +2 -0
  137. package/dist/curated-workers/curated-job-seeking.spec.d.ts.map +1 -0
  138. package/dist/curated-workers/curated-job-seeking.spec.js +53 -0
  139. package/dist/curated-workers/curated-workers-id-documents.spec.d.ts +2 -0
  140. package/dist/curated-workers/curated-workers-id-documents.spec.d.ts.map +1 -0
  141. package/dist/curated-workers/curated-workers-id-documents.spec.js +38 -0
  142. package/dist/curated-workers/curated-workers.contract.d.ts +6160 -1906
  143. package/dist/curated-workers/curated-workers.contract.d.ts.map +1 -1
  144. package/dist/curated-workers/curated-workers.contract.js +333 -51
  145. package/dist/dashboards/agent-daily-metrics.contract.d.ts +10 -10
  146. package/dist/dashboards/agent-daily-metrics.contract.js +1 -1
  147. package/dist/dashboards/dashboard-widgets.contract.d.ts +3777 -473
  148. package/dist/dashboards/dashboard-widgets.contract.d.ts.map +1 -1
  149. package/dist/dashboards/dashboard-widgets.contract.js +527 -29
  150. package/dist/dashboards/dashboard.contract.d.ts +8 -8
  151. package/dist/document-intake/document-intake.contract.d.ts +3132 -0
  152. package/dist/document-intake/document-intake.contract.d.ts.map +1 -0
  153. package/dist/document-intake/document-intake.contract.js +418 -0
  154. package/dist/export-jobs/export-jobs.contract.d.ts +3928 -0
  155. package/dist/export-jobs/export-jobs.contract.d.ts.map +1 -0
  156. package/dist/export-jobs/export-jobs.contract.js +240 -0
  157. package/dist/exports-events/exports-events.schemas.d.ts +90 -0
  158. package/dist/exports-events/exports-events.schemas.d.ts.map +1 -0
  159. package/dist/exports-events/exports-events.schemas.js +56 -0
  160. package/dist/files/files.contract.d.ts +133 -126
  161. package/dist/files/files.contract.d.ts.map +1 -1
  162. package/dist/files/files.contract.js +8 -0
  163. package/dist/health/health.contract.d.ts +4 -4
  164. package/dist/index.d.ts +86 -0
  165. package/dist/index.d.ts.map +1 -1
  166. package/dist/index.js +91 -1
  167. package/dist/interactions/interactions.contract.d.ts +162 -0
  168. package/dist/interactions/interactions.contract.d.ts.map +1 -0
  169. package/dist/interactions/interactions.contract.js +42 -0
  170. package/dist/job-clusters/job-clusters.contract.d.ts +1584 -0
  171. package/dist/job-clusters/job-clusters.contract.d.ts.map +1 -0
  172. package/dist/job-clusters/job-clusters.contract.js +133 -0
  173. package/dist/jobs/jobs.contract.d.ts +16662 -8628
  174. package/dist/jobs/jobs.contract.d.ts.map +1 -1
  175. package/dist/jobs/jobs.contract.js +403 -190
  176. package/dist/jobs/jobs.contract.spec.d.ts +2 -0
  177. package/dist/jobs/jobs.contract.spec.d.ts.map +1 -0
  178. package/dist/jobs/jobs.contract.spec.js +70 -0
  179. package/dist/kpi-impersonation/kpi-impersonation.contract.d.ts +75 -75
  180. package/dist/lead-assignments/lead-assignments.contract.d.ts +2933 -1122
  181. package/dist/lead-assignments/lead-assignments.contract.d.ts.map +1 -1
  182. package/dist/lead-assignments/lead-assignments.contract.js +29 -7
  183. package/dist/lead-distribution/agent-lead-distribution.contract.d.ts +328 -64
  184. package/dist/lead-distribution/agent-lead-distribution.contract.d.ts.map +1 -1
  185. package/dist/lead-distribution/agent-lead-distribution.contract.js +1 -1
  186. package/dist/lead-distribution/lead-distribution-config.contract.d.ts +31 -31
  187. package/dist/leads/leads.contract.d.ts +830 -368
  188. package/dist/leads/leads.contract.d.ts.map +1 -1
  189. package/dist/leads/leads.contract.js +106 -26
  190. package/dist/locations/locations.contract.d.ts +36 -36
  191. package/dist/notifications/notifications.contract.d.ts +1039 -0
  192. package/dist/notifications/notifications.contract.d.ts.map +1 -0
  193. package/dist/notifications/notifications.contract.js +110 -0
  194. package/dist/offices/offices.contract.d.ts +210 -60
  195. package/dist/offices/offices.contract.d.ts.map +1 -1
  196. package/dist/offices/offices.contract.js +18 -4
  197. package/dist/outreach/__tests__/outreach-claim.test.d.ts +2 -0
  198. package/dist/outreach/__tests__/outreach-claim.test.d.ts.map +1 -0
  199. package/dist/outreach/__tests__/outreach-claim.test.js +98 -0
  200. package/dist/outreach/__tests__/outreach-confirm-release.test.d.ts +2 -0
  201. package/dist/outreach/__tests__/outreach-confirm-release.test.d.ts.map +1 -0
  202. package/dist/outreach/__tests__/outreach-confirm-release.test.js +98 -0
  203. package/dist/outreach/__tests__/outreach-contract-additions.spec.d.ts +2 -0
  204. package/dist/outreach/__tests__/outreach-contract-additions.spec.d.ts.map +1 -0
  205. package/dist/outreach/__tests__/outreach-contract-additions.spec.js +78 -0
  206. package/dist/outreach/__tests__/outreach-requests.contract.spec.d.ts +2 -0
  207. package/dist/outreach/__tests__/outreach-requests.contract.spec.d.ts.map +1 -0
  208. package/dist/outreach/__tests__/outreach-requests.contract.spec.js +64 -0
  209. package/dist/outreach/__tests__/outreach-routes.test.d.ts +2 -0
  210. package/dist/outreach/__tests__/outreach-routes.test.d.ts.map +1 -0
  211. package/dist/outreach/__tests__/outreach-routes.test.js +57 -0
  212. package/dist/outreach/__tests__/outreach.schemas.test.d.ts +2 -0
  213. package/dist/outreach/__tests__/outreach.schemas.test.d.ts.map +1 -0
  214. package/dist/outreach/__tests__/outreach.schemas.test.js +144 -0
  215. package/dist/outreach/outreach-requests.contract.d.ts +1108 -0
  216. package/dist/outreach/outreach-requests.contract.d.ts.map +1 -0
  217. package/dist/outreach/outreach-requests.contract.js +134 -0
  218. package/dist/outreach/outreach-requests.schemas.d.ts +49 -0
  219. package/dist/outreach/outreach-requests.schemas.d.ts.map +1 -0
  220. package/dist/outreach/outreach-requests.schemas.js +60 -0
  221. package/dist/outreach/outreach.contract.d.ts +819 -0
  222. package/dist/outreach/outreach.contract.d.ts.map +1 -0
  223. package/dist/outreach/outreach.contract.js +195 -0
  224. package/dist/outreach/outreach.schemas.d.ts +118 -0
  225. package/dist/outreach/outreach.schemas.d.ts.map +1 -0
  226. package/dist/outreach/outreach.schemas.js +135 -0
  227. package/dist/own-research/own-research.contract.d.ts +1356 -552
  228. package/dist/own-research/own-research.contract.d.ts.map +1 -1
  229. package/dist/own-research/own-research.contract.js +14 -3
  230. package/dist/postcodes/postcodes.contract.d.ts +16 -16
  231. package/dist/proofs/proof-category.enum.d.ts +4 -0
  232. package/dist/proofs/proof-category.enum.d.ts.map +1 -0
  233. package/dist/proofs/proof-category.enum.js +5 -0
  234. package/dist/proofs/proof-entity-type.enum.d.ts +4 -0
  235. package/dist/proofs/proof-entity-type.enum.d.ts.map +1 -0
  236. package/dist/proofs/proof-entity-type.enum.js +5 -0
  237. package/dist/proofs/proof-type.enum.d.ts +28 -0
  238. package/dist/proofs/proof-type.enum.d.ts.map +1 -0
  239. package/dist/proofs/proof-type.enum.js +14 -0
  240. package/dist/proofs/proofs.contract.d.ts +3009 -0
  241. package/dist/proofs/proofs.contract.d.ts.map +1 -0
  242. package/dist/proofs/proofs.contract.js +92 -0
  243. package/dist/proofs/proofs.dtos.d.ts +1319 -0
  244. package/dist/proofs/proofs.dtos.d.ts.map +1 -0
  245. package/dist/proofs/proofs.dtos.js +178 -0
  246. package/dist/qualifications/qualifications.contract.d.ts +94 -94
  247. package/dist/realtime/data-changed.d.ts +21 -0
  248. package/dist/realtime/data-changed.d.ts.map +1 -0
  249. package/dist/realtime/data-changed.js +37 -0
  250. package/dist/shared/booking-history.schema.d.ts +27 -0
  251. package/dist/shared/booking-history.schema.d.ts.map +1 -0
  252. package/dist/shared/booking-history.schema.js +22 -0
  253. package/dist/shared/booking-history.spec.d.ts +2 -0
  254. package/dist/shared/booking-history.spec.d.ts.map +1 -0
  255. package/dist/shared/booking-history.spec.js +44 -0
  256. package/dist/shared/contact-suppressions.contract.d.ts +22 -0
  257. package/dist/shared/contact-suppressions.contract.d.ts.map +1 -0
  258. package/dist/shared/contact-suppressions.contract.js +13 -0
  259. package/dist/shared/live-booking.schema.d.ts +57 -0
  260. package/dist/shared/live-booking.schema.d.ts.map +1 -0
  261. package/dist/shared/live-booking.schema.js +34 -0
  262. package/dist/shared/summary-schemas.d.ts +218 -0
  263. package/dist/shared/summary-schemas.d.ts.map +1 -0
  264. package/dist/shared/summary-schemas.js +56 -0
  265. package/dist/sheets-sync/__tests__/sheets-sync-events.schemas.test.d.ts +2 -0
  266. package/dist/sheets-sync/__tests__/sheets-sync-events.schemas.test.d.ts.map +1 -0
  267. package/dist/sheets-sync/__tests__/sheets-sync-events.schemas.test.js +20 -0
  268. package/dist/sheets-sync/__tests__/tab-sync-config.schema.test.d.ts +2 -0
  269. package/dist/sheets-sync/__tests__/tab-sync-config.schema.test.d.ts.map +1 -0
  270. package/dist/sheets-sync/__tests__/tab-sync-config.schema.test.js +41 -0
  271. package/dist/sheets-sync/sheets-sync-events.schemas.d.ts +43 -0
  272. package/dist/sheets-sync/sheets-sync-events.schemas.d.ts.map +1 -0
  273. package/dist/sheets-sync/sheets-sync-events.schemas.js +29 -0
  274. package/dist/sheets-sync/sheets-sync.contract.d.ts +7258 -0
  275. package/dist/sheets-sync/sheets-sync.contract.d.ts.map +1 -0
  276. package/dist/sheets-sync/sheets-sync.contract.js +323 -0
  277. package/dist/telegram/telegram.contract.d.ts +727 -0
  278. package/dist/telegram/telegram.contract.d.ts.map +1 -0
  279. package/dist/telegram/telegram.contract.js +75 -0
  280. package/dist/trades/trade-rate-assessment.d.ts +18 -0
  281. package/dist/trades/trade-rate-assessment.d.ts.map +1 -0
  282. package/dist/trades/trade-rate-assessment.js +46 -0
  283. package/dist/trades/trade-rate-assessment.spec.d.ts +2 -0
  284. package/dist/trades/trade-rate-assessment.spec.d.ts.map +1 -0
  285. package/dist/trades/trade-rate-assessment.spec.js +223 -0
  286. package/dist/trades/trades.contract.d.ts +111 -0
  287. package/dist/trades/trades.contract.d.ts.map +1 -1
  288. package/dist/trades/trades.contract.js +49 -1
  289. package/dist/trades/trades.contract.spec.d.ts +2 -0
  290. package/dist/trades/trades.contract.spec.d.ts.map +1 -0
  291. package/dist/trades/trades.contract.spec.js +173 -0
  292. package/dist/user-access-grants/build-user-access-grant-rules.d.ts +10 -0
  293. package/dist/user-access-grants/build-user-access-grant-rules.d.ts.map +1 -0
  294. package/dist/user-access-grants/build-user-access-grant-rules.js +69 -0
  295. package/dist/user-access-grants/build-user-access-grant-rules.spec.d.ts +2 -0
  296. package/dist/user-access-grants/build-user-access-grant-rules.spec.d.ts.map +1 -0
  297. package/dist/user-access-grants/build-user-access-grant-rules.spec.js +77 -0
  298. package/dist/user-access-grants/user-access-grant-templates.json +454 -0
  299. package/dist/user-access-grants/user-access-grants.contract.d.ts +3886 -0
  300. package/dist/user-access-grants/user-access-grants.contract.d.ts.map +1 -0
  301. package/dist/user-access-grants/user-access-grants.contract.js +189 -0
  302. package/dist/user-access-grants/user-access-grants.contract.spec.d.ts +2 -0
  303. package/dist/user-access-grants/user-access-grants.contract.spec.d.ts.map +1 -0
  304. package/dist/user-access-grants/user-access-grants.contract.spec.js +149 -0
  305. package/dist/users/users.contract.d.ts +1959 -349
  306. package/dist/users/users.contract.d.ts.map +1 -1
  307. package/dist/users/users.contract.js +222 -37
  308. package/dist/users/users.contract.spec.d.ts +2 -0
  309. package/dist/users/users.contract.spec.d.ts.map +1 -0
  310. package/dist/users/users.contract.spec.js +103 -0
  311. package/dist/worker-identity-cases/worker-identity-cases.contract.d.ts +4609 -0
  312. package/dist/worker-identity-cases/worker-identity-cases.contract.d.ts.map +1 -0
  313. package/dist/worker-identity-cases/worker-identity-cases.contract.js +409 -0
  314. package/dist/worker-merge-proposals/worker-merge-proposals.contract.d.ts +1511 -0
  315. package/dist/worker-merge-proposals/worker-merge-proposals.contract.d.ts.map +1 -0
  316. package/dist/worker-merge-proposals/worker-merge-proposals.contract.js +150 -0
  317. package/dist/worker-source-identity-conflicts/worker-source-identity-conflicts.contract.d.ts +1106 -0
  318. package/dist/worker-source-identity-conflicts/worker-source-identity-conflicts.contract.d.ts.map +1 -0
  319. package/dist/worker-source-identity-conflicts/worker-source-identity-conflicts.contract.js +85 -0
  320. package/dist/worker-source-identity-conflicts/worker-source-identity-conflicts.contract.spec.d.ts +2 -0
  321. package/dist/worker-source-identity-conflicts/worker-source-identity-conflicts.contract.spec.d.ts.map +1 -0
  322. package/dist/worker-source-identity-conflicts/worker-source-identity-conflicts.contract.spec.js +216 -0
  323. package/dist/worker-source-identity-conflicts/worker-source-identity-conflicts.schemas.d.ts +453 -0
  324. package/dist/worker-source-identity-conflicts/worker-source-identity-conflicts.schemas.d.ts.map +1 -0
  325. package/dist/worker-source-identity-conflicts/worker-source-identity-conflicts.schemas.js +109 -0
  326. package/dist/workers/do-not-contact.contract.d.ts +46 -0
  327. package/dist/workers/do-not-contact.contract.d.ts.map +1 -0
  328. package/dist/workers/do-not-contact.contract.js +41 -0
  329. package/dist/workers/do-not-contact.contract.spec.d.ts +2 -0
  330. package/dist/workers/do-not-contact.contract.spec.d.ts.map +1 -0
  331. package/dist/workers/do-not-contact.contract.spec.js +47 -0
  332. package/dist/workers/duplicate-group-worker.spec.d.ts +2 -0
  333. package/dist/workers/duplicate-group-worker.spec.d.ts.map +1 -0
  334. package/dist/workers/duplicate-group-worker.spec.js +34 -0
  335. package/dist/workers/filter-exact-flags.spec.d.ts +2 -0
  336. package/dist/workers/filter-exact-flags.spec.d.ts.map +1 -0
  337. package/dist/workers/filter-exact-flags.spec.js +37 -0
  338. package/dist/workers/worker-source-attribution.contract.spec.d.ts +2 -0
  339. package/dist/workers/worker-source-attribution.contract.spec.d.ts.map +1 -0
  340. package/dist/workers/worker-source-attribution.contract.spec.js +442 -0
  341. package/dist/workers/worker-source.spec.d.ts +2 -0
  342. package/dist/workers/worker-source.spec.d.ts.map +1 -0
  343. package/dist/workers/worker-source.spec.js +13 -0
  344. package/dist/workers/worker-status-facets.spec.d.ts +2 -0
  345. package/dist/workers/worker-status-facets.spec.d.ts.map +1 -0
  346. package/dist/workers/worker-status-facets.spec.js +34 -0
  347. package/dist/workers/workers.contract.d.ts +19534 -5969
  348. package/dist/workers/workers.contract.d.ts.map +1 -1
  349. package/dist/workers/workers.contract.js +1096 -113
  350. package/dist/workers/workers.contract.spec.d.ts +2 -0
  351. package/dist/workers/workers.contract.spec.d.ts.map +1 -0
  352. package/dist/workers/workers.contract.spec.js +31 -0
  353. package/package.json +5 -4
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.activesContractRouter = exports.FilterTimesheetSchema = exports.TimesheetResponseSchema = exports.TimesheetCollaborationGroupSchema = exports.TimesheetCollaborationHeaderSchema = exports.TimesheetWorkerRowSchema = exports.TimesheetDayEntrySchema = exports.PaginatedActiveResponseSchema = exports.FilterActiveSchema = exports.FilterActiveByJobSchema = exports.ActivesByJobResponseSchema = exports.CollaborationActiveGroupSchema = exports.JobActiveGroupSchema = exports.JobGroupHeaderSchema = exports.ActiveInJobGroupSchema = exports.BatchDeleteActiveResponseSchema = exports.BatchDeleteActiveSchema = exports.BulkUpdateActiveResponseSchema = exports.BulkUpdateActiveSchema = exports.UpdateActiveSchema = exports.CreateActiveSchema = exports.ActiveSchema = exports.ActiveSortableFieldsSchema = exports.ActiveStatusFilterTypeSchema = exports.ActiveStatusSchema = void 0;
3
+ exports.activesContractRouter = exports.FilterTimesheetSchema = exports.TimesheetResponseSchema = exports.TimesheetCollaborationGroupSchema = exports.TimesheetCollaborationHeaderSchema = exports.TimesheetWorkerRowSchema = exports.TimesheetDayEntrySchema = exports.PaginatedActiveListResponseSchema = exports.ActiveListItemSchema = exports.PaginatedActiveResponseSchema = exports.FilterActiveSchema = exports.FilterActiveByJobSchema = exports.ActiveRegionCountsResponseSchema = exports.ActiveMapMarkersResponseSchema = exports.ActiveMapMarkerSchema = exports.FlatActivesByDayResponseSchema = exports.FlatActiveByDaySchema = exports.ActiveInJobGroupSchema = exports.BatchDeleteActiveResponseSchema = exports.BatchDeleteActiveSchema = exports.BulkUpdateActiveResponseSchema = exports.BulkUpdateActiveSchema = exports.UpdateActiveSchema = exports.CreateActiveSchema = exports.ActiveSchema = exports.ActiveSortFieldMapping = exports.ActiveSortableFieldsSchema = exports.BookingScheduleEntrySchema = exports.ActiveStatusChangeSchema = exports.ActiveStatusSchema = void 0;
4
4
  const zod_openapi_1 = require("@anatine/zod-openapi");
5
5
  const core_1 = require("@ts-rest/core");
6
6
  const zod_1 = require("zod");
@@ -9,6 +9,7 @@ const common_schemas_1 = require("../common/common-schemas");
9
9
  const error_schemas_1 = require("../common/error-schemas");
10
10
  const pagination_query_schema_1 = require("../common/pagination-query.schema");
11
11
  const pagination_schema_1 = require("../common/pagination.schema");
12
+ const summary_schemas_1 = require("../shared/summary-schemas");
12
13
  (0, zod_openapi_1.extendZodWithOpenApi)(zod_1.z);
13
14
  // Enums
14
15
  exports.ActiveStatusSchema = zod_1.z.enum([
@@ -19,19 +20,40 @@ exports.ActiveStatusSchema = zod_1.z.enum([
19
20
  'MEDICAL_LEAVE',
20
21
  'DAY_OFF',
21
22
  'INJURY',
22
- ]);
23
- exports.ActiveStatusFilterTypeSchema = zod_1.z.enum([
24
- 'SECOND_AGENT',
25
- 'FIRST_AGENT',
26
- 'BOTH',
27
- 'EITHER',
28
- ]);
23
+ 'OFF_SCHEDULE',
24
+ ], { message: 'Required' });
25
+ exports.ActiveStatusChangeSchema = zod_1.z.object({
26
+ id: zod_1.z.string().uuid(),
27
+ fromStatus: exports.ActiveStatusSchema.nullable(),
28
+ toStatus: exports.ActiveStatusSchema,
29
+ changedById: zod_1.z.string().uuid(),
30
+ changedByName: zod_1.z.string().nullable(),
31
+ createdAt: zod_1.z.string().datetime(),
32
+ reconstructed: zod_1.z.boolean(),
33
+ });
34
+ exports.BookingScheduleEntrySchema = zod_1.z
35
+ .object({
36
+ activeId: zod_1.z.string().uuid().describe('The active record for this day.'),
37
+ date: zod_1.z.string().date().describe('YYYY-MM-DD.'),
38
+ status: exports.ActiveStatusSchema.describe('Settled status for this day.'),
39
+ fromStatus: exports.ActiveStatusSchema.nullable().describe('The status before the attributing change, or null when no change record exists for this day.'),
40
+ attributingActorName: zod_1.z.string().nullable(),
41
+ attributingCreatedAt: zod_1.z
42
+ .union([zod_1.z.string().datetime(), zod_1.z.date(), zod_1.z.null()])
43
+ .transform((val) => (val instanceof Date ? val.toISOString() : val))
44
+ .nullable(),
45
+ attributingReconstructed: zod_1.z
46
+ .boolean()
47
+ .describe('True when the attributing change is a reconstructed (historical-estimate) row.'),
48
+ isPlacementStart: zod_1.z.boolean().describe('True when this day is booking.startDate.'),
49
+ isPlacementEnd: zod_1.z.boolean().describe('True when this day is booking.endDate.'),
50
+ })
51
+ .openapi({ title: 'BookingScheduleEntry' });
29
52
  exports.ActiveSortableFieldsSchema = zod_1.z.enum([
30
53
  'date',
31
54
  'startDate',
32
55
  'workerName',
33
- 'statusSa',
34
- 'statusFa',
56
+ 'status',
35
57
  'hoursWorked',
36
58
  'payRate',
37
59
  'receivedRate',
@@ -39,9 +61,28 @@ exports.ActiveSortableFieldsSchema = zod_1.z.enum([
39
61
  'collaborationCompany',
40
62
  'collaborationClient',
41
63
  'collaborationAgent',
64
+ 'postcode',
65
+ 'firstAgent',
42
66
  'createdAt',
43
67
  'updatedAt',
44
68
  ]);
69
+ /** Maps sort field values to ability field paths on SortActiveSchema. */
70
+ exports.ActiveSortFieldMapping = {
71
+ date: 'date',
72
+ startDate: 'startDate',
73
+ workerName: 'workerName',
74
+ status: 'status.status',
75
+ hoursWorked: 'hoursWorked',
76
+ payRate: 'pay.rate',
77
+ receivedRate: 'pay.receivedRate',
78
+ secondAgent: 'agentId',
79
+ collaborationCompany: 'job.companyId',
80
+ collaborationClient: 'job.clientId',
81
+ collaborationAgent: 'job.userId',
82
+ firstAgent: 'job.userId',
83
+ createdAt: 'createdAt',
84
+ updatedAt: 'updatedAt',
85
+ };
45
86
  // Active Pay schema - includes receivedRate
46
87
  const ActivePaySchema = zod_1.z
47
88
  .object({
@@ -51,6 +92,14 @@ const ActivePaySchema = zod_1.z
51
92
  .number()
52
93
  .nullable()
53
94
  .describe('The received pay rate'),
95
+ hourlyRate: zod_1.z.coerce
96
+ .number()
97
+ .nullable()
98
+ .describe('Pre-computed hourly rate (rate / workHours for DAILY, rate for HOURLY)'),
99
+ hourlyReceivedRate: zod_1.z.coerce
100
+ .number()
101
+ .nullable()
102
+ .describe('Pre-computed hourly received rate'),
54
103
  })
55
104
  .openapi({ title: 'ActivePay' });
56
105
  // Worker Pay schema for create/update (without receivedRate for SA)
@@ -73,12 +122,7 @@ const ActivePayUpdateSchema = zod_1.z
73
122
  .openapi({ title: 'ActivePayUpdate' });
74
123
  // Active Status Filter
75
124
  const ActiveStatusFilterSchema = zod_1.z
76
- .object({
77
- status: exports.ActiveStatusSchema.optional().describe('Filter by status value'),
78
- filterType: exports.ActiveStatusFilterTypeSchema.optional()
79
- .default('EITHER')
80
- .describe('Status filter type: SECOND_AGENT (check only SA status), FIRST_AGENT (check only FA status), BOTH (both statuses must be the same), EITHER (either SA or FA status can match)'),
81
- })
125
+ .object({ status: exports.ActiveStatusSchema.optional().describe('Filter by status value') })
82
126
  .openapi({ title: 'ActiveStatusFilter' });
83
127
  // ============================================================================
84
128
  // Main Active schema
@@ -90,20 +134,44 @@ exports.ActiveSchema = zod_1.z
90
134
  .uuid()
91
135
  .describe('The unique identifier of the active record.'),
92
136
  date: zod_1.z.string().date().describe('The date when the worker was active.'),
137
+ saUserId: zod_1.z
138
+ .string()
139
+ .uuid()
140
+ .nullable()
141
+ .optional()
142
+ .describe('Denormalised SA user ID — needed for frontend CASL condition evaluation'),
143
+ faUserId: zod_1.z
144
+ .string()
145
+ .uuid()
146
+ .nullable()
147
+ .optional()
148
+ .describe('Denormalised FA user ID — needed for frontend CASL condition evaluation'),
93
149
  pay: ActivePaySchema.describe('Pay Information'),
94
150
  comment: zod_1.z.string().nullable().describe('Optional comment for the day.'),
95
- statusSa: exports.ActiveStatusSchema.describe('Filter by status value.'),
151
+ status: exports.ActiveStatusSchema.describe('Status value.'),
152
+ statusUpdatedAt: zod_1.z
153
+ .union([zod_1.z.string().datetime(), zod_1.z.date(), zod_1.z.null()])
154
+ .transform((val) => (val instanceof Date ? val.toISOString() : val))
155
+ .nullable()
156
+ .describe('The timestamp when status was last updated.'),
157
+ // DEPRECATED (read-only): historical dual statuses; not written/edited after the single-status cutover
158
+ statusSa: exports.ActiveStatusSchema.nullable().describe('DEPRECATED: historical SA status.'),
96
159
  statusSaUpdatedAt: zod_1.z
97
160
  .union([zod_1.z.string().datetime(), zod_1.z.date(), zod_1.z.null()])
98
161
  .transform((val) => (val instanceof Date ? val.toISOString() : val))
99
162
  .nullable()
100
- .describe('The timestamp when statusSa was last updated.'),
101
- statusFa: exports.ActiveStatusSchema.describe('Filter by status value.'),
163
+ .describe('DEPRECATED: timestamp when SA status was last updated.'),
164
+ statusFa: exports.ActiveStatusSchema.nullable().describe('DEPRECATED: historical FA status.'),
102
165
  statusFaUpdatedAt: zod_1.z
103
166
  .union([zod_1.z.string().datetime(), zod_1.z.date(), zod_1.z.null()])
104
167
  .transform((val) => (val instanceof Date ? val.toISOString() : val))
105
168
  .nullable()
106
- .describe('The timestamp when statusFa was last updated.'),
169
+ .describe('DEPRECATED: timestamp when FA status was last updated.'),
170
+ statusChangedById: zod_1.z
171
+ .string()
172
+ .uuid()
173
+ .nullable()
174
+ .describe('ID of the user who last changed the status.'),
107
175
  hoursWorked: zod_1.z.coerce
108
176
  .number()
109
177
  .nullable()
@@ -128,8 +196,7 @@ exports.CreateActiveSchema = zod_1.z
128
196
  date: zod_1.z.string().date().describe('Select date'),
129
197
  pay: WorkerPaySchema.describe('Pay rate and unit'),
130
198
  comment: zod_1.z.string().optional().describe('Enter comment'),
131
- statusSa: exports.ActiveStatusSchema.optional().describe('Select SA status'),
132
- statusFa: exports.ActiveStatusSchema.optional().describe('Select FA status'),
199
+ status: exports.ActiveStatusSchema.optional().describe('Status'),
133
200
  })
134
201
  .openapi({ title: 'CreateActive' });
135
202
  exports.UpdateActiveSchema = zod_1.z
@@ -137,8 +204,18 @@ exports.UpdateActiveSchema = zod_1.z
137
204
  pay: ActivePayUpdateSchema.optional().describe('Updated pay rate and unit'),
138
205
  hoursWorked: zod_1.z.number().min(0).optional().describe('Updated hours worked'),
139
206
  comment: zod_1.z.string().nullable().optional().describe('Updated comment'),
140
- statusSa: exports.ActiveStatusSchema.optional().describe('Updated SA status'),
141
- statusFa: exports.ActiveStatusSchema.optional().describe('Updated FA status'),
207
+ status: exports.ActiveStatusSchema.optional().describe('Status'),
208
+ collaboration: zod_1.z
209
+ .object({
210
+ clientId: zod_1.z.string().uuid().optional().describe('Client ID'),
211
+ companyId: zod_1.z.string().uuid().describe('Company ID'),
212
+ userId: zod_1.z.string().uuid().optional().describe('User/agent ID'),
213
+ startDate: zod_1.z.string().date().describe('Start date for change range'),
214
+ endDate: zod_1.z.string().date().describe('End date for change range'),
215
+ updateBookingAndJob: zod_1.z.boolean().optional().describe('Whether to also update booking and job'),
216
+ })
217
+ .optional()
218
+ .describe('Collaboration change — updates company/client on actives in date range'),
142
219
  })
143
220
  .openapi({ title: 'UpdateActive' });
144
221
  exports.BulkUpdateActiveSchema = zod_1.z
@@ -154,6 +231,18 @@ exports.BulkUpdateActiveSchema = zod_1.z
154
231
  exports.BulkUpdateActiveResponseSchema = zod_1.z
155
232
  .object({
156
233
  updated: zod_1.z.number().describe('Number of records updated'),
234
+ collaborationChanged: zod_1.z
235
+ .number()
236
+ .optional()
237
+ .describe('Number of active records updated with new collaboration'),
238
+ bookingsUpdated: zod_1.z
239
+ .number()
240
+ .optional()
241
+ .describe('Number of bookings updated with new collaboration dates'),
242
+ jobsUpdated: zod_1.z
243
+ .number()
244
+ .optional()
245
+ .describe('Number of jobs updated with new collaboration'),
157
246
  })
158
247
  .openapi({ title: 'BulkUpdateActiveResponse' });
159
248
  exports.BatchDeleteActiveSchema = zod_1.z
@@ -171,16 +260,53 @@ exports.BatchDeleteActiveResponseSchema = zod_1.z
171
260
  })
172
261
  .openapi({ title: 'BatchDeleteActiveResponse' });
173
262
  // ============================================================================
174
- // Grouped-by-Job schemas
263
+ // Grouped-by-Job schemas (kept for frontend type compatibility)
264
+ // NOTE: ActiveInJobGroupSchema is kept because the ActiveInJobGroup type is
265
+ // still consumed by frontend components (active-row.tsx, placements-today.tsx,
266
+ // group-actives-by-collaboration.ts). The other grouped schemas
267
+ // (JobGroupHeaderSchema, JobActiveGroupSchema, CollaborationActiveGroupSchema,
268
+ // ActivesByJobResponseSchema) have been removed as they are no longer used.
175
269
  // ============================================================================
176
270
  /** Active record within a job group — booking.job is omitted (available from parent) */
177
271
  exports.ActiveInJobGroupSchema = zod_1.z
178
272
  .object({
179
273
  id: zod_1.z.string().uuid(),
180
274
  date: zod_1.z.string().date(),
275
+ saUserId: zod_1.z
276
+ .string()
277
+ .uuid()
278
+ .nullable()
279
+ .optional()
280
+ .describe('Denormalised SA user ID — needed for frontend CASL condition evaluation'),
281
+ faUserId: zod_1.z
282
+ .string()
283
+ .uuid()
284
+ .nullable()
285
+ .optional()
286
+ .describe('Denormalised FA user ID — needed for frontend CASL condition evaluation'),
181
287
  pay: ActivePaySchema,
182
- statusSa: exports.ActiveStatusSchema,
183
- statusFa: exports.ActiveStatusSchema,
288
+ status: exports.ActiveStatusSchema,
289
+ // DEPRECATED (read-only): historical dual statuses; not written/edited after the single-status cutover
290
+ statusSa: exports.ActiveStatusSchema.nullable().optional().describe('DEPRECATED: historical SA status.'),
291
+ statusSaUpdatedAt: zod_1.z
292
+ .union([zod_1.z.string().datetime(), zod_1.z.date(), zod_1.z.null()])
293
+ .transform((val) => (val instanceof Date ? val.toISOString() : val))
294
+ .nullable()
295
+ .optional()
296
+ .describe('DEPRECATED: timestamp when SA status was last updated.'),
297
+ statusFa: exports.ActiveStatusSchema.nullable().optional().describe('DEPRECATED: historical FA status.'),
298
+ statusFaUpdatedAt: zod_1.z
299
+ .union([zod_1.z.string().datetime(), zod_1.z.date(), zod_1.z.null()])
300
+ .transform((val) => (val instanceof Date ? val.toISOString() : val))
301
+ .nullable()
302
+ .optional()
303
+ .describe('DEPRECATED: timestamp when FA status was last updated.'),
304
+ statusChangedById: zod_1.z
305
+ .string()
306
+ .uuid()
307
+ .nullable()
308
+ .optional()
309
+ .describe('ID of the user who last changed the status.'),
184
310
  hoursWorked: zod_1.z.coerce.number().nullable(),
185
311
  hoursWorkedUpdatedAt: zod_1.z
186
312
  .union([zod_1.z.string().datetime(), zod_1.z.date(), zod_1.z.null()])
@@ -201,11 +327,15 @@ exports.ActiveInJobGroupSchema = zod_1.z
201
327
  .union([zod_1.z.string(), zod_1.z.date(), zod_1.z.null()])
202
328
  .transform((val) => (val instanceof Date ? val.toISOString() : val))
203
329
  .nullable(),
330
+ expectedEndDate: zod_1.z
331
+ .union([zod_1.z.string(), zod_1.z.date(), zod_1.z.null()])
332
+ .transform((val) => (val instanceof Date ? val.toISOString() : val))
333
+ .nullable()
334
+ .optional(),
204
335
  worker: zod_1.z.object({
205
336
  id: zod_1.z.string().uuid(),
206
337
  firstName: zod_1.z.string(),
207
338
  lastName: zod_1.z.string().nullable(),
208
- phoneNumbers: zod_1.z.array(common_schemas_1.PhoneNumberResponseSchema).default([]),
209
339
  }),
210
340
  user: zod_1.z.object({
211
341
  id: zod_1.z.string().uuid(),
@@ -214,7 +344,13 @@ exports.ActiveInJobGroupSchema = zod_1.z
214
344
  }),
215
345
  job: zod_1.z
216
346
  .object({
217
- currentCollaboration: zod_1.z
347
+ createdById: zod_1.z
348
+ .string()
349
+ .uuid()
350
+ .nullable()
351
+ .optional()
352
+ .describe('Job creator — needed for frontend CASL condition evaluation when collaboration is null'),
353
+ collaboration: zod_1.z
218
354
  .object({
219
355
  userId: zod_1.z
220
356
  .string()
@@ -231,109 +367,223 @@ exports.ActiveInJobGroupSchema = zod_1.z
231
367
  }),
232
368
  })
233
369
  .openapi({ title: 'ActiveInJobGroup' });
234
- /** Minimal job shape for the group header */
235
- exports.JobGroupHeaderSchema = zod_1.z
370
+ // ============================================================================
371
+ // Flat-by-day schemas (replaces grouped response for findAllByJob endpoint)
372
+ // ============================================================================
373
+ /** Flat active record with embedded job context — frontend groups by collaboration/job */
374
+ exports.FlatActiveByDaySchema = zod_1.z
236
375
  .object({
237
376
  id: zod_1.z.string().uuid(),
238
- tradeId: zod_1.z.string().uuid(),
239
- createdById: zod_1.z
377
+ date: zod_1.z.string().date(),
378
+ saUserId: zod_1.z
240
379
  .string()
241
380
  .uuid()
242
381
  .nullable()
243
382
  .optional()
244
- .describe('Creator User ID (used for CASL condition evaluation)'),
245
- location: zod_1.z
246
- .object({
247
- postcode: zod_1.z.string().nullable(),
248
- })
383
+ .describe('Denormalised SA user ID needed for frontend CASL condition evaluation'),
384
+ faUserId: zod_1.z
385
+ .string()
386
+ .uuid()
387
+ .nullable()
388
+ .optional()
389
+ .describe('Denormalised FA user ID — needed for frontend CASL condition evaluation'),
390
+ pay: ActivePaySchema,
391
+ status: exports.ActiveStatusSchema,
392
+ // DEPRECATED (read-only): historical dual statuses; not written/edited after the single-status cutover
393
+ statusSa: exports.ActiveStatusSchema.nullable().describe('DEPRECATED: historical SA status.'),
394
+ statusSaUpdatedAt: zod_1.z
395
+ .union([zod_1.z.string().datetime(), zod_1.z.date(), zod_1.z.null()])
396
+ .transform((val) => (val instanceof Date ? val.toISOString() : val))
397
+ .nullable()
398
+ .describe('DEPRECATED: timestamp when SA status was last updated.'),
399
+ statusFa: exports.ActiveStatusSchema.nullable().describe('DEPRECATED: historical FA status.'),
400
+ statusFaUpdatedAt: zod_1.z
401
+ .union([zod_1.z.string().datetime(), zod_1.z.date(), zod_1.z.null()])
402
+ .transform((val) => (val instanceof Date ? val.toISOString() : val))
403
+ .nullable()
404
+ .describe('DEPRECATED: timestamp when FA status was last updated.'),
405
+ statusChangedById: zod_1.z
406
+ .string()
407
+ .uuid()
408
+ .nullable()
409
+ .describe('ID of the user who last changed the status.'),
410
+ hoursWorked: zod_1.z.coerce.number().nullable(),
411
+ hoursWorkedUpdatedAt: zod_1.z
412
+ .union([zod_1.z.string().datetime(), zod_1.z.date(), zod_1.z.null()])
413
+ .transform((val) => (val instanceof Date ? val.toISOString() : val))
249
414
  .nullable(),
250
- currentCollaboration: zod_1.z
251
- .object({
415
+ booking: zod_1.z.object({
416
+ id: zod_1.z.string().uuid(),
252
417
  userId: zod_1.z
253
418
  .string()
254
419
  .uuid()
255
420
  .nullable()
256
421
  .optional()
257
- .describe('Agent User ID (used for CASL condition evaluation)'),
258
- client: zod_1.z
259
- .object({
260
- id: zod_1.z.string().uuid(),
261
- name: zod_1.z.string(),
262
- })
422
+ .describe('Booking owner (SA) for CASL condition evaluation'),
423
+ startDate: zod_1.z
424
+ .union([zod_1.z.string(), zod_1.z.date()])
425
+ .transform((val) => (val instanceof Date ? val.toISOString() : val)),
426
+ endDate: zod_1.z
427
+ .union([zod_1.z.string(), zod_1.z.date(), zod_1.z.null()])
428
+ .transform((val) => (val instanceof Date ? val.toISOString() : val))
263
429
  .nullable(),
264
- company: zod_1.z
265
- .object({
430
+ expectedEndDate: zod_1.z
431
+ .union([zod_1.z.string(), zod_1.z.date(), zod_1.z.null()])
432
+ .transform((val) => (val instanceof Date ? val.toISOString() : val))
433
+ .nullable()
434
+ .optional(),
435
+ worker: zod_1.z.object({
266
436
  id: zod_1.z.string().uuid(),
267
- name: zod_1.z.string(),
268
- })
269
- .nullable(),
270
- user: zod_1.z
271
- .object({
437
+ firstName: zod_1.z.string(),
438
+ lastName: zod_1.z.string().nullable(),
439
+ }),
440
+ user: zod_1.z.object({
272
441
  id: zod_1.z.string().uuid(),
273
442
  firstName: zod_1.z.string(),
274
443
  lastName: zod_1.z.string().nullable(),
275
- })
276
- .nullable(),
277
- })
278
- .nullable(),
279
- createdAt: zod_1.z
280
- .union([zod_1.z.string(), zod_1.z.date()])
281
- .transform((val) => (val instanceof Date ? val.toISOString() : val)),
444
+ }),
445
+ job: zod_1.z.object({
446
+ id: zod_1.z.string().uuid(),
447
+ tradeId: zod_1.z.string().uuid(),
448
+ createdById: zod_1.z
449
+ .string()
450
+ .uuid()
451
+ .nullable()
452
+ .optional()
453
+ .describe('Creator User ID (for CASL condition evaluation)'),
454
+ createdBy: zod_1.z
455
+ .object({
456
+ id: zod_1.z.string().uuid(),
457
+ firstName: zod_1.z.string(),
458
+ lastName: zod_1.z.string().nullable(),
459
+ })
460
+ .nullable()
461
+ .optional()
462
+ .describe('Creator user — fallback agent when collaboration is null'),
463
+ createdAt: zod_1.z
464
+ .union([zod_1.z.string(), zod_1.z.date()])
465
+ .transform((val) => (val instanceof Date ? val.toISOString() : val)),
466
+ location: zod_1.z.object({ postcode: zod_1.z.string().nullable() }).nullable(),
467
+ collaboration: zod_1.z
468
+ .object({
469
+ id: zod_1.z.string().uuid().nullable(),
470
+ userId: zod_1.z
471
+ .string()
472
+ .uuid()
473
+ .nullable()
474
+ .optional()
475
+ .describe('FA agent User ID (for CASL condition evaluation)'),
476
+ client: zod_1.z
477
+ .object({ id: zod_1.z.string().uuid(), name: zod_1.z.string() })
478
+ .nullable()
479
+ .optional(),
480
+ company: zod_1.z
481
+ .object({ id: zod_1.z.string().uuid(), name: zod_1.z.string() })
482
+ .nullable()
483
+ .optional(),
484
+ user: zod_1.z
485
+ .object({
486
+ id: zod_1.z.string().uuid(),
487
+ firstName: zod_1.z.string(),
488
+ lastName: zod_1.z.string().nullable(),
489
+ })
490
+ .nullable()
491
+ .optional(),
492
+ })
493
+ .nullable()
494
+ .optional(),
495
+ }),
496
+ }),
282
497
  })
283
- .openapi({ title: 'JobGroupHeader' });
284
- /** A single job group with its actives and status breakdown */
285
- exports.JobActiveGroupSchema = zod_1.z
498
+ .openapi({ title: 'FlatActiveByDay' });
499
+ /** Response for the by-day endpoint uses `data` key for interceptor compatibility */
500
+ exports.FlatActivesByDayResponseSchema = zod_1.z
286
501
  .object({
287
- job: exports.JobGroupHeaderSchema,
288
- actives: zod_1.z.array(exports.ActiveInJobGroupSchema),
289
- statusBreakdown: zod_1.z
290
- .record(exports.ActiveStatusSchema, zod_1.z.number())
291
- .describe('Count per status'),
502
+ data: zod_1.z.array(exports.FlatActiveByDaySchema),
503
+ total: zod_1.z.number(),
292
504
  })
293
- .openapi({ title: 'JobActiveGroup' });
294
- exports.CollaborationActiveGroupSchema = zod_1.z
505
+ .openapi({ title: 'FlatActivesByDayResponse' });
506
+ exports.ActiveMapMarkerSchema = zod_1.z
295
507
  .object({
296
- collaboration: bookings_contract_1.CollaborationGroupHeaderSchema.describe('Collaboration header'),
297
- jobs: zod_1.z
298
- .array(exports.JobActiveGroupSchema)
299
- .describe('Jobs within this collaboration'),
300
- totalActives: zod_1.z
508
+ jobId: zod_1.z.string().uuid().describe('Job ID'),
509
+ tradeId: zod_1.z.string().uuid().describe('Trade ID'),
510
+ postcode: zod_1.z.string().nullable().describe('Job postcode'),
511
+ latitude: zod_1.z.number().describe('Latitude coordinate'),
512
+ longitude: zod_1.z.number().describe('Longitude coordinate'),
513
+ activeCount: zod_1.z.number().int().describe('Number of active workers on this job'),
514
+ collaboration: zod_1.z
515
+ .object({
516
+ id: zod_1.z.string().uuid(),
517
+ userId: zod_1.z.string().uuid().nullable(),
518
+ userName: zod_1.z.string().nullable(),
519
+ clientName: zod_1.z.string().nullable(),
520
+ companyName: zod_1.z.string().nullable(),
521
+ })
522
+ .nullable()
523
+ .describe('Collaboration info (CASL-filtered)'),
524
+ })
525
+ .openapi({ title: 'ActiveMapMarker' });
526
+ exports.ActiveMapMarkersResponseSchema = zod_1.z
527
+ .object({
528
+ items: zod_1.z.array(exports.ActiveMapMarkerSchema),
529
+ totalCount: zod_1.z
530
+ .number()
531
+ .int()
532
+ .describe('Total active workers matching filters'),
533
+ excludedCount: zod_1.z
301
534
  .number()
302
- .describe('Total actives in this collaboration group'),
535
+ .int()
536
+ .describe('Active workers excluded due to missing job coordinates'),
303
537
  })
304
- .openapi({ title: 'CollaborationActiveGroup' });
305
- /** Top-level response for the grouped-by-job endpoint */
306
- exports.ActivesByJobResponseSchema = zod_1.z
538
+ .openapi({ title: 'ActiveMapMarkersResponse' });
539
+ exports.ActiveRegionCountsResponseSchema = zod_1.z
307
540
  .object({
308
- collaborations: zod_1.z.array(exports.CollaborationActiveGroupSchema),
309
- totalActives: zod_1.z.number(),
310
- totalJobs: zod_1.z.number(),
311
- totalCollaborations: zod_1.z.number(),
541
+ areaCounts: zod_1.z
542
+ .record(zod_1.z.string(), zod_1.z.number().int())
543
+ .describe('Active count per postcode area (e.g., "AB": 12, "N": 45)'),
544
+ districtCounts: zod_1.z
545
+ .record(zod_1.z.string(), zod_1.z.number().int())
546
+ .describe('Active count per postcode district (e.g., "AB10": 3, "N1": 15)'),
547
+ totalCount: zod_1.z
548
+ .number()
549
+ .int()
550
+ .describe('Total active workers matching filters'),
312
551
  })
313
- .openapi({ title: 'ActivesByJobResponse' });
552
+ .openapi({ title: 'ActiveRegionCounts' });
314
553
  /** Filter schema for the by-job endpoint — no pagination, date is required */
315
554
  exports.FilterActiveByJobSchema = zod_1.z
316
555
  .object({
317
- workerName: zod_1.z.string().optional().nullable(),
556
+ date: zod_1.z
557
+ .string()
558
+ .date()
559
+ .describe('Single date (YYYY-MM-DD) to query actives for'),
560
+ workerName: common_schemas_1.NameFilterSchema.optional()
561
+ .nullable()
562
+ .describe('Search worker by name (value) with optional exact match'),
563
+ status: ActiveStatusFilterSchema.optional().nullable(),
564
+ pay: common_schemas_1.PayRangeSchema.optional().nullable(),
318
565
  agentId: zod_1.z.string().uuid().optional().nullable(),
319
566
  job: bookings_contract_1.FilterJobInBookingSchema.optional().nullable(),
320
- date: common_schemas_1.DateRangeSchema.refine((d) => d.from != null, {
321
- message: 'date.from is required',
322
- path: ['from'],
323
- }).describe('Date range — typically a single day'),
324
- pay: common_schemas_1.PayRangeSchema.optional().nullable(),
325
- status: ActiveStatusFilterSchema.optional().nullable(),
326
- sortBy: exports.ActiveSortableFieldsSchema.optional().nullable(),
327
- sortOrder: common_schemas_1.SortOrderSchema.optional().nullable(),
567
+ jobIds: zod_1.z
568
+ .array(zod_1.z.string().uuid())
569
+ .optional()
570
+ .nullable()
571
+ .describe('Filter actives to specific job IDs'),
572
+ sort: (0, common_schemas_1.createSortArraySchema)(exports.ActiveSortableFieldsSchema),
328
573
  })
329
574
  .openapi({ title: 'FilterActiveByJob' });
330
575
  // Filter Active schema
331
576
  exports.FilterActiveSchema = pagination_query_schema_1.PaginationQuerySchema.extend({
332
- workerName: zod_1.z
333
- .string()
334
- .optional()
577
+ date: common_schemas_1.DateRangeSchema.optional().nullable().describe('Filter by date range'),
578
+ workerName: common_schemas_1.NameFilterSchema.optional()
579
+ .nullable()
580
+ .describe('Search worker by name (value) with optional exact match'),
581
+ status: ActiveStatusFilterSchema.optional()
582
+ .nullable()
583
+ .describe('Filter by status'),
584
+ pay: common_schemas_1.PayRangeSchema.optional()
335
585
  .nullable()
336
- .describe('Search worker by name'),
586
+ .describe('Filter by pay rate range'),
337
587
  agentId: zod_1.z
338
588
  .string()
339
589
  .uuid()
@@ -343,30 +593,119 @@ exports.FilterActiveSchema = pagination_query_schema_1.PaginationQuerySchema.ext
343
593
  job: bookings_contract_1.FilterJobInBookingSchema.optional()
344
594
  .nullable()
345
595
  .describe('Filter by job details'),
346
- date: common_schemas_1.DateRangeSchema.optional().nullable().describe('Filter by date range'),
347
- pay: common_schemas_1.PayRangeSchema.optional()
348
- .nullable()
349
- .describe('Filter by pay rate range'),
350
- status: ActiveStatusFilterSchema.optional()
351
- .nullable()
352
- .describe('Filter by status'),
353
- sortBy: exports.ActiveSortableFieldsSchema.optional()
354
- .nullable()
355
- .describe('The field to sort the results by'),
356
- sortOrder: common_schemas_1.SortOrderSchema.optional()
357
- .nullable()
358
- .describe('The order to sort the results by'),
596
+ sort: (0, common_schemas_1.createSortArraySchema)(exports.ActiveSortableFieldsSchema),
359
597
  });
360
598
  exports.PaginatedActiveResponseSchema = (0, pagination_schema_1.createPaginatedResponseSchema)(exports.ActiveSchema)
361
599
  .describe('Active records retrieved successfully')
362
600
  .openapi({ title: 'ActivesPaginatedResponse' });
363
601
  // ============================================================================
602
+ // ActiveListItemSchema — optimised schema for the findAll paginated list
603
+ // ============================================================================
604
+ // Worker summary with phone numbers for Actives
605
+ const ActiveWorkerSummarySchema = summary_schemas_1.WorkerSummarySchema.extend({
606
+ phoneNumbers: zod_1.z.array(common_schemas_1.PhoneNumberResponseSchema).default([]),
607
+ }).openapi({ title: 'ActiveWorkerSummary' });
608
+ // Job summary for active context
609
+ const ActiveJobSummarySchema = zod_1.z
610
+ .object({
611
+ id: zod_1.z.string().uuid(),
612
+ tradeId: zod_1.z.string().uuid(),
613
+ createdById: zod_1.z.string().uuid().nullable().optional(),
614
+ createdBy: summary_schemas_1.UserSummarySchema.nullable().optional(),
615
+ location: summary_schemas_1.LocationSummarySchema.nullable().optional(),
616
+ collaboration: summary_schemas_1.CollaborationSummarySchema.nullable().optional(),
617
+ })
618
+ .openapi({ title: 'ActiveJobSummary' });
619
+ // Booking summary for active context
620
+ const ActiveBookingSummarySchema = zod_1.z
621
+ .object({
622
+ id: zod_1.z.string().uuid(),
623
+ userId: zod_1.z.string().uuid().nullable().optional(),
624
+ startDate: zod_1.z
625
+ .union([zod_1.z.string(), zod_1.z.date()])
626
+ .transform((val) => (val instanceof Date ? val.toISOString() : val)),
627
+ endDate: zod_1.z
628
+ .union([zod_1.z.string(), zod_1.z.date(), zod_1.z.null()])
629
+ .transform((val) => (val instanceof Date ? val.toISOString() : val))
630
+ .nullable()
631
+ .optional(),
632
+ expectedEndDate: zod_1.z
633
+ .union([zod_1.z.string(), zod_1.z.date(), zod_1.z.null()])
634
+ .transform((val) => (val instanceof Date ? val.toISOString() : val))
635
+ .nullable()
636
+ .optional(),
637
+ worker: ActiveWorkerSummarySchema,
638
+ user: summary_schemas_1.UserSummarySchema,
639
+ job: ActiveJobSummarySchema,
640
+ })
641
+ .openapi({ title: 'ActiveBookingSummary' });
642
+ exports.ActiveListItemSchema = zod_1.z
643
+ .object({
644
+ id: zod_1.z.string().uuid(),
645
+ date: zod_1.z.string().date(),
646
+ saUserId: zod_1.z
647
+ .string()
648
+ .uuid()
649
+ .nullable()
650
+ .optional()
651
+ .describe('Denormalised SA user ID — needed for frontend CASL condition evaluation'),
652
+ faUserId: zod_1.z
653
+ .string()
654
+ .uuid()
655
+ .nullable()
656
+ .optional()
657
+ .describe('Denormalised FA user ID — needed for frontend CASL condition evaluation'),
658
+ pay: ActivePaySchema,
659
+ comment: zod_1.z.string().nullable(),
660
+ status: exports.ActiveStatusSchema.describe('Status value.'),
661
+ statusUpdatedAt: zod_1.z
662
+ .union([zod_1.z.string().datetime(), zod_1.z.date(), zod_1.z.null()])
663
+ .transform((val) => (val instanceof Date ? val.toISOString() : val))
664
+ .nullable()
665
+ .describe('The timestamp when status was last updated.'),
666
+ // DEPRECATED (read-only): historical dual statuses; not written/edited after the single-status cutover
667
+ statusSa: exports.ActiveStatusSchema.nullable().describe('DEPRECATED: historical SA status.'),
668
+ statusSaUpdatedAt: zod_1.z
669
+ .union([zod_1.z.string().datetime(), zod_1.z.date(), zod_1.z.null()])
670
+ .transform((val) => (val instanceof Date ? val.toISOString() : val))
671
+ .nullable()
672
+ .describe('DEPRECATED: timestamp when SA status was last updated.'),
673
+ statusFa: exports.ActiveStatusSchema.nullable().describe('DEPRECATED: historical FA status.'),
674
+ statusFaUpdatedAt: zod_1.z
675
+ .union([zod_1.z.string().datetime(), zod_1.z.date(), zod_1.z.null()])
676
+ .transform((val) => (val instanceof Date ? val.toISOString() : val))
677
+ .nullable()
678
+ .describe('DEPRECATED: timestamp when FA status was last updated.'),
679
+ statusChangedById: zod_1.z
680
+ .string()
681
+ .uuid()
682
+ .nullable()
683
+ .describe('ID of the user who last changed the status.'),
684
+ hoursWorked: zod_1.z.coerce.number().nullable(),
685
+ hoursWorkedUpdatedAt: zod_1.z
686
+ .union([zod_1.z.string().datetime(), zod_1.z.date(), zod_1.z.null()])
687
+ .transform((val) => (val instanceof Date ? val.toISOString() : val))
688
+ .nullable(),
689
+ booking: ActiveBookingSummarySchema,
690
+ createdAt: zod_1.z
691
+ .union([zod_1.z.string().datetime(), zod_1.z.date()])
692
+ .transform((val) => (val instanceof Date ? val.toISOString() : val)),
693
+ updatedAt: zod_1.z
694
+ .union([zod_1.z.string().datetime(), zod_1.z.date()])
695
+ .transform((val) => (val instanceof Date ? val.toISOString() : val)),
696
+ })
697
+ .openapi({ title: 'ActiveListItem' });
698
+ exports.PaginatedActiveListResponseSchema = (0, pagination_schema_1.createPaginatedResponseSchema)(exports.ActiveListItemSchema);
699
+ // ============================================================================
364
700
  // Timesheet schemas
365
701
  // ============================================================================
366
702
  /** A single day entry in the timesheet */
367
703
  exports.TimesheetDayEntrySchema = zod_1.z
368
704
  .object({
369
705
  activeId: zod_1.z.string().uuid(),
706
+ saUserId: zod_1.z.string().uuid().nullable(),
707
+ faUserId: zod_1.z.string().uuid().nullable(),
708
+ status: exports.ActiveStatusSchema,
370
709
  hoursWorked: zod_1.z.coerce.number().nullable(),
371
710
  payRate: zod_1.z.coerce.number().min(0),
372
711
  payUnit: common_schemas_1.RateUnitSchema,
@@ -378,13 +717,13 @@ exports.TimesheetWorkerRowSchema = zod_1.z
378
717
  .object({
379
718
  workerId: zod_1.z.string().uuid(),
380
719
  workerName: zod_1.z.string(),
381
- bookingId: zod_1.z.string().uuid(),
382
720
  jobId: zod_1.z.string().uuid(),
383
721
  tradeId: zod_1.z.string().uuid(),
384
722
  postcode: zod_1.z.string().nullable(),
385
723
  secondAgentName: zod_1.z.string().nullable(),
386
724
  days: zod_1.z.record(zod_1.z.string(), exports.TimesheetDayEntrySchema.nullable()),
387
725
  totalHours: zod_1.z.coerce.number().nullable(),
726
+ daysWorked: zod_1.z.coerce.number(),
388
727
  })
389
728
  .openapi({ title: 'TimesheetWorkerRow' });
390
729
  /** Collaboration header for timesheet grouping */
@@ -424,7 +763,9 @@ exports.FilterTimesheetSchema = zod_1.z
424
763
  .date()
425
764
  .optional()
426
765
  .describe('Monday of the week (YYYY-MM-DD)'),
427
- workerName: zod_1.z.string().optional().nullable(),
766
+ workerName: common_schemas_1.NameFilterSchema.optional()
767
+ .nullable()
768
+ .describe('Search worker by name (value) with optional exact match'),
428
769
  agentId: zod_1.z.string().uuid().optional().nullable(),
429
770
  job: bookings_contract_1.FilterJobInBookingSchema.optional().nullable(),
430
771
  })
@@ -454,7 +795,7 @@ exports.activesContractRouter = c.router({
454
795
  method: 'GET',
455
796
  path: '/v2/actives',
456
797
  responses: {
457
- 200: exports.PaginatedActiveResponseSchema,
798
+ 200: exports.PaginatedActiveListResponseSchema,
458
799
  },
459
800
  query: exports.FilterActiveSchema,
460
801
  summary: 'Get all active records',
@@ -467,7 +808,7 @@ exports.activesContractRouter = c.router({
467
808
  method: 'GET',
468
809
  path: '/v2/actives/by-job',
469
810
  responses: {
470
- 200: exports.ActivesByJobResponseSchema,
811
+ 200: exports.FlatActivesByDayResponseSchema,
471
812
  },
472
813
  query: exports.FilterActiveByJobSchema,
473
814
  summary: 'Get all actives for a date range, grouped by job',
@@ -476,6 +817,32 @@ exports.activesContractRouter = c.router({
476
817
  openApi: { operationId: 'findAllActivesByJob' },
477
818
  },
478
819
  },
820
+ findMapMarkers: {
821
+ method: 'GET',
822
+ path: '/v2/actives/map-markers',
823
+ responses: {
824
+ 200: exports.ActiveMapMarkersResponseSchema,
825
+ },
826
+ query: exports.FilterActiveByJobSchema,
827
+ summary: 'Get lightweight active data for map markers, grouped by job',
828
+ metadata: {
829
+ tags: ['Actives'],
830
+ openApi: { operationId: 'findActiveMapMarkers' },
831
+ },
832
+ },
833
+ findRegionCounts: {
834
+ method: 'GET',
835
+ path: '/v2/actives/map-region-counts',
836
+ responses: {
837
+ 200: exports.ActiveRegionCountsResponseSchema,
838
+ },
839
+ query: exports.FilterActiveByJobSchema,
840
+ summary: 'Get active worker counts grouped by postcode area and district',
841
+ metadata: {
842
+ tags: ['Actives'],
843
+ openApi: { operationId: 'findActiveRegionCounts' },
844
+ },
845
+ },
479
846
  findTimesheet: {
480
847
  method: 'GET',
481
848
  path: '/v2/actives/timesheet',
@@ -570,6 +937,42 @@ exports.activesContractRouter = c.router({
570
937
  openApi: { operationId: 'batchDeleteActives' },
571
938
  },
572
939
  },
940
+ statusHistory: {
941
+ method: 'GET',
942
+ path: '/v2/actives/:id/status-history',
943
+ responses: {
944
+ 200: zod_1.z.array(exports.ActiveStatusChangeSchema),
945
+ 404: error_schemas_1.ErrorResponseSchema,
946
+ },
947
+ pathParams: zod_1.z.object({
948
+ id: zod_1.z.string().uuid().describe('Active Record ID'),
949
+ }),
950
+ summary: 'Get the status change history for an active record',
951
+ metadata: {
952
+ tags: ['Actives'],
953
+ openApi: { operationId: 'getActiveStatusHistory' },
954
+ },
955
+ },
956
+ bookingSchedule: {
957
+ method: 'GET',
958
+ path: '/v2/actives/:id/booking-schedule',
959
+ responses: {
960
+ 200: zod_1.z.array(exports.BookingScheduleEntrySchema),
961
+ 404: error_schemas_1.ErrorResponseSchema,
962
+ },
963
+ pathParams: zod_1.z.object({
964
+ id: zod_1.z.string().uuid().describe('Active Record ID (anchor of the window).'),
965
+ }),
966
+ query: zod_1.z.object({
967
+ windowBefore: zod_1.z.coerce.number().int().min(1).max(90).optional().describe('Days before the anchor date to include (default 14, capped to booking.startDate).'),
968
+ windowAfter: zod_1.z.coerce.number().int().min(1).max(90).optional().describe('Days after the anchor date to include (default 14, capped to booking.endDate).'),
969
+ }),
970
+ summary: "Get the booking's per-day schedule context around an active (default 14 days before + 14 days after, clipped to booking range).",
971
+ metadata: {
972
+ tags: ['Actives'],
973
+ openApi: { operationId: 'getActiveBookingSchedule' },
974
+ },
975
+ },
573
976
  }, {
574
977
  commonResponses: {
575
978
  400: error_schemas_1.ErrorResponseSchema,