Class Groups, Years & Subgroups
Class Groups, Years & Subgroups
Timetabler has one entity for "a group of students" — the Class Group — and it's organized as a tree via an optional Parent Group, rather than having separate "Year" and "Subgroup" entities. What a given Class Group is depends entirely on where it sits in that tree:
- No parent, has children → it behaves like a "Year" (e.g.
Year 10containing10A,10B). - Has a parent, no children → an ordinary class (
10A) or a subgroup (10A-French, a child of10Afor students taking French instead of German). - No parent, no children → a plain standalone class, if your school doesn't use the Year-grouping level at all.
There's no depth limit — a subgroup can itself have children if you need finer splitting than one level.
Size
A leaf group (no children) has a real, directly-entered size — the number of students in it.
A group with children doesn't take a size input at all; the page shows its effective
size, computed as the sum of all its leaf descendants' sizes, and that's also what the solver
uses everywhere size matters (room capacity checks, the quick checks before generating, and so on). The
number you originally typed into a parent row's own size field when it had no children yet is
simply ignored once it has children — don't rely on it for anything.
Bulk import note: if you're importing a Year-level (parent) row via CSV, the
sizecolumn still has to be a positive number even though it's never actually used — any placeholder value works. This tripped up this project's own import template once; see Bulk Import via CSV.
Parallel siblings vs. parent/child conflicts
Two sibling subgroups (e.g. 10A-French and 10A-German, both children of 10A) don't
conflict with each other — they represent different, non-overlapping students, so the solver is
free to schedule lessons for both at the same time in different rooms.
A subgroup does conflict with its own ancestors, though — 10A-French's students are also
part of 10A, so a lesson targeting 10A directly and a lesson targeting 10A-French can't be
scheduled at the same time; they'd be double-booking the same real students.
Choosing a parent when editing
The parent picker on this page excludes the class you're currently editing and all of its own descendants — you can't nest a group inside itself or inside one of its own children. This is enforced on the server too, not just hidden from the dropdown.
Deleting
A Class Group can't be deleted while it still has children — remove or reparent the children first. (Lessons referencing a deleted Class Group aren't protected the same way — see the note on dangling references in Creating Lessons.)