# Cenários de Teste — Mensageria

**Funcionalidade:** Mensageria (Comunicação entre Profissionais)
**Versão de referência da especificação:** 01-Definição v1.17 / 02-Especificação v1.17 / 03-Protótipo v1.17 / 04-Mapeamento de BD v1.17 / 05-Registro de Decisões v1.17
**Autor:** Marcos Arao, para uso da equipe de QA do Gemed 2.1
**Massa de dados de referência:** `CargaCMZero.xlsx` (pasta `Central do Médico (Cockpit)/`) traz usuários e as equipes Enfermagem, Farmácia e Onco com seus membros, mas **nenhuma conversa**. As conversas M1 a M10 abaixo são uma **[PROPOSTA]** de massa a ser criada por script (datas relativas à execução) antes dos testes. Tabelas do IpSeguranca (clínica, perfis, direitos) em `Infra-estrutura/CargaSegGlobal.xlsx`; os direitos Visualizar e Enviar ainda não existem na carga (04-Mapeamento, 4.6).
**Data-base dos testes:** quinta, 22/10/2026, às 12:00 no fuso da clínica (`America/Sao_Paulo`, GMT−03:00). Os prazos da massa são relativos a esse momento.

---

## 1. Escopo

Cobre a homologação funcional da Mensageria: painel de Mensagens da Central, tela de Mensagens (abas Abertas e Finalizadas), cartão de conversa, nova mensagem, conversa (página e modal), responder, resolver e descartar, envio a equipe e a si mesmo, alertas do sistema, ordem, "vencida", "não lida", fuso e idioma, permissões, auditoria, acessibilidade e os contratos dos endpoints.

Fora de escopo:

- Cadastro de equipes e de seus membros (outro módulo); aqui são pré-condição.
- Geração dos alertas pelos módulos de origem (Assistencial, Estoque, Agendamento): aqui o alerta é criado pela interface de publicação (CT-MSG-191 a 198 **API**). A regra que dispara cada alerta é testada em cada módulo.
- Conteúdo das telas de destino do atalho (prontuário, prescrição, consulta): aqui só se confere que o atalho leva ao módulo certo.
- Alterações da Central do Médico (próxima versão): ver 05, P-MSG-09. Os casos CT-MSG-01 a 21 do Cenários da Central continuam valendo para o painel atual da Central até essa versão.
- Componente de data e hora (P-MSG-04): em aberto. O padrão de botões está decidido (Design System, seção 12; CT-MSG-266).
- Textos en-US e es-419: o catálogo existe (02, 2.9); a troca de idioma da interface é testada em CT-MSG-205 e 206.

Casos marcados **(API)** são executados direto no endpoint. Casos **(BD)** exigem alterar ou conferir o banco; restaurar o valor ao final.

**Ordem de execução e massa:** vários casos alteram as conversas (resolver, descartar, responder, ler). Recriar a massa M1 a M10 antes de cada seção, e antes de qualquer caso cujo "Estado de CT-MSG-nnn" dependa de uma conversa ainda aberta.

### Usuários de teste

| Usuário | IdUsuario | Papel no teste | Equipes |
| --- | --- | --- | --- |
| Craig Evans | 1 | Médico logado na maior parte dos casos | Onco |
| Gilliard Onório Santos | 4 | Segundo médico | Onco |
| Claire Vance | 5 | Enfermagem | Enfermagem |
| Ingrid Jorgensen | 6 | Farmácia | Farmácia |
| Mateo Perez | 7 | Enfermagem | Enfermagem |
| Li Wei | 8 | Farmácia | Farmácia |

### Massa proposta de conversas [PROPOSTA]

| ID | Remetente → Destino | Assunto | Paciente / processo | Estado e momento |
| --- | --- | --- | --- | --- |
| M1 | Ingrid → Craig | Receita de antiemético para viagem | Roberto N. Alves (19) / Prontuário | Enviada há 40 min; **não lida** por Craig; prazo hoje 18:00 |
| M2 | Claire → equipe Farmácia | Carboplatina em falta | Beatriz A. Lima (20) | Lida por Li Wei há 2 h; Ingrid não leu; sem prazo |
| M3 | Sistema (Assistencial) → Craig | Peso divergente na prescrição | Marcelo T. Pinto (22) / Prescrição "FOLFOX - C1D15" | **Não lida**; prazo venceu há 2 h (10:00) |
| M4 | Craig → Craig | Revisar protocolo de neutropenia | sem | Lida; prazo amanhã 09:00 |
| M5 | Mateo → Craig | Paciente da sala 2 pronto para infusão | Maria Silva (4) / Consulta | Craig respondeu há 1 h (**Respondida**); sem prazo |
| M6 | Ingrid → Craig | Atraso na manipulação | sem | **Resolvida** por Craig ontem 16:10 |
| M7 | Claire → Craig | Recado de paciente | sem | **Descartada** por Claire (remetente) ontem 09:00 |
| M8 | Craig → equipe Onco | Reunião de quinta | sem | Enviada há 3 h; Gilliard não leu; Craig é membro |
| M9 | Sistema (Estoque) → Claire | Medicamento no limite mínimo | sem | Não lida; sem prazo |
| M10 | 25 conversas abertas de Craig (geradas) | Mensagem de teste n | sem | Para paginação (CT-MSG-115) |
| M12 | Claire → Gilliard | Sangramento na sala 3 | sem | **Imediato (`stat`)**; lida por Gilliard; enviada hoje às 07:00 |
| M13 | Ingrid → Gilliard | Dúvida de diluição | sem | **Rotina (`routine`)**; lida por Gilliard; enviada hoje às 11:50 |
| M14 | Mateo → Gilliard | Ajustar agenda de sexta | sem | **Sem grau**; lida por Gilliard; enviada hoje às 11:55 |
| M15 | Sistema (Assistencial) → Gilliard | Resultado de exame crítico sem análise | Roberto N. Alves (19) / Prontuário | **Quanto antes (`asap`)**, definido pelo módulo de origem; **não lida**; publicada hoje às 08:00 |
| M16 | Ingrid → Craig | Conferir laudo | Roberto N. Alves (19) / Documento "Laudo de hemograma" | Usar só em CT-MSG-327 a 330; fora das contagens dos demais casos |
| M17 | Mateo → Craig | Rever sinais vitais | Maria Silva (4) / Registro clínico "21/10/2026 · Sinais vitais · Dr. Carlos" | Usar só em CT-MSG-327 a 330; fora das contagens dos demais casos |
| M18 | Claire → equipe Farmácia | Carboplatina: lote chegou | Beatriz A. Lima (20) | Li Wei (membro) respondeu há 20 min; usar só em CT-MSG-329; fora das contagens dos demais casos |

M3: mensagem publicada às 09:30 (a chave de ordem é o prazo, 10:00). M10 é criada só para o caso de paginação (CT-MSG-115) e não faz parte da massa dos demais casos.
M12 a M15 (v1.3; graus renomeados na v1.6) são de Gilliard (usuário 4) e cobrem o grau de urgência sem alterar o painel de Craig em CT-MSG-101: M1 a M10 não têm grau. Para Gilliard, abertas: M15 e M8 (não lidas) e M12, M13 e M14 (lidas). M8 não tem grau.

---

## 2. Painel de Mensagens (Central do Médico)

| ID | Pré-condição | Passos | Resultado Esperado | Dados de Teste | RN/CA |
|---|---|---|---|---|---|
| CT-MSG-101 | Craig logado, Central aberta, desktop, 12:00 | Observar o painel de Mensagens | Título "Mensagens" com contagem **5** (M1, M3, M4, M5, M8). Os 5 cartões, na ordem M1, M3, M4, M5, M8 (ver detalhamento), sem link "Ver todas as mensagens"; se não cabem na altura do painel, ele rola | M1, M3, M4, M5, M8 | RN-MSG-001, 002; CA-MSG-001.1, 001.3 |
| CT-MSG-102 | Estado de CT-MSG-101 | Conferir que M6 e M7 não aparecem | Resolvida e descartada não aparecem no painel | M6, M7 | RN-MSG-001; CA-MSG-001.5 |
| CT-MSG-103 | Craig sem conversas abertas (resolver todas via BD) | Abrir a Central | "Nenhuma conversa em aberto." (MSG-TMSG-02), sem link "Ver todas" | — | CA-MSG-001.4 |
| CT-MSG-104 | Estado de CT-MSG-101 | Clicar no cartão de M1 | Abre o modal da conversa; M1 passa a lida (some a borda e o peso médio da mensagem) e o painel passa a M3, M4, M1, M5 (M1 sai do grupo de não lidas); a contagem não muda | M1 | RN-MSG-017; CA-MSG-003.1 |
| CT-MSG-105 | Estado de CT-MSG-101 | Abrir M4 (modal) e clicar em "Resolvido" | Confirmação com título "Resolver conversa?", foco em "Cancelar". Cancelar mantém. Confirmar: toast "Conversa resolvida."; o cartão sai; contagem passa a 4 | M4 | RN-MSG-008; CA-MSG-005.1 |
| CT-MSG-106 | Estado de CT-MSG-101 | Criar por BD uma conversa nova de Ingrid para Craig (fora da massa M1 a M10) e aguardar 1 minuto | O novo cartão aparece no painel sem recarregar a tela | — | 02 2.3.2 |
| CT-MSG-107 | `GET /conversations` simulando falha (500) | Abrir a Central | Estado de erro com "Não foi possível carregar as mensagens. Tente novamente." e botão "Tentar novamente"; depois do botão com a API restabelecida, o painel carrega | — | EX-MSG-01 |
| CT-MSG-108 | Painel carregado; derrubar a conexão | Esperar a próxima atualização | Dados permanecem; faixa de sem conexão; some quando a conexão volta | — | EX-MSG-02 |

