core PK: id 10 required 2 unique

Description

Digital certification record for peer mentors, tracking course completion, certification validity period, and expiry status. Drives auto-pause logic and renewal reminders.

16
Attributes
7
Indexes
6
Validation Rules
13
CRUD Operations

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
btree

Columns: user_id

idx_peer_mentor_certificates_course_id
btree

Columns: course_id

idx_peer_mentor_certificates_number
btree unique

Columns: certificate_number

idx_peer_mentor_certificates_status
btree

Columns: status

idx_peer_mentor_certificates_expires_at
btree

Columns: expires_at

idx_peer_mentor_certificates_user_course
btree

Columns: user_id, course_id

idx_peer_mentor_certificates_org_id
btree

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
on_create

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.

Enforced by: CertificateService
expiry_triggers_auto_pause
on_update

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
on_create

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
on_update

Setting status to revoked requires a non-empty revocation_reason.

Enforced by: CertificateService
certificate_issued_only_on_completed_course
on_create

A certificate may only be created if the linked course_registration for this user has a completed status.

org_isolation
on_create

A certificate's issuing_organization_id must match the organization context of the issuing user. Cross-org certificate creation is forbidden.

Enforced by: CertificateService

Storage Configuration

Storage Type
primary_table
Location
main_db
Partitioning
No Partitioning
Retention
Permanent Storage