Mensageria — Especificação (v1.35)

Documentos desta funcionalidade: 01 - Definição (v1.35) · 02 - Especificação (v1.35) · 03 - Protótipo (v1.35, código em 03 - Protótipo v1.35.html) · 04 - Mapeamento de Banco de Dados (v1.35) · Cenários de Teste (v1.35) · 05 - Registro de Decisões (v1.35)

Regras de negócio: RN-MSG-001 a RN-MSG-036, definidas no documento 01 e referenciadas aqui por ID. Regras de outras funcionalidades: RN-CM-015 e RN-CM-022 (Central do Médico), RN-AGM-018 (Agenda do Médico). Decisões transversais: DT-001 (data e fuso da clínica), DT-005, DT-006 (resolver vale para todos), DT-008 (ícones só Lucide ou react-icons), DT-011 (tradução de termos), DT-012 (idioma da clínica).

Marcação: [PROPOSTA] é sugestão do Designer que aguarda decisão do solicitante (ver 05 - Registro de Decisões).


2.1 Premissa de design

Cada decisão de interface vem de um momento do workflow descrito no documento 01 (item 1.5):

  • Ler rápido entre atendimentos (médico): cartões iguais no painel e na lista, uma linha por informação, sem rolagem horizontal.
  • Saber se o recado foi visto (recepção): última mensagem e seu autor sempre no cartão; estado e quem finalizou na conversa.
  • Distinguir pessoa de sistema na hora: pelo autor que abre a linha da mensagem (“Sistema:”, “Você”, o nome ou o nome com a equipe), sem ícone de tipo, para o alerta do sistema não parecer mais importante do que a mensagem de uma pessoa ou equipe (D-MSG-056).
  • Aviso de não lida que não compete com o resto: só a borda lateral de 3 px, sem mudar o peso do texto; a borda tem largura e posição próprias, e o leitor de tela recebe o texto MSG-TMSG-10, então o sinal não depende só da cor (D-MSG-056).
  • Encerrar só depois de abrir: resolver e descartar ficam dentro da conversa, com confirmação, porque a ação vale para todos e não tem “desfazer” (RN-MSG-008). O cartão só abre a conversa (D-MSG-047).

Mobile first: a largura mínima de referência é 360 px; alvos de toque de pelo menos 44 px; o painel e a lista usam coluna única.

2.2 Histórias de usuário

IDHistória
US-MSG-01Como recepcionista, quero enviar um recado ao médico com paciente, processo e prazo, para que ele reconheça o assunto sem me ligar.
US-MSG-02Como profissional, quero ver minhas conversas abertas, das não lidas para as lidas, para tratar primeiro o que acabou de chegar ou vence.
US-MSG-03Como profissional, quero responder na própria conversa, para manter tudo em ordem cronológica.
US-MSG-04Como profissional, quero resolver ou descartar uma conversa, para tirá-la da minha lista e das dos demais participantes.
US-MSG-05Como remetente, quero ver o estado da conversa e quem a finalizou, para não precisar perguntar.
US-MSG-06Como membro de equipe, quero receber as mensagens enviadas à equipe e ver o que os colegas fizeram, para não duplicar o trabalho.
US-MSG-07Como profissional, quero enviar uma mensagem a mim mesmo, para registrar um lembrete.
US-MSG-08Como médico, quero abrir o prontuário, a prescrição ou a consulta a partir da conversa, para chegar ao contexto com um clique.
US-MSG-09Como profissional, quero distinguir alertas do sistema de recados de colegas, e resolvê-los ou descartá-los sem responder.
US-MSG-10Como gestor, quero que as ações de mensageria fiquem registradas na trilha de auditoria, para atender ao SBIS.
US-MSG-11Como profissional, quero filtrar e buscar nas minhas listas de conversas, para achar uma conversa sem rolar a lista toda.

2.3 Descrição funcional por tela

2.3.1 Cartão de conversa (componente compartilhado)

Usado no painel da Central, na aba “Abertas” e na aba “Finalizadas”. Estrutura, de cima para baixo:

  1. Sem ícone de tipo (D-MSG-056, decisão do solicitante, 05/11/2026): o cartão não tem círculo nem ícone à esquerda (a v1.15 tinha pessoa, Lucide user, e sino, bell). Quem escreveu já aparece como autor da linha 1; um ícone a mais faria o alerta do sistema parecer mais importante do que a mensagem de uma pessoa ou equipe. O conteúdo ocupa toda a largura do cartão, com recuo de 16 px (--sp-4).
  2. Linha 1, a última mensagem (maior destaque, D-MSG-053): “autor: texto da última mensagem” em até 2 linhas (corpo, 14 px, --color-neutral-darker; o autor em peso médio e o texto da mensagem em peso normal, também quando a conversa não foi lida; D-MSG-056), truncada com reticências. Autor = “Você” (MSG-TMSG-15), nome do usuário ou “Sistema” (MSG-TMSG-29). Equipe (D-MSG-054, RN-MSG-030): quando o autor da última mensagem é membro da equipe a que a conversa foi endereçada e respondeu em nome dela, o nome da equipe vem entre parênteses, por exemplo “Sandra (Farmácia Oncológica)”; vale também para o próprio usuário, “Você (Enfermagem de Infusão)” (confirmado, D-MSG-055). Mesma regra nas mensagens da conversa (2.3.5). À direita, o horário da última mensagem, relativo ao momento atual (RN-MSG-035, D-MSG-032): no mesmo dia e há menos de 1 hora, “Há x min” (MSG-TMSG-39); no mesmo dia, “Há x h” (MSG-TMSG-40); em dia anterior, data e hora. No fuso da clínica (RN-MSG-005), com “dia” de calendário. Quando a última mensagem é do próprio usuário, vem antes da data e hora o ícone Lucide check (enviada; --color-neutral-pure) ou check-check (lida por pelo menos um dos outros participantes; --color-secondary-dark [PROPOSTA]), de 16 px, com o rótulo MSG-TMSG-31 “Enviada” ou MSG-TMSG-32 “Lida” para leitor de tela e dica.
  3. Linha 2, o título da conversa (segundo destaque): o assunto, em uma linha, 12 px, --color-neutral-dark, truncado com reticências.
  4. Linha 3, contexto (menor destaque): primeiro o chip do grau de urgência, só quando informado (RN-MSG-034, 2.3.8), pequeno, só com contorno (sem preenchimento), o único chip do cartão (2.3.8; D-MSG-057); depois, em texto de 12 px sem chip, --color-neutral-pure, com ícone Lucide de 14 px. Um só link (D-MSG-055), que leva a um destino só: quando a conversa tem processo (prescrição pill, documento file-text, registro clínico clipboard-list; tipo diferente de Paciente), o link é o processo, com o texto “{item} de {paciente}” (MSG-TMSG-43), por exemplo “FOLFOX - C4D1 de Maria Souza”; o item é a identificação da prescrição, o nome do documento ou “data - modelo” (sem o profissional) no registro clínico. Quando não há processo, ou o processo é do tipo Paciente, o link é o nome do paciente (user), que leva ao prontuário. Sem paciente, não há link. Prazo, sem chip e sem contorno (D-MSG-058): o ícone clock e a data e hora (“dd/mm, hh:mm”, fuso da clínica) em texto cinza; o rótulo “Resolver até” não é visível, mas o leitor de tela o lê (MSG-TMSG-05). Vencido: o ícone clock e só a palavra “Vencida” (MSG-TMSG-06), em --color-error-dark e peso médio, sem dizer há quanto tempo; é o único texto de contexto colorido. A data e hora completas ficam em uma dica, “Resolver até dd/mm/aaaa, hh:mm” (MSG-TMSG-05, com o ano), com o mesmo comportamento da dica do ícone de 1ª Consulta da Central (D-MSG-059; D-CM-016), no prazo a vencer e em “Vencida”: o mouse abre ao passar, e a dica fica aberta enquanto o ponteiro estiver sobre o texto ou sobre ela (sair dos dois fecha, com 150 ms de folga); o toque abre e, ao tocar de novo, fecha; tocar fora só fecha, sem acionar o que está sob o dedo; fecha também ao rolar, ao redimensionar e com Esc (que fecha só a dica, antes de qualquer camada de cima, como o modal); o texto não recebe foco, e o nome acessível do cartão traz “Vencida. Resolver até {dt}” (CA-MSG-022.1 a 022.3). “Resolvida” ou “Descartada” (texto sem link) na aba “Finalizadas”. Ordem do conteúdo: mensagem, título, urgência, outras informações (D-MSG-053). O cartão não tem chip de estado de envio (Enviada, Lida, Respondida): a última mensagem e o seu autor já mostram se houve resposta, e o ícone do horário mostra se a mensagem do usuário foi lida (D-MSG-023).
  5. Sem botão de ação (D-MSG-047): o cartão abre o modal da conversa (no painel e na lista; D-MSG-075) ao ser tocado em qualquer ponto, menos no link (D-MSG-054, 055). Para não haver link dentro de botão (HTML inválido e confuso para leitor de tela), o cartão é um contêiner com um botão que cobre todo o cartão (nome acessível: não lida, autor, mensagem e assunto) e, por cima dele, o link [PROPOSTA]. O link tem área de toque de 44 x 44 px (Design System; Central 2.8), maior que o texto, e nome acessível “Abrir prontuário: {paciente}” (MSG-BMSG-12) ou “Abrir prescrição/documento/registro clínico: {item} de {paciente}” (MSG-BMSG-13, 15, 16). “Resolvido” e “Descartado” existem só dentro da conversa (2.3.5), para que a leitura venha antes de encerrar, em especial nos alertas do sistema.
  6. Não lida (RN-MSG-017): borda esquerda de 3 px em --color-secondary-dark (6,1:1 no tema claro e 11,1:1 no escuro) sem mudar o peso do texto (D-MSG-056; a Central v6.0 ainda usa o peso médio, D-CM-045, e acompanha a Mensageria na v6.1, P-MSG-39); o ícone de carta (mail) deixou de existir (D-MSG-053) e o leitor de tela recebe o texto MSG-TMSG-10. Cartão lido: borda esquerda transparente.
  7. Clínica (RN-MSG-025): quando o usuário atende em mais de uma clínica, o nome curto da clínica de origem, com o ícone Lucide building-2 de 14 px e texto de 12 px em --color-neutral-pure, sem chip (Central, D-CM-064, D-CM-066). Com uma só clínica, não aparece.
  8. Aparência do cartão (D-MSG-045, D-MSG-053): cartões separados entre si, cada um com cantos arredondados (--radius-m, 8 px), borda de 1 px em --color-base-dark e espaço vertical entre eles (--sp-2), fundo --color-base-dark ao passar o mouse, como os cartões do painel da Central (D-CM-045). O estado “não lida” muda só a borda esquerda (item 6). O painel tem cabeçalho com fundo --color-base-dark, altura mínima de 52 px e a contagem em pílula neutra clara, como os painéis da Central. Vale para o painel e para a lista (abas Abertas e Finalizadas).

Estados do cartão (cartão separado, com cantos arredondados, item 8): padrão, não lida, vencida, finalizada (sem botão), foco (anel de foco do Design System), pressionado. Em modo escuro, usar os tokens do Design System; nenhuma cor fixa no código.

2.3.2 Painel de Mensagens (Central do Médico)

  • Título “Mensagens” (link para a lista) com a contagem de conversas abertas.
  • Todas as conversas abertas, sem limite de cartões (RN-MSG-001, RN-MSG-002), na ordem de RN-MSG-002. O painel tem rolagem própria, como os demais painéis da Central (Especificação da Central, 2.5), e o título é o link para a lista (D-MSG-049). Não há link “Ver todas as mensagens”.
  • Estado vazio: “Nenhuma conversa em aberto.” (MSG-TMSG-02).
  • Estado de carregamento: esqueleto de cartões. Falha de atualização: faixa de sem conexão do Design System (reuso do texto da Central).
  • Atualização automática a cada 1 minuto (como o painel atual da Central, RN-CM-017).

2.3.3 Tela de Mensagens (lista)

  • Acesso: item de menu “Mensagens” e link do painel.
  • Linha de fuso da clínica no topo (MSG-TAGM-09; destacada com MSG-TAGM-10 quando o aparelho está em outro fuso), como na Agenda (RN-MSG-005).
  • Botão “Nova mensagem” (primário: --color-primary-strong com texto --color-on-primary-strong, Lucide plus); aparece só para quem tem o direito Enviar (RN-MSG-024).
  • Duas abas com contagem: “Abertas” e “Finalizadas” (RN-MSG-011). A contagem é o total, sem período nem filtros (RN-MSG-037).
  • Ordem em “Abertas” (RN-MSG-002): primeiro as não lidas, depois as lidas pendentes; em cada grupo, na ordem de RN-MSG-002 (grau; vencidas antes das demais; depois a mais nova primeiro), usando a chave “maior entre a última mensagem e o prazo”.
  • Ordem em “Finalizadas” [PROPOSTA]: pela data e hora da finalização, da mais nova para a mais antiga (P-MSG-11).
  • Busca e filtros (RN-MSG-037; D-MSG-086), iguais nas duas abas no que se repete: campo de busca no topo, no padrão de campo (2.3.10, variante compacta), com ícone Lucide search à esquerda e o rótulo MSG-LMSG-29 como marcador, a partir de 2 caracteres, depois de 1 s de pausa ou Enter. Logo abaixo, a fila de filtros rápidos: botões alternáveis (aria-pressed), com 32 px de altura e área de toque de 44 px, rolagem horizontal quando não cabem; o ativo ganha borda --color-neutral-dark e o ícone Lucide check. Em Abertas: Não lidas, Alertas do sistema, Vencidas, Urgência e Enviadas por mim; “Urgência” abre, logo abaixo, os quatro chips de grau como botões alternáveis (vários graus; entre eles vale “ou”) e mostra o número de graus escolhidos. Em Finalizadas: Alertas do sistema e Enviadas por mim, e o campo Período (lista de seleção) com Últimos 3 meses (padrão), 6 meses, 12 meses, Tudo e Personalizado (data inicial e final, campos nativos; D-MSG-089).
  • Resumo e limpeza: quando há filtro ou paginação, uma linha mostra “Mostrando n de total” (MSG-TMSG-51) e o botão “Limpar filtros” (MSG-BMSG-22); em Finalizadas, a linha mostra sempre o período escolhido. Estado vazio com filtro: MSG-TMSG-52; sem resultado no período: MSG-TMSG-53 e o botão “Buscar em todo o período” (MSG-BMSG-24). Os filtros não persistem ao sair da tela. O painel da Central não tem filtros.
  • Paginação: botão “Mostrar mais” (MSG-BMSG-23, secundário), 20 por vez em Finalizadas e 50 em Abertas (só proteção); depois de acionado, o foco vai ao primeiro item novo. Estado vazio por aba (MSG-TMSG-02 e MSG-TMSG-03).

