Compliance policy
Open Settings → Compliance Policy in Thermal →
What it's for
Compliance policy configures the two things that can stop a job from moving: certification enforcement (does a tech without a current EPA-608, for example, get blocked from dispatch) and Job Hazard Analysis templates (the checklist a tech works through on arrival before starting the job). It sits next to Inspection Templates as a commercial-controls settings page rather than something you fill out per job — the policy set here gates dispatch placement and field arrival everywhere else in the app.
Reach it from Settings → Commercial controls → Compliance policy in the
sidebar, at /settings/compliance-policy. The Settings breadcrumb at the
top takes you back.
Tabs
This screen has no tabs. It's two stacked sections: Certification types, then JHA templates.
Panels and controls
Certification types
A table of certification or credential types — Name, Code, Status (Active/Inactive), Enforcement, and an Edit policy action. Add type opens a dialog to create one from scratch, or you can run org seed to install defaults like EPA-608. Enforcement is either Soft warn (shows a badge, never blocks) or Hard block (drives dispatch's CERT_HARD_BLOCK check, refusing to place a tech on a job requiring a certification they don't currently hold).
JHA templates
A list of Job Hazard Analysis templates, each expandable to its questions. Only active templates with questions drive the arrival JHA card technicians see on field visits. Row actions: Edit changes the template's name, equipment applicability, and active state; Add question appends a question; each question row has its own Edit and delete. Deleting a template or a question removes it going forward — existing submissions keep their historical snapshots, so past JHA answers never change retroactively.
A question has a response type (Yes/No, Select, Text, Numeric), and can be marked required, an acknowledgement, or a hazard trigger with a stop-on value — answering with that value flags the visit as a hazard stop rather than a routine note.
What it accepts
| Field | Format | Required | Rule |
|---|---|---|---|
| Certification domain | Certification or credential | Yes | "Select a valid catalog domain." |
| Code | Free text | Yes | Uniquely identifies the type |
| Name | Free text | Yes | "Certification type id is required." (on edit, when the id is missing) |
| Enforcement level | Soft warn or Hard block | Yes | |
| Template name | Free text | Yes | "Template id is required." (on edit, when the id is missing) |
| Applicable job/equipment types | Pick from list | No | Narrows which jobs the template applies to |
| Question prompt | Free text | Yes | "Question id is required." (on edit, when the id is missing) |
| Response type | Yes/No, Select, Text, Numeric | Yes | "Select a valid response type." |
| Required / Acknowledgement / Hazard trigger | On or off | No | Any combination is allowed |
| Stop-on value | Free text | Only for a hazard-trigger question | Compared against the tech's answer to flag a hazard stop |
How to configure it
- Certification types configured here are what dispatch checks before placing a technician on a job — Hard block enforcement is what actually refuses placement; Soft warn only informs.
- Technicians' own certification records (held elsewhere on their staff profile) are what get compared against these types and their expiry dates.
- JHA templates configured here are what populate the arrival checklist card in the field app — there's no separate on/off switch beyond a template's own Active state and whether it has questions.
- Inspection Templates, a neighboring settings screen, is a related but separate catalog — PM and inspection checklists, not hazard analysis.
Who can see it
- Owners see Compliance policy in the Settings sidebar and can create, edit, and remove certification types, JHA templates, and questions.
- Office managers have access to the Settings area, so the screen and its actions are open to them if they navigate directly, even though the sidebar link is shown to owners.
- Dispatchers and technicians cannot reach Settings at all. Every action here is checked on the server, so the gate holds regardless of what the sidebar shows.
The full role matrix is on Roles & permissions.