Skip to content

Painel Administrativo ionCLASS — Especificação Funcional

O que é este documento — a especificação funcional do painel administrativo web do ionCLASS (o Inertia + React servido pelo backend Laravel), acompanhada de uma reconciliação com a implementação real (§1.4). O texto original (v1.0) é uma especificação de produto ampla; as seções seguintes foram anotadas para separar o que já existe do que é aspiracional (⚠️/🔜). Superfícies irmãs: App do Responsável, Monitor de Portaria, Painel Público.

Versão da spec original: 1.0 | Data: 2026-03-20 · Reconciliação: 2026-08-12


1. Introdução e Escopo

1.1 Propósito

O painel administrativo web é a interface central de gestão do IONCLASS. Através dele, gestores e operadores configuram escolas, gerenciam alunos e responsáveis, acompanham retiradas em tempo real e garantem conformidade com ECA e LGPD.

1.2 Componentes do Ecossistema

ComponenteDescrição
Painel Admin (web)Gestão, configuração, monitoramento, relatórios
App Móvel (responsável)"Estou Chegando", autorizações, notificações, acompanhamento
Hardware de controle de acessoCatracas/portões — registro de entrada e saída via biometria/cartão
Interface "Estou Chegando" (tablet/mobile)PWA dedicada para operador na portaria — gerencia fila de retirada

1.3 Delimitação

Este documento cobre o painel admin web e a operação de portaria servida pelo backend. Para as outras superfícies e para a integração com o hardware, consultar:


1.4 Reconciliação com a implementação (2026-08-12)

Esta seção é a fonte da verdade sobre o que existe hoje. As seções 2–10 abaixo preservam a especificação de produto original; onde ela divergir do que está descrito aqui, vale esta seção.

O que mudou desde a spec original

  • ⚠️ Não há mais "aprovação de responsável" como gate de acesso. O onboarding do responsável é CPF + email + confirmação por código (Fortify) — sem código de convite, sem fila de aprovação (CPF desconhecido → 422 silencioso). O admin pré-cadastra responsáveis e pode bloquear/desbloquear, mas não "aprova" o acesso deles. Toda menção a status pendente/aprovado/ajuste_solicitado/rejeitado de responsável na §4.5 é obsoleta — ver a §4.5 reescrita.
  • O que o admin ainda aprova são as duas filas de aprovação: Pessoas Autorizadas e Liberações/Saídas Antecipadas, cada uma com approve / reject / request-changes.
  • ⚠️ Papéis dinâmicos, não hierarquia fixa. Permissões são geridas por um grid de papéis (roles). A hierarquia Owner/Admin Grupo/Admin Site/Operador da §3 é a intenção de produto; a implementação usa papéis + permissões nomeadas (monitoramento ao vivo, sinais de chegada, configurações da escola, etc.).

Capacidades implementadas (rotas reais)

Bloco de gestão (restrito a usuários autenticados e verificados):

MóduloPáginaNotas
Grupos EscolaresGestão de gruposCRUD + ativar/inativar + lista de admins do grupo + logo
EscolasGestão de escolasCRUD + geocodificação de endereço (com throttle) + ativar/inativar (exclusão lógica, reativável) + logo
Papéis (Roles)Grid de permissõesGrid de permissões; o escopo do papel vem do corpo da requisição, não da URL
UsuáriosGestão de usuáriosCRUD direto + reset de senha + ativar/inativar. Sem convite por email — o admin define/reseta a senha
ImportaçõesImportação em massaImportação CSV (alunos/responsáveis): baixar modelo, upload, acompanhamento e download de erros
ResponsáveisGestão de responsáveisPerfil 360º, busca, vincular/desvincular alunos, bloquear/desbloquear, veículos inline
AlunosGestão de alunosCRUD + foto + busca + registro manual de evento de acesso + vincular/desvincular responsáveis
TurmasGestão de turmasCRUD; turno na turma e janela de retirada customizável por dia da semana
Pessoas AutorizadasFila de aprovaçãoFila de aprovação: approve / reject / request-changes + suspend + reenvio de sincronização (controle de acesso)
Liberações (Saída Antecipada)Fila de aprovaçãoFila de aprovação: approve / reject / request-changes + cancel
Motivos de saída antecipadaAba Configurações da escolaCatálogo (criar/editar/desativar)
Pontos de retirada (portões)Aba Configurações da escolaCriar/editar/desativar
Integração / APIConfigurações de integraçãoDriver de controle de acesso + "Testar integração" (ping-pong backend→plugin→backend)
Simulador de fluxoSimulador (dev/homolog)Gera eventos do fluxo passo a passo; responde 404 quando o simulador está desabilitado
Audit logsLogs de auditoriaSomente leitura (append-only): apenas listagem, sem edição/exclusão
RelatóriosCentral de relatóriosExports assíncronos XLSX/CSV: painel, enfileiramento e download (stream do storage)

