Reference
A structured index of the module: screens and routes, the lifecycle statuses, the fs_* data areas, cron jobs, widgets, the profile tab, audit events and API endpoints. Use it to answer "what screen, what status, what table, what endpoint."
Screens and Routes
The sidebar group "Field Service" links to a dashboard and a submenu of eleven rows. Four of those rows are tabbed pages that gather several screens together — the tab is fetched the first time you open it, stays loaded afterwards, and each page reopens on the tab you last used. Secondary screens (live map, service history, warranties, skills, crews, certifications, availability, time & expenses, payments) are reached as tabs or links inside their parent.
Each screen below keeps its own address: opening it directly lands on its page with that tab already selected, so existing links and bookmarks are unaffected. The permission shown is the one that decides whether you see that tab; the four merged pages themselves require only field_service.
| Screen | Page (tab of) | Route | Permission |
|---|---|---|---|
| Dashboard | — | field_service | field_service |
| Service Desk | — | field_service/service_desk | field_service |
| Service Requests | Service Desk | field_service/requests | field_service_request |
| Work Orders | Service Desk | field_service/work_orders | field_service_workorder |
| Service Locations | Service Desk | field_service/customer_sites | field_service |
| Dispatch Board | — | field_service/scheduling | field_service |
| Dispatch Board (Pro) | Dispatch Board | field_service/dispatch | field_service_dispatch |
| Calendar | Dispatch Board | field_service/calendar | field_service_workorder |
| Customer Assets | — | field_service/customer_assets | field_service |
| Maintenance Plans | — | field_service/maintenance | field_service_maintenance |
| Agreements | — | field_service/agreements | field_service |
| Service Contracts (Pro) | Agreements | field_service/contracts | field_service_contract |
| SLA Policies (Pro) | Agreements | field_service/sla | field_service_sla |
| Technicians | — | field_service/technicians | field_service_technician |
| Parts | — | field_service/parts | field_service_inventory |
| Quotes & Billing | — | field_service/quotes_billing | field_service |
| Quotations | Quotes & Billing | field_service/quotes | field_service_quote |
| Billing Queue | Quotes & Billing | field_service/billing | field_service_billing |
| Reports | — | field_service/reports | field_service |
| Settings | — | field_service_settings | field_service_settings |
| AI Assist | field_service/ai | field_service_ai | |
| Technician app (PWA) | field_service/app | field_service_technician | |
| Customer portal (public) | field-service | Portal token |
Lifecycle Statuses
System statuses are fixed code constants (not tenant-editable); tenants get display labels via language keys. Three aggregates each have their own status graph, plus an informational commercial status.
Work order
Initial draft; terminal closed, cancelled.
draft→ready_for_schedulingready_for_scheduling→scheduledscheduled→dispatcheddispatched→in_progressin_progress→paused/waiting/technical_completetechnical_complete→under_reviewunder_review→approvedapproved→billing_ready→invoiced→closed
Service request
Initial new; terminal closed, cancelled, rejected, converted, resolved_remote.
new→triagetriage→awaiting_customer/awaiting_quote/resolved_remote/converted/rejectedawaiting_quote→convertedconverted/resolved_remote→closed
Assignment / booking
Initial proposed; terminal completed, cancelled, declined.
proposed→assigned→notifiednotified→accepted/declinedaccepted→traveling→arrived→workingworking→on_hold/completed
Commercial (informational)
Not a strict graph; describes the money side.
not_applicable, estimate_required, quote_draft, quote_sent, quote_approved, quote_rejected, billing_review, invoice_created, partially_paid, paid, voided.
Data Areas
Field Service stores everything in its own fs_* tables (60 total). Customers, stock and invoices stay in their owning modules — Field Service references them. Records are soft-deleted (recoverable), and dates are stored in UTC and shown in local time.
| Area | Represents | Key tables |
|---|---|---|
| Configuration | Settings and number sequences | fs_settings, fs_number_sequences |
| Service master | Skills, certifications, zones, templates | fs_skills, fs_certifications, fs_service_zones, fs_service_templates |
| Customers & assets | Sites, contacts, serviceable assets, warranties, meters | fs_customer_sites, fs_customer_assets, fs_warranties, fs_asset_meter_readings |
| Requests | Service requests and their events | fs_service_requests, fs_service_request_events |
| Work orders | Jobs plus tasks, notes, evidence, parts, services, time, expenses, approvals | fs_work_orders, fs_work_order_tasks, fs_work_order_evidence, fs_work_order_parts, fs_work_order_time_entries |
| Workforce | Technician profiles, skills, crews, availability, routes, location | fs_technician_profiles, fs_crews, fs_availability_blocks, fs_route_runs, fs_location_events |
| Planning | Maintenance, contracts, entitlements, SLAs | fs_maintenance_plans, fs_service_contracts, fs_sla_policies, fs_sla_instances |
| Commerce | Quotes, billing candidates, payment links | fs_quotes, fs_quote_versions, fs_billing_candidates, fs_payment_links |
| Portal & reports | Form bindings, service reports, feedback, portal tokens | fs_service_reports, fs_customer_feedback, fs_portal_tokens |
| Mobile sync | Devices and the offline sync log | fs_devices, fs_sync_batches, fs_sync_operations |
| AI assist | Interaction and usage logs (tenant-only) | fs_ai_interactions, fs_ai_usage |
Cron Jobs
| Slug | Schedule (cron) | Purpose |
|---|---|---|
fs_generate_maintenance | 30 1 * * * | Generate due maintenance occurrences and their work orders |
fs_evaluate_sla | */15 * * * * | Mark SLA instances at-risk/breached; notify on breach |
fs_appointment_reminders | 5 * * * * | Remind for jobs starting within the window |
fs_expire_portal_tokens | 20 2 * * * | Revoke expired portal access tokens |
fs_stale_sync | 0 * * * * | Flag devices that have not synced within the threshold |
Dashboard Widgets and Profile Tab
Widgets
fs_my_jobs— my assigned jobs (staff, on by default; needsfield_service_workorder).fs_sla_risk— jobs at SLA risk (needsfield_service_dispatch).fs_unbilled— approved-but-unbilled work (needsfield_service_billing).
Profile tab
A "My Field Jobs" tab is injected into each Team Member profile (field_service/work_orders/tech_tab/{user_id}) when the module is active and the viewer holds field_service_technician.
Client / Integration API
Base /api/v1/field-service. Scopes: field_service:read (GET), field_service:write (POST).
| Method | Path | Purpose |
|---|---|---|
| GET | /ping | Health check |
| GET | /work-orders | List work orders |
| GET | /work-orders/{id} | Get a work order |
| POST | /work-orders | Create a work order |
| POST | /work-orders/{id}/transition | Move a work order to a new status |
| GET | /service-requests | List service requests |
| POST | /service-requests | Create a request (IoT / webhook / partner intake) |
| GET | /customer-assets | List customer assets |
| GET | /customer-assets/{id} | Get a customer asset |
| GET | /dispatch-board | Dispatch-board snapshot |
| GET | /resources/availability | Resource availability |
End-User API (Technician / Offline PWA)
Base /v1/api/field-service. Every action is scoped to the signed-in user and requires module_field_service.
| Method | Path | Purpose |
|---|---|---|
| GET | /my/jobs | The technician's job list |
| GET | /jobs/{id} | Job detail |
| POST | /mobile/register | Register a device |
| POST | /mobile/heartbeat | Device heartbeat |
| POST | /mobile/deregister | Deregister a device |
| GET | /mobile/bootstrap | Download the offline data package |
| GET | /mobile/pull | Incremental pull of changes |
| POST | /mobile/push | Push captured changes (idempotent by operation id) |
| POST | /mobile/attachments/initiate | Start a chunked attachment upload |
| PUT | /mobile/attachments/{upload_id}/parts/{n} | Upload one part |
| POST | /mobile/attachments/{upload_id}/complete | Finalize the attachment |
Audit Event Keys
Registered action:component events written to the tenant activity log:
| Component | Events (severity) |
|---|---|
| Service request | created, updated, deleted (warn), triaged, converted |
| Work order | created, updated, deleted (warn), status_change, released, scheduled, dispatched, approved, reopened (warn), cancelled (warn) |
| Assignment | created, reassigned (warn) |
| Quote | created, sent, approved, discount_override (warn) |
| Billing / payment | created/invoiced candidate, received, voided (warn) |
| Parts | consumed, reversed (warn) |
| Assets / planning | created/updated asset, generated maintenance, breached SLA (critical) |
| Administration | update settings (warn), export audit (warn) |
| AI assist | request, approve (warn), apply (warn), disposition, dpa (warn) |