@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.
- package/dist/abilities/abilities.contract.d.ts +55 -1
- package/dist/abilities/abilities.contract.d.ts.map +1 -1
- package/dist/abilities/abilities.contract.js +95 -1
- package/dist/abilities/abilities.contract.spec.d.ts +2 -0
- package/dist/abilities/abilities.contract.spec.d.ts.map +1 -0
- package/dist/abilities/abilities.contract.spec.js +145 -0
- package/dist/abilities/admin-dashboard.abilities.test.d.ts +2 -0
- package/dist/abilities/admin-dashboard.abilities.test.d.ts.map +1 -0
- package/dist/abilities/admin-dashboard.abilities.test.js +33 -0
- package/dist/abilities/admin.abilities.json +19 -0
- package/dist/abilities/bot.abilities.json +13 -4
- package/dist/abilities/first-agent.abilities.json +330 -70
- package/dist/abilities/interconnection.abilities.json +75 -0
- package/dist/abilities/kpi.abilities.json +68 -0
- package/dist/abilities/office-manager.abilities.json +111 -0
- package/dist/abilities/outreach-service.abilities.json +14 -0
- package/dist/abilities/second-agent.abilities.json +430 -43
- package/dist/abilities/team-leads.json +71 -6
- package/dist/abilities/worker-curator.abilities.json +233 -0
- package/dist/actives/actives.contract.d.ts +15521 -19793
- package/dist/actives/actives.contract.d.ts.map +1 -1
- package/dist/actives/actives.contract.js +517 -114
- package/dist/agent-client-links/agent-client-links.contract.d.ts +1431 -291
- package/dist/agent-client-links/agent-client-links.contract.d.ts.map +1 -1
- package/dist/auth/auth.contract.d.ts +1050 -81
- package/dist/auth/auth.contract.d.ts.map +1 -1
- package/dist/auth/auth.contract.js +115 -3
- package/dist/bookings/booking-worker-summary.spec.d.ts +2 -0
- package/dist/bookings/booking-worker-summary.spec.d.ts.map +1 -0
- package/dist/bookings/booking-worker-summary.spec.js +25 -0
- package/dist/bookings/bookings.contract.d.ts +21631 -27105
- package/dist/bookings/bookings.contract.d.ts.map +1 -1
- package/dist/bookings/bookings.contract.js +383 -91
- package/dist/bookings/bookings.contract.spec.d.ts +2 -0
- package/dist/bookings/bookings.contract.spec.d.ts.map +1 -0
- package/dist/bookings/bookings.contract.spec.js +11 -0
- package/dist/bookings/job-lock.spec.d.ts +2 -0
- package/dist/bookings/job-lock.spec.d.ts.map +1 -0
- package/dist/bookings/job-lock.spec.js +56 -0
- package/dist/bot-parse-cache/bot-parse-cache.contract.d.ts +232 -0
- package/dist/bot-parse-cache/bot-parse-cache.contract.d.ts.map +1 -0
- package/dist/bot-parse-cache/bot-parse-cache.contract.js +64 -0
- package/dist/call-history/call-history.contract.d.ts +1336 -767
- package/dist/call-history/call-history.contract.d.ts.map +1 -1
- package/dist/call-history/call-history.contract.js +86 -10
- package/dist/calls-feed/calls-feed.contract.d.ts +417 -0
- package/dist/calls-feed/calls-feed.contract.d.ts.map +1 -0
- package/dist/calls-feed/calls-feed.contract.js +32 -0
- package/dist/client-contacts/client-contacts.contract.d.ts +410 -226
- package/dist/client-contacts/client-contacts.contract.d.ts.map +1 -1
- package/dist/client-contacts/client-contacts.contract.js +35 -4
- package/dist/clients/clients.contract.d.ts +227 -73
- package/dist/clients/clients.contract.d.ts.map +1 -1
- package/dist/clients/clients.contract.js +45 -21
- package/dist/collaboration-checkings/collaboration-checkings.contract.d.ts +2908 -1834
- package/dist/collaboration-checkings/collaboration-checkings.contract.d.ts.map +1 -1
- package/dist/collaboration-checkings/collaboration-checkings.contract.js +14 -9
- package/dist/collaborations/collaborations.contract.d.ts +2676 -1409
- package/dist/collaborations/collaborations.contract.d.ts.map +1 -1
- package/dist/collaborations/collaborations.contract.js +33 -9
- package/dist/common/call-rating.schema.d.ts.map +1 -1
- package/dist/common/call-rating.schema.js +4 -2
- package/dist/common/common-schemas.d.ts +59 -11
- package/dist/common/common-schemas.d.ts.map +1 -1
- package/dist/common/common-schemas.js +55 -29
- package/dist/common/error-schemas.d.ts +2 -2
- package/dist/common/pagination-query.schema.d.ts +13 -2
- package/dist/common/pagination-query.schema.d.ts.map +1 -1
- package/dist/common/pagination-query.schema.js +21 -2
- package/dist/common/pagination-query.schema.spec.d.ts +2 -0
- package/dist/common/pagination-query.schema.spec.d.ts.map +1 -0
- package/dist/common/pagination-query.schema.spec.js +53 -0
- package/dist/companies/companies.contract.d.ts +53 -28
- package/dist/companies/companies.contract.d.ts.map +1 -1
- package/dist/companies/companies.contract.js +11 -10
- package/dist/crews/crews.contract.d.ts +1010 -196
- package/dist/crews/crews.contract.d.ts.map +1 -1
- package/dist/crews/crews.contract.js +98 -17
- package/dist/crews/crews.contract.spec.d.ts +2 -0
- package/dist/crews/crews.contract.spec.d.ts.map +1 -0
- package/dist/crews/crews.contract.spec.js +67 -0
- package/dist/cron-executions/cron-executions.contract.d.ts +988 -59
- package/dist/cron-executions/cron-executions.contract.d.ts.map +1 -1
- package/dist/cron-executions/cron-executions.contract.js +127 -7
- package/dist/curated-worker-leads/__tests__/disposition-reason.spec.d.ts +2 -0
- package/dist/curated-worker-leads/__tests__/disposition-reason.spec.d.ts.map +1 -0
- package/dist/curated-worker-leads/__tests__/disposition-reason.spec.js +40 -0
- package/dist/curated-worker-leads/candidate-coordination-snapshot.spec.d.ts +2 -0
- package/dist/curated-worker-leads/candidate-coordination-snapshot.spec.d.ts.map +1 -0
- package/dist/curated-worker-leads/candidate-coordination-snapshot.spec.js +16 -0
- package/dist/curated-worker-leads/candidate-coordination.contract.d.ts +21650 -0
- package/dist/curated-worker-leads/candidate-coordination.contract.d.ts.map +1 -0
- package/dist/curated-worker-leads/candidate-coordination.contract.js +921 -0
- package/dist/curated-worker-leads/candidate-coordination.contract.spec.d.ts +2 -0
- package/dist/curated-worker-leads/candidate-coordination.contract.spec.d.ts.map +1 -0
- package/dist/curated-worker-leads/candidate-coordination.contract.spec.js +51 -0
- package/dist/curated-worker-leads/candidate-edit-session.contract.d.ts +2364 -0
- package/dist/curated-worker-leads/candidate-edit-session.contract.d.ts.map +1 -0
- package/dist/curated-worker-leads/candidate-edit-session.contract.js +173 -0
- package/dist/curated-worker-leads/consent-queue.contract.d.ts +4497 -0
- package/dist/curated-worker-leads/consent-queue.contract.d.ts.map +1 -0
- package/dist/curated-worker-leads/consent-queue.contract.js +201 -0
- package/dist/curated-worker-leads/contact-history.spec.d.ts +2 -0
- package/dist/curated-worker-leads/contact-history.spec.d.ts.map +1 -0
- package/dist/curated-worker-leads/contact-history.spec.js +88 -0
- package/dist/curated-worker-leads/contact-session.contract.spec.d.ts +2 -0
- package/dist/curated-worker-leads/contact-session.contract.spec.d.ts.map +1 -0
- package/dist/curated-worker-leads/contact-session.contract.spec.js +315 -0
- package/dist/curated-worker-leads/curated-worker-lead-config.contract.d.ts +489 -0
- package/dist/curated-worker-leads/curated-worker-lead-config.contract.d.ts.map +1 -0
- package/dist/curated-worker-leads/curated-worker-lead-config.contract.js +88 -0
- package/dist/curated-worker-leads/curated-worker-leads.contract.d.ts +135 -0
- package/dist/curated-worker-leads/curated-worker-leads.contract.d.ts.map +1 -0
- package/dist/curated-worker-leads/curated-worker-leads.contract.js +32 -0
- package/dist/curated-worker-leads/job-candidate-cards.spec.d.ts +2 -0
- package/dist/curated-worker-leads/job-candidate-cards.spec.d.ts.map +1 -0
- package/dist/curated-worker-leads/job-candidate-cards.spec.js +157 -0
- package/dist/curated-worker-leads/job-candidates.spec.d.ts +2 -0
- package/dist/curated-worker-leads/job-candidates.spec.d.ts.map +1 -0
- package/dist/curated-worker-leads/job-candidates.spec.js +140 -0
- package/dist/curated-worker-leads/job-feed-match-counts.contract.spec.d.ts +2 -0
- package/dist/curated-worker-leads/job-feed-match-counts.contract.spec.d.ts.map +1 -0
- package/dist/curated-worker-leads/job-feed-match-counts.contract.spec.js +19 -0
- package/dist/curated-worker-leads/jobs-tab.contract.d.ts +18547 -0
- package/dist/curated-worker-leads/jobs-tab.contract.d.ts.map +1 -0
- package/dist/curated-worker-leads/jobs-tab.contract.js +672 -0
- package/dist/curated-worker-leads/lead-agent-area.contract.d.ts +348 -0
- package/dist/curated-worker-leads/lead-agent-area.contract.d.ts.map +1 -0
- package/dist/curated-worker-leads/lead-agent-area.contract.js +51 -0
- package/dist/curated-worker-leads/owned-jobs-tab.contract.d.ts +1116 -0
- package/dist/curated-worker-leads/owned-jobs-tab.contract.d.ts.map +1 -0
- package/dist/curated-worker-leads/owned-jobs-tab.contract.js +93 -0
- package/dist/curated-workers/curated-filter-additions.spec.d.ts +2 -0
- package/dist/curated-workers/curated-filter-additions.spec.d.ts.map +1 -0
- package/dist/curated-workers/curated-filter-additions.spec.js +17 -0
- package/dist/curated-workers/curated-job-seeking.spec.d.ts +2 -0
- package/dist/curated-workers/curated-job-seeking.spec.d.ts.map +1 -0
- package/dist/curated-workers/curated-job-seeking.spec.js +53 -0
- package/dist/curated-workers/curated-workers-id-documents.spec.d.ts +2 -0
- package/dist/curated-workers/curated-workers-id-documents.spec.d.ts.map +1 -0
- package/dist/curated-workers/curated-workers-id-documents.spec.js +38 -0
- package/dist/curated-workers/curated-workers.contract.d.ts +6160 -1906
- package/dist/curated-workers/curated-workers.contract.d.ts.map +1 -1
- package/dist/curated-workers/curated-workers.contract.js +333 -51
- package/dist/dashboards/agent-daily-metrics.contract.d.ts +10 -10
- package/dist/dashboards/agent-daily-metrics.contract.js +1 -1
- package/dist/dashboards/dashboard-widgets.contract.d.ts +3777 -473
- package/dist/dashboards/dashboard-widgets.contract.d.ts.map +1 -1
- package/dist/dashboards/dashboard-widgets.contract.js +527 -29
- package/dist/dashboards/dashboard.contract.d.ts +8 -8
- package/dist/document-intake/document-intake.contract.d.ts +3132 -0
- package/dist/document-intake/document-intake.contract.d.ts.map +1 -0
- package/dist/document-intake/document-intake.contract.js +418 -0
- package/dist/export-jobs/export-jobs.contract.d.ts +3928 -0
- package/dist/export-jobs/export-jobs.contract.d.ts.map +1 -0
- package/dist/export-jobs/export-jobs.contract.js +240 -0
- package/dist/exports-events/exports-events.schemas.d.ts +90 -0
- package/dist/exports-events/exports-events.schemas.d.ts.map +1 -0
- package/dist/exports-events/exports-events.schemas.js +56 -0
- package/dist/files/files.contract.d.ts +133 -126
- package/dist/files/files.contract.d.ts.map +1 -1
- package/dist/files/files.contract.js +8 -0
- package/dist/health/health.contract.d.ts +4 -4
- package/dist/index.d.ts +86 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +91 -1
- package/dist/interactions/interactions.contract.d.ts +162 -0
- package/dist/interactions/interactions.contract.d.ts.map +1 -0
- package/dist/interactions/interactions.contract.js +42 -0
- package/dist/job-clusters/job-clusters.contract.d.ts +1584 -0
- package/dist/job-clusters/job-clusters.contract.d.ts.map +1 -0
- package/dist/job-clusters/job-clusters.contract.js +133 -0
- package/dist/jobs/jobs.contract.d.ts +16662 -8628
- package/dist/jobs/jobs.contract.d.ts.map +1 -1
- package/dist/jobs/jobs.contract.js +403 -190
- package/dist/jobs/jobs.contract.spec.d.ts +2 -0
- package/dist/jobs/jobs.contract.spec.d.ts.map +1 -0
- package/dist/jobs/jobs.contract.spec.js +70 -0
- package/dist/kpi-impersonation/kpi-impersonation.contract.d.ts +75 -75
- package/dist/lead-assignments/lead-assignments.contract.d.ts +2933 -1122
- package/dist/lead-assignments/lead-assignments.contract.d.ts.map +1 -1
- package/dist/lead-assignments/lead-assignments.contract.js +29 -7
- package/dist/lead-distribution/agent-lead-distribution.contract.d.ts +328 -64
- package/dist/lead-distribution/agent-lead-distribution.contract.d.ts.map +1 -1
- package/dist/lead-distribution/agent-lead-distribution.contract.js +1 -1
- package/dist/lead-distribution/lead-distribution-config.contract.d.ts +31 -31
- package/dist/leads/leads.contract.d.ts +830 -368
- package/dist/leads/leads.contract.d.ts.map +1 -1
- package/dist/leads/leads.contract.js +106 -26
- package/dist/locations/locations.contract.d.ts +36 -36
- package/dist/notifications/notifications.contract.d.ts +1039 -0
- package/dist/notifications/notifications.contract.d.ts.map +1 -0
- package/dist/notifications/notifications.contract.js +110 -0
- package/dist/offices/offices.contract.d.ts +210 -60
- package/dist/offices/offices.contract.d.ts.map +1 -1
- package/dist/offices/offices.contract.js +18 -4
- package/dist/outreach/__tests__/outreach-claim.test.d.ts +2 -0
- package/dist/outreach/__tests__/outreach-claim.test.d.ts.map +1 -0
- package/dist/outreach/__tests__/outreach-claim.test.js +98 -0
- package/dist/outreach/__tests__/outreach-confirm-release.test.d.ts +2 -0
- package/dist/outreach/__tests__/outreach-confirm-release.test.d.ts.map +1 -0
- package/dist/outreach/__tests__/outreach-confirm-release.test.js +98 -0
- package/dist/outreach/__tests__/outreach-contract-additions.spec.d.ts +2 -0
- package/dist/outreach/__tests__/outreach-contract-additions.spec.d.ts.map +1 -0
- package/dist/outreach/__tests__/outreach-contract-additions.spec.js +78 -0
- package/dist/outreach/__tests__/outreach-requests.contract.spec.d.ts +2 -0
- package/dist/outreach/__tests__/outreach-requests.contract.spec.d.ts.map +1 -0
- package/dist/outreach/__tests__/outreach-requests.contract.spec.js +64 -0
- package/dist/outreach/__tests__/outreach-routes.test.d.ts +2 -0
- package/dist/outreach/__tests__/outreach-routes.test.d.ts.map +1 -0
- package/dist/outreach/__tests__/outreach-routes.test.js +57 -0
- package/dist/outreach/__tests__/outreach.schemas.test.d.ts +2 -0
- package/dist/outreach/__tests__/outreach.schemas.test.d.ts.map +1 -0
- package/dist/outreach/__tests__/outreach.schemas.test.js +144 -0
- package/dist/outreach/outreach-requests.contract.d.ts +1108 -0
- package/dist/outreach/outreach-requests.contract.d.ts.map +1 -0
- package/dist/outreach/outreach-requests.contract.js +134 -0
- package/dist/outreach/outreach-requests.schemas.d.ts +49 -0
- package/dist/outreach/outreach-requests.schemas.d.ts.map +1 -0
- package/dist/outreach/outreach-requests.schemas.js +60 -0
- package/dist/outreach/outreach.contract.d.ts +819 -0
- package/dist/outreach/outreach.contract.d.ts.map +1 -0
- package/dist/outreach/outreach.contract.js +195 -0
- package/dist/outreach/outreach.schemas.d.ts +118 -0
- package/dist/outreach/outreach.schemas.d.ts.map +1 -0
- package/dist/outreach/outreach.schemas.js +135 -0
- package/dist/own-research/own-research.contract.d.ts +1356 -552
- package/dist/own-research/own-research.contract.d.ts.map +1 -1
- package/dist/own-research/own-research.contract.js +14 -3
- package/dist/postcodes/postcodes.contract.d.ts +16 -16
- package/dist/proofs/proof-category.enum.d.ts +4 -0
- package/dist/proofs/proof-category.enum.d.ts.map +1 -0
- package/dist/proofs/proof-category.enum.js +5 -0
- package/dist/proofs/proof-entity-type.enum.d.ts +4 -0
- package/dist/proofs/proof-entity-type.enum.d.ts.map +1 -0
- package/dist/proofs/proof-entity-type.enum.js +5 -0
- package/dist/proofs/proof-type.enum.d.ts +28 -0
- package/dist/proofs/proof-type.enum.d.ts.map +1 -0
- package/dist/proofs/proof-type.enum.js +14 -0
- package/dist/proofs/proofs.contract.d.ts +3009 -0
- package/dist/proofs/proofs.contract.d.ts.map +1 -0
- package/dist/proofs/proofs.contract.js +92 -0
- package/dist/proofs/proofs.dtos.d.ts +1319 -0
- package/dist/proofs/proofs.dtos.d.ts.map +1 -0
- package/dist/proofs/proofs.dtos.js +178 -0
- package/dist/qualifications/qualifications.contract.d.ts +94 -94
- package/dist/realtime/data-changed.d.ts +21 -0
- package/dist/realtime/data-changed.d.ts.map +1 -0
- package/dist/realtime/data-changed.js +37 -0
- package/dist/shared/booking-history.schema.d.ts +27 -0
- package/dist/shared/booking-history.schema.d.ts.map +1 -0
- package/dist/shared/booking-history.schema.js +22 -0
- package/dist/shared/booking-history.spec.d.ts +2 -0
- package/dist/shared/booking-history.spec.d.ts.map +1 -0
- package/dist/shared/booking-history.spec.js +44 -0
- package/dist/shared/contact-suppressions.contract.d.ts +22 -0
- package/dist/shared/contact-suppressions.contract.d.ts.map +1 -0
- package/dist/shared/contact-suppressions.contract.js +13 -0
- package/dist/shared/live-booking.schema.d.ts +57 -0
- package/dist/shared/live-booking.schema.d.ts.map +1 -0
- package/dist/shared/live-booking.schema.js +34 -0
- package/dist/shared/summary-schemas.d.ts +218 -0
- package/dist/shared/summary-schemas.d.ts.map +1 -0
- package/dist/shared/summary-schemas.js +56 -0
- package/dist/sheets-sync/__tests__/sheets-sync-events.schemas.test.d.ts +2 -0
- package/dist/sheets-sync/__tests__/sheets-sync-events.schemas.test.d.ts.map +1 -0
- package/dist/sheets-sync/__tests__/sheets-sync-events.schemas.test.js +20 -0
- package/dist/sheets-sync/__tests__/tab-sync-config.schema.test.d.ts +2 -0
- package/dist/sheets-sync/__tests__/tab-sync-config.schema.test.d.ts.map +1 -0
- package/dist/sheets-sync/__tests__/tab-sync-config.schema.test.js +41 -0
- package/dist/sheets-sync/sheets-sync-events.schemas.d.ts +43 -0
- package/dist/sheets-sync/sheets-sync-events.schemas.d.ts.map +1 -0
- package/dist/sheets-sync/sheets-sync-events.schemas.js +29 -0
- package/dist/sheets-sync/sheets-sync.contract.d.ts +7258 -0
- package/dist/sheets-sync/sheets-sync.contract.d.ts.map +1 -0
- package/dist/sheets-sync/sheets-sync.contract.js +323 -0
- package/dist/telegram/telegram.contract.d.ts +727 -0
- package/dist/telegram/telegram.contract.d.ts.map +1 -0
- package/dist/telegram/telegram.contract.js +75 -0
- package/dist/trades/trade-rate-assessment.d.ts +18 -0
- package/dist/trades/trade-rate-assessment.d.ts.map +1 -0
- package/dist/trades/trade-rate-assessment.js +46 -0
- package/dist/trades/trade-rate-assessment.spec.d.ts +2 -0
- package/dist/trades/trade-rate-assessment.spec.d.ts.map +1 -0
- package/dist/trades/trade-rate-assessment.spec.js +223 -0
- package/dist/trades/trades.contract.d.ts +111 -0
- package/dist/trades/trades.contract.d.ts.map +1 -1
- package/dist/trades/trades.contract.js +49 -1
- package/dist/trades/trades.contract.spec.d.ts +2 -0
- package/dist/trades/trades.contract.spec.d.ts.map +1 -0
- package/dist/trades/trades.contract.spec.js +173 -0
- package/dist/user-access-grants/build-user-access-grant-rules.d.ts +10 -0
- package/dist/user-access-grants/build-user-access-grant-rules.d.ts.map +1 -0
- package/dist/user-access-grants/build-user-access-grant-rules.js +69 -0
- package/dist/user-access-grants/build-user-access-grant-rules.spec.d.ts +2 -0
- package/dist/user-access-grants/build-user-access-grant-rules.spec.d.ts.map +1 -0
- package/dist/user-access-grants/build-user-access-grant-rules.spec.js +77 -0
- package/dist/user-access-grants/user-access-grant-templates.json +454 -0
- package/dist/user-access-grants/user-access-grants.contract.d.ts +3886 -0
- package/dist/user-access-grants/user-access-grants.contract.d.ts.map +1 -0
- package/dist/user-access-grants/user-access-grants.contract.js +189 -0
- package/dist/user-access-grants/user-access-grants.contract.spec.d.ts +2 -0
- package/dist/user-access-grants/user-access-grants.contract.spec.d.ts.map +1 -0
- package/dist/user-access-grants/user-access-grants.contract.spec.js +149 -0
- package/dist/users/users.contract.d.ts +1959 -349
- package/dist/users/users.contract.d.ts.map +1 -1
- package/dist/users/users.contract.js +222 -37
- package/dist/users/users.contract.spec.d.ts +2 -0
- package/dist/users/users.contract.spec.d.ts.map +1 -0
- package/dist/users/users.contract.spec.js +103 -0
- package/dist/worker-identity-cases/worker-identity-cases.contract.d.ts +4609 -0
- package/dist/worker-identity-cases/worker-identity-cases.contract.d.ts.map +1 -0
- package/dist/worker-identity-cases/worker-identity-cases.contract.js +409 -0
- package/dist/worker-merge-proposals/worker-merge-proposals.contract.d.ts +1511 -0
- package/dist/worker-merge-proposals/worker-merge-proposals.contract.d.ts.map +1 -0
- package/dist/worker-merge-proposals/worker-merge-proposals.contract.js +150 -0
- package/dist/worker-source-identity-conflicts/worker-source-identity-conflicts.contract.d.ts +1106 -0
- package/dist/worker-source-identity-conflicts/worker-source-identity-conflicts.contract.d.ts.map +1 -0
- package/dist/worker-source-identity-conflicts/worker-source-identity-conflicts.contract.js +85 -0
- package/dist/worker-source-identity-conflicts/worker-source-identity-conflicts.contract.spec.d.ts +2 -0
- package/dist/worker-source-identity-conflicts/worker-source-identity-conflicts.contract.spec.d.ts.map +1 -0
- package/dist/worker-source-identity-conflicts/worker-source-identity-conflicts.contract.spec.js +216 -0
- package/dist/worker-source-identity-conflicts/worker-source-identity-conflicts.schemas.d.ts +453 -0
- package/dist/worker-source-identity-conflicts/worker-source-identity-conflicts.schemas.d.ts.map +1 -0
- package/dist/worker-source-identity-conflicts/worker-source-identity-conflicts.schemas.js +109 -0
- package/dist/workers/do-not-contact.contract.d.ts +46 -0
- package/dist/workers/do-not-contact.contract.d.ts.map +1 -0
- package/dist/workers/do-not-contact.contract.js +41 -0
- package/dist/workers/do-not-contact.contract.spec.d.ts +2 -0
- package/dist/workers/do-not-contact.contract.spec.d.ts.map +1 -0
- package/dist/workers/do-not-contact.contract.spec.js +47 -0
- package/dist/workers/duplicate-group-worker.spec.d.ts +2 -0
- package/dist/workers/duplicate-group-worker.spec.d.ts.map +1 -0
- package/dist/workers/duplicate-group-worker.spec.js +34 -0
- package/dist/workers/filter-exact-flags.spec.d.ts +2 -0
- package/dist/workers/filter-exact-flags.spec.d.ts.map +1 -0
- package/dist/workers/filter-exact-flags.spec.js +37 -0
- package/dist/workers/worker-source-attribution.contract.spec.d.ts +2 -0
- package/dist/workers/worker-source-attribution.contract.spec.d.ts.map +1 -0
- package/dist/workers/worker-source-attribution.contract.spec.js +442 -0
- package/dist/workers/worker-source.spec.d.ts +2 -0
- package/dist/workers/worker-source.spec.d.ts.map +1 -0
- package/dist/workers/worker-source.spec.js +13 -0
- package/dist/workers/worker-status-facets.spec.d.ts +2 -0
- package/dist/workers/worker-status-facets.spec.d.ts.map +1 -0
- package/dist/workers/worker-status-facets.spec.js +34 -0
- package/dist/workers/workers.contract.d.ts +19534 -5969
- package/dist/workers/workers.contract.d.ts.map +1 -1
- package/dist/workers/workers.contract.js +1096 -113
- package/dist/workers/workers.contract.spec.d.ts +2 -0
- package/dist/workers/workers.contract.spec.d.ts.map +1 -0
- package/dist/workers/workers.contract.spec.js +31 -0
- 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.
|
|
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
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
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
|
-
'
|
|
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
|
-
|
|
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('
|
|
101
|
-
statusFa: exports.ActiveStatusSchema.describe('
|
|
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('
|
|
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
|
-
|
|
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
|
-
|
|
141
|
-
|
|
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
|
-
|
|
183
|
-
|
|
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
|
-
|
|
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
|
-
|
|
235
|
-
|
|
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
|
-
|
|
239
|
-
|
|
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('
|
|
245
|
-
|
|
246
|
-
.
|
|
247
|
-
|
|
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
|
-
|
|
251
|
-
.
|
|
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('
|
|
258
|
-
|
|
259
|
-
.
|
|
260
|
-
|
|
261
|
-
|
|
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
|
-
|
|
265
|
-
.
|
|
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
|
-
|
|
268
|
-
|
|
269
|
-
|
|
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
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
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: '
|
|
284
|
-
/**
|
|
285
|
-
exports.
|
|
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
|
-
|
|
288
|
-
|
|
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: '
|
|
294
|
-
exports.
|
|
505
|
+
.openapi({ title: 'FlatActivesByDayResponse' });
|
|
506
|
+
exports.ActiveMapMarkerSchema = zod_1.z
|
|
295
507
|
.object({
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
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
|
-
.
|
|
535
|
+
.int()
|
|
536
|
+
.describe('Active workers excluded due to missing job coordinates'),
|
|
303
537
|
})
|
|
304
|
-
.openapi({ title: '
|
|
305
|
-
|
|
306
|
-
exports.ActivesByJobResponseSchema = zod_1.z
|
|
538
|
+
.openapi({ title: 'ActiveMapMarkersResponse' });
|
|
539
|
+
exports.ActiveRegionCountsResponseSchema = zod_1.z
|
|
307
540
|
.object({
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
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: '
|
|
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
|
-
|
|
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
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
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
|
-
|
|
333
|
-
|
|
334
|
-
.
|
|
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('
|
|
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
|
-
|
|
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:
|
|
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.
|
|
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.
|
|
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,
|