Group hierarchy: parents, children, inherited constraints

Premium

Premium feature. Group hierarchy and group time constraints are included in the Premium features.

Group hierarchy: organize a class's groups into parents and children, with time constraints that propagate through inheritance — for structures with several successive levels of subdivisions.

Beyond the flat "class → groups" model, Omniscol lets you organize a class's groups into a parent / child hierarchy and attach time constraints that propagate through inheritance. This is useful when the class is structured in several successive levels of subdivisions.

Building a hierarchy by drag and drop

On a class's groups page, drag and drop defines the hierarchy:

  • Dragging one group onto another → the child is attached to the parent.
  • Dragging a child onto the head of the group list → the child is taken out of its hierarchy and becomes a direct group of the class again.

There is no depth limit. You can have parent → child → grandchild chains if your structure calls for it.

Canonical example

A typical hierarchy:

Class 8A

A — parent

A1 — child of A

A2 — child of A

B — parent

B1 — child of B

B2 — child of B

Declared divisions:

  • (A, B) — A and B are mutually exclusive at the parent level.
  • (A1, A2) — under A, A1 and A2 are mutually exclusive.
  • (B1, B2) — under B, B1 and B2 are mutually exclusive.

Automatic consequence: Omniscol allows groups belonging to different branches to be scheduled simultaneously — for example A1 and B2 can share the same time slot, because no student belongs to both (A1 ⊂ A, B2 ⊂ B, and A ∩ B = ∅).

There is no need to declare the division (A1, B2): inheritance computes it.

Inheritance of time constraints

Beyond divisions, you can attach time constraints (availability, incompatibilities) to a group. With the hierarchy, these constraints are inherited from parents down to children — through a mask system that children can override.

Example: a time slot reserved for PE

A typical case:

  • Class 8A is unavailable on Monday afternoon (a global slot blocked for collective activities).
  • Through inheritance, all the groups of the class are unavailable on Monday afternoon.
  • Except the Sport group: you invert its mask to allow Monday afternoon and forbid everything else. All of this group's sports activities will then automatically land on this protected slot.

The mechanism is powerful: one parent mask + one child exception is enough to model dedicated time slots cleanly, without duplicating the constraint on every course.

Another example: an Electifs parent that carries the allowed slots

Another very useful case: the institution wants all electives to land only on a few reserved time slots, for example:

  • Monday morning,
  • Wednesday before 10 a.m.,
  • Friday morning.

You can then:

  • create a parent group Electifs that will not itself be assigned to courses;
  • express the allowed slots on this parent by painting the time constraints;
  • create below it as many subgroups as needed: Elective Marketing, Elective Finance, Elective Data, and so on.

All these subgroups then inherit the same allowed slots. If the rule changes, you edit a single place: the Electifs parent.

Electifs — parent group

Elective Marketing

Elective Finance

Elective Data

Allowed slots: Monday morning, Wednesday before 10 a.m., Friday morning

Inheritance rules

  • A child group inherits by default its parent's time constraints.
  • The child can override these constraints: add its own constraints or invert the mask.
  • The parent's divisions apply automatically to the children: if A and B form a division, the children of A are mutually exclusive with the children of B without any explicit declaration.

Inherited constraints and groups of groups

A group can also be a member of a group of groups. Its constraints — its own as well as those inherited from its class and its parent groups — are then consolidated with those of the other member groups: the group-of-groups lesson respects all these unavailabilities combined. Inheritance flows down the hierarchy, then consolidation gathers the members of the group of groups.

Class — unavailable Monday afternoon

Parent group

Child group — inherits from the parent

Group of groups

Another member group (other class)

Lesson: consolidated unavailabilities

See Groups of groups for the details of the consolidation.

When to use a hierarchy

  • Option bundles: a class with languages structured in levels (Advanced English > A1-Conversation, A1-Civilisation, A2-…).
  • Practicals with sub-rotations: two half-classes for the practical, each subdivided into subgroups for the experiments.
  • Differentiated tracks: a main track with distinct optional modules that are scheduled within the track.
  • Sport: a global group gathering all the students, with a dedicated mask for the sports slots.
  • Electives on reserved slots: a parent group Electifs carries the allowed slots, and its subgroups correspond to the actual electives.

When not to use it

  • For simple classes without hierarchical subdivision — the hierarchy adds complexity.
  • To mix students from different classes — that is the role of alignments or groups of groups, not of the intra-class hierarchy.
  • For open enrollment — use free groups.

How-to

Building a parent/child hierarchy

  1. Group hierarchy organizes a class's groups into parents and children, with inheritance of time constraints.

  2. First create the groups flat on the class's groups page: A, A1, A2, B, B1, B2, plus a cross-cutting Sport group. At this stage, they are all at the same level, attached directly to the class.

  3. Drag and drop to build the hierarchy: drag A1 onto AA1 becomes a child of A. Do the same for A2, B1, B2. You get two branches A → A1, A2 and B → B1, B2. There is no depth limit.

    To take a child out: drag it onto the head of the list of the class's groups.

  4. Declare the divisions: (A, B) at the parent level (mutually exclusive), (A1, A2) under A, (B1, B2) under B. No need to declare (A1, B2) as well: through inheritance, Omniscol works out that A1 ⊂ A and B2 ⊂ B are compatible (schedulable on the same time slot).

  5. Set the parent mask: on the class, mark Monday afternoon as unavailable. All the groups inherit it automatically. Check by viewing each group's grid: the slot is blocked everywhere.

  6. Invert the mask on Sport: on the Sport group's record, invert the time constraint — allow Monday afternoon, forbid everything else. All sports activities automatically land on this dedicated slot, without having to declare it again on every course.

  7. You now have an active hierarchy with inheritance of divisions and a dedicated time mask. The solver uses it during automatic generation, and inherited conflicts are reported in real time.

See also