Jobs and service contracts in the portal
The customer portal gives your customers visibility into every field-service visit you've done, every one that's scheduled, and every contract in place. They can request new services themselves, track engineers live while they're en-route, download signed compliance certificates, and see when their next PPM visit is due.
My jobs
Three tabs:
Upcoming: confirmed visits + scheduled-but-not-dispatched work + service requests still pending your approval
In progress: engineer en-route / on-site / actively working, with the live-track link when applicable
History: completed and cancelled jobs
Each row shows the job number, short title, scheduled date, engineer name, and a status badge (Pending approval / Confirmed / On the way / On site / In progress / Completed / Cancelled). Click a row for the full detail page: schedule, engineer, address, description, photos uploaded during the visit, signed certificates, and non-internal notes from the engineer.
Requesting a service
The Request a service button opens a short form:
Summary: one-line what the customer needs
Description: free-text detail (error codes, symptoms, smells, sounds, whatever helps your dispatcher triage)
Type of service: picks a job type (optional, defaults to "not sure" so customers aren't forced to pick)
Preferred date: optional; the dispatcher can honour it or propose an alternative
Priority: low / medium / high. Genuine emergencies should still phone; the form queues up to the dispatcher rather than paging anyone
Submission creates a job in pending_approval status, scoped to the customer's contact + company. It appears in their Upcoming tab immediately with a "Pending approval" badge; the dispatcher sees it in the same queue on the office side.
Rate limit: 10 requests per minute per portal session, enough for a real customer with multiple sites, tight enough to shrug off a misbehaving script.
Dispatcher approval (office side)
A pending_approval job shows an approval panel at the top of the job detail page with:
Confirm date: the actual scheduled start
End (optional): if the job has a definite duration
Assign to: pick a technician (or leave unassigned for later)
Clicking Approve + schedule transitions the job to scheduled and the customer's portal immediately shows it as "Confirmed". Clicking Decline opens a reason textbox; decline cancels the job with the reason logged in the activity timeline.
Service contracts
The Service contracts tab lists every active or paused PPM contract covering the customer's company:
Contract number + name + frequency (monthly / quarterly / annually)
Next visit due date
Annual value
Status (active / paused)
Perpetual vs fixed end date
The contract's service history is accessible by clicking through to any of its visit jobs: the same job detail page as any other visit, scoped to their ownership.
Certificates
See the Certificates and compliance page for how compliance certificates are issued; individual compliance certificates also appear on the relevant visit job's detail page with a direct Download link.
Live tracking
When a job is dispatched and the engineer sets off, the status flips to "On the way" and a Track live ↗ link appears both on the index row and on the detail page header. Clicking opens the customer tracking page (separate surface, no portal login needed, token-based).
Access control
Customers see a job if it's linked to their own contact record OR the company they're a portal member of. There's no way to see other companies' jobs even if they share an address or tenant. The same filter applies across every portal surface (invoices, tickets, files, certificates) for consistent visibility.