# Cenários de Teste — Check-in de Usuários — Épico 5 — Menu Lateral

**Funcionalidade:** [CIU-E5] Menu Lateral (parte do guarda-chuva [Check-in de Usuários](../00%20-%20Guarda-chuva%20v2.25.md), v2.25)
**Versão de referência da especificação:** 01-Definição v1.7 / 02-Especificação v1.5 / 03-Protótipo v1.6 / 04-Mapeamento de BD v1.5
**Autor:** Marcos Arao, para uso da equipe de QA do Gemed 2.1
**Massa de dados de referência:** **não existe ainda.** Nenhuma carga de teste para o Menu Lateral foi localizada no vault (a única massa existente, `CargaCMZero.xlsx`, é da Central do Médico e não contém `Processo`/`ClientePerfilAcessoProcesso`/`ClienteUsuarioMenuFavorito`). Este documento usa uma **massa proposta [PROPOSTA]** — descrita na Seção 1, "Massa de dados proposta" — que precisa ser criada e confirmada antes da execução. Todos os nomes de usuário, clínica e perfil abaixo (U1, U2, U3, "Clínica Teste A/B", PERFIL-A/B/VAZIO) são **rótulos inventados para este documento**, não registros existentes em nenhuma base.
**Data-base dos testes:** não aplicável — nenhum comportamento deste épico depende de data/hora.

---

## 1. Escopo

Este documento cobre a homologação funcional do Menu Lateral, conforme CIU-E5: estrutura de grupos e itens filtrada por perfil de acesso (RN-CIU-026/027), Favoritos (RN-CIU-028), Busca (RN-CIU-030), comportamento responsivo desktop/mobile (RN-CIU-029), cabeçalho com identificação da clínica, botão Trocar e rodapé, além dos 4 fluxos de exceção (EX-E5-01 a EX-E5-04) e do catálogo de mensagens.

Fora de escopo deste documento:

- **Tela inicial** (escolha opcional do usuário via `ClienteUsuarioMenuFavorito.ProcessoAbertura` e cockpit padrão via `ClientePerfilAcessoUsuario.CodProfissional`) — a própria 01-Definição (RN-CIU-028, nota final) registra que nenhum critério de aceitação desta versão exercita esse comportamento, e `CodProfissional` ainda está com migração pendente no banco. Sem CA, sem CT.
- Conteúdo de qualquer tela aberta pelo menu (Central do Médico, Agenda do Médico etc.) — cada uma tem seu próprio Cenários de Teste (ou terá).
- "Meu Perfil" — não é item deste menu (01-Definição, Fora do escopo).
- "Suporte Gemed" — item em aberto (01-Definição, Lista consolidada [PROPOSTA], item 2), retirado do Protótipo.
- Cadastro/administração de perfis de acesso — Contexto de Segurança. Aqui só se altera configuração de perfil como **pré-condição** de teste.
- A árvore real de produção — ainda não existe (01-Definição, Lista consolidada [PROPOSTA], item 1). Os casos usam a árvore de exemplo do Protótipo v1.6.

Cada seção traz uma tabela de casos (ID, Pré-condição, Passos, Resultado Esperado, Dados de Teste, RN/CA Relacionada). Casos marcados **(API)** são executados diretamente contra o endpoint (Postman, devtools ou equivalente), não pela interface. Casos marcados **(BD)** exigem conferência direta no banco IpSeguranca.

### Endpoints envolvidos (referência)

| Endpoint | Uso |
|---|---|
| `GET /api/v1/menu` | Carga da árvore, favoritos e `clinicaAtual` |
| `POST /api/v1/menu/items/{clientePerfilAcessoProcessoId}/favorite` | Favoritar |
| `DELETE /api/v1/menu/items/{clientePerfilAcessoProcessoId}/favorite` | Desfavoritar |

A busca não tem endpoint — opera em memória sobre a resposta do `GET` (02-Especificação, Integração com Backend).

### Massa de dados proposta [PROPOSTA]

> **Tudo nesta subseção é proposta deste documento**, montada a partir da árvore de exemplo do Protótipo v1.6 (`MENU_DATA`) e das tabelas do 04-Mapeamento de BD §4.1-4.3. Nada aqui existe hoje em banco. Precisa ser criado (e conferido) pelo solicitante/QA antes da execução; se a massa real divergir, os resultados esperados abaixo precisam ser recalculados.

**Clínicas** (`ClienteEmpresa`, mesmo `Cliente`/`ClienteBD`, ambas com `RemovidoEm` nulo):

- **Clínica Teste A**
- **Clínica Teste B**

**Processos** (`Processo`/`ProcessoGrupo`, habilitados em `ClienteProcesso` para o `ClienteBD` de teste) — a árvore de exemplo do Protótipo v1.6, mais 1 item inventado:

| Grupo (`ProcessoGrupo`) | Item (`Processo.Nome`) | Ícone (`Processo.Icone`) |
|---|---|---|
| Assistencial | Central do Médico (Cockpit) | stethoscope |
| Assistencial | Agenda do Médico | calendar |
| Assistencial | PEP | file-text |
| Assistencial | Prescrições Pendentes | clipboard-list |
| Assistencial | Pacientes na Clínica Hoje | users |
| Financeiro | Repasses | coins |
| Cadastros | Protocolos | list-checks |
| Cadastros | Pacientes | user-plus |
| Mensageria | Mensagens | message-circle |
| *(sem grupo — `ProcessoGrupoId` nulo)* | **Item Sem Grupo (teste)** — **inventado para este documento** | circle |

