# Logs e Auditoria — Cenários de Teste (v1.0)

**Documentos desta funcionalidade:** [01 - Definição](./01%20-%20Defini%C3%A7%C3%A3o%20v1.0.md) (v1.0) · [02 - Especificação](./02%20-%20Especifica%C3%A7%C3%A3o%20v1.0.md) (v1.0) · [03 - Protótipo](./03%20-%20Prot%C3%B3tipo%20v1.0.md) (v1.0) · [04 - Mapeamento de Banco de Dados](./04%20-%20Mapeamento%20de%20Banco%20de%20Dados%20v1.0.md) (v1.0) · Cenários de Teste (v1.0) · [05 - Registro de Decisões](./05%20-%20Registro%20de%20Decis%C3%B5es%20v1.0.md) (v1.0)

## Escopo

Cobre RN-LOG-001 a 029 e os critérios CA-LOG. Tipos: **API** (serviço), **BD** (banco), **UI** (tela do auditor), **BLD** (build e CI), **OBS** (observabilidade: Loki, Prometheus, Grafana). Tudo que depende de decisão em aberto (P-LOG) está indicado.

## Usuários e massa de teste [PROPOSTA]

| Item | Descrição |
|---|---|
| Usuário clínico | Médico com acesso ao prontuário |
| Usuário auditor | Perfil "Auditor" com o direito "Visualizar auditoria" |
| Usuário sem direito | Enfermeiro sem o direito |
| Administrador | Gestão de usuários e perfis |
| Pacientes | `IdPaciente` 101 a 104 (fictícios) em um banco de cliente de teste |
| Clientes | Dois tenants de teste, para conferir o isolamento por cliente |

## 1. Log de sistema

| ID | Tipo | Cenário | Esperado | RN / CA |
|---|---|---|---|---|
| CT-LOG-001 | API | Forçar erro 500 em um endpoint | Resposta com mensagem simples e `traceId` como código; o mesmo `traceId` no log | RN-LOG-004; CA-LOG-001.1 |
| CT-LOG-002 | OBS | Buscar no Grafana pelo `traceId` e pelo `userId` | Dashboard "Um usuário" mostra a sequência de requisições | CA-LOG-001.2 |
| CT-LOG-003 | OBS | Inspecionar um lote de logs após operações com paciente | Nenhum nome, CPF, prontuário ou valor clínico | RN-LOG-003; CA-LOG-002.1 |
| CT-LOG-004 | OBS | Listar rótulos do Loki | Apenas `service`, `environment`, `level` | RN-LOG-006; CA-LOG-002.2 |
| CT-LOG-005 | OBS | Derrubar a conexão com o banco de um tenant | Métrica de banco com tenant sobe e o alerta dispara | RN-LOG-007, 008; CA-LOG-003.1 |
| CT-LOG-006 | OBS | Verificar métrica HTTP | Por endpoint, sem tenant | RN-LOG-007 |
| CT-LOG-007 | API | Derrubar o Collector durante uma operação | Operação conclui; log reenviado depois | RN-LOG-010; CA-LOG-004.1 |
| CT-LOG-008 | API | Acionar tradução ausente (DT-011) | Log com `SYS-TRD-001` | RN-LOG-005 |
| CT-LOG-009 | API | Gerar erro com exceção técnica | Usuário não vê texto técnico (ECF.17.19) | RN-LOG-004 |

## 2. Auditoria: captura

| ID | Tipo | Cenário | Esperado | RN / CA |
|---|---|---|---|---|
| CT-LOG-101 | API | Abrir um prontuário | Um evento AUD-RES-003 com `IdPaciente`; sem nome, CPF ou prontuário | RN-LOG-015; CA-LOG-005.1 |
| CT-LOG-102 | API | Abrir o mesmo prontuário de novo na janela | Nenhum evento novo | RN-LOG-020; CA-LOG-005.2 |
| CT-LOG-103 | API | Carregar a Agenda do dia, repetir o polling do mesmo dia, abrir o PEP | Um evento da carga, nenhum do polling, um da abertura (torna CT-AGM-API-08 executável) | RN-LOG-020 |
| CT-LOG-104 | API | Alterar dois campos de um registro clínico | Evento AUD-RES-005 com os dois nomes de campo e nenhum valor | RN-LOG-016; CA-LOG-006.1 |
| CT-LOG-105 | API | Criar, duplicar, inativar registro | Eventos AUD-RES-001, 002, 004 | RN-LOG-011 |
| CT-LOG-106 | API | Imprimir, exportar e importar dados | Eventos AUD-RES-008, 007, 006 | RN-LOG-011 |
| CT-LOG-107 | BD | Forçar falha na gravação do evento clínico | Operação desfeita; mensagem LOG-EMSG-06 com código | RN-LOG-014; CA-LOG-006.2 |
| CT-LOG-108 | API | Forçar falha na gravação de AUD-OPE-006 | Operação segue; evento vai ao log de sistema | EX-LOG-02 |
| CT-LOG-109 | API | Alteração de cadastro fora do RES (ex.: administrativo) | Evento AUD-OPE-010, categoria operacional | RN-LOG-011 |
| CT-LOG-110 | BD | Operação com dois tenants | Cada evento no banco do seu cliente, com `ClienteBDId` correto | RN-LOG-017 |

## 3. Auditoria: segurança (repositório global)

