Modelo de datos completo: entidades JSON, relaciones y ontología

Esta página describe el modelo de datos completo de una cuenta Omniscol: las entidades, sus campos principales y sus relaciones. Prolonga la página conceptual Organización de los datos, que explica el porqué (repositorio escolar ↔ horario, copias locales); aquí, el objetivo es el qué — un mapa estructural aprovechable, en particular para relacionar el modelo con un repositorio externo (software de gestión, directorio, sistema de información).

Página técnica. Esta referencia está dirigida a la integración y al emparejamiento con un sistema externo. No es necesaria para el uso habitual de Omniscol: para comprender la organización de los datos desde el punto de vista de la gestión, consulte Organización de los datos.

Todos los datos de un centro se organizan en forma de árbol. Las entidades descritas a continuación (usuarios, años escolares, horarios, ausencias, eventos, etc.) corresponden a las distintas ramas de esta estructura. La referencia normativa es el esquema JSON de la cuenta. Se consulta en dos formas:

  • el origen bruto (el esquema JSON tal cual), servido por la cuenta en la dirección https://api.omniscol.com/api/guest/school_schema.json;
  • el visor en árbol legible en omniscol.com/es/datamodel (y la referencia de API correspondiente en omniscol.com/es/developers).

Este esquema describe exactamente el almacenamiento físico en la base de datos, en forma de documento JSON. Esta página ofrece una lectura organizada y estable en el tiempo.

El documento escuela: la raíz

El documento raíz reúne el repositorio duradero del centro y todas sus planificaciones. Sus subárboles de primer nivel:

Clave raíz Entidad Función
config SchoolConfig Parámetros de la cuenta (país, opciones, zona horaria, sincronización externa)
subjects_custom diccionario de SubjectFull Asignaturas personalizadas del centro
families_custom diccionario de Family Familias de asignaturas personalizadas
users diccionario de User Directorio de usuarios (todos los roles)
school_years matriz de SchoolYear Años escolares y vacaciones
timetables diccionario de Timetable Horarios
absences agrupación de Absence* Ausencias (profesores, clases, personal, estudiantes)
staffing Staffing Módulo de personal y de vigilancia
panels diccionario de Panel Paneles de anuncios
events diccionario de Event Eventos de tipo agenda
api, snapshots, jobs, translations, logo varios Ajustes técnicos e históricos

Los subárboles expresados como «diccionario» son objetos JSON cuyas claves son identificadores estables (el pivote de toda relación externa — véase la sección final).

config

subjects_custom

families_custom

users

school_years

timetables

staffing

absences

panels

events

SCHOOL

string

_id

dominio del centro

string

name

nombre de la cuenta

string

country

país de la cuenta

string

current_school_year

año escolar actual

CONFIG

SUBJECT

FAMILY

USER

SCHOOL_YEAR

TIMETABLE

STAFFING

ABSENCE

PANEL

EVENT

Campos transversales: _extids y wishes

Dos campos reaparecen en numerosas entidades. Para no repetirlos en cada esquema, se describen una sola vez aquí.

  • _extids (ExternalIds) — tabla de los identificadores de la entidad en los sistemas externos, por ejemplo { "auriga": "12345" }. Presente en las entidades sincronizables (asignaturas, familias, usuarios, sitios, aulas, recursos, profesores, clases, grupos…). Es el punto de anclaje de un emparejamiento con un repositorio externo (véase la sección final).
  • wishesrestricciones horarias: disponibilidad, franjas horarias deseadas o a evitar, volumen horario máximo, aula preferida… Presente en la mayoría de las entidades planificables: usuarios, profesores y asignaturas de un horario, grupos, clases, aulas, franjas horarias de un sitio, cuadrículas de vigilancia. Según el alcance, estas restricciones son globales (nivel escuela) o propias de un horario.

Nivel 1 — El repositorio escolar

El repositorio escolar contiene lo que es cierto para el centro, independientemente de un horario: el catálogo de asignaturas, el directorio de usuarios, el calendario de los años escolares.

family

parent

colocaciones por año

groups

holidays

FAMILY

string

name

string

code

SUBJECT

string

name

string

short

etiqueta corta (visualización)

string

code

string

parent

asignatura padre

string

family

familia

string

color

object

