A classroom in this system is scoped to an academic year, has a grade level (K–12), and optionally a homeroom teacher. Students are assigned to one classroom at a time via res.partner.student_classroom_id.
School → Configuration → Academic Years → New.
| Field | Notes |
|---|---|
| Name | Display name (e.g. 2026–2027). |
| Code | Short unique key for cross-module references (e.g. AY2627). |
| Start Date / End Date | Calendar bounds. |
| State | draft → active → archived. Only one year can be active at a time (enforced by a Python constraint). |
Scroll to the Terms notebook tab on the academic year form. Click Add a line and create each term:
| Field | Notes |
|---|---|
| Name | E.g. First Semester. |
| Code | Unique within the academic year. E.g. S1. |
| Start / End Dates | Must fall within the parent year's date range and not overlap other terms in the same year (enforced). |
A typical US school year is two terms (S1 Aug–Dec, S2 Jan–May). Quarterly schools use four; IB schools use three; some colleges use six. All of these work.
School → Classrooms → New.

| Field | Notes |
|---|---|
| Name | Full display label (e.g. Grade 10 — A). |
| Code | Short unique label per academic year (e.g. 10A). |
| Grade Level | K through 12. Required. |
| Section | Letter / name that distinguishes sections of the same grade. |
| Capacity | Hard limit; the form will refuse to accept a new student above this number. Default 30. |
| Academic Year | Required. |
| Homeroom Teacher | Optional. Picker is filtered to hr.employee records flagged is_teacher. |
Two equivalent routes:
student_academic_year_id is filled in automatically from the classroom.The student count at the top of the classroom form (student_count) is computed live and checked against capacity on write.
Just change the classroom on the student's form. The student count on the old classroom drops and the count on the new one goes up. The student_academic_year_id updates automatically.
Each classroom is bound to one academic year. At promotion time you'd typically:
archived).11A, 11B for the students who were in 10A/10B).The system doesn't have a built-in "promote cohort" wizard yet. The blueprint for adding one is in docs/plan/ if you want to contribute it.
school.course) is who teaches a specific subject for a classroom+term. One teacher can appear on many courses; one course has exactly one teacher.The homeroom teacher often also teaches one or more courses for that classroom, but they don't have to. In the demo data, Maria Santos is homeroom for 9A and teaches Math for every classroom.