> ## 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.

# Take Courses

> Enroll in and complete online courses

Browse, enroll, and complete courses to earn CPD points and certificates.

## Course Catalog

Browse available courses:

* Search by keyword
* Filter by category, duration, CPD points
* View free vs paid courses

## UI Spec (from supplied spreadsheet)

The spreadsheet defines the underlying course fields in `workspace/sources/entity-registry.csv` ("Courses"). Member-facing browsing and purchase/enrollment primarily relies on:

| 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`                 |
| Estimated Completion Time  | Number       | Required     | Minutes; model: `estimatedCompletionTime` |
| CPD Points                 | Number       | Required     | model: `cpdPoints`                        |
| CPD Category               | Multi-select | Required     | model: `cpdCategories`                    |
| Members Price              | Text         | Required     | Pricing for members                       |
| Non-Members Price          | Text         | Required     | model: `nonMembersPrice`                  |
| Members/Non-members Limits | Number       | Not Required | Capacity constraints if configured        |

Enrollment/payment state for a member is tracked via course registration/enrollment fields (status + paymentStatus).

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

* Course definition: [`Course`](/entities/core/course)
* Member enrollment + progress: [`Course Enrollment`](/entities/core/course-enrollment)
* Paid course purchases / invoices / receipts: [`Payment Transaction`](/entities/integration/payment-transaction)

## Course Details

Each course shows:

* Title and description
* Duration estimate
* CPD points awarded
* Instructor information
* Preview content
* Price (if paid)

## My Courses

View enrolled courses:

* In progress courses
* Completed courses
* Progress percentage
* Resume learning

Progress is saved automatically so members can partially complete a course and return later.

## Course Player

Interactive learning experience:

* Video lessons
* PDF materials
* Quizzes
* Progress tracking
* Bookmarking

### Partial completion & resume

* The platform records progress at the subject/lesson level.
* Members can stop and resume later from the last completed item.
* If a course has quizzes, quiz attempts and scores are retained per the course’s rules.

## Completion

Upon completion:

* Certificate issued
* CPD points awarded
* Progress marked complete

### CRM tags (optional)

When CRM sync is enabled, enrolling/completing a course applies predefined tags (see: [`CRM Tag`](/entities/integration/crm-tag)).

## Features

### Take Courses

#### 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.

## Implementation Contracts

### Backend (API)

```
GET    /api/courses                          # Course catalog
GET    /api/courses/{id}                     # Course details
POST   /api/courses/{id}/enroll              # Enroll in course

GET    /api/member/courses                   # My enrollments
GET    /api/member/courses/{id}/progress     # Course progress
PUT    /api/member/courses/{id}/progress     # Update progress
POST   /api/member/courses/{id}/complete     # Mark complete
```