2.3.4 Nova mensagem

Campos, nesta ordem, no padrão de campo com rótulo flutuante do Design System, seção 11 (D-MSG-092; detalhado em 2.3.10), com asterisco nos obrigatórios. Os campos de busca (destinatário, paciente e item do processo) seguem o comportamento de 2.3.9:

CampoObrigatórioRegra
DestinatáriosimBusca com autocomplete (RN-MSG-036; D-MSG-038): o usuário digita o nome e escolhe um resultado; seleção única. Os resultados vêm em dois grupos, “Equipes” primeiro (com o número de membros) e “Pessoas” depois (inclui o usuário, marcado “(você)”). Linha de apoio (D-MSG-060): cada equipe mostra “n membros”; cada pessoa mostra as equipes a que pertence, “Equipes: A, B” (até duas, depois “+n”), ou “Sem equipe” (MSG-TMSG-45, 46). Ao digitar o nome de uma pessoa, as equipes de que ela é membro também entram no grupo “Equipes”, com “n membros · Inclui {nome}” (MSG-TMSG-44), para enviar à equipe sem conhecer a equipe da pessoa. RN-MSG-007, RN-MSG-015
AssuntosimAté 200 caracteres, com contador
MensagemsimTexto livre, até 2000 caracteres, com contador “n/2000” no componente de texto (D-MSG-030); o mesmo limite e contador no campo de resposta
Opcionais—Subtítulo “Opcionais” (MSG-LMSG-20) antes dos quatro campos seguintes, nesta ordem (D-MSG-040)
Grau de urgêncianãoQuatro opções do tamanho do chip (altura de 24 px, raio de pílula), lado a lado e quebrando de linha, com só o nome (“Rotina”, “Urgente”, “Quanto antes”, “Imediato”) e contorno neutro; nenhuma marcada por padrão. A opção marcada assume o visual do chip de urgência dos cartões (cor, contorno e ícone flag, 2.3.8); tocar na opção marcada a desmarca (volta a “Não informado”). A área de toque é de 44 px, maior que o chip (área invisível ao redor; D-MSG-074). Texto de ajuda: o grau não pode ser alterado depois do envio (MSG-TMSG-37 e 38). Rádio, uma opção por vez (D-MSG-065; E-MSG-016). RN-MSG-034
Prazo para resoluçãonãoLegenda “Prazo para resolução (opcional)” (MSG-LMSG-08), com dois campos lado a lado (D-MSG-061, 064): Data, campo nativo do navegador (só datas existentes; a data mínima é a de hoje, D-MSG-074), obrigatória quando há prazo; e Horário, campo de texto com máscara hh:mm, sempre em 24 h (00:00 a 23:59), teclado numérico no celular, em qualquer idioma ou navegador. Sem horário, o prazo vale até 23:59 da clínica e só a data é exibida (cartão, dica e conversa), sem “23:59” (D-MSG-066). Sem coluna nova (D-MSG-074): um prazo gravado às 23:59:00 da clínica é tratado como “sem horário”; quem digitar 23:59 de propósito também verá só a data (P-MSG-44); a ajuda MSG-LMSG-28 avisa. Só o horário, sem data: MSG-EMSG-05; horário fora de 00:00 a 23:59: MSG-EMSG-15; prazo anterior ao envio: MSG-EMSG-04 (RN-MSG-004). O cliente junta os valores no fuso da clínica e envia em UTC (RN-MSG-012)
PacientenãoO mesmo componente da busca de pacientes do cabeçalho da Central, com todas as funcionalidades (2.8.8; D-MSG-071): a lista de resultados é a mesma (nome, prontuário, sexo, data de nascimento, nome da mãe e CPF) e as regras são as da Central: a busca começa com 2 caracteres, entrada que começa com dígito busca por CPF ou data de nascimento, e a que começa com letra, por nome ou nome da mãe; rodapé de orientação e mensagens de lista vazia e de mínimo de caracteres como na Central. Diferença só na escolha: o resultado escolhido preenche o campo (na Central abre o prontuário). Uma seleção. RN-MSG-020, RN-MSG-036
Processo relacionadonãoAtalho rápido para o objeto a que se quer direcionar quem lê. Um só tipo por conversa: Prescrição, Documento, Registro clínico ou Agenda (D-MSG-035, 037, 093); o tipo Paciente continua existindo, mas não aparece na lista, porque o campo Paciente já cobre. Escolha em três etapas (D-MSG-036): (1) o paciente, que é o campo “Paciente” do formulário; (2) o tipo de objeto (lista de quatro opções), que só habilita depois do paciente; (3) o item, por busca com autocomplete entre os do paciente escolhido (RN-MSG-036): Prescrição, pela identificação da prescrição (qualquer parte do texto); Documento, pelo nome, exibido com a data; Registro clínico, pela data do evento, exibido com a data, o modelo e o profissional, com tratamento e apelido (D-MSG-050, 051; origem dos dados em 04, 4.4.1). O tipo Paciente não tem etapa 3. Trocar o paciente zera o tipo e o item (E-MSG-020; D-MSG-074). RN-MSG-021

Botões: “Enviar” (primário) e “Cancelar”. “Enviar” fica desabilitado enquanto a requisição está em curso. Sucesso: volta à lista, não à conversa, e mostra “Mensagem enviada.” (MSG-TMSG-26). O padrão de botões é o do Design System, seção 12 (D-MSG-022): um só preenchido por região, em verde escuro; “Cancelar” com contorno.

2.3.5 Conversa (modal)

Uma só tela: o modal (D-MSG-075), aberto a partir do painel da Central e da lista; não há página da conversa. No celular o modal é uma folha inferior de altura quase total (a trilha rola dentro dela); em telas largas, caixa centralizada. A lista (ou o painel) continua por baixo, com filtro e rolagem preservados. [PROPOSTA, E-MSG-024]: a conversa tem endereço (/mensagens/{id}): abrir o endereço mostra a lista com o modal por cima; o botão Voltar do navegador fecha o modal; ao fechar, o foco volta ao cartão que o abriu. Estrutura (solicitante, 11/11/2026): cabeçalho fixo (título, De e Para, tags de urgência, link do processo ou do paciente, tag de prazo e, se finalizada, a linha de finalização); abaixo, a trilha da conversa, em cartões; no fim, o campo de resposta e o botão “Responder”, ; as ações Resolver e Descartar ficam no cabeçalho (D-MSG-076).

  • Estado: chip “Resolvida” ou “Descartada” só quando a conversa está finalizada (MSG-TMSG-08 e 09). Nas conversas abertas, cada mensagem do usuário mostra o ícone check ou check-check ao lado da data e hora, com a mesma regra do cartão [PROPOSTA].
  • Mensagens: o autor de cada mensagem segue a regra de equipe do cartão (2.3.1, item 2; RN-MSG-030).
  • Cabeçalho (fixo, não rola com a trilha): assunto, com o botão Fechar (Lucide x, MSG-BMSG-11) à direita; linhas “De” e “Para” (RN-MSG-006; MSG-TMSG-12, 13, 14); chips e link (grau de urgência quando informado; o link de processo ou de paciente; prazo; e, se finalizada, Resolvida ou Descartada); ações “Resolver” e “Descartar” (MSG-BMSG-06 e 07), à direita das linhas “De” e “Para”, lado a lado quando a área útil do cabeçalho tem 480 px ou mais e empilhadas quando não (celular), longe do botão Fechar, só em conversa aberta (D-MSG-076, D-MSG-077); um só link, igual ao do cartão (2.3.1, item 4; D-MSG-055): o processo, com o texto “{item} de {paciente}”, ou, sem processo ou no tipo Paciente, o nome do paciente, para o prontuário. Não há botão “Abrir …” (D-MSG-054).
  • Conversa finalizada: linha “Resolvida por {name} em {dt}” ou “Descartada por {name} em {dt}” (MSG-TMSG-16/17), sem campo de resposta e sem botões, com o aviso MSG-TMSG-19 (RN-MSG-009).
  • Mensagens: em ordem cronológica; as do usuário logado alinhadas à direita; cada uma com autor, data e hora. Mensagens do sistema com o sino e “Sistema”. Mensagem do sistema acrescentada a um alerta aberto (autor nulo, sequência maior que 1) rotulada “Atualização do sistema” [PROPOSTA, MSG-TMSG-30]; o tipo gravado é sempre Response (04, 4.1).
  • Campo de resposta (RN-MSG-019): rótulo “Escreva uma resposta…” (MSG-LMSG-14), no padrão de campo (2.3.10, variante compacta), e botão “Responder” (Lucide send), com o topo e a altura alinhados à caixa do campo; o contador de caracteres fica abaixo da caixa, fora do alinhamento (D-MSG-077). Ausente em conversa finalizada e em alerta do sistema (aviso MSG-TMSG-20, RN-MSG-010).
  • Ações (D-MSG-076): “Resolver” e “Descartar”, no cabeçalho (acima), cada uma com confirmação (2.3.6); presentes também em alerta do sistema, que não tem campo de resposta; ausentes em conversa finalizada.
  • Ao abrir, a conversa é marcada como lida para o usuário (RN-MSG-017).

2.3.6 Confirmação de resolver e descartar

Caixa de diálogo com os textos já existentes da Central (reuso): título, corpo e botão de confirmação de MSG_resolveConfirm* e MSG_discardConfirm*. Foco inicial em “Cancelar”; Esc cancela. Depois de confirmar: toast “Conversa resolvida.” (MSG-TMSG-24) ou “Conversa descartada.” (MSG-TMSG-25); a conversa sai da aba “Abertas” e do painel (RN-MSG-001).

2.3.7 Regras de apresentação da ordem e do estado

  • Ordem: dentro de cada camada (não lidas, lidas pendentes), primeiro o grau de urgência (Imediato, Quanto antes, Urgente, Rotina e, por último, sem grau, que conta como 0) e, dentro do mesmo grau, as vencidas primeiro, da mais atrasada para a menos atrasada (D-MSG-088), e depois a chave de data max(dataHoraUltimaMensagem, prazo) quando há prazo; senão, dataHoraUltimaMensagem. Empate: a mais recente criada primeiro (RN-MSG-002, D-MSG-026).
  • Horário relativo do cartão (RN-MSG-035): agora e a data da mensagem são convertidos para o fuso da clínica (serverNow, nunca o relógio do aparelho). Mesmo dia de calendário: x = minutos decorridos se menor que 60 (“Há x min”), senão x = horas decorridas (“Há x h”). Outro dia: data e hora no formato do idioma. [PROPOSTA, E-MSG-019]: x é o inteiro por truncamento, com mínimo de 1 min; dentro da conversa, o horário de cada mensagem continua em data e hora; o texto relativo é recalculado a cada atualização automática de 1 minuto.
  • Vencida: prazo < agora em conversa aberta, incluindo alertas do sistema. Calculado na API com a hora do servidor (serverNow), nunca com o relógio do aparelho.
  • Não lida para o usuário: existe mensagem de sequência maior que a última lida por ele. Quem acabou de enviar ou responder tem a conversa como lida.
  • Participante: quem enviou, ou quem está entre os destinatários copiados no envio. Só participantes veem a conversa (RN-MSG-031); a clínica da conversa é a do remetente (RN-MSG-025).

2.3.8 Grau de urgência (RN-MSG-034)

Chip de urgência, família nova do Design System para alertas que pedem ação (seção 13; D-MSG-027). Aparece só quando a conversa tem grau, no cartão (painel, Abertas e Finalizadas), como primeiro item da linha de contexto, antes do paciente e do prazo, e no cabeçalho da conversa, depois do chip do paciente e antes do de prazo [PROPOSTA, E-MSG-017]. O texto visível é só o nome do grau (“Rotina”, “Urgente”, “Quanto antes”, “Imediato”; MSG-IND-1 a 4), porque “Urgência Urgente” seria repetido; o título e o nome acessível são “Grau de urgência: {nome}” (MSG-TMSG-36) [PROPOSTA, E-MSG-022]. Ícone Lucide flag de 14 px, peso font-weight-medium, altura mínima de 24 px, raio de pílula. No cartão, o chip é o único chip (paciente e prazo são texto; D-MSG-053). Desde a v1.18, Imediato e Quanto antes são só contorno, sem preenchimento (D-MSG-057).

ValorNomePreenchimentoTexto e íconeContornoÍcone
statImediatotransparente--color-error-dark (6,3:1 no claro e 7,4:1 no escuro, sobre o fundo do cartão; 5,9:1 e 8,1:1 com o cartão em destaque ao passar o mouse; medidos no protótipo v1.18)2 px --color-error-darkflag preenchida
asapQuanto antestransparente--color-error-dark (mesmos contrastes de Imediato)1 px --color-error-darkflag só contorno
urgentUrgente--color-neutral-lighter--color-neutral-dark (12,1:1 no claro; 8,8:1 no escuro)nenhumflag só contorno
routineRotinatransparente--color-neutral-dark1 px --color-neutral-lightflag só contorno

A correspondência dos quatro valores com os quatro estilos do Design System (seção 13), do mais forte ao mais discreto, é [PROPOSTA, E-MSG-022]; as cores são as já aprovadas (D-MSG-027). Na v1.18, Imediato e Quanto antes passam a só contorno, mantendo a cor (D-MSG-057); a diferença entre os dois é a espessura do contorno (2 px × 1 px) e a bandeira cheia ou vazia, como decidiu o solicitante. Urgente e Rotina não mudam.

O grau Rotina também aparece como chip (D-MSG-043). Sem amarelo: o amarelo é do prazo (highlight), e no tema escuro um chip amarelo para o penúltimo nível chamava mais atenção do que o último (D-MSG-027). O contorno é decorativo; a informação está no texto e no ícone. Cada tema usa os tokens do próprio tema; nenhuma cor fixa no código.

2.3.9 Campos de busca com autocomplete (RN-MSG-036)