### Detalhamento — CT-MSG-101 (ordem)

Grupo 1, **não lidas** (da mais nova para a mais antiga pela chave "maior entre última mensagem e prazo"): M1 (mensagem às 11:20, prazo 18:00: chave 18:00) e M3 (mensagem às 09:30, prazo 10:00: chave 10:00). M1 vem antes de M3.
Grupo 2, **lidas pendentes**: M4 (chave = prazo amanhã 09:00), M5 (chave = resposta há 1 h, 11:00), M8 (chave = 09:00 de hoje). Ordem: M4, M5, M8.
Painel (5 cartões): **M1, M3, M4, M5, M8**. M1 a M10 não têm grau de urgência, então a ordem de RN-MSG-002 v1.3 coincide com a da v1.2 (o grau é coberto em CT-MSG-278 e 279). Conferir a ordem real contra a chave; se divergir, o defeito é da implementação, não da massa.

---

## 3. Tela de Mensagens, abas e ordem

| ID | Pré-condição | Passos | Resultado Esperado | Dados de Teste | RN/CA |
|---|---|---|---|---|---|
| CT-MSG-111 | Craig logado | Abrir "Mensagens" pelo menu | Linha de fuso "Fuso horário: Horário Padrão de Brasília (GMT−03:00)"; botão "Nova mensagem"; abas "Abertas (5)" e "Finalizadas (2)" | — | RN-MSG-011; CA-MSG-002.4 |
| CT-MSG-112 | Estado de CT-MSG-111 | Observar "Abertas" | Ordem completa: M1, M3 (não lidas); M4, M5, M8 (lidas pendentes). Cartões com a mesma estrutura do painel | M1, M3, M4, M5, M8 | RN-MSG-002, 011; CA-MSG-001.1 |
| CT-MSG-113 | Estado de CT-MSG-111 | Abrir "Finalizadas" | M6 (Resolvida) e M7 (Descartada), com chip de estado; sem botão "Resolvido"; ordem pela data de finalização, a mais nova primeiro **[PROPOSTA, P-MSG-11]** | M6, M7 | RN-MSG-011; CA-MSG-001.5 |
| CT-MSG-114 | Estado de CT-MSG-111 | Clicar em um cartão | Abre a **página** da conversa (não o modal) | M5 | 02 2.3.3 |
| CT-MSG-115 | Craig com M10 (25 abertas) | Rolar até o fim da aba "Abertas" | Carrega 20; ao rolar, carrega as 5 seguintes **[PROPOSTA]**; sem duplicados | M10 | 02 2.3.3 |
| CT-MSG-116 | Usuário sem conversas finalizadas | Abrir "Finalizadas" | "Nenhuma conversa finalizada." (MSG-TMSG-03) | — | — |
| CT-MSG-117 | Estado de CT-MSG-111 | Comparar M4 (lida, prazo amanhã 09:00) com M8 (lida, última mensagem hoje 09:00, sem prazo) | M4 vem antes de M8: a chave de M4 é o prazo (amanhã), mais recente que a mensagem de M8 | M4, M8 | RN-MSG-002; CA-MSG-001.2 |
| CT-MSG-118 | Estado de CT-MSG-111, desktop e celular | Comparar as colunas | Coluna única nos dois; nenhum cartão com rolagem horizontal | — | 02 2.1 |

---

## 4. Cartão de conversa

| ID | Pré-condição | Passos | Resultado Esperado | Dados de Teste | RN/CA |
|---|---|---|---|---|---|
| CT-MSG-121 | Estado de CT-MSG-112 | Conferir M1 | Ícone de pessoa à esquerda; borda lateral de 3 px em `secondary-dark`; linha 1: "Ingrid Jorgensen: …" (última mensagem, até 2 linhas, peso médio por ser não lida) e o horário relativo: "Há 40 min" (enviada às 11:20, data-base 12:00); linha 2: "Receita de antiemético para viagem" (assunto, menor); linha 3: nome do paciente (nome social, se houver; senão o nome legal) da massa: Roberto, e "Responder até 22/10 18:00", ambos em texto cinza com ícone, sem chip; sem botão "Resolvido" (D-MSG-047, 053) | M1 | RN-MSG-017; CA-MSG-003.1, 004.2 |
| CT-MSG-122 | Estado de CT-MSG-112 | Conferir M3 | Ícone de **sino**; a linha 1 começa com "Sistema:"; horário "Há 2 h" (mensagem das 09:30); "Vencida desde 22/10 10:00" (texto vermelho com ícone, sem chip); paciente em texto cinza | M3 | RN-MSG-003, 014; CA-MSG-002.2, 004.1 |
| CT-MSG-123 | Estado de CT-MSG-112 | Conferir M5 | Linha 2 "Você: …" (última mensagem é de Craig); sem borda de não lida | M5 | CA-MSG-004.2 |
| CT-MSG-124 | Estado de CT-MSG-112 | Conferir M4 | Sem paciente; prazo "Responder até 23/10 09:00" em texto cinza; linha 1 "Você: …" | M4 | RN-MSG-007 |
| CT-MSG-125 | Estado de CT-MSG-112 | Conferir M2 como Ingrid | Linha 2 "Claire Vance: …"; não lida para Ingrid, lida para Li Wei | M2 | RN-MSG-017; CA-MSG-003.2 |
| CT-MSG-126 **(BD)** | M3 aberta | Alterar `PrazoEmUtc` de M3 para daqui a 1 hora; recarregar | O chip passa a "Responder até {dt}" (sem vermelho); restaurar | M3 | RN-MSG-003 |
| CT-MSG-127 | M3 vencida | Resolver M3; abrir "Finalizadas" | O chip de vencida some; aparece "Resolvida" | M3 | RN-MSG-003; CA-MSG-002.1 |
| CT-MSG-128 | Texto de assunto com 200 caracteres | Ver o cartão no celular (360 px) | Assunto truncado com reticências em uma linha; a segunda linha também; nenhum corte de layout | — | 02 2.3.1 |
| CT-MSG-129 | Tema escuro | Conferir todos os cartões acima | Só tokens do Design System; contraste de texto ≥ 4,5:1; borda de não lida visível mas discreta | — | CA-MSG-015.1 |
| CT-MSG-130 | Teclado | Percorrer com Tab a lista | Foco no cartão (anel de foco) e depois no cartão seguinte, sem outro ponto de foco dentro do cartão; Enter abre | — | 02 2.10 |

---

## 5. Nova mensagem

| ID | Pré-condição | Passos | Resultado Esperado | Dados de Teste | RN/CA |
|---|---|---|---|---|---|
| CT-MSG-131 | Craig logado | Abrir "Nova mensagem" e a lista de destinatários | Grupo "Pessoas" com Craig marcado "(você)", Gilliard, Claire, Ingrid, Mateo, Li Wei; grupo "Equipes" com Enfermagem · 2 membros, Farmácia · 2 membros, Onco · 2 membros | — | RN-MSG-007; CA-MSG-007.1 |
| CT-MSG-132 | Formulário vazio | Tocar em "Enviar" | Erros "Informe o destinatário.", "Informe o assunto." e "Escreva a mensagem."; nada é enviado | — | CA-MSG-008.1 |
| CT-MSG-133 | Formulário preenchido | Enviar a Ingrid, assunto "Teste", mensagem "Olá", sem paciente e sem prazo | Toast "Mensagem enviada."; volta à lista; a conversa aparece para Craig em "Abertas" **lida** e para Ingrid **não lida** | — | CA-MSG-003.3 |
| CT-MSG-134 | Formulário aberto | Enviar a si mesmo (Craig) | Conversa criada com Craig como remetente e destinatário; aparece em "Abertas" e lida | — | RN-MSG-007; CA-MSG-007.1 |
| CT-MSG-135 | Formulário aberto | Informar prazo 22/10/2026 10:00 (passado) | Erro "O prazo não pode ser anterior ao momento do envio."; não envia | — | RN-MSG-004; CA-MSG-002.3 |
| CT-MSG-136 | Formulário aberto | Informar só a data do prazo (22/10/2026) | Erro "Informe data e hora completas (dd/mm/aaaa hh:mm)." | — | RN-MSG-012; CA-MSG-008.2 |
| CT-MSG-137 | Idioma da clínica en-US | Abrir o campo de prazo | Máscara "mm/dd/yyyy hh:mm", 24 h; 10/22/2026 18:00 aceito | — | RN-MSG-012, 013 |
| CT-MSG-138 | Formulário aberto, sem paciente | Observar o campo de tipo de processo; escolher um paciente | Desabilitado sem paciente; depois do paciente, habilita com Paciente, Prescrição, Documento e Registro clínico (D-MSG-036) | — | CA-MSG-008.3, 019.1 |
| CT-MSG-139 | Formulário com paciente e tipo Paciente | Enviar; abrir a conversa | Chip do paciente e atalho "Abrir prontuário"; o clique leva ao prontuário | — | RN-MSG-020, 021; CA-MSG-009.1, 019.3 |
| CT-MSG-140 | Assunto com 201 caracteres | Digitar | O campo limita a 200; contador visível | — | 02 2.6 |
| CT-MSG-141 | Mensagem com 2001 caracteres | Colar | Limita a 2000; contador "2000/2000" (D-MSG-030) | — | CA-MSG-018.4; 02 2.6 |
| CT-MSG-142 | Falha de rede durante o envio | Enviar e restabelecer a rede; repetir "Enviar" | Mensagem de erro "Não foi possível enviar. Tente novamente."; o formulário continua preenchido; no segundo envio, **uma só** conversa é criada | — | EX-MSG-03 |
| CT-MSG-143 | Formulário aberto | Cancelar com campos preenchidos | Volta à lista sem enviar | — | — |
| CT-MSG-144 | Formulário no celular | Observar rótulos | Rótulo fixo acima de cada campo (sem rótulo flutuante); botão Voltar à esquerda da barra | — | 02 2.3.4 |

