Log de auditoria
Público
Este artigo é para operadores da plataforma GCM. Administradores de igreja veem uma fatia por organização dos mesmos dados em Configurações -> Atividade em seu espaço de trabalho — esta página é o superconjunto entre tenants, restrito à equipe.
O Log de auditoria (/platform/audit) é o registro canônico de cada ação de equipe e de cada evento relevante para segurança no GCM. Organização criada, plano alterado, reembolso emitido, personificação iniciada, personificação encerrada, falha de login, redefinição de senha disparada, função atribuída — tudo aterrissa em platform_audit_log com o ator, o alvo, o timestamp e um blob de metadados JSONB. Esta aba é como você pergunta "quem fez o quê, quando, para quem".

A faixa de KPI
Três contagens no topo, todas ao vivo:
- Total de eventos — cada linha em
platform_audit_log, desde sempre. Útil sobretudo como verificação de sanidade de que o gravador ainda está gravando. - Eventos hoje — linhas desde a meia-noite no fuso horário da plataforma. Um dia normal são alguns milhares; um fim de semana tranquilo, algumas centenas. Um zero repentino geralmente significa que o gravador de auditoria quebrou.
- Personificações (7 dias) — linhas onde
action ilike '%impersonat%'na semana passada. Essa é a métrica para observar — cada início, fim e falha de personificação conta. Picos aqui merecem uma leitura rápida.
O visualizador
Abaixo da faixa fica o componente unificado AuditLogViewer, também usado pela página de Atividade com escopo de organização. Ele suporta:
- Intervalo de datas — de / até com granularidade diária. Padrão dos últimos 30 dias.
- Ação — dropdown de valores distintos em
platform_audit_log.action. A lista é preenchida automaticamente a partir do DB para se manter atual conforme novas ações são adicionadas. - Ator — correspondência parcial de e-mail. Use para restringir a um usuário da equipe.
- Organização — por id da organização. Pesquisa o caminho jsonb
metadata->>target_org_idpara pegar cada evento que menciona uma organização, mesmo quando o próprioorganization_idda linha é nulo.
Os filtros se compõem; limpar um mantém os outros ativos.
Lendo uma linha
Cada linha na tabela mostra:
- Quando — timestamp exato.
- Ação — o verbo. O conjunto completo é documentado na migração que adiciona a restrição da coluna; as comuns incluem
org_created,plan_updated,refund_processed,subscription_overridden,impersonation_started,impersonation_failed,email_template_updated,auth_login_failed. - Ator — e-mail do usuário da equipe que disparou a linha. Linhas de função edge e cron mostram
system@geniuschurchmanager.com. - Alvo — o nome da organização afetada (resolvido a partir dos metadados) ou "platform" para linhas em toda a plataforma.
- Metadados — preview JSONB truncado.
Clique em qualquer linha para expandir os metadados. Reembolsos, por exemplo, armazenam o valor original, o valor do reembolso, o método manual (se fora da plataforma) e o texto do motivo. Sobreposições de assinatura armazenam os valores antes / depois de cada campo alterado.
Investigações comuns
"Quem reembolsou aquele pagamento de US$ 79 da First Church na terça?" Filtre action = refund_processed, defina o intervalo para terça, filtre organization = First Church. A coluna do ator é sua resposta.
"Alguém da nossa equipe entrou no espaço de trabalho da Second Baptist este mês?" Filtre action = impersonation_started, defina o intervalo para "o mês", filtre organization = Second Baptist. Cada linha carrega o motivo nos metadados — leia-os a seguir.
"O plano do cliente realmente mudou na semana passada ou ele está imaginando?" Filtre action = plan_updated, filtre organization = <a org dele>. Se existir uma linha, os metadados mostram o id do plano antes/depois e quem fez. Se não existir linha, o cliente está se enganando — mas verifique também subscription_overridden caso a mudança tenha passado pelo diálogo de edição de operações de faturamento.
"Quantos logins falharam nas últimas 24 horas?" Ação auth_login_failed, intervalo "ontem até hoje". Cruze o ator com a aba Usuários para ver se uma conta está sendo alvo.
Referência de ações (as importantes)
| Ação | Quando dispara | Metadados-chave |
|---|---|---|
org_created | Nova organização provisionada | org_name, org_slug, plan_id, created_by_admin |
org_deleted | Exclusão definitiva | org_name, org_slug, member_count, reason |
plan_updated | Mudança de plano em linha na aba Organizações | target_org_id, previous_plan, new_plan |
subscription_overridden | Diálogo Editar assinatura | target_org_id, before, after, reason, email_sent |
renewal_triggered | Renovação manual (modo cobrança) | target_org_id, mode, reason, result |
refund_processed | Modal de reembolso | payment_history_id, amount, refund_type, reason |
impersonation_started | Abrir conta a partir da ficha da organização | target_org_id, org_name, reason |
impersonation_ended | Retorno à plataforma | target_org_id |
impersonation_failed | RPC rejeitou o início | target_org_id, reason, error |
email_template_updated | Salvar na aba Modelos de e-mail | slug, before, after |
landing_content_updated | Salvar na aba Landing | section, content_key, locale, before, after |
branding_settings_saved | Salvar na aba Marca | keys |
auth_login_failed | Senha errada ou e-mail desconhecido | email, ip, user_agent |
A lista não é exaustiva — novas ações são adicionadas com cada recurso.
Retenção
platform_audit_log não é expurgado automaticamente. As linhas vivem para sempre até que alguém as exclua, e deliberadamente não expomos uma UI para fazer isso — a trilha de auditoria é a trilha de auditoria. Se você precisa reduzir o tamanho da tabela para uma migração, escreva uma migração que arquive para uma tabela de armazenamento frio e documente em docs/runbooks/.
O que você não pode fazer aqui
O visualizador é somente leitura. Não há "editar", não há "anotar", não há "marcar como importante". Se precisa anexar contexto a uma linha, escreva uma nova linha realizando a ação que ela descreve (por exemplo, adicione um comentário Slack no ticket que a linha de auditoria referencia, ou abra o issue Sentry vinculado). Trate o log de auditoria como uma caixa-preta de aeronave: somente leitura, escrita única, nunca o lugar que você visita para limpar um problema.