Bloco de operação:

MóduloPáginaNotas
Fila do OperadorPreparar / Pronto / Confirmar retiradaVersão web da fila de portaria (mesmos dados/canal do PWA)
Walk-inRetirada avulsaRetirada sem "Estou Chegando" prévio (busca manual do aluno)
Monitor fullscreenTelão de tabletMesmos dados + canal school.{id}.monitor da fila
Painel Público (token)Aba Configurações da escolaGerar / rotacionar / revogar token do kiosk → ver Painel Público

Tempo real e escopo

Os canais privados/públicos de tempo real são: school.{id}.monitor (Admin+Operador, requer permissão de monitoramento ao vivo + ver a escola), school.{id}.queue (presença de operadores), school.{id}.public-monitor (kiosk) e responsible.{userId}.school.{schoolId} (app). Detalhes em Tempo Real e Autenticação e Autorização.


2. Arquitetura Multi-site e Grupos Escolares

2.1 Hierarquia

Plataforma
└── Grupo Escolar
    └── Site (Escola)
        └── Entidades (alunos, turmas, responsáveis…)

2.2 Regras Estruturais

  • Todo site pertence obrigatoriamente a um grupo escolar (escola avulsa = grupo de 1).
  • Isolamento total de dados por site: operador do Site A nunca vê dados do Site B.
  • Admin Grupo vê dados agregados ou drill-down por site dentro do seu escopo.
  • Owner vê tudo na plataforma.
  • Configurações definidas no nível de grupo servem como padrões; cada site pode aplicar override pontual.

2.3 Seletor de Contexto

  • Admin Site: opera no contexto fixo do seu site.
  • Admin Grupo: seletor de site no header + opção "Visão consolidada do grupo".
  • Owner: seletor de grupo + seletor de site + opção "Visão da plataforma".

3. Modelo de Permissões e Controle de Acesso

3.1 Hierarquia de Papéis

PapelEscopoDescrição
OwnerPlataformaAcesso total irrestrito. Gerencia grupos, configurações globais e outros owners.
Admin Grupo EscolarUm ou mais gruposVisão consolidada do grupo, drill-down por site, CRUD completo dentro do escopo atribuído.
Admin SiteUm siteControle total do site: CRUDs, configurações, monitoramento, relatórios.
OperadorUm siteAcesso restrito conforme perfil de operador atribuído.

3.2 Sistema de Perfis de Operador

Um perfil é um conjunto nomeado de permissões reutilizável.

  • Perfis podem ser definidos no nível de grupo (compartilhados entre sites) ou de site (específicos).
  • Cada operador recebe um perfil por site em que atua.
  • A plataforma oferece templates pré-configurados para setup rápido (Porteiro, Secretaria, Coordenador de Turno).
  • Admin Grupo/Site pode criar perfis customizados.

3.3 Permissões Granulares por Domínio

Cada domínio possui ações específicas. A permissão é a combinação domínio.ação.

DomínioAções Possíveis
alunosver, criar, editar, excluir
responsaveisver, criar, editar, excluir, bloquear (⚠️ sem aprovar/rejeitar — responsável não é mais aprovado; ver §1.4 e §4.5)
autorizadosver, criar, editar, excluir, aprovar, rejeitar
liberacoes_temporariasver, criar, editar, excluir, aprovar, rejeitar
turmasver, criar, editar, excluir
agendaver, criar, editar, excluir
comunicadosver, criar, editar, excluir
monitor_tempo_realver
estou_chegandover, atualizar_status
relatoriosver, exportar
audit_logsver
usuariosver, criar, editar, excluir
configuracoes_sitever, editar

3.4 Exemplos de Perfis Pré-configurados

Porteiro:

  • monitor_tempo_real.ver
  • estou_chegando.ver, estou_chegando.atualizar_status
  • alunos.ver

Secretaria:

  • CRUD completo: alunos.*, responsaveis.*, autorizados.*, liberacoes_temporarias.*, turmas.*, agenda.*, comunicados.*
  • monitor_tempo_real.ver, estou_chegando.*

Coordenador de Turno:

  • Todas as permissões da Secretaria
  • relatorios.ver, relatorios.exportar
  • audit_logs.ver
  • usuarios.ver