O item sem grupo é necessário porque a árvore de exemplo do Protótipo v1.6 não tem nenhum item sem grupo, e RN-CIU-026 prevê esse caso.

**Perfis de acesso** (`ClientePerfilAcesso` + `ClientePerfilAcessoProcesso`):

- **PERFIL-A** (usado na Clínica Teste A) — todos os 10 itens acima com `ExibeMenu='S'`, **exceto Protocolos, com `ExibeMenu='N'`**. `Ordem` dentro do Assistencial: Central do Médico (1), Agenda do Médico (2), PEP (3), Prescrições Pendentes (4), Pacientes na Clínica Hoje (5) — mesma ordem do Protótipo. Cadastros: Pacientes (1).
- **PERFIL-B** (usado na Clínica Teste B) — só 4 itens, todos `ExibeMenu='S'`: no Assistencial, **ordem invertida em relação ao PERFIL-A**: Prescrições Pendentes (1), Agenda do Médico (2), Central do Médico (3); na Mensageria: Mensagens (1).
- **PERFIL-VAZIO** — nenhuma linha em `ClientePerfilAcessoProcesso` com `ExibeMenu='S'`.

**Usuários** (`ClientePerfilAcessoUsuario`, `RemovidoEm` nulo):

| Usuário | Clínica Teste A | Clínica Teste B | Clínicas acessíveis | Favoritos pré-carregados (`ClienteUsuarioMenuFavorito`, `RemovidoEm` nulo) |
|---|---|---|---|---|
| **U1** (multi-clínica) | PERFIL-A | PERFIL-B | 2 | Na A: Central do Médico (Cockpit), Agenda do Médico. Na B: Mensagens |
| **U2** (clínica única) | PERFIL-A | — | 1 | Nenhum |
| **U3** (perfil sem itens) | PERFIL-VAZIO | — | 1 | Nenhum |

### Pendências de Massa de Dados

- **Massa inteira inexistente** — a massa proposta acima precisa ser criada (sugestão: uma planilha de carga no mesmo formato de `CargaCMZero.xlsx`, abas por tabela do IpSeguranca). Até lá, nenhum caso deste documento é executável contra o back-end real; o Protótipo v1.6 permite exercitar só os casos visuais com a árvore de exemplo fixa (sem U1/U2/U3, sem PERFIL-B, sem item sem grupo).
- **"Item Sem Grupo (teste)" é inventado** — se o solicitante preferir não criar um `Processo` artificial, CT-E5-EST-05 fica sem massa até existir um item sem grupo real.
- **Ordenação alfabética × collation (CT-E5-FAV-04)** — o resultado esperado supõe ordem alfabética sem distinção de maiúsculas/minúsculas ("Pacientes na Clínica Hoje" antes de "PEP"). O back-end ordena por `Processo.Nome` (04-Mapeamento §4.1); o resultado real depende da collation da coluna no IpSeguranca, não conferida neste documento. Numa collation binária, "PEP" viria antes. Conferir antes da execução.
- **CT-E5-SIS-02 a 05 (falhas de endpoint)** não dependem de massa, e sim de o ambiente permitir simular falha de `GET`/`POST`/`DELETE` (proxy de rede, stub de backend, devtools). Mesma pendência já registrada no Cenários de Teste da Central do Médico (v1.26): mecanismo de simulação a definir pela QA.
- **CT-E5-CAB-05 (recarregar a página)** depende do campo `clinicaAtual` na resposta de `GET /api/v1/menu`, ainda marcado **[PROPOSTA]** na 02-Especificação v1.5.

---

## 2. Estrutura e Filtragem por Perfil de Acesso

