Skip to content

LMS policies

Audience: product, domain, backend, ux
Status: specced
Owns: product
Depends on: Lifecycle, Personas, System architecture

Document decisions here before encoding them in LMS app code.

ID Topic Decision
LMS-01 Multi-role One OL account may be learner + instructor + staff. CAP allows candidate + centre staff on the same OL account (not arbitrary persona stacking: assessor/AB mixes stay 409).
LMS-02 Onboarding gate Per-persona draft → submit. Learner: names, gender, country/state/LGA (OL Address) + schemaVersion. Instructor/staff onboard after invite.
LMS-03 Content runtimes Native authoring + SCORM 1.2 import. LMS owns module/item order (not SCORM 2004 sequencing). cmi5/xAPI later.
LMS-04 Publish Course owner and platform staff may publish. Co-instructors edit only.
LMS-05 Co-instructors course_instructors: owner | co_instructor. Owner manages assignments.
LMS-06 Catalogue Authenticated browse of published courses. Item bodies / player / assessments require active entitlement.
LMS-07 Entitlements self_pay, admin_grant, cap_recommendation, sponsor. No LMS organizations. Orgs later on OL; sponsor stays “someone paid.”
LMS-08 Payment LMS prices; client POST /enrollments/{id}/checkout; OL InitiatePayment (referenceType: lms_enrollment).
LMS-09 CAP linkage Optional sectorId, tradeId, unitIds[] on course. gRPC RecommendCourses.
LMS-10 Certificates LMS certificate is independent of CAP. Completion also emits lms.course.completed.
LMS-11 Storage LMS never uses Cloudinary SDK. Zip + media via OL assetId. LMS extracts/serves SCORM player. Optional later: OL package adapter (S3/R2).
LMS-12 Staff roles admin, content_manager, support. Staff capabilities ⊇ instructor, broader scope.
LMS-13 Instructors Invited strictly by the platform.
ID Topic Notes
LMS-O1 Certificate PDF template System-generated vs uploaded template
LMS-O2 Max quiz attempts defaults Per-item override exists; platform default TBD
LMS-O3 Sponsor Paystack path v1 grant may record paymentId optionally; dedicated sponsor checkout later
LMS-O4 OL organizations When OL grows orgs, add entitlement source organization_seat without rewriting the player
  • lms_users.userId unique → OL users.id; all LMS FKs point at lms_users.id.
  • Two-layer authz: capability gate + assertScopeRBAC.
  • SCORM player URL is LMS-owned, not res.cloudinary.com.
  • Full topology: System architecture.