Course Delivery
1. Overview
The core LMS workflow: course authoring, content delivery, enrollment, completion tracking, and transcript posting. Masters courses, course_enrollments, learning_records. Realizes COURSE-AUTHOR and CONTENT-DELIVERY capabilities. The backbone module every LMS deployment installs first; the other LMS modules embedded_master courses to reference content.
2. Entity summary
Name Description Course Enrollments Per-learner per-course state record: assigned date, due date, attempts, status (not_started, in_progress, completed, expired), score. The operational unit of learning tracking. Courses Atomic learning unit: e-learning module, video, live session, blended programme, external content. Carries content reference, duration, format, language, prerequisites, certification award. Learning Records Granular completion event for a course or activity, often xAPI / SCORM / cmi5 statement: actor, verb, object, result, timestamp. Feeds skill_profiles and certifications. Cost Centers Organisational unit for cost allocation: name, code, manager, hierarchy, currency. Drives variance reporting and project / departmental P&L. A near-universal foreign key in finance and payroll. Employees Canonical record of a person currently or formerly employed by the organization. Carries identity (legal name, contact, IDs), employment metadata (start date, end date, employment type, country), and pointers to position, job profile, org unit, manager, and life-event history. The most multi-mastered data object in the catalog: HCM masters the core HR slice, Payroll masters the comp/withholding slice, and IGA masters the identity/access slice. Onboarding, PA, and Talent Management consume or contribute. Org Units Node in the organizational hierarchy: division, business unit, department, team. Carries manager, cost center alignment, geographic scope, and parent/child relationships. HCM masters the operational hierarchy; EPM contributes the cost-center mapping (which would be Finance-mastered once a Finance/GL domain is loaded). Positions Approved slot in the org - a ‘chair’ with role definition, cost center, reporting line, location, and FTE allocation. Distinct from job_profiles (the catalog definition) and from employees (the person filling the slot). A position can be open, filled, or eliminated. SWP designs future positions via org_designs; HCM operationalizes them once approved.
flowchart TD
classDef master fill:#d4f4dd,stroke:#27ae60,color:#0b3d20;
classDef embedded_master fill:#fff4cc,stroke:#c79100,color:#5b4500;
classDef platform_builtin fill:#e0e0e0,stroke:#424242,color:#1a1a1a;
org_units["Org Units"]
courses["Courses"]
course_enrollments["Course Enrollments"]
learning_records["Learning Records"]
employees["Employees"]
hcm_positions["Positions"]
cost_centers["Cost Centers"]
users["Users"]
org_units -->|"groups"| employees
org_units -->|"contains"| hcm_positions
hcm_positions -->|"is_filled_by (opt)"| employees
cost_centers -->|"funds"| org_units
employees -->|"enrolls_in (opt)"| course_enrollments
org_units -->|"maps_to (opt)"| cost_centers
courses -->|"enrolled_via"| course_enrollments
course_enrollments -->|"produces"| learning_records
cost_centers -->|"funds (opt)"| course_enrollments
employees -->|"reflects (opt)"| learning_records
employees -->|"fills (opt)"| hcm_positions
employees -->|"learns_via"| course_enrollments
org_units -->|"rolls_up_to (opt)"| org_units
users -->|"owns (opt)"| courses
employees -->|"is_linked_to (opt)"| users
users -->|"manages (opt)"| hcm_positions
users -->|"leads (opt)"| org_units
users -->|"owns (opt)"| cost_centers
users -->|"authors (opt)"| courses
users -->|"enrolls in"| course_enrollments
users -->|"assigns (opt)"| course_enrollments
users -->|"earns"| learning_records
org_units -->|"has members (opt)"| users
class org_units embedded_master;
class courses master;
class course_enrollments master;
class learning_records master;
class employees embedded_master;
class hcm_positions embedded_master;
class cost_centers embedded_master;
class users platform_builtin;
style org_units stroke-dasharray:5 5;
style hcm_positions stroke-dasharray:5 5;
style cost_centers stroke-dasharray:5 5;
3. Entities catalog
# data_object role mastered in necessity pattern flags notes 1 course_enrollments (Course Enrollments)master - required personal_content - 2 courses (Courses)master - required - - 3 learning_records (Learning Records)master - required personal_content - 4 cost_centers (Cost Centers)embedded_master ERP-FIN (domain-level, not modularized) optional - - 5 employees (Employees)embedded_master hcm-core-workerrequired personal_content - 6 org_units (Org Units)embedded_master hcm-org-positionsoptional - - 7 hcm_positions (Positions)embedded_master hcm-org-positionsoptional single_approver -
4. Aliases and industry synonyms
(no industry-scoped aliases or non-synonym alias types loaded for this scope; generic synonyms are omitted as common knowledge.)
5. Relationships
5.1 Intra-scope edges
from verb to cardinality kind necessity owner_side notes org_unitsgroups employeesone_to_many reference required source - org_unitscontains hcm_positionsone_to_many reference required source - hcm_positionsis_filled_by employeesone_to_one reference optional target - cost_centersfunds org_unitsone_to_many reference required source - employeesenrolls_in course_enrollmentsone_to_many reference optional source - org_unitsmaps_to cost_centersone_to_one reference optional source - coursesenrolled_via course_enrollmentsone_to_many reference required source - course_enrollmentsproduces learning_recordsone_to_many composition required source - cost_centersfunds course_enrollmentsone_to_many reference optional source - employeesreflects learning_recordsone_to_many reference optional source - employeesfills hcm_positionsone_to_one reference optional source - employeeslearns_via course_enrollmentsone_to_many reference required source - org_unitsrolls_up_to org_unitsone_to_many reference optional source -
from verb to cardinality necessity owner_side notes usersowns coursesone_to_many optional source - employeesis_linked_to usersone_to_one optional target - usersmanages hcm_positionsone_to_many optional source - usersleads org_unitsone_to_many optional source - usersowns cost_centersone_to_many optional source - usersauthors coursesone_to_many optional source - usersenrolls in course_enrollmentsone_to_many required source - usersassigns course_enrollmentsone_to_many optional source - usersearns learning_recordsone_to_many required source - org_unitshas members usersone_to_many optional target -
5.3 Cross-scope edges
from verb to cardinality necessity notes employeestriggers iga_provisioning_eventsone_to_many optional - employeesfinalized by onboarding_document_collectionsone_to_many optional - pre_employeespromotes to employeesone_to_one required - legal_holdsidentifies_custodians_from employeesmany_to_many optional - legal_advice_recordsreferences employeesmany_to_many optional - employeesis host for host_assignmentsone_to_many required - job_profilesdefines hcm_positionsone_to_many required - employeessigns employment_contractsone_to_many required - employeesgenerates employment_eventsone_to_many required - employeestriggers asset_lifecycle_eventsone_to_many optional - employeesrequests absence_requestsone_to_many optional - employeesholds skill_profilesone_to_one optional - org_unitsengages contingent_workersone_to_many optional - org_unitsis_scored_by engagement_driversone_to_many optional - org_unitsis_measured_by people_kpisone_to_many optional - employeestriggers service_requestsone_to_many optional - org_unitstriggers iga_entitlement_definitionsone_to_many optional - employeestriggers pay_runsone_to_many optional - hcm_positionsspawns job_requisitionsone_to_many optional - job_profilesmaps_to coursesmany_to_many optional - employeesbecomes career_aspirationsone_to_one optional - employeesbecomes work_shiftsone_to_many optional - employeesbecomes compensation_statementsone_to_one optional - salary_bandsanchors hcm_positionsone_to_many optional - employeestriggers benefit_enrollmentsone_to_many optional - employeestriggers corporate_cardsone_to_many optional - employeesspawns onboarding_journeysone_to_one optional - employeesspawns hr_casesone_to_many optional - employeesfeeds headcount_plansone_to_many optional - employeesfeeds agency_time_entriesone_to_many optional - employeesonboarded by onboarding_journeysone_to_many required - onboarding_tasksspawns course_enrollmentsone_to_many optional - coursessequenced_into learning_pathsmany_to_many optional - coursesfulfills compliance_assignmentsone_to_many optional - coursesgrants learner_certificationsone_to_many optional - skill_profilesupdated by course_enrollmentsone_to_many optional - hcm_positionsrequires compliance_assignmentsone_to_many optional - org_unitssponsors compliance_assignmentsone_to_many optional - employeesreflected on compliance_assignmentsone_to_many optional - course_enrollmentsupdates career_aspirationsone_to_many optional - learning_recordsfeeds people_kpisone_to_many optional - employeesdeclares life_eventsone_to_many optional - org_unitssponsors benefit_plansmany_to_many optional - employeesupdated by life_eventsone_to_many optional - survey_campaignstargets org_unitsmany_to_many optional - org_unitsowns action_plansone_to_many optional - employeessubmits survey_responsesone_to_many optional - employeesflagged on engagement_driversone_to_many optional - employeesreflected on engagement_driversone_to_many optional - employeesraises hr_casesone_to_many required - employeesupdated by hr_casesone_to_many optional - case_categoriesdrives employeesone_to_many optional - contingent_workersreviewed_against employeesone_to_one optional - candidatesbecomes employeesone_to_one required - employeesenrolls_in benefit_enrollmentsone_to_many required - survey_campaignstargets employeesmany_to_many optional - workforce_scenariosdrives hcm_positionsone_to_many required - org_designsproposes hcm_positionsone_to_many required -
6. Cross-domain context
6.1 Master consumers (other modules / domains that embed this scope’s masters)
data_object other module / domain role necessity notes course_enrollmentsLMS-SKILLS (Skills and Learning Paths) - LMS embedded_master required - course_enrollmentsPA-PREDICTIVE-MODELS (Predictive Models) - PA consumer optional - course_enrollmentsTALENT-SUCCESSION-CAREER (Succession and Career Planning) - TALENT-MGMT consumer optional - coursesLMS-COMPLIANCE-TRAINING (Compliance Training) - LMS embedded_master required - learning_recordsPA-PREDICTIVE-MODELS (Predictive Models) - PA derived required -
6.2 Outbound handoffs (events this scope publishes)
source module target domain target module trigger_event payload integration friction description LMS-COURSE-DELIVERY HCM (domain-level) learning_record.postedlearning_recordsevent_stream low Authoritative learning transcript visible in HCM employee record. LMS-COURSE-DELIVERY LMS LMS-SKILLS course_enrollment.completedcourse_enrollmentslifecycle_progression low - LMS-COURSE-DELIVERY LMS LMS-COMPLIANCE-TRAINING course.publishedcourseslifecycle_progression low - LMS-COURSE-DELIVERY TALENT-MGMT TALENT-SUCCESSION-CAREER course_enrollment.completedcourse_enrollmentsevent_stream low Course completion updates skill-profile; TALENT-MGMT reflects in dev-plans and succession.
6.3 Inbound handoffs (events this scope reacts to)
target module source domain source module trigger_event payload integration friction description LMS-COURSE-DELIVERY HCM HCM-CORE-WORKER employee.createdemployeesevent_stream low New-hire creation provisions required-training assignments (compliance, role-based). Drives day-one and 30-day learning workflows.
6.4 Master providers (modules / domains that own masters this scope embeds)
data_object role here necessity canonical owner(s) slice notes cost_centersembedded_master optional ERP-FIN (Core ERP Financial Management) - employeesembedded_master required HCM-CORE-WORKER (HCM), PAYROLL (Payroll Management), IGA (Identity Governance and Administration), MDM (Master Data Management) - hcm_positionsembedded_master optional HCM-ORG-POSITIONS (HCM) - org_unitsembedded_master optional HCM-ORG-POSITIONS (HCM) -
7. Lifecycle states (per touched entity)
course_enrollments (Course Enrollment)
order state_name initial? terminal? requires_permission? derived gate description 1 enrolled✓ - - - Learner enrolled in the course but has not started. 2 in_progress- - - - Learner has begun the course content or activities. 3 completed- ✓ ✓ lms-course-delivery:completeLearner met all completion criteria with a passing score. 4 failed- ✓ ✓ lms-course-delivery:failLearner did not meet the passing criteria within allowed attempts. 5 expired- ✓ ✓ lms-course-delivery:expireEnrollment closed unmet at the due date or content expiry. 6 withdrawn- ✓ ✓ lms-course-delivery:withdrawLearner withdrew or was unenrolled before completion.
courses (Course)
order state_name initial? terminal? requires_permission? derived gate description 1 draft✓ - - - Course being authored by an instructional designer or SME. 2 in_review- - - - Content under review by L&D or compliance reviewers. 3 published- - ✓ lms-course-delivery:publishCourse released to the catalog and available for enrollment. 4 retired- ✓ ✓ lms-course-delivery:retireCourse removed from the catalog and kept for historical transcripts.
employees (Employee)
This scope holds employees as embedded_master ; the canonical state machine is owned by HCM-CORE-WORKER.
order state_name initial? terminal? requires_permission? derived gate description 1 draft✓ - - - Pre-hire stub created during requisition or onboarding handoff; not yet a worker of record. 2 active- - ✓ hcm-core-worker:active_employeeWorker is currently employed and appears in headcount, payroll eligibility, and directory feeds. 3 on_leave- - ✓ hcm-core-worker:on_leave_employeeEmployee is on approved leave (parental, medical, sabbatical); active record but suppressed from some downstream feeds. 4 suspended- - ✓ hcm-core-worker:suspended_employeeEmployment temporarily halted (investigation, disciplinary); pay and access may be paused. 5 terminated- ✓ ✓ hcm-core-worker:terminated_employeeEmployment ended (voluntary or involuntary); final pay processed, access deprovisioned.
hcm_positions (Position)
This scope holds hcm_positions as embedded_master ; the canonical state machine is owned by HCM-ORG-POSITIONS.
order state_name initial? terminal? requires_permission? derived gate description 1 proposed✓ - - - Position has been designed but not yet approved against the headcount plan. 2 approved- - ✓ hcm-org-positions:approved_positionCleared by headcount/finance owner; eligible to spawn a requisition. 3 open- - ✓ hcm-org-positions:open_positionApproved and actively being recruited against; not yet filled. 4 filled- - ✓ hcm-org-positions:filled_positionAn employee occupies the position. 5 frozen- - ✓ hcm-org-positions:frozen_positionTemporarily not fillable (hiring freeze, budget hold); retains the slot. 6 eliminated- ✓ ✓ hcm-org-positions:eliminated_positionRemoved from the org structure permanently.
learning_records (Learning Record)
order state_name initial? terminal? requires_permission? derived gate description 1 recorded✓ - - - Statement captured from the content runtime or external source. 2 validated- ✓ ✓ lms-course-delivery:validateRecord validated against schema and posted to the learner transcript. 3 voided- ✓ ✓ lms-course-delivery:voidRecord voided due to data error, duplicate, or content reset.
org_units (Org Unit)
This scope holds org_units as embedded_master ; the canonical state machine is owned by HCM-ORG-POSITIONS.
order state_name initial? terminal? requires_permission? derived gate description 1 draft✓ - - - Org unit defined as part of a future structure; not yet operational. 2 active- - ✓ hcm-org-positions:active_org_unitOperational unit; carries headcount, cost-center linkage, and reporting lines. 3 reorganized- ✓ ✓ hcm-org-positions:reorganized_org_unitUnit folded into or replaced by a new structure; references remain for history. 4 closed- ✓ ✓ hcm-org-positions:closed_org_unitUnit dissolved; no employees or positions reside in it.
8. Permissions and business rules (derived)
8.1 Permissions
permission tier description included in :admin? lms-course-delivery:readbaseline-read Read access to every entity in the module ✓ lms-course-delivery:managebaseline-manage Edit operational records ✓ lms-course-delivery:adminbaseline-admin Edit reference data and inherit every workflow gate below - lms-course-delivery:publishworkflow-gate (lifecycle) Transition courses into state published ✓ lms-course-delivery:retireworkflow-gate (lifecycle) Transition courses into state retired ✓ lms-course-delivery:completeworkflow-gate (lifecycle) Transition course_enrollments into state completed ✓ lms-course-delivery:failworkflow-gate (lifecycle) Transition course_enrollments into state failed ✓ lms-course-delivery:expireworkflow-gate (lifecycle) Transition course_enrollments into state expired ✓ lms-course-delivery:withdrawworkflow-gate (lifecycle) Transition course_enrollments into state withdrawn ✓ lms-course-delivery:validateworkflow-gate (lifecycle) Transition learning_records into state validated ✓ lms-course-delivery:voidworkflow-gate (lifecycle) Transition learning_records into state voided ✓ lms-course-delivery:view_all_course_enrollmentsoverride (personal_content) View all course_enrollments rows beyond row-scope ✓ lms-course-delivery:manage_all_course_enrollmentsoverride (personal_content) Manage all course_enrollments rows beyond row-scope ✓ lms-course-delivery:view_all_learning_recordsoverride (personal_content) View all learning_records rows beyond row-scope ✓ lms-course-delivery:manage_all_learning_recordsoverride (personal_content) Manage all learning_records rows beyond row-scope ✓
8.2 Business rules
rule_name data_object source flag intent course_enrollment_edit_scopecourse_enrollmentshas_personal_content Row-scope by default; override via lms-course-delivery:view_all_course_enrollments / lms-course-delivery:manage_all_course_enrollments learning_record_edit_scopelearning_recordshas_personal_content Row-scope by default; override via lms-course-delivery:view_all_learning_records / lms-course-delivery:manage_all_learning_records