Pular para o conteúdo principal

Integração entre Sistemas

Este documento descreve as fronteiras de sistema, os dados compartilhados, os fluxos de integração e as dependências entre os componentes do ecossistema Ladesa: SISGHA-Web, SISGHA-Mobile, SISGEA-Web e o worker de geração de horários (timetable-generator).


Fronteiras de Sistema

O ecossistema Ladesa é composto por sistemas distintos com responsabilidades bem definidas:

SistemaResponsabilidadeAtores atendidos
SISGHA-WebGestão acadêmica completa: horários, calendários, entidades, relatóriosDAPE, Professor, Aluno (web)
SISGHA-MobileConsulta de horário e calendário, perfil e disponibilidade docenteProfessor, Aluno (mobile)
SISGEA-WebGestão de infraestrutura física: blocos, ambientes, reservas de salasADM_EA (administrador de ambientes)
Timetable GeneratorWorker assíncrono de otimização para geração automática de grade de horáriosInterno (invocado pelo SISGHA-Web)
Serviço de IdentidadeAutenticação e autorização centralizada via protocolo OIDC/OAuth 2.0Todos os sistemas
Management ServiceAPI de backend com os CRUDs acadêmicos, calendário e regras de negócioSISGHA-Web, SISGHA-Mobile

Diagrama de Fluxo de Dados


Dados Compartilhados entre Sistemas

Algumas entidades de domínio são transversais — são criadas em um sistema e consumidas por outros:

Entidades de domínio transversais

EntidadeCriada emConsumida emObservação
Usuário (Servidor)SISGHA-Web (DAPE)SISGHA-Web, SISGHA-Mobile, Serviço de IdentidadeAutenticação via OIDC
CampusGerenciado externamenteSISGHA-Web, SISGHA-MobileSem CRUD no protótipo; entidade de referência
TurnoSISGHA-Web (Intervalos)SISGHA-Web, SISGHA-MobileBase temporal para grades
Dia da SemanaDomínio fixo (seg–sáb)SISGHA-Web, SISGHA-Mobile, SISGEA-WebConstante: 6 dias letivos
FormaçãoSISGHA-Web (DAPE)SISGHA-Web (Calendário, Cursos, Eventos)Entidade raiz da cascata acadêmica

Sessão e identidade

A autenticação é centralizada e compartilhada via token de acesso (OIDC). O SISGHA e o SISGEA possuem telas de login independentes, mas ambos delegam a validação de credenciais ao mesmo serviço de identidade institucional. A sessão não é compartilhada entre SISGHA e SISGEA — o usuário deve autenticar-se separadamente em cada sistema.


Fluxos de Integração Identificados no Protótipo

Fluxo 1 — Seleção de Sistema (Landing Page)

A landing page e a tela de Seleção de Acesso são o único ponto de interface compartilhado entre SISGHA e SISGEA. A partir da seleção, cada sistema segue seu próprio fluxo de autenticação e navegação de forma independente.

Landing Page → Seleção de Acesso → [SISGHA Login] ou [SISGEA Login]

Fluxo 2 — Autenticação de Servidor (SISGHA)

O SISGHA-Web e o SISGHA-Mobile delegam a autenticação ao serviço de identidade e recebem de volta os papéis do usuário (DAPE, Professor) para controle de acesso (RBAC).

Login → Serviço de Identidade (OIDC) → Token com papéis → SISGHA-Web/Mobile

Fluxo 3 — Geração Automática de Horário (SISGHA-Web → Worker)

A geração automática é um processo assíncrono. O SISGHA-Web envia uma solicitação ao backend, que publica uma mensagem no barramento. O worker (timetable-generator) consome a mensagem, executa o solver e publica o resultado. O backend processa a resposta e notifica o frontend.

DAPE solicita geração → Management Service publica mensagem →
Timetable Generator executa solver → publica resultado →
Management Service persiste grade → SISGHA-Web exibe resultado

Fluxo 4 — Consulta de Horário (Mobile → API)

O SISGHA-Mobile consome os mesmos endpoints da API do Management Service que o SISGHA-Web, recebendo os dados de horário e calendário formatados. A lógica de negócio reside no backend — o mobile apenas apresenta os dados.

SISGHA-Mobile → Management Service API → Dados de horário/calendário

Fluxo 5 — Notificações (Management Service → Frontend)

Quando o DAPE realiza alterações de horário ou eventos, o sistema gera notificações automáticas. O mecanismo de entrega (push, polling ou WebSocket) deve ser definido na implementação, mas o fluxo lógico é:

