HandbookAcademics52

Tracks & streams.

Somewhere around the middle years, a school splits: sciences from arts, higher level from standard, one subject combination from another. YESS models that fork in two layers. A track is a light, colour-coded label a school pins on a section so 'Form 5 Sciences' reads at a glance. The real weight — which subjects a student actually commits to, with pick rules, level constraints, named combinations, a validator, and a consented add/drop flow — lives in a separate, program-scoped machinery. This handbook documents both, and is honest about which does the heavy lifting.

  • 4combination surfaces
  • 10rule types
  • 4enforcement modes
  • ≈11 minto read

Prologue

What a track actually is#

Read this before you build anything, because the word "track" carries more weight in conversation than it does in the data. In YESS a track is a tag — a named, colour-coded label with an optional description, created at /dashboard/tracks and pinned onto a section. "Sciences," "Arts," "Commercial," "Bilingual" are just values you type. A track has no subject list of its own, no higher-level / standard-level setting, and no table that assigns students to it directly. A student is "in" a track only because they sit in a section that carries it.

The substantive part — which subjects a student commits to — is a different, genuinely built machinery that hangs off the programme, not the track: subject groups with pick counts and levels, named paper combinations, a rules engine that validates a proposed set, and an elective self-service flow with parent consent and add/drop windows. That is where the real work happens, and most of this handbook is about it.

One honest caveat up front: the tagline's promise that tracks are "modelled as tracks the timetable and transcript both understand" is aspirational. Today the timetable solver and the transcript builder do not read the track tag — it is a label for humans, not yet a key the engines consume. The roadmap at the end says so plainly.

The label is light; the machinery beneath it is not.

Chapter one

The track tag#

Tracks are managed at /dashboard/tracks — a grid of cards with summary tiles for total, active, and inactive. A track carries a name, a short code (unique within the school), a colour swatch, a description, a display order, and an active flag. Deleting one is a soft delete, and a track that is switched off simply stops appearing as a choice. That is the entire model.

A track becomes visible on a section through the class and section editor at /dashboard/classes: a section's form shows a track picker only when the school has created at least one track, and choosing one stamps the track onto that section. From then on the coloured track badge rides alongside the section wherever it appears. Schools that don't stream simply never create a track, and the picker never shows up.

Designed product mock — the tracks grid: colour-coded cards for Sciences, Arts, and Commercial, with the create dialog for name, code, colour, and display order.

Chapter two

Subject groups and their rules#

The first real piece of the combination machinery is the subject group, managed per programme at /dashboard/programs/[id]/subject-groups. A subject group is a "pick from these" set with a minimum and a maximum number of choices — the IB-style structure where a student must choose, say, one subject from the sciences group and two from the humanities.

Each subject in a group carries its allowed levels — higher or standard — as a set of values, and the group can hold richer level constraints (for example, "at least one higher-level pick, at most three") as a structured rule alongside the pick counts. This is how the school encodes the shape of a valid choice before a single student picks.

Chapter three

Named paper combinations#

Where subject groups describe rules, a paper combination describes a named, ready-made bundle — the GCE A-level world's PCM (Physics, Chemistry, Maths), CMB (Chemistry, Maths, Biology), and the like. They live per programme at /dashboard/programs/[id]/paper-combinations.

A combination is a name and code, a set of subjects (each marked required or optional), and — usefully for guidance — the career targets and example university courses it opens up. So a student choosing a combination isn't reading a bare list of subject codes; they see "this is the science-and-engineering path, and here is where it leads."

Chapter four

The combination validator#

A school's subject-choice policy is enforced by a rules engine. Each rule has a type — drawn from ten, including must-include, must-exclude, mutually-exclusive, pair-required, count limits within a group, and age, grade, language, and capacity gates — and an enforcement mode that decides how hard it bites.

Four ways a rule bites

  1. 1

    Block

    The pick is rejected outright — the student cannot commit to a combination that breaks this rule. Reserved for the constraints that are simply not negotiable (a required core subject, a hard capacity cap).

  2. 2

    Warn with override

    The pick raises a warning that a person with authority can consciously override. For rules that are usually right but sometimes have a defensible exception.

  3. 3

    Recommend

    A soft steer — the engine advises against the pick but does not stop it. Guidance, not a gate.

  4. 4

    Inform

    A note surfaced for context, with no effect on whether the pick is allowed. The gentlest touch.

