Compliance — EPA Part 84
If your operation services equipment that's subject to the EPA's AIM Act (40 CFR Part 84), TuffOps can carry the recordkeeping for you. The compliance module is opt-in (gated by a tenant setting), and once enabled it threads through units, work orders, and a separate compliance audit log.
This page is the conceptual overview. For day-to-day procedures, see the Compliance guides. For deeper concept material, see Compliance Overrides, Leak-Repair Episodes, and Chronic-Leaker Classification.
When compliance applies
Compliance tracking activates per-unit, based on the unit's device model and the model's regulatory refrigerant type. Not every unit in your fleet is in scope — only the ones using HFC refrigerants above the AIM Act thresholds.
When a unit is in scope:
- The unit's edit page exposes additional compliance fields.
- Work orders against the unit get extra prompts (charge events, leak inspections).
- The chronic-leaker classification clock can run on the unit.
When a unit is out of scope, none of this surfaces — the operator experience is identical to the non-compliance build.
Charge events
A charge event is a record that refrigerant was added to or recovered from a unit. Each event captures:
- The amount (mass)
- The refrigerant type
- Whether it was added (top-up) or recovered (reclamation)
- The technician
- Timestamp and supporting evidence (photos, work order link)
Charge events are the source of truth for the unit's leak rate calculation. The leak rate over a rolling window determines whether the unit triggers the §84.106(d) leak-repair clock.
A charge event can be voided (with a dedicated compliance.void permission). Voiding doesn't delete the event — it marks it as not-counting for the leak rate, with a reason. The audit trail keeps the original.
Leak inspections
When a unit is on the leak-repair clock, periodic leak inspections are required. TuffOps logs each inspection as a §84.106(g)(1) record:
- Date
- Method used
- Technician
- Outcome (pass / found leak)
Four consecutive clean inspections close the leak-repair episode. The "four clean cycles" counter is the headline number on the unit's compliance panel.
Mothball periods
A mothball is an EPA-recognized period when the unit is intentionally taken out of service (§84.106(d)(3)). Setting a mothball:
- Pauses the leak-repair clock for the duration.
- Suspends inspection-cycle requirements.
- Records start and end dates as §84.106(l)(10) entries.
Mothballing is gated by compliance.manage_mothball because it stops a regulatory clock — only supervisors should be able to do it.
RLCA carve-out
The Reduced Leak Class Applicability (RLCA) carve-out (§84.106(a)(3)(ii)) is a per-unit flag indicating the unit qualifies for the Subpart C exemption. When set, the leak-rate and leak-repair obligations are suspended for that unit.
The carve-out is gated by compliance.manage_rlca_carve_out for the same reason as mothball — flipping it silently exempts a unit from the rules, so it needs deliberate authorization. The non-compliance permission (units.edit) cannot toggle it.
ALD alerts
Equipment with Automatic Leak Detection emits ALD alerts. TuffOps records each alert as a §84.106(l)(6) row. The alert can:
- Trigger a "calc-then-decide" workflow ((h)(1) — recompute the leak rate; if still under threshold, the alert is informational).
- Trigger a "preemptive repair" workflow ((h)(2) — go investigate now, even if the rate hasn't crossed the threshold).
Both workflows generate work orders with the right metadata to satisfy the §84.106(l)(6)(3)–(4) "date triggered" / "action taken" recordkeeping.
Chronic-leaker classification
If a unit accumulates enough §84.106(d) episodes within a rolling window, TuffOps classifies it as a chronic leaker (§84.106(j)). When the classification triggers:
- The unit is flagged in the index with a clear visual indicator.
- A frozen reporting packet is generated for the (m)(4) submission to the EPA.
- The unit's record is locked against silent edits to the compliance fields.
The classification can be withdrawn by a supervisor with compliance.override_chronic_leaker_classification if the data was wrong. The withdrawal is logged with reason. The classification can also be marked as EPA-reported once you've uploaded the packet (compliance.manage_chronic_leaker_record), which freezes the record at the version that was submitted.
Why so many separate permissions
The compliance module has more permissions than any other area in TuffOps. The reason: each permission gates an action that has either a regulatory consequence (advances or stops a clock) or an audit consequence (alters a record the EPA might read). Bundling them into a generic compliance.edit would let one permission grant access to all of them — losing the defense-in-depth that the regulation expects.
The pattern is "one permission per regulatory verb."