Decisão do solicitante (D-MSG-038): destinatário, paciente e item do processo são campos de busca com autocomplete. Os detalhes abaixo foram confirmados pelo solicitante (E-MSG-021; D-MSG-074):

  • Busca: a cada digitação, com atraso de 300 ms; sem texto, mostra as primeiras 8 opções (no destinatário, equipes primeiro). O campo Paciente não segue estas duas regras: ele usa a busca do cabeçalho da Central, com mínimo de 2 caracteres, pausa de 1 segundo na primeira busca e lista que só aparece com texto (D-MSG-071); as regras abaixo valem para o destinatário e o item do processo. Ignora maiúsculas e acentos; vários termos separados por espaço, todos devem aparecer (“20/10 ana”).
  • Resultados: até 8, em lista abaixo do campo; no destinatário, os grupos “Equipes” (MSG-LMSG-03) e “Pessoas” (MSG-LMSG-02) com cabeçalho; havendo mais, o aviso MSG-TMSG-42; sem resultado, MSG-TMSG-41.
  • Chaves de busca e exibição do item (D-MSG-050): Prescrição: busca em Prescricao.Identificacao, por qualquer parte do texto; mostra a identificação e, como apoio, a data da prescrição. Documento: busca pelo nome; mostra o nome e a data. Registro clínico: busca pela data do evento, em “dd/mm” ou “dd/mm/aaaa” (por exemplo “21/10” ou “21/10/2026”); mostra data do evento, modelo e profissional (tratamento e apelido, por exemplo “Dr. Carlos”; ordem confirmada, D-MSG-052). Paciente: busca do cabeçalho da Central (nome, nome da mãe, CPF, data de nascimento; D-MSG-071). Cada tipo busca só no campo indicado (não busca nos outros campos mostrados). A busca ignora maiúsculas e acentos e combina vários termos (RN-MSG-036). Colunas e tabelas em 04, 4.4.1.
  • Agenda (D-MSG-085 e 090): busca pela data do agendamento (“dd/mm” ou “dd/mm/aaaa”); a linha mostra a data e a hora de início e, abaixo, o tipo (por exemplo Consulta, Quimioterapia, Radioterapia). [PROPOSTA] do Designer: o tipo é a classificação da agenda (04, 4.4.1). A chave guardada é Agenda.IdAgenda.
  • Escolha: clicar ou tocar no resultado, ou Enter no resultado destacado; o campo passa a mostrar o rótulo escolhido. Digitar de novo limpa a escolha.
  • Teclado e leitor de tela: padrão de caixa de combinação (campo com papel combobox, lista com papel listbox, aria-expanded, aria-activedescendant); setas movem o destaque, Enter escolhe, Esc fecha; alvo de toque dos resultados de pelo menos 44 px.
  • Ordem dos itens do processo: pela data do evento, do mais recente ao mais antigo (Documento, pela data exibida; Registro clínico, pela data do registro; Prescrição, pela data da prescrição). A direção é [PROPOSTA]; a regra de ordem pode mudar quando esses módulos forem detalhados (D-MSG-044; P-MSG-34).
  • Categorias dos itens do processo (D-MSG-067): Documento, por modelo de documento (a lista de modelos será definida quando o input de documentos for trabalhado); Registro clínico, por modelo de formulário (o modelo já aparece na linha do item). A lista não tem paginação: o volume esperado é pequeno (aviso MSG-TMSG-42 só se o serviço devolver mais que o limite).
  • API: as buscas são feitas no servidor (2.8.7 a 2.8.9), com q e limit.

2.3.10 Campos com rótulo flutuante (D-MSG-092)

Padrão descrito pelo solicitante para o questionário dinâmico e tornado padrão de todos os formulários em 12/11/2026 (Design System, seção 11, “Campo com rótulo flutuante”). Vale para qualquer campo de entrada (D-MSG-094): no formulário de nova mensagem (destinatário, assunto, mensagem, data, horário, paciente, processo relacionado e item do processo) e fora dele, na busca e no período das listas e na resposta da conversa.

EstadoAparênciaRótulo
InicialFundo --color-base-pure; o estado inicial é a borda fina de 1 px --color-neutral-light, não o fundoDentro do campo, como marcador, em --color-neutral-pure
Com focoBorda de 2 px --color-neutral-darkSobe para a borda superior; o texto de ajuda do campo (MSG-LMSG-21 a 25 e 38) aparece como marcador, se o campo estiver vazio
Valor diferente do originalBorda de 2 px --color-field-changedNa borda superior
DesabilitadoFundo --color-neutral-lighter, borda de 1 px --color-neutral-light, cursor de bloqueioDentro do campo, como marcador, sem subir
Com erroBorda de 2 px --color-error-pure; a mensagem de erro embaixo do campo, com ícone e texto (a cor nunca é o único sinal)Em --color-error-dark
  • No formulário de nova mensagem o “valor original” é o campo vazio; por isso qualquer valor digitado ou escolhido leva a borda azul quando o foco sai. Se o campo voltar a ficar vazio, volta ao estado inicial.
  • Precedência: erro, foco, alterado, inicial. A mudança de 1 px para 2 px não desloca o conteúdo.
  • O erro some quando o formulário é enviado de novo e a regra passa; ao enviar com erro, o foco vai ao primeiro campo com erro.
  • Campo desabilitado (processo sem paciente): fundo cinza --color-neutral-lighter, rótulo como marcador e cursor de bloqueio; a lista de tipos só abre com paciente escolhido.
  • Data: o campo de data se comporta como os outros: o rótulo é o marcador e, com o foco, sobe e dá lugar à máscara do navegador (escondida enquanto o campo está vazio e sem foco). Seleção: o valor vazio (“Nenhum”) fica escondido sem foco, e o ícone chevron-down fica à direita. O asterisco nos obrigatórios convive com “(opcional)” nos demais. Todos confirmados em D-MSG-094.
  • [PROPOSTA] do Designer (P-MSG-50): variante compacta, de 44 px de altura, para a busca (com o ícone search à esquerda do rótulo), o período e a resposta da conversa; os campos do formulário têm 56 px.

2.4 Critérios de aceitação