| ID | Tipo | Cenário | Esperado | RN / CA |
|---|---|---|---|---|
| CT-LOG-201 | API | Login com senha errada | AUD-USR-002 em `IpSeguranca`; sem a senha | CA-LOG-007.1 |
| CT-LOG-202 | API | Login com sucesso | AUD-USR-001 em `IpSeguranca` | RN-LOG-012 |
| CT-LOG-203 | API | Troca de senha, bloqueio e desbloqueio de conta, mudança de perfil | Eventos AUD-USR-003 e AUD-OPE-001 no global | CA-LOG-007.2 |
| CT-LOG-204 | API | Encerrar e bloquear sessão; aceitar termo de uso | AUD-USR-008, 009, 010 | NGS1.07.04 |
| CT-LOG-205 | API | Login com usuário inexistente | Evento com o login informado em `Detalhe`; `UsuarioId` nulo | 4.4.1 |

## 4. Imutabilidade e integridade

| ID | Tipo | Cenário | Esperado | RN / CA |
|---|---|---|---|---|
| CT-LOG-301 | BD | Com o papel da aplicação, tentar UPDATE, DELETE, TRUNCATE na trilha | Recusado nos dois repositórios | RN-LOG-013; CA-LOG-008.1 |
| CT-LOG-302 | BD | Recalcular `HashLinha` de linhas ao acaso | Confere | RN-LOG-025; CA-LOG-008.2 |
| CT-LOG-303 | BD | Alterar uma linha com o papel dono e recalcular | Hash não confere (prova de detecção) | RN-LOG-025 |
| CT-LOG-304 | BD | Inserir eventos em mês sem partição | Falha detectada e alerta; rotina cria partições dos próximos meses | L-05 |
| CT-LOG-305 | BD | Mesmo teste no SQL Server e no PostgreSQL | Mesmo resultado (condiciona P-LOG-09) | RN-LOG-026 |

## 5. Tela do auditor

| ID | Tipo | Cenário | Esperado | RN / CA |
|---|---|---|---|---|
| CT-LOG-401 | UI | Acessar sem o direito | Acesso negado; API também | RN-LOG-022; CA-LOG-009.1 |
| CT-LOG-402 | UI | Consultar um período | Lista cronológica, mesclando global e cliente | CA-LOG-010.1 |
| CT-LOG-403 | UI | Filtrar por evento, usuário e paciente | Só os eventos que atendem a todos | CA-LOG-010.2 |
| CT-LOG-404 | UI | Período inválido (início depois do fim; mais de 90 dias) | Erro LOG-EMSG-03; nada consultado | EX-LOG-05 |
| CT-LOG-405 | UI | Filtros sem resultado | LOG-EMSG-04 | EX-LOG-06 |
| CT-LOG-406 | UI | Repositório global fora do ar | Mostra o do cliente com aviso LOG-EMSG-07 | EX-LOG-07 |
| CT-LOG-407 | UI | Consultar evento antigo (mês arquivado, se houver) | Continua visível | RN-LOG-023; CA-LOG-010.3 |
| CT-LOG-408 | UI | Consultar e exportar | Eventos AUD-OPE-005 registrados | CA-LOG-009.2 |
| CT-LOG-409 | UI | Exportar CSV e JSON | Cabeçalho com software, instituição, CNES, CNPJ; datas RFC 3339 | RN-LOG-024; CA-LOG-011.1 |
| CT-LOG-410 | UI | Navegar só com teclado; leitor de tela; celular | Foco visível, Esc fecha painel, tabela com cabeçalhos, cartões no celular | 2.10 |
| CT-LOG-411 | UI | Trocar idioma e tema | Textos e cores corretos | 2.9 |
| CT-LOG-412 | API | Consultar paciente unificado (se existir unificação) | Eventos dos dois `IdPaciente` | EX-LOG-09; P-LOG-08 |

## 6. Salvaguardas para o desenvolvedor

| ID | Tipo | Cenário | Esperado | RN / CA |
|---|---|---|---|---|
| CT-LOG-501 | BLD | Endpoint sem `[Audited]` nem `[NotAudited]` | Build falha | CA-LOG-012.1 |
| CT-LOG-502 | BLD | `[NotAudited]` sem motivo | Build falha | RN-LOG-021 |
| CT-LOG-503 | API | Subir a aplicação com endpoint sem declaração | Não inicia e lista o endpoint | CA-LOG-012.2 |
| CT-LOG-504 | API | Subir sem `AddGemedAudit()` ou `AddGemedTelemetry()` | Não inicia | CA-LOG-012.3 |
| CT-LOG-505 | BLD | Controlador que usa o contexto de dados fora do ponto autorizado | Teste de arquitetura falha no CI | RN-LOG-021 |
| CT-LOG-506 | BLD | Template `dotnet new gemed-api` | Projeto novo já passa nos testes acima | 2.3.6 |
| CT-LOG-507 | BLD | Matriz NGS1.07.03 gerada do catálogo | Todo item de estágio 1 do catálogo tem evento | RN-LOG-018 |

## 7. Hora

| ID | Tipo | Cenário | Esperado | RN / CA |
|---|---|---|---|---|
| CT-LOG-601 | BD | Comparar instantes gravados em componentes diferentes | Todos em UTC, sem deriva | RN-LOG-027; CA-LOG-013.1 |

## Matriz de rastreabilidade

| RN | Casos |
|---|---|
| RN-LOG-001 a 010 | CT-LOG-001 a 009 |
| RN-LOG-011 a 020 | CT-LOG-101 a 110, 201 a 205 |
| RN-LOG-013, 025, 026 | CT-LOG-301 a 305 |
| RN-LOG-021, 018 | CT-LOG-501 a 507 |
| RN-LOG-022 a 024 | CT-LOG-401 a 412 |
| RN-LOG-027 | CT-LOG-601 |
| RN-LOG-028, 029 | sem caso nesta versão (dependem de P-LOG-04 e da funcionalidade de emergência) |

---

## Histórico de Versões

- **v1.0** (11/11/2026) — Criação (49 casos).