_extids

identificadores externos

USER

string

login

string

first_name

string

middle_name

(si es pertinente para el país)

string

last_name

string

idnumber

identificador oficial

array

roles

admin teacher staff student

string

customrole

Rol personalizado

int

servicehours

servicio horario de referencia

bool

external

personal externo

object

subjects

asignaturas impartidas

object

wishes

disponibilidad global

object

_extids

PLACEMENT

string

class

clase asignada

string

date_start

string

date_end

array

groups

grupos asignados

PLACEMENT_GROUP

string

group

grupo groupset o virtual

array

weeks

rangos de semanas

SCHOOL_YEAR

string

name

string

date_start

string

date_end

array

altweeks

semanas alternas

HOLIDAY

string

name

string

begin

string

end

Asignaturas — SubjectFull / Subject / Family

Una asignatura personalizada (SubjectFull) extiende la asignatura de base (Subject: name, short, code, type, _extids) con parent, family y color. Dos orígenes coexisten a nivel escuela: las asignaturas comunes del país (solo lectura) y las asignaturas personalizadas del centro. Detalles funcionales: Gestionar las asignaturas.

Usuarios — User (incluidos los profesores)

Un User es la entidad única del directorio: identidad (apellidos, nombre, idnumber, contacto), autenticación (login), roles, servicio horario de referencia (servicehours), disponibilidad global (campo wishes) y placements. Un profesor no es una entidad distinta: es un User que tiene teacher entre sus roles (un mismo usuario puede acumular varios roles). El campo placements (indexado por año escolar) vincula un estudiante a una class y a unos groups durante un periodo. Detalles: Gestionar los profesores.

Años escolares — SchoolYear / Holiday

Un SchoolYear define date_start → date_end, la lista de holidays y las altweeks (semanas alternas). Es un marco temporal, no un contenedor: los horarios se despliegan en él sin estar anidados. Véase Año escolar.

Nivel 2 — El horario

Un Timetable es una unidad de planificación coherente. Lleva su propia copia local de profesores, clases, grupos y asignaturas — véase el principio de copia local en Organización de los datos.

config

sites

teachers

classes

lessons (grupos de grupos, multigrupo)

classrooms

resources

subjects

groups

courses

parent (jerarquía)

origen (copia local parcial)

profesores por defecto

copia local parcial y vínculo implícito por identificador

grupos constitutivos

TIMETABLE

bool

active

¿publicado?

array

lessons

sesiones transversales

TIMETABLE_CONFIG

string

type

week cycle calendar

int

time_period

duración de la franja horaria

int

time_unit

subdivisión de la franja horaria

array

weekdays

días laborables

string

displaymode

hours periods agenda

int

cycle

longitud del ciclo

array

dates

límites si calendar

object

date_windows

ventanas de generación

TIMETABLE_SITE

string

name

object

distances

distancias entre sitios

object

hours

cuadrículas horarias

TIMETABLE_TEACHER

string

first_name

string

last_name

string

virtual_name

puesto por cubrir

array

subjects

asignaturas del puesto virtual

string

idnumber

int

servicehours

reemplazable por horario

string

classroom

aula preferida

TIMETABLE_CLASS

string

name

string

level

string

campus

array

sites

solo se considera un sitio

int

studentsnb

número de estudiantes teórico (para calcular el aula adecuada)

string

classroom

aula por defecto

bool

offgrid

fuera de cuadrícula (calendar)

string

videolink

enlace de videoconferencia por defecto en todas las sesiones

string

resourcelink

enlace de recurso (LMS) por defecto en todas las sesiones

LESSON

TIMETABLE_CLASSROOM

string

name

int

capacity

string

specialisation

especialización libre

int

maxclasses

clases simultáneas

string

building

string

description

descripción libre

array

tags

etiquetas de características o materiales

TIMETABLE_RESOURCE

string

name

int

number

cantidad disponible

TIMETABLE_CLASS_SUBJECT

string

code

heredado de Subject

array

incompatibilities

incompatibilidades

number

pweight

peso pedagógico

array

teachers

profesores por defecto

number

minutes

volumen horario previsto

string

specialisation

aula requerida

TIMETABLE_CLASS_GROUP

string

name

string

code

bool

free

grupo libre

string