IDCritérioHistóriaRN
CA-MSG-001.1Dado que tenho conversas abertas lidas e não lidas, quando abro o painel, então vejo todas elas como cartões, os não lidos primeiro, e cada grupo da mais nova para a mais antigaUS-MSG-02RN-MSG-001, 002
CA-MSG-001.2Dado duas conversas lidas, uma com prazo mais recente do que a última mensagem da outra, que não tem prazo, então a de prazo vem primeiroUS-MSG-02RN-MSG-002
CA-MSG-001.3Dado que as conversas abertas não cabem na altura do painel, então o painel rola dentro do próprio quadro, sem limite de cartões e sem link “Ver todas as mensagens”US-MSG-02RN-MSG-001; D-MSG-049
CA-MSG-001.4Dado que não há conversa aberta, então o painel mostra “Nenhuma conversa em aberto.”US-MSG-02RN-MSG-001
CA-MSG-001.5Dado uma conversa resolvida ou descartada, então ela não aparece no painel e aparece na aba “Finalizadas”US-MSG-04RN-MSG-001, 011
CA-MSG-001.6Dado conversas da mesma camada e do mesmo grau, uma vencida e outra com prazo a vencer mais recente, então a vencida vem primeiro; entre duas vencidas, a de prazo mais antigo (D-MSG-088); o grau continua antes do vencimentoUS-MSG-02RN-MSG-002, 003; D-MSG-084
CA-MSG-002.1Dado uma conversa cujo prazo passou, então o cartão mostra, em vermelho, o ícone de relógio e a palavra “Vencida”, sem data e sem o tempo de atraso; a dica traz “Resolver até {dt}” (com o ano); ao resolvê-la ou descartá-la o aviso someUS-MSG-02RN-MSG-003
CA-MSG-002.2Dado um alerta do sistema com prazo vencido, então ele também mostra “Vencida”US-MSG-09RN-MSG-003
CA-MSG-002.3Dado que informo um prazo anterior ao momento do envio, então o formulário mostra MSG-EMSG-04 e a API recusa com 400, mesmo se a validação do formulário for contornadaUS-MSG-01RN-MSG-004
CA-MSG-002.4Dado que o aparelho está em fuso diferente do da clínica, então os horários são os da clínica e a linha de fuso aparece destacadaUS-MSG-02RN-MSG-005
CA-MSG-003.1Dado uma conversa não lida, então o cartão mostra a borda lateral, sem mudar o peso do texto; depois de aberta, a borda someUS-MSG-02RN-MSG-017
CA-MSG-003.2Dado que outro participante leu a conversa, então ela continua não lida para mimUS-MSG-06RN-MSG-017
CA-MSG-003.3Dado que acabei de enviar uma mensagem, então a conversa não aparece como não lida para mimUS-MSG-01RN-MSG-017
CA-MSG-004.1Dado a última mensagem de um usuário ou do sistema, então o cartão não tem ícone de tipo; a linha 1 começa com o autor (“Você”, o nome ou “Sistema:”) em peso médio, seguido do texto da mensagem em peso normalUS-MSG-09RN-MSG-014, 028; D-MSG-056
CA-MSG-004.2Dado a primeira linha do cartão, então ela mostra “autor: texto” da última mensagem, em até 2 linhas, com “Você”, o nome ou “Sistema”; o assunto vem logo abaixo, em texto menorUS-MSG-05RN-MSG-018; D-MSG-053
CA-MSG-005.1Dado que abro a conversa e escolho “Resolver”, então aparece a confirmação com foco em “Cancelar”; ao confirmar, a conversa é resolvida para todos os participantesUS-MSG-04RN-MSG-008
CA-MSG-005.2Dado que sou o remetente, então também posso resolver ou descartarUS-MSG-04RN-MSG-008
CA-MSG-005.3Dado uma conversa de equipe finalizada por um membro, então todos os membros a veem finalizada, com o nome de quem finalizouUS-MSG-06RN-MSG-018
CA-MSG-005.4Dado uma conversa finalizada, então a tela não mostra campo de resposta nem botões de ação, e a API recusa resposta e nova finalização com 409US-MSG-04RN-MSG-009
CA-MSG-005.5Dado que finalizo uma conversa sem que ninguém tenha respondido, então nenhuma mensagem é criada e o cabeçalho mostra “Resolvida por {name} em {dt}“US-MSG-04RN-MSG-009
CA-MSG-006.1Dado um alerta do sistema, então não há campo de resposta, aparece MSG-TMSG-20, e a API recusa resposta com 409US-MSG-09RN-MSG-010
CA-MSG-007.1Dado que abro “Nova mensagem”, então vejo meu nome na lista de pessoas como “(você)” e posso enviar a mim mesmoUS-MSG-07RN-MSG-007
CA-MSG-007.2Dado uma mensagem a uma equipe da qual faço parte, então eu a recebo como os demais membrosUS-MSG-06RN-MSG-015
CA-MSG-007.3Dado que um usuário entrou na equipe depois do envio, então ele não vê a conversaUS-MSG-06RN-MSG-015
CA-MSG-007.4Dado que saí da equipe depois de receber uma conversa, então continuo vendo o histórico dela, mas não posso responder, resolver nem descartar; e quem enviou a conversa continua agindo mesmo sem ser da equipeUS-MSG-06RN-MSG-015; D-MSG-082
CA-MSG-008.1Dado o formulário com destinatário, assunto ou mensagem vazios, então aparecem MSG-EMSG-01, 02 e 03 e nada é enviadoUS-MSG-01RN-MSG-015, 027
CA-MSG-008.2Dado que informo o horário sem a data do prazo, então aparece MSG-EMSG-05 (“Informe a data do prazo.”) e nada é enviado; quando informo só a data, então o envio segue, o prazo vale até 23:59 da clínica e só a data é exibida (D-MSG-066); quando o horário está fora de 00:00 a 23:59, então aparece MSG-EMSG-15US-MSG-01RN-MSG-012; D-MSG-064
CA-MSG-008.3Dado que escolho um processo, então só um tipo pode ser escolhido por conversa (Paciente, Prescrição, Documento, Registro clínico ou Agenda)US-MSG-08RN-MSG-020, 021
CA-MSG-009.1Dado uma conversa com processo, então o processo aparece como o link do cartão e do cabeçalho, com o texto “{item} de {paciente}” (registro clínico: “data - modelo”), e leva ao item; se o usuário não tiver acesso, o módulo de destino mostra a recusaUS-MSG-08RN-MSG-021; D-MSG-055
CA-MSG-010.1Dado um usuário sem o direito Visualizar (mesmo que tenha Enviar), então o item de menu e o painel não aparecem e todas as chamadas da API retornam 403US-MSG-10RN-MSG-024
CA-MSG-010.2Dado um usuário com Visualizar e sem Enviar, então o botão “Nova mensagem” e o campo de resposta não aparecem e a API recusa o envio com 403; ele ainda pode resolver e descartar (D-MSG-029, D-MSG-070)US-MSG-10RN-MSG-024
CA-MSG-010.3Dado qualquer ação (enviar, ler, responder, resolver, descartar), então um registro de auditoria é gravado sem o conteúdo da mensagem e sem identificação do pacienteUS-MSG-10RN-MSG-023
CA-MSG-011.1Dado o idioma da clínica, então todos os textos aparecem nesse idioma (pt-BR, en-US ou es-419)todasRN-MSG-013
CA-MSG-012.1Dado uma mensagem enviada, então não existe ação de editar ou excluir o textoUS-MSG-03RN-MSG-022
CA-MSG-012.2Dado que o módulo de origem repete o pedido do mesmo alerta, então nenhuma conversa duplicada é criadaUS-MSG-09RN-MSG-029
CA-MSG-013.1Dado uma anomalia que persiste depois de o alerta anterior ser resolvido, então o módulo pode abrir nova conversa ligada à anterior; a anterior continua finalizadaUS-MSG-09RN-MSG-016
CA-MSG-014.1Dado que respondo em conversa endereçada à minha equipe, então minhas mensagens mostram “Nome (Equipe)”; se não sou da equipe, mostram só o nomeUS-MSG-03RN-MSG-030
CA-MSG-016.1Dado que a última mensagem da conversa é do usuário e não é de alerta do sistema, então o cartão mostra check quando nenhum outro participante leu até ela e check-check quando pelo menos um leu; num autoenvio, check-check desde o envioUS-MSG-05RN-MSG-016, 018
CA-MSG-016.2Dado que outro participante respondeu, então o cartão passa a mostrar a resposta como última mensagem, com o autor e a data e hora, e o sinal de não lida; o cartão não tem chip “Respondida” nem ícone de lidaUS-MSG-05RN-MSG-016, 017
CA-MSG-017.1Dado que abro “Nova mensagem”, então o grau de urgência é opcional, vem sem seleção e oferece “Rotina”, “Urgente”, “Quanto antes” e “Imediato”; tocar na opção marcada a desmarcaUS-MSG-01RN-MSG-034
CA-MSG-017.2Dado uma conversa enviada sem grau, então nenhum chip de urgência aparece em nenhuma telaUS-MSG-01RN-MSG-034
CA-MSG-017.3Dado uma conversa com grau, então o chip com o nome do grau (por exemplo, “Imediato”) aparece no cartão (painel, Abertas e Finalizadas) e no cabeçalho da conversa, para quem enviou e para os destinatáriosUS-MSG-02RN-MSG-034
CA-MSG-017.4Dado uma conversa já enviada, então nenhuma tela nem endpoint altera o grau, e uma resposta ou uma atualização do sistema não o mudaUS-MSG-03RN-MSG-034
CA-MSG-017.5Dado conversas da mesma camada com graus diferentes e sem grau, então a ordem é Imediato, Quanto antes, Urgente, Rotina e sem grau, e dentro do mesmo grau a mais recente primeiroUS-MSG-02RN-MSG-002, 034
CA-MSG-017.6Dado um alerta do sistema cujo módulo de origem informou o grau, então o chip é o mesmo das conversas de pessoas; sem grau informado, não aparece chipUS-MSG-09RN-MSG-028, 034
CA-MSG-017.7Dado um envio com urgencyLevel diferente de routine, urgent, asap e stat, então a API recusa com 400 e a mensagem MSG-EMSG-13; urgencyLevel ausente ou nulo é aceitoUS-MSG-01RN-MSG-034
CA-MSG-017.8Dado os temas claro e escuro, então cada nível tem texto com contraste mínimo de 4,5:1, o nível é identificável sem a cor (texto e ícone) e o leitor de tela anuncia “urgência {nome}“todasRN-MSG-034
CA-MSG-018.1Dado uma conversa cuja última mensagem foi enviada hoje há menos de 1 hora, então o cartão mostra “Há x min”US-MSG-02RN-MSG-035
CA-MSG-018.2Dado uma última mensagem enviada hoje há 1 hora ou mais, então o cartão mostra “Há x h”US-MSG-02RN-MSG-035
CA-MSG-018.3Dado uma última mensagem de dia anterior (dia de calendário da clínica), então o cartão mostra data e hora, mesmo que tenha menos de 1 hora; dentro da conversa o horário é sempre data e horaUS-MSG-02RN-MSG-035
CA-MSG-018.4Dado o campo de mensagem ou de resposta, então o contador mostra “n/2000”, o campo não aceita o caractere 2001 e a API recusa texto maior com 400US-MSG-01RN-MSG-032; D-MSG-030
CA-MSG-018.5Dado uma anomalia que se agrava, quando o módulo de origem publica um novo alerta com o novo grau, então o alerta anterior fica Descartado (ação sem usuário, autor exibido como “Sistema”) e a nova conversa fica ligada a eleUS-MSG-09RN-MSG-016, 034
CA-MSG-019.1Dado o formulário sem paciente, então o campo de tipo de processo fica desabilitadoUS-MSG-08RN-MSG-021
CA-MSG-019.2Dado um paciente escolhido e o tipo Prescrição, Documento, Registro clínico ou Agenda, então aparece o campo do item, só com os itens desse paciente; enviar sem item mostra MSG-EMSG-14US-MSG-08RN-MSG-021
CA-MSG-019.3Dado um paciente escolhido e nenhum tipo de processo, então a lista de tipos não tem a opção “Paciente”, e a conversa fica ligada só ao paciente: o nome dele, no cartão e na conversa, leva ao prontuárioUS-MSG-08RN-MSG-021; D-MSG-093
CA-MSG-019.4Dado processo já escolhido, quando troco o paciente, então o tipo e o item são limposUS-MSG-08RN-MSG-021 (E-MSG-020)
CA-MSG-020.1Dado que abro “Nova mensagem”, então os campos vêm nesta ordem: Destinatário, Assunto, Mensagem e, sob o subtítulo “Opcionais”, Grau de urgência, Prazo para resolução, Paciente e Processo relacionadoUS-MSG-01D-MSG-040
CA-MSG-020.2Dado o campo Destinatário, quando digito parte do nome, então vejo os resultados que contêm o texto, com “Equipes” antes de “Pessoas”, e escolho umUS-MSG-01RN-MSG-036, 007, 015
CA-MSG-020.3Dado o campo Paciente, quando digito 2 ou mais caracteres, então a busca e a lista de resultados são as do cabeçalho da Central (2.1): começando com letra, por nome ou nome da mãe; começando com dígito, por CPF ou data de nascimento; cada resultado traz prontuário, sexo, data de nascimento, nome da mãe e CPF; quando escolho um, então o nome dele preenche o campoUS-MSG-08RN-MSG-036, 020; D-MSG-071
CA-MSG-020.8Dado uma conversa enviada com o paciente errado, então o paciente não pode ser alterado (RN-MSG-020); o remetente envia uma resposta na própria conversa dizendo que o paciente estava errado, descarta a conversa (com a confirmação de sempre) e envia outra com o paciente certo (D-MSG-072)US-MSG-08RN-MSG-020; D-MSG-072
CA-MSG-020.4Dado o item do processo, então a busca usa: Prescricao.Identificacao, por qualquer parte do texto (Prescrição); o nome (Documento, exibido com a data); a data (Registro clínico, exibido com data, modelo e profissional); vários termos são combinadosUS-MSG-08RN-MSG-036, 021; D-MSG-050
CA-MSG-020.5Dado uma busca sem resultado, então aparece MSG-TMSG-41; dado mais resultados que o limite, então aparece MSG-TMSG-42US-MSG-01RN-MSG-036
CA-MSG-020.6Dado o teclado, então as setas movem o destaque, Enter escolhe e Esc fecha a lista, e o leitor de tela anuncia o campo como caixa de combinação com o número de resultadosUS-MSG-01RN-MSG-036; 2.10
CA-MSG-020.7Dado uma pessoa que é membro ativo de equipes, então a linha dela mostra “Equipes: A, B” (até duas, depois “+n”) ou “Sem equipe”; quando digito parte do nome dela, então as equipes dela aparecem no grupo “Equipes” com “n membros · Inclui {nome}”, e escolher a equipe envia a todos os membros ativos (RN-MSG-015)US-MSG-01RN-MSG-036; D-MSG-060, 063; E-MSG-023
CA-MSG-021.1Dado uma conversa com grau routine, então o chip “Rotina” aparece como os demais grausUS-MSG-02RN-MSG-034
CA-MSG-021.2Dado o painel ou a lista, então os cartões são separados entre si, com cantos arredondados e borda de 1 px, e não linhas coladas com divisóriaUS-MSG-022.3.1, item 8
CA-MSG-021.3Dado a lista de itens do processo, então vem do mais recente ao mais antigo pela data do eventoUS-MSG-08RN-MSG-036
CA-MSG-021.4Dado o cartão no painel ou na lista, então não há botão de ação nele; só a conversa aberta oferece “Resolver” e “Descartar”US-MSG-04D-MSG-047
CA-MSG-021.5Dado o cartão com paciente, então há um só link: o processo (“{item} de {paciente}”) quando houver, senão o nome do paciente, que leva ao prontuário; tocar no link não abre a conversa, e tocar no resto do cartão a abreUS-MSG-08D-MSG-054, 055
CA-MSG-021.6Dado uma conversa de equipe cuja última mensagem foi escrita por um membro da equipe, então o autor mostra o nome da equipe entre parênteses, no cartão e na conversaUS-MSG-05RN-MSG-030; D-MSG-054
CA-MSG-022.1Dado uma conversa aberta com prazo ainda não vencido, então o cartão mostra o ícone de relógio e a data e hora (“dd/mm, hh:mm”), sem contorno e sem o texto “Resolver até” visível; a dica (22.3) mostra “Resolver até dd/mm/aaaa, hh:mm”; num prazo sem horário (D-MSG-066), o cartão mostra só “dd/mm” e a dica, só “Resolver até dd/mm/aaaa”US-MSG-02RN-MSG-003; D-MSG-058, 059
CA-MSG-022.2Dado uma conversa vencida, então o relógio e a palavra “Vencida” aparecem em --color-error-dark, sem contorno, e a dica (22.3) mostra “Resolver até dd/mm/aaaa, hh:mm”; o nome acessível do cartão traz “Vencida. Resolver até {dt}“US-MSG-02RN-MSG-003; D-MSG-058, 059
CA-MSG-022.3Dado a dica do prazo, então ela se comporta como a de 1ª Consulta da Central: o mouse abre ao passar e a mantém aberta sobre o texto ou sobre ela (fecha 150 ms depois de sair); o toque abre e tocar de novo fecha, sem abrir a conversa; tocar fora só a fecha, sem acionar o que está sob o dedo; rolar, redimensionar e Esc a fecham (Esc só a dica, antes do modal e da confirmação); a área de toque é de pelo menos 44 x 44 px; a dica não recebe focoUS-MSG-02D-MSG-059
CA-MSG-022.4Dado o cartão no painel ou na lista, então não há ícone de tipo; o autor está em peso médio e o texto da mensagem em peso normal, lido ou não; o não lido se distingue só pela borda lateralUS-MSG-02RN-MSG-017; D-MSG-056
CA-MSG-022.5Dado os graus Imediato e Quanto antes, então os dois chips são só contorno na cor error-dark: Imediato com 2 px e bandeira cheia; Quanto antes com 1 px e bandeira vazia; o texto tem contraste mínimo de 4,5:1 nos dois temas, também com o cartão em destaqueUS-MSG-02RN-MSG-034; D-MSG-057
CA-MSG-023.1Dado a aba “Abertas”, quando ativo “Não lidas”, “Alertas do sistema”, “Vencidas” ou “Enviadas por mim”, então a lista mostra só as que atendem, a linha de resumo mostra “Mostrando n de total” com “Limpar filtros”, e a contagem da aba continua o totalUS-MSG-11RN-MSG-037
CA-MSG-023.2Dado o filtro “Urgência”, quando marco dois graus, então aparecem as conversas de qualquer um dos dois; combinado com outro filtro, só as que atendem aos doisUS-MSG-11RN-MSG-037
CA-MSG-023.3Dado a aba “Finalizadas”, então o período padrão é “Últimos 3 meses”, escrito na linha de resumo; ao trocar para 6 ou 12 meses, entram as finalizadas desse períodoUS-MSG-11RN-MSG-037
CA-MSG-023.4Dado uma busca de pelo menos 2 caracteres, quando faço uma pausa de 1 s ou pressiono Enter, então a lista mostra as conversas em que o nome de quem participa, o do paciente, o título ou o texto de alguma mensagem contém todos os termos, sem distinguir acento ou maiúscula; com 1 caractere, a lista não mudaUS-MSG-11RN-MSG-037
CA-MSG-023.5Dado uma busca em Finalizadas sem resultado no período, então aparece MSG-TMSG-53 e o botão “Buscar em todo o período”, que amplia o período e refaz a buscaUS-MSG-11RN-MSG-037
CA-MSG-023.6Dado mais conversas do que o tamanho da página, então aparece “Mostrar mais” e o resumo “Mostrando n de total”; quando aciono, então entram mais itens e o foco vai ao primeiro item novoUS-MSG-11RN-MSG-037
CA-MSG-023.7Dado que saí da tela de Mensagens e voltei, então os filtros e a busca voltam ao padrãoUS-MSG-11RN-MSG-037
CA-MSG-024.1Dado o formulário de nova mensagem aberto, então todos os campos aparecem com borda fina clara e o rótulo dentro, como marcador, e o fundo cinza só aparece no campo desabilitado; os obrigatórios (destinatário, assunto e mensagem) levam "", e a nota ” Campo obrigatório” abre o formulário—D-MSG-092, 094
CA-MSG-024.2Dado um campo, quando recebe foco, então a borda fica de 2 px em neutral-dark, o rótulo sobe para a borda superior e o conteúdo do formulário não se desloca—D-MSG-092
CA-MSG-024.3Dado um campo com valor diferente do original, quando o foco sai, então a borda fica azul (field-changed) com o rótulo na borda; se o valor for apagado, volta ao estado inicial—D-MSG-092
CA-MSG-024.4Dado um envio com campo obrigatório vazio ou inválido, então o campo fica com borda vermelha e a mensagem de erro aparece embaixo dele, e o foco vai ao primeiro campo com erro—D-MSG-092; EX-MSG-01
CA-MSG-024.5Dado o tipo “Agenda” no processo, quando busco pela data, então cada resultado mostra a data e a hora de início e, abaixo, o tipo do agendamento—RN-MSG-021; D-MSG-090
CA-MSG-024.6Dado o campo de data, quando recebe foco, então o rótulo “Data” sobe para a borda e a máscara do navegador aparece; sem foco e vazio, a máscara fica escondida e o rótulo é o marcador—D-MSG-094
CA-MSG-024.7Dado a busca e o período das listas e a resposta da conversa, então se comportam como os campos do formulário (rótulo como marcador, rótulo na borda com foco ou valor, borda azul com valor), na altura compacta—D-MSG-094
CA-MSG-031.1Dado um usuário que não é participante, então a API responde 404 e a conversa não aparece em nenhuma listaUS-MSG-10RN-MSG-031
CA-MSG-015.1Dado o tema escuro, então todos os componentes usam os tokens do Design System e atendem ao contraste mínimotodasRN-MSG-027

2.5 Fluxos de exceção

IDGatilhoComportamentoRecuperação
EX-MSG-01Falha ao carregar o painel ou a lista (erro de servidor)Estado de erro no lugar da lista com MSG-EMSG-07 e botão “Tentar novamente”O botão repete a consulta
EX-MSG-02Falha de conexão na atualização automáticaOs dados anteriores permanecem; aparece a faixa de sem conexão (reuso da Central)A faixa some na próxima atualização bem-sucedida
EX-MSG-03Falha ao enviar (rede ou servidor)O formulário permanece preenchido; aparece MSG-EMSG-08. Falha ao responder, resolver ou descartar: MSG-EMSG-12O usuário repete “Enviar”; a API usa uma chave de requisição para não duplicar
EX-MSG-04Conversa finalizada por outro participante enquanto o usuário escreve ou ageA API responde 409; a tela recarrega a conversa e mostra o estado final com MSG-TMSG-19Nenhuma; a resposta digitada permanece visível para copiar
EX-MSG-05Conversa inexistente ou de outro usuário (inclusive pelo endereço da conversa)404 (sem revelar se existe); o modal não abre e a lista mostra MSG-EMSG-09Fechar o aviso
EX-MSG-06Usuário sem permissão403; tela de acesso negado padrão do sistema—
EX-MSG-07Destinatário inativo, de licença, sem o direito Visualizar, equipe sem membros ativos ou equipe inativa no momento do envioA API recusa com 422; o formulário mostra MSG-EMSG-10. Alerta do sistema (PublishAlert) para esse destinatário: não é entregue e a anomalia vai para o log de sistema, para o suporte avisar o cliente (D-MSG-069)Escolher outro destinatário (envio por pessoa)
EX-MSG-08Paciente ou processo informado não existe ou não pertence à clínicaA API recusa com 422; o formulário mostra MSG-EMSG-11Corrigir a seleção
EX-MSG-09Tentativa de editar o remetente, o conteúdo, o paciente ou o processo depois do envioNão há endpoint; qualquer tentativa direta retorna 405—