---

## 6. Conversa (página e modal), resposta

| ID | Pré-condição | Passos | Resultado Esperado | Dados de Teste | RN/CA |
|---|---|---|---|---|---|
| CT-MSG-151 | Craig abre M1 | Observar o cabeçalho | Assunto; "De: Ingrid Jorgensen"; "Para: Craig Evans (você)"; chips de paciente e prazo; atalho "Abrir prontuário" | M1 | RN-MSG-006; CA-MSG-009.1 |
| CT-MSG-152 | Craig abre M8 | Observar "Para" | "Equipe Onco · 2 membros" | M8 | RN-MSG-006, 015 |
| CT-MSG-153 | Craig abre M5 | Observar as mensagens | Ordem cronológica; mensagem de Craig à direita; autor, data e hora em cada uma | M5 | RN-MSG-019 |
| CT-MSG-154 | Craig abre M1 | Responder "Receita emitida" | Toast "Resposta enviada."; a mensagem aparece à direita; status passa a Respondida; remetente (Ingrid) recebe a conversa como não lida | M1 | RN-MSG-019; CA-MSG-003.3 |
| CT-MSG-155 | Ingrid abre M1 após CT-MSG-154 | Responder de volta | Permitido (quem enviou também responde); a conversa continua na mesma thread, sem tipo "réplica" | M1 | RN-MSG-019 |
| CT-MSG-156 | Craig abre M3 (alerta) | Observar o rodapé | Sem campo de resposta; aviso "Alertas do sistema não recebem resposta."; botões Resolvido e Descartado presentes | M3 | RN-MSG-010; CA-MSG-006.1 |
| CT-MSG-157 **(API)** | Token de Craig | `POST /conversations/{M3}/reply` | 409 | M3 | CA-MSG-006.1 |
| CT-MSG-158 | Craig abre M6 (finalizada) | Observar | Linha "Resolvida por Você em 21/10 16:10"; sem campo de resposta e sem botões; aviso "Esta conversa foi finalizada. Não é possível responder." | M6 | RN-MSG-009; CA-MSG-005.4 |
| CT-MSG-159 | Craig abre M1 não lida | Observar após abrir | M1 deixa de ser não lida (a borda e o peso médio da mensagem somem) em painel e lista; para Ingrid o estado de leitura é independente | M1 | RN-MSG-017 |
| CT-MSG-160 | Craig no modal do painel | Fechar com Esc, com "Fechar" e tocando fora | Fecha nos três modos; foco volta ao cartão de origem | — | 02 2.10 |
| CT-MSG-161 | Craig digita resposta em M8; Gilliard resolve M8 | Craig toca "Responder" | 409; a tela recarrega mostrando "Resolvida por Gilliard…"; o texto digitado permanece visível | M8 | EX-MSG-04 |
| CT-MSG-162 | Craig abre conversa de outro usuário (id de M-qualquer de Ingrid→Claire) pelo link | Abrir | Tela "Conversa não encontrada." e volta à lista | — | EX-MSG-05 |
| CT-MSG-163 | Craig na conversa M2 (não participante) via API | `GET /conversations/{M2}` | 404 | M2 | EX-MSG-05; NGS1.03.01 |
| CT-MSG-164 | Craig tenta editar texto enviado | Procurar ação de editar ou excluir | Não existe; `PUT`/`DELETE` em qualquer rota de mensagem retornam 404 (a rota não existe) e `PUT`/`DELETE` em `/conversations/{id}` retornam 405 | M5 | RN-MSG-022; CA-MSG-012.1; EX-MSG-09 |
| CT-MSG-165 | Conversa M8 como Gilliard, que responde | Ver a autoria | "Gilliard Onório Santos (Onco)" em cada resposta | M8 | RN-MSG-030; CA-MSG-014.1 |
| CT-MSG-166 | Claire (fora da Onco) responde M8 (adicionada como destinatária por BD) | Ver a autoria | Só "Claire Vance", sem equipe | — | RN-MSG-030 |

---

## 7. Resolver e descartar

| ID | Pré-condição | Passos | Resultado Esperado | Dados de Teste | RN/CA |
|---|---|---|---|---|---|
| CT-MSG-171 | Craig abre M5 | Tocar "Resolvido"; ler a confirmação; confirmar | Diálogo "Resolver conversa?" com corpo "A conversa será marcada como resolvida para todos os destinatários."; botões "Cancelar" (foco inicial) e "Resolver". Confirmar: toast "Conversa resolvida."; M5 vai para "Finalizadas" | M5 | RN-MSG-008; CA-MSG-005.1 |
| CT-MSG-172 | Craig abre M1 | Tocar "Descartado"; confirmar | Diálogo "Descartar conversa?"; confirmar: "Conversa descartada."; M1 em "Finalizadas" como Descartada | M1 | RN-MSG-008 |
| CT-MSG-173 | Ingrid (remetente) abre M1 | Resolver | Permitido; Craig vê M1 finalizada, "Resolvida por Ingrid Jorgensen em …" | M1 | CA-MSG-005.2 |
| CT-MSG-174 | M8 (equipe Onco): Gilliard resolve | Craig abre "Abertas" e "Finalizadas" | M8 sai de "Abertas" de Craig e aparece em "Finalizadas" com "Resolvida por Gilliard Onório Santos" | M8 | CA-MSG-005.3 |
| CT-MSG-175 | M8 finalizada | Tentar resolver de novo, via API | 409 com quem finalizou e quando | M8 | CA-MSG-005.4 |
| CT-MSG-176 | M1 sem respostas | Resolver sem responder | Nenhuma mensagem nova criada (a thread continua com 1 mensagem); cabeçalho mostra a linha de finalização | M1 | RN-MSG-009; CA-MSG-005.5 |
| CT-MSG-177 | Dois usuários resolvem M2 no mesmo segundo | Ingrid e Li Wei | Um recebe sucesso, o outro 409; a conversa tem uma só ação `Resolve` | M2 | EX-MSG-04 |
| CT-MSG-178 | Alerta M9 como Claire | Resolver M9 | Permitido; registra ciência; "Finalizadas" mostra "Resolvida" | M9 | RN-MSG-028 |
| CT-MSG-179 | Confirmação aberta | Esc | Cancela sem alterar | — | 02 2.10 |
| CT-MSG-180 | Usuário com Visualizar e sem Enviar | Resolver uma conversa | Permitido **[PROPOSTA, P-MSG-12]** | — | CA-MSG-010.2 |

---

## 8. Equipe e envio a si mesmo

| ID | Pré-condição | Passos | Resultado Esperado | Dados de Teste | RN/CA |
|---|---|---|---|---|---|
| CT-MSG-181 | Craig (Onco) envia à equipe Onco | Enviar; conferir como Gilliard e como Craig | Ambos recebem; Craig também (remetente é membro); a conversa de Craig aparece lida | M8 | RN-MSG-015; CA-MSG-007.2 |
| CT-MSG-182 | Claire (Enfermagem) envia à equipe Onco | Enviar | Craig e Gilliard recebem; Claire não é destinatária, mas é remetente e acompanha a conversa | — | RN-MSG-015, 018 |
| CT-MSG-183 **(BD)** | Equipe Onco com os membros 1 e 4 | Adicionar o usuário 5 à Onco **depois** de M8; abrir como Claire | Claire **não** vê M8 | M8 | CA-MSG-007.3 |
| CT-MSG-184 **(BD)** | Equipe Farmácia | Remover (`RemovidoEmUtc`) o usuário 8; enviar nova mensagem à Farmácia | Li Wei não recebe a nova; M2 continua listada para ele | M2 | RN-MSG-015 |
| CT-MSG-185 **(BD)** | Equipe inativa (`Ativa = 0`) | Tentar enviar à equipe | 422; "Este destinatário não pode receber mensagens agora." | — | EX-MSG-07 |
| CT-MSG-186 | Craig lê M8; Gilliard não | Conferir a leitura de cada um | M8 é lida para Craig e não lida para Gilliard | M8 | CA-MSG-003.2 |
| CT-MSG-187 | Craig envia a si mesmo (CT-MSG-134) | Resolver o lembrete | Sai de "Abertas" e vai para "Finalizadas" | — | RN-MSG-007 |
| CT-MSG-188 | Lista de equipes | Conferir o "(n membros)" | Conta só membros ativos | — | RN-MSG-006 |

---

## 9. Alertas do sistema