parent

grupo padre

int

studentsnb

número de estudiantes teórico (para calcular el aula adecuada)

SUBJECT

USER

GROUPSET_ITEM

string

name

string

code

array

groups

identificadores de grupos

Configuración — TimetableConfig

El campo determinante es type: week (semanal repetido), cycle (ciclo de varios días, véase cycle) o calendar (fechas reales, véase dates). time_period y time_unit definen la trama de la cuadrícula; weekdays los días laborables; date_windows las ventanas de restricción para la generación automática.

Sitios, aulas, recursos

Un TimetableSite (sitio) contiene sus classrooms (TimetableClassroom: capacity, specialisation, maxclasses, building) y sus resources (TimetableResource: number = cantidad disponible, cuya sobrerreserva el sistema impide). distances modela los tiempos de trayecto entre sitios. Véase Sitios, aulas y recursos y Especializaciones de aulas.

Profesores del horario — TimetableTeacher

Copia parcial enriquecida de un User: solo se copian algunos campos identificadores (first_name, last_name, idnumber), a los que se añaden campos propios de la planificación (servicehours reemplazable, classroom preferida, wishes por horario). Un virtual_name no vacío designa un profesor virtual (un puesto por cubrir, sin un User real detrás).

Clases, asignaturas de clase, grupos

  • TimetableClass: name, level, campus/sites, studentsnb, y tres subárboles clave — subjects, groups, courses.
  • TimetableClassSubject: copia local de una asignatura (extiende Subject) enriquecida para la planificación — minutes (volumen previsto), pweight (peso pedagógico), incompatibilities, teachers por defecto, specialisation de aula. Asignar una asignatura con un tipo de sesión crea una entrada distinta por tipo. Véase Cursos, sesiones, tipos de sesión.
  • TimetableClassGroup: un subconjunto de una clase. free=true desactiva los conflictos con el resto de la clase (grupo libre); parent establece la jerarquía de grupos.

Reglas entre grupos — particiones, alineaciones, grupos de grupos

Las relaciones entre grupos las lleva el subárbol groups del horario, en tres formas:

Esquema Entidad Sentido Página
TimetableGroupTimeset partición Grupos de una misma clase mutuamente excluyentes, colocados en paralelo (medias clases, optativas) Divisiones de clase
TimetableGroupSpaceset alineación Grupos de clases diferentes que trabajan juntos en franjas horarias espejo Alineaciones
TimetableGroupGroupset grupo de grupos Metagrupo (GroupsetItem: name, code, groups[]) que reúne varios grupos Grupos de grupos

Véase también la vista de conjunto Clase, grupo, subgrupo.

Nivel 3 — Las sesiones

Una sesión (Lesson) es la unidad de enseñanza realmente colocada en el horario: duración, asignatura, grupo, profesor(es), aula, recursos, posición y estado. Se genera a partir de una asignatura de clase (véase el nivel 2) y se vincula o bien a una clase (class.courses), o bien directamente al horario (timetable.lessons) — este último caso para los grupos de grupos y las sesiones multigrupo, transversales a varias clases.

courses (sesiones de una clase)

lessons (grupos de grupos, multigrupo)

assoc · concat · weekalt (sesiones complejas)

group

teachers

classroom

resources

memos

position

TIMETABLE_CLASS

LESSON

int

duration

en número de periodos

int

duration_actual

minutos reales

int

duration_accounted

minutos facturados

string

modality

in_person remote hybrid self_study

string

subject

identificador de asignatura

string

group

identificador de grupo

array

teachers

null fuerza ningún profesor

string

classroom

null fuerza ninguna aula

string

status

planned draft canceled done

string

_id

identidad estable de la sesión

string

_osrev

revisión (bloqueo optimista)

TIMETABLE

TIMETABLE_CLASS_GROUP

TIMETABLE_TEACHER

TIMETABLE_CLASSROOM

TIMETABLE_RESOURCE

MEMO

string

comment

string

pub

visibilidad del comentario

string

owner

int

tstp

marca de tiempo

POSITION

string

day

fecha, día de la semana o n.º de día de ciclo

int

period

índice de la franja horaria en la cuadrícula

string

start

hora de inicio exacta HH:MM (solo fuera de cuadrícula)

string

end

