Volledig gegevensmodel: JSON-entiteiten, relaties en ontologie

Deze pagina beschrijft het volledige gegevensmodel van een Omniscol-account: de entiteiten, hun belangrijkste velden en hun onderlinge relaties. Ze bouwt voort op de conceptuele pagina Organisatie van de gegevens, die het waarom uitlegt (schoolregister ↔ rooster, lokale kopieën); hier gaat het om het wat — een bruikbare structurele kaart, met name om het model te koppelen aan een extern register (ERP-pakket, directoryservice, informatiesysteem).

Technische pagina. Deze naslag is bedoeld voor integratie en voor het afstemmen op een extern systeem. Ze is niet nodig voor het dagelijkse gebruik van Omniscol: zie Organisatie van de gegevens om te begrijpen hoe de gegevens aan de functionele kant zijn geordend.

Alle gegevens van een instelling zijn als een boomstructuur georganiseerd. De hieronder beschreven entiteiten (gebruikers, schooljaren, roosters, afwezigheden, evenementen enzovoort) komen overeen met de verschillende takken van die structuur. De normatieve referentie is het JSON-schema van het account. Dat is in twee vormen te raadplegen:

  • de onbewerkte bron (het JSON-schema als zodanig), die het account aanbiedt op https://api.omniscol.com/api/guest/school_schema.json;
  • de leesbare boomweergave op omniscol.com/nl/datamodel (en de bijbehorende API-referentie op omniscol.com/nl/developers).

Dat schema beschrijft precies de fysieke opslag in de database, in de vorm van een JSON-document. Deze pagina biedt daarvan een geordende lezing die in de tijd stabiel blijft.

Het schooldocument: de root

Het rootdocument bundelt het duurzame register van de instelling en al haar planningen. De deelbomen op het eerste niveau:

Rootsleutel Entiteit Rol
config SchoolConfig Instellingen van het account (land, opties, tijdzone, externe synchronisatie)
subjects_custom woordenboek van SubjectFull Aangepaste vakken van de school
families_custom woordenboek van Family Aangepaste vakkenfamilies
users woordenboek van User Gebruikerslijst (alle rollen)
school_years array van SchoolYear Schooljaren en vakanties
timetables woordenboek van Timetable Roosters
absences groepering van Absence* Afwezigheden (docenten, klassen, personeel, leerlingen)
staffing Staffing Module voor personeelsleden en toezicht
panels woordenboek van Panel Informatieschermen
events woordenboek van Event Evenementen van het type agenda
api, snapshots, jobs, translations, logo diverse Technische instellingen en historische gegevens

De deelbomen die als “woordenboek” zijn aangeduid, zijn JSON-objecten waarvan de sleutels stabiele identificaties zijn (het draaipunt van elke externe koppeling — zie de slotsectie).

config

subjects_custom

families_custom

users

school_years

timetables

staffing

absences

panels

events

SCHOOL

string

_id

domein van de instelling

string

name

naam van het account

string

country

land van het account

string

current_school_year

huidig schooljaar

CONFIG

SUBJECT

FAMILY

USER

SCHOOL_YEAR

TIMETABLE

STAFFING

ABSENCE

PANEL

EVENT

Overkoepelende velden: _extids en wishes

Twee velden komen op veel entiteiten terug. Om ze niet in elk schema te herhalen, worden ze hier één keer beschreven.

  • _extids (ExternalIds) — tabel met de identificaties van de entiteit in de externe systemen, bijvoorbeeld { "auriga": "12345" }. Aanwezig op de synchroniseerbare entiteiten (vakken, families, gebruikers, vestigingen, lokalen, resources, docenten, klassen, groepen…). Dat is het ankerpunt voor de koppeling met een extern register (zie de slotsectie).
  • wishes — tijdsbeperkingen: beschikbaarheid, gewenste of te vermijden tijdslots, maximaal aantal lesuren, voorkeurslokaal… Aanwezig op de meeste planbare entiteiten: gebruikers, docenten van een rooster, cursussen (vakken van de klas), groepen, klassen, lokalen, openingstijden van een vestiging, begeleidingsrasters. Afhankelijk van het bereik gelden die beperkingen globaal (schoolniveau) of alleen binnen één rooster.

Niveau 1 — Het schoolregister

Het schoolregister bevat wat waar is voor de instelling, los van welk rooster dan ook: de vakkencatalogus, de gebruikerslijst, de kalender van de schooljaren.

family

parent

plaatsingen per jaar

groups

holidays

FAMILY

string

name

string

code

SUBJECT

string

name

string

short

korte naam (weergave)

string

code

string

parent