2.6 Validações de campos

CampoTipoFormato e limitesObrigatórioMensagem
Destinatáriopessoa ou equipeid inteiro (pessoa) ou uuid (equipe); da mesma clínica; com direito Visualizar (pessoa) ou ativa (equipe)simMSG-EMSG-01, 10
Assuntotexto1 a 200 caracteres, sem só espaçossimMSG-EMSG-02
Grau de urgênciatextoroutine, urgent, asap ou stat (sempre minúsculas, como no HL7; outra grafia é recusada com 400); ausente ou nulo = Não informadonãoMSG-EMSG-13
Mensagemtexto1 a 2000 caracteres (D-MSG-030), sem só espaçossimMSG-EMSG-03
Pacienteinteiroexistente na clínicanãoMSG-EMSG-11
Processotipo + chaveum só tipo; Prescricao, Documento, RegistroClinico ou Agenda (Paciente também é aceito, com a chave igual ao paciente, mas o formulário não o mostra na lista); exige paciente; o item é obrigatório; novos tipos entram sem mudança de estruturanãoMSG-EMSG-11, 14
Prazodata e horaformato do idioma da clínica, 24 h; convertido para UTC pelo fuso da clínica; ≥ momento do envionãoMSG-EMSG-04, 05
Respostatexto1 a 2000 caracteres (D-MSG-030)sim, ao responderMSG-EMSG-03

Toda validação é repetida no servidor (SBIS NGS1.05.02); a do formulário é só conveniência.

2.7 Mapeamento de componentes de interface

Variantes, estados e tokens do Design System. Cores só por token.

ComponenteVarianteEstadosObservações
Cartão de conversaLista (altura livre, até 5 linhas)padrão, não lida, vencida, finalizada, foco, pressionado2.3.1
Chip de pacientesecondary-light / secondary-darkpadrãoNome (social, se houver)
Prazo (texto, sem chip)neutral-pure (a vencer) ou error-dark (Vencida)padrãoÍcone clock e texto, nunca só a cor; dica como a de 1ª Consulta da Central, com a data e hora (D-MSG-058, 059)
Chip de urgênciacontorno error-dark de 2 px (Imediato) e de 1 px (Quanto antes), neutral-lighter (Urgente), contorno neutro (Rotina)padrão2.3.8 e Design System, seção 13. Ícone flag, texto e cor, nunca só a cor
Seletor de grau de urgênciaQuatro opções do tamanho do chip (rádio), com o nome; a marcada assume a cor e o ícone do chip do cartãopadrão (contorno neutro), marcado (visual do chip), foco, desabilitado (enquanto o envio está em curso)2.3.4; D-MSG-065; área de toque de 44 px
Campo de busca (autocomplete)Campo de texto com lista de resultadospadrão, com foco, buscando, com resultados, sem resultado, desabilitado (tipo de processo sem paciente)2.3.9; alvo de toque dos resultados de 44 px
Campo com rótulo flutuanteTexto, área de texto, seleção, data e hora (e a busca com sugestões); altura de 56 pxinicial (borda fina clara e rótulo dentro), com foco (borda neutral-dark 2 px, rótulo na borda), alterado (borda field-changed 2 px), com erro (borda error-pure 2 px e mensagem embaixo), desabilitado (fundo neutral-lighter)2.3.10; Design System, seção 11 (D-MSG-092)
Chip de estadoResolvida (verde), Descartada (contorno)padrãoSó em Finalizadas e na conversa
Botões “Resolver”/“Descartar” no cabeçalho da conversaOs dois secundários (contorno), altura de 44 px, à direita das linhas De e Para, lado a lado ou empilhados conforme a largura (D-MSG-077, D-MSG-078); o único preenchido do modal é “Responder” (D-MSG-076)idemConfirmação: Cancelar com contorno e foco inicial; Resolver primário; Descartar com o estilo de ação destrutiva, ainda não definido no Design System (seção 12)
Abas Abertas/FinalizadasAbas do Design System com contagemativa, inativa, foco
Filtro rápido (botão alternável)Altura de 32 px e área de toque de 44 px; ativo com borda --color-neutral-dark e check; Design System, seção 15 (D-MSG-091)normal, ativo, focoChips de grau dentro do filtro “Urgência” usam o estilo da seção 13 do Design System
Campos de data e de horárioData: campo nativo; Horário: campo de texto com máscara hh:mm, em 24 h; lado a lado, altura 56, rótulo flutuante em cada um (2.3.10)vazio, preenchido, erro, desabilitado2.3.4; D-MSG-064
Seleção de destinatárioLista agrupada Pessoas/Equipesaberta, fechada, erro
Busca de pacienteA da Centralidem
Modal de conversaFolha inferior (celular) / caixa (largura)aberto, fechando
Diálogo de confirmaçãoPadrão do sistemafoco em Cancelar
Faixa de sem conexãoPadrão do Design Systemvisível, oculta
EsqueletoCartõescarregando

2.8 Integração com o backend

Todos os endpoints exigem usuário autenticado e clínica ativa; retornam 401 sem sessão e 403 sem o direito necessário. Datas em ISO 8601 UTC; a API também devolve serverNow e o fuso da clínica, e o front-end formata no fuso da clínica (DT-001). Ids de conversa e de mensagem são uuid; ids de usuário e de paciente são inteiros.

2.8.1 Listar conversas

  • Função: conversas do usuário logado, por aba.
  • GET /api/v1/conversations?tab=open|closed&limit=&cursor=&q=&unread=&system=&mine=&overdue=&urgency=&period=&from=&to= — limit padrão 50 em open e 20 em closed; unread, overdue e urgency (lista de chaves separadas por vírgula, “ou” entre elas) só em open; period (3m padrão, 6m, 12m, all (a opção “Tudo”) e custom com from e to, datas AAAA-MM-DD) só em closed; q com pelo menos 2 caracteres (RN-MSG-037); system e mine nas duas abas; os filtros se combinam com “e”.
  • Response 200: { "serverNow": "...Z", "timeZone": "America/Sao_Paulo", "counts": { "open": 7, "closed": 31 }, "total": 4, "items": [ ConversationSummary ], "nextCursor": "…|null" }
  • ConversationSummary: { id, subject, sourceType: "user|system", clinic: { id, shortName }|null, lastAuthor: { id|null, name, onBehalfOfTeam|null }, lastMessage, lastMessageAt, deadline|null, overdue: boolean, urgencyLevel: { key: "routine|urgent|asap|stat", name }|null, unread: boolean, readByOthers: boolean|null, status, patient: { id, preferredName, legalName }|null, process: { type, key }|null, closedBy: { id, name }|null, closedAt|null }
  • readByOthers: só tem valor quando a última mensagem é do usuário (nulo em alerta do sistema e quando a última é de outra pessoa). É verdadeiro quando algum outro participante tem UltimaSequenciaLida maior ou igual à sequência dessa mensagem; num autoenvio, é verdadeiro. Calculado na consulta, sem coluna nova (04, 4.1).
  • Escopo de clínica (RN-MSG-025, DT-013): para o médico, as conversas das clínicas do cliente em que ele atende; para os demais profissionais, só as da clínica do login. clinic vem preenchido quando o usuário atende em mais de uma clínica e é nulo caso contrário (D-CM-064).
  • urgencyLevel: nulo quando “Não informado”. key é o valor do domínio HL7 (routine, urgent, asap ou stat) e name já vem traduzido para o idioma da clínica, de IpTerminologia.Indicadores e TermoTraducao (DT-011, DT-012); o front-end não mantém a lista de nomes. A ordem do grau (do menos ao mais urgente: routine, urgent, asap, stat) é aplicada no servidor. [PROPOSTA de contrato, E-MSG-018, revista por D-MSG-039]
  • Busca (q): compara, sem acento e sem maiúscula e com todos os termos, o nome de quem participa (pessoa ou equipe), o nome do paciente, o título e o texto das mensagens, só nas conversas das quais o usuário participa; não busca CPF (04, L-12). Ordem: em open, a de 2.3.7 (grau de urgência e depois a chave de data; calculada no servidor); em closed, por closedAt decrescente. O painel usa limit=4.
  • BD: mensageria.Conversa, ConversaDestinatario, ConversaLeitura, Mensagem, ConversaAcao; Paciente; IpSeguranca.Usuario (04, 4.1 e 4.2).
  • Códigos: 200, 400 (aba, cursor ou filtro inválido), 401, 403. counts é o total geral de cada aba, sem período nem filtros; total é o número de conversas que atendem a busca e os filtros da aba pedida (alimenta “Mostrando n de total”).
  • Paginação [PROPOSTA]: o cursor é a posição na ordem calculada (grupo, grau, chave, id). Como abrir uma conversa a muda de grupo, uma conversa pode aparecer em duas páginas seguidas ou ser pulada; o front remove duplicados por id e recarrega a primeira página ao voltar à lista.
  • Atualização automática: o front consulta a cada 1 minuto (painel e aba aberta). O endpoint específico da Central (GET /api/v1/cockpit/doctor/conversations) permanece, e o contrato dele deve ser alinhado a este (P-MSG-09).

2.8.2 Detalhar conversa

  • GET /api/v1/conversations/{id}
  • Response 200: { id, subject, sourceType, moduleOrigin|null, sender: { id|null, name }, recipient: { type: "user|team", userId|null, teamId|null, name, memberCount|null, isSelf }, patient, process, deadline, overdue, urgencyLevel, status, closedBy, closedAt, canReply: boolean, canClose: boolean, messages: [ { id, sequence, author: { id|null, name, onBehalfOfTeam|null }, content, createdAt, readByOthers: boolean|null } ] }
  • O tipo gravado da mensagem é sempre Response (Log de Mudanças, 26/10/2026); a mensagem inicial é a de sequence 1 e a mensagem do sistema tem author.id nulo.
  • canReply é falso em conversa finalizada, em alerta do sistema e para quem não tem o direito Enviar; canClose é falso em conversa finalizada.
  • Códigos: 200, 401, 403, 404 (inexistente ou fora da participação).

2.8.3 Criar conversa

  • POST /api/v1/conversations (cabeçalho Idempotency-Key, opção B de P-MSG-25: guardada em AlertaPublicacao com ModuloOrigem = 'User', sem comparação do conteúdo; ver 04 L-06)
  • Request: { recipient: { type: "user|team", id }, subject, content, patientId|null, process: { type, key }|null, deadline|null, urgencyLevel: "routine|urgent|asap|stat"|null }
  • Efeito: cria Conversa (status Sent, grau de urgência do pedido), Mensagem (sequência 1, tipo Response), copia os destinatários (ConversaDestinatario), grava a leitura do remetente, a ação Send e o evento de auditoria; tudo em uma transação.
  • Response 201: { id }. Códigos: 400 (validação, inclusive prazo anterior ao envio), 401, 403 (sem Enviar ou sem Visualizar), 422 (destinatário, paciente ou processo inválido), Chave repetida: 200 com o id da conversa já criada, sem comparar o conteúdo (opção B, D-MSG-020); por isso uma chave repetida com texto diferente também devolve a conversa antiga e o texto novo é ignorado. A chave vale por usuário: a Mensageria grava {IdUsuario}:{Idempotency-Key} [PROPOSTA].

2.8.4 Marcar como lida

  • POST /api/v1/conversations/{id}/read — atualiza a leitura do usuário para a última sequência e, se o status era Sent e o usuário não é o remetente, muda para Read. Idempotente: só grava ação Read e auditoria quando a leitura avança, com StatusNovo igual ao status atual. A conversa passa a Read quando um destinatário que não é o remetente a abre pela primeira vez; num autoenvio, nasce Read. Códigos: 204, 401, 403, 404.

2.8.5 Responder

  • POST /api/v1/conversations/{id}/reply
  • Request: { content }. Efeito: nova Mensagem (Response), UltimaSequencia + 1, status Responded, leitura do autor atualizada, ação Response, auditoria. Em equipe, o autor é gravado com a equipe de origem quando é membro (RN-MSG-030).
  • Response 201: { messageId, sequence }. Códigos: 400, 401, 403 (sem Enviar), 404, 409 (finalizada ou alerta do sistema).

2.8.6 Resolver e descartar

  • PATCH /api/v1/conversations/{id}/resolve e /discard. Sem corpo. Efeito: status Resolved ou Dismissed, ação Resolve ou Dismiss com o usuário, auditoria. Nenhuma mensagem é criada (RN-MSG-009). Códigos: 204, 401, 403, 404, 409 (já finalizada; a resposta traz quem finalizou e quando).
  • Concorrência: se a versão da conversa mudou por outra causa (leitura ou resposta), a API relê e repete; só devolve 409 se a conversa já estiver finalizada. O primeiro pedido de finalização vence e o segundo recebe 409 (EX-MSG-04). Resolver e descartar exigem o direito Visualizar (E-MSG-010).

2.8.7 Destinatários possíveis

  • GET /api/v1/conversations/recipients?q=&limit=8 — { teams: [ { id, name, memberCount, matchedMembers? } ], people: [ { id, name, isSelf, teams: [ { id, name } ] } ], hasMore } (teams de cada pessoa e matchedMembers das equipes: D-MSG-060 e 063) (equipes antes das pessoas; RN-MSG-036). Exige o direito Enviar (e Visualizar). Pessoas: usuários ativos da clínica com o direito Visualizar, inclusive o próprio. Equipes: ativas, com pelo menos um membro ativo. q ignora maiúsculas e acentos; sem q, devolve as primeiras opções. Códigos: 200, 401, 403.

2.8.8 Busca de paciente

  • Reuso integral de GET /api/v1/patients/search (Central do Médico, 2.1), com os mesmos critérios (nome, CPF, data de nascimento, nome da mãe; a chave id: segue o que a Central decidir, D-CM-036) e a mesma resposta (nome completo, prontuário, sexo, data de nascimento, nome da mãe e CPF, ECF.03.14); limit=8 e hasMore para o aviso MSG-TMSG-42 (se o serviço atual não tiver o limite, ele é acrescentado). Nenhuma diferença de critério em relação à Central (D-MSG-071).

