Modelo de dados completo: entidades JSON, relações e ontologia

Esta página descreve o modelo de dados completo de uma conta Omniscol: as entidades, os seus campos principais e as suas relações. Ela prolonga a página conceitual Organização dos dados, que explica o porquê (referencial da escola ↔ horário, cópias locais); aqui, o objetivo é o quê — um mapa estrutural utilizável, em particular para relacionar o modelo com um referencial externo (software de gestão, diretório, sistema de informação).

Página técnica. Esta referência destina-se à integração e ao emparelhamento com um sistema externo. Ela não é necessária ao uso corrente do Omniscol: para compreender a organização dos dados no lado funcional, ver Organização dos dados.

Todos os dados de um estabelecimento são organizados em forma de árvore. As entidades descritas abaixo (utilizadores, anos letivos, horários, ausências, eventos, etc.) correspondem aos diferentes ramos desta estrutura. A referência normativa é o schema JSON da conta. Ele consulta-se sob duas formas:

  • a fonte bruta (o schema JSON tal como é), servida pela conta no endereço https://api.omniscol.com/api/guest/school_schema.json;
  • o visualizador em árvore legível em omniscol.com/pt/datamodel (e a referência de API correspondente em omniscol.com/pt/developers).

Este schema descreve exatamente o armazenamento físico na base, em forma de documento JSON. Esta página fornece uma leitura organizada e estável ao longo do tempo.

O documento escola: a raiz

O documento raiz reúne o referencial duradouro do estabelecimento e todas as suas planificações. Os seus subarvores de primeiro nível:

Chave raiz Entidade Papel
config SchoolConfig Parâmetros da conta (país, opções, fuso, sincronização externa)
subjects_custom dicionário de SubjectFull Matérias personalizadas da escola
families_custom dicionário de Family Famílias de matérias personalizadas
users dicionário de User Diretório dos utilizadores (todos os papéis)
school_years tabela de SchoolYear Anos letivos e férias
timetables dicionário de Timetable Horários
absences agrupamento de Absence* Ausências (professores, turmas, monitores, alunos)
staffing Staffing Módulo de membros do pessoal e de vigilância
panels dicionário de Panel Painéis de exibição
events dicionário de Event Eventos do tipo agenda
api, snapshots, jobs, translations, logo diversos Configurações técnicas e históricos

Os subarvores expressos como «dicionário» são objetos JSON cujas chaves são identificadores estáveis (o pivô de todo o mapeamento externo — ver a seção final).

config

subjects_custom

families_custom

users

school_years

timetables

staffing

absences

panels

events

SCHOOL

string

_id

domínio do estabelecimento

string

name

nome da conta

string

country

país da conta

string

current_school_year

ano letivo corrente

CONFIG

SUBJECT

FAMILY

USER

SCHOOL_YEAR

TIMETABLE

STAFFING

ABSENCE

PANEL

EVENT

Campos transversais: _extids e wishes

Dois campos surgem em numerosas entidades. Para não os repetir em cada schema, eles são descritos uma única vez aqui.

  • _extids (ExternalIds) — tabela dos identificadores da entidade nos sistemas externos, por exemplo { "auriga": "12345" }. Presente nas entidades sincronizáveis (matérias, famílias, utilizadores, campi, salas, recursos, professores, turmas, grupos…). É o ponto de ancoragem de um emparelhamento com um referencial externo (ver a seção final).
  • wishesrestrições horárias: disponibilidades, faixas horárias desejadas ou a evitar, volume horário máximo, sala preferida… Presente na maioria das entidades planificáveis: utilizadores, professores e matérias de um horário, grupos, turmas, salas, faixas horárias de campus, grades de vigilância. Conforme o perímetro, estas restrições são globais (nível escola) ou próprias de um horário.

Nível 1 — O referencial escola

O referencial escola contém o que é verdadeiro para o estabelecimento, independentemente de um horário: o catálogo das matérias, o diretório dos utilizadores, o calendário dos anos letivos.

family

parent

colocações por ano

groups

holidays

FAMILY

string

name

string

code

SUBJECT

string

name

string

short

rótulo curto (exibição)

string

code

string

parent

matéria parente

string

