app.training_completions
TableRow level security on
Training completion records (Section 4.9 Training): every attempt with its quiz score, and for a pass a certificate number and expiry. Written only by app.complete_training; the certification link is set once by a verifier.
Primary key: id
| Column | Type | Nullable | Description |
|---|---|---|---|
| id | uuid | No | Primary key, UUID v7. |
| org_id | uuid | No | Owning org, derived from app.training_courses on insert; never accepted from the caller and never changed.References app.organizations.id |
| training_course_id | uuid | No | Course completed.References app.training_courses.id |
| membership_id | uuid | No | Learner.References app.memberships.id |
| score_percent | smallint | Yes | Quiz score in percent; NULL for a course without quizzes. |
| passed | boolean | No | Whether the attempt passed. |
| completed_at | timestamp with time zone | No | When the attempt finished. |
| expires_at | timestamp with time zone | Yes | When a pass stops being current; NULL never expires. |
| certificate_number | text | Yes | Completion certificate number for passes: TRN- and the org's next certificate number, padded to numbering.document_number_padding digits (TRN-0001 by default; 1326, 1396). |
| certification_holder_id | uuid | Yes | Certification record a verifier issued from this pass.References app.certification_holders.id |
| created_at | timestamp with time zone | No | When the row was inserted. Set by the database. |
| created_by | uuid | Yes | Person who inserted the row, or null for a platform process. Set by the database.References app.people.id |
| updated_at | timestamp with time zone | No | When the row last changed. Set by the database. |
| updated_by | uuid | Yes | Person who last changed the row, or null for a platform process. Set by the database.References app.people.id |
| deleted_at | timestamp with time zone | Yes | Soft delete time. A row with deleted_at set is ignored by every access helper. |