bovenliggend vak

string

family

familie

string

color

object

_extids

externe identificaties

USER

string

login

string

first_name

string

middle_name

(indien relevant voor het land)

string

last_name

string

idnumber

officiële identificatie

array

roles

admin teacher staff student

string

customrole

Aangepaste rol

int

servicehours

diensturen ter referentie

bool

external

externe docent

object

subjects

onderwezen vakken

object

wishes

globale beschikbaarheid

object

_extids

PLACEMENT

string

class

toegewezen klas

string

date_start

string

date_end

array

groups

toegewezen groepen

PLACEMENT_GROUP

string

group

groep, groep van groepen of virtuele groep

array

weeks

weekbereiken

SCHOOL_YEAR

string

name

string

date_start

string

date_end

array

altweeks

afwisselende weken

HOLIDAY

string

name

string

begin

string

end

Vakken — SubjectFull / Subject / Family

Een aangepast vak (SubjectFull) breidt het basisvak (Subject: name, short, code, type, _extids) uit met parent, family en color. Op schoolniveau bestaan er twee herkomsten naast elkaar: de gemeenschappelijke vakken van het land (alleen-lezen) en de aangepaste vakken van de instelling. Functionele details: Vakken beheren.

Gebruikers — User (inclusief de docenten)

Een User is de enige entiteit van de gebruikerslijst: identiteit (achternaam, voornaam, idnumber, contactgegevens), authenticatie (login), roles, diensturen ter referentie (servicehours), globale beschikbaarheid (veld wishes) en placements. Een docent is geen afzonderlijke entiteit: het is een User met teacher bij zijn roles (dezelfde gebruiker kan meerdere rollen combineren). Het veld placements (geïndexeerd per schooljaar) koppelt een leerling aan een class en aan groups over een bepaalde periode. Details: Docenten beheren.

Schooljaren — SchoolYear / Holiday

Een SchoolYear legt date_start → date_end vast, de lijst met holidays en de altweeks (afwisselende weken). Het is een tijdskader, geen container: de roosters ontvouwen zich erbinnen zonder erin genest te zijn. Zie Schooljaar.

Niveau 2 — Het rooster

Een Timetable is een samenhangende planningseenheid. Het draagt zijn eigen lokale kopie van de docenten, klassen, groepen en vakken — zie het principe van de lokale kopie in Organisatie van de gegevens.

config

sites

teachers

classes

lessons (groepen van groepen, meerdere groepen)

classrooms

resources

subjects

groups

lessons

parent (hiërarchie)

herkomst (gedeeltelijke lokale kopie)

standaarddocenten

gedeeltelijke lokale kopie en impliciete koppeling via identificatie

samenstellende groepen

TIMETABLE

bool

active

gepubliceerd?

array

lessons

klasoverstijgende lessen

TIMETABLE_CONFIG

string

type

week cycle calendar

int

time_period

duur van het tijdslot

int

time_unit

onderverdeling van het tijdslot

array

weekdays

werkdagen

string

displaymode

hours periods agenda

int

cycle

lengte van de cyclus

array

dates

grenzen bij calendar

object

date_windows

datumvensters voor de roostergeneratie

TIMETABLE_SITE

string

name

object

distances

afstanden tussen vestigingen

object

hours

tijdrasters

TIMETABLE_TEACHER

string

first_name

string

last_name

string

virtual_name

in te vullen functie

array

subjects

vakken van de virtuele functie

string

idnumber

int

servicehours

overschrijfbaar per rooster

string

classroom

voorkeurslokaal

TIMETABLE_CLASS

string

name

string

level

string

campus

array

sites

slechts één vestiging wordt meegerekend

int

studentsnb

theoretisch aantal leerlingen (voor de keuze van een passend lokaal)

string

classroom

standaardlokaal

bool

offgrid

buiten tijdraster (calendar)

string

videolink

standaard videoconferentielink op alle lessen

string

resourcelink

standaard resourcelink (LMS) op alle lessen

LESSON

TIMETABLE_CLASSROOM

string

name

int

capacity

string

specialisation

vrije specialisatie

int

maxclasses

gelijktijdige klassen

string

building

string

description

vrije omschrijving

array

tags

labels voor kenmerken of uitrusting

TIMETABLE_RESOURCE

string

name

int

number

beschikbaar aantal

TIMETABLE_CLASS_SUBJECT

string

code

overgeërfd van Subject

array

incompatibilities

incompatibiliteiten

number

pweight

pedagogisch gewicht

array

teachers

standaarddocenten

number

minutes

beoogd aantal lesuren

string

specialisation

vereist lokaal

