Peer Mentor Certificate
Data Entity
Description
Digital certification record for peer mentors, tracking course completion, certification validity period, and expiry status. Drives auto-pause logic and renewal reminders.
Data Structure
| Name | Type | Description | Constraints |
|---|---|---|---|
id |
uuid |
Primary key | PKrequiredunique |
user_id |
uuid |
FK to users — the peer mentor who holds this certificate | required |
course_id |
uuid |
FK to courses — the course this certificate was issued for | required |
certificate_number |
string |
Human-readable certificate identifier, e.g. CERT-2024-00123 | requiredunique |
issued_at |
datetime |
Timestamp when the certificate was issued | required |
valid_from |
datetime |
Start date of the certificate validity period | required |
expires_at |
datetime |
Expiry date; when passed triggers auto-pause and renewal reminders | - |
status |
enum |
Current lifecycle state of the certificate | required |
issuing_organization_id |
uuid |
FK to organizations — the org that issued this certificate | required |
issued_by_user_id |
uuid |
FK to users — coordinator or admin who issued the certificate | - |
certificate_url |
string |
URL to the generated digital certificate file (PDF/image in cloud storage) | - |
metadata |
json |
Org-specific certificate metadata (e.g. physical card number for HLF parallel physical card) | - |
revocation_reason |
text |
Reason for revocation if status is revoked | - |
auto_paused_at |
datetime |
Timestamp when auto-pause was triggered due to certificate expiry; null if not auto-paused | - |
created_at |
datetime |
Record creation timestamp | required |
updated_at |
datetime |
Record last-updated timestamp | required |
Database Indexes
idx_peer_mentor_certificates_user_id
Columns: user_id
idx_peer_mentor_certificates_course_id
Columns: course_id
idx_peer_mentor_certificates_number
Columns: certificate_number
idx_peer_mentor_certificates_status
Columns: status
idx_peer_mentor_certificates_expires_at
Columns: expires_at
idx_peer_mentor_certificates_user_course
Columns: user_id, course_id
idx_peer_mentor_certificates_org_id
Columns: issuing_organization_id
Validation Rules
valid_from_before_expires_at
error
Validation failed
certificate_number_format
error
Validation failed
user_id_exists
error
Validation failed
course_id_exists
error
Validation failed
status_transition_valid
error
Validation failed
certificate_url_valid_format
warning
Validation failed
Business Rules
one_active_certificate_per_course_per_user
A user may hold only one active certificate per course at any time. Issuing a new certificate for the same course must supersede (expire) the previous one.
expiry_triggers_auto_pause
When a certificate's expires_at passes and status transitions to expired, the peer mentor's status must be automatically set to paused via PeerMentorStatusService. The auto_paused_at timestamp is recorded.
renewal_reminder_scheduling
When a certificate with a non-null expires_at is created or updated, renewal reminder records must be scheduled (e.g. 90, 30, 7 days before expiry) via CertificationRenewalReminder entities.
revocation_requires_reason
Setting status to revoked requires a non-empty revocation_reason.
certificate_issued_only_on_completed_course
A certificate may only be created if the linked course_registration for this user has a completed status.
org_isolation
A certificate's issuing_organization_id must match the organization context of the issuing user. Cross-org certificate creation is forbidden.