| ID | Pré-condição | Passos | Resultado Esperado | Dados de Teste | RN/CA |
|---|---|---|---|---|---|
| CT-MSG-191 **(API)** | Interface de publicação disponível | `PublishAlert` para Craig, módulo Assistencial, chave "RX-001", paciente 22, processo Prescrição, prazo hoje 15:00 | Conversa criada com `OrigemTipo = System`, mensagem inicial sem autor; aparece para Craig como não lida com sino e "Sistema:" | — | RN-MSG-028; CA-MSG-004.1 |
| CT-MSG-192 **(API)** | Após CT-MSG-191 | Repetir `PublishAlert` com a mesma chave | Nenhuma nova conversa; devolve a existente | — | RN-MSG-029; CA-MSG-012.2 |
| CT-MSG-193 **(API)** | Alerta anterior resolvido | `PublishAlert` com `previousConversationId` | Nova conversa ligada à anterior; a anterior continua finalizada | — | RN-MSG-016; CA-MSG-013.1 |
| CT-MSG-194 **(API)** | Alerta aberto | Acrescentar atualização do sistema (`AppendAlertUpdate`) | A mensagem (tipo gravado `Response`, autor nulo, sequência maior que 1) aparece rotulada "Atualização do sistema" **[PROPOSTA]**; a conversa volta a não lida para o destinatário | — | RN-MSG-019 |
| CT-MSG-195 | Alerta sem paciente (M9) | Ver o cartão | Sem paciente na linha de contexto | M9 | RN-MSG-020 |
| CT-MSG-196 | Alerta com paciente e processo (M3) | Abrir; clicar "Abrir prescrição" | Leva à prescrição; se Craig não tiver acesso, o módulo de destino recusa | M3 | RN-MSG-021; CA-MSG-009.1 |
| CT-MSG-197 | Alerta vencido (M3) | Conferir | "Vencida"; some ao resolver | M3 | CA-MSG-002.2 |
| CT-MSG-198 **(API)** | Chamada ao endpoint de criação como usuário comum com `OrigemTipo=System` | Enviar `POST /conversations` com campo de origem do sistema | Campo ignorado ou 400; o usuário comum nunca cria conversa de sistema | — | NGS1.03.09 |

---

## 10. Fuso, idioma e textos

| ID | Pré-condição | Passos | Resultado Esperado | Dados de Teste | RN/CA |
|---|---|---|---|---|---|
| CT-MSG-201 | Aparelho no fuso de São Paulo | Abrir a lista | Linha do fuso discreta | — | RN-MSG-005 |
| CT-MSG-202 | Aparelho em Londres | Abrir a lista | Linha do fuso destacada com "— diferente do fuso deste aparelho"; horários continuam os da clínica | M1 | CA-MSG-002.4 |
| CT-MSG-203 | Aparelho em Londres, 12:00 de São Paulo | Conferir "vencida" | Calculada no horário do servidor da clínica, não do aparelho | M3 | RN-MSG-003, 005 |
| CT-MSG-204 **(API)** | Token de Craig | `GET /conversations?tab=open` | `timeZone = "America/Sao_Paulo"`; datas em UTC; `serverNow` presente | — | DT-001 |
| CT-MSG-205 | Idioma da clínica es-419 | Percorrer painel, lista, formulário, conversa e confirmações | Todos os textos do catálogo em espanhol; nenhum texto em português ou inglês | — | RN-MSG-013; CA-MSG-011.1 |
| CT-MSG-206 | Idioma en-US | Idem | Todos em inglês; data do prazo "mm/dd/yyyy hh:mm" | — | RN-MSG-013 |
| CT-MSG-207 | Interface em pt-BR | Provocar cada mensagem do catálogo (02, 2.9) | O texto bate exatamente com o catálogo; nenhum termo técnico ou código HTTP visível | — | SBIS ECF.17.19 |
| CT-MSG-265 | Clínica com idioma pt-BR | Percorrer painel, lista, formulário, conversa, confirmações, erros e a linha do fuso, nos dois temas | Todos os textos em português do Brasil; nenhum código (`MSG-TMSG-nn`, nome de processo) nem texto em outro idioma | — | ECF.17.18, 17.19; D-MSG-019 |

---

## 11. Permissões e auditoria

| ID | Pré-condição | Passos | Resultado Esperado | Dados de Teste | RN/CA |
|---|---|---|---|---|---|
| CT-MSG-211 | Usuário sem o direito Visualizar | Abrir a Central e o menu | Sem painel de Mensagens e sem item "Mensagens" | — | RN-MSG-024; CA-MSG-010.1 |
| CT-MSG-212 **(API)** | Mesmo usuário | Chamar os endpoints de conversa | 403 em todos | — | CA-MSG-010.1 |
| CT-MSG-213 | Usuário com Visualizar e sem Enviar | Abrir a lista e uma conversa | Sem botão "Nova mensagem" e sem campo de resposta | — | CA-MSG-010.2 |
| CT-MSG-214 **(API)** | Mesmo usuário | `POST /conversations` e `/reply` | 403 | — | CA-MSG-010.2 |
| CT-MSG-215 | Destinatários possíveis | Conferir a lista | Só usuários com direito Visualizar; usuário sem o direito não aparece | — | RN-MSG-024 |
| CT-MSG-216 **(BD)** | Auditoria implantada | Enviar, ler, responder, resolver e descartar uma conversa | Um evento de auditoria por ação, com usuário, data e hora, identificador da conversa e tipo da ação; **sem** conteúdo da mensagem e **sem** nome ou identificação do paciente | — | RN-MSG-023; CA-MSG-010.3; NGS1.07.03, 07.06 |
| CT-MSG-217 **(BD)** | Alerta publicado | Conferir o evento de auditoria | Origem "sistema" e o módulo gerador | — | RN-MSG-023; NGS1.07.03 |
| CT-MSG-218 **(BD)** | Auditoria implantada | Conferir o endereço de origem | **Não executável** enquanto a lacuna L-01 estiver aberta (04, 4.5) | — | NGS1.07.05 |
| CT-MSG-219 **(BD)** | Banco de teste | Tentar excluir fisicamente uma `Conversa` com mensagens | **Não executável** com a decisão L-02 em aberto; depois dela, a exclusão deve ser impedida ou não apagar a trilha | — | NGS1.07.02 |
| CT-MSG-220 | Cliente de uma clínica | Tentar enviar a usuário sem acesso à clínica da conversa (API) **[PROPOSTA, P-MSG-29]** | 422; nenhuma conversa criada | — | RN-MSG-025 |
| CT-MSG-262 | Cliente de três clínicas A, B e C; o Dr. 9 atende A e B e tem uma conversa aberta em cada uma (massa de CT-CONS-19 e CT-MSG-22 da Central) **[PROPOSTA]** | Dr. 9 logado na clínica A; abrir o painel e a lista; responder a conversa de B | As conversas de A e de B aparecem; a de C não; cada cartão mostra a clínica (ícone `building-2`, nome curto, 12 px); a resposta fica gravada na clínica B | — | RN-MSG-025; DT-013; D-CM-064 |
| CT-MSG-263 | Cliente de uma só clínica; Dr. 11 com uma conversa aberta | Abrir o painel | O cartão não mostra a linha da clínica | — | RN-MSG-025; D-CM-066 |
| CT-MSG-264 **(API)** | Enfermeira com acesso às clínicas A e B, logada em A; conversa aberta endereçada a ela em B | Abrir a lista; depois `GET /conversations/{id}` da conversa de B | A conversa de B não aparece na lista; a chamada devolve 404 | — | RN-MSG-025; DT-013 |

---

## 12. Contrato dos endpoints

| ID | Pré-condição | Passos | Resultado Esperado | Dados de Teste | RN/CA |
|---|---|---|---|---|---|
| CT-MSG-231 **(API)** | Token de Craig | `GET /conversations?tab=open` | 200; `counts` = `{open: 5, closed: 2}`; `items` na ordem de CT-MSG-112; `unread` verdadeiro só em M1 e M3; `overdue` verdadeiro só em M3 | M1–M8 | 02 2.8.1 |
| CT-MSG-232 **(API)** | Token de Craig | `GET /conversations?tab=closed` | M6, M7 com `closedBy` e `closedAt` | M6, M7 | 02 2.8.1 |
| CT-MSG-233 **(API)** | Token de Craig | `GET /conversations?tab=invalid`; `limit=0` | 400 | — | 02 2.8.1 |
| CT-MSG-234 **(API)** | Token de Craig | `GET /conversations/{M5}` | 200 com `messages` em ordem de `sequence`; `canReply = true`; `canClose = true` | M5 | 02 2.8.2 |
| CT-MSG-235 **(API)** | Token de Craig | `GET /conversations/{M6}` | `canReply = false`; `canClose = false` | M6 | 02 2.8.2 |
| CT-MSG-236 **(API)** | Token de Craig | `POST /conversations` com `deadline` no passado | 400 | — | CA-MSG-002.3 |
| CT-MSG-237 **(API)** | Token de Craig | `POST /conversations` com destinatário inexistente | 422 | — | EX-MSG-07 |
| CT-MSG-238 **(API)** | Token de Craig | `POST /conversations` com `Idempotency-Key` repetida e corpo igual; depois com a mesma chave e corpo diferente | Nas duas repetições: 200 com o `id` da conversa já criada; no segundo caso o texto novo é ignorado (opção B, sem comparar o conteúdo); uma só conversa existe | — | D-MSG-020; E-MSG-005 |
| CT-MSG-239 **(API)** | Token de Craig | `POST /conversations/{M1}/read` duas vezes | 204 nas duas; a leitura não retrocede | M1 | 02 2.8.4 |
| CT-MSG-240 **(API)** | Token de Craig | `PATCH /conversations/{M5}/resolve` e `/discard` em M5 já resolvida | 204 na 1ª; 409 na 2ª | M5 | 02 2.8.6 |
| CT-MSG-241 **(API)** | Token de Craig | `GET /conversations/recipients` | `people` com Craig `isSelf = true`; `teams` com `memberCount` | — | 02 2.8.7 |
| CT-MSG-242 **(API)** | Sem token | Todos os endpoints | 401 | — | NGS1.03.01 |
| CT-MSG-243 **(API)** | Token de Craig | `POST /conversations` com `content` de 4001 caracteres | 400 **[PROPOSTA]** | — | 02 2.6 |
| CT-MSG-244 **(API)** | Token de Craig | `GET /conversations/{id}` de conversa de outra clínica | 404 | — | RN-MSG-025 |
| CT-MSG-267 **(API)** | Banco com o `CHECK` de `Mensagem.Tipo` já alterado para só `Response` **[a aplicar]** | Enviar uma conversa; responder; acrescentar atualização de alerta; consultar `mensageria.Mensagem` | Todas as linhas têm `Tipo = 'Response'`; a mensagem inicial tem `Sequencia` = 1; nenhuma gravação falha | — | 04, 4.1 e L-08 |