| ID | Pré-condição | Passos | Resultado Esperado | Dados de Teste | RN/CA Relacionada |
|---|---|---|---|---|---|
| CT-E5-EST-01 | U2 autenticado na Clínica Teste A, desktop | Observar o menu logo após o carregamento | Aparecem os grupos Assistencial, Financeiro, Cadastros e Mensageria e o item "Item Sem Grupo (teste)" na lista principal. **Todos os grupos recolhidos**, mostrando só o nome do grupo, sem itens | PERFIL-A | RN-CIU-026; 01-Definição, Premissas |
| CT-E5-EST-02 | Mesmo estado de CT-E5-EST-01 | Tocar no grupo "Assistencial" | Assistencial expande e mostra, nesta ordem: Central do Médico (Cockpit), Agenda do Médico, PEP, Prescrições Pendentes, Pacientes na Clínica Hoje. Cada item com ícone + nome. Financeiro, Cadastros e Mensageria continuam recolhidos | PERFIL-A, `Ordem` 1-5 | RN-CIU-026, RN-CIU-027; CA-010.9 |
| CT-E5-EST-03 | Assistencial expandido (CT-E5-EST-02) | Tocar em "Cadastros"; depois tocar de novo em "Assistencial" | Ao expandir Cadastros: os dois grupos ficam expandidos ao mesmo tempo. Cadastros mostra **só "Pacientes"** ("Protocolos" não aparece, nem desabilitado). Ao recolher Assistencial: Cadastros continua expandido | PERFIL-A (Protocolos com `ExibeMenu='N'`) | RN-CIU-026, RN-CIU-027; CA-010.1, CA-010.9 |
| CT-E5-EST-04 | U1 autenticado na Clínica Teste B | Expandir "Assistencial" | Itens nesta ordem: Prescrições Pendentes, Agenda do Médico, Central do Médico (Cockpit) (**invertida** em relação ao PERFIL-A). Nenhum outro item do Assistencial aparece. Só os grupos Assistencial e Mensageria aparecem | PERFIL-B | RN-CIU-027 (ordem por perfil); CA-010.1 |
| CT-E5-EST-05 | U2 na Clínica Teste A | Observar a posição de "Item Sem Grupo (teste)" | O item aparece direto na lista principal, fora de qualquer grupo, visível sem expandir nada | `Processo.ProcessoGrupoId` nulo (item inventado, ver Pendências) | RN-CIU-026 |
| CT-E5-EST-06 | U2 na Clínica Teste A, desktop, Assistencial expandido | Tocar em "Agenda do Médico" | Navega para a rota do item (`Processo.Rota`). O item fica destacado como ativo (rota atual) no menu | PERFIL-A | 02-Especificação, Estrutura do Menu e Mapeamento de Componentes (estado "active") |
| CT-E5-EST-07 **(API)** | Token de sessão de U2 na Clínica Teste A | Chamar `GET /api/v1/menu` e inspecionar a resposta | 200. A resposta **não contém** o item "Protocolos" em lugar nenhum (`grupos`, `itensSemGrupo`, `favoritos`). A filtragem acontece no back-end, não no front-end | PERFIL-A | RN-CIU-027; SBIS NGS1.03.01 |
| CT-E5-EST-08 **(BD)** | U2 na Clínica Teste A, menu carregado com "Pacientes" visível em Cadastros | 1. Alterar no banco `ClientePerfilAcessoProcesso.ExibeMenu` de "Pacientes" (PERFIL-A) para `'N'`. 2. Recarregar o menu (nova sessão ou recarregar a página). 3. Restaurar para `'S'` ao final | Após recarregar, "Pacientes" não aparece mais em Cadastros. A mudança de configuração do perfil vale a partir do próximo carregamento | PERFIL-A | RN-CIU-027; SBIS NGS1.03.03 |
| CT-E5-EST-09 | U2 na Clínica Teste A, desktop, com Assistencial e Cadastros expandidos e o menu recolhido | Encerrar a sessão (logout) e autenticar de novo | Menu volta **expandido** (estado padrão do desktop), com **todos os grupos recolhidos**. Nenhum dos dois estados é guardado entre sessões | — | 01-Definição, Premissas; 02-Especificação, Comportamento Responsivo |
| CT-E5-EST-10 | U3 autenticado na Clínica Teste A | Observar o menu | Menu vazio, com a mensagem MSG-I5-01: "Seu perfil de acesso ainda não libera nenhum item de menu. Entre em contato com o administrador da sua clínica." Seção Favoritos não aparece. **Campo de busca não aparece** | PERFIL-VAZIO | RN-CIU-027; EX-E5-01; 03-Protótipo v1.6 (busca oculta neste estado, confirmado pelo solicitante) |
| CT-E5-EST-11 **(API)** | Token de sessão de U3 na Clínica Teste A | Chamar `GET /api/v1/menu` | 200 (não erro), com `grupos`, `itensSemGrupo` e `favoritos` vazios | PERFIL-VAZIO | 02-Especificação, `GET /api/v1/menu`, Códigos |

---

## 3. Favoritos

