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

# The Learning Plan object

> A catalogue learning item assigned to a person, with its lifecycle state, due date and rating

<Info>
  **Quick Summary:** A learning plan assigns a catalogue item to a person. It shares nothing with training records — the two are both "what has this person done", never one shape.
</Info>

## Attributes

| Field                                      | Type           | Description                                                             |
| ------------------------------------------ | -------------- | ----------------------------------------------------------------------- |
| `id`                                       | string         | Opaque plan id                                                          |
| `personId`                                 | string         | The person the plan belongs to                                          |
| `learning`                                 | object         | Reference to the catalogue item                                         |
| `state`                                    | string         | Lifecycle only: `not_started`, `in_progress`, `completed`, `archived`   |
| `dueDate` / `isPastDue`                    | —              | Due status is **derived** from the date, never a stored lifecycle state |
| `dueDateSetById`                           | string \| null | Who set the due date — the authority rule below depends on it           |
| `rating`                                   | string \| null | `positive`, `strongly_positive`, `negative`, or null                    |
| `careerAssignmentId`                       | string \| null | The career assignment the plan arose from, when career-linked           |
| `assignedAt` / `startedAt` / `completedAt` | —              | Stamped by state transitions                                            |

## Rules the API enforces

* A due date cannot be set in the past.
* A due date set by the person's **manager** cannot be changed by the person it belongs to.
* **A rating is the plan owner's own feedback**: the acting person behind the credential can rate only their own plans — even an admin identity is refused (403). Sending `rating: null` **clears** the rating; clearing is a real write, never a silent success.

## Assignment

`GET|POST|DELETE /api/v1/learning-items/{id}/people` mirror the career-assignment shape: who has the item, bulk assign, bulk unassign. A person's plans are read at `GET /api/v1/people/{id}/learning-plans`.

<Note>
  Careers can also assign learning as a side effect (assigning a career grants the target level's learnings), so a plan can appear without a direct assignment call — `careerAssignmentId` tells you which career it came from.
</Note>