| CT-MSG-245 | Usuário sem o direito Visualizar | Abrir o endereço da tela de Mensagens | Tela de acesso negado padrão do sistema | — | EX-MSG-06 |
| CT-MSG-246 **(API)** | Token de Craig | `POST /conversations` com paciente 99999 inexistente; com processo `Prescricao` sem paciente | 422 nos dois; formulário correspondente mostra "Paciente ou processo inválido." | — | EX-MSG-08 |
| CT-MSG-247 **(BD)** | Usuário 8 inativado | Enviar a Li Wei | 422; "Este destinatário não pode receber mensagens agora." | — | EX-MSG-07 |
| CT-MSG-248 **(BD)** | Equipe sem nenhum membro ativo | Enviar à equipe | 422 com a mesma mensagem | — | EX-MSG-07 |
| CT-MSG-249 | Craig envia a Ingrid; Ingrid ainda não abriu | Conferir o cartão como Craig; Ingrid abre; conferir de novo; Ingrid responde; conferir | Primeiro `check` antes da data e hora; depois `check-check`; depois o cartão mostra a resposta de Ingrid como última mensagem (autor, data e hora) com a borda e a carta de não lida, sem ícone de lida e sem chip "Respondida" | M1 | CA-MSG-016.1, 016.2 |
| CT-MSG-250 | Craig envia a si mesmo | Conferir o cartão | Nasce com `check-check` | — | CA-MSG-016.1 |
| CT-MSG-268 | Estado de CT-MSG-249, depois que Craig responde de novo | Conferir o cartão como Craig | A última mensagem é a de Craig e o `check` volta (Ingrid ainda não leu a nova); o sinal de não lida some para Craig | M1 | CA-MSG-016.1 |
| CT-MSG-269 | Craig envia à equipe Onco (M8); Gilliard ainda não leu | Conferir o cartão como Craig; Gilliard abre; conferir de novo | `check`; depois `check-check` (pelo menos um membro leu) | M8 | CA-MSG-016.1; RN-MSG-018 |
| CT-MSG-270 | Claire logada, com o alerta aberto M9 | Conferir o cartão | Sem `check` nem `check-check` | M9 | CA-MSG-016.1 |
| CT-MSG-258 **(API)** | Token de Claire Vance sem participação | `GET /conversations/{M1}` | 404 | M1 | CA-MSG-031.1; RN-MSG-031 |
| CT-MSG-259 **(API)** | Token de usuário com Enviar e sem Visualizar | `GET /conversations` e `POST /conversations` | 403 nos dois | — | CA-MSG-010.1; RN-MSG-024 |
| CT-MSG-260 | Craig com M8 aberta | Em outra sessão, ler e responder M8 enquanto Craig resolve | A resolução termina com sucesso (não 409) e a conversa fica Resolvida | M8 | 02 2.8.6 |
| CT-MSG-261 | Craig envia a Ingrid com prazo "31/02/2026 10:00" | Enviar | "Informe data e hora completas (dd/mm/aaaa hh:mm)." | — | CA-MSG-008.2 |

---

## 13. Layout, tema e acessibilidade

| ID | Pré-condição | Passos | Resultado Esperado | RN/CA |
|---|---|---|---|---|
| CT-MSG-251 | Celular 360 px | Percorrer painel, lista, formulário e conversa | Sem rolagem horizontal; alvos de toque ≥ 44 px; botão Voltar à esquerda; modal como folha inferior | 02 2.1 |
| CT-MSG-252 | Desktop ≥ 640 px | Abrir o modal pelo painel | Caixa centralizada; mesmo conteúdo da página | 02 2.3.5 |
| CT-MSG-253 | Leitor de tela | Navegar até o cartão de M1 | Anuncia assunto, autor, última mensagem, data, "não lida" e prazo; nenhum botão separado no cartão | 02 2.10 |
| CT-MSG-254 | Leitor de tela | Atualização automática do painel | Não anuncia a lista inteira; só a mudança de contagem de não lidas | 02 2.10 |
| CT-MSG-255 | "Reduzir movimento" ativo | Abrir/fechar modal e confirmar | Sem animações de deslocamento | 02 2.10 |
| CT-MSG-256 | Campo de prazo | Inspecionar | Rótulo associado, máscara anunciada, erro associado ao campo | 02 2.10 |
| CT-MSG-257 | Tema escuro e claro | Medir contraste de chips, borda de não lida, vencida e linha do fuso | Texto ≥ 4,5:1; elementos não textuais ≥ 3:1 | CA-MSG-015.1 |
| CT-MSG-266 | Painel, formulário, conversa e confirmação, nos dois temas | Contar os botões preenchidos de cada região e conferir as cores | Um só preenchido por região (verde escuro, texto branco, 5,5:1); "Cancelar", "Voltar" e "Descartado" têm contorno; no tema escuro o limite do botão preenchido tem pelo menos 3:1 sobre a superfície | Design System, seção 12; D-MSG-022 |


---

## 13A. Grau de urgência (v1.3)