hora de fin exacta HH:MM (solo fuera de cuadrícula)

bool

fixed

sesión fijada (congelada en la generación)

Núcleo de una sesión

Una sesión lleva los campos de planificación — duration (en periodos), duration_actual / duration_accounted (minutos reales / facturados), modality, subject, group, teachers, classroom, resources — a los que se añaden su position, su status, sus memos y una identidad (_id, _osrev). Poner teachers o classroom en null fuerza explícitamente la ausencia de profesor o de aula.

Sesiones complejas

Una sesión puede agrupar otras:

  • assoc — sesiones asociadas: los grupos permutan juntos.
  • concat — sesiones concatenadas: estrictamente consecutivas.
  • weekaltsemanas alternas: una variante de sesión por semana.

Estos mecanismos cubren las sesiones complejas — véase Sesiones complejas: alternas, asociadas, concatenadas.

Posición de una sesión

La position es un objeto que sitúa la sesión en el tiempo. Reúne los campos siguientes:

  • position.day — el día de la sesión, polimorfo según el modo del horario: un nombre de día (mondaysunday) en modo semanal, un número de día de ciclo ("1", "2"…) en modo cíclico, o una fecha YYYY-MM-DD en modo calendario. Es un único y mismo campo que cambia de forma según el modo; siempre está presente.
  • position.period — el índice de la franja horaria en la cuadrícula horaria. Una sesión sin period ni start/end corresponde a un día festivo.
  • position.start / position.end — horas exactas de inicio y de fin (HH:MM), para las sesiones fuera de cuadrícula o en modo calendario que no se alinean con una franja horaria estándar.
  • position.fixed — booleano (falso por defecto): una sesión fijada, que la generación automática no desplazará.

Las sesiones de una clase viven en class.courses; la matriz timetable.lessons lleva las sesiones transversales ligadas a los grupos de grupos.

Identidad de una sesión

Cada sesión lleva dos campos técnicos de identidad, presentes en las cuentas Premium:

  • _id — identificador estable, asignado al crear la sesión e inmutable después (combina una marca de tiempo y una huella del contenido). Es la clave de una sesión para la edición colaborativa y para una herramienta externa que sigue las sesiones a lo largo del tiempo. Para las ocurrencias recurrentes de un horario calendario (semanas alternas, concatenaciones, asociaciones), el _id de cada ocurrencia se deriva del de la sesión de base, que sigue siendo reconocible.
  • _osrev — token de revisión (bloqueo optimista), incrementado en cada modificación (marca de tiempo + índice de modificación), de manera estrictamente ordenada alfabéticamente (lo que permite saber con facilidad si una revisión es más reciente que otra). Permite a la edición colaborativa detectar y fusionar las modificaciones concurrentes: una revisión de cliente caducada señala un conflicto, que el servidor resuelve o fusiona en lugar de sobrescribir en silencio.

Ausencias

Las ausencias comparten una base común (Absence: date_start, date_end, reason, hours, comment, estado) especializada por tipo de ausente.

teachers

classes

staff

students

substitutes

ABSENCE

ABSENCE_TEACHER

string

date_start

string

date_end

string

reason

clave de traducción o etiqueta

array

subjects

asignaturas afectadas

array

classes

clases afectadas

string

status

ABSENCE_CLASS

ABSENCE_STAFF

ABSENCE_STUDENT

string

date_start

string

reason

array

subjects

asignaturas excluidas

string

status

SUBSTITUTE

string

substitute

nombre del sustituto

string

date_start

inicio de la regla (fecha)

string

date_end

fin de la regla (fecha)

array

hours

franjas horarias afectadas (begin/end en minutos, day)

array

classes

clases afectadas

array

subjects

asignaturas afectadas

string

comment

comentario

Una AbsenceTeacher puede restringirse a ciertas subjects/classes y lleva una matriz de reglas de sustitución (substitutes, cada una un AbsenceTeacherSubstitute: sustituto, periodo, franjas horarias, clases y asignaturas cubiertas). Los estados difieren por tipo de ausente (por ejemplo ok/aborted para una clase). Véase la entrada del glosario Sustitución / Suplencia y el módulo Gestión de ausencias.

Personal

Un módulo distinto (vendido también de forma autónoma) para la vigilancia y los servicios de supervisión.