| ID | Pré-condição | Passos | Resultado Esperado | Dados de Teste | RN/CA Relacionada |
|---|---|---|---|---|---|
| CT-E5-FAV-01 | U1 autenticado na Clínica Teste A | Observar o topo do menu; expandir Assistencial | Seção "Favoritos" no topo, acima da busca e dos grupos, com **Agenda do Médico** e **Central do Médico (Cockpit)**, nesta ordem (alfabética), cada um com estrela preenchida. No Assistencial, os mesmos 2 itens continuam no lugar original, também com estrela preenchida. Favoritar não move o item | U1 × PERFIL-A, 2 favoritos pré-carregados | RN-CIU-028 |
| CT-E5-FAV-02 | U2 autenticado na Clínica Teste A (nenhum favorito) | Observar o topo do menu | Seção Favoritos **não aparece** (nem título, nem espaço vazio, nem mensagem). Busca logo no topo | U2 × PERFIL-A, sem favoritos | RN-CIU-028 |
| CT-E5-FAV-03 | Estado de CT-E5-FAV-02, Assistencial expandido | Tocar na estrela vazia de "PEP" | Estrela de PEP fica preenchida. Seção Favoritos aparece com "PEP". PEP continua também no Assistencial | — | RN-CIU-028; CA-010.2 |
| CT-E5-FAV-04 | U1 na Clínica Teste A (favoritos: Agenda, Central) | Favoritar "PEP" e depois "Pacientes na Clínica Hoje" | Seção Favoritos, nesta ordem: Agenda do Médico, Central do Médico (Cockpit), Pacientes na Clínica Hoje, PEP. A ordem é alfabética pelo nome, não a ordem em que foram favoritados. **Caso-limite:** "Pacientes…" × "PEP" só fica nesta ordem se a comparação ignorar maiúsculas/minúsculas (ver Pendências de Massa de Dados, collation) | — | RN-CIU-028 |
| CT-E5-FAV-05 | U1 na Clínica Teste A, com "Agenda do Médico" nos Favoritos | Tocar na estrela preenchida de "Agenda do Médico" **dentro da seção Favoritos** | Agenda do Médico sai da seção Favoritos. Continua no Assistencial, agora com estrela vazia | — | RN-CIU-028; CA-010.3 |
| CT-E5-FAV-06 | U1 na Clínica Teste A, com "Central do Médico (Cockpit)" nos Favoritos, Assistencial expandido | Tocar na estrela preenchida de "Central do Médico (Cockpit)" **no grupo Assistencial** | Mesmo efeito de CT-E5-FAV-05: sai dos Favoritos e continua no grupo, com estrela vazia. Dá para desfavoritar dos dois lugares | — | 02-Especificação, Seção Favoritos |
| CT-E5-FAV-07 | Usuário com exatamente 1 favorito na clínica atual | Desfavoritar esse único item | A seção Favoritos inteira desaparece | — | RN-CIU-028 |
| CT-E5-FAV-08 | U2 na Clínica Teste A favorita "PEP" | Logout e login de novo na mesma clínica | "PEP" continua nos Favoritos. O favorito fica gravado (`ClienteUsuarioMenuFavorito`) e não se perde ao fim da sessão, ao contrário da expansão de grupos | — | RN-CIU-028; 04-Mapeamento §4.2 |
| CT-E5-FAV-09 **(BD)** | U2 na Clínica Teste A, "PEP" não favoritado | Favoritar PEP → desfavoritar → favoritar de novo. Conferir `ClienteUsuarioMenuFavorito` | Existe **uma única linha** para o par (`ClientePerfilAcessoUsuarioId` de U2/A, `ClientePerfilAcessoProcessoId` de PEP), com `RemovidoEm` nulo. Desfavoritar marca `RemovidoEm` (exclusão lógica), sem apagar a linha. Refavoritar limpa `RemovidoEm`, sem criar uma segunda linha | — | RN-CIU-005 (guarda-chuva); 04-Mapeamento §4.2/4.3 |
| CT-E5-FAV-10 | U1 na Clínica Teste A (favoritos: Agenda, Central) | 1. Trocar para a Clínica Teste B (botão Trocar → E6). 2. Observar Favoritos. 3. Na B, favoritar "Prescrições Pendentes". 4. Voltar para a Clínica Teste A | Na B: Favoritos mostra **só "Mensagens"**. Agenda e Central aparecem no Assistencial com estrela vazia. De volta à A: Favoritos mostra de novo Agenda e Central. "Prescrições Pendentes" **não** está favoritado na A | U1 × PERFIL-A / PERFIL-B | RN-CIU-028 (favoritos por vínculo × perfil × clínica); SBIS NGS1.03.07 |
| CT-E5-FAV-11 **(API)** | Token de U2 na Clínica Teste A | `POST .../items/{id}/favorite` usando: (a) o `ClientePerfilAcessoProcessoId` de "Protocolos" no PERFIL-A (`ExibeMenu='N'`); (b) um `ClientePerfilAcessoProcessoId` do PERFIL-B | 404 nos dois casos. Nenhuma linha criada em `ClienteUsuarioMenuFavorito` | — | 04-Mapeamento §4.2; SBIS NGS1.03.01 |
| CT-E5-FAV-12 **(API)** | Token de U2 na Clínica Teste A, "Repasses" não favoritado | `DELETE .../items/{id de Repasses}/favorite` | 404 (item não estava favoritado) | — | 02-Especificação, `DELETE`, Códigos |
| CT-E5-FAV-13 **(API)** | Token de U2 na Clínica Teste A, "PEP" não favoritado | `POST .../items/{id de PEP}/favorite` | 201, corpo `{ clientePerfilAcessoProcessoId, favorito: true }`. Em seguida, `DELETE` no mesmo id: 200, `{ …, favorito: false }` | — | 02-Especificação, Integração com Backend |
| CT-E5-FAV-14 **(BD)** — ver observação ⬇ | U1 na Clínica Teste A com "Agenda do Médico" favoritado | 1. Alterar `ClientePerfilAcessoProcesso.ExibeMenu` de "Agenda do Médico" (PERFIL-A) para `'N'`. 2. Recarregar o menu. 3. Restaurar ao final | **Esperado por RN-CIU-027 / NGS1.03.01:** "Agenda do Médico" não aparece em lugar nenhum do menu, nem na seção Favoritos, nem nos ícones do menu recolhido. **Ver observação: o filtro documentado hoje pode não garantir isso** | — | RN-CIU-027, RN-CIU-028; SBIS NGS1.03.01 |

