> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs-unsw-v6.advance-uac.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs-unsw-v6.advance-uac.com/_mcp/server.

# The catalogue

Every `programCode`, subject code and specialisation code you send is resolved against a
catalogue your staff maintain. When a code you send is rejected, or credit lands against a
course you did not expect, this is where the answer is.

## What is in it

| Screen            | Holds                                                                  |
| ----------------- | ---------------------------------------------------------------------- |
| Programs          | The programs applications can be made against, by code and year        |
| Specialisations   | Majors, minors and the rest, with their type                           |
| Courses           | Individual subjects, with their credit points                          |
| Unspecified codes | The placeholders credit falls back on — "6 credit points at 100 level" |
| Intakes           | The terms an application can name through `intakeCode`                 |

All of it is editable in the portal: a course added there is immediately a course credit can be
granted against, with no load or deploy in between. That matters when an agreement cites a
subject the catalogue has not caught up with.

## Years are separate

A program is identified by its code **and** its year, not by its code alone. The 2026 and 2027
editions of the same program are separate rows with their own curriculum, because what a
program requires changes between years and credit granted under one does not describe the
other.

This is why `programCode` and `year` name a program together, and why sending one without the
other keeps the value you did not send. See [Correcting records](/corrections).

## Course topics

Some courses are assessed in **parts** rather than as a whole. COMM1100 is Economics,
Law and Management; a piece of prior study is assessed against one of those parts, not
against the course entire.

A topic carries, alongside its name, the guidance an assessor uses to decide whether
some external course covers it — example course titles that have qualified, what the
outline has to contain, the words to look for, and the words that mean it does *not*
qualify despite looking close. That guidance is prose written to be read, not a rule
the system evaluates.

| Where                     |                                                                                           |
| ------------------------- | ----------------------------------------------------------------------------------------- |
| A course's **Topics** tab | the parts that course is assessed in, with their guidance                                 |
| **RPL → Topic Rule**      | every topic across every course, for when you know the topic and not which course owns it |

Topics belong to a course **and a year**, like everything else in the catalogue, so the
2026 and 2027 editions of a course carry their own.

One external course routinely covers topics belonging to several different courses —
a single economics unit might cover `COMM1100-Economics`, `COMM1150-Economics` and
`COMM1110-Ethics` at once. That is why a topic is a record in its own right rather than
a note on a course.

> **Note**
>
> Nothing about this changes what you send. Topics are defined and assessed by the
> institution's own staff, and the API's application and outcome shapes are unaffected.

## Loading rather than typing

For a whole year's catalogue, the API is the way in — see
[Curriculum structures](/curriculum-structures), which covers creating programs, their
structures and their entries, and publishing them from `DRAFT` to `LIVE`.

The portal screens are for amendments: a course that was missed, a name that changed, a
specialisation added late. Both write to the same catalogue.