family

família

string

color

object

_extids

identificadores externos

USER

string

login

string

first_name

string

middle_name

(se pertinente para o país)

string

last_name

string

idnumber

identificador oficial

array

roles

admin teacher staff student

string

customrole

Papel personalizado

int

servicehours

carga horária de referência

bool

external

professor externo

object

subjects

matérias lecionadas

object

wishes

disponibilidades globais

object

_extids

PLACEMENT

string

class

turma atribuída

string

date_start

string

date_end

array

groups

grupos atribuídos

PLACEMENT_GROUP

string

group

grupo groupset ou virtual

array

weeks

intervalos de semanas

SCHOOL_YEAR

string

name

string

date_start

string

date_end

array

altweeks

semanas alternadas

HOLIDAY

string

name

string

begin

string

end

Matérias — SubjectFull / Subject / Family

Uma matéria personalizada (SubjectFull) estende a matéria de base (Subject: name, short, code, type, _extids) com parent, family e color. Duas origens coexistem ao nível escola: as matérias comuns ao país (somente leitura) e as matérias personalizadas do estabelecimento. Detalhes funcionais: Gerir as disciplinas.

Utilizadores — User (incluindo os professores)

Um User é a entidade única do diretório: identidade (nome, apelido, idnumber, contacto), autenticação (login), roles, carga horária de referência (servicehours), disponibilidades globais (campo wishes) e placements. Um professor não é uma entidade distinta: é um User que tem teacher entre os seus roles (um mesmo utilizador pode acumular vários papéis). O campo placements (indexado por ano letivo) vincula um aluno a uma class e a groups durante um período. Detalhes: Gerir os professores.

Anos letivos — SchoolYear / Holiday

Um SchoolYear define date_start → date_end, a lista de holidays e as altweeks (semanas alternadas). É um quadro temporal, não um contêiner: os horários desdobram-se dentro dele sem estarem nele aninhados. Ver Ano letivo.

Nível 2 — O horário

Um Timetable é uma unidade de planificação coerente. Ele carrega a sua própria cópia local dos professores, turmas, grupos e matérias — ver o princípio de cópia local em Organização dos dados.

config

sites

teachers

classes

lessons (grupos de grupos, multigrupo)

classrooms

resources

subjects

groups

courses

parent (hierarquia)

origem (cópia local parcial)

professores por defeito

cópia local parcial e vínculo implícito por identificador

grupos constitutivos

TIMETABLE

bool

active

publicado?

array

lessons

aulas transversais

TIMETABLE_CONFIG

string

type

week cycle calendar

int

time_period

duração da faixa horária

int

time_unit

subdivisão da faixa horária

array

weekdays

dias úteis

string

displaymode

hours periods agenda

int

cycle

comprimento do ciclo

array

dates

limites se calendar

object

date_windows

janelas de geração

TIMETABLE_SITE

string

name

object

distances

distâncias entre campi

object

hours

grades horárias

TIMETABLE_TEACHER

string

first_name

string

last_name

string

virtual_name

posto a preencher

array

subjects

matérias do posto virtual

string

idnumber

int

servicehours

sobrescrevível por horário

string

classroom

sala preferida

TIMETABLE_CLASS

string

name

string

level

string

campus

array

sites

apenas um campus considerado

int

studentsnb

número de alunos teóricos (para cálculo de sala adequada)

string

classroom

sala por defeito

bool

offgrid

fora da grade (calendar)

string

videolink

link de videoconferência por defeito em todas as aulas

string

resourcelink

link de recurso (LMS) por defeito em todas as aulas

LESSON

TIMETABLE_CLASSROOM

string

name

int

capacity

string

specialisation

especialização livre

int

maxclasses

turmas simultâneas

string

building

string

description

descrição livre

array

tags

etiquetas de características ou materiais

TIMETABLE_RESOURCE

string

name

int

number

quantidade disponível

TIMETABLE_CLASS_SUBJECT

string

code

herdado de Subject

array

incompatibilities

incompatibilidades

number

pweight

peso pedagógico

array

teachers

professores por defeito

number

minutes

volume horário visado

string

specialisation

sala requerida

TIMETABLE_CLASS_GROUP