> **Observação — CT-E5-FAV-14 (achado ao redigir este documento, a confirmar):** o filtro de `favoritos[]` descrito em 04-Mapeamento de BD v1.5 §4.1 usa só `ClienteUsuarioMenuFavorito.ClientePerfilAcessoUsuarioId` + `RemovidoEm IS NULL`. Ele **não** repete os filtros de `ClientePerfilAcessoProcesso.ExibeMenu = 'S'`, `ClientePerfilAcessoProcesso.RemovidoEm IS NULL` nem `ClienteProcesso.RemovidoEm IS NULL`, que valem para `grupos`/`itensSemGrupo`. Se a implementação seguir o mapeamento ao pé da letra, um item favoritado e depois retirado do perfil continuaria aparecendo em Favoritos e no menu recolhido, contrariando RN-CIU-027 ("itens não liberados… não fazem parte da lista carregada"). Este caso de teste foi escrito com o resultado esperado pela regra de negócio. A divergência no Mapeamento de BD **não foi corrigida aqui**: é decisão do solicitante.

---

## 4. Busca

| ID | Pré-condição | Passos | Resultado Esperado | Dados de Teste | RN/CA Relacionada |
|---|---|---|---|---|---|
| CT-E5-BUSCA-01 | U2 na Clínica Teste A, todos os grupos recolhidos | Digitar "Agenda" no campo de busca, sem pressionar Enter | A lista vira uma lista "achatada", sem grupos, mostrando só "Agenda do Médico", mesmo com o Assistencial recolhido. O filtro age a cada caractere, sem confirmação | PERFIL-A | RN-CIU-030; CA-010.4 |
| CT-E5-BUSCA-02 | Mesmo estado | Digitar "Pac" | Aparecem "Pacientes na Clínica Hoje" (do Assistencial) e "Pacientes" (do Cadastros), ambos com os grupos recolhidos | PERFIL-A | RN-CIU-030; CA-010.4 |
| CT-E5-BUSCA-03 | Mesmo estado | Digitar "Proto" | Estado vazio com MSG-I5-02 ("Nenhum item encontrado. Tente limpar o filtro de busca."). "Protocolos" existe como `Processo`, mas está com `ExibeMenu='N'` no PERFIL-A, e a busca nunca revela item não liberado | PERFIL-A (Protocolos `ExibeMenu='N'`) | RN-CIU-030 (2º parágrafo); RN-CIU-027; SBIS NGS1.03.01 |
| CT-E5-BUSCA-04 | Mesmo estado | Digitar "xyz" | Estado vazio com MSG-I5-02 | — | RN-CIU-030; EX-E5-02 |
| CT-E5-BUSCA-05 | U2 na Clínica Teste A, **Cadastros expandido**, demais recolhidos | Digitar "Agenda"; depois apagar todo o texto | Durante a busca: lista achatada. Após limpar: volta a exibição normal com **Cadastros expandido** e os demais recolhidos (estado anterior à busca) | — | 02-Especificação, Busca |
| CT-E5-BUSCA-06 | U2 na Clínica Teste A, devtools aberto na aba Rede | Digitar "Pacientes" caractere a caractere | Nenhuma requisição de rede nova enquanto digita. Só o `GET /api/v1/menu` inicial | — | 02-Especificação, Integração com Backend (nota sobre a busca) |
| CT-E5-BUSCA-07 | U2 na Clínica Teste A, campo vazio | Observar o campo de busca | Placeholder "Buscar no menu" (MSG-P5-01). Campo posicionado abaixo da seção Favoritos (quando existe) e acima dos grupos | — | 02-Especificação, Busca; 03-Protótipo v1.5/v1.6 |
| CT-E5-BUSCA-08 — **resultado a definir** | U2 na Clínica Teste A | Digitar (a) "agenda" (minúsculas); (b) "medico" (sem acento) | **Não definido pela Especificação.** RN-CIU-030 diz só "filtra os itens pelo nome", sem tratar maiúsculas/minúsculas nem acentos. Para referência, **não normativa**, o Protótipo v1.6 ignora maiúsculas/minúsculas ((a) encontra "Agenda do Médico") mas **não** ignora acentos ((b) não encontra nada). Resultado esperado pendente de decisão do solicitante | — | RN-CIU-030 (lacuna) |

---

## 5. Comportamento Responsivo