2.8.9 Opções de processo [PROPOSTA]

  • GET /api/v1/conversations/process-options?patientId=&type=&q=&limit=8 — patientId obrigatório. Sem type: { types: [ "Prescricao|Documento|RegistroClinico|Agenda" ] } (etapa 2). Com type: { options: [ { key, label, detail }], hasMore }, só os itens do paciente, filtrados por q (etapa 3): Prescrição, por Prescricao.Identificacao em qualquer parte do texto (label é a identificação; detail, a data da prescrição); Documento, por nome (label é o nome; detail, a data); Registro clínico, por data (label é data, modelo e profissional); Agenda, pela data do agendamento (label é data e hora de início; detail, o tipo, [PROPOSTA] a classificação da agenda); cada tipo filtra só pelo seu campo (D-MSG-050); o tipo Paciente é válido, mas não é devolvido nesta lista (D-MSG-095). Cada módulo fornece os seus itens e novos tipos entram sem mudar a mensageria. Tipo desconhecido ou ainda não implementado: 400 MSG-EMSG-11. A mensageria só consolida (P-MSG-07).

2.8.10 Publicação de alerta pelo sistema [PROPOSTA]

  • Interface de integração entre módulos (serviço interno, não exposta ao front-end): PublishAlert { clinicId, moduleOrigin, idempotencyKey, recipient: { type, id }, subject, content, patientId?, process?, deadline?, urgencyLevel?, previousConversationId? }.
  • Efeito: cria Conversa com OrigemTipo = System, a Mensagem inicial (sem autor), os destinatários, o registro em AlertaPublicacao e o evento em OutboxEvento. Uma segunda chamada com a mesma chave (clínica, módulo, chave) devolve a conversa já criada (RN-MSG-029).
  • Anomalia que persiste (RN-MSG-016): com a conversa aberta, o módulo chama AppendAlertUpdate { conversationId, idempotencyKey, content } (sem urgencyLevel: o grau da conversa não muda, RN-MSG-034). Anomalia que se agrava (D-MSG-033): o módulo publica um novo alerta, com o novo grau e previousConversationId, e descarta o anterior; o descarte grava a ação Dismiss sem usuário (IdUsuarioAtor nulo, 04, ConversaAcao), exibida como “Descartada por Sistema”. [PROPOSTA de mecanismo, E-MSG-019]: chamada DismissAlert { conversationId, idempotencyKey }, que acrescenta uma mensagem do sistema, de tipo Response e autor nulo (cada atualização tem a sua chave, registrada em AlertaPublicacao); com a conversa finalizada, chama PublishAlert com previousConversationId. A interface recusa previousConversationId que aponte para conversa ainda aberta.

2.9 Catálogo de mensagens e termos de interface (i18n)

Os textos são cadastrados como termos traduzíveis (DT-011) e exibidos no idioma da clínica (DT-012). Variáveis entre chaves: {dt} data e hora no fuso e idioma da clínica; {name} nome; {n} número de membros; {fmt} formato esperado. Os IDs marcados “reuso” já existem em outras funcionalidades e não devem ser duplicados. MSG-TMSG-35 é a forma singular de MSG-TMSG-14 (um membro). IDs numerados com saltos (por exemplo, MSG-TMSG-04) não são reaproveitados.

IDUsopt-BRen-USes-419
MSG-TMSG-01TextoMensagensMessagesMensajes
MSG-TMSG-02TextoNenhuma conversa em aberto.No open conversations.No hay conversaciones abiertas.
MSG-TMSG-03TextoNenhuma conversa finalizada.No closed conversations.No hay conversaciones finalizadas.
MSG-TMSG-05TextoResolver até {dt}Resolve by {dt}Resolver hasta {dt}
MSG-TMSG-06TextoVencidaOverdueVencida
MSG-TMSG-07TextoAbertaOpenAbierta
MSG-TMSG-08TextoResolvidaResolvedResuelta
MSG-TMSG-09TextoDescartadaDiscardedDescartada
MSG-TMSG-10TextoNão lidaUnreadNo leída
MSG-TMSG-11TextoAlerta do sistemaSystem alertAlerta del sistema
MSG-TMSG-12TextoDeFromDe
MSG-TMSG-13TextoParaToPara
MSG-TMSG-14TextoEquipe {name} · {n} membrosTeam {name} · {n} membersEquipo {name} · {n} miembros
MSG-TMSG-15TextoVocêYouUsted
MSG-TMSG-16TextoResolvida por {name} em {dt}Resolved by {name} on {dt}Resuelta por {name} el {dt}
MSG-TMSG-17TextoDescartada por {name} em {dt}Discarded by {name} on {dt}Descartada por {name} el {dt}
MSG-TMSG-19TextoEsta conversa foi finalizada. Não é possível responder.This conversation is closed. You can no longer reply.Esta conversación está finalizada. Ya no es posible responder.
MSG-TMSG-20TextoAlertas do sistema não recebem resposta.System alerts cannot be replied to.Las alertas del sistema no admiten respuesta.
MSG-TMSG-24TextoConversa resolvida.Conversation resolved.Conversación resuelta.
MSG-TMSG-25TextoConversa descartada.Conversation discarded.Conversación descartada.
MSG-TMSG-26TextoMensagem enviada.Message sent.Mensaje enviado.
MSG-TMSG-27TextoResposta enviada.Reply sent.Respuesta enviada.
MSG-TMSG-29TextoSistemaSystemSistema
MSG-TMSG-30TextoAtualização do sistemaSystem updateActualización del sistema
MSG-TMSG-31TextoEnviadaSentEnviada
MSG-TMSG-32TextoLidaReadLeída
MSG-TMSG-34Texto(você)(you)(usted)
MSG-TMSG-35TextoEquipe {name} · 1 membroTeam {name} · 1 memberEquipo {name} · 1 miembro
MSG-TMSG-36Texto (título e nome acessível do chip)Grau de urgência: {name}Urgency level: {name}Grado de urgencia: {name}
MSG-TMSG-37TextoNenhum grau selecionado: a conversa será enviada sem grau. Depois do envio, o grau não pode ser alterado.No level selected: the conversation is sent without an urgency level. It cannot be changed after sending.Ningún grado seleccionado: la conversación se enviará sin grado de urgencia. No se puede cambiar después del envío.
MSG-TMSG-38TextoDepois do envio, o grau não pode ser alterado.It cannot be changed after sending.No se puede cambiar después del envío.
MSG-TMSG-39TextoHá {n} min{n} min agoHace {n} min
MSG-TMSG-40TextoHá {n} h{n} h agoHace {n} h
MSG-TMSG-41TextoNenhum resultado para “{q}”.No results for “{q}”.Sin resultados para “{q}”.
MSG-TMSG-42TextoHá mais resultados. Refine a busca.There are more results. Refine your search.Hay más resultados. Refine la búsqueda.
MSG-TMSG-43Texto{item} de {name}{item} for {name}{item} de {name}
MSG-TMSG-44TextoInclui {name}Includes {name}Incluye {name}
MSG-TMSG-45TextoEquipes: {list}Teams: {list}Equipos: {list}
MSG-TMSG-46TextoSem equipeNo teamSin equipo
MSG-TMSG-47TextoProntuário: {pr} - Sexo: {sx} - Nasc: {dob} - Mãe: {mom} - CPF: {cpf}Record: {pr} - Sex: {sx} - DOB: {dob} - Mother: {mom} - ID: {cpf}Historia: {pr} - Sexo: {sx} - Nac: {dob} - Madre: {mom} - ID: {cpf}
MSG-TMSG-48TextoDigite pelo menos 2 caracteres para iniciar a busca.Type at least 2 characters to start searching.Escriba al menos 2 caracteres para iniciar la búsqueda.
MSG-TMSG-49TextoDigite parte do nome, CPF, data de nascimento ou nome da mãe para filtrarEnter part of the name, ID, mother’s name or DOB to filterIngrese parte del nombre, ID, nombre de la madre o fecha de nacimiento para filtrar
MSG-TMSG-50TextoNenhum paciente encontrado com os dados informados.No patient found with the provided data.Ningún paciente encontrado con los datos informados.
MSG-TMSG-51TextoMostrando {n} de {total}Showing {n} of {total}Mostrando {n} de {total}
MSG-TMSG-52TextoNenhuma conversa com esses filtros.No conversations match these filters.Ninguna conversación con estos filtros.
MSG-TMSG-53TextoNenhuma conversa finalizada neste período.No closed conversations in this period.Ninguna conversación finalizada en este período.
MSG-TMSG-54RótuloFiltros da listaList filtersFiltros de la lista
MSG-TMSG-55AjudaDigite ao menos 2 letras para buscar.Type at least 2 letters to search.Escriba al menos 2 letras para buscar.
MSG-TMSG-56Texto* Campo obrigatório* Required field* Campo obligatorio
MSG-LMSG-01RótuloDestinatárioRecipientDestinatario
MSG-LMSG-02RótuloPessoasPeoplePersonas
MSG-LMSG-03RótuloEquipesTeamsEquipos
MSG-LMSG-04PlaceholderSelecioneSelectSeleccione
MSG-LMSG-05RótuloAssuntoSubjectAsunto
MSG-LMSG-06RótuloMensagemMessageMensaje
MSG-LMSG-07RótuloPaciente (opcional)Patient (optional)Paciente (opcional)
MSG-LMSG-08RótuloPrazo para resolução (opcional)Resolution deadline (optional)Plazo de resolución (opcional)
MSG-LMSG-09RótuloProcesso relacionado (opcional)Related process (optional)Proceso relacionado (opcional)
MSG-LMSG-10OpçãoPaciente (não aparece na lista do formulário, D-MSG-095)PatientPaciente
MSG-LMSG-12OpçãoPrescriçãoPrescriptionPrescripción
MSG-LMSG-13OpçãoNenhumNoneNinguno
MSG-LMSG-14PlaceholderEscreva uma resposta…Write a reply…Escriba una respuesta…
MSG-LMSG-15OpçãoAgenda (volta a ser usado, D-MSG-085)ScheduleAgenda
MSG-LMSG-16RótuloGrau de urgência (opcional)Urgency level (optional)Grado de urgencia (opcional)
MSG-LMSG-17OpçãoDocumentoDocumentDocumento
MSG-LMSG-18OpçãoRegistro clínicoClinical recordRegistro clínico
MSG-LMSG-19RótuloItem do processoProcess itemElemento del proceso
MSG-LMSG-20SubtítuloOpcionaisOptionalOpcionales
MSG-LMSG-21Marcador do campoDigite para buscarType to searchEscriba para buscar
MSG-LMSG-22Marcador do campoIdentificação da prescrição (qualquer parte)Prescription ID (any part)Identificación de la prescripción (cualquier parte)
MSG-LMSG-23Marcador do campoNome do documentoDocument nameNombre del documento
MSG-LMSG-24Marcador do campoData do registro, por exemplo 21/10/2026Record date, for example 21/10/2026Fecha del registro, por ejemplo 21/10/2026
MSG-LMSG-25Marcador do campoNome do pacientePatient nameNombre del paciente
MSG-LMSG-26RótuloDataDateFecha
MSG-LMSG-27RótuloHorário (sem “(opcional)”: a legenda do prazo já diz que é opcional; D-MSG-092)TimeHora
MSG-LMSG-28AjudaSem horário, o prazo vai até o fim do dia.Without a time, the deadline runs until the end of the day.Sin hora, el plazo vence al final del día.
MSG-LMSG-29Marcador do campoPessoa, paciente ou assuntoPerson, patient or subjectPersona, paciente o asunto
MSG-LMSG-30RótuloPeríodoPeriodPeríodo
MSG-LMSG-31OpçãoÚltimos 3 mesesLast 3 monthsÚltimos 3 meses
MSG-LMSG-32OpçãoÚltimos 6 mesesLast 6 monthsÚltimos 6 meses
MSG-LMSG-33OpçãoÚltimos 12 mesesLast 12 monthsÚltimos 12 meses
MSG-LMSG-34OpçãoTudo (D-MSG-089)All [PROPOSTA]Todo [PROPOSTA]
MSG-LMSG-35OpçãoPersonalizadoCustomPersonalizado
MSG-LMSG-36RótuloData inicialStart dateFecha inicial
MSG-LMSG-37RótuloData finalEnd dateFecha final
MSG-LMSG-38Marcador do campoData do agendamento, por exemplo 22/10/2026Appointment date, for example 22/10/2026Fecha de la cita, por ejemplo 22/10/2026
MSG-IND-1Termo (Indicadores), chave routineRotinaRoutineRutina
MSG-IND-2Termo (Indicadores), chave urgentUrgenteUrgentUrgente
MSG-IND-3Termo (Indicadores), chave asapQuanto antesASAPCuanto antes
MSG-IND-4Termo (Indicadores), chave statImediatoSTATInmediato
MSG-EMSG-01ErroInforme o destinatário.Select a recipient.Indique el destinatario.
MSG-EMSG-02ErroInforme o assunto.Enter a subject.Indique el asunto.
MSG-EMSG-03ErroEscreva a mensagem.Write the message.Escriba el mensaje.
MSG-EMSG-04ErroO prazo não pode ser anterior ao momento do envio.The deadline cannot be earlier than the moment of sending.El plazo no puede ser anterior al momento del envío.
MSG-EMSG-05ErroInforme a data do prazo.Enter the date of the deadline.Indique la fecha del plazo.
MSG-EMSG-15ErroInforme o horário de 00:00 a 23:59.Enter a time from 00:00 to 23:59.Indique una hora de 00:00 a 23:59.
MSG-EMSG-07ErroNão foi possível carregar as mensagens. Tente novamente.Could not load messages. Try again.No fue posible cargar los mensajes. Intente de nuevo.
MSG-EMSG-08ErroNão foi possível enviar. Tente novamente.Could not send. Try again.No fue posible enviar. Intente de nuevo.
MSG-EMSG-09ErroConversa não encontrada.Conversation not found.Conversación no encontrada.
MSG-EMSG-10ErroEste destinatário não pode receber mensagens agora.This recipient cannot receive messages right now.Este destinatario no puede recibir mensajes ahora.
MSG-EMSG-11ErroPaciente ou processo inválido.Invalid patient or process.Paciente o proceso no válido.
MSG-EMSG-12ErroNão foi possível concluir a ação. Tente novamente.Could not complete the action. Try again.No fue posible completar la acción. Intente de nuevo.
MSG-EMSG-13ErroGrau de urgência inválido.Invalid urgency level.Grado de urgencia no válido.
MSG-EMSG-14ErroEscolha o item do processo.Choose the process item.Elija el elemento del proceso.
MSG-BMSG-01BotãoNova mensagemNew messageNuevo mensaje
MSG-BMSG-02BotãoEnviarSendEnviar
MSG-BMSG-03BotãoCancelarCancelCancelar
MSG-BMSG-04BotãoVoltarBackVolver
MSG-BMSG-05BotãoResponderReplyResponder
MSG-BMSG-06BotãoResolverResolveResolver
MSG-BMSG-07BotãoDescartarDiscardDescartar
MSG-BMSG-08AbaAbertasOpenAbiertas
MSG-BMSG-09AbaFinalizadasClosedFinalizadas
MSG-BMSG-10Link(sem uso desde a v1.10: o painel não tem mais o link “Ver todas as mensagens”; D-MSG-049)——
MSG-BMSG-11BotãoFecharCloseCerrar
MSG-BMSG-12BotãoAbrir prontuárioOpen medical recordAbrir historia clínica
MSG-BMSG-13BotãoAbrir prescriçãoOpen prescriptionAbrir prescripción
MSG-BMSG-14BotãoAbrir agendamento (volta a ser usado, D-MSG-085)Open appointmentAbrir cita
MSG-BMSG-15BotãoAbrir documentoOpen documentAbrir documento
MSG-BMSG-16BotãoAbrir registro clínicoOpen clinical recordAbrir registro clínico
MSG-BMSG-17FiltroNão lidasUnreadNo leídas
MSG-BMSG-18FiltroAlertas do sistemaSystem alertsAlertas del sistema
MSG-BMSG-19FiltroEnviadas por mimSent by meEnviadas por mí
MSG-BMSG-20FiltroVencidasOverdueVencidas
MSG-BMSG-21FiltroUrgênciaUrgencyUrgencia
MSG-BMSG-22BotãoLimpar filtrosClear filtersBorrar filtros
MSG-BMSG-23BotãoMostrar maisShow moreMostrar más
MSG-BMSG-24BotãoBuscar em todo o períodoSearch the whole periodBuscar en todo el período
MSG-BMSG-15BotãoTentar novamenteTry againIntentar de nuevo
MSG_resolveConfirmTitle (reuso, Central)ConfirmaçãoResolver conversa?Resolve conversation?¿Resolver la conversación?
MSG_resolveConfirmBody (reuso)ConfirmaçãoA conversa será marcada como resolvida para todos os destinatários.The conversation will be marked as resolved for all recipients.La conversación se marcará como resuelta para todos los destinatarios.
MSG_resolveConfirmOk (reuso)ConfirmaçãoResolverResolveResolver
MSG_discardConfirmTitle (reuso)ConfirmaçãoDescartar conversa?Discard conversation?¿Descartar la conversación?
MSG_discardConfirmBody (reuso)ConfirmaçãoA conversa será descartada para todos os destinatários.The conversation will be discarded for all recipients.La conversación se descartará para todos los destinatarios.
MSG_discardConfirmOk (reuso)ConfirmaçãoDescartarDiscardDescartar
MSG-TAGM-09 (reuso, Agenda)FusoFuso horário: {name} ({gmt})Time zone: {name} ({gmt})Huso horario: {name} ({gmt})
MSG-TAGM-10 (reuso, Agenda)Fuso— diferente do fuso deste aparelho— different from this device’s time zone— distinto del huso de este dispositivo
MSG_connectionLost (reuso, Central)FaixaSem conexão — dados atualizados às {hh:mm}No connection — data updated at {hh:mm}Sin conexión — datos actualizados a las {hh:mm}

