Phase 1: Academic System, Academic Year & Subject
Phase 1 establishes the foundational academic configuration models. All subsequent phases depend on these entities.
Purpose
Configure the school's grading rules, academic calendar, and subject catalogue. A school running multiple curricula (e.g. GES JHS and Cambridge IGCSE) creates separate Academic Systems with their own assessment types, weights, and grade boundaries.
Key Models
| Model | Purpose |
|---|---|
AcademicSystem | Named set of grading rules (assessment types, weights, grade boundaries) |
SchoolSection | Subdivision under an academic system (Primary, JHS, SHS) |
YearGroup | Cohort level within a section (e.g. "JHS 2") |
AcademicYear | Named school year with start/end dates |
AcademicPeriod | Term or semester within an academic year |
GradeScale | Grade scale type (numerical, letter, descriptive, points) |
GradeBoundary | Score range to grade mapping (e.g. 80--100 = Grade 1) |
AssessmentType | Category of assessment (class test, exam) with weight |
WeightingRule | Links assessment type to academic system with percentage weight |
Subject | Academic subject with code, section, optional department |
SubjectDocument | S3-backed document attached to a subject |
API Endpoints
| Method | Path | Purpose |
|---|---|---|
| GET/POST | /api/admin/academic-systems | List / create academic systems |
| GET/PATCH/DELETE | /api/admin/academic-systems/[id] | Detail / update / delete |
| GET/POST | /api/admin/academic-systems/[id]/sections | List / create sections |
| GET/PATCH/DELETE | /api/admin/academic-systems/[id]/sections/[sectionId] | Section CRUD |
| GET/POST | /api/admin/academic-systems/[id]/sections/[sectionId]/year-groups | Year group CRUD |
| GET/POST | /api/admin/academic-systems/[id]/grade-scales | Grade scale CRUD |
| GET | /api/admin/academic-systems/[id]/grade-scales/[scaleId]/boundaries | Grade boundaries |
| GET/POST | /api/admin/academic-systems/[id]/assessment-types | Assessment type CRUD |
| GET/PUT | /api/admin/academic-systems/[id]/weighting-rules | Weighting rule config |
| GET/POST | /api/admin/academic-years | List / create academic years |
| GET/PATCH/DELETE | /api/admin/academic-years/[id] | Detail / update / delete |
| GET/POST | /api/admin/academic-years/[id]/periods | Period CRUD |
| GET/POST | /api/admin/subjects | List / create subjects |
| GET/PATCH/DELETE | /api/admin/subjects/[id] | Subject CRUD |
| GET/POST | /api/admin/subjects/[id]/documents | Subject document CRUD |
Key Files
prisma/schema.prisma-- Phase 1 modelssrc/app/admin/academic-systems/-- Admin UI pagessrc/app/admin/academic-years/-- Academic year managementsrc/app/admin/subjects/-- Subject management