TIMETABLE_CLASS_GROUP

string

name

string

code

bool

free

vrije groep

string

parent

bovenliggende groep

int

studentsnb

theoretisch aantal leerlingen (voor de keuze van een passend lokaal)

SUBJECT

USER

GROUPSET_ITEM

string

name

string

code

array

groups

identificaties van groepen

Configuratie — TimetableConfig

Het bepalende veld is type: week (wekelijks herhaald), cycle (cyclus over meerdere dagen, zie cycle) of calendar (werkelijke data, zie dates). time_period en time_unit bepalen het stramien van het rooster; weekdays de werkdagen; date_windows de datumvensters die de automatische roostergeneratie beperken.

Vestigingen, lokalen, resources

Een TimetableSite (vestiging) bevat zijn classrooms (TimetableClassroom: capacity, specialisation, maxclasses, building) en zijn resources (TimetableResource: number = beschikbaar aantal, waarbij het systeem overboeking voorkomt). distances modelleert de reistijden tussen vestigingen. Zie Vestigingen, lokalen en resources en Lokaalspecialisaties.

Docenten van het rooster — TimetableTeacher

Verrijkte gedeeltelijke kopie van een User: alleen enkele identificerende velden worden overgenomen (first_name, last_name, idnumber), aangevuld met velden die eigen zijn aan de planning (overschrijfbare servicehours, classroom als voorkeurslokaal, wishes per rooster). Een niet-lege virtual_name duidt een virtuele docent aan (een nog in te vullen functie, zonder echte User erachter).

Klassen, vakken van de klas, groepen

  • TimetableClass: name, level, campus/sites, studentsnb, en drie belangrijke deelbomen — subjects, groups, lessons.
  • TimetableClassSubject: lokale kopie van een vak (breidt Subject uit), verrijkt voor de planning — minutes (beoogd aantal lesuren), pweight (pedagogisch gewicht), incompatibilities, standaard teachers, specialisation van het lokaal. Een vak toewijzen met een lestype maakt een afzonderlijke vermelding per type aan. Zie Cursussen, lessen, lestypes.
  • TimetableClassGroup: een deelverzameling van een klas. free=true schakelt de conflicten met de rest van de klas uit (vrije groep); parent brengt de groepshiërarchie tot stand.

Regels tussen groepen — klasverdelingen, groepsuitlijningen, groepen van groepen

De relaties tussen groepen zitten in de deelboom groups van het rooster, in drie vormen:

Schema Entiteit Betekenis Pagina
TimetableGroupTimeset klasverdeling Onderling uitsluitende groepen van dezelfde klas, parallel geplaatst (halve klassen, keuzevakken) Klasverdelingen
TimetableGroupSpaceset groepsuitlijning Groepen uit verschillende klassen die samenwerken op gespiegelde tijdslots Groepsuitlijningen
TimetableGroupGroupset groep van groepen Metagroep (GroupsetItem: name, code, groups[]) die meerdere groepen samenbrengt Groepen van groepen

Zie ook het overzicht Klas, groep, subgroep.

Niveau 3 — De lessen

Een les (Lesson) is de onderwijseenheid die daadwerkelijk in het rooster wordt geplaatst: duur, vak, groep, docent(en), lokaal, resources, positie en status. Ze wordt aangemaakt vanuit een vak van een klas (zie niveau 2) en hangt ofwel aan een klas (class.lessons), ofwel rechtstreeks aan het rooster (timetable.lessons) — dat laatste geval voor de groepen van groepen en voor de lessen met meerdere groepen, die verschillende klassen overstijgen.

lessons (lessen van een klas)

lessons (groepen van groepen, meerdere groepen)

assoc · concat · weekalt (complexe lessen)

group

teachers

classroom

resources

memos

position

TIMETABLE_CLASS

LESSON

int

duration

in aantal periodes

int

duration_actual

werkelijke minuten

int

duration_accounted

gefactureerde minuten

string

modality

in_person remote hybrid self_study

string

subject

identificatie van het vak

string

group

identificatie van de groep

array

teachers

bij null uitdrukkelijk geen docent

string

classroom

bij null uitdrukkelijk geen lokaal

string

status

planned draft canceled done

string

_id

stabiele identiteit van de les

string

_osrev

revisie (optimistisch vergrendelen)

TIMETABLE

TIMETABLE_CLASS_GROUP

TIMETABLE_TEACHER

TIMETABLE_CLASSROOM

TIMETABLE_RESOURCE

MEMO

string

comment

string

pub

zichtbaarheid van de opmerking

string

owner

int

tstp

tijdstempel

POSITION

string

day