string

name

string

code

bool

free

grupo livre

string

parent

grupo parente

int

studentsnb

número de alunos teóricos (para cálculo de sala adequada)

SUBJECT

USER

GROUPSET_ITEM

string

name

string

code

array

groups

identificadores de grupos

Configuração — TimetableConfig

O campo determinante é type: week (semanal repetido), cycle (ciclo multidia, ver cycle) ou calendar (datas reais, ver dates). time_period e time_unit definem a trama da grade; weekdays os dias úteis; date_windows as janelas de restrição para a geração automática.

Campi, salas, recursos

Um TimetableSite (campus) contém as suas classrooms (TimetableClassroom: capacity, specialisation, maxclasses, building) e os seus resources (TimetableResource: number = quantidade disponível, cuja não-sobrerreserva o sistema garante). distances modela os tempos de deslocamento entre campi. Ver Campi, salas e recursos e Especializações de salas de aula.

Professores do horário — TimetableTeacher

Cópia parcial enriquecida de um User: apenas alguns campos identificadores são recopiados (first_name, last_name, idnumber), aos quais se juntam campos próprios da planificação (servicehours sobrescrevível, classroom preferida, wishes por horário). Um virtual_name não vazio designa um professor virtual (posto a preencher, sem User real por detrás).

Turmas, matérias de turma, grupos

  • TimetableClass: name, level, campus/sites, studentsnb, e três subarvores-chave — subjects, groups, courses.
  • TimetableClassSubject: cópia local de uma matéria (estende Subject) enriquecida para a planificação — minutes (volume visado), pweight (peso pedagógico), incompatibilities, teachers por defeito, specialisation de sala. Atribuir uma matéria com um tipo de aula cria uma entrada distinta por tipo. Ver Cursos, aulas, tipos de aula.
  • TimetableClassGroup: um subconjunto de uma turma. free=true desativa os conflitos com o resto da turma (grupo livre); parent estabelece a hierarquia de grupos.

Regras entre grupos — divisões, alinhamentos, grupos de grupos

As relações entre grupos são portadas pelo subarvore groups do horário, sob três formas:

Schema Entidade Sentido Página
TimetableGroupTimeset divisão de turma Grupos de uma mesma turma mutuamente exclusivos, colocados em paralelo (meias turmas, opções) Divisões de turma
TimetableGroupSpaceset alinhamento de grupos Grupos de turmas diferentes que trabalham juntos em faixas horárias espelhadas Alinhamentos
TimetableGroupGroupset grupo de grupos Metagrupo (GroupsetItem: name, code, groups[]) que reúne vários grupos Grupos de grupos

Ver também a visão geral Turma, grupo, subgrupo.

Nível 3 — As aulas

Uma aula (Lesson) é a unidade de ensino realmente colocada no horário: duração, matéria, grupo, professor(es), sala, recursos, posição e estado. Ela é gerada a partir de uma matéria de turma (ver nível 2) e vinculada quer a uma turma (class.courses), quer diretamente ao horário (timetable.lessons) — este último caso para os grupos de grupos e as aulas multigrupo, transversais a várias turmas.

courses (aulas de uma turma)

lessons (grupos de grupos, multigrupo)

assoc · concat · weekalt (aulas complexas)

group

teachers

classroom

resources

memos

position

TIMETABLE_CLASS

LESSON

int

duration

em número de períodos

int

duration_actual

minutos reais

int

duration_accounted

minutos faturados

string

modality

in_person remote hybrid self_study

string

subject

identificador de matéria

string

group

identificador de grupo

array

teachers

null força nenhum professor

string

classroom

null força nenhuma sala

string

status

planned draft canceled done

string

_id

identidade estável da aula

string

_osrev

revisão (bloqueio otimista)

TIMETABLE

TIMETABLE_CLASS_GROUP

TIMETABLE_TEACHER

TIMETABLE_CLASSROOM

TIMETABLE_RESOURCE

MEMO

string

comment

string

pub

visibilidade do comentário

string

owner

int

tstp

carimbo de data/hora

POSITION

string

day

data, dia da semana ou nº de dia de ciclo

int

period

índice da faixa horária na grade

string

start

