Modèle de données complet : entités JSON, relations et ontologie

Cette page décrit le modèle de données complet d'un compte Omniscol : les entités, leurs champs principaux et leurs relations. Elle prolonge la page conceptuelle Organisation des données, qui explique le pourquoi (référentiel école ↔ EDT, copies locales) ; ici, l'objectif est le quoi — une cartographie structurelle exploitable, notamment pour mettre en relation le modèle avec un référentiel externe (progiciel de gestion, annuaire, système d'information).

Page technique. Cette référence s'adresse à l'intégration et à l'appariement avec un système externe. Elle n'est pas nécessaire à l'usage courant d'Omniscol : pour comprendre l'organisation des données côté métier, voir Organisation des données.

Toutes les données d’un établissement sont organisées sous forme d’arbre. Les entités décrites ci-dessous (utilisateurs, années scolaires, emplois du temps, absences, événements, etc.) correspondent aux différentes branches de cette structure. La référence normative est le schéma JSON du compte. Il se consulte sous deux formes :

  • la source brute (le schéma JSON tel quel), servie par le compte à l'adresse https://api.omniscol.com/api/guest/school_schema.json ;
  • la visionneuse arborescente lisible sur omniscol.com/fr/datamodel (et la référence d'API correspondante sur omniscol.com/fr/developers).

Ce schéma décrit exactement le stockage physique en base, sous forme de document JSON. Cette page en donne une lecture organisée et stable dans le temps.

Le document école : la racine

Le document racine regroupe le référentiel durable de l'établissement et toutes ses planifications. Ses sous-arbres de premier niveau :

Clé racine Entité Rôle
config SchoolConfig Paramètres du compte (pays, options, fuseau, synchronisation externe)
subjects_custom dictionnaire de SubjectFull Matières personnalisées de l'école
families_custom dictionnaire de Family Familles de matières personnalisées
users dictionnaire de User Annuaire des utilisateurs (tous rôles)
school_years tableau de SchoolYear Années scolaires et vacances
timetables dictionnaire de Timetable Emplois du temps (EDT)
absences regroupement d'Absence* Absences (professeurs, classes, encadrants, élèves)
staffing Staffing Module de membres du personnel et de surveillance
panels dictionnaire de Panel Panneaux d'affichage
events dictionnaire d'Event Évènements de type agenda
api, snapshots, jobs, translations, logo divers Réglages techniques et historiques

Les sous-arbres exprimés comme « dictionnaire » sont des objets JSON dont les clés sont des identifiants stables (le pivot de toute mise en relation externe — voir la section finale).

config

subjects_custom

families_custom

users

school_years

timetables

staffing

absences

panels

events

SCHOOL

string

_id

domaine de l'établissement

string

name

nom du compte

string

country

pays du compte

string

current_school_year

année scolaire courante

CONFIG

SUBJECT

FAMILY

USER

SCHOOL_YEAR

TIMETABLE

STAFFING

ABSENCE

PANEL

EVENT

Champs transversaux : _extids et wishes

Deux champs reviennent sur de nombreuses entités. Pour ne pas les répéter dans chaque schéma, ils sont décrits une seule fois ici.

  • _extids (ExternalIds) — table des identifiants de l'entité dans les systèmes externes, par exemple { "auriga": "12345" }. Présent sur les entités synchronisables (matières, familles, utilisateurs, sites, salles, ressources, professeurs, classes, groupes…). C'est le point d'ancrage d'un appariement avec un référentiel externe (voir la section finale).
  • wishescontraintes horaires : disponibilités, créneaux souhaités ou à éviter, volume horaire maximal, salle préférée… Présent sur la plupart des entités planifiables : utilisateurs, professeurs et matières d'un EDT, groupes, classes, salles, plages horaires de site, grilles d'encadrement. Selon le périmètre, ces contraintes sont globales (niveau école) ou propres à un EDT.

Niveau 1 — Le référentiel école

Le référentiel école contient ce qui est vrai pour l'établissement, indépendamment d'un EDT : le catalogue des matières, l'annuaire des utilisateurs, le calendrier des années scolaires.

family

parent

placements par année

groups

holidays

FAMILY

string

name

string

code

SUBJECT

string

name

string

short

libellé court (affichage)

string

code

string

parent

matière parente

string

family

famille

string

color

object

_extids

identifiants externes

USER

string

login

string

first_name

string

middle_name

(si pertinent pour le pays)

string

last_name

string

idnumber

identifiant officiel

array

roles

admin teacher staff student

string

customrole

Rôle personnalisé

int

servicehours

service horaire de référence

bool

external

intervenant extérieur

object

subjects

matières enseignées

object

wishes

disponibilités globales

object

_extids

PLACEMENT

string

class

classe affectée

string

date_start

string

date_end

array

groups

groupes affectés

PLACEMENT_GROUP

string

group

groupe groupset ou virtuel

array

weeks

plages de semaines

SCHOOL_YEAR

string

name

string

date_start

string

date_end

array

altweeks

semaines alternées

HOLIDAY

string

name

string

begin

string

end

Matières — SubjectFull / Subject / Family

Une matière personnalisée (SubjectFull) étend la matière de base (Subject : name, short, code, type, _extids) avec parent, family et color. Deux origines coexistent au niveau école : les matières communes au pays (lecture seule) et les matières personnalisées de l'établissement. Détails fonctionnels : Gérer les matières.

Utilisateurs — User (dont les professeurs)

Un User est l'entité unique de l'annuaire : identité (nom, prénom, idnumber, contact), authentification (login), roles, service horaire de référence (servicehours), disponibilités globales (champ wishes) et placements. Un professeur n'est pas une entité distincte : c'est un User ayant teacher parmi ses roles (un même utilisateur peut cumuler plusieurs rôles). Le champ placements (indexé par année scolaire) rattache un élève à une class et à des groups sur une période. Détails : Gérer les professeurs.

Années scolaires — SchoolYear / Holiday

Une SchoolYear définit date_start → date_end, la liste de holidays et les altweeks (semaines alternées). C'est un cadre temporel, pas un conteneur : les EDT s'y déploient sans y être imbriqués. Voir Année scolaire.

Niveau 2 — L'emploi du temps (EDT)

Un Timetable est une unité de planification cohérente. Il porte sa propre copie locale des professeurs, classes, groupes et matières — voir le principe de copie locale dans Organisation des données.

config

sites

teachers

classes

lessons (groupes de groupes, multi-groupes)

classrooms

resources

subjects

groups

courses

parent (hiérarchie)

origine (copie locale partielle)

teachers par défaut

copie locale partielle et lien implicite par identifiant

groupes constitutifs

TIMETABLE

bool

active

publié ?

array

lessons

séances transversales

TIMETABLE_CONFIG

string

type

week cycle calendar

int

time_period

durée du créneau

int

time_unit

subdivision du créneau

array

weekdays

jours ouvrés

string

displaymode

hours periods agenda

int

cycle

longueur du cycle

array

dates

bornes si calendar

object

date_windows

fenêtres de génération

TIMETABLE_SITE

string

name

object

distances

distances inter-sites

object

hours

grilles horaires

TIMETABLE_TEACHER

string

first_name

string

last_name

string

virtual_name

poste à pourvoir

array

subjects

matières du poste virtuel

string

idnumber

int

servicehours

surchargeable par EDT

string

classroom

salle préférée

TIMETABLE_CLASS

string

name

string

level

string

campus

array

sites

un seul site pris en compte

int

studentsnb

nombre d'élèves théoriques (pour calcul de salle adéquate)

string

classroom

salle par défaut

bool

offgrid

hors grille (calendar)

string

videolink

lien de visioconférence par défaut sur toutes les séances

string

resourcelink

lien de ressource (LMS) par défaut sur toutes les séances

LESSON

TIMETABLE_CLASSROOM

string

name

int

capacity

string

specialisation

spécialisation libre

int

maxclasses

classes simultanées

string

building

string

description

description libre

array

tags

étiquettes de caractéristiques ou matériels

TIMETABLE_RESOURCE

string

name

int

number

quantité disponible

TIMETABLE_CLASS_SUBJECT

string

code

hérité de Subject

array

incompatibilities

incompatibilités

number

pweight

poids pédagogique

array

teachers

professeurs par défaut

number

minutes

volume horaire visé

string

specialisation

salle requise

TIMETABLE_CLASS_GROUP

string

name

string

code

bool

free

groupe libre

string

parent

groupe parent

int

studentsnb

nombre d'élèves théoriques (pour calcul de salle adéquate)

SUBJECT

USER

GROUPSET_ITEM

string

name

string

code

array

groups

identifiants de groupes

Configuration — TimetableConfig

Le champ déterminant est type : week (hebdomadaire répété), cycle (cycle multi-jours, voir cycle) ou calendar (dates réelles, voir dates). time_period et time_unit définissent la trame de la grille ; weekdays les jours ouvrés ; date_windows les fenêtres de contrainte pour la génération automatique.

Sites, salles, ressources

Un TimetableSite (site) contient ses classrooms (TimetableClassroom : capacity, specialisation, maxclasses, building) et ses resources (TimetableResource : number = quantité disponible, dont le système assure la non-surréservation). distances modélise les temps de trajet inter-sites. Voir Sites, salles et ressources et Spécialisations de salles.

Professeurs de l'EDT — TimetableTeacher

Copie partielle enrichie d'un User : seuls quelques champs identifiants sont recopiés (first_name, last_name, idnumber), auxquels s'ajoutent des champs propres à la planification (servicehours surchargeable, classroom préférée, wishes par EDT). Un virtual_name non vide désigne un professeur virtuel (poste à pourvoir, sans User réel derrière).

Classes, matières de classe, groupes

  • TimetableClass : name, level, campus/sites, studentsnb, et trois sous-arbres clés — subjects, groups, courses.
  • TimetableClassSubject : copie locale d'une matière (étend Subject) enrichie pour la planification — minutes (volume visé), pweight (poids pédagogique), incompatibilities, teachers par défaut, specialisation de salle. Affecter une matière avec un type de cours crée une entrée distincte par type. Voir Cours, séances, types de cours.
  • TimetableClassGroup : un sous-ensemble d'une classe. free=true désactive les conflits avec le reste de la classe (groupe libre) ; parent établit la hiérarchie de groupes.

Règles entre groupes — partitions, alignements, groupes de groupes

Les relations entre groupes sont portées par le sous-arbre groups de l'EDT, sous trois formes :

Schéma Entité Sens Page
TimetableGroupTimeset partition Groupes d'une même classe mutuellement exclusifs, placés en parallèle (demi-classes, options) Divisions de classe
TimetableGroupSpaceset alignement Groupes de classes différentes travaillant ensemble sur des créneaux miroir Alignements
TimetableGroupGroupset groupe de groupes Méta-groupe (GroupsetItem : name, code, groups[]) réunissant plusieurs groupes Groupes de groupes

Voir aussi la vue d'ensemble Classe, groupe, sous-groupe.

Niveau 3 — Les séances de cours

Une séance de cours (Lesson) est l'unité d'enseignement réellement placée dans l'emploi du temps : durée, matière, groupe, professeur(s), salle, ressources, position et statut. Elle est générée à partir d'une matière de classe (voir niveau 2) et rattachée soit à une classe (class.courses), soit directement à l'emploi du temps (timetable.lessons) — ce dernier cas pour les groupes de groupes et les séances multi-groupes, transversales à plusieurs classes.

courses (séances d'une classe)

lessons (groupes de groupes, multi-groupes)

assoc · concat · weekalt (cours complexes)

group

teachers

classroom

resources

memos

position

TIMETABLE_CLASS

LESSON

int

duration

en nombre de périodes

int

duration_actual

minutes réelles

int

duration_accounted

minutes facturées

string

modality

in_person remote hybrid self_study

string

subject

identifiant de matière

string

group

identifiant de groupe

array

teachers

null force aucun professeur

string

classroom

null force aucune salle

string

status

planned draft canceled done

string

_id

identité stable de la séance

string

_osrev

révision (verrouillage optimiste)

TIMETABLE

TIMETABLE_CLASS_GROUP

TIMETABLE_TEACHER

TIMETABLE_CLASSROOM

TIMETABLE_RESOURCE

MEMO

string

comment

string

pub

visibilité du commentaire

string

owner

int

tstp

horodatage

POSITION

string

day

date, jour de semaine ou n° de jour de cycle

int

period

index du créneau dans la grille

string

start

heure de début exacte HH:MM (uniquement pour hors grille)

string

end

heure de fin exacte HH:MM (uniquement pour hors grille)

bool

fixed

séance punaisée (figée à la génération)

Cœur d'une séance de cours

Une séance de cours porte les champs de planification — duration (en périodes), duration_actual / duration_accounted (minutes réelles / facturées), modality, subject, group, teachers, classroom, resources — auxquels s'ajoutent sa position, son status, ses memos et une identité (_id, _osrev). Mettre teachers ou classroom à null force explicitement l'absence de professeur ou de salle.

Cours complexes

Une séance peut en regrouper d'autres :

  • assoc — séances associées : les groupes permutent ensemble.
  • concat — séances concaténées : strictement consécutives.
  • weekaltsemaines alternées : une variante de séance par semaine.

Ces mécanismes couvrent les cours complexes — voir Cours complexes : alternées, associées, concaténées.

Position d'une séance

La position est un objet qui place la séance dans le temps. Elle regroupe les champs suivants :

  • position.day — le jour de la séance, polymorphe selon le mode de l'EDT : un nom de jour (mondaysunday) en mode hebdomadaire, un numéro de jour de cycle ("1", "2"…) en mode cyclique, ou une date YYYY-MM-DD en mode calendrier. C'est un seul et même champ qui change de forme selon le mode ; il est toujours présent.
  • position.period — l'index du créneau dans la grille horaire. Une séance sans period ni start/end correspond à un jour férié.
  • position.start / position.end — heures exactes de début et de fin (HH:MM), pour les séances hors grille ou en mode calendrier qui ne s'alignent pas sur un créneau standard.
  • position.fixed — booléen (faux par défaut) : une séance punaisée, que la génération automatique ne déplacera pas.

Les séances d'une classe vivent dans class.courses ; le tableau timetable.lessons porte les séances transversales liées aux groupes de groupes.

Identité d'une séance

Chaque séance porte deux champs techniques d'identité, présents sur les comptes Premium :

  • _id — identifiant stable, attribué à la création de la séance et immuable ensuite (il combine un horodatage et une empreinte du contenu). C'est la clé d'une séance pour l'édition collaborative et pour un outil externe qui suit les séance dans le temps. Pour les occurrences récurrentes d'un EDT calendrier (semaines alternées, concaténations, associations), l'_id de chaque occurrence est dérivé de celui de la séance de base, qui reste reconnaissable.
  • _osrev — jeton de révision (verrouillage optimiste), incrémenté à chaque modification (horodatage + indice de modification), de manière strictement ordonnée alphabétiquement (ce qui permet aisément de savoir si une révision est plus récente qu'une autre). Il permet à l'édition collaborative de détecter et fusionner les modifications concurrentes : une révision client périmée signale un conflit, que le serveur tranche ou fusionne au lieu d'écraser silencieusement.

Absences

Les absences partagent une base commune (Absence : date_start, date_end, reason, hours, comment, statut) déclinée par sujet.

teachers

classes

staff

students

substitutes

ABSENCE

ABSENCE_TEACHER

string

date_start

string

date_end

string

reason

clé de traduction ou libellé

array

subjects

matières concernées

array

classes

classes concernées

string

status

ABSENCE_CLASS

ABSENCE_STAFF

ABSENCE_STUDENT

string

date_start

string

reason

array

subjects

matières exclues

string

status

SUBSTITUTE

string

substitute

nom du remplaçant

string

date_start

début de la règle (date)

string

date_end

fin de la règle (date)

array

hours

créneaux concernés (begin/end en minutes, day)

array

classes

classes concernées

array

subjects

matières concernées

string

comment

commentaire

Une AbsenceTeacher peut être restreinte à certaines subjects/classes et porte un tableau de règles de remplacement (substitutes, chacune un AbsenceTeacherSubstitute : remplaçant, période, créneaux horaires, classes et matières couvertes). Les statuts diffèrent par sujet (par exemple ok/aborted pour une classe). Voir le glossaire Remplacement / Suppléance et le module Gestion des absences.

Membres du personnel

Module distinct (vendu aussi en autonome) pour la surveillance et les services d'encadrement.

grids

assignments

staff

schedule

needs

STAFFING

STAFFING_GRID

array

dates

plages d'activité

array

days

array

periods

créneaux

STAFFING_ASSIGNMENT

string

name

int

req

minimum d'encadrants

int

ideal

effectif souhaité

string

site

string

priority

high normal low

array

allowed_staff

STAFFING_STAFF_MEMBER

string

first_name

string

last_name

string

virtual_name

poste à pourvoir

string

color

STAFFING_SCHEDULE

object

dates

vacations par date

STAFFING_NEED_SPAN

string

day

jour ou date

string

begin

HH:MM

string

end

HH:MM

int

headcount

effectif requis

Une StaffingGrid est le gabarit (jours, périodes) ; les assignments décrivent les postes (req/ideal, priority, needs détaillés par créneau via StaffingNeedSpan) ; le schedule matérialise les vacations effectives par date. Voir le module Service du personnel.

Évènements

Un Event est une entrée d'agenda posée par-dessus la grille : quelque chose qui se passe dans l'établissement sans être un cours régulier — un conseil de classe, une réunion parents-professeurs, un examen sur une journée, une sortie, une journée portes ouvertes. Les évènements sont rangés dans le dictionnaire events (clés event-<n>) et font partie des fonctionnalités Premium.

Champs d'un Event (obligatoires : title, start, end) :

  • title — intitulé affiché.
  • start / end — début et fin, au format YYYYMMDDTHHmmSS.
  • rrule — règle de récurrence éventuelle.
  • attendees — participants : un utilisateur, une classe, un groupe, un libellé libre (custom), ou bien tout l'établissement (everybody) / toute personne volontaire (anyone).
  • location — lieu(x) : une salle de l'EDT ou un libellé libre.
  • resources — ressources réservées pour l'évènement.
  • videolink — lien de visioconférence pour y assister à distance.
  • memos — commentaires ; color — couleur (hexadécimal).

Le fonctionnement côté usage (création, pose sur la grille, champs de l'interface) est décrit dans Évènements ponctuels.

Panneaux d'affichage

Un Panel est un panneau d'affichage des séances du jour (hall, salle, écran d'accueil…). Il définit la sélection des columns, la topline, les filters/exclusions et des réglages d'apparence. Voir le glossaire Panneau d'affichage.

Identifiants, copies locales et mise en relation avec un ERP

Pour relier le modèle Omniscol à un référentiel externe, trois principes priment :

  1. Les clés de dictionnaire sont les identifiants stables. Les matières, utilisateurs, professeurs, classes, groupes, salles, ressources sont indexés par un identifiant immuable (la clé JSON), et non par leur libellé. C'est ce pivot — jamais le name — qu'il faut utiliser pour toute correspondance.

  2. Le champ _extids (ExternalIds) porte les identifiants externes. Présent sur les entités synchronisables (Subject, Family, TimetableSite, TimetableClassroom, TimetableResource, TimetableTeacher, TimetableClass, TimetableClassGroup, User…), il associe à chaque entité ses identifiants dans les systèmes tiers, par exemple { "auriga": "12345", "aimaira": "67890" }. C'est le point d'ancrage canonique d'un appariement bidirectionnel.

  3. La copie locale école ↔ EDT est volontaire. Une matière de classe ou un professeur d'EDT est une copie enrichie, pas une référence vive. Un référentiel externe doit donc décider à quel niveau il s'apparie : le référentiel école (catalogue durable) ou un EDT précis (planification datée). Le détail des règles de propagation figure dans Organisation des données.

La configuration de synchronisation vit dans config.extsync (SchoolConfigExtsync) : systems (connecteurs configurés), sync (sens et entités), export et schedules, ainsi que des tables de correspondance (mappings) par clé et identifiant Omniscol. Côté accès programmatique, l'API REST et les jetons sont décrits dans Jetons d'API ; les connecteurs de synchronisation dans Synchronisation externe.

La forme exacte et exhaustive de chaque champ reste définie par le schéma JSON de référence du compte (https://api.omniscol.com/api/guest/school_schema.json, visionneuse lisible sur omniscol.com/fr/datamodel). En cas de divergence entre cette page et le schéma, le schéma fait foi.

Voir aussi