Franchisee enrollments: mandatory and opt-in programs

Every program on `hq.verinode.ai/programs` carries an **enrollment model**: `approved_list`, `mandatory`, or `opt_in`. That single setting decides which row appears on the program's detail page onc…

8 min read·Updated July 14, 2026
On this page

What this row is

Every program on hq.verinode.ai/programs carries an enrollment model: approved_list, mandatory, or opt_in. That single setting decides which row appears on the program's detail page once you click into it. An approved_list program (the default for a Vendor approval program) shows an Approved parties row of external vendors, carriers, or labs the network has qualified. Everything else, any program whose enrollment model is mandatory or opt_in, shows the Franchisee enrollments row instead: one tile per franchisee membership attached to that program.

In practice that is the row you'll see on Certification mandate, Training, Brand standard, and Safety programs, since those are built around what every location has to do or hold, not around an outside party. It also shows up on a Carrier or TPA program if it's still sitting at its opt-in default rather than switched to an approved-party list (admins can flip a program's enrollment model from the detail page at any time, per Programs). Marketing co-op programs never reach this row at all: they route to their own ledger view instead.

The row's title on the page reads exactly "Franchisee enrollments."

Note

This row is owned by the enrollment model, not by the program type. If you're looking at a Carrier program and see Approved parties instead of Franchisee enrollments, that program has been set to approved_list; if you see Franchisee enrollments on it, it's still on opt_in. Both are valid configurations, the model is a lever, not a fixed rule per type.

Where to find it

Open Programs from the HQ sidebar at hq.verinode.ai/programs. Click any program tile in the Active, Drafts, or Sunset rows whose enrollment model is mandatory or opt_in, most reliably a Certification mandate, Training, Brand standard, or Safety program. That opens the program's detail page. The Franchisee enrollments row sits below the hero panel (and below the Network target row, when one is declared), ahead of Open violations and Recent audits.

The row always renders for this class of program, whether or not anyone is enrolled yet. What changes is its content.

Mandatory versus opt-in: how a franchisee gets on the list

The program's enrollment model, set when the program is created and editable afterward, decides how a franchisee ends up in this row:

  • Mandatory. Every operator in the network attaches to the program automatically once it's activated. A franchisee doesn't choose to join; membership is a condition of being in the network. Their enrollment status starts at Mandatory, distinct from the ordinary Enrolled status an opt-in franchisee gets, so HQ can always tell an auto-attached membership apart from a voluntary one at a glance.
  • Opt-in. The program waits. A franchisee has to self-attach before a row appears for them at all; nothing happens automatically. Once they do, their status starts at Enrolled.

Underneath both paths, the database records who or what created the enrollment: HQ adding it directly, the operator attaching themselves, or the system auto-attaching a mandatory program. That distinction is not printed as its own column, but it feeds the "Enrolled … ago" line described below whenever it's on file.

From there, every enrollment (mandatory or opt-in) can move through the same five states: Mandatory, Enrolled, Probation, Decertified, or Withdrawn. Probation and decertification are compliance actions HQ or the program's automated KPI checks apply after the fact; withdrawn means the franchisee has left the program.

Tip

"Mandatory" as an enrollment model (a property of the program) and "Mandatory" as an enrollment status (a property of one franchisee's row) are two different things that happen to share a label. A mandatory-model program's franchisees start at status Mandatory; nothing about the model itself changes if HQ later moves an individual franchisee to Probation or Withdrawn.

Reading a tile

Each tile in the row represents one franchisee's membership in the program. Top to bottom:

  • Label (small text above the name): the enrollment status, in plain language, Mandatory, Enrolled, Probation, Decertified, or Withdrawn. The tile's accent color follows it: Mandatory and Enrolled read in the expand (green) tone, Probation reads in the maintain (yellow) tone, Decertified reads in the analyse (red) tone, and Withdrawn reads in a neutral border tone.
  • Headline: the franchisee's name (the office/location display name HQ already uses across the platform). If the underlying operator record can't be resolved, the tile falls back to "Unknown location" rather than showing a raw ID.
  • Sub-line, one of three variants depending on what's on file:

- If the franchisee has open violations: "N open violation(s)" (singular or plural matched to the count), followed by " · Last audit X/100" when a score exists. - If there are no open violations but a last audit score exists: "Last audit X/100 · No open violations." - If neither applies: "No open violations."

  • Meta line: "Enrolled N days ago" (or "today" on day zero, "1 day ago" on day one, "N months ago" past 30 days), with the enrolled-by kind in parentheses when it's on file, for example "Enrolled 3 months ago (operator)."

Tiles are read-only in this row. There's no click-through to an edit form and no admin "+ Add enrollment" affordance here yet, unlike the Approved parties row (which lets an admin capture a negotiated vendor rate) or the Recent audits row (which has a "+ Schedule" tile for admins). Enrollment records populate from elsewhere in the platform; this row is purely the compliance read-out of what already exists.

The row lists up to 20 franchisee enrollments, newest-enrolled first. A network with more than that sees only its most recent 20 here; older enrollments still count toward every total in the hero panel described below, they just don't get their own tile in this list.

Heads up

Every enrollment also tracks a lifetime violation count going back to when the franchisee first enrolled, separate from the open-violations count this row's sub-line uses. That lifetime figure is stored but isn't surfaced anywhere on this row today; only currently-open violations show here. For the network's full violation and audit history, see Compliance.

Empty states

When no franchisee has enrolled yet, the row shows one line instead of tiles, and which sentence you see depends on the enrollment model:

"No franchisees enrolled yet. Mandatory enrollment auto-attaches every operator in the network once the program is activated."

on a mandatory program, or

"No franchisees enrolled yet. Opt-in enrollment waits for operators to self-attach from their IQ programs section."

on an opt-in program. Neither is an error state. A mandatory program reading this line almost always means it hasn't been activated yet, activation is what triggers the auto-attach. An opt-in program reading this line simply hasn't had any franchisee choose to join.

The hero numbers this row feeds

At the top of the same detail page, the hero panel's headline and two of its three secondary figures are built directly from this row's data (the third, Audits last 90d, comes from the audits table and isn't specific to enrollments):

  • Headline (active enrollments). The count of enrollments currently in status Enrolled or Mandatory, that is, everyone actively participating, excluding Probation, Decertified, and Withdrawn.
  • Active enrollments, secondary tile. Repeats the headline number, with a sub-line reading "N on probation," the count of enrollments currently flagged Probation.
  • Open violations. The network-wide open-violation count across every enrollment in the program, reading "All clear" at zero, "N critical" when any open violation is Critical severity, or "Severity mixed" otherwise.

The program's eyebrow and description line also name the enrollment model directly, reading something like "Opt-in enrollment · Quarterly audit cadence," so you can tell at a glance which behavior (mandatory auto-attach or opt-in self-attach) governs the program you're looking at, without opening the row itself.

Why HQ sees only compliance data here, never a franchisee's business

This is the one place a program page legitimately names an individual, named franchisee rather than a network aggregate, so it's worth being precise about the boundary.

What HQ sees, per franchisee, in this row: whether they're enrolled and in what status, whether they currently have open violations and how many, their last audit score if one exists, and roughly when and how their enrollment began. That is compliance data: exactly what a franchisor needs to run the standard it has set, and a franchisee already knows HQ tracks it, because tracking it is what enrollment in the program means.

What HQ never sees here, or anywhere on this page: the franchisee's margins, cash position, client list, vendor invoices, job-level financials, or any of the private business data that feeds that franchisee's own Verinode benchmarks. A last-audit score is a compliance grade against the program's own rubric or KPI matrix, not a window into the books behind it. If a violation was detected by a KPI threshold breach, the tile shows that a threshold was crossed, not the underlying financial or operational figures that crossed it.

Verinode never sells this data to carriers, and the same independence boundary that governs benchmarks governs this row: HQ gets the compliance read-out it needs to run the network, franchisees keep everything else. See Network health for how this boundary holds across every HQ surface, not just Programs.

How to use this row

  1. 1Open a program whose enrollment model is Mandatory or Opt-in (Certification mandate, Training, Brand standard, Safety, or an opt-in Carrier/TPA program).
  2. 2Check the hero's active-enrollment count and "N on probation" sub-line first, that's the fastest read on whether the program has any teeth yet.
  3. 3Scroll to Franchisee enrollments and scan for red (Decertified) and yellow (Probation) tiles; each sub-line tells you whether the reason is an open violation, a weak audit score, or both.
  4. 4If the row reads the empty state and the program is Mandatory, confirm the program has actually been activated, an unactivated draft never auto-attaches anyone.
  5. 5If the row reads the empty state and the program is Opt-in, treat it as a genuine adoption gap: no franchisee has chosen to join yet.
  6. 6Cross-check any Decertified or Probation tile against Compliance for the full violation and audit trail behind it.
  • Programs: the full tour of a program's detail page, including the Approved parties row this one sits beside, the audit rubric, KPI matrix, and network target rows.
  • The Programs catalog: the landing page's hero, Active/Drafts/Sunset rows, and how a program gets created before it ever reaches this detail page.
  • Compliance: the network-wide violations and audits queue this row's per-franchisee numbers roll into.
  • Network health: how the HQ privacy boundary holds across every network surface, not just Programs.
  • Standards: where cert-mandate, training, brand-standard, and safety programs are headed as their own dedicated section.

Data sources

  1. 1.the network data. Verinode.
  2. 2.Verinode. Verinode.
  3. 3.Verinode. Verinode.
  4. 4.supabase/migrations/20260518b_program_primitive.sql. Verinode.
Was this helpful?