| ID | Pré-condição | Passos | Resultado Esperado | Dados de Teste | RN/CA Relacionada |
|---|---|---|---|---|---|
| CT-E5-RESP-01 | U1 na Clínica Teste A, desktop | Abrir o sistema | Menu **expandido** (padrão), em faixa lateral fixa, com o conteúdo principal ocupando o resto da tela | — | RN-CIU-029 |
| CT-E5-RESP-02 | Estado de CT-E5-RESP-01 (favoritos: Agenda, Central) | Acionar o controle de recolher | Menu vira coluna estreita com **só os ícones de Agenda do Médico e Central do Médico (Cockpit)**. Grupos, busca, nome da clínica e botão Trocar somem. No cabeçalho fica só o indicador visual (círculo). O conteúdo principal se redimensiona e ocupa o espaço liberado | U1 × PERFIL-A | RN-CIU-029; CA-010.7 |
| CT-E5-RESP-03 | Menu recolhido (CT-E5-RESP-02) | Clicar no ícone de "Agenda do Médico" | Navega direto para a rota da Agenda do Médico, sem expandir o menu | — | RN-CIU-029 |
| CT-E5-RESP-04 | Desktop | Observar a posição do controle de recolher/expandir nos dois estados | O controle fica **fora** do menu, na mesma posição fixa nos dois estados, sem se deslocar e sem cobrir o nome da clínica quando expandido | — | 02-Especificação, Comportamento Responsivo; 03-Protótipo v1.3 |
| CT-E5-RESP-05 | Menu recolhido | Acionar o controle de expandir | Menu volta ao estado expandido, com grupos, busca, cabeçalho completo e Favoritos | — | RN-CIU-029 |
| CT-E5-RESP-06 — **resultado a definir** | U2 na Clínica Teste A (nenhum favorito), desktop | Recolher o menu | **Não definido pela Especificação.** Pela leitura literal de RN-CIU-029 ("recolhido, exibe apenas os ícones dos itens favoritados"), a coluna ficaria sem nenhum ícone de navegação, só com o indicador da clínica. Isso é uma **inferência deste documento**, não uma regra confirmada. Pendente de confirmação do solicitante | U2 × PERFIL-A | RN-CIU-029 (lacuna) |
| CT-E5-RESP-07 | U1 na Clínica Teste A, **mobile** | Abrir o sistema; tocar no ícone de abertura do menu na barra superior | Antes de abrir: menu oculto, barra superior mostrando o nome "Clínica Teste A" **sem** o indicador visual. Ao tocar: o menu abre como camada sobre o conteúdo, com fundo semitransparente, **sem redimensionar** o conteúdo por baixo | — | RN-CIU-029; CA-010.8; 02-Especificação, Cabeçalho do Menu |
| CT-E5-RESP-08 | Menu aberto no mobile | Tocar em um item (ex.: "Central do Médico (Cockpit)") | Menu fecha e o sistema navega para a rota do item | — | RN-CIU-029 |
| CT-E5-RESP-09 | Menu aberto no mobile | Tocar fora do menu (na camada de fundo) | Menu fecha e o conteúdo aparece como estava, sem navegar | — | RN-CIU-029 |
| CT-E5-RESP-10 | Mobile | Procurar o controle de recolher/expandir | Não existe: no mobile não há estado recolhido/expandido, só oculto/aberto | — | RN-CIU-029 |

> **Nota sobre a largura de corte desktop/mobile:** a 02-Especificação define os dois modos só como "largura suficiente/insuficiente para o menu ao lado do conteúdo", sem valor numérico. O Protótipo v1.6 usa **960px** (`@media (min-width: 960px)`). Use esse valor como referência de teste até haver definição normativa.

---

## 6. Cabeçalho, Botão Trocar e Rodapé

| ID | Pré-condição | Passos | Resultado Esperado | Dados de Teste | RN/CA Relacionada |
|---|---|---|---|---|---|
| CT-E5-CAB-01 | U2 na Clínica Teste A, desktop expandido | Observar o topo do menu | Indicador visual (círculo colorido) + nome "Clínica Teste A" | `ClienteEmpresa.Nome` | 02-Especificação, Cabeçalho do Menu |
| CT-E5-CAB-02 | U2 (1 clínica acessível) | Observar o cabeçalho do menu | Botão "Trocar" **não aparece** | U2 | RN-CIU-009 (E1); CA-010.5 |
| CT-E5-CAB-03 | U1 (2 clínicas acessíveis) na Clínica Teste A | Observar o cabeçalho; tocar em "Trocar" | Botão compacto com ícone + rótulo "Trocar" (MSG-B5-02), ao lado do nome da clínica, em fonte menor que o resto do cabeçalho. Ao tocar: vai para a tela de seleção de clínica (E6) | U1 | RN-CIU-009 (E1); CA-010.6 |
| CT-E5-CAB-04 | Continuação de CT-E5-CAB-03, na tela do E6 | Selecionar "Clínica Teste B" | O menu é reconstruído do zero: cabeçalho "Clínica Teste B", grupos só Assistencial e Mensageria (PERFIL-B), todos recolhidos, Favoritos só com "Mensagens". Nada da Clínica A permanece | U1 × PERFIL-B | RN-CIU-028; SBIS NGS1.03.07 |
| CT-E5-CAB-05 | U1 na Clínica Teste B | Recarregar a página no navegador (F5) | O cabeçalho continua mostrando "Clínica Teste B" (nome vindo de `clinicaAtual`, sem depender de dado guardado desde o login/E6) | Depende de `clinicaAtual` **[PROPOSTA]** (ver Pendências) | 02-Especificação, `GET /api/v1/menu` |
| CT-E5-CAB-06 | Qualquer usuário, desktop expandido ou mobile aberto | Observar a base do menu; tentar clicar no texto | Rodapé fixo "Powered by Interprocess TI" (MSG-T5-01), sem link e sem ação ao clicar | — | RN-CIU-026; MSG-T5-01 |

---

## 7. Estados de Exceção e Falhas (Transversal)

