WorkestraDocs
ModulesField Service

Field Service Settings

Module configuration — most knobs are API-only today; the settings UI ships in the next release.

The FSM settings UI is queued for the next release (Phase 4.8 — see the implementation plan). Today the page at /fsm/settings is a stub that lists what's configurable via the v1 API. This doc describes what's actually configurable now, and what's coming.

Configurable today (via v1 API)

SettingAPI surfaceNotes
Service-type → required-skill mappingWorkspace-scoped config — pass to dispatchOptimalTech({ service_type_skill_map }) per call today; persistent storage ships with the UIDrives the 0.4-weight skill match in AI dispatch
SLA defaults per service contractSet sla_response_minutes + sla_resolution_minutes on the contract row itselfInherited onto any work order linked to the contract
Webhook subscribersPOST /api/v1/fsm/webhooks — pattern from lib/services/webhook-delivery-serviceSubstrate live; delivery cron is queued for Phase 4.10
Intake email aliasservice@… is built-in today; per-workspace override + service+slug@… patterns work out of the boxSee Email Intake
Numbering prefixesREQ, EST, WO, SC are hard-coded today; per-workspace overrides ship with the UIAll numbers carry the year (e.g. WO-2026-0001)

Cron schedules

Two daily Vercel crons run today — no UI to change them (Hobby tier is daily-only):

CronScheduleWhat it does
fsm-service-contract-due-renewals13:30 UTCGenerates fsm_service_contract_visits rows for active contracts past their next due date
fsm-sla-breach-check14:30 UTCLogs work orders past their response or resolution SLA deadline

What ships with the Settings UI (Phase 4.8)

The settings page will live under /fsm/settings/* with the ModuleSettingsLayout wrapper used by every other module. Planned sub-pages:

PagePurpose
GeneralDefault currency, numbering prefixes, default SLA minutes
IntakeConfigure the intake email alias, default routing rule for non-email channels
TemplatesEstimate templates, service-report header/footer, signature legal disclaimer
DispatchDefault dispatcher view (board / calendar / map), working-hours overlay, map tile provider, GPS opt-in default
Service typesService-type names + required-skill mapping
SkillsView the workspace skill taxonomy (read-only — actual CRUD lives in the People / Planning module today)
Service areasMove from /fsm/service-areas (current standalone page) into the settings tree
WebhooksSubscribe/unsubscribe webhook URLs per FSM event (appointment.scheduled, appointment.completed, estimate.approved, service_report.signed, etc.)
NumberingCustomize REQ / EST / WO / SC prefixes
NotificationsPer-event templates (in-app, email, Slack, Teams) — wires to notificationService (Phase 4.10)
PermissionsTerritory-based permissions: assign users to service areas with a role (dispatcher / technician / viewer) — Phase 4.10

What ships with the Finance bridge (Phase 4.8)

Auto-invoice on completion will live in _bridges/finance_fsm and add:

  • A fsm_settings.auto_invoice_on_completion toggle
  • A fsm_work_orders.invoice_id back-link column
  • A service createInvoiceFromWorkOrder(workOrderId) that materializes a draft finance_invoices row + lines from fsm_work_order_lines + fsm_parts_pulls
  • Auto-trigger: when a WO transitions to completed, if the toggle is on, enqueue an invoice draft for review

The bridge folder exists today (_bridges/finance_fsm/) but only wraps the shared PDF renderer — the invoice path is the next addition.

Maintenance plan templates (Phase 4.10)

Today's fsm_service_contracts cadence generates planned visits. Phase 4.10 adds:

  • Templates — pre-fill new visits with line items, parts list, required skills, duration
  • RRULE support — replaces the enum cadence with RFC-5545 recurrence (every 6 weeks, first Tuesday quarterly, etc.)
  • Skip / advance actions per visit

API access today

Everything the future UI will manage is reachable today through /api/v1/fsm/.... The v1 routes use getWorkspaceId middleware — authenticate with your workspace API key, then PATCH the relevant entity. Auth pattern documented under API.