# Logs e Auditoria — Registro de Decisões (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](./Cen%C3%A1rios%20de%20Teste%20v1.0.md) (v1.0) · 05 - Registro de Decisões (v1.0)

Legenda: **D-LOG** = decisão do solicitante; **E-LOG** = escolha do Designer (**[INVENÇÃO]**, a aprovar); **P-LOG** = pergunta em aberto.

---

## Decisões do solicitante (D-LOG)

| ID | Decisão | Data | Reflexo |
|---|---|---|---|
| D-LOG-001 | Dois registros distintos: log de sistema (suporte, anomalias pontuais e estatísticas) e trilha de auditoria (tudo no prontuário e funcionalidades coligadas; ONA, SBIS; busca de responsáveis) | 11/2026 | RN-LOG-001 |
| D-LOG-002 | Identificador opaco do paciente na trilha, sendo o `IdPaciente` | 11/2026 | RN-LOG-015 |
| D-LOG-003 | Hospedagem SaaS na nuvem do fornecedor; backend .NET (C#); Grafana, Loki e Prometheus operados pela própria equipe, em contêineres | 11/2026 | 2.3.1 |
| D-LOG-004 | Tenant como campo do log, não como rótulo do Loki; métricas com granularidade enxuta (HTTP por endpoint sem tenant; métrica enxuta com tenant; métricas de banco com tenant). Razão do solicitante: erros e anomalias de sistema quase sempre afetam todos os tenants; acessos indevidos são tratados no Segurança; tenant só importa quando o problema é o banco do cliente | 11/2026 | RN-LOG-006, 007 |
| D-LOG-005 | Mecanismo de auditoria para o sistema todo, com categorias distintas; processo de auditoria no Segurança (`IpSeguranca`) para eventos de segurança, o que leva a dois repositórios (global e por cliente) | 11/2026 | RN-LOG-011, 012 |
| D-LOG-006 | Log de sistema pode ser temporário no Loki, mas há desejo de guardar de 1 a 2 anos, para auditorias do passado em funcionalidades fora do PEP | 11/2026 | RN-LOG-009 |
| D-LOG-007 | Medir o volume de logs antes de decidir o armazenamento | 11/2026 | P-LOG-02, 03 |
| D-LOG-008 | Usar partições para a trilha; verificar se o PostgreSQL (possível migração) tem função semelhante | 11/2026 | RN-LOG-026; 4.4 |
| D-LOG-009 | Integridade, fase 1: permissões e hash por linha; as demais etapas (lote, selo externo) só depois, se necessárias | 11/2026 | RN-LOG-025 |
| D-LOG-010 | Os dois sistemas devem ser simples, fáceis de incorporar nas APIs e bibliotecas, integrados ao framework ou avisando o desenvolvedor da falta | 11/2026 | RN-LOG-021 |

## Escolhas do Designer (E-LOG) — [INVENÇÃO], a aprovar

| ID | Escolha | Motivo |
|---|---|---|
| E-LOG-001 | Pacotes `Gemed.Telemetry` e `Gemed.Audit` | Separar o que é de suporte do que é de responsabilização |
| E-LOG-002 | Gravar a trilha na mesma transação, com falha fechada; fila de saída só se a trilha mudar de banco | Evita operação sem rastro; o padrão de fila existe em `mensageria.OutboxEvento` |
| E-LOG-003 | Captura por atributos, interceptador do EF Core e chamada explícita | Cobre leitura, escrita e segurança sem esforço do desenvolvedor |
| E-LOG-004 | Catálogo de eventos como enumeração em código, gerando a matriz NGS1.07.03 | Uma fonte de verdade para código, tela e conformidade |
| E-LOG-005 | Numeração do tipo de evento por faixas (1001, 2001, 3001) | Estável e legível |
| E-LOG-006 | Modelo lógico neutro com mapeamento para SQL Server e PostgreSQL | Migração em aberto |
| E-LOG-007 | Não reutilizar `Log`/`LogComplemento` | Finalidade não confirmada; faltam campos e proteção |
| E-LOG-008 | Hash SHA-256 por linha, calculado pela aplicação | Independe do banco |
| E-LOG-009 | Exportação em CSV e JSON | Formato aberto simples |
| E-LOG-010 | Tela no contexto Segurança, com perfil "Auditor" | Mantém o acesso separado (NGS1.07.02) |
| E-LOG-011 | Eventos clínicos e de segurança com falha fechada; só "erro de processo operacional" com falha aberta | Rastro obrigatório sem travar o diagnóstico |
| E-LOG-012 | Eventos de segurança e gestão no repositório global; clínicos e operacionais do cliente no repositório do cliente | Onde o dado nasce |
| E-LOG-013 | `TraceId` na trilha | Liga o auditor ao suporte |
| E-LOG-014 | Evento de alteração (AUD-RES-005) e evento operacional fora do RES (AUD-OPE-010) | Decorre do pedido "tudo que foi feito" e de D-LOG-005 |

## Perguntas em aberto (P-LOG)

| ID | Pergunta | Quem responde |
|---|---|---|
| P-LOG-01 | NGS1.07.06: o identificador opaco e os nomes de campos atendem ao requisito? O `PEPLog.NovoValor` legado conflita? | Certificador SBIS |
| P-LOG-02 | Volume do log de sistema; retenção por nível; MinIO/S3; Mimir, Thanos ou VictoriaMetrics para 1 a 2 anos de métricas | Medição, equipe |
| P-LOG-03 | Volume da trilha; compressão (PostgreSQL: ZFS, TimescaleDB ou Citus colunar); necessidade de camada fria | Medição, equipe |
| P-LOG-04 | Prazo legal e do certificador de guarda da trilha | Jurídico, certificador |
| P-LOG-05 | A camada de dados é EF Core? Se não, o interceptador vira decorador do repositório | Arquitetura |
| P-LOG-06 | NGS1.07.02: permissões e hash bastam, ou o certificador exige selo em lote ou externo? | Certificador SBIS |
| P-LOG-07 | Destino das tabelas `Log` e `LogComplemento` do `IpSeguranca` | Solicitante |
| P-LOG-08 | Haverá unificação de pacientes? | Solicitante |
| P-LOG-09 | SQL Server ou PostgreSQL como banco final | Solicitante |
| P-LOG-10 | Versão do Loki com suporte nativo a OTLP | Equipe |
| P-LOG-11 | Precisa apagar logs de um tenant específico (por exemplo, fim de contrato)? Isso muda a retenção por tenant | Solicitante |
| P-LOG-12 | Quem recebe o perfil "Auditor" por padrão na implantação | Solicitante |
| P-LOG-13 | A tela do auditor pode mostrar o nome do paciente (resolvido na hora a partir do `IdPaciente`, sem guardar na trilha) ou só o identificador? Depende de P-LOG-01 | Solicitante, certificador |

---

## Histórico de Versões

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