Pular para o conteúdo principal

Modelo de Domínio

Mapa das entidades do sistema Ladesa, seus atributos principais e relacionamentos. Baseado na modelagem-alvo em artefatos/modelagem/LADESA.sql.

Modelagem-alvo vs. código atual

Este modelo representa o estado-alvo do sistema, não o que está implementado atualmente no management-service. As entidades de calendário e geração de horário ainda não existem no código — são funcionalidades planejadas.

Domínios do sistema

O modelo é organizado em 7 domínios lógicos:

┌─────────────────────────────────────────────────────────────┐
│ ESTRUTURA INSTITUCIONAL │
│ campus ← bloco ← ambiente │
│ endereco ← base_cidade ← base_estado │
├─────────────────────────────────────────────────────────────┤
│ ESTRUTURA ACADÊMICA │
│ modalidade ← oferta_formacao → nivel_formacao │
│ oferta_formacao → periodo → etapa │
│ curso → turma → diario → diario_professor │
│ disciplina ↗ │
├─────────────────────────────────────────────────────────────┤
│ PESSOAS │
│ usuario → perfil (campus + cargo) │
├─────────────────────────────────────────────────────────────┤
│ CALENDÁRIO (NOVO) │
│ calendario_letivo → calendario_letivo_dia │
│ calendario_letivo → calendario_letivo_etapa │
│ calendario_agendamento → junction tables (N:N) │
├─────────────────────────────────────────────────────────────┤
│ GERAÇÃO DE HORÁRIO (NOVO) │
│ gerar_horario → gerar_horario_oferta_formacao │
│ gerar_horario → gerar_horario_calendario_letivo │
│ horario_aula_configuracao → horario_aula → turma_horario │
│ diario_preferencia_agrupamento → aulas │
├─────────────────────────────────────────────────────────────┤
│ ESTÁGIO │
│ empresa → estagio ← estagiario │
│ responsavel_empresa, horario_estagio │
├─────────────────────────────────────────────────────────────┤
│ SUPORTE │
│ imagem → imagem_arquivo ← arquivo │
└─────────────────────────────────────────────────────────────┘

Estrutura Institucional

Entidades que representam a infraestrutura física do IFRO.

campus

Unidade física do IFRO (ex: Campus Ji-Paraná, Campus Jaru).

CampoTipoDescrição
iduuid PKIdentificador único
nome_fantasiatextNome de exibição
razao_socialtextRazão social oficial
apelidotextNome curto (ex: "Ji-Paraná")
cnpjtextCNPJ da unidade
id_endereco_fkuuid FK → enderecoLocalização física

bloco

Edifício dentro de um campus.

CampoTipoDescrição
iduuid PKIdentificador único
nometextNome do bloco
codigotextCódigo identificador
id_campus_fkuuid FK → campusCampus ao qual pertence

ambiente

Espaço físico (sala, laboratório, auditório) — entidade central do SISGEA.

CampoTipoDescrição
iduuid PKIdentificador único
nometextNome do ambiente
descricaotextDescrição do espaço
codigotextCódigo identificador
capacidadeintCapacidade de pessoas
tipotextTipo (sala, laboratório, auditório, etc.)
id_bloco_fkuuid FK → blocoBloco ao qual pertence

Relacionamentos: campus → bloco → ambiente (hierarquia de contenção).


Estrutura Acadêmica

Entidades que representam a organização curricular.

oferta_formacao

Oferta de um curso em um campus, com modalidade e duração definidas.

CampoTipoDescrição
iduuid PKIdentificador único
nometextNome da oferta
apelidotextNome curto
duracao_periodo_em_mesesintDuração de cada período
id_modalidade_fkuuid FK → modalidadePresencial, EAD, etc.
id_campus_fkuuid FK → campusCampus da oferta

Tabela N:N: oferta_formacao_nivel_formacao — uma oferta pode ter múltiplos níveis (ex: técnico + ensino médio integrado).

oferta_formacao_periodo / oferta_formacao_periodo_etapa

Cada formação tem períodos (ex: 1° semestre, 2° semestre) e cada período tem etapas (ex: 1° bimestre, recuperação, exame).

TabelaCampos principais
oferta_formacao_periodonumero_periodo, FK → oferta_formacao
oferta_formacao_periodo_etapanome, cor, FK → oferta_formacao_periodo

curso

Curso vinculado a um campus e a uma oferta de formação.

CampoTipoDescrição
nometextNome do curso
nome_abreviadotextAbreviação
id_campus_fkuuid FK → campusCampus
id_oferta_formacao_fkuuid FK → oferta_formacaoFormação vinculada

turma

Grupo de alunos em um curso/período.

CampoTipoDescrição
periodotextPeríodo da turma
id_curso_fkuuid FK → cursoCurso da turma
id_ambiente_padrao_aula_fkuuid FK → ambienteSala padrão da turma

disciplina

Componente curricular com carga horária.

CampoTipoDescrição
nometextNome da disciplina
nome_abreviadotextAbreviação
carga_horariaintCarga horária total

diario

Entidade central do sistema. Liga turma + disciplina + calendário letivo. Representa o vínculo no vocabulário do DAPE.

CampoTipoDescrição
ativobooleanSe o diário está ativo
id_calendario_letivo_fkuuid FK → calendario_letivoCalendário de referência
id_turma_fkuuid FK → turmaTurma
id_disciplina_fkuuid FK → disciplinaDisciplina
id_ambiente_padrao_fkuuid FK → ambienteSala padrão para esta disciplina

diario_professor