4. CRUDs — Especificação Detalhada

Convenções: campos marcados com * são obrigatórios. Todas as entidades possuem id, created_at, updated_at e deleted_at (soft delete) implícitos.

4.1 Grupos Escolares

Permissão: Owner (CRUD completo), Admin Grupo (ver/editar o próprio grupo)

CampoTipoRegras
nome*string(200)Único na plataforma
cnpjstring(18)Formato XX.XXX.XXX/XXXX-XX, validação de dígito verificador
enderecotextEndereço completo
telefonestring(20)Formato brasileiro
emailemailValidação de formato
logoimageJPG/PNG, max 2MB, redimensionado para 256×256
status*enumativo, inativo

Regras de negócio:

  • Inativar um grupo inativa todos os sites vinculados (com confirmação).
  • Não é possível excluir grupo com sites ativos.

4.2 Escolas (Sites)

Permissão: Owner (CRUD completo), Admin Grupo (CRUD no escopo), Admin Site (ver/editar o próprio site)

CampoTipoRegras
nome*string(200)Único dentro do grupo
grupo_id*FKReferência ao grupo escolar
cnpjstring(18)Validação de dígito verificador
endereco*textEndereço completo
telefonestring(20)Formato brasileiro
timezone*stringDefault: America/Sao_Paulo
latitude*decimal(10,7)Para geofencing
longitude*decimal(10,7)Para geofencing
raio_geofencing*intEm metros. Default: 500. Min: 100, Max: 5000
modo_pickup*enumhardware, qr_code, ambos
logoimageJPG/PNG, max 2MB
status*enumativo, inativo

4.2.1 Janelas de Retirada

Cada site define N janelas de retirada nomeadas. O monitoramento e "Estou Chegando" se ativam conforme a janela vigente.

CampoTipoRegras
nome*string(100)Ex: "Saída manhã", "Saída tarde", "Saída integral"
site_id*FKReferência ao site
hora_inicio*timeHH:MM
hora_fim*timeHH:MM. Deve ser > hora_inicio
dias_semana*int[]0=dom … 6=sáb
turmas_aplicaveisFK[]Se vazio, aplica a todas
ativo*booleanDefault: true

Regras de negócio:

  • Janelas do mesmo site não podem ter sobreposição de horário para as mesmas turmas.
  • Ao inativar um site, todas as janelas são automaticamente desativadas.

4.3 Perfis de Operador

Permissão: Owner (CRUD completo), Admin Grupo (CRUD escopo grupo), Admin Site (CRUD escopo site)

CampoTipoRegras
nome*string(100)Único dentro do escopo
descricaotextDescrição do perfil
escopo*enumgrupo, site
grupo_idFKObrigatório se escopo = grupo
site_idFKObrigatório se escopo = site
permissoes*JSONObjeto { "domínio.ação": true }
templatebooleanSe criado pela plataforma como template
status*enumativo, inativo

Regras de negócio:

  • Perfis de grupo são visíveis/utilizáveis em todos os sites do grupo.
  • Perfis de site só são visíveis no site correspondente.
  • Não é possível inativar perfil com operadores vinculados (reatribuir antes).

4.4 Usuários (Operadores e Admins)

Permissão: Owner (CRUD completo), Admin Grupo (CRUD no escopo), Admin Site (CRUD no site)

CampoTipoRegras
nome*string(200)
email*emailÚnico na plataforma, usado para login
telefonestring(20)Formato brasileiro
cpf*string(14)Formato XXX.XXX.XXX-XX, validação dígito verificador, único
papel*enumowner, admin_grupo, admin_site, operador
grupo_idsFK[]Obrigatório para admin_grupo
site_idFKObrigatório para admin_site e operador
perfil_operador_idFKObrigatório para operador
fotoimageJPG/PNG, max 2MB
status*enumativo, inativo
ultimo_logindatetimePreenchido pelo sistema

Regras de negócio:

  • ⚠️ Sem convite por email. O usuário é criado por CRUD direto e o admin define/reseta a senha — não há status convidado nem link de ativação. Ativar/inativar por ação administrativa direta.
  • Inativar usuário revoga sessões ativas imediatamente.
  • Operador sem papel/permissão atribuído não consegue operar (e não é autorizado nos canais de tempo real).

4.5 Responsáveis

⚠️ Seção reescrita (2026-08-12). A versão original descrevia um workflow de aprovação de responsável como gate de acesso — isso não existe mais. O responsável entra no app por CPF + email + confirmação por código (Fortify); o admin pré-cadastra o responsável e pode bloquear/desbloquear, mas não aprova o acesso. Ver §1.4.