Os casos CT-E5-SIS-02 a 05 exigem simular falha de endpoint. Isso não depende da massa: ver Pendências de Massa de Dados.

| ID | Pré-condição | Passos | Resultado Esperado | Dados de Teste | RN/EX Relacionada |
|---|---|---|---|---|---|
| CT-E5-SIS-01 | Resposta de `GET /api/v1/menu` propositalmente lenta | Autenticar e observar o menu durante a carga | Skeleton no lugar da árvore. Busca e Favoritos não aparecem enquanto carrega | — | 02-Especificação, Mapeamento de Componentes (Skeleton); 03-Protótipo v1.6 |
| CT-E5-SIS-02 | `GET /api/v1/menu` simulando falha (500) | Autenticar | Estado de erro no lugar do menu: MSG-E5-03 ("Não foi possível carregar o menu. Tente novamente.") + botão "Tentar novamente" (MSG-B5-01). Sem árvore, sem Favoritos, sem busca | — | EX-E5-04 |
| CT-E5-SIS-03 | Estado de CT-E5-SIS-02; endpoint restabelecido | Tocar em "Tentar novamente" | Menu carrega normalmente (estado de CT-E5-EST-01 / CT-E5-FAV-01, conforme o usuário) | — | EX-E5-04 |
| CT-E5-SIS-04 | U2 na Clínica Teste A; `POST .../favorite` simulando falha | Tocar na estrela vazia de "PEP" | A estrela mostra o estado de carregamento durante a requisição e depois **volta a vazia**. Toast de erro MSG-E5-01 ("Não foi possível atualizar seus favoritos. Tente novamente."). Favoritos não muda | — | EX-E5-03 |
| CT-E5-SIS-05 | U1 na Clínica Teste A; `DELETE .../favorite` simulando falha | Tocar na estrela preenchida de "Agenda do Médico" | A estrela **volta a preenchida**, Agenda do Médico continua nos Favoritos, toast MSG-E5-01 | — | EX-E5-03 |
| CT-E5-SIS-06 **(API)** | Sem token de sessão | Chamar `GET /api/v1/menu` | 401 | — | 02-Especificação, `GET /api/v1/menu`, Códigos |

---

## 8. Idioma e Mensagens

| ID | Pré-condição | Passos | Resultado Esperado | RN/SBIS Relacionada |
|---|---|---|---|---|
| CT-E5-MSG-01 | Interface em pt-BR | Provocar cada estado do catálogo durante a execução das Seções 2-7 e conferir o texto exibido | Cada texto bate **exatamente** com o catálogo da 02-Especificação v1.5: MSG-E5-01, MSG-E5-03, MSG-I5-01, MSG-I5-02, MSG-P5-01, MSG-T5-01, MSG-B5-01 ("Tentar novamente"), MSG-B5-02 ("Trocar"). Nenhum termo técnico (nome de tabela, código HTTP, stack trace) visível ao usuário | SBIS ECF.17.18, ECF.17.19 |
| CT-E5-MSG-02 | Interface em pt-BR | Percorrer todos os rótulos do menu (grupos, itens, botões, cabeçalho) | Todos em português do Brasil | SBIS ECF.17.18 |

> **Nota sobre en-US/es-419:** o catálogo traz as 3 línguas, mas o mecanismo de troca de idioma não é especificado neste épico. Os textos em en-US/es-419 não têm CT até esse mecanismo ser definido em algum documento.

---

## 9. Matriz de Rastreabilidade

| Área | Casos | RN cobertas | CA / EX cobertos | SBIS | Cobertura |
|---|---|---|---|---|---|
| Estrutura e filtragem | CT-E5-EST-01 a 11 | RN-CIU-026, 027 | CA-010.1, CA-010.9; EX-E5-01 | NGS1.03.01, NGS1.03.03 | Caminho feliz, ordem por perfil, item sem grupo (massa inventada), `ExibeMenu='N'`, perfil vazio. Tudo depende da massa proposta |
| Favoritos | CT-E5-FAV-01 a 14 | RN-CIU-028, RN-CIU-005 | CA-010.2, CA-010.3 | NGS1.03.01, NGS1.03.07 | Caminho feliz, ordem alfabética (caso-limite de collation), favoritos por clínica, exclusão lógica/reativação, 404. FAV-14 depende de decisão sobre o filtro de `favoritos[]` (ver observação na Seção 3) |
| Busca | CT-E5-BUSCA-01 a 08 | RN-CIU-030, 027 | CA-010.4; EX-E5-02 | NGS1.03.01 | Caminho feliz, não revelação de item oculto, estado vazio, restauração do estado dos grupos, ausência de chamada de rede. BUSCA-08 (maiúsculas/acentos) sem resultado esperado definido |
| Responsivo | CT-E5-RESP-01 a 10 | RN-CIU-029 | CA-010.7, CA-010.8 | — | Desktop expandido/recolhido e mobile overlay completos. RESP-06 (recolhido sem favoritos) sem resultado esperado definido. Largura de corte só no Protótipo (960px) |
| Cabeçalho, Trocar e Rodapé | CT-E5-CAB-01 a 06 | RN-CIU-026, 028; RN-CIU-009 (E1) | CA-010.5, CA-010.6 | NGS1.03.07 | Completo. CAB-05 depende de `clinicaAtual` [PROPOSTA] |
| Exceções e falhas | CT-E5-SIS-01 a 06 | — | EX-E5-03, EX-E5-04 | — | Os 4 EX deste épico cobertos (EX-E5-01 em EST-10, EX-E5-02 em BUSCA-04). SIS-02 a 05 exigem mecanismo de simulação de falha a definir pela QA |
| Idioma e mensagens | CT-E5-MSG-01, 02 | — | — | ECF.17.18, ECF.17.19 | Só pt-BR. en-US/es-419 sem mecanismo especificado |

