# UML Class Diagram: Curriculum and Activity Domain

Package: `api.models` and `api.models.relations`.

## Class Responsibilities

| Class | Responsibility |
| --- | --- |
| `TtDepartment` | Department hierarchy and owner context for most timetabling records. |
| `TtZone` | Hierarchical campus/zone grouping, owned by a department. |
| `TtAcademicTerm` | Academic term metadata and week membership. |
| `TtWeek` | Canonical week number/start date. |
| `TtWeekPattern` | Named subset of weeks used by modules, templates, and activities. |
| `TtModuleGroup` | Curriculum grouping of modules. |
| `TtModule` | Module/course unit, linked to academic term, week pattern, and preferences. |
| `TtPos` | Programme of study for an academic term. |
| `TtPosModuleGroup` | Join entity connecting POS and module group, with code and module selection. |
| `TtPosModuleGroupModule` | Join entity connecting POS module groups to modules. |
| `TtPathway` | Generated or manual pathway selecting module combinations for a POS and term. |
| `TtStudentSet` | Cohort/student group, linked to POS, modules, activities, constraints, and resource maps. |
| `TtActivityType` | Activity categorization such as lecture/tutorial/lab style metadata. |
| `TtActivityTemplate` | Reusable template for creating schedulable activities. |
| `TtActivity` | Actual schedulable teaching activity, including weeks, assigned staff/location, variants, JTA relations, and scheduling fields. |

```mermaid
classDiagram
direction TB
class TtDepartment {
  +code
  +name
  +status
}
class TtZone {
  +code
  +name
  +status
}
class TtAcademicTerm {
  +code
  +name
  +start_date
  +end_date
  +status
}
class TtWeek {
  +week
  +start_date
}
class TtWeekPattern {
  +code
  +name
  +status
}
class TtModuleGroup {
  +code
  +name
  +status
}
class TtModule {
  +code
  +name
  +credit
  +status
}
class TtPos {
  +code
  +name
  +planned_size
  +status
}
class TtPosModuleGroup {
  +code
}
class TtPosModuleGroupModule
class TtPathway {
  +code
  +name
  +generate_type
  +status
}
class TtStudentSet {
  +code
  +name
  +planned_size
  +real_size
  +status
}
class TtActivityType {
  +code
  +name
  +status
}
class TtActivityTemplate {
  +code
  +name
  +duration
  +staff_requirement
  +location_requirement
  +status
}
class TtActivity {
  +code
  +name
  +duration
  +scheduled
  +scheduled_start_slot
  +is_jta
  +is_variant
  +status
}

TtDepartment --> TtDepartment : parent
TtDepartment --> TtZone : zone
TtZone --> TtZone : parent
TtZone --> TtDepartment : department
TtAcademicTerm "*" -- "*" TtWeek : TtAcademicTermWeek
TtWeekPattern "*" -- "*" TtWeek : TtWeekPatternWeek
TtWeekPattern --> TtAcademicTerm
TtModule --> TtDepartment
TtModule --> TtAcademicTerm
TtModule --> TtWeekPattern
TtModule "*" -- "*" TtWeek : TtModuleWeek
TtPos --> TtDepartment
TtPos --> TtAcademicTerm
TtPos "*" -- "*" TtModuleGroup : TtPosModuleGroup
TtPosModuleGroup --> TtPos
TtPosModuleGroup --> TtModuleGroup
TtPosModuleGroup "*" -- "*" TtModule : TtPosModuleGroupModule
TtPathway --> TtPos
TtPathway --> TtAcademicTerm
TtPathway "*" -- "*" TtPosModuleGroupModule : TtPathwayPosModuleGroupModule
TtStudentSet --> TtDepartment
TtStudentSet --> TtAcademicTerm
TtStudentSet --> TtPos
TtStudentSet "*" -- "*" TtModule : TtStudentSetModule
TtActivityTemplate --> TtActivityType
TtActivityTemplate --> TtAcademicTerm
TtActivityTemplate --> TtModule
TtActivityTemplate --> TtWeekPattern
TtActivityTemplate "*" -- "*" TtWeek : TtActivityTemplateWeek
TtActivity --> TtActivityTemplate
TtActivity --> TtActivityType
TtActivity --> TtAcademicTerm
TtActivity --> TtModule
TtActivity --> TtWeekPattern
TtActivity "*" -- "*" TtWeek : TtActivityWeek
TtActivity "*" -- "*" TtStudentSet : TtStudentSetActivity
TtActivity --> TtActivity : jta_parent
TtActivity --> TtActivity : variant_parent
```