| ID | Pré-condição | Passos | Resultado Esperado | Dados de Teste | RN/CA |
|---|---|---|---|---|---|
| CT-MSG-271 | Craig logado, pt-BR | Abrir "Nova mensagem" | Grupo "Grau de urgência (opcional)" com quatro botões "Rotina", "Urgente", "Quanto antes", "Imediato", nenhum marcado, e o texto MSG-TMSG-37 | — | CA-MSG-017.1; RN-MSG-034 |
| CT-MSG-272 | Estado de CT-MSG-271 | Marcar "Quanto antes"; tocar de novo em "Quanto antes" | Marca e depois desmarca; o texto de ajuda volta a MSG-TMSG-37 (com a opção marcada, mostra MSG-TMSG-38) | — | CA-MSG-017.1 |
| CT-MSG-273 | Craig envia a Ingrid, assunto "Teste", sem marcar o grau | Conferir o cartão e a conversa de Craig e de Ingrid; consultar `GET /conversations/{id}` e a coluna `GrauUrgencia` | Nenhum chip de urgência em nenhuma tela; `urgencyLevel` nulo; `GrauUrgencia` nulo | — | CA-MSG-017.2 |
| CT-MSG-274 | Craig envia a Ingrid marcando "Imediato" | Conferir como Craig (Abertas) e como Ingrid (painel e conversa); consultar a coluna | Chip "Imediato" como primeiro item da linha de contexto, antes do paciente (se houver) e do prazo, nas duas contas, no cartão e no cabeçalho da conversa; `GrauUrgencia` = `stat`; `urgencyLevel` = `{ key: "STAT", name: "Imediato" }` | — | CA-MSG-017.3 |
| CT-MSG-275 | Quatro conversas de Craig a Ingrid, com os graus `routine`, `urgent`, `asap` e `stat` | Conferir os quatro chips | Rotina: contorno neutro; Urgente: neutro cheio; Quanto antes: fundo claro de erro com contorno; Imediato: sólido (`alert-fill`, ícone preenchido). Textos "Rotina", "Urgente", "Quanto antes" e "Imediato" (sem a palavra "Urgência"); título e nome acessível "Grau de urgência: {nome}" | — | 02 2.3.8; D-MSG-027, 039 |
| CT-MSG-276 | Conversa de CT-MSG-274 | Ingrid responde; conferir como Craig e como Ingrid | O chip continua "Imediato"; nenhuma tela tem controle para alterar o grau | — | CA-MSG-017.4 |
| CT-MSG-277 **(API)** | Conversa de CT-MSG-274 | Tentar alterar o grau (`PATCH` na conversa com `urgencyLevel`) e enviar `urgencyLevel` no corpo de uma resposta | Não existe endpoint de alteração (404 ou 405); o grau da conversa não muda depois da resposta. Se a API recusa o campo na resposta (400) ou o ignora está em aberto (E-MSG-018) | — | CA-MSG-017.4 |
| CT-MSG-278 | Gilliard logado, 12:00 | Abrir "Mensagens", aba "Abertas" | Ordem: M15 (Quanto antes, não lida), M8 (sem grau, não lida), M12 (Imediato, lida), M13 (Rotina, lida), M14 (sem grau, lida). Contagem 5. Sem o grau, a ordem seria M8, M15 e M14, M13, M12 | M8, M12 a M15 | CA-MSG-017.5; RN-MSG-002 |
| CT-MSG-279 | Estado de CT-MSG-278 | Abrir a Central de Gilliard | Painel com os 5 cartões: M15, M8, M12, M13, M14, sem link "Ver todas as mensagens" | M8, M12 a M15 | CA-MSG-017.5; RN-MSG-001 |
| CT-MSG-280 | Estado de CT-MSG-278 | Resolver M12; abrir "Finalizadas" | M12 aparece com o chip "Imediato" e o chip "Resolvida"; o chip também aparece dentro da conversa | M12 | E-MSG-017 |
| CT-MSG-281 | Gilliard com M15 | Conferir o cartão e a conversa | Ícone de sino; chip "Quanto antes"; sem campo de resposta (MSG-TMSG-20) | M15 | CA-MSG-017.6; RN-MSG-028 |
| CT-MSG-282 **(serviço)** | M15 aberta | Chamar `AppendAlertUpdate` em M15 | A mensagem "Atualização do sistema" é acrescentada; o grau continua "Quanto antes" (a interface não aceita `urgencyLevel` nessa chamada) | M15 | RN-MSG-034; D-MSG-033 |
| CT-MSG-283 **(serviço)** | — | Chamar `PublishAlert` sem `urgencyLevel` e, em outra execução, com `urgencyLevel` = `asap` | Sem `urgencyLevel`: alerta sem chip. Com `asap`: chip "Quanto antes" | — | CA-MSG-017.6 |
| CT-MSG-284 **(API)** | Token de Craig | `POST /conversations` com `urgencyLevel` = 0, 3, "alta", "stat" (minúsculas) e "Urgente"; depois com `urgencyLevel` nulo e ausente | Os cinco primeiros: 400 com MSG-EMSG-13; os dois últimos: 201 | — | CA-MSG-017.7 |
| CT-MSG-285 **(BD)** | Coluna `GrauUrgencia` criada (L-09) | Gravar na `Conversa` os valores 'Alta', 'stat', 'asap' e NULL | 'Alta' recusado pelo `CHECK`; 'stat', 'asap' e NULL aceitos. Se a collation do banco não diferenciar maiúsculas de minúsculas, 'STAT' também passa no `CHECK`; a API recusa essa grafia com 400 (CA-MSG-017.7) | — | 04 L-09; D-MSG-046 |
| CT-MSG-286 | Clínicas pt-BR, en-US e es-419 | Conferir o chip da conversa `asap` em cada idioma | "Quanto antes", "ASAP", "Cuanto antes"; o título é "Grau de urgência: …", "Urgency level: …", "Grado de urgencia: …". Termo sem tradução: a própria chave aparece e o back-end registra anomalia (DT-011, D-CM-044) | — | RN-MSG-013; ECF.17.18, 17.19 |
| CT-MSG-287 | Temas claro e escuro | Medir o contraste do texto dos quatro chips e olhar em escala de cinza | Texto ≥ 4,5:1 nos quatro níveis e nos dois temas (Imediato 5,0:1 e 4,6:1; Quanto antes 5,5:1 e 6,3:1; Urgente 12,1:1 e 8,8:1); os níveis se distinguem pelo texto e pelo ícone, sem a cor | — | CA-MSG-017.8; CA-MSG-015.1 |
| CT-MSG-288 | Leitor de tela | Navegar até o cartão de M12 e até o seletor de grau | O cartão anuncia "grau de urgência: imediato" junto do assunto, do autor e das demais informações; o seletor anuncia a legenda "Grau de urgência (opcional)" e cada opção com nome | M12 | 02 2.10 |
| CT-MSG-289 | Teclado | No formulário, ir ao seletor de grau com Tab; usar as setas e a barra de espaço | As setas mudam a opção; a barra de espaço na opção marcada a desmarca; o foco é visível | — | 02 2.10 |
| CT-MSG-290 | Celular de 360 px | Abrir o formulário e os cartões com chips de paciente, urgência e prazo | Os quatro botões ficam lado a lado, com alvo de toque ≥ 44 px e sem rolagem horizontal; os itens da linha de contexto quebram de linha sem cortar o texto | — | 02 2.1 |

---

## 13B. Horário relativo, limite de texto, processo e agravamento (v1.4)

| ID | Pré-condição | Passos | Resultado Esperado | Dados de Teste | RN/CA |
|---|---|---|---|---|---|
| CT-MSG-291 | Craig logado, 12:00 | Conferir M1 (mensagem às 11:20), M3 (09:30), M5 (resposta às 11:00) e M8 (09:00) no painel | "Há 40 min", "Há 2 h", "Há 1 h" e "Há 3 h" | M1, M3, M5, M8 | CA-MSG-018.1, 018.2; RN-MSG-035 |
| CT-MSG-292 | Mensagens às 11:01 e às 11:00, com data-base 12:00 | Conferir os cartões | 11:01: "Há 59 min"; 11:00: "Há 1 h" (a fronteira é 60 min) | — | CA-MSG-018.1, 018.2 |
| CT-MSG-293 | Mensagem às 00:10, data-base 23:50 do mesmo dia | Conferir o cartão | "Há 23 h" | — | CA-MSG-018.2 |
| CT-MSG-294 | Mensagem ontem às 23:50, data-base hoje 00:10 | Conferir o cartão | Data e hora ("21/10 23:50"), não "Há 20 min": o dia de calendário mudou | — | CA-MSG-018.3 |
| CT-MSG-295 | Conversa M1 | Abrir a conversa | Cada mensagem mostra data e hora, não o horário relativo | M1 | CA-MSG-018.3 |
| CT-MSG-296 | Clínicas en-US e es-419 | Conferir M1 e M3 | "40 min ago" e "2 h ago"; "Hace 40 min" e "Hace 2 h" | M1, M3 | RN-MSG-013, 035 |
| CT-MSG-297 | Aparelho em fuso diferente do da clínica, perto da meia-noite | Conferir uma mensagem enviada 30 min antes da meia-noite da clínica | O "mesmo dia" é o da clínica, não o do aparelho | — | RN-MSG-005, 035 |
| CT-MSG-298 | Painel aberto às 12:00 | Esperar a atualização automática de 1 minuto | M1 passa de "Há 40 min" a "Há 41 min" sem recarregar | M1 | 02 2.3.7 (E-MSG-019) |
| CT-MSG-299 | Craig respondendo uma conversa | Colar 2001 caracteres no campo de resposta | O campo limita a 2000, com contador "2000/2000"; a API recusa 2001 com 400 | — | CA-MSG-018.4 |
| CT-MSG-300 | Formulário com paciente | Escolher o tipo "Documento", o item e enviar | A conversa é criada com o processo; o atalho "Abrir documento" aparece na conversa | — | CA-MSG-008.3, 009.1, 019.2 |
| CT-MSG-301 **(API)** | Token de Craig | `POST /conversations` com dois processos | 400; só um processo por conversa | — | RN-MSG-021 |
| CT-MSG-302 **(serviço)** | M15 aberta (Quanto antes) | O módulo de origem publica novo alerta com grau `stat` (Imediato) e `previousConversationId` = M15, e descarta M15 | M15 fica Descartada, com ação sem usuário exibida como "Descartada por Sistema"; a nova conversa tem o chip "Imediato" e aparece como não lida | M15 | CA-MSG-018.5; RN-MSG-016, 034 |
| CT-MSG-303 | Paciente e tipo Prescrição escolhidos | Abrir o campo do item | Lista só as prescrições do paciente | — | CA-MSG-019.2 |
| CT-MSG-304 | Tipo Prescrição, sem item | Enviar | Erro MSG-EMSG-14 "Escolha o item do processo." e foco no campo do item | — | CA-MSG-019.2 |
| CT-MSG-305 | Tipo Paciente | Observar o formulário | Não há campo de item | — | CA-MSG-019.3 |
| CT-MSG-306 | Tipo e item escolhidos | Trocar o paciente | Tipo e item são limpos | — | CA-MSG-019.4 |
| CT-MSG-307 | Tipo Registro clínico e item escolhidos | Enviar; abrir a conversa | Atalho "Abrir registro clínico" | — | CA-MSG-009.1 |
| CT-MSG-308 **(API)** | Token de Craig | `POST /conversations` com processo do tipo `Agenda`, ou com tipo `Prescricao` sem item | 400 MSG-EMSG-11 (tipo inválido) / 400 MSG-EMSG-14 (sem item) | — | RN-MSG-021 |

---

## 13C. Busca com autocomplete e ordem do formulário (v1.6)

Massa fictícia para as buscas: equipes "Enfermagem" (5 membros) e "Farmácia Oncológica" (4); pessoas "Ana Ribeiro", "Mariana Costa", "Carlos Lima", "Craig Evans (você)"; pacientes "Maria Souza", "Mariana Alves", "João Alves"; para o paciente Maria Souza: prescrições com identificação "FOLFOX - C1D1", "FOLFOX - C1D15" e "Carboplatina AUC5 - C2D1" (data de cada uma); documentos "Laudo de hemograma" (20/10/2026) e "Termo de consentimento" (02/09/2026); registros clínicos com data do evento 20/10/2026 (modelo "Evolução de enfermagem", profissional "Enf. Ana") e 21/10/2026 (modelo "Sinais vitais", profissional "Dr. Carlos"). Todos fictícios.

