Modello di dati completo: entità JSON, relazioni e ontologia

Questa pagina descrive il modello di dati completo di un account Omniscol: le entità, i loro campi principali e le loro relazioni. Estende la pagina concettuale Organizzazione dei dati, che spiega il perché (repertorio della scuola ↔ orario, copie locali); qui l'obiettivo è il cosa — una mappa strutturale utilizzabile, in particolare per mettere in relazione il modello con un repertorio esterno (gestionale, directory, sistema informativo).

Pagina tecnica. Questo riferimento si rivolge all'integrazione e all'appaiamento con un sistema esterno. Non è necessario all'uso corrente di Omniscol: per comprendere l'organizzazione dei dati sul piano operativo, si veda Organizzazione dei dati.

Tutti i dati di un istituto sono organizzati sotto forma di albero. Le entità descritte di seguito (utenti, anni scolastici, orari, assenze, eventi, ecc.) corrispondono ai diversi rami di questa struttura. Il riferimento normativo è lo schema JSON dell'account. Può essere consultato in due forme:

  • la sorgente grezza (lo schema JSON così com'è), servita dall'account all'indirizzo https://api.omniscol.com/api/guest/school_schema.json;
  • il visualizzatore ad albero, leggibile su omniscol.com/it/datamodel (e il riferimento API corrispondente su omniscol.com/it/developers).

Questo schema descrive esattamente l'archiviazione fisica nel database, sotto forma di documento JSON. Questa pagina ne fornisce una lettura organizzata e stabile nel tempo.

Il documento scuola: la radice

Il documento radice riunisce il repertorio durevole dell'istituto e tutte le sue pianificazioni. I suoi sottoalberi di primo livello:

Chiave radice Entità Ruolo
config SchoolConfig Impostazioni dell'account (paese, opzioni, fuso orario, sincronizzazione esterna)
subjects_custom dizionario di SubjectFull Materie personalizzate della scuola
families_custom dizionario di Family Famiglie di materie personalizzate
users dizionario di User Directory degli utenti (tutti i ruoli)
school_years array di SchoolYear Anni scolastici e vacanze
timetables dizionario di Timetable Orari
absences raggruppamento di Absence* Assenze (professori, classi, personale, studenti)
staffing Staffing Modulo membri del personale e sorveglianza
panels dizionario di Panel Pannelli informativi
events dizionario di Event Eventi di tipo agenda
api, snapshots, jobs, translations, logo vari Impostazioni tecniche e cronologia

I sottoalberi indicati come «dizionario» sono oggetti JSON le cui chiavi sono identificativi stabili (il perno di qualsiasi messa in relazione esterna — si veda la sezione finale).

config

subjects_custom

families_custom

users

school_years

timetables

staffing

absences

panels

events

SCHOOL

string

_id

dominio dell'istituto

string

name

nome dell'account

string

country

paese dell'account

string

current_school_year

anno scolastico corrente

CONFIG

SUBJECT

FAMILY

USER

SCHOOL_YEAR

TIMETABLE

STAFFING

ABSENCE

PANEL

EVENT

Campi trasversali: _extids e wishes

Due campi ricorrono su molte entità. Per non ripeterli in ogni schema, sono descritti qui una sola volta.

  • _extids (ExternalIds) — tabella degli identificativi dell'entità nei sistemi esterni, ad esempio { "auriga": "12345" }. Presente sulle entità sincronizzabili (materie, famiglie, utenti, siti, aule, risorse, professori, classi, gruppi…). È il punto di ancoraggio di un appaiamento con un repertorio esterno (si veda la sezione finale).
  • wishesvincoli orari: disponibilità, fasce orarie preferite o da evitare, volume orario massimo, aula preferita… Presente sulla maggior parte delle entità pianificabili: utenti, professori e materie di un orario, gruppi, classi, aule, fasce orarie di sito, griglie di sorveglianza. A seconda del perimetro, questi vincoli sono globali (livello scuola) o propri di un orario.

Livello 1 — Il repertorio della scuola

Il repertorio della scuola contiene ciò che è vero per l'istituto, indipendentemente da un orario: il catalogo delle materie, la directory degli utenti, il calendario degli anni scolastici.

family

parent

collocamenti per anno

groups

holidays

FAMILY

string

name

string

code

SUBJECT

string

name

string

short

etichetta breve (visualizzazione)

string

code

string

parent

materia genitore

string

family

famiglia

string

color

object

_extids

identificativi esterni

USER

string

login

string

first_name

string

middle_name

(se pertinente per il paese)

string

last_name

string

idnumber

identificativo ufficiale

array

roles

admin teacher staff student

string

customrole

Ruolo personalizzato

int

servicehours

servizio orario di riferimento

bool

external

collaboratore esterno

object

subjects

materie insegnate

object

wishes

disponibilità globale

object

_extids

PLACEMENT

string

class

classe assegnata

string

date_start

string

date_end

array

groups

gruppi assegnati

PLACEMENT_GROUP

string

group

gruppo groupset o virtuale

array

weeks

intervalli di settimane

SCHOOL_YEAR

string

name

string

date_start

string

date_end

array

altweeks

settimane alternate

HOLIDAY

string

name

string

begin

string

end

Materie — SubjectFull / Subject / Family

Una materia personalizzata (SubjectFull) estende la materia di base (Subject: name, short, code, type, _extids) con parent, family e color. Due origini coesistono a livello scuola: le materie comuni al paese (sola lettura) e le materie personalizzate dell'istituto. Dettagli funzionali: Gestire le materie.

Utenti — User (professori compresi)

Un User è l'entità unica della directory: identità (cognome, nome, idnumber, contatto), autenticazione (login), roles, servizio orario di riferimento (servicehours), disponibilità globale (campo wishes) e placements. Un professore non è un'entità distinta: è un User che ha teacher tra i suoi roles (uno stesso utente può cumulare più ruoli). Il campo placements (indicizzato per anno scolastico) collega uno studente a una class e a dei groups su un periodo. Dettagli: Gestire i professori.

Anni scolastici — SchoolYear / Holiday

Un SchoolYear definisce date_start → date_end, l'elenco delle holidays e le altweeks (settimane alternate). È un quadro temporale, non un contenitore: gli orari vi si dispiegano senza esservi annidati. Si veda Anno scolastico.

Livello 2 — L'orario

Un Timetable è un'unità di pianificazione coerente. Porta la propria copia locale di professori, classi, gruppi e materie — si veda il principio della copia locale in Organizzazione dei dati.

config

sites

teachers

classes

lessons (gruppi di gruppi, multi-gruppo)

classrooms

resources

subjects

groups

courses

parent (gerarchia)

origine (copia locale parziale)

professori predefiniti

copia locale parziale e collegamento implicito tramite identificativo

gruppi costitutivi

TIMETABLE

bool

active

pubblicato?

array

lessons

lezioni trasversali

TIMETABLE_CONFIG

string

type

week cycle calendar

int

time_period

durata della fascia

int

time_unit

suddivisione della fascia

array

weekdays

giorni lavorativi

string

displaymode

hours periods agenda

int

cycle

lunghezza del ciclo

array

dates

estremi se calendar

object

date_windows

finestre di generazione

TIMETABLE_SITE

string

name

object

distances

distanze tra siti

object

hours

griglie orarie

TIMETABLE_TEACHER

string

first_name

string

last_name

string

virtual_name

posto da coprire

array

subjects

materie del posto virtuale

string

idnumber

int

servicehours

sovrascrivibile per orario

string

classroom

aula preferita

TIMETABLE_CLASS

string

name

string

level

string

campus

array

sites

un solo sito preso in considerazione

int

studentsnb

numero di studenti teorici (per il calcolo dell'aula adeguata)

string

classroom

aula predefinita

bool

offgrid

fuori griglia (calendar)

string

videolink

link di videoconferenza predefinito su tutte le lezioni

string

resourcelink

link di risorsa (LMS) predefinito su tutte le lezioni

LESSON

TIMETABLE_CLASSROOM

string

name

int

capacity

string

specialisation

specializzazione libera

int

maxclasses

classi simultanee

string

building

string

description

descrizione libera

array

tags

etichette di caratteristiche o attrezzature

TIMETABLE_RESOURCE

string

name

int

number

quantità disponibile

TIMETABLE_CLASS_SUBJECT

string

code

ereditato da Subject

array

incompatibilities

incompatibilità

number

pweight

peso pedagogico

array

teachers

professori predefiniti

number

minutes

volume orario previsto

string

specialisation

aula richiesta

TIMETABLE_CLASS_GROUP

string

name

string

code

bool

free

gruppo libero

string

parent

gruppo genitore

int

studentsnb

numero di studenti teorici (per il calcolo dell'aula adeguata)

SUBJECT

USER

GROUPSET_ITEM

string

name

string

code

array

groups

identificativi di gruppi

Configurazione — TimetableConfig

Il campo determinante è type: week (settimanale ripetuto), cycle (ciclo multi-giorno, si veda cycle) o calendar (date reali, si veda dates). time_period e time_unit definiscono la trama della griglia; weekdays i giorni lavorativi; date_windows le finestre di vincolo per la generazione automatica.

Siti, aule, risorse

Un TimetableSite (sito) contiene le sue classrooms (TimetableClassroom: capacity, specialisation, maxclasses, building) e le sue resources (TimetableResource: number = quantità disponibile, di cui il sistema garantisce la non sovraprenotazione). distances modella i tempi di percorrenza tra siti. Si veda Siti, aule e risorse e Specializzazioni delle aule.

Professori dell'orario — TimetableTeacher

Copia parziale arricchita di un User: solo alcuni campi identificativi vengono ricopiati (first_name, last_name, idnumber), ai quali si aggiungono campi propri della pianificazione (servicehours sovrascrivibile, classroom preferita, wishes per orario). Un virtual_name non vuoto designa un professore virtuale (posto da coprire, senza un User reale dietro).

Classi, materie di classe, gruppi

  • TimetableClass: name, level, campus/sites, studentsnb, e tre sottoalberi chiave — subjects, groups, courses.
  • TimetableClassSubject: copia locale di una materia (estende Subject) arricchita per la pianificazione — minutes (volume previsto), pweight (peso pedagogico), incompatibilities, teachers predefiniti, specialisation di aula. Assegnare una materia con un tipo di lezione crea una voce distinta per tipo. Si veda Corsi, lezioni, tipi di lezione.
  • TimetableClassGroup: un sottoinsieme di una classe. free=true disattiva i conflitti con il resto della classe (gruppo libero); parent stabilisce la gerarchia di gruppi.

Regole tra gruppi — partizioni, allineamenti, gruppi di gruppi

Le relazioni tra gruppi sono portate dal sottoalbero groups dell'orario, in tre forme:

Schema Entità Significato Pagina
TimetableGroupTimeset partizione Gruppi di una stessa classe mutuamente esclusivi, collocati in parallelo (mezze classi, opzioni) Partizioni di classe
TimetableGroupSpaceset allineamento Gruppi di classi differenti che lavorano insieme su fasce orarie speculari Allineamenti
TimetableGroupGroupset gruppo di gruppi Meta-gruppo (GroupsetItem: name, code, groups[]) che riunisce più gruppi Gruppi di gruppi

Si veda anche la panoramica Classe, gruppo, sottogruppo.

Livello 3 — Le lezioni

Una lezione (Lesson) è l'unità di insegnamento effettivamente collocata nell'orario: durata, materia, gruppo, professore/i, aula, risorse, posizione e stato. È generata a partire da una materia di classe (si veda il livello 2) e collegata a una classe (class.courses) oppure direttamente all'orario (timetable.lessons) — quest'ultimo caso per i gruppi di gruppi e le lezioni multi-gruppo, trasversali a più classi.

courses (lezioni di una classe)

lessons (gruppi di gruppi, multi-gruppo)

assoc · concat · weekalt (lezioni complesse)

group

teachers

classroom

resources

memos

position

TIMETABLE_CLASS

LESSON

int

duration

in numero di periodi

int

duration_actual

minuti reali

int

duration_accounted

minuti fatturati

string

modality

in_person remote hybrid self_study

string

subject

identificativo di materia

string

group

identificativo di gruppo

array

teachers

null forza nessun professore

string

classroom

null forza nessuna aula

string

status

planned draft canceled done

string

_id

identità stabile della lezione

string

_osrev

revisione (blocco ottimistico)

TIMETABLE

TIMETABLE_CLASS_GROUP

TIMETABLE_TEACHER

TIMETABLE_CLASSROOM

TIMETABLE_RESOURCE

MEMO

string

comment

string

pub

visibilità del commento

string

owner

int

tstp

marca temporale

POSITION

string

day

data, giorno della settimana o n° di giorno di ciclo

int

period

indice della fascia nella griglia

string

start

ora di inizio esatta HH:MM (solo fuori griglia)

string

end

ora di fine esatta HH:MM (solo fuori griglia)

bool

fixed

lezione fissata (bloccata alla generazione)

Il nucleo di una lezione

Una lezione porta i campi di pianificazione — duration (in periodi), duration_actual / duration_accounted (minuti reali / fatturati), modality, subject, group, teachers, classroom, resources — ai quali si aggiungono la sua position, il suo status, i suoi memos e un'identità (_id, _osrev). Impostare teachers o classroom a null forza esplicitamente l'assenza di professore o di aula.

Lezioni complesse

Una lezione può raggrupparne altre:

  • assoc — lezioni associate: i gruppi si scambiano insieme.
  • concat — lezioni concatenate: rigorosamente consecutive.
  • weekaltsettimane alternate: una variante di lezione per settimana.

Questi meccanismi coprono le lezioni complesse — si veda Lezioni complesse: alternate, associate, concatenate.

Posizione di una lezione

La position è un oggetto che colloca la lezione nel tempo. Riunisce i campi seguenti:

  • position.day — il giorno della lezione, polimorfo a seconda della modalità dell'orario: un nome di giorno (mondaysunday) in modalità settimanale, un numero di giorno di ciclo ("1", "2"…) in modalità ciclica, o una data YYYY-MM-DD in modalità calendario. È un unico e medesimo campo che cambia forma a seconda della modalità; è sempre presente.
  • position.period — l'indice della fascia nella griglia oraria. Una lezione senza periodstart/end corrisponde a un giorno festivo.
  • position.start / position.end — ore esatte di inizio e di fine (HH:MM), per le lezioni fuori griglia o in modalità calendario che non si allineano a una fascia standard.
  • position.fixed — booleano (falso per impostazione predefinita): una lezione fissata, che la generazione automatica non sposterà.

Le lezioni di una classe risiedono in class.courses; l'array timetable.lessons porta le lezioni trasversali legate ai gruppi di gruppi.

Identità di una lezione

Ogni lezione porta due campi tecnici di identità, presenti sugli account Premium:

  • _id — identificativo stabile, assegnato alla creazione della lezione e immutabile in seguito (combina una marca temporale e un'impronta del contenuto). È la chiave di una lezione per l'editing collaborativo e per uno strumento esterno che segue le lezioni nel tempo. Per le occorrenze ricorrenti di un orario calendario (settimane alternate, concatenazioni, associazioni), l'_id di ogni occorrenza è derivato da quello della lezione di base, che rimane riconoscibile.
  • _osrev — token di revisione (blocco ottimistico), incrementato a ogni modifica (marca temporale + indice di modifica), in modo rigorosamente ordinato in ordine alfabetico (il che permette di sapere facilmente se una revisione è più recente di un'altra). Permette all'editing collaborativo di rilevare e fondere le modifiche concorrenti: una revisione client scaduta segnala un conflitto, che il server dirime o fonde invece di sovrascrivere silenziosamente.

Assenze

Le assenze condividono una base comune (Absence: date_start, date_end, reason, hours, comment, stato) declinata per soggetto.

teachers

classes

staff

students

substitutes

ABSENCE

ABSENCE_TEACHER

string

date_start

string

date_end

string

reason

chiave di traduzione o etichetta

array

subjects

materie interessate

array

classes

classi interessate

string

status

ABSENCE_CLASS

ABSENCE_STAFF

ABSENCE_STUDENT

string

date_start

string

reason

array

subjects

materie escluse

string

status

SUBSTITUTE

string

substitute

nome del sostituto

string

date_start

inizio della regola (data)

string

date_end

fine della regola (data)

array

hours

fasce orarie interessate (begin/end in minuti, day)

array

classes

classi interessate

array

subjects

materie interessate

string

comment

commento

Un'AbsenceTeacher può essere ristretta a determinate subjects/classes e porta un array di regole di sostituzione (substitutes, ciascuna un AbsenceTeacherSubstitute: sostituto, periodo, fasce orarie, classi e materie coperte). Gli stati differiscono per soggetto (ad esempio ok/aborted per una classe). Si veda la voce di glossario Sostituzione / Supplenza e il modulo Gestione delle assenze.

Membri del personale

Modulo distinto (venduto anche in autonomo) per la sorveglianza e i servizi di vigilanza.

grids

assignments

staff

schedule

needs

STAFFING

STAFFING_GRID

array

dates

intervalli di attività

array

days

array

periods

fasce orarie

STAFFING_ASSIGNMENT

string

name

int

req

minimo di sorveglianti

int

ideal

organico auspicato

string

site

string

priority

high normal low

array

allowed_staff

STAFFING_STAFF_MEMBER

string

first_name

string

last_name

string

virtual_name

posto da coprire

string

color

STAFFING_SCHEDULE

object

dates

turni per data

STAFFING_NEED_SPAN

string

day

giorno o data

string

begin

HH:MM

string

end

HH:MM

int

headcount

organico richiesto

Una StaffingGrid è il modello (giorni, periodi); gli assignments descrivono i posti (req/ideal, priority, needs dettagliati per fascia oraria tramite StaffingNeedSpan); lo schedule concretizza i turni effettivi per data. Si veda il modulo Servizio del personale.

Eventi

Un Event è una voce di agenda posta sopra la griglia: qualcosa che accade nell'istituto senza essere una lezione regolare — un consiglio di classe, un colloquio genitori-professori, un esame su una giornata, un'uscita, una giornata di porte aperte. Gli eventi sono raccolti nel dizionario events (chiavi event-<n>) e fanno parte delle funzionalità Premium.

Campi di un Event (obbligatori: title, start, end):

  • title — titolo visualizzato.
  • start / end — inizio e fine, nel formato YYYYMMDDTHHmmSS.
  • rrule — regola di ricorrenza eventuale.
  • attendees — partecipanti: un utente, una classe, un gruppo, un' etichetta libera (custom), oppure l'intero istituto (everybody) / qualunque persona volontaria (anyone).
  • location — luogo/luoghi: un'aula dell'orario o un'etichetta libera.
  • resources — risorse riservate per l'evento.
  • videolink — link di videoconferenza per assistervi a distanza.
  • memos — commenti; color — colore (esadecimale).

Il funzionamento sul piano dell'uso (creazione, posa sulla griglia, campi dell'interfaccia) è descritto in Eventi puntuali.

Pannelli informativi

Un Panel è un pannello informativo delle lezioni del giorno (atrio, aula, schermo di accoglienza…). Definisce la selezione delle columns, la topline, i filters/exclusions e delle impostazioni di aspetto. Si veda la voce di glossario Pannello informativo.

Identificativi, copie locali e messa in relazione con un ERP

Per collegare il modello Omniscol a un repertorio esterno, tre principi prevalgono:

  1. Le chiavi di dizionario sono gli identificativi stabili. Le materie, gli utenti, i professori, le classi, i gruppi, le aule, le risorse sono indicizzati da un identificativo immutabile (la chiave JSON), e non dalla loro etichetta. È questo perno — mai il name — che occorre utilizzare per qualsiasi corrispondenza.

  2. Il campo _extids (ExternalIds) porta gli identificativi esterni. Presente sulle entità sincronizzabili (Subject, Family, TimetableSite, TimetableClassroom, TimetableResource, TimetableTeacher, TimetableClass, TimetableClassGroup, User…), associa a ogni entità i suoi identificativi nei sistemi terzi, ad esempio { "auriga": "12345", "aimaira": "67890" }. È il punto di ancoraggio canonico di un appaiamento bidirezionale.

  3. La copia locale scuola ↔ orario è volontaria. Una materia di classe o un professore di orario è una copia arricchita, non un riferimento vivo. Un repertorio esterno deve quindi decidere a quale livello si appaia: il repertorio della scuola (catalogo durevole) o un orario preciso (pianificazione datata). Il dettaglio delle regole di propagazione figura in Organizzazione dei dati.

La configurazione di sincronizzazione risiede in config.extsync (SchoolConfigExtsync): systems (connettori configurati), sync (direzione ed entità), export e schedules, oltre a tabelle di corrispondenza (mappings) per chiave e identificativo Omniscol. Sul piano dell'accesso programmatico, l'API REST e i token sono descritti in Token API; i connettori di sincronizzazione in Sincronizzazione esterna.

La forma esatta ed esaustiva di ogni campo resta definita dallo schema JSON di riferimento dell'account (https://api.omniscol.com/api/guest/school_schema.json, visualizzatore leggibile su omniscol.com/it/datamodel). In caso di divergenza tra questa pagina e lo schema, fa fede lo schema.

See also