Permissão: conforme responsaveis.* (ver, criar, editar, excluir, bloquear)

O admin gerencia o responsável direto: perfil 360º (dados, alunos vinculados, veículos, atividade), busca, vincular/desvincular alunos, bloquear/desbloquear e veículos inline (criar/editar/favoritar/remover, sempre no escopo do próprio responsável).

CampoTipoRegras
nome*string(200)
cpf*string(14)Validação dígito verificador; usado no match de onboarding (CPF + email)
email*emailUsado no match de onboarding
telefone*string(20)
fotoimageUsada para verificação na portaria (capturada no app no 1º acesso)
tipo*enumParentesco/tipo de vínculo
bloqueadobooleanAção administrativa (bloquear/desbloquear); responsável bloqueado não acessa o app nem assina o canal de tempo real
site_idFKVínculo N:N com escolas (o responsável pode ter mais de uma)
alunos_vinculadosFK[]Vínculo com alunos (N:N); capacidades por aluno definem o que o responsável secundário pode fazer (ver App do Responsável §4.3)

Onboarding (substitui o antigo workflow de aprovação): o responsável informa CPF + email no app → o backend faz o match com o cadastro → envia código de 6 dígitos por email → confirmação via Fortify. Sem convite, sem fila de aprovação; CPF desconhecido resulta em 422 silencioso. Detalhes em Autenticação e Autorização.

4.5.1 Capacidades por aluno (não por "tipo" fixo)

O que um responsável secundário pode fazer é controlado por capacidades por aluno, resolvidas pelo backend e aplicadas no app (o titular pai/mãe tem todas implicitamente): manage_responsibles, view_temporary_permissions, create_temporary_permissions, view_activities. Ver a tabela completa em App do Responsável §4.3.

⚠️ A matriz por "tipo de responsável" (pai/resp_financeiro/resp_pedagogico) da spec original foi substituída por esse modelo de capacidades por aluno.

4.5.2 Onboarding (substitui o antigo workflow de aprovação de documentos)

⚠️ O workflow de pendente → aprovado/rejeitado/ajuste_solicitado com revisão de documentos foi removido. Não há revisão/aprovação de responsável no painel. O acesso do responsável se dá por CPF + email + código (Fortify) (ver §4.5 e Autenticação e Autorização). A única ação administrativa sobre o acesso é bloquear/desbloquear — um responsável bloqueado não acessa o app nem assina o canal de tempo real.

O que o admin ainda aprova são as filas de Pessoas Autorizadas (§4.7) e Liberações Temporárias / Saídas Antecipadas (§4.8), ambas com approve / reject / request-changes.

4.6 Alunos

Permissão: conforme alunos.*

CampoTipoRegras
nome*string(200)
data_nascimento*dateNão pode ser futura
foto*imageObrigatória. JPG/PNG, max 5MB
matricula*string(50)Única por site
turma_id*FKReferência à turma
turno*enummanha, tarde, integral
site_id*FK
responsaveis_vinculados*FK[]Mínimo 1 responsável aprovado
notas_medicastextAlergias, condições etc. Visível para operadores
status*enumativo, inativo, transferido

Regras de negócio:

  • Aluno deve ter pelo menos 1 responsável com status aprovado para estar ativo.
  • Transferência entre sites do mesmo grupo preserva histórico; entre grupos cria novo registro.
  • Foto é exibida na interface "Estou Chegando" para confirmação visual.

4.7 Pessoas Autorizadas

Permissão: conforme autorizados.*

CampoTipoRegras
nome*string(200)
cpf*string(14)Validação dígito verificador
telefone*string(20)
emailemail
foto*imageObrigatória. JPG/PNG, max 5MB
tipo_autorizacao*enumpermanente, temporaria
validade_iniciodateObrigatório se tipo = temporaria
validade_fimdateObrigatório se tipo = temporaria
horario_iniciotimeIntervalo de horário permitido (opcional)
horario_fimtime
alunos_vinculados*FK[]Alunos que esta pessoa pode retirar
responsavel_autorizador_id*FKResponsável que criou a autorização
status*enumpendente, aprovado, rejeitado, expirado, cancelado, bloqueado, suspenso
motivo_bloqueiotextPreenchido ao bloquear/suspender
site_id*FK

Diferenças entre ações administrativas:

