> For the complete documentation index, see [llms.txt](https://atender-labs.gitbook.io/atender-labs-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://atender-labs.gitbook.io/atender-labs-docs/hubspot-certification-approach.md).

# Certified vs uncertified installers — approach

**Status: not built. Blocked on the commercial split** — the HubSpot integration that supplies certification status is professional-services scope, and that scope is not agreed. This page records the rules so the decisions are already made when the block clears; it is not a design for work in flight.

## What the customer wants to see

Whether cases come disproportionately from installers who have not completed Zaptec Academy certification, per market, over time.

## The rules

**Certification status is read as of the case-creation date, and is never rewritten.** An installer who certifies in March does not retroactively make January's cases "certified". Reports of a past period therefore do not change when someone certifies today. This is the same principle as the rest of v2: a number for a closed period must not move.

**Unmatched installers are a named cohort, not a silence.** A case whose contact cannot be matched to a HubSpot installer record goes into **"Unknown certification status"** and is reported beside the certified and uncertified cohorts. It is never dropped, and it is never folded into "uncertified" — those are different statements. The match rate itself is published with the report.

**The market-level rate is cases per 100 active user-months, rolling 12 months.** A raw case count compares market size, not installer quality: a market with ten times the installers produces ten times the cases at identical quality. The denominator is active user-months so that a market whose installer base grew mid-year is measured against the base it actually had.

**Below 30 active users or 30 cases the figure is labelled "insufficient volume"** and no trend is drawn. That is the same threshold as `minEligible` everywhere else in v2 — one low-volume rule product-wide, not a second one for this report.

## What has to exist first

* The HubSpot integration itself, and a durable installer↔contact match key. Fuzzy name matching is not acceptable here: an unstable match makes the cohorts move between runs, which is precisely the failure v2 exists to end.
* A stored per-case certification status captured at creation, not a live lookup. A live lookup cannot satisfy "never rewritten".
* Agreement on who owns the certification data quality — the report inherits whatever the HubSpot records say, and "Unknown" will be large at the start.

## What is deliberately not decided here

The commercial split, the integration's ownership, and whether the cohorts belong on the shared v2 Analytics surface or on a Zaptec-specific view. None of those are engineering calls.
