Service
This page is generated from the in-app guide content — edit
featureToggleGuidesand runpnpm gen:feature-toggle-docs.
Advanced scheduling (dispatch board)
Full-screen dispatch board, capacity from shifts and leave, and an optimizer that proposes several plans.
| Code | Default | Switch at | Turn on first |
|---|---|---|---|
service.advanced_scheduling | Off | /field-service/settings | — |
How it works
Parent switch of the dispatch board: every scheduling endpoint (board, optimizer, apply plan, job scheduling attributes) checks it first.
When ON
The full-screen dispatch board, capacity from shifts and leave, and the plan optimizer are available.
When OFF
The board link disappears and scheduling endpoints answer ‘feature disabled’.
Caveats
Scheduling a job through the normal job form still works. Existing bookings stay.
Assign jobs to a team
Allow dispatching a job to a whole team instead of one technician.
| Code | Default | Switch at | Turn on first |
|---|---|---|---|
service.team_assignment | Off | /field-service/settings | Team management (service.team_management) |
How it works
Gates team dispatch on jobs: assigning a team, and maintenance plans applying their team to the jobs they generate. The AI job assistant proposes team dispatch only when on.
Conditions for it to take effect
Needs ‘Team management’ on; with the parent off this switch reads as off.
When ON
The Assign team section on a job appears; a job can be dispatched to a whole team; plan-generated jobs get the plan’s team.
When OFF
Teams cannot be newly assigned; plan-generated jobs are created without the team (logged).
Caveats
Teams already on jobs stay and can still be removed.
Auto-escalate on SLA Breach
Automatically escalate tickets that breach their SLA
| Code | Default | Switch at | Turn on first |
|---|---|---|---|
service.auto_escalation_on_breach | Off | /service-management/settings | — |
How it works
A job every 15 minutes, per company, finds open Service Management tickets past their resolution deadline that were not yet auto-escalated, raises them one support tier and notifies the assignee (or creator).
When ON
Breached tickets climb a tier automatically, once each.
When OFF
No automatic escalation; escalate by hand.
Caveats
Needs deadlines, so ‘SLA Enforcement’ must be on. Helpdesk tickets use the SLA setting ‘Escalate on breach’ instead.
Auto-invoice Time & Material
Allows automatic staging of approved billable hours into the billing queue (no automatic job uses it yet). Manual “Stage for billing” always works; invoices are created from the queue.
| Code | Default | Switch at | Turn on first |
|---|---|---|---|
service.auto_invoice_time_and_material | Off | /service-management/settings | — |
How it works
Gate of the automatic path that stages approved billable hours into the billing queue.
When ON
The automatic staging path is allowed (no scheduled job calls it yet).
When OFF
The automatic path is refused.
Caveats
Manual ‘Stage for billing’ always works. Nothing is invoiced automatically — invoices are generated from the billing queue.
Auto-Renew Service Contracts
Active service contracts are automatically renewed for the same period when they reach their expiry date
| Code | Default | Switch at | Turn on first |
|---|---|---|---|
service.auto_renew_service_contract | Off | /service-management/settings | — |
How it works
The daily contract job renews active service contracts that have ‘auto-renew’ ticked on the contract when they reach their end date.
When ON
Those contracts are extended for the same period and the owner is notified.
When OFF
No contract renews automatically, even with ‘auto-renew’ ticked.
Caveats
Contracts without the per-contract ‘auto-renew’ tick are never renewed by this. New tenants start with this on.
Company assets go through work orders
External Field Service jobs and maintenance plans cannot target company-owned assets — use an internal job or an asset work order
| Code | Default | Switch at | Turn on first |
|---|---|---|---|
service.enforce_asset_ownership | Off | /field-service/settings | — |
How it works
Checked by the job purpose guard on create/update, by Field Service import and by maintenance plans.
When ON
External jobs and maintenance plans cannot target company-owned assets.
When OFF
Not checked.
Caveats
Use an internal job or an asset work order for company assets.
Customer Portal Visibility
Show tickets to customers in the self-service portal
| Code | Default | Switch at | Turn on first |
|---|---|---|---|
service.customer_portal_visibility | Off | /service-management/settings | — |
How it works
Gates the Service Management ticket part of the customer portal and the portal link in ticket e-mails.
When ON
Customers see and reply to their tickets in the portal; ticket e-mails carry a portal link.
When OFF
The portal neither shows nor accepts Service Management tickets; e-mails go out without the portal link.
Caveats
The Customer Success helpdesk portal has its own switch.
Customer Signature Required
External jobs close to pending acceptance; the customer sign-off (signature or acceptance photo) is required before the job is accepted. Internal jobs are exempt
| Code | Default | Switch at | Turn on first |
|---|---|---|---|
service.customer_signature_required | Off | /field-service/settings | — |
How it works
Changes how an external job closes: completion moves it to pending acceptance, and the customer sign-off (signature or acceptance photo) accepts it.
When ON
External jobs need the customer sign-off to be accepted.
When OFF
Completion closes the job directly.
Caveats
Internal jobs are exempt. Works with ‘Invoice on Customer Acceptance’ to defer billing.
Enforce agent eligibility on assignment
Tickets and service orders can only be assigned to an agent whose tier and skills meet the requirements declared on the service catalog item (or the ticket tier). When off, the picker only flags ineligible agents.
| Code | Default | Switch at | Turn on first |
|---|---|---|---|
service.enforce_agent_eligibility | Off | /service-management/settings | — |
How it works
Checked in the same transaction as assigning a ticket or service order.
When ON
An assignee whose tier (and, for catalog-linked work, skills) does not meet the requirement is refused.
When OFF
The agent picker only flags ineligible agents.
Caveats
Existing assignments are not re-checked.
Enforce contract rates on service orders
A service order line linked to an active contract must use the contract’s effective rate. When off, the contract rate is only a default and users may override it.
| Code | Default | Switch at | Turn on first |
|---|---|---|---|
service.enforce_contract_rates | Off | /service-management/settings | — |
How it works
Checked when lines are priced on service orders and service quotations linked to an active contract.
When ON
A line whose catalog item is on the contract must use the contract rate; a different price is refused.
When OFF
The contract rate is filled in as a default; a different price is kept as a manual override that remembers the contract price.
Caveats
Lines whose item is not on the contract are not affected.
Enforce Contract Validation
Block job creation when the linked service contract is missing, inactive, out of its date range, or out of included visits. The check always runs and always records its reason on the job; this switch decides whether it also blocks. Off by default — review the warnings first.
| Code | Default | Switch at | Turn on first |
|---|---|---|---|
service.enforce_contract_validation | Off | /field-service/settings | — |
How it works
On job creation (form and import) the linked service contract is always checked (exists, active, in date range, visits left) and the reason is recorded on the job. This switch decides whether a failure also blocks.
When ON
Creation is refused when the check fails.
When OFF
The job is created with the warning recorded.
Caveats
Review the recorded warnings before turning it on.
Enforce Inventory / Asset Linkage
Field Service parts, stock, requisitions and tools are backed by canonical Inventory items and the Asset Register (van stock mirrors to Inventory; requisitions create a stock request; tools become assets). Off by default — turn on only after the backfill migration has run.
| Code | Default | Switch at | Turn on first |
|---|---|---|---|
service.enforce_inventory_link | Off | /field-service/settings | — |
How it works
Read by Field Service parts, stock and requisitions: they then use canonical Inventory items and the Asset Register.
When ON
Van stock mirrors to Inventory, requisitions create stock requests, tools become assets.
When OFF
Field Service keeps its own part records.
Caveats
Turn on only after the backfill migration has run.
Field Service jobs via billing queue
Completed field service jobs not dispatched from a service order stage billing items (priced scope lines, parts, technician hours at the agent rate) in the Service Management billing queue for review, instead of auto-creating an invoice.
| Code | Default | Switch at | Turn on first |
|---|---|---|---|
service.fs_jobs_via_billing_queue | Off | /service-management/settings | — |
How it works
Decides where a completed Field Service job that did not come from a service order is billed.
When ON
Its priced scope lines, parts and technician hours are staged in the Service Management billing queue for review.
When OFF
The Field Service invoice consumer creates the invoice directly.
Screens, documents and reports affected
Field Service job completion, Service Management billing queue, job labour list.
Caveats
Jobs dispatched from a service order always bill through the order. Applies to jobs completed after the change.
First Response SLA
Track and enforce a separate SLA timer specifically for the first agent response to a new ticket
| Code | Default | Switch at | Turn on first |
|---|---|---|---|
service.first_response_sla_enabled | On | /service-management/settings | — |
How it works
Adds a first-response deadline next to the resolution deadline when a Service Management ticket is stamped.
When ON
Tickets also get a response-due time.
When OFF
Only the resolution deadline is stamped.
Caveats
Has effect only while ‘SLA Enforcement’ is on.
Invoice on Customer Acceptance
Defer the AR invoice until the customer signs off (accept) instead of on completion
| Code | Default | Switch at | Turn on first |
|---|---|---|---|
service.invoice_on_acceptance | Off | /field-service/settings | — |
How it works
Moves the moment a job is billed from completion to customer acceptance.
When ON
No invoice is created while the job waits for sign-off; Service Management invoices for it are blocked too.
When OFF
Billing happens on completion.
Caveats
Meaningful when ‘Customer Signature Required’ is on.
Invoice only from confirmed reconciliation
Service Management billing items can be invoiced only from a reconciliation statement the customer has confirmed (signed record attached). Manual selection and period invoicing are disabled.
| Code | Default | Switch at | Turn on first |
|---|---|---|---|
service.billing_statement_required | Off | /service-management/settings | — |
How it works
Checked at the invoice writer, the service order invoice path and the button policy of the billing queue.
When ON
Billing items can be invoiced only from a reconciliation statement the customer confirmed (signed record attached); manual selection and period invoicing are disabled.
When OFF
Items can be invoiced by manual selection or by period.
Caveats
Turning it on does not touch invoices already issued.
Job Cost Tracking
Track labour time and parts cost against each field service job for profitability analysis
| Code | Default | Switch at | Turn on first |
|---|---|---|---|
service.job_cost_tracking | On | /field-service/settings | — |
How it works
Gates the job cost writes and the job cost card.
When ON
Labour and parts costs can be recorded on each job for profitability.
When OFF
Cost writes are refused and the cost card is hidden.
Caveats
Costs already recorded stay.
Maintenance lead time (days)
Default days-ahead for new maintenance plans. Existing plans keep their own value.
| Code | Default | Switch at | Turn on first |
|---|---|---|---|
service.pm_default_lead_time_days | 7 | /settings/others-configuration | — |
How it works
Pre-fills the lead time of a new maintenance plan when none is entered.
When ON
Generation uses each plan’s own lead time.
When OFF
Not a switch — default 7 days.
Caveats
Changing it does not alter existing plans.
Parts Requisition Workflow
New parts requisitions start in pending approval and open the approval workflow; off = they start as draft and are submitted by hand (still approved before issue)
| Code | Default | Switch at | Turn on first |
|---|---|---|---|
service.parts_requisition_workflow | Off | /field-service/settings | — |
How it works
Sets the starting status of a new parts requisition.
When ON
It starts in pending approval and opens the approval workflow.
When OFF
It starts as draft and is submitted by hand.
Caveats
Either way a requisition is approved before parts are issued. The parts availability agent runs only when on.
Preventive Maintenance
Generate service jobs automatically from maintenance plans on their schedule, ahead of each due date. Off by default — turn on after checking a plan with the manual “Generate now” button.
| Code | Default | Switch at | Turn on first |
|---|---|---|---|
service.preventive_maintenance | Off | /field-service/settings | — |
How it works
Turns on the scheduled job that generates service jobs from maintenance plans ahead of each due date (each plan’s own lead time).
When ON
Due plans create jobs automatically.
When OFF
Nothing is generated automatically.
Caveats
‘Generate now’ on a plan works whether on or off — use it to check a plan before turning this on.
Preventive maintenance anchored on
What a new or edited maintenance plan must be tied to: an asset, a maintenance contract, or either.
| Code | Default | Switch at | Turn on first |
|---|---|---|---|
service.pm_anchor_mode | asset | /settings/others-configuration | — |
How it works
Checked when a maintenance plan is created or edited: asset, contract, or flexible (either).
When ON
Asset: a plan must target an asset. Contract: it must target a maintenance contract. Flexible: either.
When OFF
Not a switch — default asset.
Caveats
Changing the mode does not re-check existing plans; they keep generating as before.
Recurring Retainer Billing
Each billing cycle, stage a pending billing event for every active retainer contract; review it in the Billing queue and generate the invoice with one click
| Code | Default | Switch at | Turn on first |
|---|---|---|---|
service.recurring_retainer_billing | Off | /service-management/settings | — |
How it works
Each billing cycle the contract job stages one pending billing event per active retainer contract.
When ON
Retainer fees appear in the billing queue each cycle; generate the invoice from there.
When OFF
The job skips silently; the manual ‘stage retainer’ action is refused as not configured.
Caveats
Stages only — never posts an invoice by itself.
Require service order approval
Every new service order must be approved before it can be confirmed. When off, an order still needs approval if it has a discounted line (with price approval on discount) or reaches the sales order amount threshold.
| Code | Default | Switch at | Turn on first |
|---|---|---|---|
service.require_service_order_approval | On | /service-management/settings | — |
How it works
Decides at confirmation whether a new service order needs approval. Combined with OR: this switch, a discounted line with ‘price approval on discount’, or the order amount (in company currency) reaching the sales order approval threshold.
When ON
Every new service order needs approval before confirmation.
When OFF
Approval is needed only by the discount or amount rules.
Caveats
Turning it off does not release orders already waiting for approval.
Require service project approval
Every new service project must be approved through the approval workflow before work starts. When off, only projects whose budget reaches the service project approval threshold need approval.
| Code | Default | Switch at | Turn on first |
|---|---|---|---|
service.require_project_approval | Off | /service-management/settings | — |
How it works
Checked when a service project is created through the approval workflow.
When ON
Every new service project goes to approval before work starts.
When OFF
Only projects whose budget reaches ‘Service project approval threshold’ go to approval.
Caveats
The threshold applies whether this is on or off; clear the threshold to remove the amount rule.
Resolution Note Required
A ticket cannot be marked resolved without a resolution note.
| Code | Default | Switch at | Turn on first |
|---|---|---|---|
service.require_resolution_note | Off | /service-management/settings | — |
How it works
Checked in the Resolve action of a Service Management ticket.
When ON
Resolving without a resolution note (blank or only spaces) is refused.
When OFF
Tickets can be resolved without a note.
Caveats
The general edit and bulk update cannot set ‘resolved’, so Resolve is the only path.
Service Contract Required for Ticket
A ticket can only be created linked to a service contract that is active and within its term.
| Code | Default | Switch at | Turn on first |
|---|---|---|---|
service.contract_required_for_ticket | Off | /service-management/settings | — |
How it works
Checked when a Service Management ticket is created (form, AI copilot).
When ON
A ticket must link to an active service contract within its term, otherwise creation is refused.
When OFF
Tickets can be created without a contract.
Caveats
CSV import (migration) is exempt. Existing tickets are not re-checked.
Service project approval threshold
Service projects whose budget, converted to company currency, reaches this amount need approval when created, and again when the budget is raised above the last approved budget while planning or active. Rejecting a raise restores the approved budget. Blank = no amount rule.
| Code | Default | Switch at | Turn on first |
|---|---|---|---|
service.project_approval_threshold | 50000000 | /service-management/settings | — |
How it works
Amount in company currency. Project budgets are converted at the document rate; a missing exchange rate is refused rather than skipped.
When ON
Projects at or above the amount need approval on create, and again when the budget is raised above the last approved budget.
When OFF
Blank = no amount rule.
Caveats
Works independently of ‘Require service project approval’. Default 50,000,000.
Shared equipment scheduling
Book shared machines and tools by time slot so two jobs never use the same equipment at once.
| Code | Default | Switch at | Turn on first |
|---|---|---|---|
service.equipment_scheduling | Off | /field-service/settings | Advanced scheduling (dispatch board) (service.advanced_scheduling) |
How it works
Adds shared equipment to scheduling: the optimizer checks equipment conflicts, job templates copy their equipment requirements onto new jobs, and equipment attributes become editable.
Conditions for it to take effect
Needs ‘Advanced scheduling (dispatch board)’ on; with it off the scheduling endpoints refuse before this is read.
When ON
Two jobs cannot be planned on the same machine or tool at the same time.
When OFF
No equipment conflict check; template equipment is not copied; equipment attributes cannot be edited.
Caveats
Existing equipment bookings stay and still follow when a job is moved.
SLA Enforcement
Enforce SLA timers and alert agents when breaches are approaching
| Code | Default | Switch at | Turn on first |
|---|---|---|---|
service.sla_enforcement | On | /service-management/settings | — |
How it works
Service Management’s own SLA switch, read together with the SLA engine switches: a ticket is stamped only when this, Settings → SLA ‘Enable SLA engine’ and ‘Service Management tickets’ are all on (create, import, priority change).
When ON
New Service Management tickets get a resolution deadline (and a first-response deadline when ‘First Response SLA’ is on); breach agents run.
When OFF
New tickets get no SLA policy or deadlines. Deadlines already stamped stay.
Screens, documents and reports affected
Service Management tickets, SLA breach agents for tickets and field jobs, SLA reports.
Caveats
Policy choice follows the sla.* rules (priority match, per-priority targets, business hours).
Team management
Group technicians into service teams. Off: the Teams page and its nav entry are hidden.
| Code | Default | Switch at | Turn on first |
|---|---|---|---|
service.team_management | Off | /field-service/settings | — |
How it works
Parent switch for Field Service teams: the team roster API and the Teams screens.
When ON
The Teams page and menu entry appear; teams can be created and members managed.
When OFF
Teams page and menu are hidden and the roster API refuses. ‘Assign jobs to a team’ and the teammates’ jobs switch become effectively off.
Screens, documents and reports affected
Field Service → Teams, technician form, job team assignment, team data scope.
Caveats
Teams already on jobs stay and are still shown on job detail. Existing tenants that already had teams were kept on by migration 1388.
Teammates’ jobs visible
Widens the ‘own’ data scope so members of a team also see that team’s jobs. Only ever adds records.
| Code | Default | Switch at | Turn on first |
|---|---|---|---|
service.team_data_scope | Off | /field-service/settings | Assign jobs to a team (service.team_assignment) |
How it works
Widens the ‘own’ data scope on Field Service jobs: lists, detail, reports and overview add jobs assigned to the viewer’s teams.
Conditions for it to take effect
Needs ‘Assign jobs to a team’ (and therefore ‘Team management’) on; otherwise read as off in both list and report queries.
When ON
Own-scope users also see jobs dispatched to their team.
When OFF
Own-scope users see only jobs where they are the technician.
Caveats
Only ever adds records; team or all scope users are unaffected. No data changes when toggled.