# Changelog

Todas as alterações relevantes deste projeto são documentadas aqui, por
release, **na ordem em que foram implementadas** (mais antiga primeiro —
diferente da convenção usual de changelog, que lista a mais recente
primeiro; a ordem cronológica foi uma escolha deliberada pra este
documento, pra acompanhar a evolução do sistema do início até hoje).

Numeração de versão no padrão [SemVer](https://semver.org/lang/pt-BR/)
(`MAJOR.MINOR.PATCH`), com a primeira release em `0.1.0`:

- **MAJOR**: mudança grande que quebra compatibilidade com o
  funcionamento anterior.
- **MINOR**: nova funcionalidade, compatível com o que já existia.
- **PATCH**: correção de bug ou ajuste pequeno, sem funcionalidade nova.

O projeto ainda está na faixa `0.x` — nenhuma mudança até agora quebrou
compatibilidade de verdade (é um sistema único, sempre implantado na
versão mais recente, sem clientes externos presos a uma versão antiga),
por isso a coluna MAJOR nunca subiu ainda.

As categorias dentro de cada versão seguem o padrão
[Keep a Changelog](https://keepachangelog.com/pt-BR/): **Adicionado**
(funcionalidade nova), **Corrigido** (bug), **Alterado** (mudança de
comportamento existente).

---

## [0.1.0] — 2026-08-13

### Adicionado
- Reconstrução completa do sistema do zero, conforme especificação
  formal, substituindo o MVP anterior (arquivado, não descartado).
- Stack inicial: Next.js + Socket.IO (tempo real) + PostgreSQL/Prisma +
  Auth.js (login por usuário/senha).
- Fluxo básico de chamado da Enfermagem: paciente aciona pelo QR Code do
  quarto, equipe recebe em tempo real, atende e finaliza.
- Trilha de auditoria imutável a nível de banco (`EventoAuditoria`, com
  `REVOKE UPDATE/DELETE` pra role de runtime do app).

## [0.1.1] — 2026-08-14

### Corrigido
- Singleton do Socket.IO entre `server.ts` e as rotas de API — usava uma
  variável de módulo comum, que não é compartilhada entre o processo do
  `server.ts` (roda via `tsx`, fora do bundler do Next) e as rotas
  (dentro do grafo do Next); corrigido guardando a instância em
  `globalThis`.

### Alterado
- Som de alerta e notificações push passam a ser ativados
  automaticamente ao carregar a tela (com botão manual de retaguarda se
  o navegador bloquear).

## [0.2.0] — 2026-08-14

### Adicionado
- Botão de emergência na tela do quarto, com prioridade máxima.
- Duas telas por setor: parede (só visualização, letras grandes) e
  atendimento (interativa, com os botões de ação).
- Suporte a múltiplos postos de Enfermagem, cada um com fila própria.
- Primeira versão do cadastro administrativo: postos, usuários e
  quartos.

## [0.3.0] — 2026-08-14

### Adicionado
- Tela "Início" com atalhos de navegação de acordo com o papel de quem
  logou.
- Escopo configurável do supervisor ("Meus setores") — cada supervisor
  escolhe quais postos acompanha.
- Modo escuro como padrão do sistema (pensado pro uso noturno/hospitalar).

### Corrigido
- Uma tag `<script>` inválida introduzida no dia anterior, causando
  aviso de hidratação.

## [0.4.0] — 2026-08-14

### Adicionado
- Login vira a tela inicial do sistema (raiz `/`).
- Central de Ajuda — documentação navegável e disponível pra download
  dentro do próprio sistema.
- Sete melhorias de produto de uma vez: acuidade do paciente por
  quarto, prioridade em 3 níveis (normal/urgente/emergência) com cor e
  som distintos, SLA configurável por posto, cadeia de escalonamento
  automático (supervisor → administração), relatórios por turno e
  carga por funcionário, checklist de rondas por posto/quarto, e
  chamada de áudio bidirecional (WebRTC) entre paciente e posto.

## [0.5.0] — 2026-08-14

### Adicionado
- Logo oficial da Unimed Norte Fluminense no cabeçalho e na tela de
  login.
- Modo "Visualizar como" para a Administração — abre qualquer tela do
  sistema sem precisar logar com outra conta.

### Corrigido
- Bugs de navegação (histórico do navegador não refletia corretamente
  as trocas de tela).

## [0.6.0] — 2026-08-14

### Adicionado
- Botão "Voltar" global no cabeçalho, disponível em qualquer tela do
  sistema.

### Alterado
- Ajustes de layout ao redor da logo.

## [0.7.0] — 2026-08-14

### Adicionado
- Cadastro de dispositivos de emergência físicos (botão/cordão IoT) em
  `/admin/dispositivos`, com geração e rotação de chave de API
  (revelada só uma vez na criação).

## [0.8.0] — 2026-08-14

### Adicionado
- Generalização do conceito de "posto": Copa e Rouparia passam a ter
  postos e filas próprias, além da Enfermagem — deixa de ser um fluxo
  único.

## [0.8.1] — 2026-08-14

### Corrigido
- Login dentro do ambiente Docker.
- Links que deveriam abrir em nova aba e não abriam.

### Alterado
- Logo aumentada.

## [0.9.0] — 2026-08-14

### Adicionado
- Cadastro de leitos em lote: um prefixo + lista de leitos cria vários
  quartos de uma vez, cada um com QR Code e fila de chamados próprios.
- SLA de finalização — limite de tempo independente entre "estamos a
  caminho" e concluir o atendimento (diferente do SLA de atendimento,
  que só olha até dar ciência do chamado).

### Corrigido
- Diversos ajustes de UX identificados no uso.

## [0.9.1] — 2026-08-14

### Corrigido
- Documentação técnica e manual de uso atualizados pra cobrir postos,
  dispositivos, leitos em lote e o SLA de finalização.

## [0.10.0] — 2026-08-14

### Adicionado
- Edição de postos, usuários, quartos e dispositivos já cadastrados
  (antes só era possível criar, nunca editar).

### Alterado
- Botão de tema do cabeçalho vira só ícone (economiza espaço).

## [0.11.0] — 2026-08-14

### Adicionado
- Papel do usuário (Enfermagem/Copa/Rouparia/Supervisão/Administração)
  passa a ser editável depois de criado.
- Logo do cabeçalho vira também um atalho pra tela Início.

### Corrigido
- Erro 404 na tela pública `/chamar/<número do quarto>` em alguns casos.

## [0.11.1] — 2026-08-14

### Corrigido
- Botões que ficavam inertes (sem resposta ao toque) ao acessar o
  sistema pelo IP da rede local em vez de `localhost`.
- Tela do quarto ajustada pra caber sem rolar em celulares.

## [0.11.2] — 2026-08-15

### Corrigido
- Detecção automática do IP da rede local em `allowedDevOrigins` —
  elimina a necessidade de configurar isso à mão a cada rede diferente.

## [0.11.3] — 2026-08-15

### Corrigido
- Repasse da variável de ambiente `DOMINIO` pro Caddy, que não estava
  emitindo o certificado HTTPS automático pro domínio certo.

### Adicionado
- Documentação do uso de DDNS (No-IP) pra hospitais sem domínio próprio.

## [0.12.0] — 2026-08-15

### Adicionado
- Política de senha forte obrigatória no cadastro de usuários: mínimo
  12 caracteres, com maiúscula, minúscula, número e símbolo, e nunca
  pode conter o nome da pessoa, o setor ou o nome da empresa.

### Corrigido
- Quebra de linha indevida na tabela de usuários.

## [0.12.1] — 2026-08-15

### Corrigido
- Quadro das telas de administração alargado pra a tabela de usuários
  não precisar rolar horizontalmente.

## [0.13.0] — 2026-08-15

### Adicionado
- Chat de texto por chamado entre paciente e equipe, com contador de
  mensagens não lidas.
- Rodapé com direitos autorais em todas as telas do sistema.

### Alterado
- Chamada de voz volta sozinha pro estado inicial alguns segundos
  depois de encerrada, sem exigir toque manual.

## [0.13.1] — 2026-08-15

### Corrigido
- Erro 500 ao visualizar ou baixar documentos da Central de Ajuda
  quando rodando em Docker.

## [0.14.0] — 2026-08-15

### Adicionado
- Categorias "Comercial" (apresentação em slides) e "Treinamento em
  vídeo" (seis vídeos curtos, um por papel) na Central de Ajuda.

## [0.15.0] — 2026-08-15

### Adicionado
- Configuração de rondas por posto: exigir leitura de QR Code pra
  confirmar, e faixas de horário com intervalo esperado entre rondas
  (pode variar por horário do dia).
- Primeira versão da agenda de medicação por quarto, com alerta
  "5 minutos antes" do horário.

## [0.15.1] — 2026-08-15

### Corrigido
- Card de chamado que ficava travado no estado antigo (ex.: botão
  "Finalizar atendimento" não sumia depois de clicado) quando a
  conexão em tempo real caía — a tela não aplicava mais a atualização
  na hora, só esperava o evento de socket.

## [0.15.2] — 2026-08-15

### Corrigido
- Conexão em tempo real que ficava presa em "Reconectando…" sem se
  recuperar sozinha — causa identificada na época: várias conexões de
  socket da mesma página compartilhando uma única conexão em segundo
  plano sem o cliente perceber (mais tarde, na v0.18.0, foi encontrada
  a causa raiz real e completa desse mesmo sintoma).

## [0.16.0] — 2026-08-15

### Adicionado
- Recorrência por intervalo de horas na agenda de medicação (ex.: de 6
  em 6h), além do horário fixo diário original.
- Menu de administração da Agenda de Medicação por posto (liga/desliga
  a feature e o campo de medicamento).
- Status de ocupação do quarto (Ocupado / Alta hospitalar / Liberado),
  alterado pela Enfermagem — marcar como Liberado limpa a agenda de
  medicação daquele quarto automaticamente.

## [0.17.0] — 2026-08-15

### Adicionado
- Opção "administrar somente uma vez" na agenda de medicação (além de
  horário fixo e recorrência por intervalo).

### Corrigido
- Semântica do campo "medicamento" na agenda: era tratado como
  obrigatório/opcional, corrigido pra controlar se o campo aparece ou
  não no formulário — quando aparece, é sempre opcional.
- Reforço de resiliência na reconexão de socket (reconecta ao voltar a
  aba/rede).
- Ajustes de interface pendentes de revisão anterior.

## [0.17.1] — 2026-08-15

### Corrigido
- Texto do material comercial em PDF: "Cadastro de leitos em lote"
  (estava como "quartos", terminologia divergente da usada no próprio
  sistema).

## [0.18.0] — 2026-08-16

### Corrigido
- **Causa raiz real** do "Reconectando…" preso: o cookie de sessão
  usado pra autenticar a conexão de tempo real da equipe não batia com
  o protocolo configurado (`AUTH_URL`), fazendo a autenticação do
  socket falhar silenciosamente pra sempre, independente de qualquer
  lógica de reconexão.
- Aviso mais claro quando notificações push estão bloqueadas pelo
  navegador (antes, o botão "Ativar notificações push" clicava e
  parecia não fazer nada).

### Adicionado
- Chat da equipe abre sozinho quando chega a primeira mensagem do
  paciente, sem precisar clicar em "Chat".
- Tela do paciente volta sozinha pro início alguns segundos depois do
  chamado ser concluído, sem precisar clicar em "Fazer outro chamado".

## [0.18.1] — 2026-08-16

### Alterado
- Cores dos botões de status de ocupação do quarto invertidas —
  Ocupado passa a vermelho, Liberado passa a verde, pra bater com o
  significado de cada estado.

## [0.19.0] — 2026-08-16

### Adicionado
- Relatório de taxa de ocupação de quartos: números (% Ocupado/Alta
  hospitalar/Liberado) e gráfico com curva de variação + linha de
  tendência ao longo do tempo, além de % de ocupação por quarto
  individual.
- Filtro de período compartilhado (24h, 48h, 72h, esta semana, semana
  passada, 15 dias, mês atual, mês anterior, último trimestre, este
  ano, ano anterior, ou personalizado), reaproveitado também na tela
  "Relatórios e SLA" (que antes não tinha filtro de data nenhum).
- Menu "Relatórios" na Administração, com a mesma visão de "Relatórios
  e SLA" da Supervisão, sem restrição de escopo — antes só alcançável
  de forma indireta via "Visualizar como".

## [0.20.0] — 2026-08-16

### Alterado
- Tela "Relatórios" (Supervisão e Administração) deixa de ser uma
  página só com as duas seções empilhadas e vira um hub com um botão
  pra cada relatório — "Relatórios e SLA" e "Taxa de ocupação de
  quartos" — cada um com seu próprio filtro de período, independente
  um do outro.
- Filtro de período reformulado no estilo do seletor de período do
  Zabbix 7: um botão colapsado mostrando o período atual, que abre um
  painel com "De"/"Até" personalizados de um lado e atalhos rápidos
  agrupados em colunas do outro — no lugar da fileira fixa de 12
  botões sempre visível.

## [0.21.0] — 2026-08-16

### Adicionado
- Cadastro de quartos em lote por faixa numérica: informa o número
  inicial e o final (ex.: 101 a 110), em vez de digitar cada leito
  separado por vírgula — prefixo continua opcional, pra enfermarias
  com vários leitos por quarto físico.
- Campo "andar" (opcional) em Quarto e em Posto, pra facilitar
  localização e filtro no cadastro.
- Filtro na tabela de quartos (busca por número, ala, andar, status) —
  a lista cresce rápido e dificultava achar um quarto específico.
- Atalho "Relatórios" na tela Início da Administração, apontando
  direto pro hub de relatórios (já existia no menu fixo do topo das
  telas `/admin/*`, mas não no lançador inicial por papel).

## [0.21.1] — 2026-08-16

### Alterado
- Quarto novo passa a nascer com status de ocupação **Liberado** em vez
  de Ocupado — o admin acabou de cadastrar, ainda não tem paciente ali.
  Quartos já existentes não são afetados (o padrão só vale pra
  cadastros novos).
- Checklist de rondas só lista quartos com status **Ocupado** — sem
  paciente, não tem o que rondar. Quarto marcado Liberado/Alta
  hospitalar some do checklist automaticamente até voltar a Ocupado.

## [0.22.0] — 2026-08-16

### Adicionado
- Visão consolidada por quarto na tela de atendimento da Enfermagem —
  um botão só com o número do quarto que, ao clicar, abre acuidade,
  status de ocupação, rondas (se estiver Ocupado) e a medicação
  agendada daquele quarto num único lugar. A medicação aparece
  ordenada com a próxima dose no topo, e reordena sozinha ao agendar
  uma nova medicação ou marcar alguma como administrada. Os painéis
  por tipo (Acuidade, Status, Rondas, Medicação) continuam existindo.
- Campo opcional "nº de registro do enfermeiro" (ex.: COREN) ao marcar
  uma medicação como administrada — habilitável/desabilitável por
  posto em Administração → Medicação (desligado por padrão).

### Alterado
- Botão/rótulo "Medicação efetuada" passa a se chamar "Medicação
  administrada" em toda a tela de atendimento.

## [0.22.1] — 2026-08-16

### Alterado
- Visão por quarto: clicar no botão do quarto agora abre uma **tela
  própria** (`/atendimento/enfermaria/quarto/[id]`) só com as
  informações daquele quarto, em vez de expandir dentro da mesma
  página. Os botões deixam de ter o prefixo "Quarto" — mostram só o
  número (que já inclui o leito quando for o caso, ex.: "E101 Leito
  01").