hora de início exata HH:MM (apenas para fora da grade)

string

end

hora de fim exata HH:MM (apenas para fora da grade)

bool

fixed

aula fixada (congelada na geração)

Núcleo de uma aula

Uma aula contém os campos de planificação — duration (em períodos), duration_actual / duration_accounted (minutos reais / faturados), modality, subject, group, teachers, classroom, resources — aos quais se juntam a sua position, o seu status, os seus memos e uma identidade (_id, _osrev). Colocar teachers ou classroom em null força explicitamente a ausência de professor ou de sala.

Aulas complexas

Uma aula pode reagrupar outras:

  • assoc — aulas associadas: os grupos permutam juntos.
  • concat — aulas concatenadas: estritamente consecutivas.
  • weekaltsemanas alternadas: uma variante de aula por semana.

Estes mecanismos cobrem as aulas complexas — ver Aulas complexas: alternadas, associadas, concatenadas.

Posição de uma aula

A position é um objeto que coloca a aula no tempo. Ela reúne os seguintes campos:

  • position.day — o dia da aula, polimorfo conforme o modo do horário: um nome de dia (mondaysunday) em modo semanal, um número de dia de ciclo ("1", "2"…) em modo cíclico, ou uma data YYYY-MM-DD em modo calendário. É um único e mesmo campo que muda de forma conforme o modo; está sempre presente.
  • position.period — o índice da faixa horária na grade horária. Uma aula sem period nem start/end corresponde a um feriado.
  • position.start / position.end — horas exatas de início e de fim (HH:MM), para as aulas fora da grade ou em modo calendário que não se alinham com uma faixa horária padrão.
  • position.fixed — booleano (falso por defeito): uma aula fixada, que a geração automática não deslocará.

As aulas de uma turma vivem em class.courses; a tabela timetable.lessons contém as aulas transversais ligadas aos grupos de grupos.

Identidade de uma aula

Cada aula contém dois campos técnicos de identidade, presentes nas contas Premium:

  • _id — identificador estável, atribuído na criação da aula e imutável em seguida (ele combina um carimbo de data/hora e uma impressão do conteúdo). É a chave de uma aula para a edição colaborativa e para uma ferramenta externa que acompanha as aulas ao longo do tempo. Para as ocorrências recorrentes de um horário calendário (semanas alternadas, concatenações, associações), o _id de cada ocorrência é derivado do da aula de base, que permanece reconhecível.
  • _osrev — token de revisão (bloqueio otimista), incrementado a cada modificação (carimbo de data/hora + índice de modificação), de maneira estritamente ordenada alfabeticamente (o que permite facilmente saber se uma revisão é mais recente do que outra). Ele permite à edição colaborativa detectar e fundir as modificações concorrentes: uma revisão de cliente desatualizada sinaliza um conflito, que o servidor resolve ou funde em vez de sobrescrever silenciosamente.

Ausências

As ausências partilham uma base comum (Absence: date_start, date_end, reason, hours, comment, estado) especializada por tipo.

teachers

classes

staff

students

substitutes

ABSENCE

ABSENCE_TEACHER

string

date_start

string

date_end

string

reason

chave de tradução ou rótulo

array

subjects

matérias em causa

array

classes

turmas em causa

string

status

ABSENCE_CLASS

ABSENCE_STAFF

ABSENCE_STUDENT

string

date_start

string

reason

array

subjects

matérias excluídas

string

status

SUBSTITUTE

string

substitute

nome do substituto

string

date_start

início da regra (data)

string

date_end

fim da regra (data)

array

hours

faixas horárias em causa (begin/end em minutos, day)

array

classes

turmas em causa

array

subjects

matérias em causa

string

comment

comentário

Uma AbsenceTeacher pode ser restringida a certas subjects/classes e contém um conjunto de regras de substituição (substitutes, cada uma um AbsenceTeacherSubstitute: substituto, período, faixas horárias, turmas e matérias cobertas). Os estados diferem consoante o tipo (por exemplo ok/aborted para uma turma). Ver o glossário Substituição / Reposição e o módulo Gestão de ausências.

Membros do pessoal

Módulo distinto (vendido também de forma autônoma) para a vigilância e os serviços de acompanhamento.

