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, seus campos principais e 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 (usuários, anos letivos, horários, ausências, eventos, etc.) correspondem aos diferentes ramos desta estrutura. A referência normativa é o schema JSON da conta. Ele pode ser consultado de 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 todos os seus planejamentos. Suas subárvores 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 |
Disciplinas personalizadas da escola |
families_custom |
dicionário de Family |
Famílias de disciplinas personalizadas |
users |
dicionário de User |
Diretório dos usuários (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 |
As subárvores expressas 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).
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 (disciplinas, famílias, usuários, locais, salas, recursos, professores, turmas, grupos…). É o ponto de ancoragem de um emparelhamento com um referencial externo (ver a seção final).wishes— restrições horárias: disponibilidades, faixas horárias desejadas ou a evitar, volume horário máximo, sala preferida… Presente na maioria das entidades planejáveis: usuários, professores de um horário, cursos, grupos, turmas, salas, intervalos de tempo dos locais, grades de vigilância. Conforme o escopo, 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 disciplinas, o diretório dos usuários, o calendário dos anos letivos.
Disciplinas — SubjectFull / Subject / Family
Uma disciplina personalizada (SubjectFull) estende a disciplina de base
(Subject: name, short, code, type, _extids) com parent,
family e color. Duas origens coexistem no nível da escola: as
disciplinas comuns ao país (somente leitura) e as disciplinas
personalizadas do estabelecimento. Detalhes funcionais:
Gerenciar as disciplinas.
Usuários — User (incluindo os professores)
Um User é a entidade única do diretório: identidade (nome, sobrenome,
idnumber, contato), 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 seus roles (um mesmo usuário 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: Gerenciar 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 planejamento coerente. Ele carrega sua
própria cópia local dos professores, turmas, grupos e disciplinas — ver
o princípio de cópia local em Organização dos dados.
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.
Locais, salas, recursos
Um TimetableSite (local) contém suas classrooms
(TimetableClassroom: capacity, specialisation, maxclasses,
building) e seus resources (TimetableResource: number =
quantidade disponível, cuja não-sobrerreserva o sistema garante).
distances modela os tempos de deslocamento entre locais. Ver
Locais, 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 do planejamento (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 trás).
Turmas, cursos, grupos
TimetableClass:name,level,campus/sites,studentsnb, e três subárvores-chave —subjects,groups,lessons.TimetableClassSubject: cópia local de uma disciplina (estendeSubject) enriquecida para o planejamento —minutes(volume visado),pweight(peso pedagógico),incompatibilities,teacherspor padrão,specialisationde sala. Atribuir uma disciplina com um tipo de aula cria uma entrada distinta por tipo. Ver Cursos, aulas, tipos de aula.TimetableClassGroup: um subconjunto de uma turma.free=truedesativa os conflitos com o resto da turma (grupo livre);parentestabelece a hierarquia de grupos.
Regras entre grupos — divisões, alinhamentos, grupos de grupos
As relações entre grupos ficam na subárvore 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, disciplina, grupo, professor(es), sala,
recursos, posição e estado. Ela é gerada a partir de um
curso (ver nível 2) e vinculada quer a uma turma (class.lessons),
quer diretamente ao horário (timetable.lessons) — este último
caso para os grupos de grupos e as aulas multigrupo, transversais
a várias turmas.
Núcleo de uma aula
Uma aula contém os campos de planejamento — duration (em períodos),
duration_actual / duration_accounted (minutos reais / faturados),
modality, subject, group, teachers, classroom, resources —
aos quais se juntam sua position, seu status, 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 geminadas: estritamente consecutivas.weekalt— semanas alternadas: uma variante de aula por semana.
Estes mecanismos cobrem as aulas complexas — ver Aulas complexas: alternadas, geminadas, associadas, em coensino.
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 (monday…sunday) em modo semanal, um número de dia de ciclo ("1","2"…) em modo cíclico, ou uma dataYYYY-MM-DDem 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 semperiodnemstart/endcorresponde 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 padrão): uma aula fixada, que a geração automática não deslocará.
As aulas de uma turma vivem em class.lessons; 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_idde 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 compartilham uma base comum (Absence: date_start,
date_end, reason, hours, comment, estado) especializada por tipo.
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 disciplinas cobertas). Os estados diferem conforme 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.
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 sobreposta à grade:
algo que acontece no estabelecimento sem ser uma aula
regular — um conselho de classe, uma reunião de pais e professores,
um exame de um dia, uma saída, um dia de portas abertas. Os
eventos são armazenados 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 formatoYYYYMMDDTHHmmSS.rrule— regra de recorrência eventual.attendees— participantes: um usuário, uma turma, um grupo, um rótulo livre (custom), ou então todo o estabelecimento (everybody) / toda pessoa voluntária (anyone).location— lugar(es): uma sala do horário ou um rótulo livre.resources— recursos reservados para o evento.videolink— link de videoconferência para assistir a 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, tela de recepção…). Ele define a seleção das columns, a
topline, os filters/exclusions e configurações de aparência. Ver o
glossário Painel de exibição.
Identificadores, cópias locais e mapeamento para um ERP
Para ligar o modelo Omniscol a um referencial externo, três princípios prevalecem:
-
As chaves de dicionário são os identificadores estáveis. As disciplinas, usuários, 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. -
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 seus identificadores nos sistemas de terceiros, por exemplo{ "auriga": "12345", "aimaira": "67890" }. É o ponto de ancoragem canônico de um emparelhamento bidirecional. -
A cópia local escola ↔ horário é deliberada. Um curso 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 (planejamento datado). 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 as chaves de API são descritas em
Chaves 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.