The program judgment queue: audits and violations
Every restoration franchise network runs Programs: enrollment structures with standards attached, things like a vendor approval program, a certification mandate, a brand standard, or a safety progr…
On this page
- What this queue is
- Where to find it
- What lands in the queue, and what doesn't
- The tile: what each element shows
- Severity, and how each source maps to it
- The Detected, Escalated, Resolved track
- Taking action: what Act, Park, and Ignore do
- Opening a row
- Filtering and sorting
- Empty states
- Best-practice example
- See also
What this queue is
Every restoration franchise network runs Programs: enrollment structures with standards attached, things like a vendor approval program, a certification mandate, a brand standard, or a safety program (see Programs and standards and Standards enforcement for how a program gets built). Programs generate two kinds of compliance work that need a human decision:
- Program audits. A scored check against a program's standards, submitted for HQ's review.
- Program violations. A flagged breach of a program's terms, either open or already escalated.
Verinode does not decide whether an audit passes or a violation gets waived. It surfaces the two together as compliance action rows inside the same Decisions log every other HQ decision lives in (playbook plans, at-risk franchisee interventions, consent requests), tagged with the Compliance domain, so leadership works one queue instead of hunting across separate program pages. This article covers those two row kinds specifically: what populates them, what every label and number means, how the Detected, Escalated, Resolved track works, and what each action button actually does underneath.
Where to find it
Program audits and violations show up in two places in the HQ sidebar, because they're part of the same underlying decision log the whole HQ Decisions surface runs on:
- Decisions (
hq.verinode.ai/decisions) is where they normally live. This is the full log: every plan, intervention, consent request, and program audit or violation your group has open, in one gallery. The page subtitle calls it out directly as the franchisor inbox, the single place network-level decisions land. - Action Plans (
hq.verinode.ai/actions) shows only the subset currently in motion, plans you've activated, interventions in progress, and, specifically for this queue, program violations you've escalated. A submitted or disputed audit never appears on Action Plans; escalating a violation is what moves it there.
Both pages read the same underlying rows scoped to your group's own programs. A group never sees another group's programs, audits, or violations.
Note
On Decisions, once your row set spans two or more domains, a domain dropdown appears in the filter bar next to the status dropdown. Select Compliance there to see only program audits and violations, alongside whatever else your network has open (vendor findings, carrier findings, and so on carry different domain labels).
What lands in the queue, and what doesn't
Program audits appear here only while their status is submitted or disputed. An audit that's still a draft, or one that's already been approved or withdrawn, doesn't show, it has either not reached HQ yet or has already been closed out.
Program violations appear here only while their escalation state is open or escalated. A violation that's been resolved or waived drops off the list, it's closed.
That means this queue is, by construction, always "what still needs a call", not a full audit or violation history. For the complete record on a given program, including everything that's already been closed, use the program's own page (see Programs and standards).
The row's entity is always the Program, never a named franchisee, vendor, or partner. An audit or violation record does carry which specific location or approved party it concerns underneath, but this queue deliberately doesn't surface that identity. You'll see which program is out of compliance and why; who specifically triggered it is not part of this view. This matches how HQ works everywhere on the platform: leadership sees network-level aggregates and program-level compliance, never a single franchisee's private business detail pulled out by name from an operational record.
The tile: what each element shows
Each row renders as a tile in the gallery. Two things distinguish a compliance tile from a plan or intervention tile: it never carries a dollar figure (compliance rows don't carry an estimated dollar impact), so the tile shows only its title, larger, with no number above it.
Title.
- An audit's title reads as audit type, then the program name, separated by a middle dot, for example "quarterly · Vendor Approval Program." The audit type is one of five values your program's audit cadence can produce: annual, quarterly, spot, triggered, or self-attest. (Self-attest audits currently render with the underlying database value, "self_attest," rather than a friendlier label, a known cosmetic rough edge.)
- A violation's title is the reason text entered when the violation was logged, a free-text explanation, not a fixed label.
Status pill (top right of the tile). The same five-color status language used across every HQ decision:
| Pill | Color | Meaning | |---|---|---| | Urgent | Ember Red | Open, and marked critical severity | | Pending | Hard Hat Yellow | Open, not critical | | Acted | Deere Green (muted) | You've acted on it (audit approved, or violation escalated) | | Resolved | Deere Green (bright) | Closed out (this pill only ever appears briefly, since resolved/waived rows drop off the list on the next load) | | Parked | IQ Teal | Set aside (only reachable on the audit side, via Withdraw) | | Ignored | Neutral gray | Dismissed (only reachable on the audit side, via Dispute) |
For audits and violations specifically, since neither carries a dollar impact, only severity decides whether an open row reads Urgent or Pending, not the usual $100k/year threshold used elsewhere in the log.
Severity, and how each source maps to it
Severity isn't set the same way for audits and violations, because they're different underlying records:
Program audits. Severity is derived from the audit's own status, not a separate severity field:
- Disputed audits show Warning.
- Submitted audits (not yet disputed) show Info.
- Audits never reach Critical severity. A disputed audit can still only push the tile to Pending, never Urgent, since Urgent requires critical severity specifically.
Program violations. Severity comes straight from the violation's own severity field, set to one of four values when it was logged:
| Underlying severity | Shown as | Tile reads | |---|---|---| | critical | Critical | Urgent (Ember Red) | | high | Warning | Pending | | medium | Info | Pending | | low | Info | Pending |
Only a critical violation pushes its tile into the Urgent bucket while it's still open. Everything else, including a high-severity violation, sits in Pending until you act on it.
The Detected, Escalated, Resolved track
This is the piece that makes program violations behave like a plan rather than a flat flag. The moment a violation is loaded into the queue, Verinode builds a three-step track anchored on when the violation was actually detected:
- Detected: day zero, always marked complete (it happened, that's why the row exists).
- Escalated: a step, marked complete only once you've escalated it (see Taking action below). If it hasn't been escalated yet, this step sits open.
- Resolved: the final step, marked complete once the violation carries a resolved date (whether you resolved it or waived it).
You won't see this track on the Decisions gallery tile itself, tiles there stay flat cards. It becomes visible once the violation has been escalated: escalating flips its status to Acted, which is what moves it onto Action Plans, and Action Plans is where the track renders as an actual timeline bar, either the Gantt view (a horizontal bar with the Detected/Escalated/Resolved steps marked along it) or the Calendar view (the next open step shows as a colored pill on its due date; click the day to see the task, click the task for the step detail).
Program audits never build this track. Audits don't have a middle "in progress" state the way violations do, an audit is either awaiting your decision or it's been decided, so audits never appear on Action Plans at all, only on Decisions.
Taking action: what Act, Park, and Ignore do
The three buttons on a pending tile, Act, Not now (Park), and Ignore, don't mean the same thing on every row kind. On a program audit or violation they map to real state changes in the program's records, not a generic "mark as read":
Program audit (submitted or disputed):
| Button | What it does | Result | |---|---|---| | Act | Approve | Status → approved. Drops off the queue. | | Not now (Park) | Withdraw | Status → withdrawn. Drops off the queue. | | Ignore | Dispute | Status → disputed. Stays in the queue, now shown at Warning severity. |
Program violation (open or escalated):
| Button | What it does | Result | |---|---|---| | Act | Resolve | Escalation state → resolved. Drops off the queue. | | Not now (Park) | Escalate | Escalation state → escalated. Tile flips to Acted; row moves onto Action Plans with its Detected/Escalated/Resolved track. Only available while the violation is still open. | | Ignore | Waive | Escalation state → waived. Drops off the queue. |
A few behaviors worth knowing before you click:
- Once a violation is escalated (Acted), the tile no longer offers a button on the gallery card. The three-button row only renders for pending rows; an Acted tile shows just its status pill. To resolve or waive an escalated violation, open it (click the tile) and continue the conversation with the agent from there, or use the program's own compliance page.
- Approving, withdrawing, resolving, and waiving all remove the row from this queue immediately on your next page load, because the underlying database query only ever asks for submitted-or-disputed audits and open-or-escalated violations. There's no separate "closed" tab here, the closed record lives on the program itself.
- Every action is guarded to your own group's programs. Attempting to act on a row that belongs to a different group (which shouldn't be reachable through the UI, but is checked server-side regardless) is rejected outright.
- Only group admins can act, park, or ignore. Non-admin group users can view the queue but the action buttons won't fire for them.
Opening a row
Click a tile to open its detail workspace. For a compliance row, you'll see:
- The title (audit type + program, or the violation's reason) as the workspace header.
- A Detected date line beneath the title, showing when the audit was conducted or the violation was detected. If you've acted on it, an "Acted" date appends to the same line.
- An AI-written summary paragraph that weaves the program name, domain, and (for audits) the auditor's findings text into a plain-language brief, rather than showing "Findings:" as a separate labeled field. If the audit or violation carries no extra write-up, the summary stays to the title and entity alone.
- A numeric audit score, when the audit carries one, travels with the record for the AI to reference in conversation, but isn't broken out as its own visible figure in the workspace today.
- No dollar impact panel and no benchmark comparison panel render, those only appear on rows that carry that data, and program audits and violations don't.
- A chat entry point to discuss the row with the agent, work through whether to approve, dispute, escalate, resolve, or waive it before you commit to a button click.
Use the arrows (or swipe, or the left/right arrow keys) to step through every row currently matching your filters without closing the panel.
Filtering and sorting
The filter bar above the gallery gives you three controls relevant to this queue:
- Status dropdown. All, Pending, Acted, Parked, Ignored, Resolved, each option showing a live count in parentheses, for example "Pending (4)." Because approved/withdrawn audits and resolved/waived violations already drop out of the underlying data, "Resolved" here will rarely show anything for this queue specifically, it reflects the brief window before a resolved row disappears entirely.
- Compliance domain filter. Appears once your Decisions log spans two or more domains. Selecting "Compliance" isolates program audits and violations from everything else in the log.
- Sort dropdown. "Newest first" (default) or "Biggest impact." Because compliance rows carry no dollar impact, sorting by "Biggest impact" won't distinguish them from each other, use "Newest first" to work this queue in the order things came in.
A Search decisions… box at the top of the filter bar matches against title text, useful for jumping straight to a specific program's name.
Empty states
If your Decisions log has nothing at all yet (across every domain, not just Compliance), the gallery reads:
"No decisions for you yet. They'll land here as Verinode spots cost savings, risk, and growth opportunities in your data."
If you've filtered to a specific status and nothing matches, the copy adapts to the filter, for example, filtering to Resolved with nothing resolved reads:
"Nothing resolved for you right now."
There's no Compliance-specific empty message. A clean compliance posture, no submitted or disputed audits and no open or escalated violations across your programs, simply means the queue has nothing tagged Compliance to show, and the domain filter itself won't appear until there are at least two distinct domains present in your log.
On Action Plans, if you land on a bucket (Today, Overdue, and so on) with nothing due, the Gantt/Calendar empty copy explains what belongs there instead of just showing a blank screen, for example the Overdue bucket reads "Nothing overdue. Steps past their due date land here so they don't slip." An escalated violation only ever shows up in these buckets, never a submitted or disputed audit.
Best-practice example
A quarterly audit on your Vendor Approval Program comes back disputed, the auditor and the vendor disagree on a finding. It lands in Decisions under Compliance, Warning severity, Pending. You open it, read the AI-written summary of the findings, and decide the dispute has merit: you click Ignore, which files it as Dispute, keeping it in the queue at Warning while the disagreement gets worked out offline. Meanwhile, a critical safety-program violation at one of your locations shows Urgent on the same page. You escalate it (Not now → Escalate), which moves it to Action Plans with a Detected, Escalated, Resolved track so you can watch it through to close instead of losing it in a flat list. Once the underlying issue is fixed, you open the row and resolve it (Act → Resolve), and it drops off both queues for good.
See also
Data sources
- 1.the network data. Verinode HQ.
- 2.the product. Verinode engineering.