Training courses
Courses the shop offers for training — set a name, content, and how long the certificate is valid once passed.
Not setting a certificate validity period = never expires, not "expires immediately" — leave it blank if that course genuinely never expires.
Training sessions
The actual sessions held — date/time, instructor, and attendance check-in for each course.
- 1Open a new session from an existing course, and enter date/time and instructor
- 2Check each attendee as "present" or "absent"
- 3Record "passed" or "failed" separately from attendance
"Attended" and "passed" are separate fields — someone who attended but failed is not the same as someone who didn't attend at all. Record both to match reality every time.
Editing an existing session requires re-entering every field completely, not just the one that changed — the system overwrites the entire row every time it saves; fields you don't re-enter get cleared along with it.
My training history
Courses you've already passed and certificates that haven't expired — every employee can view their own without needing team-management permission.
Training dashboard
A shop-wide overview — who's still missing a mandatory course, and whose certificates are close to expiring.
Requires the "manage team" permission to see this tab — the other tabs (courses/sessions/my history) are open to everyone in the shop.
Certificates
All certificates issued to employees across the whole shop after passing a course, listed everyone together in one table — different from "My training history," which only shows your own.
What can break
| Symptom | Cause / fix |
|---|---|
| Opening a training session shows only one name | That session may be scoped to show only your own row (roster_scope = self) — the screen states which view it is before drawing the list |
| Edited a session and some fields disappeared | Saving always overwrites the whole row — re-enter every field's original value when editing, not just the one you want to change |
| Can't see the "Training dashboard" tab | Requires the "manage team" permission — without it, this tab simply doesn't appear; it's not a bug |
| Save fails | The button becomes clickable again with the real reason from the server; everything you entered is still there |