AçãoEfeitoReversível?
AprovarPessoa pode retirar alunos vinculados
RejeitarAutorização negada. Pode ser recriada pelo responsável
CancelarAutorização encerrada definitivamenteNão (nova autorização necessária)
BloquearImpedimento administrativo. Registro preservadoSim (desbloquear)
SuspenderImpedimento temporário (ex: investigação). Registro preservadoSim (reativar)

Regras de negócio:

  • Autorizações temporárias expiram automaticamente (cron/scheduled job atualiza status para expirado).
  • Pessoa bloqueada/suspensa dispara alerta se tentar retirar aluno.
  • (P1) Compartilhamento: responsável pode compartilhar autorização via link/convite no app.

4.8 Liberação Temporária de Saída

Permissão: conforme liberacoes_temporarias.*

CampoTipoRegras
aluno_id*FK
responsavel_id*FKResponsável solicitante (deve estar aprovado)
motivo*textJustificativa
data*dateNão pode ser passada
hora_inicio*time
hora_fim*timeDeve ser > hora_inicio
modo_saida*enumsozinho, acompanhado
acompanhante_nomestring(200)Obrigatório se modo = acompanhado
acompanhante_cpfstring(14)Obrigatório se modo = acompanhado
acompanhante_fotoimageRecomendado se modo = acompanhado
status*enumpendente, aprovado, rejeitado, utilizado, expirado, cancelado
aprovado_porFKUsuário admin/operador que aprovou
site_id*FK

Regras de negócio:

  • Responsável solicita via app; admin/operador aprova ou rejeita no painel.
  • Status muda para utilizado quando a saída é efetivamente registrada.
  • Status muda para expirado se data + hora_fim passou sem uso.
  • Modo sozinho é um diferencial competitivo — permite saída sem acompanhante com registro formal.

4.9 Turmas

Permissão: conforme turmas.*

CampoTipoRegras
nome*string(100)Único por site + ano_letivo
serie*string(50)Ex: "1º Ano", "Infantil 3"
turno*enummanha, tarde, integral
site_id*FK
ano_letivo*intEx: 2026
professorstring(200)Nome do professor responsável
salastring(50)Identificação da sala

Regras de negócio:

  • Turmas são versionadas por ano_letivo. Ao iniciar novo ano, turmas podem ser clonadas.
  • Não é possível excluir turma com alunos vinculados (reatribuir antes).

4.10 Agenda

Permissão: conforme agenda.*

CampoTipoRegras
titulo*string(200)
descricaotext
data*date
horariotime
turmas_aplicaveisFK[]Se vazio, aplica a todas as turmas do site
tipo*enumevento, feriado, reuniao, excursao, outro
afeta_retirada*booleanDefault: false
horario_retirada_alteradotimeObrigatório se afeta_retirada = true
site_id*FK

Regras de negócio:

  • Quando afeta_retirada = true, o sistema ajusta automaticamente a janela de retirada para a data/turmas afetadas.
  • Notificação push enviada aos responsáveis das turmas afetadas ao criar/editar evento que afeta retirada.

4.11 Comunicados

Permissão: conforme comunicados.*

CampoTipoRegras
titulo*string(200)
corpo*rich textSuporta formatação, links, imagens inline
publico_alvo*enumtodos, turmas_especificas, turnos_especificos
turmas_idsFK[]Obrigatório se público = turmas_especificas
turnosenum[]Obrigatório se público = turnos_especificos
prioridade*enumnormal, alta, urgente
enviar_push*booleanDefault: true
anexofilePDF/JPG/PNG, max 10MB
site_id*FK
autor_id*FKPreenchido pelo sistema

Regras de negócio:

  • Prioridade urgente envia push mesmo em horário silencioso.
  • Comunicados são somente leitura após publicação (editar cria nova versão).

4.12 Veículos do Responsável (P1)

Permissão: responsável gerencia no app; admin pode visualizar no painel.

CampoTipoRegras
placa*string(10)Formato Mercosul ou antigo
modelo*string(100)
cor*string(50)
responsavel_id*FK
favoritobooleanDefault: false. Apenas 1 favorito por responsável

Uso operacional:

  • Ao acionar "Estou Chegando", responsável seleciona veículo e modo de transporte (caminhando / dirigindo).
  • Card na interface do operador exibe: veículo (modelo, cor, placa) e modo de transporte.
  • Facilita identificação visual do responsável na portaria.

5. Painel de Monitoramento em Tempo Real

5.1 State Machine — Estados do Aluno no Fluxo de Retirada