Vínculo de um professor (perfil) a um diário — completa a associação triádica Professor + Disciplina + Turma.

CampoTipoDescrição
situacaobooleanStatus do vínculo
id_diario_fkuuid FK → diarioDiário
id_perfil_fkuuid FK → perfilProfessor (via perfil)

Pessoas

usuario

Identidade no sistema.

CampoTipoDescrição
nometextNome completo
matriculatextMatrícula institucional
emailtextE-mail
is_super_userbooleanAdministrador do sistema

perfil

Vínculo de um usuário a um campus com cargo específico. Um mesmo usuário pode ter múltiplos perfis em campi diferentes.

CampoTipoDescrição
ativobooleanSe o perfil está ativo
cargotextCargo (professor, DAPE, etc.)
apelidotextApelido no campus
id_usuario_fkuuid FK → usuarioUsuário
id_campus_fkuuid FK → campusCampus

Calendário (NOVO — não implementado)

Entidades que representam o calendário acadêmico e eventos.

calendario_letivo

Calendário de um campus/oferta de formação para um ano letivo.

CampoTipoDescrição
nometextNome do calendário
ano_letivointAno letivo
id_campus_fkuuid FK → campusCampus
id_oferta_formacao_fkuuid FK → oferta_formacaoFormação

calendario_letivo_dia

Cada dia do calendário com flags de dia letivo e feriado.

CampoTipoDescrição
datadateData
dia_letivobooleanSe é dia letivo
feriadobooleanSe é feriado
id_calendario_letivo_fkuuid FK → calendario_letivoCalendário

calendario_letivo_etapa

Quando cada etapa da formação ocorre neste calendário (datas de início e término).

CampoTipoDescrição
data_iniciodateInício da etapa
data_terminodateTérmino da etapa
id_oferta_formacao_periodo_etapa_fkuuid FKEtapa da formação
id_calendario_letivo_fkuuid FK → calendario_letivoCalendário

calendario_agendamento

Evento/agendamento genérico — a entidade mais flexível do calendário.

CampoTipoDescrição
tipoENUMINDISPONIBILIDADE, AULA, EVENTO, RESERVA
data_iniciodateData de início
data_fimdateData de fim (opcional)
dia_inteirobooleanSe dura o dia todo
horario_iniciotimeHorário de início
horario_fimtimeHorário de fim
repeticaotextRegra de repetição
nometextNome do evento
cortextCor de exibição
statusENUMRASCUNHO, ATIVO, INATIVO

Tabelas junction (N:N) — vinculam agendamentos a múltiplos atores:

Tabela junctionVincula agendamento a
calendario_agendamento_diarioDiários
calendario_agendamento_oferta_formacaoOfertas de formação
calendario_agendamento_ambienteAmbientes
calendario_agendamento_professorProfessores (perfis)
calendario_agendamento_turmaTurmas
calendario_agendamento_modalidadeModalidades
calendario_agendamento_calendario_letivoCalendários letivos

Geração de Horário (NOVO — não implementado)

Entidades que suportam a geração automatizada de grades horárias.

gerar_horario

Job de geração de horário — entidade principal.

CampoTipoDescrição
statusENUMSOLICITADOPENDENTESUCESSO / ERRO
duracaoENUMTEMPORARIO ou PERMANENTE
data_iniciodateData de início da vigência
data_terminodateData de término (apenas para temporário)
requisicao_geradorjsonbPayload enviado ao timetable-generator (contrato não especificado — ver DSC-002)
resposta_geradorjsonbResposta do timetable-generator (contrato não especificado — ver DSC-002)
id_usuario_geracao_fkuuid FK → usuarioQuem solicitou a geração

Tabelas junction (escopo da geração):

TabelaDescrição
gerar_horario_oferta_formacaoQuais ofertas de formação estão no escopo da geração
gerar_horario_calendario_letivoQuais calendários letivos estão no escopo

horario_aula_configuracao / horario_aula

Configuração dos slots de tempo de aula por campus.

TabelaCampos principais
horario_aula_configuracaodata_inicio, data_fim, ativo, FK → campus
horario_aulainicio (time), fim (time), FK → configuracao

turma_horario_aula

Quais slots de horário uma turma possui.

CampoDescrição
id_horario_aula_fkFK → horario_aula
id_turma_fkFK → turma

diario_preferencia_agrupamento / diario_preferencia_agrupamento_aulas

Preferências de aulas germinadas por diário.

TabelaCampos principais
diario_preferencia_agrupamentodata_inicio, data_fim, ativo, FK → diario
diario_preferencia_agrupamento_aulasdia_semana, aulas_seguidas, horario_inicio, horario_termino

Máquinas de Estado (ENUMs)

Status de Agendamento (calendario_agendamento_status)

RASCUNHO → ATIVO → INATIVO

Tipo de Agendamento (calendario_agendamento_tipo)

INDISPONIBILIDADE | AULA | EVENTO | RESERVA

Status de Geração de Horário (gerar_horario_status)

SOLICITADO → PENDENTE → SUCESSO
→ ERRO

Duração de Geração (gerar_horario_duracao)

TEMPORARIO | PERMANENTE

Questões em aberto

  • O contrato JSONB entre management-service e timetable-generator (requisicao_gerador / resposta_gerador) não está especificado — ver DSC-002
  • O módulo de estágio (estagio, estagiario, empresa) existe no SQL mas não tem representação no Figma — ver DSC-004

Fonte: artefatos/modelagem/LADESA.sql — modelagem-alvo do sistema Ladesa.