Nota: o texto da faixa de sem conexão deve ser conferido contra o catálogo da Central antes da implementação (a versão acima reproduz o padrão da Agenda, MSG-TAGM-03).

2.10 Acessibilidade

  • Cartão: um único elemento clicável (link ou botão) com nome acessível “assunto, autor, última mensagem, data, estado (não lida, vencida), grau de urgência (quando informado)”.
  • A borda de não lida é decorativa; a informação equivalente está no nome acessível (“não lida”) e no texto oculto “Não lida” lido antes da mensagem.
  • Chip de urgência: o nome do grau é o texto visível, o título e o nome acessível são “Grau de urgência: {nome}” e o ícone é decorativo; a cor reforça, mas nunca é o único sinal; contraste do texto de pelo menos 4,5:1 em cada nível e tema (2.3.8). Seletor de grau: grupo de rádio com legenda “Grau de urgência (opcional)”; as setas mudam a opção e a barra de espaço na opção marcada a desmarca. Campos de busca: padrão de caixa de combinação (2.3.9).
  • Prazo (D-MSG-058, 059): o rótulo “Resolver até” fica oculto visualmente e é lido pelo leitor de tela; a dica não recebe foco, e o nome acessível do cartão traz “Vencida. Resolver até {dt}” (como o “1ª Consulta” da Central); a dica fecha com Esc, ao rolar e ao redimensionar; área de toque de 44 px; a cor vermelha vem com o ícone e a palavra.
  • Confirmação: foco inicial em “Cancelar”, Esc cancela, foco volta ao elemento que abriu o diálogo.
  • Campos de data e de horário, cada um com rótulo flutuante, sob a legenda “Prazo para resolução (opcional)” (fieldset e legend); o horário tem a ajuda MSG-LMSG-28 ligada por aria-describedby, e as mensagens de erro ficam ligadas ao campo de cada uma (data: MSG-EMSG-04 e 05; horário: MSG-EMSG-15).
  • Campos com rótulo flutuante (D-MSG-092): o rótulo é um label ligado ao campo por for, mesmo quando está dentro do campo; o asterisco é decorativo (aria-hidden) e o campo obrigatório leva aria-required="true"; o erro põe aria-invalid="true" e a mensagem fica ligada ao campo; a nota ”* Campo obrigatório” (MSG-TMSG-56) abre o formulário. Contraste do rótulo-marcador de 5,5:1 (claro) e 7:1 (escuro) sobre o fundo do campo; a borda do estado inicial tem 1,7:1 (claro) e 1,8:1 (escuro), abaixo de 3:1 (P-MSG-50).
  • Atualização automática não anuncia a lista inteira; só a mudança de contagem de não lidas.
  • Contraste mínimo de 4,5:1 para texto e 3:1 para elementos não textuais, nos temas claro e escuro. Alvo de toque de 44 px.
  • Respeitar a preferência de reduzir movimento.

2.11 Conformidade SBIS (detalhamento)

Requisitos identificados no documento 01 (item 1.10), conferidos contra o arquivo de requisitos SBIS v5.2 (coluna do estágio para clínica/ambulatório). Atende = coberto pelo desenho; Parcial = depende de proposta pendente; Não se aplica = justificado.

Requisito (estágio)Como é atendidoSituação
NGS1.03.01 (1) Impedir acesso de não autorizadosTodos os endpoints exigem sessão autenticada; participação na conversa verificada no servidor (404 fora da participação)Atende
NGS1.03.03 (1) Perfis e permissõesDireitos Visualizar e Enviar no perfil de acesso (seeds em 04, item 4.6)Atende, depende dos seeds [PROPOSTA]
NGS1.03.04 (2) Segregação por tipo de operaçãoVisualizar e Enviar independentes; resolver e descartar seguem Visualizar (D-MSG-029, D-MSG-070)Parcial até decisão
NGS1.03.09 (1) Identidade únicaToda mensagem e ação guarda o usuário; o remetente é imutável (RN-MSG-014); alerta guarda o móduloAtende
NGS1.05.01 (1) Comunicação seguraTráfego exclusivamente por canal seguro entre o front-end e a APIAtende (padrão da plataforma)
NGS1.05.02 (1) Processamento no servidorOrdem, “vencida”, “não lida”, permissões e todas as validações no servidor (2.6, 2.8)Atende
NGS1.06.01 (1) SGBDDados no banco do cliente (04)Atende
NGS1.07.01 (1) Auditoria contínuaEvento de auditoria para envio, leitura, resposta, resolução e descarteAtende, depende do componente de auditoria
NGS1.07.02 (1) Proteção da trilhaA trilha de auditoria fica na trilha central de segurança (E-MSG-009), fora do schema da mensageria. O acesso à trilha só por auditor ou administrador pertence ao componente de auditoria. A integridade do histórico da conversa (cascata de exclusão) é a lacuna L-02 do MapeamentoAtende, depende do componente de auditoria
NGS1.07.03 (1) Eventos registradosEventos listados acima, com o módulo gerador nos alertas (04, L-03)Atende
NGS1.07.05 (1) Informações do registroUsuário, data e hora, identificador da conversa e tipo de ação. Lacuna: endereço de origem não está na tabela de ações (04, L-01)Parcial
NGS1.07.06 (1) Privacidade na trilhaNem o texto da mensagem nem a identificação do paciente entram na trilha; só identificadoresAtende
ECF.15.01 (2) Notas vinculadas a pacienteAssociação opcional a paciente (RN-MSG-020), exibida no cartão. O requisito pede a nota visível no prontuário; a conversa não aparece no prontuário (RN-MSG-026)Parcial
ECF.15.02 (3) Notas para o profissionalMensagem a si mesmo ou a outro profissionalAtende
ECF.15.03 (3) Mensagens coletivasEnvio a equipes (RN-MSG-015). Não há envio agendadoParcial
ECF.17.01 (1) Profissional responsável pelo eventoAutor de cada mensagem e ator de cada açãoAtende
ECF.17.02 (1) Registro de tempoData e hora de cada mensagem e ação, em UTC, exibidas no fuso da clínicaAtende
ECF.17.03 (1) Tempo da ocorrênciaData e hora de cada mensagem e ação gravadas no momento em que ocorrem; não há registro retroativoAtende
ECF.17.04 (1) Cronologia de eventosMensagens por sequência; ações por data e hora. A ordem da lista de conversas (2.3.3) é de prioridade, não cronológicaParcial
ECF.17.05 (1) Consistência cronológicaO prazo não pode ser anterior ao envio (RN-MSG-004), validado no servidorAtende
ECF.17.18 (1) IdiomaO requisito exige todos os textos em português do Brasil. O pt-BR é completo; en-US e es-419 complementam (RN-MSG-013, D-MSG-019). Os termos vindos do banco passam por TermoTraducao (DT-011); o pt-BR precisa ter todas as linhasAtende, com a carga de pt-BR completa (CT-MSG-265)
ECF.17.18 e ECF.17.19 aplicados ao grau de urgência (1)Os quatro nomes existem em pt-BR (Rotina, Urgente, Quanto antes, Imediato), en-US e es-419, cadastrados em TermoTraducao (MSG-IND-1 a 4); o pt-BR é completoAtende, depende do seed (04, item 4.6)
ECF.17.19 (1) Mensagens do sistemaCatálogo de mensagens em linguagem não técnica (2.9), com o pt-BR completoAtende (CT-MSG-265)

Pendência herdada da Central do Médico: P-CM-026(a), em que o consultor jurídico quer a mensageria fora do escopo SBIS, segue em aberto; esta especificação documenta o caso em que ela está dentro.