**Cobertura dos critérios de aceitação:** 9/9 (CA-010.1 a CA-010.9). **Fluxos de exceção:** 4/4 (EX-E5-01 a EX-E5-04). **Requisitos SBIS do épico:** 5/5.

**Não coberto, por decisão de escopo:** tela inicial (`ProcessoAbertura`/`CodProfissional`, ver Seção 1); volume/desempenho (a Especificação não define limite de itens nem meta de tempo de carga); concorrência (o mesmo usuário favoritando o mesmo item em duas abas ou dispositivos ao mesmo tempo, não especificado).

**Lacunas de especificação identificadas ao redigir este documento** (nenhuma corrigida nos documentos 01-04, todas para decisão do solicitante):

1. Busca: tratamento de maiúsculas/minúsculas e acentos (CT-E5-BUSCA-08).
2. Menu recolhido sem nenhum favorito (CT-E5-RESP-06).
3. Filtro de `favoritos[]` no 04-Mapeamento §4.1 não exclui itens retirados do perfil (CT-E5-FAV-14).
4. Comportamento da seção Favoritos durante uma busca ativa: a Especificação não diz se ela é filtrada, ocultada ou mantida. Sem CT até haver definição.
5. Grupo cujos itens estão todos sem liberação (`ExibeMenu='N'`): a Especificação não diz se o grupo aparece vazio ou some. **Inferência deste documento, não confirmada:** como `grupos` é montado a partir dos itens liberados (04-Mapeamento §4.1), o grupo não deveria aparecer. Sem CT até haver confirmação.
6. Comportamento da interface ao receber 401 de `GET /api/v1/menu` (sessão expirada): fora deste épico (E1). Só o código HTTP é testado (CT-E5-SIS-06).

---

## 10. Histórico de Versões

- **v1.0** (05/10/2026) — Versão inicial, a pedido do solicitante ("crie os Cenários de testes do Épico 5", tomando como modelo o Cenários de Teste da Central do Médico v1.26). Até esta versão, nenhum épico do Check-in de Usuários tinha documento de cenários de teste. Construído a partir de 01-Definição v1.7, 02-Especificação v1.5, 03-Protótipo v1.6 (.md e .html) e 04-Mapeamento de BD v1.5. Cada caso cita a RN, CA, EX ou seção de onde veio; nenhuma regra nova foi criada.
	- **Massa de dados:** não existe massa de teste para este épico. A massa da Seção 1 é **[PROPOSTA]**: árvore de exemplo do Protótipo v1.6 + 1 item sem grupo inventado ("Item Sem Grupo (teste)") + 3 usuários (U1 multi-clínica, U2 clínica única, U3 perfil vazio) + 3 perfis (PERFIL-A, PERFIL-B com ordem invertida, PERFIL-VAZIO) + 2 clínicas. Todos os nomes são rótulos deste documento, não registros reais. Precisa ser criada e confirmada antes da execução.
	- **57 casos** em 7 áreas: Estrutura e filtragem (11), Favoritos (14), Busca (8), Responsivo (10), Cabeçalho/Trocar/Rodapé (6), Exceções e falhas (6), Idioma e mensagens (2). Cobertura: 9/9 CA, 4/4 EX, 5/5 requisitos SBIS.
	- **Valores não normativos usados como referência:** largura de corte desktop/mobile de **960px** e comportamento da busca (ignora maiúsculas/minúsculas, não ignora acentos), ambos lidos do código do Protótipo v1.6, porque a Especificação não define. Ficam sinalizados como referência, não como regra.
	- **Achado registrado (CT-E5-FAV-14):** o filtro de `favoritos[]` no 04-Mapeamento de BD v1.5 §4.1 não repete os filtros de liberação (`ExibeMenu`, `RemovidoEm` de `ClientePerfilAcessoProcesso`/`ClienteProcesso`) aplicados a `grupos`/`itensSemGrupo`. Isso pode permitir que um favorito de item retirado do perfil continue visível, contrariando RN-CIU-027. O Mapeamento não foi alterado; o caso foi escrito com o resultado esperado pela regra de negócio.
	- **5 outras lacunas de especificação** listadas ao final da Seção 9 (busca × maiúsculas/acentos, recolhido sem favoritos, Favoritos durante busca, grupo sem itens liberados, tratamento de 401 na interface). Os casos correspondentes ficam marcados "resultado a definir" ou sem CT.
	- Revisão por Dois Críticos: não aplicável. É cobertura de teste para comportamento já especificado, sem decisão de modelagem nova.