grids

assignments

staff

schedule

needs

STAFFING

STAFFING_GRID

array

dates

rangos de actividad

array

days

array

periods

franjas horarias

STAFFING_ASSIGNMENT

string

name

int

req

número mínimo de supervisores

int

ideal

efectivo deseado

string

site

string

priority

high normal low

array

allowed_staff

STAFFING_STAFF_MEMBER

string

first_name

string

last_name

string

virtual_name

puesto por cubrir

string

color

STAFFING_SCHEDULE

object

dates

turnos por fecha

STAFFING_NEED_SPAN

string

day

día o fecha

string

begin

HH:MM

string

end

HH:MM

int

headcount

efectivo requerido

Una StaffingGrid es la plantilla (días, periodos); los assignments describen los puestos (req/ideal, priority, needs detallados por franja horaria mediante StaffingNeedSpan); el schedule materializa los turnos efectivos por fecha. Véase el módulo Gestión de personal.

Eventos

Un Event es una entrada de agenda superpuesta a la cuadrícula: algo que ocurre en el centro sin ser una sesión regular — una junta de evaluación, una reunión de padres y profesores, un examen de una jornada, una salida, una jornada de puertas abiertas. Los eventos se almacenan en el diccionario events (claves event-<n>) y forman parte de las funcionalidades Premium.

Campos de un Event (obligatorios: title, start, end):

  • title — título mostrado.
  • start / end — inicio y fin, en formato YYYYMMDDTHHmmSS.
  • rrule — regla de recurrencia eventual.
  • attendees — participantes: un usuario, una clase, un grupo, una etiqueta libre (custom), o bien todo el centro (everybody) / cualquier persona voluntaria (anyone).
  • location — lugar(es): un aula del horario o una etiqueta libre.
  • resources — recursos reservados para el evento.
  • videolink — enlace de videoconferencia para asistir a distancia.
  • memos — comentarios; color — color (hexadecimal).

El funcionamiento en la práctica (creación, colocación en la cuadrícula, campos de la interfaz) se describe en Eventos puntuales.

Paneles de anuncios

Un Panel es un panel de anuncios de las sesiones del día (vestíbulo, sala, pantalla de bienvenida…). Define la selección de columns, la topline, los filters/exclusions y ajustes de apariencia. Véase la entrada del glosario Panel de visualización.

Identificadores, copias locales y relación con un ERP

Para vincular el modelo Omniscol a un repositorio externo, tres principios prevalecen:

  1. Las claves de diccionario son los identificadores estables. Las asignaturas, usuarios, profesores, clases, grupos, aulas, recursos se indexan por un identificador inmutable (la clave JSON), y no por su etiqueta. Es este pivote — nunca el name — el que hay que utilizar para toda correspondencia.

  2. El campo _extids (ExternalIds) lleva los identificadores externos. Presente en las entidades sincronizables (Subject, Family, TimetableSite, TimetableClassroom, TimetableResource, TimetableTeacher, TimetableClass, TimetableClassGroup, User…), asocia a cada entidad sus identificadores en los sistemas de terceros, por ejemplo { "auriga": "12345", "aimaira": "67890" }. Es el punto de anclaje canónico de un emparejamiento bidireccional.

  3. La copia local escuela ↔ horario es voluntaria. Una asignatura de clase o un profesor de horario es una copia enriquecida, no una referencia viva. Un repositorio externo debe, por tanto, decidir a qué nivel se empareja: el repositorio escolar (catálogo duradero) o un horario preciso (planificación fechada). El detalle de las reglas de propagación figura en Organización de los datos.

La configuración de sincronización vive en config.extsync (SchoolConfigExtsync): systems (conectores configurados), sync (sentido y entidades), export y schedules, así como tablas de correspondencia (mappings) por clave e identificador Omniscol. Para el acceso programático, la API REST y los tokens se describen en Tokens de API; los conectores de sincronización en Sincronización externa.

La forma exacta y exhaustiva de cada campo permanece definida por el esquema JSON de referencia de la cuenta (https://api.omniscol.com/api/guest/school_schema.json, visor legible en omniscol.com/es/datamodel). En caso de divergencia entre esta página y el esquema, el esquema prevalece.

Véase también