Histórico de Versões

  • v1.0 (22/10/2026) — Criação da Especificação da Mensageria, a pedido do solicitante, a partir da Definição v1.0, do documento anexado “Especificação Funcional Consolidado, Serviço de Comunicação Entre Profissionais, v1.0” (12/08/2026), da auditoria das telas implementadas (21/10/2026), do redesenho e das decisões de 21 e 22/10/2026 (que prevalecem nas divergências). Incorpora e substitui o documento “(MSG-Redesenho) Regras e textos 22-10-2026”, cujo conteúdo foi absorvido (cartão 2.3.1, telas 2.3.2 a 2.3.6, catálogo 2.9). Decisões do solicitante refletidas: o usuário recebe mensagens da equipe da qual faz parte (P-MSG-02); data e hora em um campo único, componente React em aberto (P-MSG-04); o padrão de cor dos botões fica em aberto (P-MSG-01); ordem das abertas por “maior entre última mensagem e prazo” (aceita a sugestão). Conformidade SBIS conferida contra o arquivo de requisitos (resposta a P-MSG-05): lacunas L-01 e L-02 do Mapeamento. Itens [PROPOSTA] novos nesta versão: limite de 4000 caracteres, paginação de 20, ordem de “Finalizadas”, processo condicionado a paciente, Idempotency-Key, interface de publicação de alerta, MSG-TMSG-30 e textos de erro MSG-EMSG-07 a 11. Revisão por Dois Críticos: ver entrada seguinte.
  • v1.0, revisão por Dois Críticos (22/10/2026) — Crítico técnico independente, 43 achados, conferidos contra o DDL, o arquivo de requisitos SBIS e o protótipo executado. Aplicados: estado Enviada, Lida e Respondida visível (CA-MSG-016.1, textos MSG-TMSG-31 a 35) e regra de leitura e autoenvio; contrato de atualização de alerta alinhado a RN-MSG-016 (AppendAlertUpdate); idempotência do envio condicionada à nova estrutura (04, L-06); regras novas na Definição (RN-MSG-031 a 033); Enviar exige Visualizar; concorrência de finalização sem 409 indevido; paginação com ordem mutável; conformidade SBIS corrigida (ECF.17.18 e 17.19 exigem português do Brasil, ECF.17.04 parcial, ECF.17.03 e 17.05 acrescentados, ECF.14.36 retirado, NGS1.07.02 reescrito); CA-MSG-001.2 reescrito; protótipo corrigido (envio volta à lista, atalho no modal, validação de data, estrutura HTML). Registrados como risco ou questão aberta: efeito da ordem por prazo distante (um lembrete com prazo em meses fica no topo do seu grupo; o vencido afunda abaixo de mensagens novas), uso da fila de eventos, índice por remetente e idioma (P-MSG-24). Não aplicados: nenhum falso positivo claro; “Esc sempre chama render” e foco no diálogo ficam para a revisão de UI/UX da versão aprovada.
  • v1.1 (27/10/2026) — Respostas do solicitante e alinhamento com a Central do Médico v5.15, DT-013 e o Log de Mudanças: (1) borda de não lida de 3 px em secondary-dark, como na Central (P-MSG-09, D-CM-045); (2) cartão com a linha da clínica quando o usuário atende em mais de uma (DT-013, D-CM-064) e clinic no contrato; (3) botões: um só preenchido por região, em verde escuro (--color-primary-strong), secundário com contorno, “Resolvido” do cartão com contorno (P-MSG-01, Design System seção 12); (4) idempotência do envio pela opção B, sem comparar o conteúdo, e chave por usuário [PROPOSTA] (P-MSG-25); (5) tipo gravado da mensagem sempre Response, sem Initial nem Update (Log de Mudanças, 26/10/2026); (6) ECF.17.18 e 17.19 atendidos com o pt-BR completo (P-MSG-24). Em aberto: o selo de estado do cartão (P-MSG-13).
  • v1.2 (27/10/2026) — Respostas do solicitante (P-MSG-13, P-MSG-29): (1) o cartão não tem mais chip de estado de envio; mostra assunto e data e hora à direita (mantidos assim por decisão do solicitante), “autor: mensagem” e, quando a última mensagem é do usuário, check ou check-check (D-MSG-023); (2) readByOthers no contrato; (3) CA-MSG-016.1 reescrito e CA-MSG-016.2 novo; (4) MSG-TMSG-33 (“Respondida”) retirado do catálogo; MSG-TMSG-31 e 32 passam a ser rótulos dos ícones; (5) o ícone também aparece nas mensagens do usuário dentro da conversa [PROPOSTA].
  • v1.3 (28/10/2026) — Grau de urgência (D-MSG-025 a 027): nova seção 2.3.8 (chip, quatro níveis e tokens); campo no formulário (2.3.4) e validação (2.6); chip no cartão e no cabeçalho (2.3.1, 2.3.5); ordem por grau antes da data (2.3.7, 2.8.1); contrato com urgency na listagem, no detalhe, na criação e em PublishAlert (sem urgency em AppendAlertUpdate); critérios CA-MSG-017.1 a 017.8; textos MSG-TMSG-36 a 38, MSG-LMSG-16, MSG-IND-1 a 4 e MSG-EMSG-13; acessibilidade e SBIS (ECF.17.18 e 17.19). A coluna GrauUrgencia e os seeds de Indicadores são [PROPOSTA] (04, L-09 e L-10).
  • v1.4 (28/10/2026) — Respostas do solicitante ao Registro v1.3 (D-MSG-029 a 034): horário relativo no cartão pela regra da Central (2.3.1, 2.3.7; RN-MSG-035); limite de 2000 caracteres com contador na mensagem e na resposta (2.3.4, 2.6); processo como atalho de um só tipo por conversa, sem depender do paciente, com tipo Documento (2.3.4, 2.6, 2.8.9; RN-MSG-021); alerta que se agrava abre nova conversa e descarta a anterior (2.8.10); critérios CA-MSG-018.1 a 018.5 e CA-MSG-008.3 reescrito; textos MSG-TMSG-39 e 40, MSG-LMSG-17 e MSG-BMSG-15. Contrato de urgency e formato do chip confirmados.
  • v1.5 (28/10/2026) — Respostas do solicitante ao P-MSG-33 (D-MSG-035 a 037): tipo Paciente (prontuário), Prescrição, Documento e Registro clínico; Agenda sai; escolha em três etapas (paciente, tipo, item) com o processo exigindo paciente; 2.3.4, 2.6, 2.8.9, CA-MSG-008.3 e 019.1 a 019.4; textos MSG-LMSG-10 (Paciente), 18, 19, MSG-BMSG-16 e MSG-EMSG-14.
  • v1.6 (28/10/2026) — Grau de urgência no domínio HL7 (Routine, Urgent, ASAP, STAT; Rotina, Urgente, Quanto antes, Imediato), chip só com o nome, contrato com key (D-MSG-039; 2.3.8, 2.6, 2.8); formulário com a nova ordem (Destinatário, Assunto, Mensagem e, em “Opcionais”, grau, prazo, paciente e processo; D-MSG-040); destinatário, paciente e item do processo por busca com autocomplete (nova 2.3.9, D-MSG-038; 2.8.7 a 2.8.9); CA-MSG-020.1 a 020.6; textos MSG-LMSG-20 a 25, MSG-TMSG-41 e 42, MSG-IND-1 a 4 e MSG-TMSG-36 atualizados.
  • v1.7 (29/10/2026) — Respostas do solicitante: Rotina aparece como chip (2.3.8; D-MSG-043); itens do processo por data do evento (2.3.9; D-MSG-044); aparência do cartão separado, com cantos arredondados, como na Central (2.3.1, item 8; D-MSG-045); CA-MSG-021.1 a 021.3.
  • v1.9 (29/10/2026) — Campo do grau na API e no código passa de urgency a urgencyLevel (2.6, 2.8; D-MSG-048). A coluna GrauUrgencia não muda.
  • v1.8 (29/10/2026) — Botão “Resolvido” retirado do cartão (2.3.1 item 5, 2.10, tabela de componentes; CA-MSG-005.1 e 021.4; D-MSG-047); chaves do grau em minúsculas na API e na tabela de chips (D-MSG-046).
  • v1.10 (29/10/2026) — Painel sem limite de 4 cartões e sem o link “Ver todas as mensagens”; rolagem própria como os demais painéis da Central (2.3.2; CA-MSG-001.1 e 001.3; MSG-BMSG-10 sem uso; D-MSG-049).
  • v1.11 (29/10/2026) — Campos de busca e de exibição do item do processo corrigidos: Prescrição por Prescricao.Identificacao (qualquer parte), Documento por nome (exibe nome e data), Registro clínico por data (exibe data, modelo e profissional) (formulário; 2.3.9; CA-MSG-020.4; 2.8.9; MSG-LMSG-22 a 24; D-MSG-050).
  • v1.12 (30/10/2026) — Registro clínico: data do evento, modelo e profissional com origem definida (D-MSG-051; 04, 4.4.1). Documento sem mudança, por ora.
  • v1.13 (30/10/2026) — Registro clínico: formato da busca por data e ordem do profissional confirmados (D-MSG-052).
  • v1.14 (30/10/2026) — Sem mudança de conteúdo; acompanha a correção do Mapeamento (nome da coluna SegurancaUsuarioId).
  • v1.15 (05/11/2026) — Novo visual do cartão e do cabeçalho do painel, alinhados à Central: ordem de importância mensagem, título, urgência, demais informações; paciente e prazo em texto sem chip; sem ícone de carta; avatar de 36 px (2.3.1 itens 1 a 4, 6 e 8; 2.3.8; CA-MSG-004.2; D-MSG-053).
  • v1.16 (05/11/2026) — Paciente e processo como links (cartão e cabeçalho; no lugar do botão “Abrir …”); nome da equipe junto ao autor da última mensagem e das mensagens; cartão com botão sobreposto e links de 44 px (2.3.1 itens 2, 4 e 5; 2.3.5; CA-MSG-009.1, 021.5 e 021.6; D-MSG-054).
  • v1.17 (05/11/2026) — Um só link no cartão e no cabeçalho: o processo, com “{item} de {paciente}” (registro clínico: “data - modelo”), ou o paciente, quando não há processo; “Você (Equipe)” confirmado; novo MSG-TMSG-43 (2.3.1 itens 2, 4 e 5; 2.3.5; CA-MSG-009.1 e 021.5; D-MSG-055).
  • v1.18 (10/11/2026) — Cartão mais leve (D-MSG-056 a 058): sem ícone de tipo; autor em peso médio e mensagem em peso normal, não lida só pela borda; Imediato e Quanto antes só com contorno; prazo só com relógio e data e hora, “Vencida” em vermelho com dica (balão no toque). 2.3.1 itens 1, 2, 4 e 6; 2.3.8; componentes; acessibilidade; MSG-TMSG-06; CA-MSG-002.1, 003.1, 004.1 e novos 022.1 a 022.5. A conversa (cabeçalho e mensagens, que ainda mostram o sino do sistema) fica para a avaliação das outras telas.
  • v1.19 (11/11/2026) — Respostas do solicitante: dica do prazo com o comportamento da dica de 1ª Consulta da Central (D-MSG-059; 2.3.1 item 4; CA-MSG-022.1 a 022.3); destinatário com linha de apoio de equipes e [PROPOSTA] de achar a equipe pela pessoa (D-MSG-060; 2.3.4; CA-MSG-020.7; API de destinatários; MSG-TMSG-44 a 46); prazo para resolução em dois campos, data e horário (D-MSG-061; 2.3.4; CA-MSG-008.2; componentes; acessibilidade; MSG-LMSG-08, 26, 27; MSG-EMSG-05; MSG-LMSG-11 retirado); RN-MSG-012 reescrita.
  • v1.20 (11/11/2026) — Respostas do solicitante: “Inclui {nome}” adotado (D-MSG-063; 2.3.4, CA-MSG-020.7, API de destinatários); prazo com data obrigatória e horário opcional, em 24 h por componente próprio (D-MSG-064; 2.3.4; CA-MSG-008.2; componentes; acessibilidade; MSG-LMSG-27 e 28; MSG-EMSG-05 e 15); “Resolver até” no lugar de “Responder até” (MSG-TMSG-05; 2.3.1; CA-MSG-002.1, 022.1 a 022.3); grau de urgência no formulário do tamanho do chip, com o visual do chip ao marcar (D-MSG-065; 2.3.4; componentes).
  • v1.21 (11/11/2026) — Prazo sem horário: só a data é exibida no cartão, na dica e na conversa; internamente vale até 23:59 da clínica (D-MSG-066; 2.3.4; CA-MSG-008.2 e 022.1; MSG-LMSG-28 reescrita).
  • v1.22 (11/11/2026) — Respostas do solicitante: busca de paciente como a do cabeçalho, com nascimento e CPF na linha, por nome ou CPF (D-MSG-068; 2.3.4, CA-MSG-020.3, 2.8.8, MSG-TMSG-47); categorias dos itens e sem paginação (D-MSG-067); alerta para destinatário que não pode receber vai para o log de sistema (D-MSG-069; EX-MSG-07); resolver e descartar só com Visualizar, sem [PROPOSTA] (D-MSG-070).
  • v1.23 (11/11/2026) — Respostas do solicitante: busca de paciente com o componente completo do cabeçalho, inclusive nome da mãe e data de nascimento, e a mesma lista de resultados (D-MSG-071; 2.3.4, CA-MSG-020.3, 2.8.8; MSG-TMSG-47 reescrita, 48 a 50 novas; as MSG-TMSG-48 a 50 repetem os textos MSG_searchMin, MSG_searchFoot e MSG_searchNone da Central); paciente errado: descartar e enviar outra (D-MSG-072; CA-MSG-020.8); D-MSG-069 confirmada.
  • v1.24 (11/11/2026) — 2.3.9: o campo Paciente deixa de seguir o atraso de 300 ms, a lista sem texto e a busca só por nome da E-MSG-021, e segue a busca do cabeçalho (conserta uma contradição com a D-MSG-071). P-MSG-45 deixada como está (D-MSG-073).
  • v1.25 (11/11/2026) — Detalhes da tela de nova mensagem confirmados (D-MSG-074): E-MSG-020 e 021, data mínima, área de toque do grau e tratamento do prazo sem horário; marcadores [PROPOSTA] retirados.
  • v1.26 (11/11/2026) — Tela Conversa eliminada: a conversa é só o modal, aberto a partir do painel e da lista (D-MSG-075; 2.3.1 item 5; 2.3.5 reescrita: cabeçalho fixo e trilha rolável; EX-MSG-05); endereço da conversa e Voltar do navegador [PROPOSTA, E-MSG-024].
  • v1.27 (11/11/2026) — Resolver e Descartar no cabeçalho do modal, em linha própria, os dois com contorno, e no infinitivo (D-MSG-076; 2.3.5; CA-MSG-005.1 e 021.4; componentes; MSG-BMSG-06 e 07).
  • v1.28 (11/11/2026) — Posição de Resolver e Descartar (ao lado de De e Para) e alinhamento de Responder com a caixa do campo (D-MSG-077; 2.3.5; componentes).
  • v1.29 (11/11/2026) — Resolver e Descartar lado a lado quando há largura e empilhados quando não (D-MSG-078; 2.3.5; componentes).
  • v1.30 (12/11/2026) — Sem mudança de conteúdo (D-MSG-079: sino do cabeçalho fica fora do escopo da Mensageria por ora).
  • v1.31 (12/11/2026) — Ordem com vencidas antes das demais (CA-MSG-001.6; 2.3.1, 2.3.5; D-MSG-084); quem sai da equipe (CA-MSG-007.4; D-MSG-082).
  • v1.32 (12/11/2026) — Tipo Agenda e chaves de processo (D-MSG-085; 2.3.4, 2.8.9, catálogo); filtros, busca e paginação das listas (D-MSG-086; RN-MSG-037; 2.3.3; 2.8.1; US-MSG-11; CA-MSG-023.1 a 023.7; textos MSG-BMSG-17 a 24, MSG-LMSG-29 a 38 e MSG-TMSG-51 a 55); retenção e acesso (D-MSG-087; RN-MSG-038); ordem entre vencidas confirmada (D-MSG-088).
  • v1.33 (12/11/2026) — Período com “Tudo” e “Personalizado” e as demais [PROPOSTA] da lista confirmadas (D-MSG-089; MSG-LMSG-34 e 35, 2.8.1); item de Agenda com busca pela data e tipo abaixo (D-MSG-090; 2.3.9, 2.8.9, CA-MSG-024.5); filtro rápido definido no Design System, seção 15 (D-MSG-091); campos com rótulo flutuante em todo o formulário (D-MSG-092; novo 2.3.10, 2.3.4, 2.7, 2.10, CA-MSG-024.1 a 024.4; MSG-TMSG-56; “Horário” sem “(opcional)” em MSG-LMSG-27).
  • v1.34 (12/11/2026) — Tipo Paciente deixa de ser oferecido no formulário (D-MSG-093; 2.3.4, 2.6, 2.8.9, CA-MSG-019.3, MSG-LMSG-10); estado inicial dos campos pela borda e não pelo fundo, campo desabilitado com fundo cinza, data com o mesmo comportamento dos outros, padrão para qualquer campo, incluindo busca, período e resposta (D-MSG-094; 2.3.10, 2.3.3, 2.3.5, 2.7, 2.10; CA-MSG-024.1, 024.6 e 024.7).
  • v1.35 (12/11/2026) — Versão fechada (aprovada pelo solicitante) para desenvolvimento. O tipo Paciente continua em ProcessoTipo e só não aparece na lista do formulário (D-MSG-095; 2.3.4, 2.6, MSG-LMSG-10); retirada a [PROPOSTA] da v1.34.