Painel de Chamadas
Chamada de paciente em tempo real
- Meu papel
- Desenvolvedor full stack — extensão, servidor WebSocket e painel
- Cliente
- Wi Consultoria
- Setor
- Recepção de unidade de saúde
- Período
- 2024 — presente
- Status
- Em produção
Código proprietário. Sistema privado de cliente — o repositório não é público.
Números
4
peças no ecossistema
Extensão, servidor de chamada, painel na TV e API.
0
linha alterada no PEC
A integração é por injeção no DOM — o prontuário fica intacto.
WS
entrega em tempo real
Pub/sub por WebSocket, sem polling na TV.
Contexto
O PEC é software federal instalado no município. A gente não pode alterá-lo — mas o profissional trabalha dentro dele o dia inteiro. Chamar o próximo paciente, na prática, era grito no corredor ou uma TV com lista estática que ninguém atualizava.
O problema
Disparar uma chamada a partir de um sistema que não é nosso, entregar em tempo real numa TV que pode estar em outra sala, e fazer isso de forma que a unidade instale sozinha — sem técnico no local, sem alterar o PEC e sem depender de rede perfeita.
A abordagem
Uma extensão de navegador injeta o botão “chamar” na própria tela de atendimento do PEC, lendo o contexto que já está ali. O clique vira um POST para um servidor Fastify dedicado, que publica a chamada em pub/sub e empurra por WebSocket para o painel inscrito naquela sala. O painel mostra o nome e usa a síntese de voz do navegador para falar. Sem fila de mensagem pesada, sem polling e sem estado difícil de depurar.
Arquitetura
- 01
Extensão no PEC
Injeta o botão na lista de atendimento e guarda sala, triagem e modelo de chamada localmente. Integração por DOM, porque o código do PEC não é nosso para mudar.
- Chrome Extension
- React
- 02
Servidor de chamada
Fastify recebe a chamada, normaliza o identificador do painel e publica em pub/sub. Serviço pequeno e dedicado: se cair, nada mais cai com ele.
- Fastify
- WebSocket
- Redis
- 03
Painel na TV
Página Next.js inscrita no canal daquela sala. Recebe pelo WebSocket, exibe o nome em tipo grande e fala com a síntese de voz do navegador.
- Next.js
- Web Speech API
- 04
Alertas no prontuário
A mesma extensão também lê o cidadão aberto na tela e busca alertas na nossa API — informação útil aparecendo no fluxo de trabalho que já existe.
- Express
- REST
As partes difíceis
Integrar sem poder alterar
Injeção no DOM de um sistema de terceiro é frágil por natureza: uma atualização do PEC pode mudar a estrutura embaixo de você. A defesa foi manter a superfície de contato mínima e explícita — ler o menos possível, num só lugar, com falha silenciosa em vez de tela quebrada.
Identificar a TV certa
Uma unidade pode ter vários painéis; um município, muitas unidades. O identificador do painel é derivado e normalizado do mesmo jeito nas duas pontas — se a extensão e o painel discordarem de uma letra, a chamada vai para o vazio. Regra de normalização única, escrita uma vez.
O que é meu
- Extensão de navegador que injeta a chamada e os alertas dentro do PEC
- Servidor Fastify com WebSocket e pub/sub das chamadas
- Painel da TV: layout de tipo grande, fila e síntese de voz
- Normalização do identificador de painel compartilhada entre as pontas
Resultado
A sala de espera passou a funcionar sozinha: o profissional clica onde já estava trabalhando e o paciente ouve o próprio nome. É o módulo que mais rápido se explica para quem nunca viu o sistema — e o que mostra melhor que integração boa é a que não pede permissão para existir.
O que eu levei
- 01Serviço pequeno e dedicado vale mais que módulo dentro do monolito quando a falha tem que ser isolada.
- 02Tempo real com WebSocket é simples; a parte difícil é endereçar o destinatário certo.
- 03A melhor integração é a que o usuário não percebe que é integração.