Auditoria
Toda mutacao HTTP (POST/PUT/PATCH/DELETE) e cada erro gera entrada imutavel em audit_logs. Automatico via AuditInterceptor global.
Campos capturados
actorId,tenantId,municipioId(do TenantContext)requestId(correlacao end-to-end)method,route,statusentity(derivado da rota),entityId(param :id)ip,userAgentaction: CREATE / UPDATE / DELETE / LOGIN / LOGOUT / EXPORT / OTHERbefore,after(JSON; preenchido por servicos que querem rastrear)createdAt(imutavel)
Garantias
- Falha de persistencia do AuditSink NAO derruba o request (apenas warn).
- AuditLog NUNCA mistura
municipioIdentre tenants. - R15: registros nao podem ser deletados em runtime — politica de retencao por entidade.
Consumo no admin
GET /core/auditoria?page=1&pageSize=50 retorna timeline paginada (exige core.auditoria.ler).