| ID | Pré-condição | Passos | Resultado Esperado | Dados de Teste | RN/CA |
|---|---|---|---|---|---|
| CT-MSG-309 | Craig logado | Abrir "Nova mensagem" | Ordem dos campos: Destinatário, Assunto, Mensagem; subtítulo "Opcionais"; Grau de urgência, Prazo para resposta, Paciente, Processo relacionado | — | CA-MSG-020.1; D-MSG-040 |
| CT-MSG-310 | Campo Destinatário vazio | Tocar no campo | Lista com as primeiras opções: cabeçalho "Equipes" (Enfermagem, 5; Farmácia Oncológica, 4) e depois "Pessoas" | — | CA-MSG-020.2 |
| CT-MSG-311 | Idem | Digitar "ANA" | Resultados sem distinguir maiúsculas: "Ana Ribeiro"; sem grupo "Equipes" se nenhuma equipe contém o texto | — | CA-MSG-020.2 |
| CT-MSG-312 | Idem | Digitar "mari"; escolher "Mariana Costa" | Aparece "Mariana Costa"; depois da escolha o campo mostra o nome; digitar de novo limpa a escolha | — | CA-MSG-020.2 |
| CT-MSG-313 | Idem | Digitar "enf" | Aparece a equipe "Enfermagem (5 membros)" no grupo "Equipes" | — | CA-MSG-020.2 |
| CT-MSG-314 | Campo Paciente | Digitar "mari" | "Maria Souza" e "Mariana Alves"; busca por nome | — | CA-MSG-020.3 |
| CT-MSG-315 | Paciente Maria Souza e tipo Prescrição | Digitar "c1d15"; depois "folfox"; depois "02/09" | Só "FOLFOX - C1D15"; depois as duas de FOLFOX (termo no início da identificação); depois nada (a data não é chave de busca da prescrição) | — | CA-MSG-020.4; D-MSG-050 |
| CT-MSG-316 | Tipo Documento | Digitar "laudo"; depois "02/09" | "Laudo de hemograma" mostrado com a data "20/10/2026"; depois nenhum resultado (a data não é chave de busca do documento) | — | CA-MSG-020.4; D-MSG-050 |
| CT-MSG-317 | Tipo Registro clínico | Digitar "20/10"; depois "21/10/2026"; depois "carlos" | Registro de 20/10 mostrado como data, modelo e profissional ("20/10/2026 · Evolução de enfermagem · Enf. Ana"); depois o de 21/10; "carlos" não encontra nada (o profissional é só exibição) | — | CA-MSG-020.4; D-MSG-050 |
| CT-MSG-318 | Qualquer campo de busca | Digitar texto sem correspondência ("zzz") | MSG-TMSG-41 "Nenhum resultado para "zzz"." | — | CA-MSG-020.5 |
| CT-MSG-319 | Busca com mais de 8 resultados | Digitar um termo comum | 8 resultados e o aviso MSG-TMSG-42 | — | CA-MSG-020.5 |
| CT-MSG-320 | Campo Destinatário | Teclado: setas, Enter e Esc; leitor de tela | As setas movem o destaque; Enter escolhe; Esc fecha a lista; o leitor anuncia caixa de combinação e o número de resultados | — | CA-MSG-020.6 |
| CT-MSG-321 **(API)** | Token de Craig | `GET /conversations/recipients?q=ana&limit=8`; `GET /conversations/process-options?patientId=…&type=Prescricao&q=c1d15` (a identificação contém o termo em qualquer posição) | Equipes antes das pessoas; só itens do paciente; `hasMore` verdadeiro quando há mais que o limite | — | RN-MSG-036; 2.8.7, 2.8.9 |
| CT-MSG-322 | Celular de 360 px | Abrir o formulário e a lista de resultados | A lista cabe na largura, sem rolagem horizontal; resultados com alvo de toque ≥ 44 px | — | 02 2.1 |
| CT-MSG-323 | Conversa com grau `routine` | Conferir o cartão e a conversa | Chip "Rotina" (contorno neutro) aparece | — | CA-MSG-021.1; D-MSG-043 |
| CT-MSG-324 | Painel e lista, tema claro e escuro | Conferir os cartões | Cartões separados, cantos arredondados (8 px), borda de 1 px e espaço entre eles; o não lido muda só a borda esquerda | — | CA-MSG-021.2; D-MSG-045 |
| CT-MSG-325 | Paciente com vários documentos e registros | Abrir a lista de itens sem digitar | Do mais recente ao mais antigo pela data do evento | — | CA-MSG-021.3; D-MSG-044 |
| CT-MSG-326 | Painel e lista, com M1, M3 (alerta) e uma conversa aberta qualquer | Procurar botões dentro dos cartões; tocar no cartão | Nenhum botão no cartão; o toque abre o modal (painel) ou a página (lista), onde "Resolvido" e "Descartado" aparecem | — | CA-MSG-021.4; D-MSG-047 |
| CT-MSG-327 | Painel e lista, com uma conversa com paciente e sem processo (M2) e M1 (processo do tipo Paciente) | Ver o cartão; tocar no link; depois tocar no resto do cartão | Um só link, o nome do paciente (sublinhado, `secondary-dark`), que leva ao prontuário; a conversa **não** abre ao tocar no link; tocar no resto do cartão abre a conversa | M1, M2 | CA-MSG-021.5; D-MSG-054, 055 |
| CT-MSG-328 | Conversa com processo Prescrição (M3); repetir com Documento (M16) e Registro clínico (M17) | Observar a linha de contexto do cartão e o cabeçalho da conversa; tocar no link | Um só link, com ícone do tipo e o texto "{item} de {paciente}": "FOLFOX - C1D15 de Marcelo T. Pinto"; "Laudo de hemograma de Roberto N. Alves"; "21/10/2026 - Sinais vitais de Maria Silva" (sem o profissional); sem link separado do paciente; leva ao item; no cabeçalho não há botão "Abrir …" | M3, M16, M17 | CA-MSG-009.1, 021.5; RN-MSG-021; D-MSG-055 |
| CT-MSG-329 | M18: conversa endereçada à equipe Farmácia, respondida por Li Wei (membro) | Ver o cartão e a conversa como Ingrid (membro); depois, como Li Wei, ver a própria resposta; por fim, como Claire (remetente, fora da equipe), ver o que ela mesma escreveu | Autor "Li Wei (Farmácia)" no cartão e nas mensagens dela; para Li Wei, "Você (Farmácia)" (D-MSG-055); Claire, que não é da equipe, aparece só com o próprio nome | M18 | CA-MSG-021.6; RN-MSG-030 |
| CT-MSG-330 | Celular de 360 px e teclado | Medir a área de toque do link; navegar com Tab; ativar com Enter | Área de toque de pelo menos 44 x 44 px; a ordem do foco é o botão do cartão e depois o link; anel de foco visível em ambos; o leitor de tela lê "Abrir prontuário: {paciente}" ou "Abrir prescrição: {item} de {paciente}" | M2, M3 | CA-MSG-021.5; D-MSG-054, 055 |

---

## 14. Matriz de rastreabilidade

| Área | Casos | RN cobertas | CA / EX cobertos | SBIS | Cobertura |
|---|---|---|---|---|---|
| Painel | CT-MSG-101 a 108 | RN-MSG-001, 002, 008, 017 | CA-MSG-001.1 a 001.5, 003.1, 005.1; EX-MSG-01, 02 | — | Completo |
| Lista e ordem | CT-MSG-111 a 118 | RN-MSG-001, 002, 011 | CA-MSG-001.1, 001.2, 001.5, 002.4 | ECF.17.04 | Ordem de Finalizadas é [PROPOSTA] |
| Cartão | CT-MSG-121 a 130 | RN-MSG-003, 014, 017 | CA-MSG-002.1, 002.2, 003.1, 003.2, 004.1, 004.2, 015.1 | — | Completo |
| Nova mensagem | CT-MSG-131 a 144 | RN-MSG-004, 007, 012, 015, 020, 021 | CA-MSG-002.3, 003.3, 007.1, 008.1 a 008.3, 009.1; EX-MSG-03 | NGS1.05.02 | Limites de caracteres e processo são [PROPOSTA] |
| Conversa | CT-MSG-151 a 166 | RN-MSG-006, 009, 010, 017, 019, 022, 030 | CA-MSG-003.1, 005.4, 006.1, 012.1, 014.1; EX-MSG-04, 05, 09 | NGS1.03.01 | Completo |
| Resolver/descartar | CT-MSG-171 a 180 | RN-MSG-008, 009, 018, 028 | CA-MSG-005.1 a 005.5, 010.2 | — | Direito sem Enviar é [PROPOSTA] |
| Equipe e si mesmo | CT-MSG-181 a 188 | RN-MSG-006, 007, 015, 018 | CA-MSG-007.1 a 007.3; EX-MSG-07 | — | Completo |
| Alertas | CT-MSG-191 a 198 | RN-MSG-016, 019, 020, 021, 028, 029 | CA-MSG-004.1, 009.1, 012.2, 013.1 | NGS1.03.09 | Interface de publicação é [PROPOSTA] |
| Fuso e idioma | CT-MSG-201 a 207 | RN-MSG-003, 005, 013 | CA-MSG-002.4, 011.1 | ECF.17.18, 17.19 | Completo |
| Permissões e auditoria | CT-MSG-211 a 220 | RN-MSG-023, 024, 025 | CA-MSG-010.1 a 010.3 | NGS1.03.03, 03.04, 07.01 a 07.03, 07.05, 07.06 | 218 e 219 não executáveis até L-01 e L-02 |
| Endpoints | CT-MSG-231 a 244 | RN-MSG-004, 009, 025 | — | NGS1.05.01, 05.02 | Completo |
| Clínica, idioma, botões e tipo de mensagem | CT-MSG-262 a 267 | RN-MSG-013, 025 | — | ECF.17.18, 17.19 | Massa de três clínicas é [PROPOSTA]; 267 só executa depois da alteração do `CHECK` no banco |
| Aviso de lida no cartão | CT-MSG-249, 250, 268 a 270 | RN-MSG-016, 018 | CA-MSG-016.1, 016.2 | — | Completo |
| Busca e ordem do formulário | CT-MSG-309 a 326 | RN-MSG-036, 020, 021, 034 | CA-MSG-020.1 a 021.4 | — | Comportamento da busca é [PROPOSTA] (E-MSG-021); as massas são fictícias |
| Grau de urgência | CT-MSG-271 a 290 | RN-MSG-002, 028, 032, 034 | CA-MSG-017.1 a 017.8 | ECF.17.18, 17.19 | A coluna `GrauUrgencia` e os seeds de `Indicadores` são [PROPOSTA] (L-09, L-10); 277 e 282 dependem de decisões abertas (E-MSG-018, P-MSG-30) |
| Horário, limite, processo e agravamento | CT-MSG-291 a 308; 138, 141 | RN-MSG-016, 021, 035 | CA-MSG-018.1 a 018.5, 008.3 | — | Contador no campo de resposta e o mecanismo `DismissAlert` são [PROPOSTA]; as categorias e a ordem dos itens do processo estão em aberto (P-MSG-34) |
| Acessibilidade | CT-MSG-251 a 257 | RN-MSG-027 | CA-MSG-015.1 | — | Completo |

