@rubytech/create-realagent-code 0.1.573 → 0.1.575
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/index.js +14 -0
- package/package.json +1 -1
- package/payload/platform/lib/admins-write/__tests__/index.test.ts +97 -0
- package/payload/platform/lib/admins-write/dist/index.d.ts +12 -0
- package/payload/platform/lib/admins-write/dist/index.d.ts.map +1 -1
- package/payload/platform/lib/admins-write/dist/index.js +27 -5
- package/payload/platform/lib/admins-write/dist/index.js.map +1 -1
- package/payload/platform/lib/admins-write/src/index.ts +35 -5
- package/payload/platform/lib/admins-write/vitest.config.ts +14 -0
- package/payload/platform/lib/canonical-instant/dist/index.d.ts +57 -0
- package/payload/platform/lib/canonical-instant/dist/index.d.ts.map +1 -0
- package/payload/platform/lib/canonical-instant/dist/index.js +139 -0
- package/payload/platform/lib/canonical-instant/dist/index.js.map +1 -0
- package/payload/platform/lib/canonical-instant/src/__tests__/normalise-instant.test.ts +158 -0
- package/payload/platform/lib/canonical-instant/src/index.ts +147 -0
- package/payload/platform/lib/canonical-instant/tsconfig.json +9 -0
- package/payload/platform/lib/canonical-instant/vitest.config.ts +9 -0
- package/payload/platform/lib/dispatch-read/dist/geo.d.ts +34 -0
- package/payload/platform/lib/dispatch-read/dist/geo.d.ts.map +1 -0
- package/payload/platform/lib/dispatch-read/dist/geo.js +27 -0
- package/payload/platform/lib/dispatch-read/dist/geo.js.map +1 -0
- package/payload/platform/lib/dispatch-read/dist/index.d.ts +6 -2
- package/payload/platform/lib/dispatch-read/dist/index.d.ts.map +1 -1
- package/payload/platform/lib/dispatch-read/dist/index.js +21 -1
- package/payload/platform/lib/dispatch-read/dist/index.js.map +1 -1
- package/payload/platform/lib/dispatch-read/dist/keyboard.d.ts +66 -0
- package/payload/platform/lib/dispatch-read/dist/keyboard.d.ts.map +1 -0
- package/payload/platform/lib/dispatch-read/dist/keyboard.js +64 -0
- package/payload/platform/lib/dispatch-read/dist/keyboard.js.map +1 -0
- package/payload/platform/lib/dispatch-read/dist/read.d.ts +144 -9
- package/payload/platform/lib/dispatch-read/dist/read.d.ts.map +1 -1
- package/payload/platform/lib/dispatch-read/dist/read.js +437 -118
- package/payload/platform/lib/dispatch-read/dist/read.js.map +1 -1
- package/payload/platform/lib/dispatch-read/dist/session.d.ts.map +1 -1
- package/payload/platform/lib/dispatch-read/dist/session.js +19 -4
- package/payload/platform/lib/dispatch-read/dist/session.js.map +1 -1
- package/payload/platform/lib/dispatch-read/dist/types.d.ts +80 -11
- package/payload/platform/lib/dispatch-read/dist/types.d.ts.map +1 -1
- package/payload/platform/lib/dispatch-read/src/__tests__/geo.test.ts +86 -0
- package/payload/platform/lib/dispatch-read/src/__tests__/keyboard.test.ts +124 -0
- package/payload/platform/lib/dispatch-read/src/__tests__/previous-visit.test.ts +98 -0
- package/payload/platform/lib/dispatch-read/src/__tests__/read.test.ts +107 -8
- package/payload/platform/lib/dispatch-read/src/__tests__/session.test.ts +91 -0
- package/payload/platform/lib/dispatch-read/src/__tests__/worker-day.test.ts +215 -10
- package/payload/platform/lib/dispatch-read/src/geo.ts +56 -0
- package/payload/platform/lib/dispatch-read/src/index.ts +25 -1
- package/payload/platform/lib/dispatch-read/src/keyboard.ts +98 -0
- package/payload/platform/lib/dispatch-read/src/read.ts +522 -119
- package/payload/platform/lib/dispatch-read/src/session.ts +25 -6
- package/payload/platform/lib/dispatch-read/src/types.ts +83 -11
- package/payload/platform/lib/dispatch-write/dist/write.d.ts +14 -0
- package/payload/platform/lib/dispatch-write/dist/write.d.ts.map +1 -1
- package/payload/platform/lib/dispatch-write/dist/write.js +50 -11
- package/payload/platform/lib/dispatch-write/dist/write.js.map +1 -1
- package/payload/platform/lib/dispatch-write/src/__tests__/write.test.ts +72 -2
- package/payload/platform/lib/dispatch-write/src/write.ts +79 -14
- package/payload/platform/neo4j/schema.cypher +66 -1
- package/payload/platform/package.json +2 -2
- package/payload/platform/plugins/admin/.claude-plugin/plugin.json +1 -1
- package/payload/platform/plugins/admin/PLUGIN.md +11 -3
- package/payload/platform/plugins/admin/hooks/__tests__/fs-schema-guard-bash.test.sh +106 -0
- package/payload/platform/plugins/admin/hooks/__tests__/fs-schema-guard.test.sh +66 -0
- package/payload/platform/plugins/admin/hooks/__tests__/html-structure-gate.test.sh +264 -0
- package/payload/platform/plugins/admin/hooks/__tests__/quote-render-pdf-conformance.test.sh +122 -24
- package/payload/platform/plugins/admin/hooks/__tests__/specialist-dispatch-gate.test.sh +158 -0
- package/payload/platform/plugins/admin/hooks/fs-schema-guard-bash-post.sh +85 -12
- package/payload/platform/plugins/admin/hooks/fs-schema-guard.sh +18 -0
- package/payload/platform/plugins/admin/hooks/html-structure-gate.sh +165 -0
- package/payload/platform/plugins/admin/hooks/quote-render-pdf-conformance.sh +111 -19
- package/payload/platform/plugins/admin/hooks/specialist-dispatch-gate.sh +159 -0
- package/payload/platform/plugins/admin/mcp/dist/admin-bind-classify.d.ts +27 -0
- package/payload/platform/plugins/admin/mcp/dist/admin-bind-classify.d.ts.map +1 -0
- package/payload/platform/plugins/admin/mcp/dist/admin-bind-classify.js +29 -0
- package/payload/platform/plugins/admin/mcp/dist/admin-bind-classify.js.map +1 -0
- package/payload/platform/plugins/admin/mcp/dist/binding-validate.d.ts +11 -0
- package/payload/platform/plugins/admin/mcp/dist/binding-validate.d.ts.map +1 -0
- package/payload/platform/plugins/admin/mcp/dist/binding-validate.js +20 -0
- package/payload/platform/plugins/admin/mcp/dist/binding-validate.js.map +1 -0
- package/payload/platform/plugins/admin/mcp/dist/index.js +133 -1
- package/payload/platform/plugins/admin/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/admin/skills/admin-user-management/SKILL.md +31 -2
- package/payload/platform/plugins/admin/skills/platform-architecture/SKILL.md +242 -61
- package/payload/platform/plugins/admin/skills/whats-new/SKILL.md +16 -0
- package/payload/platform/plugins/cloudflare/mcp/__tests__/portal-visits-scope.test.ts +130 -1
- package/payload/platform/plugins/cloudflare/skills/data-portal/schema.sql +63 -0
- package/payload/platform/plugins/cloudflare/skills/data-portal/template/functions/api/visits.ts +104 -3
- package/payload/platform/plugins/dispatch/.claude-plugin/plugin.json +1 -1
- package/payload/platform/plugins/dispatch/PLUGIN.md +49 -6
- package/payload/platform/plugins/dispatch/mcp/dist/index.js +200 -2
- package/payload/platform/plugins/dispatch/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/dispatch/mcp/dist/lib/allocate.d.ts +22 -4
- package/payload/platform/plugins/dispatch/mcp/dist/lib/allocate.d.ts.map +1 -1
- package/payload/platform/plugins/dispatch/mcp/dist/lib/allocate.js +4 -0
- package/payload/platform/plugins/dispatch/mcp/dist/lib/allocate.js.map +1 -1
- package/payload/platform/plugins/dispatch/mcp/dist/lib/bot-token.d.ts +10 -0
- package/payload/platform/plugins/dispatch/mcp/dist/lib/bot-token.d.ts.map +1 -0
- package/payload/platform/plugins/dispatch/mcp/dist/lib/bot-token.js +47 -0
- package/payload/platform/plugins/dispatch/mcp/dist/lib/bot-token.js.map +1 -0
- package/payload/platform/plugins/dispatch/mcp/dist/lib/config.d.ts.map +1 -1
- package/payload/platform/plugins/dispatch/mcp/dist/lib/config.js +12 -0
- package/payload/platform/plugins/dispatch/mcp/dist/lib/config.js.map +1 -1
- package/payload/platform/plugins/dispatch/mcp/dist/lib/ids.d.ts +1 -0
- package/payload/platform/plugins/dispatch/mcp/dist/lib/ids.d.ts.map +1 -1
- package/payload/platform/plugins/dispatch/mcp/dist/lib/ids.js +1 -0
- package/payload/platform/plugins/dispatch/mcp/dist/lib/ids.js.map +1 -1
- package/payload/platform/plugins/dispatch/mcp/dist/lib/intake.d.ts +36 -0
- package/payload/platform/plugins/dispatch/mcp/dist/lib/intake.d.ts.map +1 -0
- package/payload/platform/plugins/dispatch/mcp/dist/lib/intake.js +36 -0
- package/payload/platform/plugins/dispatch/mcp/dist/lib/intake.js.map +1 -0
- package/payload/platform/plugins/dispatch/mcp/dist/lib/keyboard.d.ts +11 -0
- package/payload/platform/plugins/dispatch/mcp/dist/lib/keyboard.d.ts.map +1 -0
- package/payload/platform/plugins/dispatch/mcp/dist/lib/keyboard.js +10 -0
- package/payload/platform/plugins/dispatch/mcp/dist/lib/keyboard.js.map +1 -0
- package/payload/platform/plugins/dispatch/mcp/dist/lib/read.d.ts +2 -2
- package/payload/platform/plugins/dispatch/mcp/dist/lib/read.d.ts.map +1 -1
- package/payload/platform/plugins/dispatch/mcp/dist/lib/read.js +9 -1
- package/payload/platform/plugins/dispatch/mcp/dist/lib/read.js.map +1 -1
- package/payload/platform/plugins/dispatch/mcp/dist/lib/travel.d.ts +43 -0
- package/payload/platform/plugins/dispatch/mcp/dist/lib/travel.d.ts.map +1 -0
- package/payload/platform/plugins/dispatch/mcp/dist/lib/travel.js +53 -0
- package/payload/platform/plugins/dispatch/mcp/dist/lib/travel.js.map +1 -0
- package/payload/platform/plugins/dispatch/mcp/dist/lib/types.d.ts +13 -2
- package/payload/platform/plugins/dispatch/mcp/dist/lib/types.d.ts.map +1 -1
- package/payload/platform/plugins/dispatch/mcp/dist/scripts/converge-visit-instants.d.ts +6 -0
- package/payload/platform/plugins/dispatch/mcp/dist/scripts/converge-visit-instants.d.ts.map +1 -0
- package/payload/platform/plugins/dispatch/mcp/dist/scripts/converge-visit-instants.js +102 -0
- package/payload/platform/plugins/dispatch/mcp/dist/scripts/converge-visit-instants.js.map +1 -0
- package/payload/platform/plugins/dispatch/mcp/dist/tools/allocate.d.ts +18 -0
- package/payload/platform/plugins/dispatch/mcp/dist/tools/allocate.d.ts.map +1 -1
- package/payload/platform/plugins/dispatch/mcp/dist/tools/allocate.js +251 -40
- package/payload/platform/plugins/dispatch/mcp/dist/tools/allocate.js.map +1 -1
- package/payload/platform/plugins/dispatch/mcp/dist/tools/intake.d.ts +75 -0
- package/payload/platform/plugins/dispatch/mcp/dist/tools/intake.d.ts.map +1 -0
- package/payload/platform/plugins/dispatch/mcp/dist/tools/intake.js +194 -0
- package/payload/platform/plugins/dispatch/mcp/dist/tools/intake.js.map +1 -0
- package/payload/platform/plugins/dispatch/mcp/dist/tools/notify-worker.d.ts +61 -0
- package/payload/platform/plugins/dispatch/mcp/dist/tools/notify-worker.d.ts.map +1 -0
- package/payload/platform/plugins/dispatch/mcp/dist/tools/notify-worker.js +130 -0
- package/payload/platform/plugins/dispatch/mcp/dist/tools/notify-worker.js.map +1 -0
- package/payload/platform/plugins/dispatch/mcp/dist/tools/site-location-set.d.ts +28 -0
- package/payload/platform/plugins/dispatch/mcp/dist/tools/site-location-set.d.ts.map +1 -0
- package/payload/platform/plugins/dispatch/mcp/dist/tools/site-location-set.js +44 -0
- package/payload/platform/plugins/dispatch/mcp/dist/tools/site-location-set.js.map +1 -0
- package/payload/platform/plugins/dispatch/mcp/dist/tools/site-upsert.d.ts +43 -0
- package/payload/platform/plugins/dispatch/mcp/dist/tools/site-upsert.d.ts.map +1 -0
- package/payload/platform/plugins/dispatch/mcp/dist/tools/site-upsert.js +139 -0
- package/payload/platform/plugins/dispatch/mcp/dist/tools/site-upsert.js.map +1 -0
- package/payload/platform/plugins/dispatch/skills/dispatch-page/SKILL.md +85 -0
- package/payload/platform/plugins/dispatch/skills/dispatch-page/template/planner.css +97 -0
- package/payload/platform/plugins/dispatch/skills/dispatch-page/template/planner.html +59 -0
- package/payload/platform/plugins/dispatch/skills/dispatch-page/template/planner.js +343 -0
- package/payload/platform/plugins/dispatch/skills/dispatch-setup/SKILL.md +9 -4
- package/payload/platform/plugins/docs/references/admin-ui.md +71 -31
- package/payload/platform/plugins/docs/references/channel-wake-and-prompt.md +29 -13
- package/payload/platform/plugins/docs/references/dispatch.md +94 -15
- package/payload/platform/plugins/docs/references/internals.md +6 -0
- package/payload/platform/plugins/docs/references/outlook-guide.md +31 -1
- package/payload/platform/plugins/docs/references/troubleshooting.md +10 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/dispatch-vertical-coverage.test.js +4 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/dispatch-vertical-coverage.test.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/relationship-patterns.test.js +24 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/relationship-patterns.test.js.map +1 -1
- package/payload/platform/plugins/memory/references/schema-dispatch.md +70 -4
- package/payload/platform/plugins/outlook/PLUGIN.md +3 -1
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/draft-ledger-write-sites.test.d.ts +2 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/draft-ledger-write-sites.test.d.ts.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/draft-ledger-write-sites.test.js +177 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/draft-ledger-write-sites.test.js.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/draft-ledger.test.d.ts +2 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/draft-ledger.test.d.ts.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/draft-ledger.test.js +130 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/draft-ledger.test.js.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/draft-reconcile.test.d.ts +2 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/draft-reconcile.test.d.ts.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/draft-reconcile.test.js +162 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/draft-reconcile.test.js.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/draft-state-fields.test.d.ts +2 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/draft-state-fields.test.d.ts.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/draft-state-fields.test.js +168 -0
- package/payload/platform/plugins/outlook/mcp/dist/__tests__/draft-state-fields.test.js.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/lib/draft-ledger.d.ts +64 -0
- package/payload/platform/plugins/outlook/mcp/dist/lib/draft-ledger.d.ts.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/lib/draft-ledger.js +110 -0
- package/payload/platform/plugins/outlook/mcp/dist/lib/draft-ledger.js.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/lib/draft-reconcile.d.ts +119 -0
- package/payload/platform/plugins/outlook/mcp/dist/lib/draft-reconcile.d.ts.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/lib/draft-reconcile.js +0 -0
- package/payload/platform/plugins/outlook/mcp/dist/lib/draft-reconcile.js.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/scripts/draft-reconcile.d.ts +8 -0
- package/payload/platform/plugins/outlook/mcp/dist/scripts/draft-reconcile.d.ts.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/scripts/draft-reconcile.js +247 -0
- package/payload/platform/plugins/outlook/mcp/dist/scripts/draft-reconcile.js.map +1 -0
- package/payload/platform/plugins/outlook/mcp/dist/tools/draft-send.d.ts.map +1 -1
- package/payload/platform/plugins/outlook/mcp/dist/tools/draft-send.js +10 -0
- package/payload/platform/plugins/outlook/mcp/dist/tools/draft-send.js.map +1 -1
- package/payload/platform/plugins/outlook/mcp/dist/tools/draft.d.ts.map +1 -1
- package/payload/platform/plugins/outlook/mcp/dist/tools/draft.js +21 -0
- package/payload/platform/plugins/outlook/mcp/dist/tools/draft.js.map +1 -1
- package/payload/platform/plugins/outlook/mcp/dist/tools/mail-fetch-body.d.ts +16 -0
- package/payload/platform/plugins/outlook/mcp/dist/tools/mail-fetch-body.d.ts.map +1 -1
- package/payload/platform/plugins/outlook/mcp/dist/tools/mail-fetch-body.js +5 -1
- package/payload/platform/plugins/outlook/mcp/dist/tools/mail-fetch-body.js.map +1 -1
- package/payload/platform/plugins/outlook/mcp/dist/tools/mail-list.d.ts +4 -0
- package/payload/platform/plugins/outlook/mcp/dist/tools/mail-list.d.ts.map +1 -1
- package/payload/platform/plugins/outlook/mcp/dist/tools/mail-list.js +2 -1
- package/payload/platform/plugins/outlook/mcp/dist/tools/mail-list.js.map +1 -1
- package/payload/platform/plugins/outlook/mcp/dist/tools/mail-reply.d.ts.map +1 -1
- package/payload/platform/plugins/outlook/mcp/dist/tools/mail-reply.js +24 -0
- package/payload/platform/plugins/outlook/mcp/dist/tools/mail-reply.js.map +1 -1
- package/payload/platform/plugins/outlook/mcp/dist/tools/mail-search.d.ts.map +1 -1
- package/payload/platform/plugins/outlook/mcp/dist/tools/mail-search.js +2 -1
- package/payload/platform/plugins/outlook/mcp/dist/tools/mail-search.js.map +1 -1
- package/payload/platform/plugins/outlook/mcp/dist/tools/mail-send.d.ts.map +1 -1
- package/payload/platform/plugins/outlook/mcp/dist/tools/mail-send.js +29 -0
- package/payload/platform/plugins/outlook/mcp/dist/tools/mail-send.js.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/__tests__/draft-reconcile-throttle.test.d.ts +2 -0
- package/payload/platform/plugins/scheduling/mcp/dist/__tests__/draft-reconcile-throttle.test.d.ts.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/dist/__tests__/draft-reconcile-throttle.test.js +21 -0
- package/payload/platform/plugins/scheduling/mcp/dist/__tests__/draft-reconcile-throttle.test.js.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/draft-reconcile-throttle.d.ts +13 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/draft-reconcile-throttle.d.ts.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/draft-reconcile-throttle.js +10 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/draft-reconcile-throttle.js.map +1 -0
- package/payload/platform/plugins/scheduling/mcp/dist/lib/time-format.d.ts +2 -35
- package/payload/platform/plugins/scheduling/mcp/dist/lib/time-format.d.ts.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/lib/time-format.js +6 -114
- package/payload/platform/plugins/scheduling/mcp/dist/lib/time-format.js.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/check-due-events.js +54 -0
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/check-due-events.js.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/converge-startdate-utc.d.ts +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/converge-startdate-utc.js +3 -3
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/converge-startdate-utc.js.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-event.js +2 -2
- package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-event.js.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-update.js +3 -3
- package/payload/platform/plugins/scheduling/mcp/dist/tools/schedule-update.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/authored-specialist-tools.d.ts +32 -0
- package/payload/platform/services/claude-session-manager/dist/authored-specialist-tools.d.ts.map +1 -0
- package/payload/platform/services/claude-session-manager/dist/authored-specialist-tools.js +144 -0
- package/payload/platform/services/claude-session-manager/dist/authored-specialist-tools.js.map +1 -0
- package/payload/platform/services/claude-session-manager/dist/blocked-tool-census.d.ts +40 -6
- package/payload/platform/services/claude-session-manager/dist/blocked-tool-census.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/blocked-tool-census.js +116 -15
- package/payload/platform/services/claude-session-manager/dist/blocked-tool-census.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.js +7 -0
- package/payload/platform/services/claude-session-manager/dist/canonical-tool-names.generated.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/html-structure-census.d.ts +44 -0
- package/payload/platform/services/claude-session-manager/dist/html-structure-census.d.ts.map +1 -0
- package/payload/platform/services/claude-session-manager/dist/html-structure-census.js +185 -0
- package/payload/platform/services/claude-session-manager/dist/html-structure-census.js.map +1 -0
- package/payload/platform/services/claude-session-manager/dist/index.js +125 -0
- package/payload/platform/services/claude-session-manager/dist/index.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/quote-delivery-reconcile.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/quote-delivery-reconcile.js +7 -0
- package/payload/platform/services/claude-session-manager/dist/quote-delivery-reconcile.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/quote-print-census.d.ts +42 -0
- package/payload/platform/services/claude-session-manager/dist/quote-print-census.d.ts.map +1 -0
- package/payload/platform/services/claude-session-manager/dist/quote-print-census.js +254 -0
- package/payload/platform/services/claude-session-manager/dist/quote-print-census.js.map +1 -0
- package/payload/platform/services/claude-session-manager/dist/specialist-census.d.ts +92 -0
- package/payload/platform/services/claude-session-manager/dist/specialist-census.d.ts.map +1 -0
- package/payload/platform/services/claude-session-manager/dist/specialist-census.js +227 -0
- package/payload/platform/services/claude-session-manager/dist/specialist-census.js.map +1 -0
- package/payload/platform/services/telegram-channel/dist/notification.d.ts +0 -12
- package/payload/platform/services/telegram-channel/dist/notification.d.ts.map +1 -1
- package/payload/platform/services/telegram-channel/dist/notification.js +8 -29
- package/payload/platform/services/telegram-channel/dist/notification.js.map +1 -1
- package/payload/platform/services/telegram-channel/dist/server.d.ts.map +1 -1
- package/payload/platform/services/telegram-channel/dist/server.js +8 -11
- package/payload/platform/services/telegram-channel/dist/server.js.map +1 -1
- package/payload/platform/templates/account-settings.json +8 -4
- package/payload/server/public/activity.html +7 -7
- package/payload/server/public/agents.html +6 -6
- package/payload/server/public/assets/AdminLoginScreens-BLGZEaKU.js +1 -0
- package/payload/server/public/assets/AdminLoginScreens-BLGZEaKU.js.br +0 -0
- package/payload/server/public/assets/AdminLoginScreens-BLGZEaKU.js.gz +0 -0
- package/payload/server/public/assets/AdminShell-C_M7YE5Z.js +3 -0
- package/payload/server/public/assets/AdminShell-C_M7YE5Z.js.br +0 -0
- package/payload/server/public/assets/AdminShell-C_M7YE5Z.js.gz +0 -0
- package/payload/server/public/assets/activity-BL6qbB9a.js +1 -0
- package/payload/server/public/assets/activity-BL6qbB9a.js.br +0 -0
- package/payload/server/public/assets/activity-BL6qbB9a.js.gz +0 -0
- package/payload/server/public/assets/admin-jnJ3P2u4.js +1 -0
- package/payload/server/public/assets/admin-jnJ3P2u4.js.br +0 -0
- package/payload/server/public/assets/admin-jnJ3P2u4.js.gz +0 -0
- package/payload/server/public/assets/agents-BzhfKZDN.js +1 -0
- package/payload/server/public/assets/agents-BzhfKZDN.js.br +0 -0
- package/payload/server/public/assets/agents-BzhfKZDN.js.gz +0 -0
- package/payload/server/public/assets/arc-Bge2fWf4.js +1 -0
- package/payload/server/public/assets/arc-Bge2fWf4.js.br +0 -0
- package/payload/server/public/assets/arc-Bge2fWf4.js.gz +0 -0
- package/payload/server/public/assets/architecture-YZFGNWBL-B9jqFTbw.js +1 -0
- package/payload/server/public/assets/architecture-YZFGNWBL-B9jqFTbw.js.br +0 -0
- package/payload/server/public/assets/architectureDiagram-Q4EWVU46-BRauf5b8.js +36 -0
- package/payload/server/public/assets/architectureDiagram-Q4EWVU46-BRauf5b8.js.br +0 -0
- package/payload/server/public/assets/architectureDiagram-Q4EWVU46-BRauf5b8.js.gz +0 -0
- package/payload/server/public/assets/blockDiagram-DXYQGD6D-CUJ554WZ.js +132 -0
- package/payload/server/public/assets/blockDiagram-DXYQGD6D-CUJ554WZ.js.br +0 -0
- package/payload/server/public/assets/blockDiagram-DXYQGD6D-CUJ554WZ.js.gz +0 -0
- package/payload/server/public/assets/browser-C-6io2B9.js +1 -0
- package/payload/server/public/assets/browser-C-6io2B9.js.br +0 -0
- package/payload/server/public/assets/browser-C-6io2B9.js.gz +0 -0
- package/payload/server/public/assets/c4Diagram-AHTNJAMY-CV9gKsKo.js +10 -0
- package/payload/server/public/assets/c4Diagram-AHTNJAMY-CV9gKsKo.js.br +0 -0
- package/payload/server/public/assets/c4Diagram-AHTNJAMY-CV9gKsKo.js.gz +0 -0
- package/payload/server/public/assets/calendar-Dt3gS88s.js +1 -0
- package/payload/server/public/assets/calendar-Dt3gS88s.js.br +0 -0
- package/payload/server/public/assets/calendar-Dt3gS88s.js.gz +0 -0
- package/payload/server/public/assets/channel-DUwJcjZw.js +1 -0
- package/payload/server/public/assets/channel-DUwJcjZw.js.br +0 -0
- package/payload/server/public/assets/chat-IUOvVkL-.js +1 -0
- package/payload/server/public/assets/chat-IUOvVkL-.js.br +1 -0
- package/payload/server/public/assets/chat-IUOvVkL-.js.gz +0 -0
- package/payload/server/public/assets/chevron-left-DSzR9zR7.js +1 -0
- package/payload/server/public/assets/chevron-left-DSzR9zR7.js.br +0 -0
- package/payload/server/public/assets/chunk-2KRD3SAO-HzWGrran.js +1 -0
- package/payload/server/public/assets/chunk-2KRD3SAO-HzWGrran.js.br +0 -0
- package/payload/server/public/assets/chunk-2KRD3SAO-HzWGrran.js.gz +0 -0
- package/payload/server/public/assets/chunk-336JU56O-ChGDYu_S.js +2 -0
- package/payload/server/public/assets/chunk-336JU56O-ChGDYu_S.js.br +0 -0
- package/payload/server/public/assets/chunk-336JU56O-ChGDYu_S.js.gz +0 -0
- package/payload/server/public/assets/chunk-426QAEUC-DLLi1nAr.js +1 -0
- package/payload/server/public/assets/chunk-426QAEUC-DLLi1nAr.js.br +0 -0
- package/payload/server/public/assets/chunk-426QAEUC-DLLi1nAr.js.gz +0 -0
- package/payload/server/public/assets/chunk-4BX2VUAB-BJunAy2u.js +1 -0
- package/payload/server/public/assets/chunk-4BX2VUAB-BJunAy2u.js.br +0 -0
- package/payload/server/public/assets/chunk-4BX2VUAB-BJunAy2u.js.gz +0 -0
- package/payload/server/public/assets/chunk-4TB4RGXK-Df9Ew0fN.js +206 -0
- package/payload/server/public/assets/chunk-4TB4RGXK-Df9Ew0fN.js.br +0 -0
- package/payload/server/public/assets/chunk-4TB4RGXK-Df9Ew0fN.js.gz +0 -0
- package/payload/server/public/assets/chunk-55IACEB6-DtquCg7p.js +1 -0
- package/payload/server/public/assets/chunk-55IACEB6-DtquCg7p.js.br +0 -0
- package/payload/server/public/assets/chunk-55IACEB6-DtquCg7p.js.gz +0 -0
- package/payload/server/public/assets/chunk-5FUZZQ4R-B3s1YuQa.js +62 -0
- package/payload/server/public/assets/chunk-5FUZZQ4R-B3s1YuQa.js.br +0 -0
- package/payload/server/public/assets/chunk-5FUZZQ4R-B3s1YuQa.js.gz +0 -0
- package/payload/server/public/assets/chunk-5PVQY5BW-C0bRnMKQ.js +2 -0
- package/payload/server/public/assets/chunk-5PVQY5BW-C0bRnMKQ.js.br +0 -0
- package/payload/server/public/assets/chunk-5PVQY5BW-C0bRnMKQ.js.gz +0 -0
- package/payload/server/public/assets/chunk-67CJDMHE-B9jxnEpu.js +1 -0
- package/payload/server/public/assets/chunk-67CJDMHE-B9jxnEpu.js.br +0 -0
- package/payload/server/public/assets/chunk-67CJDMHE-B9jxnEpu.js.gz +0 -0
- package/payload/server/public/assets/chunk-7N4EOEYR-DaimaIlO.js +1 -0
- package/payload/server/public/assets/chunk-7N4EOEYR-DaimaIlO.js.br +0 -0
- package/payload/server/public/assets/chunk-7N4EOEYR-DaimaIlO.js.gz +0 -0
- package/payload/server/public/assets/chunk-AA7GKIK3-htgz4y5z.js +1 -0
- package/payload/server/public/assets/chunk-AA7GKIK3-htgz4y5z.js.br +0 -0
- package/payload/server/public/assets/chunk-AA7GKIK3-htgz4y5z.js.gz +0 -0
- package/payload/server/public/assets/chunk-BSJP7CBP-0xBlnKJN.js +1 -0
- package/payload/server/public/assets/chunk-BSJP7CBP-0xBlnKJN.js.br +0 -0
- package/payload/server/public/assets/chunk-BSJP7CBP-0xBlnKJN.js.gz +0 -0
- package/payload/server/public/assets/chunk-CIAEETIT-HZOrcAzJ.js +1 -0
- package/payload/server/public/assets/chunk-CIAEETIT-HZOrcAzJ.js.br +0 -0
- package/payload/server/public/assets/chunk-CIAEETIT-HZOrcAzJ.js.gz +0 -0
- package/payload/server/public/assets/chunk-EDXVE4YY-CC8hCcuU.js +1 -0
- package/payload/server/public/assets/chunk-EDXVE4YY-CC8hCcuU.js.br +0 -0
- package/payload/server/public/assets/chunk-EDXVE4YY-CC8hCcuU.js.gz +0 -0
- package/payload/server/public/assets/chunk-ENJZ2VHE-BdPfdZYB.js +10 -0
- package/payload/server/public/assets/chunk-ENJZ2VHE-BdPfdZYB.js.br +0 -0
- package/payload/server/public/assets/chunk-ENJZ2VHE-BdPfdZYB.js.gz +0 -0
- package/payload/server/public/assets/chunk-FMBD7UC4-MHdn_KgF.js +15 -0
- package/payload/server/public/assets/chunk-FMBD7UC4-MHdn_KgF.js.br +0 -0
- package/payload/server/public/assets/chunk-FMBD7UC4-MHdn_KgF.js.gz +0 -0
- package/payload/server/public/assets/chunk-FOC6F5B3-Ti8BlQKX.js +1 -0
- package/payload/server/public/assets/chunk-FOC6F5B3-Ti8BlQKX.js.br +0 -0
- package/payload/server/public/assets/chunk-FOC6F5B3-Ti8BlQKX.js.gz +0 -0
- package/payload/server/public/assets/chunk-ICPOFSXX-BP8A8zb1.js +122 -0
- package/payload/server/public/assets/chunk-ICPOFSXX-BP8A8zb1.js.br +0 -0
- package/payload/server/public/assets/chunk-ICPOFSXX-BP8A8zb1.js.gz +0 -0
- package/payload/server/public/assets/chunk-K5T4RW27-F30EnSBL.js +94 -0
- package/payload/server/public/assets/chunk-K5T4RW27-F30EnSBL.js.br +0 -0
- package/payload/server/public/assets/chunk-K5T4RW27-F30EnSBL.js.gz +0 -0
- package/payload/server/public/assets/chunk-KGLVRYIC-DNSEkg2Q.js +1 -0
- package/payload/server/public/assets/chunk-KGLVRYIC-DNSEkg2Q.js.br +2 -0
- package/payload/server/public/assets/chunk-KGLVRYIC-DNSEkg2Q.js.gz +0 -0
- package/payload/server/public/assets/chunk-LIHQZDEY-DM7b0dec.js +1 -0
- package/payload/server/public/assets/chunk-LIHQZDEY-DM7b0dec.js.br +0 -0
- package/payload/server/public/assets/chunk-LIHQZDEY-DM7b0dec.js.gz +0 -0
- package/payload/server/public/assets/chunk-ORNJ4GCN-B0qoI_vp.js +1 -0
- package/payload/server/public/assets/chunk-ORNJ4GCN-B0qoI_vp.js.br +0 -0
- package/payload/server/public/assets/chunk-ORNJ4GCN-B0qoI_vp.js.gz +0 -0
- package/payload/server/public/assets/chunk-OYMX7WX6-Bfzo53eI.js +231 -0
- package/payload/server/public/assets/chunk-OYMX7WX6-Bfzo53eI.js.br +0 -0
- package/payload/server/public/assets/chunk-OYMX7WX6-Bfzo53eI.js.gz +0 -0
- package/payload/server/public/assets/chunk-QZHKN3VN-A6b8ZN9i.js +1 -0
- package/payload/server/public/assets/chunk-QZHKN3VN-A6b8ZN9i.js.br +0 -0
- package/payload/server/public/assets/chunk-QZHKN3VN-A6b8ZN9i.js.gz +0 -0
- package/payload/server/public/assets/chunk-U2HBQHQK-DcqGPXEy.js +70 -0
- package/payload/server/public/assets/chunk-U2HBQHQK-DcqGPXEy.js.br +0 -0
- package/payload/server/public/assets/chunk-U2HBQHQK-DcqGPXEy.js.gz +0 -0
- package/payload/server/public/assets/chunk-X2U36JSP-DtRi7n5Z.js +1 -0
- package/payload/server/public/assets/chunk-X2U36JSP-DtRi7n5Z.js.br +0 -0
- package/payload/server/public/assets/chunk-X2U36JSP-DtRi7n5Z.js.gz +0 -0
- package/payload/server/public/assets/chunk-XPW4576I-DmuDCcY3.js +32 -0
- package/payload/server/public/assets/chunk-XPW4576I-DmuDCcY3.js.br +0 -0
- package/payload/server/public/assets/chunk-XPW4576I-DmuDCcY3.js.gz +0 -0
- package/payload/server/public/assets/chunk-YZCP3GAM-oKk9Gv_e.js +1 -0
- package/payload/server/public/assets/chunk-YZCP3GAM-oKk9Gv_e.js.br +0 -0
- package/payload/server/public/assets/chunk-YZCP3GAM-oKk9Gv_e.js.gz +0 -0
- package/payload/server/public/assets/chunk-ZZ45TVLE-teET41Yh.js +1 -0
- package/payload/server/public/assets/chunk-ZZ45TVLE-teET41Yh.js.br +0 -0
- package/payload/server/public/assets/chunk-ZZ45TVLE-teET41Yh.js.gz +0 -0
- package/payload/server/public/assets/classDiagram-6PBFFD2Q-CMXajSzA.js +1 -0
- package/payload/server/public/assets/classDiagram-6PBFFD2Q-CMXajSzA.js.br +0 -0
- package/payload/server/public/assets/classDiagram-6PBFFD2Q-CMXajSzA.js.gz +0 -0
- package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-Cz5Kib2r.js +1 -0
- package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-Cz5Kib2r.js.br +0 -0
- package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-Cz5Kib2r.js.gz +0 -0
- package/payload/server/public/assets/clock-C5xE5p2I.js +1 -0
- package/payload/server/public/assets/clock-C5xE5p2I.js.br +0 -0
- package/payload/server/public/assets/clone-BORhq8On.js +1 -0
- package/payload/server/public/assets/clone-BORhq8On.js.br +0 -0
- package/payload/server/public/assets/copy-TkPJgllS.js +1 -0
- package/payload/server/public/assets/copy-TkPJgllS.js.br +0 -0
- package/payload/server/public/assets/copy-TkPJgllS.js.gz +0 -0
- package/payload/server/public/assets/cose-bilkent-S5V4N54A-D1xLpHGm.js +1 -0
- package/payload/server/public/assets/cose-bilkent-S5V4N54A-D1xLpHGm.js.br +0 -0
- package/payload/server/public/assets/cose-bilkent-S5V4N54A-D1xLpHGm.js.gz +0 -0
- package/payload/server/public/assets/dagre-KV5264BT-Byl65NKT.js +4 -0
- package/payload/server/public/assets/dagre-KV5264BT-Byl65NKT.js.br +0 -0
- package/payload/server/public/assets/dagre-KV5264BT-Byl65NKT.js.gz +0 -0
- package/payload/server/public/assets/dagre-ZzXkSDir.js +1 -0
- package/payload/server/public/assets/dagre-ZzXkSDir.js.br +0 -0
- package/payload/server/public/assets/dagre-ZzXkSDir.js.gz +0 -0
- package/payload/server/public/assets/data-Bhv0Pvfl.js +1 -0
- package/payload/server/public/assets/data-Bhv0Pvfl.js.br +0 -0
- package/payload/server/public/assets/data-Bhv0Pvfl.js.gz +0 -0
- package/payload/server/public/assets/diagram-5BDNPKRD-BFNkV5GK.js +10 -0
- package/payload/server/public/assets/diagram-5BDNPKRD-BFNkV5GK.js.br +0 -0
- package/payload/server/public/assets/diagram-5BDNPKRD-BFNkV5GK.js.gz +0 -0
- package/payload/server/public/assets/diagram-G4DWMVQ6-1n6vHXzR.js +24 -0
- package/payload/server/public/assets/diagram-G4DWMVQ6-1n6vHXzR.js.br +0 -0
- package/payload/server/public/assets/diagram-G4DWMVQ6-1n6vHXzR.js.gz +0 -0
- package/payload/server/public/assets/diagram-MMDJMWI5-D4QOzaw0.js +43 -0
- package/payload/server/public/assets/diagram-MMDJMWI5-D4QOzaw0.js.br +0 -0
- package/payload/server/public/assets/diagram-MMDJMWI5-D4QOzaw0.js.gz +0 -0
- package/payload/server/public/assets/diagram-TYMM5635-z8lBRsaV.js +24 -0
- package/payload/server/public/assets/diagram-TYMM5635-z8lBRsaV.js.br +0 -0
- package/payload/server/public/assets/diagram-TYMM5635-z8lBRsaV.js.gz +0 -0
- package/payload/server/public/assets/dist-DjYA4E4S.js +1 -0
- package/payload/server/public/assets/dist-DjYA4E4S.js.br +0 -0
- package/payload/server/public/assets/dist-DjYA4E4S.js.gz +0 -0
- package/payload/server/public/assets/erDiagram-SMLLAGMA-CXj3tbtX.js +85 -0
- package/payload/server/public/assets/erDiagram-SMLLAGMA-CXj3tbtX.js.br +0 -0
- package/payload/server/public/assets/erDiagram-SMLLAGMA-CXj3tbtX.js.gz +0 -0
- package/payload/server/public/assets/field-B490-evJ.js +1 -0
- package/payload/server/public/assets/field-B490-evJ.js.br +0 -0
- package/payload/server/public/assets/field-B490-evJ.js.gz +0 -0
- package/payload/server/public/assets/file-text-DyAL2DCh.js +1 -0
- package/payload/server/public/assets/file-text-DyAL2DCh.js.br +0 -0
- package/payload/server/public/assets/file-text-DyAL2DCh.js.gz +0 -0
- package/payload/server/public/assets/flatten-UdUTbm8v.js +1 -0
- package/payload/server/public/assets/flatten-UdUTbm8v.js.br +0 -0
- package/payload/server/public/assets/flatten-UdUTbm8v.js.gz +0 -0
- package/payload/server/public/assets/flowDiagram-DWJPFMVM-DnySI-I4.js +162 -0
- package/payload/server/public/assets/flowDiagram-DWJPFMVM-DnySI-I4.js.br +0 -0
- package/payload/server/public/assets/flowDiagram-DWJPFMVM-DnySI-I4.js.gz +0 -0
- package/payload/server/public/assets/ganttDiagram-T4ZO3ILL-BIE2Q78F.js +292 -0
- package/payload/server/public/assets/ganttDiagram-T4ZO3ILL-BIE2Q78F.js.br +0 -0
- package/payload/server/public/assets/ganttDiagram-T4ZO3ILL-BIE2Q78F.js.gz +0 -0
- package/payload/server/public/assets/gitGraph-7Q5UKJZL-Ua2z-DNt.js +1 -0
- package/payload/server/public/assets/gitGraph-7Q5UKJZL-Ua2z-DNt.js.br +0 -0
- package/payload/server/public/assets/gitGraphDiagram-UUTBAWPF-B2RTRpyG.js +106 -0
- package/payload/server/public/assets/gitGraphDiagram-UUTBAWPF-B2RTRpyG.js.br +0 -0
- package/payload/server/public/assets/gitGraphDiagram-UUTBAWPF-B2RTRpyG.js.gz +0 -0
- package/payload/server/public/assets/graph-PiNIcCfX.js +51 -0
- package/payload/server/public/assets/graph-PiNIcCfX.js.br +0 -0
- package/payload/server/public/assets/graph-PiNIcCfX.js.gz +0 -0
- package/payload/server/public/assets/graph-labels-8jKFrLHn.js +1 -0
- package/payload/server/public/assets/graph-labels-8jKFrLHn.js.br +0 -0
- package/payload/server/public/assets/graph-labels-8jKFrLHn.js.gz +0 -0
- package/payload/server/public/assets/graphlib-SOh92ucm.js +1 -0
- package/payload/server/public/assets/graphlib-SOh92ucm.js.br +0 -0
- package/payload/server/public/assets/graphlib-SOh92ucm.js.gz +0 -0
- package/payload/server/public/assets/info-OMHHGYJF-CNYp42iX.js +1 -0
- package/payload/server/public/assets/info-OMHHGYJF-CNYp42iX.js.br +0 -0
- package/payload/server/public/assets/infoDiagram-42DDH7IO-DklHffYr.js +2 -0
- package/payload/server/public/assets/infoDiagram-42DDH7IO-DklHffYr.js.br +0 -0
- package/payload/server/public/assets/infoDiagram-42DDH7IO-DklHffYr.js.gz +0 -0
- package/payload/server/public/assets/isEmpty-DY_Xp9Na.js +1 -0
- package/payload/server/public/assets/isEmpty-DY_Xp9Na.js.br +0 -0
- package/payload/server/public/assets/isEmpty-DY_Xp9Na.js.gz +0 -0
- package/payload/server/public/assets/ishikawaDiagram-UXIWVN3A-KAC06i3M.js +70 -0
- package/payload/server/public/assets/ishikawaDiagram-UXIWVN3A-KAC06i3M.js.br +0 -0
- package/payload/server/public/assets/ishikawaDiagram-UXIWVN3A-KAC06i3M.js.gz +0 -0
- package/payload/server/public/assets/journeyDiagram-VCZTEJTY-cA37ob8S.js +139 -0
- package/payload/server/public/assets/journeyDiagram-VCZTEJTY-cA37ob8S.js.br +0 -0
- package/payload/server/public/assets/journeyDiagram-VCZTEJTY-cA37ob8S.js.gz +0 -0
- package/payload/server/public/assets/jsx-runtime-ChVh0xOm.css +1 -0
- package/payload/server/public/assets/jsx-runtime-ChVh0xOm.css.br +0 -0
- package/payload/server/public/assets/jsx-runtime-ChVh0xOm.css.gz +0 -0
- package/payload/server/public/assets/jsx-runtime-YcUntiud.js +9 -0
- package/payload/server/public/assets/jsx-runtime-YcUntiud.js.br +0 -0
- package/payload/server/public/assets/jsx-runtime-YcUntiud.js.gz +0 -0
- package/payload/server/public/assets/kanban-definition-6JOO6SKY-CBjL70wU.js +89 -0
- package/payload/server/public/assets/kanban-definition-6JOO6SKY-CBjL70wU.js.br +0 -0
- package/payload/server/public/assets/kanban-definition-6JOO6SKY-CBjL70wU.js.gz +0 -0
- package/payload/server/public/assets/line-K8229GLG.js +1 -0
- package/payload/server/public/assets/line-K8229GLG.js.br +0 -0
- package/payload/server/public/assets/line-K8229GLG.js.gz +0 -0
- package/payload/server/public/assets/linear-DeX7Wdt6.js +1 -0
- package/payload/server/public/assets/linear-DeX7Wdt6.js.br +0 -0
- package/payload/server/public/assets/linear-DeX7Wdt6.js.gz +0 -0
- package/payload/server/public/assets/mermaid-parser.core-OnNOAzPX.js +4 -0
- package/payload/server/public/assets/mermaid-parser.core-OnNOAzPX.js.br +0 -0
- package/payload/server/public/assets/mermaid-parser.core-OnNOAzPX.js.gz +0 -0
- package/payload/server/public/assets/mermaid.core-DA-Gezeo.js +11 -0
- package/payload/server/public/assets/mermaid.core-DA-Gezeo.js.br +0 -0
- package/payload/server/public/assets/mermaid.core-DA-Gezeo.js.gz +0 -0
- package/payload/server/public/assets/mindmap-definition-QFDTVHPH-C24TcDyS.js +96 -0
- package/payload/server/public/assets/mindmap-definition-QFDTVHPH-C24TcDyS.js.br +0 -0
- package/payload/server/public/assets/mindmap-definition-QFDTVHPH-C24TcDyS.js.gz +0 -0
- package/payload/server/public/assets/operator-DKGKGzrb.js +1 -0
- package/payload/server/public/assets/operator-DKGKGzrb.js.br +0 -0
- package/payload/server/public/assets/operator-DKGKGzrb.js.gz +0 -0
- package/payload/server/public/assets/ordinal-gnpqfIHn.js +1 -0
- package/payload/server/public/assets/ordinal-gnpqfIHn.js.br +0 -0
- package/payload/server/public/assets/ordinal-gnpqfIHn.js.gz +0 -0
- package/payload/server/public/assets/packet-4T2RLAQJ-B3ZAElsg.js +1 -0
- package/payload/server/public/assets/packet-4T2RLAQJ-B3ZAElsg.js.br +0 -0
- package/payload/server/public/assets/page-BU5vlY9Y.js +1 -0
- package/payload/server/public/assets/page-BU5vlY9Y.js.br +0 -0
- package/payload/server/public/assets/page-BU5vlY9Y.js.gz +0 -0
- package/payload/server/public/assets/page-DXz_K10G.js +32 -0
- package/payload/server/public/assets/page-DXz_K10G.js.br +0 -0
- package/payload/server/public/assets/page-DXz_K10G.js.gz +0 -0
- package/payload/server/public/assets/pdf-render-B5af7vu1.js +11 -0
- package/payload/server/public/assets/pdf-render-B5af7vu1.js.br +0 -0
- package/payload/server/public/assets/pdf-render-B5af7vu1.js.gz +0 -0
- package/payload/server/public/assets/pie-ZZUOXDRM-BWsRCj8p.js +1 -0
- package/payload/server/public/assets/pie-ZZUOXDRM-BWsRCj8p.js.br +0 -0
- package/payload/server/public/assets/pieDiagram-DEJITSTG-ChS9jalQ.js +30 -0
- package/payload/server/public/assets/pieDiagram-DEJITSTG-ChS9jalQ.js.br +0 -0
- package/payload/server/public/assets/pieDiagram-DEJITSTG-ChS9jalQ.js.gz +0 -0
- package/payload/server/public/assets/play-CmSyYrB6.js +1 -0
- package/payload/server/public/assets/play-CmSyYrB6.js.br +0 -0
- package/payload/server/public/assets/play-CmSyYrB6.js.gz +0 -0
- package/payload/server/public/assets/public-BmA3-jLj.js +1 -0
- package/payload/server/public/assets/public-BmA3-jLj.js.br +0 -0
- package/payload/server/public/assets/public-BmA3-jLj.js.gz +0 -0
- package/payload/server/public/assets/quadrantDiagram-34T5L4WZ-BxLfRK0z.js +7 -0
- package/payload/server/public/assets/quadrantDiagram-34T5L4WZ-BxLfRK0z.js.br +0 -0
- package/payload/server/public/assets/quadrantDiagram-34T5L4WZ-BxLfRK0z.js.gz +0 -0
- package/payload/server/public/assets/radar-PYXPWWZC-Gxbt2rGT.js +1 -0
- package/payload/server/public/assets/radar-PYXPWWZC-Gxbt2rGT.js.br +0 -0
- package/payload/server/public/assets/reduce-BvezuHIe.js +1 -0
- package/payload/server/public/assets/reduce-BvezuHIe.js.br +0 -0
- package/payload/server/public/assets/reduce-BvezuHIe.js.gz +0 -0
- package/payload/server/public/assets/requirementDiagram-MS252O5E-CWy48VI3.js +84 -0
- package/payload/server/public/assets/requirementDiagram-MS252O5E-CWy48VI3.js.br +0 -0
- package/payload/server/public/assets/requirementDiagram-MS252O5E-CWy48VI3.js.gz +0 -0
- package/payload/server/public/assets/rotate-ccw-fCH0LSMq.js +1 -0
- package/payload/server/public/assets/rotate-ccw-fCH0LSMq.js.br +0 -0
- package/payload/server/public/assets/rotate-ccw-fCH0LSMq.js.gz +0 -0
- package/payload/server/public/assets/routines-BeFrmkls.js +2 -0
- package/payload/server/public/assets/routines-BeFrmkls.js.br +0 -0
- package/payload/server/public/assets/routines-BeFrmkls.js.gz +0 -0
- package/payload/server/public/assets/sankeyDiagram-XADWPNL6-BBCLEJA3.js +10 -0
- package/payload/server/public/assets/sankeyDiagram-XADWPNL6-BBCLEJA3.js.br +0 -0
- package/payload/server/public/assets/sankeyDiagram-XADWPNL6-BBCLEJA3.js.gz +0 -0
- package/payload/server/public/assets/sequenceDiagram-FGHM5R23-wu64F04G.js +157 -0
- package/payload/server/public/assets/sequenceDiagram-FGHM5R23-wu64F04G.js.br +0 -0
- package/payload/server/public/assets/sequenceDiagram-FGHM5R23-wu64F04G.js.gz +0 -0
- package/payload/server/public/assets/skills-mjls5HBa.js +1 -0
- package/payload/server/public/assets/skills-mjls5HBa.js.br +0 -0
- package/payload/server/public/assets/skills-mjls5HBa.js.gz +0 -0
- package/payload/server/public/assets/src-BvINb2fL.js +1 -0
- package/payload/server/public/assets/src-BvINb2fL.js.br +0 -0
- package/payload/server/public/assets/src-BvINb2fL.js.gz +0 -0
- package/payload/server/public/assets/stateDiagram-FHFEXIEX-Bq6BFFDC.js +1 -0
- package/payload/server/public/assets/stateDiagram-FHFEXIEX-Bq6BFFDC.js.br +0 -0
- package/payload/server/public/assets/stateDiagram-FHFEXIEX-Bq6BFFDC.js.gz +0 -0
- package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-PxPsWt1r.js +1 -0
- package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-PxPsWt1r.js.br +0 -0
- package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-PxPsWt1r.js.gz +0 -0
- package/payload/server/public/assets/tasks-p6puHHD0.js +3 -0
- package/payload/server/public/assets/tasks-p6puHHD0.js.br +0 -0
- package/payload/server/public/assets/tasks-p6puHHD0.js.gz +0 -0
- package/payload/server/public/assets/timeline-definition-GMOUNBTQ-DTdvVZp-.js +120 -0
- package/payload/server/public/assets/timeline-definition-GMOUNBTQ-DTdvVZp-.js.br +0 -0
- package/payload/server/public/assets/timeline-definition-GMOUNBTQ-DTdvVZp-.js.gz +0 -0
- package/payload/server/public/assets/treeView-SZITEDCU-Bl-aPmE3.js +1 -0
- package/payload/server/public/assets/treeView-SZITEDCU-Bl-aPmE3.js.br +0 -0
- package/payload/server/public/assets/treemap-W4RFUUIX-CUxE8Ofg.js +1 -0
- package/payload/server/public/assets/treemap-W4RFUUIX-CUxE8Ofg.js.br +0 -0
- package/payload/server/public/assets/triangle-alert-CrZ1ewbd.js +1 -0
- package/payload/server/public/assets/triangle-alert-CrZ1ewbd.js.br +0 -0
- package/payload/server/public/assets/triangle-alert-CrZ1ewbd.js.gz +0 -0
- package/payload/server/public/assets/useCopyFeedback-zOQNrIwd.js +1 -0
- package/payload/server/public/assets/useCopyFeedback-zOQNrIwd.js.br +0 -0
- package/payload/server/public/assets/useCopyFeedback-zOQNrIwd.js.gz +0 -0
- package/payload/server/public/assets/useMediaQuery-BmG090FR.js +6 -0
- package/payload/server/public/assets/useMediaQuery-BmG090FR.js.br +0 -0
- package/payload/server/public/assets/useMediaQuery-BmG090FR.js.gz +0 -0
- package/payload/server/public/assets/useVoiceRecorder-9pf6FFJ-.js +2 -0
- package/payload/server/public/assets/useVoiceRecorder-9pf6FFJ-.js.br +0 -0
- package/payload/server/public/assets/useVoiceRecorder-9pf6FFJ-.js.gz +0 -0
- package/payload/server/public/assets/vennDiagram-DHZGUBPP-CigqIBdl.js +34 -0
- package/payload/server/public/assets/vennDiagram-DHZGUBPP-CigqIBdl.js.br +0 -0
- package/payload/server/public/assets/vennDiagram-DHZGUBPP-CigqIBdl.js.gz +0 -0
- package/payload/server/public/assets/wardley-RL74JXVD-DPB13D22.js +1 -0
- package/payload/server/public/assets/wardley-RL74JXVD-DPB13D22.js.br +0 -0
- package/payload/server/public/assets/wardleyDiagram-NUSXRM2D-VhV1plUD.js +20 -0
- package/payload/server/public/assets/wardleyDiagram-NUSXRM2D-VhV1plUD.js.br +0 -0
- package/payload/server/public/assets/wardleyDiagram-NUSXRM2D-VhV1plUD.js.gz +0 -0
- package/payload/server/public/assets/wrench-k4GYG5rc.js +1 -0
- package/payload/server/public/assets/wrench-k4GYG5rc.js.br +0 -0
- package/payload/server/public/assets/wrench-k4GYG5rc.js.gz +0 -0
- package/payload/server/public/assets/xychartDiagram-5P7HB3ND-DGkkNLZt.js +7 -0
- package/payload/server/public/assets/xychartDiagram-5P7HB3ND-DGkkNLZt.js.br +0 -0
- package/payload/server/public/assets/xychartDiagram-5P7HB3ND-DGkkNLZt.js.gz +0 -0
- package/payload/server/public/browser.html +6 -6
- package/payload/server/public/calendar.html +9 -9
- package/payload/server/public/chat.html +16 -16
- package/payload/server/public/data.html +15 -15
- package/payload/server/public/field.html +4 -4
- package/payload/server/public/graph.html +11 -11
- package/payload/server/public/index.html +17 -17
- package/payload/server/public/operator.html +17 -17
- package/payload/server/public/public.html +16 -16
- package/payload/server/public/routines.html +10 -10
- package/payload/server/public/skills.html +7 -7
- package/payload/server/public/tasks.html +8 -8
- package/payload/server/server.js +2894 -1985
- package/payload/platform/lib/dispatch-read/src/config.d.ts +0 -26
- package/payload/platform/lib/dispatch-read/src/types.d.ts +0 -143
- package/payload/server/public/assets/AdminLoginScreens-Dp6k1XgD.js +0 -1
- package/payload/server/public/assets/AdminLoginScreens-Dp6k1XgD.js.br +0 -0
- package/payload/server/public/assets/AdminLoginScreens-Dp6k1XgD.js.gz +0 -0
- package/payload/server/public/assets/AdminShell-D-wB90c3.js +0 -3
- package/payload/server/public/assets/AdminShell-D-wB90c3.js.br +0 -0
- package/payload/server/public/assets/AdminShell-D-wB90c3.js.gz +0 -0
- package/payload/server/public/assets/activity-BJxhblz-.js +0 -1
- package/payload/server/public/assets/activity-BJxhblz-.js.br +0 -0
- package/payload/server/public/assets/activity-BJxhblz-.js.gz +0 -0
- package/payload/server/public/assets/admin-DzEi8shs.js +0 -1
- package/payload/server/public/assets/admin-DzEi8shs.js.br +0 -0
- package/payload/server/public/assets/admin-DzEi8shs.js.gz +0 -0
- package/payload/server/public/assets/agents-DTL8kjfD.js +0 -1
- package/payload/server/public/assets/agents-DTL8kjfD.js.br +0 -0
- package/payload/server/public/assets/agents-DTL8kjfD.js.gz +0 -0
- package/payload/server/public/assets/arc-CWXBKNZd.js +0 -1
- package/payload/server/public/assets/arc-CWXBKNZd.js.br +0 -0
- package/payload/server/public/assets/arc-CWXBKNZd.js.gz +0 -0
- package/payload/server/public/assets/architecture-YZFGNWBL-CIL4I0fc.js +0 -1
- package/payload/server/public/assets/architecture-YZFGNWBL-CIL4I0fc.js.br +0 -0
- package/payload/server/public/assets/architectureDiagram-Q4EWVU46-C-KPMyG4.js +0 -36
- package/payload/server/public/assets/architectureDiagram-Q4EWVU46-C-KPMyG4.js.br +0 -0
- package/payload/server/public/assets/architectureDiagram-Q4EWVU46-C-KPMyG4.js.gz +0 -0
- package/payload/server/public/assets/blockDiagram-DXYQGD6D-DkYbV9Sf.js +0 -132
- package/payload/server/public/assets/blockDiagram-DXYQGD6D-DkYbV9Sf.js.br +0 -0
- package/payload/server/public/assets/blockDiagram-DXYQGD6D-DkYbV9Sf.js.gz +0 -0
- package/payload/server/public/assets/browser-UZp75zhx.js +0 -1
- package/payload/server/public/assets/browser-UZp75zhx.js.br +0 -0
- package/payload/server/public/assets/browser-UZp75zhx.js.gz +0 -0
- package/payload/server/public/assets/c4Diagram-AHTNJAMY-EYW4kdlx.js +0 -10
- package/payload/server/public/assets/c4Diagram-AHTNJAMY-EYW4kdlx.js.br +0 -0
- package/payload/server/public/assets/c4Diagram-AHTNJAMY-EYW4kdlx.js.gz +0 -0
- package/payload/server/public/assets/calendar-Dfo0O2K_.js +0 -1
- package/payload/server/public/assets/calendar-Dfo0O2K_.js.br +0 -0
- package/payload/server/public/assets/calendar-Dfo0O2K_.js.gz +0 -0
- package/payload/server/public/assets/channel-CbHmRjy_.js +0 -1
- package/payload/server/public/assets/channel-CbHmRjy_.js.br +0 -0
- package/payload/server/public/assets/chat-ByJAvEWZ.js +0 -1
- package/payload/server/public/assets/chat-ByJAvEWZ.js.br +0 -0
- package/payload/server/public/assets/chat-ByJAvEWZ.js.gz +0 -0
- package/payload/server/public/assets/chevron-left-iG7sYNm7.js +0 -1
- package/payload/server/public/assets/chevron-left-iG7sYNm7.js.br +0 -0
- package/payload/server/public/assets/chunk-2KRD3SAO-CmAF1UmH.js +0 -1
- package/payload/server/public/assets/chunk-2KRD3SAO-CmAF1UmH.js.br +0 -0
- package/payload/server/public/assets/chunk-2KRD3SAO-CmAF1UmH.js.gz +0 -0
- package/payload/server/public/assets/chunk-336JU56O-CyhmJeMM.js +0 -2
- package/payload/server/public/assets/chunk-336JU56O-CyhmJeMM.js.br +0 -0
- package/payload/server/public/assets/chunk-336JU56O-CyhmJeMM.js.gz +0 -0
- package/payload/server/public/assets/chunk-426QAEUC-C2tnHCM7.js +0 -1
- package/payload/server/public/assets/chunk-426QAEUC-C2tnHCM7.js.br +0 -0
- package/payload/server/public/assets/chunk-426QAEUC-C2tnHCM7.js.gz +0 -0
- package/payload/server/public/assets/chunk-4BX2VUAB-DCzC40-Y.js +0 -1
- package/payload/server/public/assets/chunk-4BX2VUAB-DCzC40-Y.js.br +0 -0
- package/payload/server/public/assets/chunk-4BX2VUAB-DCzC40-Y.js.gz +0 -0
- package/payload/server/public/assets/chunk-4TB4RGXK-D9BXrSA_.js +0 -206
- package/payload/server/public/assets/chunk-4TB4RGXK-D9BXrSA_.js.br +0 -0
- package/payload/server/public/assets/chunk-4TB4RGXK-D9BXrSA_.js.gz +0 -0
- package/payload/server/public/assets/chunk-55IACEB6-BwXC-qTZ.js +0 -1
- package/payload/server/public/assets/chunk-55IACEB6-BwXC-qTZ.js.br +0 -0
- package/payload/server/public/assets/chunk-55IACEB6-BwXC-qTZ.js.gz +0 -0
- package/payload/server/public/assets/chunk-5FUZZQ4R-De7QtXxM.js +0 -62
- package/payload/server/public/assets/chunk-5FUZZQ4R-De7QtXxM.js.br +0 -0
- package/payload/server/public/assets/chunk-5FUZZQ4R-De7QtXxM.js.gz +0 -0
- package/payload/server/public/assets/chunk-5PVQY5BW-B5tsJiCq.js +0 -2
- package/payload/server/public/assets/chunk-5PVQY5BW-B5tsJiCq.js.br +0 -0
- package/payload/server/public/assets/chunk-5PVQY5BW-B5tsJiCq.js.gz +0 -0
- package/payload/server/public/assets/chunk-67CJDMHE-BjTh9STV.js +0 -1
- package/payload/server/public/assets/chunk-67CJDMHE-BjTh9STV.js.br +0 -0
- package/payload/server/public/assets/chunk-67CJDMHE-BjTh9STV.js.gz +0 -0
- package/payload/server/public/assets/chunk-7N4EOEYR-91klRswn.js +0 -1
- package/payload/server/public/assets/chunk-7N4EOEYR-91klRswn.js.br +0 -0
- package/payload/server/public/assets/chunk-7N4EOEYR-91klRswn.js.gz +0 -0
- package/payload/server/public/assets/chunk-AA7GKIK3-XFPGEoBu.js +0 -1
- package/payload/server/public/assets/chunk-AA7GKIK3-XFPGEoBu.js.br +0 -3
- package/payload/server/public/assets/chunk-AA7GKIK3-XFPGEoBu.js.gz +0 -0
- package/payload/server/public/assets/chunk-BSJP7CBP-B7wgMyWq.js +0 -1
- package/payload/server/public/assets/chunk-BSJP7CBP-B7wgMyWq.js.br +0 -0
- package/payload/server/public/assets/chunk-BSJP7CBP-B7wgMyWq.js.gz +0 -0
- package/payload/server/public/assets/chunk-CIAEETIT-WPy9vcOo.js +0 -1
- package/payload/server/public/assets/chunk-CIAEETIT-WPy9vcOo.js.br +0 -0
- package/payload/server/public/assets/chunk-CIAEETIT-WPy9vcOo.js.gz +0 -0
- package/payload/server/public/assets/chunk-EDXVE4YY-D_2JIFFG.js +0 -1
- package/payload/server/public/assets/chunk-EDXVE4YY-D_2JIFFG.js.br +0 -0
- package/payload/server/public/assets/chunk-EDXVE4YY-D_2JIFFG.js.gz +0 -0
- package/payload/server/public/assets/chunk-ENJZ2VHE-xORReRt0.js +0 -10
- package/payload/server/public/assets/chunk-ENJZ2VHE-xORReRt0.js.br +0 -0
- package/payload/server/public/assets/chunk-ENJZ2VHE-xORReRt0.js.gz +0 -0
- package/payload/server/public/assets/chunk-FMBD7UC4-BZsDu4nl.js +0 -15
- package/payload/server/public/assets/chunk-FMBD7UC4-BZsDu4nl.js.br +0 -0
- package/payload/server/public/assets/chunk-FMBD7UC4-BZsDu4nl.js.gz +0 -0
- package/payload/server/public/assets/chunk-FOC6F5B3-QzUp8wXX.js +0 -1
- package/payload/server/public/assets/chunk-FOC6F5B3-QzUp8wXX.js.br +0 -0
- package/payload/server/public/assets/chunk-FOC6F5B3-QzUp8wXX.js.gz +0 -0
- package/payload/server/public/assets/chunk-ICPOFSXX-B64S7i7x.js +0 -122
- package/payload/server/public/assets/chunk-ICPOFSXX-B64S7i7x.js.br +0 -0
- package/payload/server/public/assets/chunk-ICPOFSXX-B64S7i7x.js.gz +0 -0
- package/payload/server/public/assets/chunk-K5T4RW27-DzPc6X1_.js +0 -94
- package/payload/server/public/assets/chunk-K5T4RW27-DzPc6X1_.js.br +0 -0
- package/payload/server/public/assets/chunk-K5T4RW27-DzPc6X1_.js.gz +0 -0
- package/payload/server/public/assets/chunk-KGLVRYIC-A2rPnD7k.js +0 -1
- package/payload/server/public/assets/chunk-KGLVRYIC-A2rPnD7k.js.br +0 -1
- package/payload/server/public/assets/chunk-KGLVRYIC-A2rPnD7k.js.gz +0 -0
- package/payload/server/public/assets/chunk-LIHQZDEY-CaWX327m.js +0 -1
- package/payload/server/public/assets/chunk-LIHQZDEY-CaWX327m.js.br +0 -0
- package/payload/server/public/assets/chunk-LIHQZDEY-CaWX327m.js.gz +0 -0
- package/payload/server/public/assets/chunk-ORNJ4GCN-zrWhdmnc.js +0 -1
- package/payload/server/public/assets/chunk-ORNJ4GCN-zrWhdmnc.js.br +0 -0
- package/payload/server/public/assets/chunk-ORNJ4GCN-zrWhdmnc.js.gz +0 -0
- package/payload/server/public/assets/chunk-OYMX7WX6-B_2qQir6.js +0 -231
- package/payload/server/public/assets/chunk-OYMX7WX6-B_2qQir6.js.br +0 -0
- package/payload/server/public/assets/chunk-OYMX7WX6-B_2qQir6.js.gz +0 -0
- package/payload/server/public/assets/chunk-QZHKN3VN-BzgrgCTo.js +0 -1
- package/payload/server/public/assets/chunk-QZHKN3VN-BzgrgCTo.js.br +0 -0
- package/payload/server/public/assets/chunk-QZHKN3VN-BzgrgCTo.js.gz +0 -0
- package/payload/server/public/assets/chunk-U2HBQHQK-B-IYgxsc.js +0 -70
- package/payload/server/public/assets/chunk-U2HBQHQK-B-IYgxsc.js.br +0 -0
- package/payload/server/public/assets/chunk-U2HBQHQK-B-IYgxsc.js.gz +0 -0
- package/payload/server/public/assets/chunk-X2U36JSP-Y9Y1_EuG.js +0 -1
- package/payload/server/public/assets/chunk-X2U36JSP-Y9Y1_EuG.js.br +0 -0
- package/payload/server/public/assets/chunk-X2U36JSP-Y9Y1_EuG.js.gz +0 -0
- package/payload/server/public/assets/chunk-XPW4576I-C-6yETG_.js +0 -32
- package/payload/server/public/assets/chunk-XPW4576I-C-6yETG_.js.br +0 -0
- package/payload/server/public/assets/chunk-XPW4576I-C-6yETG_.js.gz +0 -0
- package/payload/server/public/assets/chunk-YZCP3GAM-KAuQIU5n.js +0 -1
- package/payload/server/public/assets/chunk-YZCP3GAM-KAuQIU5n.js.br +0 -0
- package/payload/server/public/assets/chunk-YZCP3GAM-KAuQIU5n.js.gz +0 -0
- package/payload/server/public/assets/chunk-ZZ45TVLE-BJcH3KDH.js +0 -1
- package/payload/server/public/assets/chunk-ZZ45TVLE-BJcH3KDH.js.br +0 -0
- package/payload/server/public/assets/chunk-ZZ45TVLE-BJcH3KDH.js.gz +0 -0
- package/payload/server/public/assets/classDiagram-6PBFFD2Q-BxvqeBEj.js +0 -1
- package/payload/server/public/assets/classDiagram-6PBFFD2Q-BxvqeBEj.js.br +0 -0
- package/payload/server/public/assets/classDiagram-6PBFFD2Q-BxvqeBEj.js.gz +0 -0
- package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-R3-NzMRG.js +0 -1
- package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-R3-NzMRG.js.br +0 -0
- package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-R3-NzMRG.js.gz +0 -0
- package/payload/server/public/assets/clock-xSs0UF10.js +0 -1
- package/payload/server/public/assets/clock-xSs0UF10.js.br +0 -0
- package/payload/server/public/assets/clock-xSs0UF10.js.gz +0 -0
- package/payload/server/public/assets/clone-QdOE5SXR.js +0 -1
- package/payload/server/public/assets/copy-CGI2jioK.js +0 -1
- package/payload/server/public/assets/copy-CGI2jioK.js.br +0 -0
- package/payload/server/public/assets/copy-CGI2jioK.js.gz +0 -0
- package/payload/server/public/assets/cose-bilkent-S5V4N54A-CcXj8vHa.js +0 -1
- package/payload/server/public/assets/cose-bilkent-S5V4N54A-CcXj8vHa.js.br +0 -0
- package/payload/server/public/assets/cose-bilkent-S5V4N54A-CcXj8vHa.js.gz +0 -0
- package/payload/server/public/assets/dagre-DOtq9kYX.js +0 -1
- package/payload/server/public/assets/dagre-DOtq9kYX.js.br +0 -0
- package/payload/server/public/assets/dagre-DOtq9kYX.js.gz +0 -0
- package/payload/server/public/assets/dagre-KV5264BT-BOhQs4rS.js +0 -4
- package/payload/server/public/assets/dagre-KV5264BT-BOhQs4rS.js.br +0 -0
- package/payload/server/public/assets/dagre-KV5264BT-BOhQs4rS.js.gz +0 -0
- package/payload/server/public/assets/data-dvwK4BcP.js +0 -1
- package/payload/server/public/assets/data-dvwK4BcP.js.br +0 -0
- package/payload/server/public/assets/data-dvwK4BcP.js.gz +0 -0
- package/payload/server/public/assets/diagram-5BDNPKRD-CqJFt5ZM.js +0 -10
- package/payload/server/public/assets/diagram-5BDNPKRD-CqJFt5ZM.js.br +0 -0
- package/payload/server/public/assets/diagram-5BDNPKRD-CqJFt5ZM.js.gz +0 -0
- package/payload/server/public/assets/diagram-G4DWMVQ6-WQIyAZMn.js +0 -24
- package/payload/server/public/assets/diagram-G4DWMVQ6-WQIyAZMn.js.br +0 -0
- package/payload/server/public/assets/diagram-G4DWMVQ6-WQIyAZMn.js.gz +0 -0
- package/payload/server/public/assets/diagram-MMDJMWI5-jcKc4a2w.js +0 -43
- package/payload/server/public/assets/diagram-MMDJMWI5-jcKc4a2w.js.br +0 -0
- package/payload/server/public/assets/diagram-MMDJMWI5-jcKc4a2w.js.gz +0 -0
- package/payload/server/public/assets/diagram-TYMM5635-Bbt2KuWe.js +0 -24
- package/payload/server/public/assets/diagram-TYMM5635-Bbt2KuWe.js.br +0 -0
- package/payload/server/public/assets/diagram-TYMM5635-Bbt2KuWe.js.gz +0 -0
- package/payload/server/public/assets/dispatch-Dx9-ty1K.js +0 -1
- package/payload/server/public/assets/dispatch-Dx9-ty1K.js.br +0 -0
- package/payload/server/public/assets/dispatch-Dx9-ty1K.js.gz +0 -0
- package/payload/server/public/assets/dist-9RiN6lky.js +0 -1
- package/payload/server/public/assets/dist-9RiN6lky.js.br +0 -0
- package/payload/server/public/assets/dist-9RiN6lky.js.gz +0 -0
- package/payload/server/public/assets/erDiagram-SMLLAGMA-BBm6azPJ.js +0 -85
- package/payload/server/public/assets/erDiagram-SMLLAGMA-BBm6azPJ.js.br +0 -0
- package/payload/server/public/assets/erDiagram-SMLLAGMA-BBm6azPJ.js.gz +0 -0
- package/payload/server/public/assets/field-D-P6CsWA.js +0 -1
- package/payload/server/public/assets/field-D-P6CsWA.js.br +0 -0
- package/payload/server/public/assets/field-D-P6CsWA.js.gz +0 -0
- package/payload/server/public/assets/file-text-RWintp9q.js +0 -1
- package/payload/server/public/assets/file-text-RWintp9q.js.br +0 -0
- package/payload/server/public/assets/file-text-RWintp9q.js.gz +0 -0
- package/payload/server/public/assets/flatten-BurGKeIy.js +0 -1
- package/payload/server/public/assets/flatten-BurGKeIy.js.br +0 -0
- package/payload/server/public/assets/flatten-BurGKeIy.js.gz +0 -0
- package/payload/server/public/assets/flowDiagram-DWJPFMVM-_r45DYJ8.js +0 -162
- package/payload/server/public/assets/flowDiagram-DWJPFMVM-_r45DYJ8.js.br +0 -0
- package/payload/server/public/assets/flowDiagram-DWJPFMVM-_r45DYJ8.js.gz +0 -0
- package/payload/server/public/assets/ganttDiagram-T4ZO3ILL-Bjgj9Bej.js +0 -292
- package/payload/server/public/assets/ganttDiagram-T4ZO3ILL-Bjgj9Bej.js.br +0 -0
- package/payload/server/public/assets/ganttDiagram-T4ZO3ILL-Bjgj9Bej.js.gz +0 -0
- package/payload/server/public/assets/gitGraph-7Q5UKJZL-DdbK59od.js +0 -1
- package/payload/server/public/assets/gitGraph-7Q5UKJZL-DdbK59od.js.br +0 -0
- package/payload/server/public/assets/gitGraphDiagram-UUTBAWPF-DTRdhGJA.js +0 -106
- package/payload/server/public/assets/gitGraphDiagram-UUTBAWPF-DTRdhGJA.js.br +0 -0
- package/payload/server/public/assets/gitGraphDiagram-UUTBAWPF-DTRdhGJA.js.gz +0 -0
- package/payload/server/public/assets/graph-CpBlfYrJ.js +0 -51
- package/payload/server/public/assets/graph-CpBlfYrJ.js.br +0 -0
- package/payload/server/public/assets/graph-CpBlfYrJ.js.gz +0 -0
- package/payload/server/public/assets/graph-labels-BOMyPppX.js +0 -1
- package/payload/server/public/assets/graph-labels-BOMyPppX.js.br +0 -0
- package/payload/server/public/assets/graph-labels-BOMyPppX.js.gz +0 -0
- package/payload/server/public/assets/graphlib-DT4h6-4N.js +0 -1
- package/payload/server/public/assets/graphlib-DT4h6-4N.js.br +0 -0
- package/payload/server/public/assets/graphlib-DT4h6-4N.js.gz +0 -0
- package/payload/server/public/assets/info-OMHHGYJF-BR8gm0wj.js +0 -1
- package/payload/server/public/assets/info-OMHHGYJF-BR8gm0wj.js.br +0 -0
- package/payload/server/public/assets/infoDiagram-42DDH7IO-Cr3Efss6.js +0 -2
- package/payload/server/public/assets/infoDiagram-42DDH7IO-Cr3Efss6.js.br +0 -0
- package/payload/server/public/assets/infoDiagram-42DDH7IO-Cr3Efss6.js.gz +0 -0
- package/payload/server/public/assets/isEmpty-C5v0-EY7.js +0 -1
- package/payload/server/public/assets/isEmpty-C5v0-EY7.js.br +0 -0
- package/payload/server/public/assets/isEmpty-C5v0-EY7.js.gz +0 -0
- package/payload/server/public/assets/ishikawaDiagram-UXIWVN3A-BklHzVHm.js +0 -70
- package/payload/server/public/assets/ishikawaDiagram-UXIWVN3A-BklHzVHm.js.br +0 -0
- package/payload/server/public/assets/ishikawaDiagram-UXIWVN3A-BklHzVHm.js.gz +0 -0
- package/payload/server/public/assets/journeyDiagram-VCZTEJTY-Ckxx2CmV.js +0 -139
- package/payload/server/public/assets/journeyDiagram-VCZTEJTY-Ckxx2CmV.js.br +0 -0
- package/payload/server/public/assets/journeyDiagram-VCZTEJTY-Ckxx2CmV.js.gz +0 -0
- package/payload/server/public/assets/jsx-runtime-5lmxFBIw.js +0 -9
- package/payload/server/public/assets/jsx-runtime-5lmxFBIw.js.br +0 -0
- package/payload/server/public/assets/jsx-runtime-5lmxFBIw.js.gz +0 -0
- package/payload/server/public/assets/jsx-runtime-DxsQ5Y-z.css +0 -1
- package/payload/server/public/assets/jsx-runtime-DxsQ5Y-z.css.br +0 -0
- package/payload/server/public/assets/jsx-runtime-DxsQ5Y-z.css.gz +0 -0
- package/payload/server/public/assets/kanban-definition-6JOO6SKY-BLELXpqn.js +0 -89
- package/payload/server/public/assets/kanban-definition-6JOO6SKY-BLELXpqn.js.br +0 -0
- package/payload/server/public/assets/kanban-definition-6JOO6SKY-BLELXpqn.js.gz +0 -0
- package/payload/server/public/assets/line-BkI5icOY.js +0 -1
- package/payload/server/public/assets/line-BkI5icOY.js.br +0 -0
- package/payload/server/public/assets/line-BkI5icOY.js.gz +0 -0
- package/payload/server/public/assets/linear-B64ANRVs.js +0 -1
- package/payload/server/public/assets/linear-B64ANRVs.js.br +0 -0
- package/payload/server/public/assets/linear-B64ANRVs.js.gz +0 -0
- package/payload/server/public/assets/mermaid-parser.core-qXPKkdJe.js +0 -4
- package/payload/server/public/assets/mermaid-parser.core-qXPKkdJe.js.br +0 -0
- package/payload/server/public/assets/mermaid-parser.core-qXPKkdJe.js.gz +0 -0
- package/payload/server/public/assets/mermaid.core-BMsz65Wy.js +0 -11
- package/payload/server/public/assets/mermaid.core-BMsz65Wy.js.br +0 -0
- package/payload/server/public/assets/mermaid.core-BMsz65Wy.js.gz +0 -0
- package/payload/server/public/assets/mindmap-definition-QFDTVHPH-DhFTS2sx.js +0 -96
- package/payload/server/public/assets/mindmap-definition-QFDTVHPH-DhFTS2sx.js.br +0 -0
- package/payload/server/public/assets/mindmap-definition-QFDTVHPH-DhFTS2sx.js.gz +0 -0
- package/payload/server/public/assets/operator-DFgW6GiH.js +0 -1
- package/payload/server/public/assets/operator-DFgW6GiH.js.br +0 -0
- package/payload/server/public/assets/operator-DFgW6GiH.js.gz +0 -0
- package/payload/server/public/assets/ordinal-CJ_pL32Z.js +0 -1
- package/payload/server/public/assets/ordinal-CJ_pL32Z.js.br +0 -0
- package/payload/server/public/assets/ordinal-CJ_pL32Z.js.gz +0 -0
- package/payload/server/public/assets/packet-4T2RLAQJ-B31PbAeA.js +0 -1
- package/payload/server/public/assets/packet-4T2RLAQJ-B31PbAeA.js.br +0 -0
- package/payload/server/public/assets/page-BRShHSH0.js +0 -1
- package/payload/server/public/assets/page-BRShHSH0.js.br +0 -0
- package/payload/server/public/assets/page-BRShHSH0.js.gz +0 -0
- package/payload/server/public/assets/page-BbBCu9iP.js +0 -32
- package/payload/server/public/assets/page-BbBCu9iP.js.br +0 -0
- package/payload/server/public/assets/page-BbBCu9iP.js.gz +0 -0
- package/payload/server/public/assets/pdf-render-ynIPXfRA.js +0 -11
- package/payload/server/public/assets/pdf-render-ynIPXfRA.js.br +0 -0
- package/payload/server/public/assets/pdf-render-ynIPXfRA.js.gz +0 -0
- package/payload/server/public/assets/pie-ZZUOXDRM-BbSc1VXl.js +0 -1
- package/payload/server/public/assets/pie-ZZUOXDRM-BbSc1VXl.js.br +0 -0
- package/payload/server/public/assets/pieDiagram-DEJITSTG-B2TxkbHK.js +0 -30
- package/payload/server/public/assets/pieDiagram-DEJITSTG-B2TxkbHK.js.br +0 -0
- package/payload/server/public/assets/pieDiagram-DEJITSTG-B2TxkbHK.js.gz +0 -0
- package/payload/server/public/assets/play-BJxUaf6-.js +0 -1
- package/payload/server/public/assets/play-BJxUaf6-.js.br +0 -0
- package/payload/server/public/assets/play-BJxUaf6-.js.gz +0 -0
- package/payload/server/public/assets/public-DkObqkzL.js +0 -1
- package/payload/server/public/assets/public-DkObqkzL.js.br +0 -0
- package/payload/server/public/assets/public-DkObqkzL.js.gz +0 -0
- package/payload/server/public/assets/quadrantDiagram-34T5L4WZ-GsMxIJuS.js +0 -7
- package/payload/server/public/assets/quadrantDiagram-34T5L4WZ-GsMxIJuS.js.br +0 -0
- package/payload/server/public/assets/quadrantDiagram-34T5L4WZ-GsMxIJuS.js.gz +0 -0
- package/payload/server/public/assets/radar-PYXPWWZC-B0La8_mZ.js +0 -1
- package/payload/server/public/assets/radar-PYXPWWZC-B0La8_mZ.js.br +0 -0
- package/payload/server/public/assets/reduce-CfkEiHc9.js +0 -1
- package/payload/server/public/assets/reduce-CfkEiHc9.js.br +0 -0
- package/payload/server/public/assets/reduce-CfkEiHc9.js.gz +0 -0
- package/payload/server/public/assets/requirementDiagram-MS252O5E-DqNprm-1.js +0 -84
- package/payload/server/public/assets/requirementDiagram-MS252O5E-DqNprm-1.js.br +0 -0
- package/payload/server/public/assets/requirementDiagram-MS252O5E-DqNprm-1.js.gz +0 -0
- package/payload/server/public/assets/rotate-ccw-DgMO69nh.js +0 -1
- package/payload/server/public/assets/rotate-ccw-DgMO69nh.js.br +0 -0
- package/payload/server/public/assets/rotate-ccw-DgMO69nh.js.gz +0 -0
- package/payload/server/public/assets/routines-D9kvg_Xu.js +0 -2
- package/payload/server/public/assets/routines-D9kvg_Xu.js.br +0 -0
- package/payload/server/public/assets/routines-D9kvg_Xu.js.gz +0 -0
- package/payload/server/public/assets/sankeyDiagram-XADWPNL6-B-kRuiuz.js +0 -10
- package/payload/server/public/assets/sankeyDiagram-XADWPNL6-B-kRuiuz.js.br +0 -0
- package/payload/server/public/assets/sankeyDiagram-XADWPNL6-B-kRuiuz.js.gz +0 -0
- package/payload/server/public/assets/sequenceDiagram-FGHM5R23-DEhL9g3K.js +0 -157
- package/payload/server/public/assets/sequenceDiagram-FGHM5R23-DEhL9g3K.js.br +0 -0
- package/payload/server/public/assets/sequenceDiagram-FGHM5R23-DEhL9g3K.js.gz +0 -0
- package/payload/server/public/assets/skills-l5I9HZ3D.js +0 -1
- package/payload/server/public/assets/skills-l5I9HZ3D.js.br +0 -0
- package/payload/server/public/assets/skills-l5I9HZ3D.js.gz +0 -0
- package/payload/server/public/assets/src-BrAT6wKv.js +0 -1
- package/payload/server/public/assets/src-BrAT6wKv.js.br +0 -0
- package/payload/server/public/assets/src-BrAT6wKv.js.gz +0 -0
- package/payload/server/public/assets/stateDiagram-FHFEXIEX-Q-g6BHdz.js +0 -1
- package/payload/server/public/assets/stateDiagram-FHFEXIEX-Q-g6BHdz.js.br +0 -0
- package/payload/server/public/assets/stateDiagram-FHFEXIEX-Q-g6BHdz.js.gz +0 -0
- package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-ssRWItVj.js +0 -1
- package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-ssRWItVj.js.br +0 -0
- package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-ssRWItVj.js.gz +0 -0
- package/payload/server/public/assets/tasks-C2qJMv6i.js +0 -3
- package/payload/server/public/assets/tasks-C2qJMv6i.js.br +0 -0
- package/payload/server/public/assets/tasks-C2qJMv6i.js.gz +0 -0
- package/payload/server/public/assets/timeline-definition-GMOUNBTQ-B3-52q4Q.js +0 -120
- package/payload/server/public/assets/timeline-definition-GMOUNBTQ-B3-52q4Q.js.br +0 -0
- package/payload/server/public/assets/timeline-definition-GMOUNBTQ-B3-52q4Q.js.gz +0 -0
- package/payload/server/public/assets/treeView-SZITEDCU-BBR3hu9P.js +0 -1
- package/payload/server/public/assets/treeView-SZITEDCU-BBR3hu9P.js.br +0 -0
- package/payload/server/public/assets/treemap-W4RFUUIX-wSQMuzBT.js +0 -1
- package/payload/server/public/assets/treemap-W4RFUUIX-wSQMuzBT.js.br +0 -0
- package/payload/server/public/assets/triangle-alert-BnC67uSs.js +0 -1
- package/payload/server/public/assets/triangle-alert-BnC67uSs.js.br +0 -0
- package/payload/server/public/assets/triangle-alert-BnC67uSs.js.gz +0 -0
- package/payload/server/public/assets/useCopyFeedback-1RmgkTFh.js +0 -1
- package/payload/server/public/assets/useCopyFeedback-1RmgkTFh.js.br +0 -0
- package/payload/server/public/assets/useCopyFeedback-1RmgkTFh.js.gz +0 -0
- package/payload/server/public/assets/useMediaQuery-BQslddHQ.js +0 -6
- package/payload/server/public/assets/useMediaQuery-BQslddHQ.js.br +0 -0
- package/payload/server/public/assets/useMediaQuery-BQslddHQ.js.gz +0 -0
- package/payload/server/public/assets/useVoiceRecorder-BeZNQEC4.js +0 -2
- package/payload/server/public/assets/useVoiceRecorder-BeZNQEC4.js.br +0 -0
- package/payload/server/public/assets/useVoiceRecorder-BeZNQEC4.js.gz +0 -0
- package/payload/server/public/assets/vennDiagram-DHZGUBPP-Bzm1VDi1.js +0 -34
- package/payload/server/public/assets/vennDiagram-DHZGUBPP-Bzm1VDi1.js.br +0 -0
- package/payload/server/public/assets/vennDiagram-DHZGUBPP-Bzm1VDi1.js.gz +0 -0
- package/payload/server/public/assets/wardley-RL74JXVD-3QaECtQN.js +0 -1
- package/payload/server/public/assets/wardley-RL74JXVD-3QaECtQN.js.br +0 -0
- package/payload/server/public/assets/wardleyDiagram-NUSXRM2D-DIqGZr4v.js +0 -20
- package/payload/server/public/assets/wardleyDiagram-NUSXRM2D-DIqGZr4v.js.br +0 -0
- package/payload/server/public/assets/wardleyDiagram-NUSXRM2D-DIqGZr4v.js.gz +0 -0
- package/payload/server/public/assets/wrench-D4ufQG6C.js +0 -1
- package/payload/server/public/assets/wrench-D4ufQG6C.js.br +0 -0
- package/payload/server/public/assets/wrench-D4ufQG6C.js.gz +0 -0
- package/payload/server/public/assets/xychartDiagram-5P7HB3ND-0W2L2hQA.js +0 -7
- package/payload/server/public/assets/xychartDiagram-5P7HB3ND-0W2L2hQA.js.br +0 -0
- package/payload/server/public/assets/xychartDiagram-5P7HB3ND-0W2L2hQA.js.gz +0 -0
- package/payload/server/public/dispatch.html +0 -20
- /package/payload/server/public/assets/{_baseFor-D1duyODO.js → _baseFor-BApe6Tla.js} +0 -0
- /package/payload/server/public/assets/{_baseFor-D1duyODO.js.br → _baseFor-BApe6Tla.js.br} +0 -0
- /package/payload/server/public/assets/{_baseFor-D1duyODO.js.gz → _baseFor-BApe6Tla.js.gz} +0 -0
- /package/payload/server/public/assets/{array-j7Xa9Fap.js → array-eiH4WfvY.js} +0 -0
- /package/payload/server/public/assets/{array-j7Xa9Fap.js.br → array-eiH4WfvY.js.br} +0 -0
- /package/payload/server/public/assets/{chunk-DlZTsV_O.js → chunk-BycB0eMI.js} +0 -0
- /package/payload/server/public/assets/{chunk-DlZTsV_O.js.br → chunk-BycB0eMI.js.br} +0 -0
- /package/payload/server/public/assets/{chunk-DlZTsV_O.js.gz → chunk-BycB0eMI.js.gz} +0 -0
- /package/payload/server/public/assets/{cytoscape.esm-Dob3eilA.js → cytoscape.esm-BZ6NYo0w.js} +0 -0
- /package/payload/server/public/assets/{cytoscape.esm-Dob3eilA.js.br → cytoscape.esm-BZ6NYo0w.js.br} +0 -0
- /package/payload/server/public/assets/{cytoscape.esm-Dob3eilA.js.gz → cytoscape.esm-BZ6NYo0w.js.gz} +0 -0
- /package/payload/server/public/assets/{defaultLocale-BNILPWh2.js → defaultLocale-DWHqsa6O.js} +0 -0
- /package/payload/server/public/assets/{defaultLocale-BNILPWh2.js.br → defaultLocale-DWHqsa6O.js.br} +0 -0
- /package/payload/server/public/assets/{defaultLocale-BNILPWh2.js.gz → defaultLocale-DWHqsa6O.js.gz} +0 -0
- /package/payload/server/public/assets/{file-download-CN4H4Eih.js → file-download-B7zwa78w.js} +0 -0
- /package/payload/server/public/assets/{file-download-CN4H4Eih.js.br → file-download-B7zwa78w.js.br} +0 -0
- /package/payload/server/public/assets/{file-download-CN4H4Eih.js.gz → file-download-B7zwa78w.js.gz} +0 -0
- /package/payload/server/public/assets/{init-ve51bpJo.js → init-BdkYWjJJ.js} +0 -0
- /package/payload/server/public/assets/{init-ve51bpJo.js.br → init-BdkYWjJJ.js.br} +0 -0
- /package/payload/server/public/assets/{init-ve51bpJo.js.gz → init-BdkYWjJJ.js.gz} +0 -0
- /package/payload/server/public/assets/{katex-CJNaolDQ.js → katex-BCzoGtFh.js} +0 -0
- /package/payload/server/public/assets/{katex-CJNaolDQ.js.br → katex-BCzoGtFh.js.br} +0 -0
- /package/payload/server/public/assets/{katex-CJNaolDQ.js.gz → katex-BCzoGtFh.js.gz} +0 -0
- /package/payload/server/public/assets/{path-B4emajHp.js → path-DY2qBuPM.js} +0 -0
- /package/payload/server/public/assets/{path-B4emajHp.js.br → path-DY2qBuPM.js.br} +0 -0
- /package/payload/server/public/assets/{path-B4emajHp.js.gz → path-DY2qBuPM.js.gz} +0 -0
- /package/payload/server/public/assets/{preload-helper-3YNEDsJZ.js → preload-helper-eAV8hweq.js} +0 -0
- /package/payload/server/public/assets/{preload-helper-3YNEDsJZ.js.br → preload-helper-eAV8hweq.js.br} +0 -0
- /package/payload/server/public/assets/{preload-helper-3YNEDsJZ.js.gz → preload-helper-eAV8hweq.js.gz} +0 -0
- /package/payload/server/public/assets/{rough.esm-zabqYs6f.js → rough.esm-ec8xsRC7.js} +0 -0
- /package/payload/server/public/assets/{rough.esm-zabqYs6f.js.br → rough.esm-ec8xsRC7.js.br} +0 -0
- /package/payload/server/public/assets/{rough.esm-zabqYs6f.js.gz → rough.esm-ec8xsRC7.js.gz} +0 -0
|
@@ -14,11 +14,13 @@
|
|
|
14
14
|
import type { Session } from "neo4j-driver";
|
|
15
15
|
import { withSession } from "./session.js";
|
|
16
16
|
import type {
|
|
17
|
+
Attendance,
|
|
17
18
|
DispatchCounts,
|
|
18
19
|
FieldVisit,
|
|
19
20
|
JobListFilter,
|
|
20
21
|
JobRow,
|
|
21
22
|
PlannerVisit,
|
|
23
|
+
SiteLocation,
|
|
22
24
|
VisitRow,
|
|
23
25
|
} from "./types.js";
|
|
24
26
|
|
|
@@ -52,6 +54,70 @@ export interface VisitRecordState {
|
|
|
52
54
|
readonly signatures: number;
|
|
53
55
|
}
|
|
54
56
|
|
|
57
|
+
/**
|
|
58
|
+
* The attendance sub-pattern, as one string every visit query interpolates
|
|
59
|
+
* (Task 2512).
|
|
60
|
+
*
|
|
61
|
+
* It COLLECTS rather than returning a row per attender, and that is the whole
|
|
62
|
+
* point: `OPTIONAL MATCH (v)-[:ATTENDED_BY]->(e:Engineer)` returned one record
|
|
63
|
+
* per edge, so a two-worker visit arrived as two rows carrying one set of times
|
|
64
|
+
* and rendered as two separate visits. `collect` drops nulls, so an unallocated
|
|
65
|
+
* visit yields `[]` and never a list holding one empty map.
|
|
66
|
+
*
|
|
67
|
+
* Interpolated rather than repeated by hand because nine queries need it, and a
|
|
68
|
+
* hand-copied ninth is the one that keeps the old shape.
|
|
69
|
+
*/
|
|
70
|
+
export const ATTENDANCE_MATCH =
|
|
71
|
+
`OPTIONAL MATCH (v)-[:HAS_ATTENDANCE]->(att:Attendance)-[:BY_ENGINEER]->(e:Engineer)`;
|
|
72
|
+
|
|
73
|
+
/** The collected list, named `attendances`. Pair with `ATTENDANCE_MATCH`. */
|
|
74
|
+
export const ATTENDANCE_COLLECT =
|
|
75
|
+
`collect(CASE WHEN att IS NULL THEN NULL ELSE {
|
|
76
|
+
workerId: e.engineerId,
|
|
77
|
+
arrivedPressedAt: att.arrivedPressedAt,
|
|
78
|
+
arrivedObservedAt: att.arrivedObservedAt,
|
|
79
|
+
arrivedObservedDistanceM: att.arrivedObservedDistanceM
|
|
80
|
+
} END) AS attendances`;
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Project the collected list, and derive the sole-attendee scalars from it.
|
|
84
|
+
*
|
|
85
|
+
* The scalars are populated only at exactly one attendance. At two they are
|
|
86
|
+
* null, because "which single worker?" has no answer and returning either one
|
|
87
|
+
* is a silent cross-assignment — the same failure `portal-visits-push.ts`
|
|
88
|
+
* refuses by binding on a property rather than matching a name.
|
|
89
|
+
*/
|
|
90
|
+
export function projectAttendances(g: { get(key: string): unknown }): {
|
|
91
|
+
attendances: Attendance[];
|
|
92
|
+
workerId: string | null;
|
|
93
|
+
arrivedPressedAt: string | null;
|
|
94
|
+
arrivedObservedAt: string | null;
|
|
95
|
+
arrivedObservedDistanceM: number | null;
|
|
96
|
+
} {
|
|
97
|
+
const raw = (g.get("attendances") as Array<Record<string, unknown>> | null) ?? [];
|
|
98
|
+
const attendances: Attendance[] = raw
|
|
99
|
+
.filter((a) => a && typeof a.workerId === "string" && a.workerId.length > 0)
|
|
100
|
+
.map((a) => ({
|
|
101
|
+
workerId: String(a.workerId),
|
|
102
|
+
arrivedPressedAt: str(a.arrivedPressedAt),
|
|
103
|
+
arrivedObservedAt: str(a.arrivedObservedAt),
|
|
104
|
+
arrivedObservedDistanceM:
|
|
105
|
+
a.arrivedObservedDistanceM == null ? null : num(a.arrivedObservedDistanceM),
|
|
106
|
+
}))
|
|
107
|
+
// Sorted here rather than in Cypher: `collect` has no ORDER BY of its own,
|
|
108
|
+
// and two reads of one visit returning different orders would make a
|
|
109
|
+
// rendered card's worker order arbitrary.
|
|
110
|
+
.sort((x, y) => (x.workerId < y.workerId ? -1 : x.workerId > y.workerId ? 1 : 0));
|
|
111
|
+
const sole = attendances.length === 1 ? attendances[0] : null;
|
|
112
|
+
return {
|
|
113
|
+
attendances,
|
|
114
|
+
workerId: sole?.workerId ?? null,
|
|
115
|
+
arrivedPressedAt: sole?.arrivedPressedAt ?? null,
|
|
116
|
+
arrivedObservedAt: sole?.arrivedObservedAt ?? null,
|
|
117
|
+
arrivedObservedDistanceM: sole?.arrivedObservedDistanceM ?? null,
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
|
|
55
121
|
/** Shared job projection, so every job query returns one shape. */
|
|
56
122
|
export function projectJob(g: { get(key: string): unknown }): JobRow {
|
|
57
123
|
return {
|
|
@@ -68,7 +134,6 @@ export function projectJob(g: { get(key: string): unknown }): JobRow {
|
|
|
68
134
|
|
|
69
135
|
/** Shared visit projection, so the day read and its tests cannot drift apart. */
|
|
70
136
|
export function projectVisit(g: { get(key: string): unknown }): PlannerVisit {
|
|
71
|
-
const dist = g.get("arrivedObservedDistanceM");
|
|
72
137
|
return {
|
|
73
138
|
visitId: String(g.get("visitId")),
|
|
74
139
|
jobId: str(g.get("jobId")),
|
|
@@ -76,14 +141,11 @@ export function projectVisit(g: { get(key: string): unknown }): PlannerVisit {
|
|
|
76
141
|
startDate: str(g.get("startDate")),
|
|
77
142
|
endDate: str(g.get("endDate")),
|
|
78
143
|
purpose: str(g.get("purpose")),
|
|
79
|
-
workerId: str(g.get("workerId")),
|
|
80
144
|
siteName: str(g.get("siteName")),
|
|
81
145
|
customerId: str(g.get("customerId")),
|
|
82
146
|
customerName: str(g.get("customerName")),
|
|
83
147
|
jobType: str(g.get("jobType")),
|
|
84
|
-
|
|
85
|
-
arrivedObservedAt: str(g.get("arrivedObservedAt")),
|
|
86
|
-
arrivedObservedDistanceM: dist == null ? null : num(dist),
|
|
148
|
+
...projectAttendances(g),
|
|
87
149
|
};
|
|
88
150
|
}
|
|
89
151
|
|
|
@@ -114,19 +176,16 @@ export async function readVisit(
|
|
|
114
176
|
const r = await session.run(
|
|
115
177
|
`MATCH (v:Visit {accountId: $accountId, visitId: $visitId})
|
|
116
178
|
OPTIONAL MATCH (j:Job)-[:HAS_VISIT]->(v)
|
|
117
|
-
|
|
179
|
+
${ATTENDANCE_MATCH}
|
|
180
|
+
WITH v, j, ${ATTENDANCE_COLLECT}
|
|
118
181
|
RETURN v.visitId AS visitId, j.jobId AS jobId, v.status AS status,
|
|
119
182
|
v.startDate AS startDate, v.endDate AS endDate, v.purpose AS purpose,
|
|
120
|
-
|
|
121
|
-
v.arrivedPressedAt AS arrivedPressedAt,
|
|
122
|
-
v.arrivedObservedAt AS arrivedObservedAt,
|
|
123
|
-
v.arrivedObservedDistanceM AS arrivedObservedDistanceM
|
|
183
|
+
attendances
|
|
124
184
|
LIMIT 1`,
|
|
125
185
|
{ accountId, visitId },
|
|
126
186
|
);
|
|
127
187
|
if (r.records.length === 0) return null;
|
|
128
188
|
const g = r.records[0];
|
|
129
|
-
const dist = g.get("arrivedObservedDistanceM");
|
|
130
189
|
return {
|
|
131
190
|
visitId: String(g.get("visitId")),
|
|
132
191
|
jobId: str(g.get("jobId")),
|
|
@@ -134,10 +193,7 @@ export async function readVisit(
|
|
|
134
193
|
startDate: str(g.get("startDate")),
|
|
135
194
|
endDate: str(g.get("endDate")),
|
|
136
195
|
purpose: str(g.get("purpose")),
|
|
137
|
-
|
|
138
|
-
arrivedPressedAt: str(g.get("arrivedPressedAt")),
|
|
139
|
-
arrivedObservedAt: str(g.get("arrivedObservedAt")),
|
|
140
|
-
arrivedObservedDistanceM: dist == null ? null : num(dist),
|
|
196
|
+
...projectAttendances(g),
|
|
141
197
|
};
|
|
142
198
|
}
|
|
143
199
|
|
|
@@ -185,27 +241,69 @@ export async function readVisitsForJob(
|
|
|
185
241
|
): Promise<VisitRow[]> {
|
|
186
242
|
const r = await session.run(
|
|
187
243
|
`MATCH (j:Job {accountId: $accountId, jobId: $jobId})-[:HAS_VISIT]->(v:Visit)
|
|
188
|
-
|
|
244
|
+
${ATTENDANCE_MATCH}
|
|
245
|
+
WITH v, ${ATTENDANCE_COLLECT}
|
|
189
246
|
RETURN v.visitId AS visitId, v.status AS status, v.startDate AS startDate,
|
|
190
|
-
v.endDate AS endDate, v.purpose AS purpose,
|
|
191
|
-
v.arrivedPressedAt AS arrivedPressedAt,
|
|
192
|
-
v.arrivedObservedAt AS arrivedObservedAt,
|
|
193
|
-
v.arrivedObservedDistanceM AS arrivedObservedDistanceM
|
|
247
|
+
v.endDate AS endDate, v.purpose AS purpose, attendances
|
|
194
248
|
ORDER BY v.startDate ASC`,
|
|
195
249
|
{ accountId, jobId },
|
|
196
250
|
);
|
|
251
|
+
return r.records.map((g) => ({
|
|
252
|
+
visitId: String(g.get("visitId")),
|
|
253
|
+
jobId,
|
|
254
|
+
status: String(g.get("status")),
|
|
255
|
+
startDate: str(g.get("startDate")),
|
|
256
|
+
endDate: str(g.get("endDate")),
|
|
257
|
+
purpose: str(g.get("purpose")),
|
|
258
|
+
...projectAttendances(g),
|
|
259
|
+
}));
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
/**
|
|
263
|
+
* A worker's visits that are not finished, newest first (Task 2510).
|
|
264
|
+
*
|
|
265
|
+
* Deliberately not scoped to today. A visit that overran yesterday is still
|
|
266
|
+
* open, and a day window would silently drop the photo of the job most likely to
|
|
267
|
+
* need one.
|
|
268
|
+
*/
|
|
269
|
+
export async function readOpenVisitsForWorker(
|
|
270
|
+
session: Session,
|
|
271
|
+
accountId: string,
|
|
272
|
+
workerId: string,
|
|
273
|
+
terminalStatuses: readonly string[],
|
|
274
|
+
): Promise<VisitRow[]> {
|
|
275
|
+
const r = await session.run(
|
|
276
|
+
// Anchored on the caller's own attendance, then the whole visit's collected
|
|
277
|
+
// beside it — the shape `readWorkerDay` uses, for the same reason: the
|
|
278
|
+
// sole-attendee rule returns null on a visit they share, and this list is
|
|
279
|
+
// what a worker's photo or voice note gets attached to.
|
|
280
|
+
`MATCH (v:Visit {accountId: $accountId})-[:HAS_ATTENDANCE]->(mine:Attendance)-[:BY_ENGINEER]->(:Engineer {engineerId: $workerId})
|
|
281
|
+
WHERE NOT v.status IN $terminal
|
|
282
|
+
OPTIONAL MATCH (j:Job)-[:HAS_VISIT]->(v)
|
|
283
|
+
${ATTENDANCE_MATCH}
|
|
284
|
+
WITH v, j, mine, ${ATTENDANCE_COLLECT}
|
|
285
|
+
RETURN v.visitId AS visitId, j.jobId AS jobId, v.status AS status,
|
|
286
|
+
v.startDate AS startDate, v.endDate AS endDate, v.purpose AS purpose,
|
|
287
|
+
attendances,
|
|
288
|
+
mine.arrivedPressedAt AS ownArrivedPressedAt,
|
|
289
|
+
mine.arrivedObservedAt AS ownArrivedObservedAt,
|
|
290
|
+
mine.arrivedObservedDistanceM AS ownArrivedObservedDistanceM
|
|
291
|
+
ORDER BY v.startDate DESC`,
|
|
292
|
+
{ accountId, workerId, terminal: [...terminalStatuses] },
|
|
293
|
+
);
|
|
197
294
|
return r.records.map((g) => {
|
|
198
|
-
const dist = g.get("
|
|
295
|
+
const dist = g.get("ownArrivedObservedDistanceM");
|
|
199
296
|
return {
|
|
200
297
|
visitId: String(g.get("visitId")),
|
|
201
|
-
jobId,
|
|
298
|
+
jobId: str(g.get("jobId")),
|
|
202
299
|
status: String(g.get("status")),
|
|
203
300
|
startDate: str(g.get("startDate")),
|
|
204
301
|
endDate: str(g.get("endDate")),
|
|
205
302
|
purpose: str(g.get("purpose")),
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
303
|
+
attendances: projectAttendances(g).attendances,
|
|
304
|
+
workerId,
|
|
305
|
+
arrivedPressedAt: str(g.get("ownArrivedPressedAt")),
|
|
306
|
+
arrivedObservedAt: str(g.get("ownArrivedObservedAt")),
|
|
209
307
|
arrivedObservedDistanceM: dist == null ? null : num(dist),
|
|
210
308
|
};
|
|
211
309
|
});
|
|
@@ -219,7 +317,9 @@ export async function readCommitments(
|
|
|
219
317
|
to: string,
|
|
220
318
|
): Promise<Map<string, Commitment[]>> {
|
|
221
319
|
const r = await session.run(
|
|
222
|
-
|
|
320
|
+
// One row per ATTENDANCE is correct here and nowhere else: a commitment
|
|
321
|
+
// belongs to a worker, so a two-worker visit legitimately commits both.
|
|
322
|
+
`MATCH (v:Visit {accountId: $accountId})-[:HAS_ATTENDANCE]->(:Attendance)-[:BY_ENGINEER]->(e:Engineer)
|
|
223
323
|
WHERE v.startDate < $to AND coalesce(v.endDate, v.startDate) > $from
|
|
224
324
|
RETURN e.engineerId AS workerId, v.visitId AS visitId,
|
|
225
325
|
v.startDate AS start, coalesce(v.endDate, v.startDate) AS end`,
|
|
@@ -240,6 +340,72 @@ export async function readCommitments(
|
|
|
240
340
|
return out;
|
|
241
341
|
}
|
|
242
342
|
|
|
343
|
+
/** Where a worker was last, for the travel estimate at allocation. */
|
|
344
|
+
export interface PreviousVisit {
|
|
345
|
+
readonly visitId: string;
|
|
346
|
+
/** Null when the visit's job was never linked to a site. */
|
|
347
|
+
readonly siteId: string | null;
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
/**
|
|
351
|
+
* Each worker's latest visit ending at or before `before`, no earlier than
|
|
352
|
+
* `dayStart`.
|
|
353
|
+
*
|
|
354
|
+
* `readCommitments` cannot answer this: it reads only inside the requested
|
|
355
|
+
* window, and the origin of a journey is by definition outside it.
|
|
356
|
+
*
|
|
357
|
+
* **Both bounds, always.** Without the upper one, a worker's current job
|
|
358
|
+
* becomes the origin and the estimate measures a journey that has not happened
|
|
359
|
+
* yet. Without the lower one, yesterday's last job becomes this morning's
|
|
360
|
+
* origin and the office is shown a drive nobody will make. `dayStart` is the
|
|
361
|
+
* caller's, computed in the account's timezone, because "that day" is not a
|
|
362
|
+
* UTC fact.
|
|
363
|
+
*
|
|
364
|
+
* The collapse to one visit per worker is done here rather than in the Cypher.
|
|
365
|
+
* A `head(collect(...))` would be invisible to every test that does not hold a
|
|
366
|
+
* real database, and picking the wrong origin visit is the failure that
|
|
367
|
+
* produces a confident number for the wrong journey.
|
|
368
|
+
*/
|
|
369
|
+
export async function readPreviousVisits(
|
|
370
|
+
session: Session,
|
|
371
|
+
accountId: string,
|
|
372
|
+
before: string,
|
|
373
|
+
dayStart: string,
|
|
374
|
+
): Promise<Map<string, PreviousVisit>> {
|
|
375
|
+
const r = await session.run(
|
|
376
|
+
// One row per ATTENDANCE, as `readCommitments` above: a two-worker visit is
|
|
377
|
+
// where BOTH of them were, so each is legitimately coming from it. Task 2512
|
|
378
|
+
// retired `ATTENDED_BY`; this query was written against it and would have
|
|
379
|
+
// matched nothing, reporting every worker as having no previous visit.
|
|
380
|
+
`MATCH (v:Visit {accountId: $accountId})-[:HAS_ATTENDANCE]->(:Attendance)-[:BY_ENGINEER]->(e:Engineer)
|
|
381
|
+
WHERE coalesce(v.endDate, v.startDate) <= $before
|
|
382
|
+
AND coalesce(v.endDate, v.startDate) >= $dayStart
|
|
383
|
+
OPTIONAL MATCH (j:Job {accountId: $accountId})-[:HAS_VISIT]->(v)
|
|
384
|
+
OPTIONAL MATCH (j)-[:AT_SITE]->(s:Site {accountId: $accountId})
|
|
385
|
+
RETURN e.engineerId AS workerId, v.visitId AS visitId,
|
|
386
|
+
coalesce(v.endDate, v.startDate) AS endDate, s.siteId AS siteId`,
|
|
387
|
+
{ accountId, before, dayStart },
|
|
388
|
+
);
|
|
389
|
+
const out = new Map<string, PreviousVisit>();
|
|
390
|
+
const latest = new Map<string, string>();
|
|
391
|
+
for (const g of r.records) {
|
|
392
|
+
const workerId = str(g.get("workerId"));
|
|
393
|
+
if (!workerId) continue;
|
|
394
|
+
const endDate = str(g.get("endDate"));
|
|
395
|
+
if (endDate === null) continue;
|
|
396
|
+
const held = latest.get(workerId);
|
|
397
|
+
// Strictly later, so two visits ending on the same instant keep the first
|
|
398
|
+
// the query returned rather than flipping between runs.
|
|
399
|
+
if (held !== undefined && held >= endDate) continue;
|
|
400
|
+
latest.set(workerId, endDate);
|
|
401
|
+
out.set(workerId, {
|
|
402
|
+
visitId: String(g.get("visitId")),
|
|
403
|
+
siteId: str(g.get("siteId")),
|
|
404
|
+
});
|
|
405
|
+
}
|
|
406
|
+
return out;
|
|
407
|
+
}
|
|
408
|
+
|
|
243
409
|
/**
|
|
244
410
|
* The job-list query as text plus params, extracted so its shape is testable
|
|
245
411
|
* without a database.
|
|
@@ -254,7 +420,7 @@ export function buildJobListQuery(filter: JobListFilter): {
|
|
|
254
420
|
if (filter.unallocatedOnly) clauses.push("NOT (j)-[:HAS_VISIT]->(:Visit)");
|
|
255
421
|
if (filter.workerId) {
|
|
256
422
|
clauses.push(
|
|
257
|
-
"EXISTS { MATCH (j)-[:HAS_VISIT]->(:Visit)-[:
|
|
423
|
+
"EXISTS { MATCH (j)-[:HAS_VISIT]->(:Visit)-[:HAS_ATTENDANCE]->(:Attendance)-[:BY_ENGINEER]->(w:Engineer) WHERE w.engineerId = $workerId }",
|
|
258
424
|
);
|
|
259
425
|
}
|
|
260
426
|
// One EXISTS carrying both bounds, never two. Two independent clauses are
|
|
@@ -306,7 +472,7 @@ export async function readJobs(
|
|
|
306
472
|
export async function readNodeId(
|
|
307
473
|
session: Session,
|
|
308
474
|
accountId: string,
|
|
309
|
-
label: "Site" | "Customer" | "Engineer" | "Vehicle",
|
|
475
|
+
label: "Site" | "Customer" | "Engineer" | "Vehicle" | "Job",
|
|
310
476
|
keyProp: string,
|
|
311
477
|
keyValue: string,
|
|
312
478
|
): Promise<string | null> {
|
|
@@ -318,6 +484,128 @@ export async function readNodeId(
|
|
|
318
484
|
return r.records.length === 0 ? null : String(r.records[0].get("id"));
|
|
319
485
|
}
|
|
320
486
|
|
|
487
|
+
/**
|
|
488
|
+
* A site's position and radius, or null when the account holds no such site
|
|
489
|
+
* (Task 2510).
|
|
490
|
+
*
|
|
491
|
+
* A site that exists but carries no coordinates returns nulls rather than null:
|
|
492
|
+
* "this site is not on the account" and "this site has never been placed" are
|
|
493
|
+
* different problems, and the geofence names each of them separately.
|
|
494
|
+
*/
|
|
495
|
+
export async function readSiteLocation(
|
|
496
|
+
session: Session,
|
|
497
|
+
accountId: string,
|
|
498
|
+
siteId: string,
|
|
499
|
+
): Promise<SiteLocation | null> {
|
|
500
|
+
const r = await session.run(
|
|
501
|
+
`MATCH (s:Site {accountId: $accountId, siteId: $siteId})
|
|
502
|
+
RETURN s.siteId AS siteId, s.latitude AS latitude, s.longitude AS longitude,
|
|
503
|
+
s.geofenceRadiusM AS geofenceRadiusM
|
|
504
|
+
LIMIT 1`,
|
|
505
|
+
{ accountId, siteId },
|
|
506
|
+
);
|
|
507
|
+
if (r.records.length === 0) return null;
|
|
508
|
+
const g = r.records[0];
|
|
509
|
+
const lat = g.get("latitude");
|
|
510
|
+
const lon = g.get("longitude");
|
|
511
|
+
const rad = g.get("geofenceRadiusM");
|
|
512
|
+
return {
|
|
513
|
+
siteId: String(g.get("siteId")),
|
|
514
|
+
latitude: lat == null ? null : num(lat),
|
|
515
|
+
longitude: lon == null ? null : num(lon),
|
|
516
|
+
geofenceRadiusM: rad == null ? null : num(rad),
|
|
517
|
+
};
|
|
518
|
+
}
|
|
519
|
+
|
|
520
|
+
|
|
521
|
+
/**
|
|
522
|
+
* One intake draft. Every optional property is returned explicitly as null
|
|
523
|
+
* rather than omitted, so a caller can tell "the draft does not carry this"
|
|
524
|
+
* from "the read did not ask for it".
|
|
525
|
+
*/
|
|
526
|
+
export interface DraftRow {
|
|
527
|
+
draftId: string;
|
|
528
|
+
receivedAt: string;
|
|
529
|
+
source: string;
|
|
530
|
+
sourceRef: string;
|
|
531
|
+
jobType: string | null;
|
|
532
|
+
siteId: string | null;
|
|
533
|
+
customerId: string | null;
|
|
534
|
+
description: string | null;
|
|
535
|
+
verdict: string | null;
|
|
536
|
+
decidedAt: string | null;
|
|
537
|
+
decidedBy: string | null;
|
|
538
|
+
reason: string | null;
|
|
539
|
+
jobId: string | null;
|
|
540
|
+
}
|
|
541
|
+
|
|
542
|
+
const DRAFT_RETURN = `d.draftId AS draftId, d.receivedAt AS receivedAt, d.source AS source,
|
|
543
|
+
d.sourceRef AS sourceRef, d.jobType AS jobType, d.siteId AS siteId,
|
|
544
|
+
d.customerId AS customerId, d.description AS description,
|
|
545
|
+
d.verdict AS verdict, d.decidedAt AS decidedAt, d.decidedBy AS decidedBy,
|
|
546
|
+
d.reason AS reason, d.jobId AS jobId`;
|
|
547
|
+
|
|
548
|
+
function projectDraft(rec: { get(key: string): unknown }): DraftRow {
|
|
549
|
+
const s = (k: string): string | null => {
|
|
550
|
+
const v = rec.get(k);
|
|
551
|
+
return typeof v === "string" && v.length > 0 ? v : null;
|
|
552
|
+
};
|
|
553
|
+
return {
|
|
554
|
+
draftId: s("draftId") ?? "",
|
|
555
|
+
receivedAt: s("receivedAt") ?? "",
|
|
556
|
+
source: s("source") ?? "",
|
|
557
|
+
sourceRef: s("sourceRef") ?? "",
|
|
558
|
+
jobType: s("jobType"),
|
|
559
|
+
siteId: s("siteId"),
|
|
560
|
+
customerId: s("customerId"),
|
|
561
|
+
description: s("description"),
|
|
562
|
+
verdict: s("verdict"),
|
|
563
|
+
decidedAt: s("decidedAt"),
|
|
564
|
+
decidedBy: s("decidedBy"),
|
|
565
|
+
reason: s("reason"),
|
|
566
|
+
jobId: s("jobId"),
|
|
567
|
+
};
|
|
568
|
+
}
|
|
569
|
+
|
|
570
|
+
/** One draft by its id, or null. */
|
|
571
|
+
export async function readDraft(
|
|
572
|
+
session: Session,
|
|
573
|
+
accountId: string,
|
|
574
|
+
draftId: string,
|
|
575
|
+
): Promise<DraftRow | null> {
|
|
576
|
+
const r = await session.run(
|
|
577
|
+
`MATCH (d:IntakeDraft {accountId: $accountId, draftId: $draftId})
|
|
578
|
+
RETURN ${DRAFT_RETURN}`,
|
|
579
|
+
{ accountId, draftId },
|
|
580
|
+
);
|
|
581
|
+
return r.records.length === 0 ? null : projectDraft(r.records[0]);
|
|
582
|
+
}
|
|
583
|
+
|
|
584
|
+
/**
|
|
585
|
+
* The queue, oldest first. A null `verdict` argument means undecided only,
|
|
586
|
+
* which is what the queue is; a named verdict returns those already decided,
|
|
587
|
+
* because a rejection whose reason nobody can read is not a record of anything.
|
|
588
|
+
*
|
|
589
|
+
* Undecided is the ABSENCE of the property, never a written value, so the
|
|
590
|
+
* predicate is `IS NULL` rather than an equality against a sentinel.
|
|
591
|
+
*/
|
|
592
|
+
export async function readDrafts(
|
|
593
|
+
session: Session,
|
|
594
|
+
accountId: string,
|
|
595
|
+
verdict: string | null,
|
|
596
|
+
limit: number,
|
|
597
|
+
): Promise<DraftRow[]> {
|
|
598
|
+
const r = await session.run(
|
|
599
|
+
`MATCH (d:IntakeDraft {accountId: $accountId})
|
|
600
|
+
WHERE ($verdict IS NULL AND d.verdict IS NULL) OR d.verdict = $verdict
|
|
601
|
+
RETURN ${DRAFT_RETURN}
|
|
602
|
+
ORDER BY d.receivedAt ASC
|
|
603
|
+
LIMIT $limit`,
|
|
604
|
+
{ accountId, verdict, limit: Math.min(Math.max(limit, 1), 200) },
|
|
605
|
+
);
|
|
606
|
+
return r.records.map(projectDraft);
|
|
607
|
+
}
|
|
608
|
+
|
|
321
609
|
/** Every visit at one site, newest first, with its job. */
|
|
322
610
|
export async function readSiteHistory(
|
|
323
611
|
session: Session,
|
|
@@ -328,39 +616,31 @@ export async function readSiteHistory(
|
|
|
328
616
|
const r = await session.run(
|
|
329
617
|
`MATCH (j:Job {accountId: $accountId})-[:AT_SITE]->(:Site {accountId: $accountId, siteId: $siteId})
|
|
330
618
|
MATCH (j)-[:HAS_VISIT]->(v:Visit)
|
|
331
|
-
|
|
619
|
+
${ATTENDANCE_MATCH}
|
|
620
|
+
WITH j, v, ${ATTENDANCE_COLLECT}
|
|
332
621
|
RETURN j.jobId AS jobId, j.status AS jobStatus, v.visitId AS visitId,
|
|
333
622
|
v.status AS status, v.startDate AS startDate, v.endDate AS endDate,
|
|
334
|
-
v.purpose AS purpose,
|
|
623
|
+
v.purpose AS purpose, attendances,
|
|
335
624
|
coalesce(v.notes, []) AS notes,
|
|
336
|
-
size(coalesce(v.media, [])) AS mediaCount
|
|
337
|
-
v.arrivedPressedAt AS arrivedPressedAt,
|
|
338
|
-
v.arrivedObservedAt AS arrivedObservedAt,
|
|
339
|
-
v.arrivedObservedDistanceM AS arrivedObservedDistanceM
|
|
625
|
+
size(coalesce(v.media, [])) AS mediaCount
|
|
340
626
|
ORDER BY v.startDate DESC
|
|
341
627
|
LIMIT $limit`,
|
|
342
628
|
{ accountId, siteId, limit: Math.min(Math.max(limit, 1), 200) },
|
|
343
629
|
);
|
|
344
|
-
return r.records.map((g) => {
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
mediaCount: num(g.get("mediaCount") ?? 0),
|
|
359
|
-
arrivedPressedAt: str(g.get("arrivedPressedAt")),
|
|
360
|
-
arrivedObservedAt: str(g.get("arrivedObservedAt")),
|
|
361
|
-
arrivedObservedDistanceM: dist == null ? null : num(dist),
|
|
362
|
-
};
|
|
363
|
-
});
|
|
630
|
+
return r.records.map((g) => ({
|
|
631
|
+
visitId: String(g.get("visitId")),
|
|
632
|
+
jobId: String(g.get("jobId")),
|
|
633
|
+
jobStatus: String(g.get("jobStatus")),
|
|
634
|
+
status: String(g.get("status")),
|
|
635
|
+
startDate: str(g.get("startDate")),
|
|
636
|
+
endDate: str(g.get("endDate")),
|
|
637
|
+
purpose: str(g.get("purpose")),
|
|
638
|
+
notes: (g.get("notes") as string[]) ?? [],
|
|
639
|
+
// A count, not the references. A worker at a door needs to know whether
|
|
640
|
+
// photographs exist before deciding to load them on a bad signal.
|
|
641
|
+
mediaCount: num(g.get("mediaCount") ?? 0),
|
|
642
|
+
...projectAttendances(g),
|
|
643
|
+
}));
|
|
364
644
|
}
|
|
365
645
|
|
|
366
646
|
/** Every visit starting inside `[from, to)`. */
|
|
@@ -375,32 +655,24 @@ export async function readVisitsInWindow(
|
|
|
375
655
|
WHERE v.startDate >= $from AND v.startDate < $to
|
|
376
656
|
OPTIONAL MATCH (j:Job)-[:HAS_VISIT]->(v)
|
|
377
657
|
OPTIONAL MATCH (j)-[:AT_SITE]->(s:Site)
|
|
378
|
-
|
|
658
|
+
${ATTENDANCE_MATCH}
|
|
659
|
+
WITH v, j, s, ${ATTENDANCE_COLLECT}
|
|
379
660
|
RETURN v.visitId AS visitId, j.jobId AS jobId, v.status AS status,
|
|
380
661
|
v.startDate AS startDate, v.endDate AS endDate, v.purpose AS purpose,
|
|
381
|
-
|
|
382
|
-
v.arrivedPressedAt AS arrivedPressedAt,
|
|
383
|
-
v.arrivedObservedAt AS arrivedObservedAt,
|
|
384
|
-
v.arrivedObservedDistanceM AS arrivedObservedDistanceM
|
|
662
|
+
attendances, s.name AS siteName
|
|
385
663
|
ORDER BY v.startDate ASC`,
|
|
386
664
|
{ accountId, from, to },
|
|
387
665
|
);
|
|
388
|
-
return r.records.map((g) => {
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
siteName: str(g.get("siteName")),
|
|
399
|
-
arrivedPressedAt: str(g.get("arrivedPressedAt")),
|
|
400
|
-
arrivedObservedAt: str(g.get("arrivedObservedAt")),
|
|
401
|
-
arrivedObservedDistanceM: dist == null ? null : num(dist),
|
|
402
|
-
};
|
|
403
|
-
});
|
|
666
|
+
return r.records.map((g) => ({
|
|
667
|
+
visitId: String(g.get("visitId")),
|
|
668
|
+
jobId: str(g.get("jobId")),
|
|
669
|
+
status: String(g.get("status")),
|
|
670
|
+
startDate: str(g.get("startDate")),
|
|
671
|
+
endDate: str(g.get("endDate")),
|
|
672
|
+
purpose: str(g.get("purpose")),
|
|
673
|
+
siteName: str(g.get("siteName")),
|
|
674
|
+
...projectAttendances(g),
|
|
675
|
+
}));
|
|
404
676
|
}
|
|
405
677
|
|
|
406
678
|
/**
|
|
@@ -435,15 +707,13 @@ export async function readDay(
|
|
|
435
707
|
OPTIONAL MATCH (j:Job)-[:HAS_VISIT]->(v)
|
|
436
708
|
OPTIONAL MATCH (j)-[:AT_SITE]->(s:Site)
|
|
437
709
|
OPTIONAL MATCH (j)-[:FOR_CUSTOMER]->(c:Customer)
|
|
438
|
-
|
|
710
|
+
${ATTENDANCE_MATCH}
|
|
711
|
+
WITH v, j, s, c, ${ATTENDANCE_COLLECT}
|
|
439
712
|
RETURN v.visitId AS visitId, j.jobId AS jobId, v.status AS status,
|
|
440
713
|
v.startDate AS startDate, v.endDate AS endDate, v.purpose AS purpose,
|
|
441
|
-
|
|
714
|
+
attendances, s.name AS siteName,
|
|
442
715
|
c.customerId AS customerId, c.name AS customerName,
|
|
443
|
-
j.jobType AS jobType
|
|
444
|
-
v.arrivedPressedAt AS arrivedPressedAt,
|
|
445
|
-
v.arrivedObservedAt AS arrivedObservedAt,
|
|
446
|
-
v.arrivedObservedDistanceM AS arrivedObservedDistanceM
|
|
716
|
+
j.jobType AS jobType
|
|
447
717
|
ORDER BY v.startDate ASC`,
|
|
448
718
|
{ accountId, from: fromUtc, to: toUtc },
|
|
449
719
|
);
|
|
@@ -452,17 +722,131 @@ export async function readDay(
|
|
|
452
722
|
}
|
|
453
723
|
|
|
454
724
|
/**
|
|
455
|
-
*
|
|
725
|
+
* The columns a field card needs beyond a plain visit row, as one clause.
|
|
726
|
+
*
|
|
727
|
+
* Written once because two reads return this shape — the day list and the
|
|
728
|
+
* single-visit sheet read — and a card that differed between the two would be
|
|
729
|
+
* a worker seeing a telephone on one screen and not the other.
|
|
730
|
+
*
|
|
731
|
+
* It returns `attendances` and NO arrival columns, because the two reads
|
|
732
|
+
* legitimately differ on whose arrival a card shows: `readWorkerDay` shows the
|
|
733
|
+
* caller their own, and `readFieldVisit`, which names no worker, falls back to
|
|
734
|
+
* the sole-attendee rule. Each adds its own arrival clause; the columns they
|
|
735
|
+
* share stay here.
|
|
736
|
+
*/
|
|
737
|
+
const FIELD_RETURN = `v.visitId AS visitId, j.jobId AS jobId, v.status AS status,
|
|
738
|
+
v.startDate AS startDate, v.endDate AS endDate, v.purpose AS purpose,
|
|
739
|
+
attendances,
|
|
740
|
+
s.siteId AS siteId, s.name AS siteName,
|
|
741
|
+
c.name AS customerName,
|
|
742
|
+
ct.name AS contactName, ct.telephone AS contactTelephone,
|
|
743
|
+
pa IS NOT NULL AS addressed,
|
|
744
|
+
pa.streetAddress AS streetAddress, pa.addressLocality AS addressLocality,
|
|
745
|
+
pa.postalCode AS postalCode`;
|
|
746
|
+
|
|
747
|
+
/**
|
|
748
|
+
* The optional neighbourhood a visit hangs in.
|
|
749
|
+
*
|
|
750
|
+
* Every hop is optional: a visit allocated before its job was linked must stay
|
|
751
|
+
* in the day rather than drop out of it.
|
|
752
|
+
*
|
|
753
|
+
* **The `WITH` is what stops a visit appearing twice.** An `OPTIONAL MATCH`
|
|
754
|
+
* that finds two nodes returns two rows, so a site holding two `AT_ADDRESS`
|
|
755
|
+
* edges — or a customer holding two contacts — would put the same visit on the
|
|
756
|
+
* worker's list once per match, each copy showing a different address. That
|
|
757
|
+
* state is reachable: `memory-write`'s edge check is warn-only, so nothing
|
|
758
|
+
* blocks a second edge being written directly.
|
|
759
|
+
*
|
|
760
|
+
* Which of two the collapse keeps is arbitrary, and it is not this query's job
|
|
761
|
+
* to choose. `dispatch-site-upsert` is what guarantees a site has one address:
|
|
762
|
+
* it clears the previous edge before writing the next.
|
|
763
|
+
*
|
|
764
|
+
* **Two aggregating `WITH`s, not one.** The attendance collect is a second
|
|
765
|
+
* multiplication on the same rows, and folding both into one `WITH` would make
|
|
766
|
+
* each address appear once per attendance and each attendance once per address.
|
|
767
|
+
* Collapsing them in turn keeps every grouping key a plain node.
|
|
768
|
+
*
|
|
769
|
+
* `carry` is the extra binding a caller needs kept alive across both — `, mine`
|
|
770
|
+
* for the worker day, empty for the sheet. Anything not named in a `WITH` is
|
|
771
|
+
* dropped, so a caller that binds a variable before this clause and reads it
|
|
772
|
+
* after must pass it here.
|
|
773
|
+
*/
|
|
774
|
+
const fieldOptionalMatches = (carry: string) =>
|
|
775
|
+
`OPTIONAL MATCH (j:Job {accountId: $accountId})-[:HAS_VISIT]->(v)
|
|
776
|
+
OPTIONAL MATCH (j)-[:AT_SITE]->(s:Site {accountId: $accountId})
|
|
777
|
+
OPTIONAL MATCH (j)-[:FOR_CUSTOMER]->(c:Customer {accountId: $accountId})
|
|
778
|
+
OPTIONAL MATCH (s)-[:AT_ADDRESS]->(pa0:PostalAddress)
|
|
779
|
+
OPTIONAL MATCH (ct0:Contact {accountId: $accountId})-[:CONTACT_FOR]->(c)
|
|
780
|
+
WITH v${carry}, j, s, c,
|
|
781
|
+
head(collect(DISTINCT pa0)) AS pa,
|
|
782
|
+
head(collect(DISTINCT ct0)) AS ct
|
|
783
|
+
${ATTENDANCE_MATCH}
|
|
784
|
+
WITH v${carry}, j, s, c, pa, ct, ${ATTENDANCE_COLLECT}`;
|
|
785
|
+
|
|
786
|
+
/**
|
|
787
|
+
* One field card from one record.
|
|
788
|
+
*
|
|
789
|
+
* `address` is set when the `AT_ADDRESS` edge resolved and omitted when it did
|
|
790
|
+
* not. The **edge** decides the key, read off its own `addressed` column rather
|
|
791
|
+
* than inferred from the three property columns: a PostalAddress missing its
|
|
792
|
+
* locality is still somewhere a worker can drive to, and inferring absence from
|
|
793
|
+
* empty properties would report the site unaddressed while the census, which
|
|
794
|
+
* counts the edge, called it addressed.
|
|
795
|
+
*
|
|
796
|
+
* `own` is the caller's own attendance, passed by `readWorkerDay` and omitted by
|
|
797
|
+
* the sheet read. With it, the four worker fields are that worker's; without it
|
|
798
|
+
* they fall back to the sole-attendee rule and go null on a shared visit. The
|
|
799
|
+
* distinction is load-bearing: a sheet that showed no arrival to the worker who
|
|
800
|
+
* pressed it would read as a lost press (Task 2512).
|
|
801
|
+
*/
|
|
802
|
+
export function projectFieldVisit(
|
|
803
|
+
g: { get(key: string): unknown },
|
|
804
|
+
own?: Attendance,
|
|
805
|
+
): FieldVisit {
|
|
806
|
+
const addressed = g.get("addressed") === true;
|
|
807
|
+
const att = projectAttendances(g);
|
|
808
|
+
const worker = own ?? {
|
|
809
|
+
workerId: att.workerId,
|
|
810
|
+
arrivedPressedAt: att.arrivedPressedAt,
|
|
811
|
+
arrivedObservedAt: att.arrivedObservedAt,
|
|
812
|
+
arrivedObservedDistanceM: att.arrivedObservedDistanceM,
|
|
813
|
+
};
|
|
814
|
+
return {
|
|
815
|
+
visitId: String(g.get("visitId")),
|
|
816
|
+
jobId: str(g.get("jobId")),
|
|
817
|
+
status: String(g.get("status")),
|
|
818
|
+
startDate: str(g.get("startDate")),
|
|
819
|
+
endDate: str(g.get("endDate")),
|
|
820
|
+
purpose: str(g.get("purpose")),
|
|
821
|
+
attendances: att.attendances,
|
|
822
|
+
workerId: worker.workerId,
|
|
823
|
+
arrivedPressedAt: worker.arrivedPressedAt,
|
|
824
|
+
arrivedObservedAt: worker.arrivedObservedAt,
|
|
825
|
+
arrivedObservedDistanceM: worker.arrivedObservedDistanceM,
|
|
826
|
+
siteId: str(g.get("siteId")),
|
|
827
|
+
siteName: str(g.get("siteName")),
|
|
828
|
+
customerName: str(g.get("customerName")),
|
|
829
|
+
contactName: str(g.get("contactName")),
|
|
830
|
+
contactTelephone: str(g.get("contactTelephone")),
|
|
831
|
+
...(addressed
|
|
832
|
+
? {
|
|
833
|
+
address: {
|
|
834
|
+
streetAddress: str(g.get("streetAddress")),
|
|
835
|
+
addressLocality: str(g.get("addressLocality")),
|
|
836
|
+
postalCode: str(g.get("postalCode")),
|
|
837
|
+
},
|
|
838
|
+
}
|
|
839
|
+
: {}),
|
|
840
|
+
};
|
|
841
|
+
}
|
|
842
|
+
|
|
843
|
+
/**
|
|
844
|
+
* One worker's visits in a window, with the contact detail and the street a
|
|
845
|
+
* doorstep needs.
|
|
456
846
|
*
|
|
457
847
|
* A separate function rather than a widening of `readDay`, because the planner
|
|
458
848
|
* draws a week of cards for the whole roster and needs a customer's telephone
|
|
459
849
|
* on none of them.
|
|
460
|
-
*
|
|
461
|
-
* **No address and no postcode.** `schema-dispatch.md` declares neither on
|
|
462
|
-
* `:Site`, and the only `PostalAddress` edge in the whole ontology is
|
|
463
|
-
* logistics' `(:Stop)-[:AT_ADDRESS]->(:PostalAddress)`. Returning them as
|
|
464
|
-
* always-null columns would read to a worker as "this site has no address"
|
|
465
|
-
* rather than "we do not store one". Task 2514 adds the edge.
|
|
466
850
|
*/
|
|
467
851
|
export async function readWorkerDay(
|
|
468
852
|
accountId: string,
|
|
@@ -472,49 +856,68 @@ export async function readWorkerDay(
|
|
|
472
856
|
): Promise<FieldVisit[]> {
|
|
473
857
|
return withSession(async (session) => {
|
|
474
858
|
const r = await session.run(
|
|
475
|
-
|
|
859
|
+
// Anchored on the CALLER'S OWN attendance (`mine`), then the whole
|
|
860
|
+
// visit's attendances collected beside it. The worker's arrival times are
|
|
861
|
+
// read off `mine` rather than through the sole-attendee rule: on a visit
|
|
862
|
+
// they share with somebody, that rule returns null, and a field sheet
|
|
863
|
+
// showing no arrival to the worker who pressed it reads as a lost press.
|
|
864
|
+
`MATCH (v:Visit {accountId: $accountId})-[:HAS_ATTENDANCE]->(mine:Attendance)-[:BY_ENGINEER]->(:Engineer {accountId: $accountId, engineerId: $workerId})
|
|
476
865
|
WHERE v.startDate >= $from AND v.startDate < $to
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
v.startDate AS startDate, v.endDate AS endDate, v.purpose AS purpose,
|
|
483
|
-
e.engineerId AS workerId,
|
|
484
|
-
v.arrivedPressedAt AS arrivedPressedAt,
|
|
485
|
-
v.arrivedObservedAt AS arrivedObservedAt,
|
|
486
|
-
v.arrivedObservedDistanceM AS arrivedObservedDistanceM,
|
|
487
|
-
s.siteId AS siteId, s.name AS siteName,
|
|
488
|
-
c.name AS customerName,
|
|
489
|
-
ct.name AS contactName, ct.telephone AS contactTelephone
|
|
866
|
+
${fieldOptionalMatches(", mine")}
|
|
867
|
+
RETURN ${FIELD_RETURN},
|
|
868
|
+
mine.arrivedPressedAt AS ownArrivedPressedAt,
|
|
869
|
+
mine.arrivedObservedAt AS ownArrivedObservedAt,
|
|
870
|
+
mine.arrivedObservedDistanceM AS ownArrivedObservedDistanceM
|
|
490
871
|
ORDER BY v.startDate ASC`,
|
|
491
872
|
{ accountId, workerId, from: fromUtc, to: toUtc },
|
|
492
873
|
);
|
|
493
874
|
// Sorted in the query, not on the client: an empty result and an unsorted
|
|
494
875
|
// one must not be able to look alike.
|
|
495
876
|
return r.records.map((g) => {
|
|
496
|
-
const dist = g.get("
|
|
497
|
-
return {
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
startDate: str(g.get("startDate")),
|
|
502
|
-
endDate: str(g.get("endDate")),
|
|
503
|
-
purpose: str(g.get("purpose")),
|
|
504
|
-
workerId: str(g.get("workerId")),
|
|
505
|
-
arrivedPressedAt: str(g.get("arrivedPressedAt")),
|
|
506
|
-
arrivedObservedAt: str(g.get("arrivedObservedAt")),
|
|
877
|
+
const dist = g.get("ownArrivedObservedDistanceM");
|
|
878
|
+
return projectFieldVisit(g, {
|
|
879
|
+
workerId,
|
|
880
|
+
arrivedPressedAt: str(g.get("ownArrivedPressedAt")),
|
|
881
|
+
arrivedObservedAt: str(g.get("ownArrivedObservedAt")),
|
|
507
882
|
arrivedObservedDistanceM: dist == null ? null : num(dist),
|
|
508
|
-
|
|
509
|
-
siteName: str(g.get("siteName")),
|
|
510
|
-
customerName: str(g.get("customerName")),
|
|
511
|
-
contactName: str(g.get("contactName")),
|
|
512
|
-
contactTelephone: str(g.get("contactTelephone")),
|
|
513
|
-
};
|
|
883
|
+
});
|
|
514
884
|
});
|
|
515
885
|
});
|
|
516
886
|
}
|
|
517
887
|
|
|
888
|
+
/**
|
|
889
|
+
* One visit as a field card, for the job sheet.
|
|
890
|
+
*
|
|
891
|
+
* The sheet used to serve a plain `VisitRow`, which carries no site name, no
|
|
892
|
+
* customer and no contact, so every sheet rendered "Site not named" with no
|
|
893
|
+
* telephone on it. This is the same projection the day list uses, so the two
|
|
894
|
+
* screens cannot disagree.
|
|
895
|
+
*
|
|
896
|
+
* It takes a session because the sheet route already holds one, and it applies
|
|
897
|
+
* no worker filter: the route does its own ownership check, and a read that
|
|
898
|
+
* also filtered would turn another worker's visit into a 404 where the route
|
|
899
|
+
* means to return a 403.
|
|
900
|
+
*/
|
|
901
|
+
export async function readFieldVisit(
|
|
902
|
+
session: Session,
|
|
903
|
+
accountId: string,
|
|
904
|
+
visitId: string,
|
|
905
|
+
): Promise<FieldVisit | null> {
|
|
906
|
+
const r = await session.run(
|
|
907
|
+
// No `mine` to anchor on, because the sheet applies no worker filter, so the
|
|
908
|
+
// four worker fields fall to the sole-attendee rule and go null on a shared
|
|
909
|
+
// visit. `attendances` carries everyone either way, which is what the sheet
|
|
910
|
+
// renders (Task 2512).
|
|
911
|
+
`MATCH (v:Visit {accountId: $accountId, visitId: $visitId})
|
|
912
|
+
${fieldOptionalMatches("")}
|
|
913
|
+
RETURN ${FIELD_RETURN}
|
|
914
|
+
LIMIT 1`,
|
|
915
|
+
{ accountId, visitId },
|
|
916
|
+
);
|
|
917
|
+
if (r.records.length === 0) return null;
|
|
918
|
+
return projectFieldVisit(r.records[0]);
|
|
919
|
+
}
|
|
920
|
+
|
|
518
921
|
/** The job list, owning its own session. */
|
|
519
922
|
export async function readJobList(
|
|
520
923
|
accountId: string,
|