datum, weekdag of nummer van de cyclusdag

int

period

index van het tijdslot in het tijdraster

string

start

exacte begintijd HH:MM (alleen buiten tijdraster)

string

end

exacte eindtijd HH:MM (alleen buiten tijdraster)

bool

fixed

vergrendelde les (vast bij de roostergeneratie)

De kern van een les

Een les draagt de planningsvelden — duration (in periodes), duration_actual / duration_accounted (werkelijke / gefactureerde minuten), modality, subject, group, teachers, classroom, resources — aangevuld met haar position, haar status, haar memos en een identiteit (_id, _osrev). teachers of classroom op null zetten forceert uitdrukkelijk dat er geen docent of geen lokaal is.

Complexe lessen

Eén les kan er meerdere samenbrengen:

  • assoc — gekoppelde lessen: de groepen wisselen samen.
  • concat — aaneengeschakelde lessen: strikt op elkaar volgend.
  • weekalt — afwisselende weken: één lesvariant per week.

Die mechanismen dekken de complexe lessen — zie Complexe lessen: afwisselend, gekoppeld, aaneengeschakeld.

De positie van een les

De position is een object dat de les in de tijd plaatst. Het bundelt de volgende velden:

  • position.day — de dag van de les, polymorf naargelang de modus van het rooster: een dagnaam (monday…sunday) in de weekmodus, een nummer van de cyclusdag ("1", "2"…) in de cyclische modus, of een datum YYYY-MM-DD in de kalendermodus. Het is telkens hetzelfde veld dat van vorm verandert naargelang de modus; het is altijd aanwezig.
  • position.period — de index van het tijdslot in het tijdraster. Een les zonder period en zonder start/end komt overeen met een feestdag.
  • position.start / position.end — exacte begin- en eindtijd (HH:MM), voor lessen buiten tijdraster of in kalendermodus die niet op een standaardtijdslot vallen.
  • position.fixed — booleaanse waarde (standaard onwaar): een vergrendelde les, die door de automatische roostergeneratie niet wordt verplaatst.

De lessen van een klas staan in class.lessons; de array timetable.lessons draagt de klasoverstijgende lessen die aan de groepen van groepen gekoppeld zijn.

De identiteit van een les

Elke les draagt twee technische identiteitsvelden, aanwezig op Premium-accounts:

  • _id — stabiele identificatie, toegekend bij het aanmaken van de les en daarna onveranderlijk (ze combineert een tijdstempel en een vingerafdruk van de inhoud). Het is de sleutel van een les voor het gezamenlijk bewerken en voor een externe toepassing die de lessen in de tijd volgt. Voor de terugkerende voorkomens van een kalenderrooster (afwisselende weken, aaneenschakelingen, koppelingen) is de _id van elk voorkomen afgeleid van die van de basisles, die herkenbaar blijft.
  • _osrev — token van de revisie (optimistisch vergrendelen), bij elke wijziging opgehoogd (tijdstempel + wijzigingsindex), in een strikt alfabetische volgorde (waardoor eenvoudig te zien is of de ene revisie recenter is dan de andere). Daardoor kan het gezamenlijk bewerken gelijktijdige wijzigingen opsporen en samenvoegen: een verouderde revisie aan clientzijde wijst op een conflict, dat de server beslecht of samenvoegt in plaats van stilzwijgend te overschrijven.

Afwezigheden

De afwezigheden delen een gemeenschappelijke basis (Absence: date_start, date_end, reason, hours, comment, status), per betrokkene uitgewerkt.

teachers

classes

staff

students

substitutes

ABSENCE

ABSENCE_TEACHER

string

date_start

string

date_end

string

reason

vertaalsleutel of label

array

subjects

betrokken vakken

array

classes

betrokken klassen

string

status

ABSENCE_CLASS

ABSENCE_STAFF

ABSENCE_STUDENT

string

date_start

string

reason

array

subjects

uitgesloten vakken

string

status

SUBSTITUTE

string

substitute

naam van de vervanger

string

date_start

begin van de regel (datum)

string

date_end

einde van de regel (datum)

array

hours

betrokken tijdslots (begin/end in minuten, day)

array

classes

betrokken klassen

array

subjects

betrokken vakken

string

comment

opmerking

Een AbsenceTeacher kan beperkt worden tot bepaalde subjects/classes en draagt een array met vervangingsregels (substitutes, elk een AbsenceTeacherSubstitute: vervanger, periode, tijdslots, gedekte klassen en vakken). De statussen verschillen per betrokkene (bijvoorbeeld ok/aborted voor een klas). Zie de woordenlijst Vervanging / Invalbeurt en de module Afwezigheidsbeheer.

