Skip to content

Política de Incidentes

Definição formal do que é um incidente, como classificar e como adicionar novos — Última atualização: 2026-03-24


1. Definição

Incidente = evento técnico anômalo que requer atenção operacional.

Log de auditoria = registro de ação normal do sistema para rastreabilidade.

Incidentes aparecem no painel de Incidentes (/admin → Incidentes). Logs aparecem apenas na aba Logs.


2. O que É um incidente

CategoriaExemplosAção típica
Falha de infraestruturaEdge function 500, timeout, probe falhoedge.erro_500, healthcheck.falha
Falha de CRONJob não executou, erro durante execução<job>.erro, <job>.alerta
Falha de integração externaMensagem WhatsApp não enviada, webhook rejeitado, pagamento com errosms.falha_cobranca, faturamento.erro
Bloqueio de segurançaRate-limit atingido, IP bloqueado, lockout, RBAC negadoportal.rate_limit_bloqueado, permissao.acesso_negado
Health check degradadoProbe respondeu mas com latência alta ou erro parcialhealthcheck.degradado

3. O que NÃO é incidente

SituaçãoMotivoOnde aparece
Matrícula errada, CPF não encontradoErro de input do usuário, não técnicoLog de auditoria
OTP expirado ou inválidoFluxo normal de segurançaLog de auditoria
Verificações de rotina OK (ex: sessão WhatsApp OK)Rotina bem-sucedidaNem log (ou log info)
Operações CRUD normaisFluxo operacional padrãoLog de auditoria
Reads / consultasNunca logadosNenhum

Regra de ouro: Se o erro é causado pelo input do usuário → log. Se é causado por falha técnica/infra/integração → incidente.


4. Convenção de nomes de ações

Ações de incidente (monitoradas automaticamente)

<modulo>.erro              → Erro técnico genérico do módulo
<modulo>.falha_<operacao>  → Falha em operação específica
<modulo>.critico           → Situação crítica que requer ação imediata
<modulo>.alerta            → Alerta que pode escalar
<modulo>.bloqueado         → Bloqueio de segurança ativado

Ações normais (apenas log de auditoria)

<modulo>.<operacao>        → Ação CRUD normal (escola.create, usuario.update)
<modulo>.login             → Login bem-sucedido
<modulo>.logout            → Logout

Exemplos

AçãoTipoMonitorada?
escola.createLog normal
escola.updateLog normal
sms.falha_cobrancaIncidente
sms.enviadoLog normal
healthcheck.falhaIncidente
faturamento.erroIncidente
portal.rate_limit_bloqueadoIncidente
auth.bloqueio_escola_statusIncidente
manutencao.check_whatsapp_sessionNÃO é incidente❌ (rotina)

5. Classificação de severidade

Derivada automaticamente pelo sufixo/conteúdo da ação:

SeveridadePalavras-chave na açãoCor no painel
Críticoerro, falha, critico, 500🔴 Vermelho
Alertaalerta, bloqueio, bloqueado, degradado🟡 Amarelo
InfoDemais (ex: permissao.acesso_negado)🔵 Azul

6. Regra para novas features

Ao criar uma nova Edge Function:

  1. Toda operação CUD deve chamar registrarLog() com req
  2. Se a operação pode falhar por motivo técnico (não por input do usuário):
    • Criar ação com sufixo .erro ou .falha_<operacao>
    • Adicionar à lista de ações monitoradas (ver seção 7)
  3. Se é um job CRON novo:
    • Adicionar errorActions no CRON_JOBS_REGISTRY em _shared/cron-jobs.ts
  4. Se é integração externa (SMS, pagamento, webhook):
    • Sempre ter ação .erro ou .falha_* para falhas de comunicação

Ao atualizar uma feature existente:

  • Verificar se novos modos de falha técnica foram introduzidos
  • Se sim, adicionar ação de incidente correspondente

7. Onde registrar ações monitoradas

Jobs CRON → CRON_JOBS_REGISTRY

typescript
// supabase/functions/_shared/cron-jobs.ts
{
  jobName: 'meu-novo-job',
  errorActions: ['meu_modulo.erro', 'meu_modulo.falha_operacao'],
  // ...
}

Outras ações (segurança, integrações) → acoesExtras

typescript
// supabase/functions/admin-cron-monitor/index.ts
// Na lista acoesExtras dentro da função de incidentes
'meu_modulo.erro',
'meu_modulo.falha_operacao',

8. Extração de erro (extrairErroIncidente)

A função extrairErroIncidente(acao, detalhes) no admin-cron-monitor extrai a mensagem de erro legível do JSONB detalhes. Ao criar novas ações de incidente, garantir que o campo de erro está acessível:

Padrão recomendadoCampo no detalhes
Erro genérico{ erro: "mensagem" }
Erro com motivo{ motivo: "razão" }
Erro com message{ message: "texto" }
RBAC{ recurso, papel_usuario, papel_requerido }
Rate limit{ tipo_bloqueio, acao_bloqueada, falhas_acumuladas }

Se usar um campo diferente, atualizar extrairErroIncidente para mapeá-lo.


Referências

  • supabase/functions/admin-cron-monitor/index.ts — Painel de incidentes e função extrairErroIncidente
  • supabase/functions/_shared/cron-jobs.ts — Registry de jobs CRON
  • supabase/functions/_shared/logging-helper.ts — Helper de logging
  • docs/security/AUDIT_LOG.md — Catálogo de ações de log
  • docs/operations/CRON_JOBS.md — Documentação de jobs CRON