Aparência
Painel Público de Status (kiosk)
O que é este documento — o mapa da quarta superfície do ionCLASS: o painel público de status, um kiosk exibido na portaria/recepção que mostra a fila de retirada ao vivo sem dados sensíveis. É autenticado por token de kiosk (não por sessão de usuário) e vive dentro do próprio backend (página Inertia). Superfícies irmãs: App do Responsável, Monitor de Portaria e Painel Administrativo.
1. Propósito
Uma tela pública (Chrome em fullscreen) na portaria/recepção que mostra, ao vivo, quais crianças já foram sinalizadas para retirada e em que status — para que responsáveis e crianças acompanhem a fila num telão, sem operador. Diferente do monitor de portaria, aqui ninguém opera: é somente leitura, e por ser uma tela pública não pode exibir dado sensível.
A página é forçada em dark para contraste/legibilidade a distância (pátio), exibe um relógio de parede e um card por criança na fila. Estado vazio: "Aguardando chegadas — Use o botão 'Estou Chegando' no aplicativo".
2. Autenticação por token de kiosk
Não há login de usuário. O acesso é por um token de kiosk — um token opaco (UUID), por escola, gerado no painel administrativo:
- Cada token pertence a uma escola, tem um rótulo e uma validade opcional, registra quem o criou e quando foi usado pela última vez, e pode ser revogado. Um token é ativo quando não está revogado E não está expirado.
- Um middleware de validação de token protege tanto a página quanto os endpoints de suporte. O token chega via querystring
?token=…(o kiosk é aberto com a URL contendo o token) ou pelo headerX-Monitor-Token. - O kiosk faz um heartbeat a cada 5 min (
GET /api/v1/public-monitor/{school}/heartbeat): 200 = ainda válido; 401 = token rotacionado/revogado/expirado → a tela mostra o overlay "Exibição expirada. Recarregue a página." (não reconecta sozinho, para não vazar estado com token morto). O heartbeat também registra o último uso do token.
2.1 Provisionamento (no painel admin)
Os tokens são gerenciados na aba "Configurações" do detalhe da escola (superfície Painel Administrativo), restritos à permissão de configurações da escola e ao escopo da própria escola. Ações:
| Ação | Rota |
|---|---|
| Gerar | POST /admin/schools/{school}/public-monitor-tokens |
| Rotacionar | POST /admin/schools/{school}/public-monitor-tokens/{token}/rotate |
| Revogar | DELETE /admin/schools/{school}/public-monitor-tokens/{token} |
O admin copia a URL com o ?token= e a abre no dispositivo do kiosk em fullscreen.
3. Payload privacy-safe (5 campos)
O cartão público é a fonte única do formato exibido e impõe o requisito de privacidade: somente estes cinco campos cruzam o canal público — nunca nome completo, foto, id interno, responsável ou coordenadas.
| Campo | Conteúdo |
|---|---|
card_id | id do sinal de chegada (UUID opaco), nunca o id do aluno — updates/fades miram o mesmo card |
student_first_name | Só o primeiro nome da criança |
class_name | Só a 1ª turma (expor a lista completa vazaria a rotina/extracurriculares da criança) |
status | O estado de retirada (mapeado para rótulo público na tela) |
since | ISO-8601 de quando entrou nesse estado (exibido como tempo relativo) |
4. Tempo real (canal público)
A página assina o canal school.{id}.public-monitor — um canal público (Reverb), porque os eventos que trafegam nele já são o cartão privacy-safe de 5 campos. As credenciais vêm de GET /api/v1/public-monitor/{school}/credentials ({ key, channel }). Três eventos:
| Evento (wire) | Payload |
|---|---|
ArrivalSignalCreated | { cards: [card…] } — um card por irmão do sinal |
StudentStateChanged | um card (5 campos) |
PickupConfirmed | apenas { card_id } — a criança sai da tela (fade); nenhuma identidade cruza o canal |
A autorização do canal é defesa em profundidade: só autoriza quando o contexto de escola resolvido pelo token bate com a escola pedida. O verdadeiro portão é a validação do token de kiosk na página e nos endpoints.
5. Onde o código vive
Diferente das superfícies mobile/monitor (repos próprios), o painel público é servido pelo próprio backend: uma página Inertia que renderiza os sinais ativos não terminados, mais os endpoints de suporte de heartbeat e credenciais.
6. Ver também
- Tempo Real · Ciclo de Retirada · Autenticação e Autorização
- Runbook de operação do tempo real: Runbook de Tempo Real
- Superfícies irmãs: App do Responsável · Monitor de Portaria · Painel Administrativo
- Visão geral: Visão de Produto · Personas e Superfícies · Glossário