Personeelsleden

Afzonderlijke module (ook zelfstandig verkocht) voor toezicht en begeleidingstaken.

grids

assignments

staff

schedule

needs

STAFFING

STAFFING_GRID

array

dates

activiteitsperiodes

array

days

array

periods

tijdslots

STAFFING_ASSIGNMENT

string

name

int

req

minimumaantal toezichthouders

int

ideal

gewenste bezetting

string

site

string

priority

high normal low

array

allowed_staff

STAFFING_STAFF_MEMBER

string

first_name

string

last_name

string

virtual_name

in te vullen functie

string

color

STAFFING_SCHEDULE

object

dates

diensten per datum

STAFFING_NEED_SPAN

string

day

dag of datum

string

begin

HH:MM

string

end

HH:MM

int

headcount

vereiste bezetting

Een StaffingGrid is het sjabloon (dagen, periodes); de assignments beschrijven de taken (req/ideal, priority, per tijdslot uitgewerkte needs via StaffingNeedSpan); het schedule legt de werkelijke diensten per datum vast. Zie de module Personeelsinzet.

Evenementen

Een Event is een agenda-item dat over het rooster heen wordt gelegd: iets wat in de instelling gebeurt zonder een gewone les te zijn — een rapportvergadering, een ouderavond, een examen van één dag, een excursie, een open dag. De evenementen staan in het woordenboek events (sleutels event-<n>) en horen bij de Premium-functies.

Velden van een Event (verplicht: title, start, end):

  • title — weergegeven titel.
  • start / end — begin en einde, in het formaat YYYYMMDDTHHmmSS.
  • rrule — eventuele regel voor herhaling.
  • attendees — deelnemers: een gebruiker, een klas, een groep, een vrij label (custom), of de hele instelling (everybody) / iedereen die wil (anyone).
  • location — plaats(en): een lokaal van het rooster of een vrij label.
  • resources — resources die voor het evenement zijn gereserveerd.
  • videolink — videoconferentielink om op afstand deel te nemen.
  • memos — opmerkingen; color — kleur (hexadecimaal).

Hoe dit in de praktijk werkt (aanmaken, op het rooster plaatsen, velden van de interface) wordt beschreven in Eenmalige evenementen.

Informatieschermen

Een Panel is een informatiescherm met de lessen van de dag (hal, lokaal, ingangsscherm…). Het legt de selectie van columns vast, de topline, de filters/exclusions en instellingen voor de weergave. Zie de woordenlijst Informatiescherm.

Identificaties, lokale kopieën en koppeling met een ERP

Om het model van Omniscol aan een extern register te koppelen, gelden drie principes:

  1. De sleutels van de woordenboeken zijn de stabiele identificaties. Vakken, gebruikers, docenten, klassen, groepen, lokalen en resources worden geïndexeerd op een onveranderlijke identificatie (de JSON-sleutel), niet op hun label. Dat draaipunt — nooit de name — moet u voor elke overeenkomst gebruiken.

  2. Het veld _extids (ExternalIds) draagt de externe identificaties. Aanwezig op de synchroniseerbare entiteiten (Subject, Family, TimetableSite, TimetableClassroom, TimetableResource, TimetableTeacher, TimetableClass, TimetableClassGroup, User…), koppelt het aan elke entiteit haar identificaties in de systemen van derden, bijvoorbeeld { "auriga": "12345", "aimaira": "67890" }. Dat is het canonieke ankerpunt voor een koppeling in twee richtingen.

  3. De lokale kopie school ↔ rooster is een bewuste keuze. Een vak van een klas of een docent van een rooster is een verrijkte kopie, geen levende verwijzing. Een extern register moet dus beslissen op welk niveau het aanhaakt: het schoolregister (duurzame catalogus) of een bepaald rooster (gedateerde planning). De doorwerkingsregels staan in detail in Organisatie van de gegevens.

De configuratie van de synchronisatie staat in config.extsync (SchoolConfigExtsync): systems (geconfigureerde connectoren), sync (richting en entiteiten), export en schedules, plus de koppeltabellen (mappings) per sleutel en per Omniscol-identificatie. Voor programmatische toegang worden de REST-API en de tokens beschreven in API-tokens; de connectoren voor synchronisatie in Externe synchronisatie.

De exacte en volledige vorm van elk veld blijft bepaald door het JSON-referentieschema van het account (https://api.omniscol.com/api/guest/school_schema.json, leesbare weergave op omniscol.com/nl/datamodel). Wijkt deze pagina af van het schema, dan geldt het schema.

Zie ook