**Cobertura dos critérios de aceitação:** todos os CA-MSG da Especificação (001.1 a 021.4) têm ao menos um caso. **Fluxos de exceção:** 9/9 (EX-MSG-01 a 09; 06 em CT-MSG-245, 07 em CT-MSG-185, 247 e 248, 08 em CT-MSG-246). **Total:** 195 casos.

**Não coberto, por decisão de escopo:** volume e desempenho (a Especificação não define meta); concorrência além de CT-MSG-177; estados pressionado e desabilitado e botão de ação destrutiva, ainda não definidos no Design System.

---

## 15. Histórico de Versões

- **v1.0** (22/10/2026) — Versão inicial, construída a partir da Definição, Especificação, Mapeamento e Registro de Decisões v1.0, a pedido do solicitante. O que a QA precisa saber, sem abrir outros documentos:
	1. **A carga atual não tem conversas.** `CargaCMZero.xlsx` tem apenas as equipes Enfermagem, Farmácia e Onco e os membros (usuários 1, 4, 5, 6, 7, 8). As conversas M1 a M10 são uma proposta de massa que precisa ser criada antes dos testes.
	2. **Lacunas de especificação que mudam resultados:** ordem da aba "Finalizadas" (CT-MSG-113), limite de 2000 caracteres (CT-MSG-141), paginação de 20 (CT-MSG-115), processo condicionado a paciente (CT-MSG-138), rótulo "Atualização do sistema" (CT-MSG-194) e resolver sem o direito Enviar (CT-MSG-180) são [PROPOSTA]; se o solicitante decidir diferente, o resultado esperado muda.
	3. **CT-MSG-218 e 219 não são executáveis** até o solicitante decidir as lacunas L-01 (endereço de origem na auditoria) e L-02 (exclusão em cascata).
	4. O padrão de cor dos botões e o componente de data e hora estão em aberto; os casos não conferem a cor final do botão.
	5. **Ordem do painel (CT-MSG-101):** com a massa proposta, os não lidos M1 e M3 vêm antes dos lidos, e dentro de cada grupo vale o maior entre a última mensagem e o prazo.
	- **Total:** 130 casos.
	- **Revisão por Dois Críticos** (22/10/2026): corrigidos IDs inexistentes, massa M11, cobertura de EX-MSG-06 a 08 (CT-MSG-245 a 248), estado visível ao remetente (CT-MSG-249, 250), participação (CT-MSG-258), Enviar sem Visualizar (CT-MSG-259), concorrência (CT-MSG-260), data inexistente (CT-MSG-261); 405 trocado por 404 em rota inexistente; ordem do painel depois de abrir M1 (CT-MSG-104); instrução de recriar a massa.
- **v1.1** (27/10/2026) — Acompanha os documentos 01 a 05 v1.1. Seis casos novos (CT-MSG-262 a 267): clínicas do médico e linha da clínica (RN-MSG-025, DT-013), pt-BR completo (ECF.17.18 e 17.19), um botão preenchido por região (Design System, seção 12) e tipo de mensagem só `Response`. Alterados: CT-MSG-121 (borda de 3 px em `secondary-dark`), 194 (atualização do sistema com tipo `Response`), 220 (envio entre clínicas, [PROPOSTA]) e 238 (idempotência pela opção B: a mesma chave devolve sempre a conversa antiga, sem comparar o conteúdo). **Total:** 136 casos. O que a QA precisa saber: 267 só roda depois que o `CHECK` de `Mensagem.Tipo` for alterado no banco; 262 e 264 precisam do cliente de três clínicas da massa da Central; o selo de estado do cartão está em aberto (CT-MSG-249 e 250 podem mudar).
- **v1.2** (27/10/2026) — Estado no cartão (D-MSG-023): CT-MSG-249 e 250 reescritos (ícones `check` e `check-check`, sem chip "Respondida"); novos CT-MSG-268 a 270 (nova resposta do usuário, equipe e alerta). **Total:** 139 casos. O que a QA precisa saber: o cartão não tem chip de estado; o estado "respondida" continua no banco, mas não aparece. CT-MSG-270 depende de uma conversa de alerta (M9) da massa proposta.
- **v1.3** (28/10/2026) — Grau de urgência (D-MSG-025 a 027): massa nova M12 a M15 (de Gilliard, para não mudar o painel de Craig); nova seção 13A com 20 casos (CT-MSG-271 a 290): formulário, chip nos quatro níveis, imutabilidade, ordem (CT-MSG-278 e 279), alertas, validação na API e no banco, idiomas, contraste, leitor de tela, teclado e celular; CT-MSG-101 com a observação de que M1 a M10 não têm grau; matriz atualizada. **Total:** 159 casos. O que a QA precisa saber: (1) a coluna `GrauUrgencia` e os seeds de `Indicadores` são proposta; CT-MSG-273, 274, 285 e 286 só executam depois deles; (2) em CT-MSG-278, M8 não tem grau e fica abaixo de M15 porque Alta vem antes; (3) a regra do horário relativo (D-MSG-028) é da Central e não é testada aqui.
- **v1.4** (28/10/2026) — Respostas do solicitante: horário relativo no cartão (CT-MSG-291 a 298; CT-MSG-121 e 122 reescritos), limite de 2000 caracteres (CT-MSG-141, 299), processo de um só tipo sem depender do paciente (CT-MSG-138, 300, 301) e alerta que se agrava (CT-MSG-302). **Total:** 171 casos. O que a QA precisa saber: a regra de "mesmo dia" é o dia de calendário no fuso da clínica; a lista de itens por tipo (categorias de documento e de registro clínico) está em aberto (P-MSG-34); os casos 303 a 307 usam itens fictícios.
- **v1.5** (28/10/2026) — Processo em três etapas (D-MSG-035 a 037): CT-MSG-138, 139 e 300 reescritos; novos CT-MSG-303 a 308. **Total:** 177 casos. Agenda não é mais tipo de processo.
- **v1.6** (28/10/2026) — Grau de urgência no domínio HL7: massa (M12, M13, M15) e os casos CT-MSG-271 a 290, 302 reescritos com Rotina, Urgente, Quanto antes e Imediato e com a chave `STAT`/`ASAP` na API e no banco; nova seção 13C (CT-MSG-309 a 322): ordem do formulário e buscas com autocomplete. **Total:** 191 casos.
- **v1.7** (29/10/2026) — CT-MSG-323 a 325 (chip Rotina, aparência do cartão, ordem dos itens). **Total:** 194 casos.
- **v1.9** (29/10/2026) — CT-MSG-283: `urgencyLevel` no `PublishAlert` (D-MSG-048). Nenhum caso novo. **Total:** 195 casos.
- **v1.8** (29/10/2026) — Chaves do grau em minúsculas (CT-MSG-275, 283, 285, 302, 323, M12, M13); botão fora do cartão (CT-MSG-105, 130, 253, 266); CT-MSG-326. **Total:** 195 casos.
- **v1.10** (29/10/2026) — CT-MSG-101 e 279: painel sem limite de 4 cartões e sem o link "Ver todas as mensagens" (D-MSG-049). **Total:** 195 casos.
- **v1.11** (29/10/2026) — CT-MSG-315 a 317 e massa fictícia: busca por `Prescricao.Identificacao` (qualquer parte), nome do documento e data do registro clínico (D-MSG-050). **Total:** 195 casos.
- **v1.12** (30/10/2026) — CT-MSG-317 e massa fictícia: profissional exibido como tratamento e apelido (D-MSG-051). **Total:** 195 casos.
- **v1.13** (30/10/2026) — Sem mudança de casos (D-MSG-052 confirma a busca por data em dd/mm e dd/mm/aaaa). **Total:** 195 casos.
- **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) — Sem mudança de casos; CT-MSG-324 e 326 continuam válidos com o novo visual (D-MSG-053). **Total:** 195 casos.
- **v1.16** (05/11/2026) — Novos CT-MSG-327 a 330 (links de paciente e processo; equipe junto ao autor; área de toque). **Total:** 199 casos (CT-MSG-101 a 330).
- **v1.17** (05/11/2026) — CT-MSG-327, 328 e 330: um só link por cartão (D-MSG-055). **Total:** 199 casos.