grids

assignments

staff

schedule

needs

STAFFING

STAFFING_GRID

array

dates

intervalos de atividade

array

days

array

periods

faixas horárias

STAFFING_ASSIGNMENT

string

name

int

req

mínimo de monitores

int

ideal

efetivo desejado

string

site

string

priority

high normal low

array

allowed_staff

STAFFING_STAFF_MEMBER

string

first_name

string

last_name

string

virtual_name

posto a preencher

string

color

STAFFING_SCHEDULE

object

dates

turnos por data

STAFFING_NEED_SPAN

string

day

dia ou data

string

begin

HH:MM

string

end

HH:MM

int

headcount

efetivo requerido

Uma StaffingGrid é o gabarito (dias, períodos); os assignments descrevem os postos (req/ideal, priority, needs detalhados por faixa horária via StaffingNeedSpan); o schedule materializa os turnos efetivos por data. Ver o módulo Gestão de pessoal.

Eventos

Um Event é uma entrada de agenda posta por cima da grade: algo que acontece no estabelecimento sem ser uma aula regular — um conselho de turma, uma reunião de pais e professores, um exame de um dia, uma saída, um dia de portas abertas. Os eventos são arrumados no dicionário events (chaves event-<n>) e fazem parte das funcionalidades Premium.

Campos de um Event (obrigatórios: title, start, end):

  • title — título exibido.
  • start / end — início e fim, no formato YYYYMMDDTHHmmSS.
  • rrule — regra de recorrência eventual.
  • attendees — participantes: um utilizador, uma turma, um grupo, um rótulo livre (custom), ou então todo o estabelecimento (everybody) / toda pessoa voluntária (anyone).
  • location — local(is): uma sala do horário ou um rótulo livre.
  • resources — recursos reservados para o evento.
  • videolink — link de videoconferência para assistir à distância.
  • memos — comentários; color — cor (hexadecimal).

O funcionamento no lado do uso (criação, colocação na grade, campos da interface) é descrito em Eventos pontuais.

Painéis de exibição

Um Panel é um painel de exibição das aulas do dia (hall, sala, ecrã de acolhimento…). Ele define a seleção das columns, a topline, os filters/exclusions e configurações de aparência. Ver o glossário Painel de display.

Identificadores, cópias locais e mapeamento para um ERP

Para ligar o modelo Omniscol a um referencial externo, três princípios prevalecem:

  1. As chaves de dicionário são os identificadores estáveis. As matérias, utilizadores, professores, turmas, grupos, salas, recursos são indexados por um identificador imutável (a chave JSON), e não pelo seu rótulo. É esse pivô — nunca o name — que se deve utilizar para toda a correspondência.

  2. O campo _extids (ExternalIds) contém os identificadores externos. Presente nas entidades sincronizáveis (Subject, Family, TimetableSite, TimetableClassroom, TimetableResource, TimetableTeacher, TimetableClass, TimetableClassGroup, User…), ele associa a cada entidade os seus identificadores nos sistemas de terceiros, por exemplo { "auriga": "12345", "aimaira": "67890" }. É o ponto de ancoragem canônico de um emparelhamento bidirecional.

  3. A cópia local escola ↔ horário é deliberada. Uma matéria de turma ou um professor de horário é uma cópia enriquecida, não uma referência viva. Um referencial externo deve, portanto, decidir a que nível ele se emparelha: o referencial escola (catálogo duradouro) ou um horário preciso (planificação datada). O detalhe das regras de propagação figura em Organização dos dados.

A configuração de sincronização vive em config.extsync (SchoolConfigExtsync): systems (conectores configurados), sync (sentido e entidades), export e schedules, bem como tabelas de correspondência (mappings) por chave e identificador Omniscol. No lado do acesso programático, a API REST e os tokens são descritos em Tokens de API; os conectores de sincronização em Sincronização externa.

A forma exata e exaustiva de cada campo permanece definida pelo schema JSON de referência da conta (https://api.omniscol.com/api/guest/school_schema.json, visualizador legível em omniscol.com/pt/datamodel). Em caso de divergência entre esta página e o schema, o schema prevalece.

Ver também