┌──────────────┐    Entrada      ┌───────────┐   Pai aciona    ┌────────────────────┐
│ fora_da_escola│───(hardware/QR)──►│ na_escola │──"Estou Chegando"──►│ aguardando_retirada│
└──────────────┘                 └───────────┘                 └─────────┬──────────┘
       ▲                                                                │
       │                                                     Operador "Preparar"
       │                                                                │
       │                                                                ▼
       │                          ┌──────────┐   Operador     ┌──────────────────┐
       └───────Saída registrada───│ retirado │◄──"Confirmar"──│ sendo_preparado   │
                                  └──────────┘                └───────┬──────────┘
                                       ▲                              │
                                       │                   Operador "Pronto"
                                       │                              │
                                       │                              ▼
                                       │                      ┌───────────┐
                                       └──────────────────────│  pronto   │
                                                              └───────────┘
StatusSignificadoAcionado por
fora_da_escolaAluno fora da escolaEstado padrão / após retirada confirmada
na_escolaAluno presente na escolaEvento de entrada (hardware de controle de acesso / QR code)
aguardando_retiradaResponsável sinalizou "Estou Chegando"Ação do responsável no app móvel
sendo_preparadoOperador está localizando/preparando o alunoAção do operador na interface
prontoAluno no ponto de retirada, aguardando responsávelAção do operador
retiradoAluno foi retirado da escolaEvento de saída (hardware/QR/confirmação do operador)

5.2 Layout do Painel (Kanban-style)

