Admin

Read the safety scorecard

Open Reports → Safety in Thermal →

The Safety scorecard (under Reports → Compliance → Safety scorecard) rolls the whole compliance picture into one view — Job Hazard Analyses (JHAs), technician credential currency, and work-eligibility gate activity — by organization, branch, technician, and time window. Every number on it reconciles back to the exact records it was computed from; nothing is estimated or invented. It is a measurement aid, not legal advice.

What each metric means (and how it's counted)

Each headline tile is a numerator over a denominator. The precise definitions live in code (SAFETY_METRIC_DESCRIPTORS in lib/compliance/safety-metrics.ts) so an auditor can reconcile any value to source rows; here they are in plain language.

  • JHA applicability — the share of work orders in the window that require a JHA. A job requires one when its job type / equipment type matches an active JHA template (the same matcher the technician arrival flow uses). Numerator: jobs with an applicable template. Denominator: all jobs in scope + window.
  • JHA completion — of the jobs that require a JHA, how many actually had one submitted. Jobs that need no JHA are excluded from the denominator — a job with no applicable template can't be "incomplete." Numerator: applicable jobs with ≥1 submission. Denominator: applicable jobs only.
  • JHA timeliness — of the JHAs submitted, how many were done on time (submitted at or before the job's scheduled arrival, plus a 60-minute grace). Submissions for a job with no scheduled time are excluded — you can't be late without a deadline.
  • Hazard escalations — the share of JHAs where an answer tripped a stop-work hazard. The tile also shows how many stop-works are still open (not yet overridden). Higher is worse.
  • Credential currency — the share of technicians' credentials that are current right now: verified, not expired, not revoked. This one is evaluated as of today, not over the date window — currency is a point-in-time fact. Both certification registries (dispatch certs and trade credentials) are included; an AHJ revocation counts as revoked.
  • Ineligible-work incidents — distinct jobs where regulated work was recorded despite a soft-warn eligibility gap (a regulated_work_recorded_ineligible audit event). The tile also shows how many certification overrides were applied in the window. Higher is worse.

Drill-down (by branch, by technician)

Below the tiles, two tabs break every metric down by branch and by technician, so you can see who and where a gap is concentrated. The drill-down deliberately shows only counts and rates — it never exposes a credential's evidence file, license number, or certificate number. That exclusion happens at the query layer, so there is no way to reach sensitive evidence through this screen.

Scope and authorization

  • Who can open it — Owners, Dispatchers, and Office users. Technicians can't reach the office reports. See Roles & permissions.
  • Branch (team) scope — in a multi-branch org, org-wide roles can compare branches with the branch chips at the top, or focus one branch. A user who is scoped to a single branch (a per-user branch override) can only ever pull that branch — asking for another branch, or a technician outside it, is refused, not silently widened. This is enforced on the server for every pull, so a hand-crafted URL can't reach a team you don't own.

Configuration this depends on

The scorecard reads existing data — there's nothing to turn on for the report itself. What it measures, though, depends on setup done elsewhere:

  • JHA templates decide which jobs count as "requires a JHA." Author them under credential/compliance setup; a template's job-type / equipment-type rules drive applicability. An org with no active templates shows 0% applicability (honestly — a gap, not a fake pass).
  • Certification types & enforcement — whether an eligibility gap blocks assignment (hard-block) or merely warns (soft-warn) is set per certification type. Only a soft-warn gap that was worked anyway produces an "ineligible-work incident"; a hard-block gap stops the assignment entirely, so it never becomes an incident here.
  • Credential records — currency reflects the verify/revoke decisions and expiry dates on each technician's credentials. Keep those current on the credential admin screen for the numbers to mean anything.

Overrides and their audit trail

Two override paths feed this screen, and both are always attributed:

  • A certification override at assignment time (owner/office only, reason required) records a cert_override audit event — surfaced here as "overrides applied."
  • A JHA stop-work override clears a hazard stop; it is reason-required and recorded against the submission, which is why "open stop-work" (not-yet- overridden) is tracked separately from total escalations.

Neither override is silent, and neither can be performed from this read-only screen — it only reports them.

Operational ownership

  • Owner: the compliance/operations lead reviews the scorecard on a regular cadence (weekly for open stop-works and expired credentials; monthly for JHA completion and timeliness trends).
  • Data owners: dispatchers keep JHAs submitted at arrival; the credential admin (owner/office) keeps verification and expiry current; the org admin owns certification-type enforcement levels.

Rollout

The scorecard is read-only and reads data the compliance slice already writes, so it can be turned on for everyone at once with no migration and no backfill. A sensible rollout: make sure at least one JHA template is active and credential records are seeded, point the operations lead at the report, and agree the review cadence above.

Rollback

Because it only reads existing rows, "rolling back" the scorecard means hiding the link from Reports → Compliance; no data changes and nothing else in the compliance slice depends on it. The underlying JHA, credential, and eligibility features are unaffected.

On this page