Alteração de horário/evento → Management Service gera notificação →
Entrega para SISGHA-Web (dropdown) e SISGHA-Mobile (tela dedicada)

Integrações Futuras Potenciais

As integrações a seguir não estão presentes no protótipo atual, mas foram identificadas como potencialmente relevantes com base no domínio e nos sistemas existentes:

IntegraçãoSistemas envolvidosDescrição
Reserva de sala ↔ Horário acadêmicoSISGEA-Web ↔ SISGHA-WebAo gerar ou editar horário, o SISGHA consulta o SISGEA para validar disponibilidade de salas.
Importação de dados institucionaisSistemas institucionais externos ↔ SISGHAImportação de turmas, professores e alunos de sistemas acadêmicos institucionais existentes (ex: integração via API ou arquivo).
Exportação de grade para portaisSISGHA-Web → Portais externosPublicação da grade de horários em formatos consumíveis por outros sistemas institucionais (ex: portais do aluno).
Notificação por canal externoManagement Service → Canal de mensagensEntrega de notificações via e-mail institucional ou aplicativo de mensagens, além das notificações internas do sistema.

Contratos de API

Padrão de API

A API do Management Service segue convenções REST com contratos definidos via TypeSpec (conforme decisão arquitetural ADR-010). Os contratos tipados garantem consistência entre a especificação e a implementação.

Padrões observados na implementação de referência:

  • Endpoints REST com prefixo de versão (ex: /api/v1/...)
  • Autenticação via Bearer Token (JWT emitido pelo serviço de identidade)
  • Paginação por cursor ou offset para listagens
  • Respostas em formato JSON com envelopes padronizados
  • Códigos HTTP semânticos (200, 201, 400, 401, 403, 404, 422, 500)

Grupos de endpoints identificados

GrupoDescriçãoAtores
/authAutenticação e gestão de sessãoTodos
/usuariosCRUD de servidores e disponibilidadeDAPE, PROF (próprio perfil)
/turmasCRUD de turmas e eventos de turmaDAPE
/cursosCRUD de cursos e vínculo com disciplinasDAPE
/formacoesCRUD de formações e etapasDAPE
/disciplinasCRUD de catálogo de disciplinasDAPE
/horariosConsulta, edição e geração de horáriosDAPE, PROF (leitura), ALU (leitura)
/calendariosCRUD de calendários acadêmicosDAPE
/eventosCRUD de eventos globais e por entidadeDAPE
/dias-nao-letivosCRUD de dias não letivosDAPE
/diariosCRUD de diários de classeDAPE
/relatoriosGeração e exportação de relatóriosDAPE
/notificacoesConsulta de notificaçõesPROF, ALU
/intervalosConfiguração de intervalos de aulaDAPE
/blocosCRUD de blocos (SISGEA)ADM_EA
/ambientesCRUD de ambientes (SISGEA)ADM_EA
/reservasCRUD de reservas de ambientes (SISGEA)ADM_EA

Eventos e Mensagens

O ecossistema utiliza troca de mensagens entre o Management Service e o Timetable Generator para desacoplar o processamento assíncrono do solver da API síncrona.

Mensagens identificadas

MensagemDireçãoDescrição
horario.geracao.solicitadaManagement Service → Timetable GeneratorSolicitação de geração com parâmetros (campus, turmas, modo permanente/temporário)
horario.geracao.concluidaTimetable Generator → Management ServiceGrade gerada com sucesso; inclui o resultado para persistência
horario.geracao.falhouTimetable Generator → Management ServiceFalha na geração; inclui motivo para exibição ao DAPE
horario.alteradoManagement Service → Frontend (via push/polling)Notificação de alteração de horário para professores e alunos afetados
evento.criadoManagement Service → FrontendNotificação de novo evento no calendário

As definições formais de mensagens devem ser mantidas no diretório messages/ do repositório, seguindo o contrato estabelecido entre os serviços.


Decisões de Integração

DecisãoJustificativa
SISGHA e SISGEA com logins separadosOs sistemas atendem atores distintos (servidores acadêmicos vs. administradores de ambientes) com contextos independentes. Sessão unificada seria possível via SSO, mas não está prevista no protótipo atual.
Geração de horário como processo assíncronoO solver pode levar até 60 segundos (RNF-001). Processar de forma síncrona bloquearia a API e degradaria a experiência. O modelo assíncrono com mensagens desacopla o processo.
Contratos de API via TypeSpecGarante consistência entre especificação e implementação, facilita geração de SDKs para o frontend e evita divergências manuais.
Mobile consome a mesma API que o webEvita duplicação de lógica de negócio. A API do Management Service é o único ponto de verdade; o mobile é um consumidor como o web.