Voltar ao índice
02Trabalho

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
Ver ao vivo(abre em nova aba)

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.

A

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.

B

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.

C

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.

D

Arquitetura

  1. 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
  2. 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
  3. 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
  4. 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
E

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.

F

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
G

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

  1. 01Serviço pequeno e dedicado vale mais que módulo dentro do monolito quando a falha tem que ser isolada.
  2. 02Tempo real com WebSocket é simples; a parte difícil é endereçar o destinatário certo.
  3. 03A melhor integração é a que o usuário não percebe que é integração.

Stack