Every rule must carry a written rationale, so a policy is never a mystery constraint — the reason travels with the rule. When a student proposes a set of subjects, the validator evaluates every applicable rule and returns one result per violation, marked block, warn, or info, so the choice screen can show exactly what is wrong and how seriously.

Chapter five

The student's real combination#

All of the above is scaffolding for the one thing that is per-student: the set of subjects a student is actually enrolled in. Core subjects are enrolled for them; electives are a choice — and YESS runs that choice as a proper, consented workflow rather than an admin typing it in.

A student (or their linked parent) opens /portal/electives and requests an elective. The request runs through the validator, honours the programme's parent- consent setting, and lands as active or pending parent approval depending on policy; a parent then approves or rejects it. Dropping an elective is equally governed — it respects an add/drop window and refuses to drop a subject that has been locked for an exam. A single view resolves each student's effective subjects and tells you, for each, whether it is enrolled, pending approval, an opt-in still owed, or auto-enrolled.

Chapter six

What makes tracks & streams elite#

Five things done right

  1. 1

    Two models for two exam systems

    Subject groups with pick-counts and levels serve the IB world; named paper combinations with career targets serve the GCE A-level world. YESS doesn't force one shape on every school — it ships both and lets a programme use the one that fits.

  2. 2

    A policy engine with a conscience

    Ten rule types across four enforcement strengths — from a hard block to a gentle inform — and every rule must carry a written rationale. Subject-choice policy is expressed, graduated, and explained, not hard-coded.

  3. 3

    Choice as a consented workflow

    Electives are a request the validator checks, the parent approves, and an add/drop window governs — with exam-locked subjects protected from being dropped. The signature is captured in the app, not on a form the registrar chases.

  4. 4

    One honest view of a student's subjects

    A single resolved view tells you each subject's real state — enrolled, pending approval, opt-in owed, or auto-enrolled — so 'what is this student actually taking?' has one trustworthy answer.

  5. 5

    Streaming without ceremony

    For a school that just wants 'Sciences' and 'Arts' as coloured labels on its sections, the track tag delivers exactly that in one screen — no forced enrolment machinery, no heavyweight setup.

Planned features

What comes next#

The subject-combination machinery is real; the track tag is deliberately light, and a few of the connections implied by the marketing are honest roadmap. Here is the straight picture.

What is still ahead

  1. 1

    Tracks the timetable understands

    The timetable solver does not yet read the track tag — cross-track combined teaching is modelled through section groupings, not the track itself. Making a track a key the scheduler consumes is planned.

  2. 2

    Tracks the transcript understands

    The transcript builder does not read the track tag either, so a per-track report layout or track line on a transcript is roadmap, not a built feature.

  3. 3

    Track-scoped rules that actually scope

    A combination rule can be authored against a track, but the validator selects rules by programme and ignores the track scope — so track-scoped rules apply programme-wide today. Honouring the track scope is a planned fix.

  4. 4

    A richer track model

    A track is a colour label with no type or level enum and no subject set of its own. If a school needs tracks with structure — a track that carries its own default subjects or its own transcript rules — that is future work, not the current tag.

Adjacent modules

Where tracks & streams connect#

Tutorial

Do it step by step#

Stream a cohort the way YESS actually models it — a label on the section, a real combination underneath. Five steps, admin then student.

  1. 1

    Create the track label

    Open /dashboard/tracks and create a track — name it "Sciences," give it a code and a colour, and save. This is the badge that will read on the section, nothing heavier.

    Skip this entirely if you don't stream — the track picker only appears once at least one track exists.

  2. 2

    Pin it to a section

    In the class and section editor at /dashboard/classes, open a section and pick the track. From now on the coloured badge rides with that section.
  3. 3

    Define the real combination

    For the programme, build the actual choice: a subject group with pick counts and levels at /dashboard/programs/[id]/subject-groups, and a named bundle at /dashboard/programs/[id]/paper-combinations.

    Give a paper combination its career targets and example university courses — it turns a list of codes into guidance a family understands.

  4. 4

    Set the policy rules

    Add combination rules with the right enforcement strength — block the non-negotiable, warn-with-override the usual, recommend or inform the rest — and write a rationale for each. The validator will apply them when a student picks.

    Rules select by programme today — a track scope on a rule is stored but not yet enforced.

  5. 5

    Let the student choose

    The student or parent opens /portal/electives, requests an elective, the validator checks it, and the parent approves. The add/drop window governs any change from there.

A cohort that reads as 'Form 5 Sciences' at a glance — and, underneath the label, every student's real subjects, checked, consented, and locked.