> ## Documentation Index
> Fetch the complete documentation index at: https://memberpulseptyltd.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Learning Management

> Manage courses, enrollments, and track member learning progress

Comprehensive LMS for creating courses, tracking progress, and managing member professional development.

## Capabilities

| Action             | ROLE\_CLIENT\_ADMIN | ROLE\_CLIENT\_USER |
| ------------------ | ------------------- | ------------------ |
| View courses       | ✅                   | ✅                  |
| Create courses     | ✅                   | ❌                  |
| Manage enrollments | ✅                   | ✅                  |
| View progress      | ✅                   | ✅                  |
| Issue certificates | ✅                   | ❌                  |

## Features

### Course Management

* Create and edit courses
* Organize into subjects/modules
* Multiple content types (video, PDF, text, quiz)
* Set completion criteria
* Assign CPD points

#### Acceptance Criteria

##### Frontend

* [ ] UI supports the workflows described in this feature.

##### Backend / API

* [ ] Backend behavior supports this feature as documented.

##### Permissions

* [ ] Access is restricted per the Capabilities matrix on this page (or equivalent role rules).

##### Business Rules

* [ ] All business rules for this feature are enforced.

##### Error Handling

* [ ] Error states return clear messages and appropriate HTTP status codes.

### Enrollment Management

* View all enrollments
* Manual enrollment
* Bulk enrollment
* Track completion rates
* Send reminders

#### Acceptance Criteria

##### Frontend

* [ ] UI supports the workflows described in this feature.

##### Backend / API

* [ ] Backend behavior supports this feature as documented.

##### Permissions

* [ ] Access is restricted per the Capabilities matrix on this page (or equivalent role rules).

##### Business Rules

* [ ] All business rules for this feature are enforced.

##### Error Handling

* [ ] Error states return clear messages and appropriate HTTP status codes.

### Progress Tracking

* Individual progress view
* Completion percentages
* Quiz scores
* Time spent
* Certificate status

#### Acceptance Criteria

##### Frontend

* [ ] UI supports the workflows described in this feature.

##### Backend / API

* [ ] Backend behavior supports this feature as documented.

##### Permissions

* [ ] Access is restricted per the Capabilities matrix on this page (or equivalent role rules).

##### Business Rules

* [ ] All business rules for this feature are enforced.

##### Error Handling

* [ ] Error states return clear messages and appropriate HTTP status codes.

### Event → Course Automation

Some organizations run live/Zoom events and then repackage the recording + materials as an on-demand course.

Expected workflow:

1. Select an Event
2. Choose **Create Draft Course from Event**
3. System clones:
   * Event title/description → course title/description
   * Zoom recording (when available) → draft course video content
   * Marketing/handout materials → draft course resources
4. Course is created in **draft** state for review/editing before publishing

#### Acceptance Criteria

##### Frontend

* [ ] Admin UI provides a “Create course from event” action on the event or within LMS.
* [ ] Generated course is clearly labeled as draft and shows which fields were cloned.

##### Backend / API

* [ ] Backend can create a draft course from an event and attach cloned assets.

##### Permissions

* [ ] Only `ROLE_CLIENT_ADMIN` can run event→course automation.

##### Business Rules

* [ ] The generated course defaults to draft and is not visible to members until published.
* [ ] If no Zoom recording is available, the course is created without video and flagged for follow-up.

##### Error Handling

* [ ] If cloning assets fails, the system reports which assets failed and allows retry.

#### UI Spec (from supplied spreadsheet)

The LMS is backed by the "Courses" section in `workspace/sources/entity-registry.csv`.

##### Course list / management (selected fields)

| Field                  | Input Type   | Required     | Notes                     |
| ---------------------- | ------------ | ------------ | ------------------------- |
| Course Name            | Text         | Required     | model: `name`             |
| Tile Short Description | Text         | Required     | Used in course tiles      |
| Course Category        | Multi-select | Required     | model: `courseCategories` |
| Course Type            | Selector     | Required     | model: `courseType`       |
| Publish Date / Time    | Date + Time  | Required     | model: `publishDateTime`  |
| Start Date             | Date         | Required     | model: `startDate`        |
| Close Date             | Date         | Not Required | model: `closeDate`        |
| CPD Points             | Number       | Required     | model: `cpdPoints`        |

##### Enrollment / progress (member enrollments)

| Field              | Type      | Notes                               |
| ------------------ | --------- | ----------------------------------- |
| course             | ManyToOne | Course                              |
| memberProfile      | ManyToOne | MemberProfile                       |
| status             | ManyToOne | CourseRegistrationStatus            |
| paymentStatus      | ManyToOne | PaymentStatus (pending/paid/failed) |
| enrolledAt         | datetime  | -                                   |
| completedAt        | datetime  | -                                   |
| progressPercentage | float     | -                                   |

#### Data Model Cross‑Reference (Entities)

* Course definition: [`Course`](/entities/core/course)
* Enrollment + progress: [`Course Enrollment`](/entities/core/course-enrollment)
* Paid enrollments / receipts / refunds: [`Payment Transaction`](/entities/integration/payment-transaction)
* CPD: [`CPD Record`](/entities/core/cpd-record) and [`CPD Category`](/entities/core/cpd-category)

## Implementation Contracts

### Backend (API)

```
GET    /api/courses                          # List courses
POST   /api/courses                          # Create course
GET    /api/courses/{id}                     # Get course details
PUT    /api/courses/{id}                     # Update course
DELETE /api/courses/{id}                     # Archive course

GET    /api/courses/{id}/enrollments         # List enrollments
POST   /api/courses/{id}/enrollments         # Enroll members
GET    /api/courses/{id}/progress            # Progress report

GET    /api/enrollments/{id}                 # Enrollment details
PUT    /api/enrollments/{id}/complete        # Mark complete
```
