How the certification register holds history
A certification register looks like a table of who currently holds what, and if you build it that way you will have built the wrong thing. The question that eventually gets asked, sometimes by somebody with a clipboard and sometimes by a solicitor, is not who is certified today. It is who was certified on a specific day eighteen months ago.
Key takeaways
- A renewal appends a card; it never overwrites the previous one.
- The current state is derived from the cards, so it cannot disagree with the history.
- A gap between an expiry and the next card is recorded as a gap, not smoothed over.
- The photograph is kept with each card, because a date without its evidence is an assertion.
- “Who was certified on this date” is a single query, which is the point of the shape.
Cards, not rows
- Database
- App integration
- Machine learning
- Management
- Analytics
- Front-end & mobile
Why the current state is derived
The register stores cards and computes “currently valid” from them, rather than storing a status that gets updated. That means the two can never disagree, which is the usual failure of a status column: something goes wrong in one code path, the status says valid, the cards say expired, and the status is what the dashboard shows.
Recomputation is cheap here. A person holds perhaps a dozen certifications with a handful of cards each, so “what does this person currently hold” is a query over maybe forty items.
Gaps
A gap between one card expiring and the next being issued is common, usually short, and usually nobody’s fault — a course was full, a card took three weeks to arrive. It is also the single most important thing the register can tell you afterwards, and a state-based register erases it completely.
- Security & identity
- Management
- Analytics
What a gap does and does not trigger
A gap that has already happened does not generate an alert, because alerting somebody about a situation that resolved three weeks ago is noise. It is recorded, it appears in the compliance view as a historical gap, and it feeds one useful statistic: how often renewals are late, which is the measure of whether the lead times in your certification list are set correctly.
A gap that is happening right now is a different matter entirely, and it is the loudest thing the system does. Part 4 covers it.
The photograph
Every card keeps its photograph, and this matters more than it looks. An expiry date in a table is an assertion by whoever typed it; an expiry date next to a photograph of the card it was read from is evidence. When somebody asks to see proof of certification — a client, an auditor, an insurer — the answer is the card, not the spreadsheet.
The card row
- Person and type, both matched to your own lists, never free text.
- Issued and expires, with the expiry nullable for qualifications that do not expire.
- Number and awarding body, verbatim as printed.
- The photographs, front and back, unmodified.
- Who registered it and when, which is usually the holder on their phone.
- Never deleted. A card registered in error is superseded by a correction row, and both stay.
Next: the chasing, which is where the lead times earn their keep.
All posts