Barra de Resumo (topo):

  • Total de alunos do site
  • Presentes (na_escola + demais estados ativos)
  • Na fila (aguardando_retirada + sendo_preparado + pronto)
  • Retirados hoje
  • Alertas ativos (badge com contagem, cor #ef4444)

Colunas:

ColunaConteúdo do CardOrdenação
Estou ChegandoFoto do responsável, nome, aluno(s), turma(s), timestamp, veículo (P1)Mais antigo primeiro (FIFO)
Sendo PreparadoFoto do aluno, nome, turma, operador responsávelMais antigo primeiro
Pronto para RetiradaFoto do aluno, nome, tempo de espera (timer), turmaMais antigo primeiro
RetiradoFoto do aluno, nome, horário de retirada, retirado porMais recente primeiro (últimas N)

Filtros: turma, turno, busca por nome do aluno ou responsável.

Atualização: WebSocket/SSE — dados refletem em tempo real para todos os operadores conectados.

5.3 Alertas em Tempo Real

NívelAlertaDescrição
Crítico (#ef4444)Retirada não autorizadaPessoa sem autorização válida tentou retirar aluno
Alto (#ef4444)Autorização expiradaPessoa com autorização temporária vencida tentou retirar
Médio (#f59e0b)Aluno não retiradoAluno ainda na escola após encerramento da janela de retirada
Baixo (#f59e0b)Timeout "Estou Chegando"Responsável sinalizou mas não chegou dentro do tempo configurável

Comportamento:

  • Alertas críticos: notificação sonora + visual (banner vermelho) + push para Admin Site.
  • Alertas médios/altos: notificação visual no painel + badge.
  • Alertas baixos: apenas badge + log.

6. Interface Operacional "Estou Chegando" (Tablet/Mobile)

6.1 Contexto

Interface dedicada para uso na portaria, otimizada para tablet ou celular. Distribuída como PWA (Progressive Web App) para instalação rápida sem app store. Separada do painel admin — acesso com login do operador.

6.2 Fluxo Operacional Completo

1. Responsável aciona "Estou Chegando" no app
   └── Seleciona aluno(s) + veículo (P1) + modo transporte (P1)

2. Card aparece na tela do operador
   └── Foto do responsável, nome, aluno(s), turma(s), timestamp, veículo

3. Operador toca "Preparar Aluno"
   └── Status → sendo_preparado
   └── Comunicação interna para buscar aluno na sala

4. Aluno chega na portaria
   └── Operador toca "Aluno Pronto"
   └── Status → pronto

5. Responsável chega na portaria
   └── Operador verifica identidade (comparação visual com foto / QR code / biometria)
   └── Operador toca "Confirmar Retirada"
   └── Status → retirado

6. Registro de auditoria criado automaticamente
   └── Quem retirou, quem confirmou, horário, método de verificação

6.3 Filtros do Operador

  • Operador vê todos os alunos da fila por padrão (sem restrição de turma/turno).
  • Filtro manual disponível por turma ou turno conforme necessidade.
  • Sem atribuição fixa de turma/turno ao operador — flexibilidade total.

6.4 Cenários Especiais

CenárioComportamento
Múltiplos filhosMesmo card agrupa todos os filhos. Operador confirma retirada de todos de uma vez ou individualmente.
Pessoa autorizada (não responsável)Card exibe foto e dados da pessoa autorizada + tipo e validade da autorização.
Liberação temporária "sozinho"Card indica "saída solo". Sem verificação de acompanhante. Operador registra saída diretamente.
Pessoa não autorizadaAlerta vermelho (#ef4444). Retirada bloqueada. Registro no log de auditoria.
Walk-in sem "Estou Chegando"Operador faz busca manual pelo nome do aluno → verifica autorização do acompanhante → processa retirada normalmente.
Responsável com status bloqueadoAlerta vermelho. Retirada bloqueada. Admin deve intervir.

6.5 Design

  • Touch targets: mínimo 48×48px para botões de ação.
  • Notificações: som + vibração ao receber novo card "Estou Chegando".
  • Paleta (⚠️ aspiracional — a paleta abaixo é da spec original; não há um design system publicado. A marca real do produto usa navy #043471 + azul #0277F4, ver o styleguide do backend e o App do Responsável §8):
    • #ff781e (Brand Orange) — ações primárias, botão "Preparar"
    • #22c55e (Safety Green) — confirmação, "Retirada Confirmada"
    • #ef4444 (Alert Red) — bloqueio, alertas críticos
    • #f59e0b (Alert Amber) — warnings, pendências
  • Tipografia: Inter, body 14px/400, labels 12px/500.
  • Modo escuro: suporte planejado (P1), importante para uso externo/portaria.

7. Funcionalidades Complementares

7.1 Logs de Auditoria

Permissão: audit_logs.ver

Registro imutável de todas as ações no sistema.

Campo do LogDescrição
timestampUTC
usuario_idQuem realizou a ação
acaocriar, editar, excluir, aprovar, rejeitar, login, retirada, etc.
entidadeTipo da entidade afetada
entidade_idID da entidade
dados_anterioresSnapshot antes da alteração (JSON)
dados_novosSnapshot após a alteração (JSON)
ipEndereço IP
user_agentNavegador/dispositivo

Interface:

  • Viewer com filtros: período, usuário, tipo de ação, entidade.
  • Busca por texto nos dados.
  • Logs são imutáveis — não podem ser editados ou excluídos.
  • Exportação jurídica: CSV/PDF com hash de integridade (SHA-256) para validade legal.

7.2 Relatórios de Compliance (P1)

Relatórios exigidos por ECA (Estatuto da Criança e do Adolescente) e LGPD:

  • Frequência por período: presença/ausência por aluno, turma, turno.
  • Retiradas por período: quem retirou, horário, método de verificação.
  • Autorizações ativas: lista de pessoas autorizadas por aluno.
  • Conformidade legal: relatório consolidado para apresentação a órgãos competentes.

7.3 Dashboard Analítico (P1)

  • Tempo médio de retirada (do "Estou Chegando" à confirmação).
  • Horários de pico por janela de retirada.
  • Estatísticas por turma (tempo médio, volume).
  • (P2) Relatórios consolidados por grupo escolar.

7.4 Importação / Exportação

Importação (P0):

  • CSV para alunos e responsáveis — essencial para onboarding de escolas.
  • Template CSV fornecido pelo sistema com cabeçalhos e exemplos.
  • Validação prévia: exibe erros antes de confirmar importação.
  • API de importação para integração com sistemas existentes.

Exportação:

  • CSV/PDF de listas (alunos, responsáveis, autorizados, turmas).
  • CSV/PDF de logs e relatórios.
  • Exportação de dados pessoais para atendimento LGPD (ver 7.7).

7.5 Configurações do Site

Permissão: configuracoes_site.ver, configuracoes_site.editar

  • Geofencing: mapa interativo para definir centro e raio.
  • Janelas de retirada: CRUD conforme seção 4.2.1.
  • Modo pickup: hardware, QR code ou ambos.
  • Branding: logo, nome exibido, cores customizadas (P1).
  • Timeout "Estou Chegando": tempo em minutos para expirar sinalização (default: 30min).
  • Configurações herdadas do grupo: indicador visual mostra quais configs usam o padrão do grupo e quais têm override local.

7.6 Gestão de Notificações

  • Configurar quais eventos disparam push (por tipo de responsável).
  • Horários silenciosos (não enviar push fora do período configurado, exceto urgente).
  • Busca e filtro no histórico de notificações enviadas.

7.7 LGPD — Solicitações de Dados (P1)

Painel para gerenciar DSARs (Data Subject Access Requests):

  • Responsável solicita via app ("Quero meus dados").
  • Admin visualiza solicitações pendentes.
  • Ações: exportar dados pessoais (JSON/PDF) ou anonimizar registros.
  • Prazo legal: 15 dias para atendimento (timer visual no painel).
  • Log da solicitação e atendimento para compliance.

7.8 Webhooks (P1)

  • Configuração de URLs de callback para eventos: entrada, saida, estou_chegando, autorizacao_criada, autorizacao_aprovada.
  • Retry com backoff exponencial (3 tentativas).
  • Log de entregas com status (sucesso/falha).
  • Permite integração com sistemas externos (ERPs, ferramentas de BI).

7.9 Painel Consolidado do Grupo (P1)

Dashboard agregado para Admin Grupo Escolar:

  • Visão geral de todos os sites: alunos presentes, retiradas em andamento, alertas.
  • Comparativos entre sites (tempo médio de retirada, volume).
  • Drill-down para painel individual de cada site.

8. Módulos Futuros (P2 — Placeholders)

Módulos planejados para fases futuras. Não implementados no MVP.

MóduloDescriçãoReferência
Gestão de VisitantesCadastro, motivo da visita, check-in/check-out, crachá digital
Canal de Comunicação Escola-FamíliaMessaging bidirecional entre escola e responsáveisClassApp, Agenda Edu
Feed de Notícias da EscolaPublicação de conteúdo institucional, fotos, eventos
Controle de Frequência AutomatizadoFrequência escolar a partir de eventos de entrada/saídaSecullum
Integração ERPs EducacionaisSincronização com Sponte, WPensar, iScholar
API Aberta para TerceirosDocumentação pública, gestão de credenciais, rate limiting

9. Navegação do Painel Web

9.1 Sidebar — Admin Site

Dashboard
Monitoramento
─────────────────────
Alunos
Turmas
Responsáveis
Pessoas Autorizadas
Liberações Temporárias
─────────────────────
Agenda
Comunicados
─────────────────────
Usuários & Operadores
Perfis de Operador
─────────────────────
Relatórios
Logs de Auditoria
─────────────────────
Configurações

9.2 Adições por Papel

PapelAdições na navegação
Admin GrupoSeletor de site no header + item "Visão do Grupo" no dashboard + "Grupos Escolares" na sidebar
OwnerSeletor de grupo no header + "Configurações da Plataforma" + "Grupos Escolares" (CRUD completo)

10. Regras Transversais

10.1 Integridade de Dados

  • Soft delete em todas as entidades — campo deleted_at. Registros excluídos são ocultados da UI mas preservados para auditoria.
  • Timestamps armazenados em UTC. Exibição convertida para o timezone do site.
  • Concorrência: WebSocket/SSE para sincronização em tempo real entre múltiplos operadores simultâneos.

10.2 LGPD e Compliance

  • Exportação de dados pessoais sob demanda (DSAR — seção 7.7).
  • Anonimização de dados quando solicitado.
  • Consentimento explícito coletado no cadastro do responsável.
  • Logs de auditoria imutáveis com certificação de integridade para fins jurídicos.

10.3 Segurança

  • Status ativo/inativo para usuários — nunca deletar, preservar trilha de auditoria.
  • Sessões invalidadas imediatamente ao inativar usuário.
  • Autenticação: email + senha com MFA (P1).
  • Rate limiting em endpoints de autenticação.

10.4 Performance

  • Painel de monitoramento: latência máxima de 2s para atualização de status.
  • Importação CSV: processamento assíncrono com feedback de progresso para arquivos > 100 registros.
  • Paginação em todas as listagens (default: 25 itens/página).

Apêndice A — Referência Cruzada com o Backlog

ℹ️ O antigo repositório de ideias de funcionalidades foi movido para o backlog de produto. A tabela abaixo cruza as seções deste doc com o backlog.

Seção deste docFuncionalidades relacionadas no backlog de produto
3. Permissões5.3 Perfis e permissões
4.5 Responsáveis2.1–2.5 Cadastro e aprovação
4.7 Autorizados3.1–3.5 Autorização de terceiros
4.8 Liberações4.1–4.4 Liberação temporária
5. Monitoramento5.1 Dashboard, 5.5 Alertas
6. Estou Chegando1.1–1.6 Fluxo de retirada
7.1 Audit Logs5.6 Logs de auditoria
7.2 Compliance5.7 Relatórios
7.4 Import/Export5.4 Importação

Apêndice B — Ver também

Documentação do ionCLASS