Skip to main content
O AuditLog é um log de auditoria append-only que registra mutações auditáveis que ocorrem no sistema. Cada registro identifica o tipo de log, o domain, o recurso afetado, o usuário associado à ação e os dados necessários para rastreabilidade.

Campos

CampoTipoDescrição
auditLogIdUUIDIdentificador único
organizationIdUUID?Organização onde a mutação ocorreu (opcional)
userIdUUID?Usuário que realizou a ação (opcional — null em ações de sistema)
typeAuditLogTypeTipo do registro de log
domainAuditDomainDomain do recurso auditado
resourceAuditResourceEntity ou recurso auditado dentro do domain
resourceIdstringID da instância do recurso afetado
actionstringNome aberto da ação auditada
userAgentstring (nullable)User-Agent do cliente HTTP
ipstring (nullable)Endereço IP de origem
oldDataJSON (nullable)Estado anterior do recurso (null em CREATE)
newDataJSON (nullable)Estado posterior do recurso (null em DELETE)
createdByUUID?Usuário que criou o registro, quando aplicável
createdAtdatetimeData/hora do registro

Tipo do registro

type separa a origem do registro:
TipoUso
APPLICATION_LOGRegistro emitido por fluxo da aplicação, caso de uso, API ou ação de usuário
SYSTEM_LOGRegistro emitido por rotina automática, scheduler, integração ou processo interno
Esse campo não substitui action. Ele apenas classifica a origem do log.

Rastreamento

O trio domain + resource + resourceId identifica a instância auditada:
domain: "IDENTITY"    + resource: "USER"    + resourceId: "abc-123"  → Mutação no User abc-123
domain: "SALES"       + resource: "ORDER"   + resourceId: "def-456"  → Mutação no Order def-456
domain: "OPERATIONS"  + resource: "ROUTE"   + resourceId: "ghi-789"  → Mutação na Route ghi-789
Isso permite filtrar o histórico de auditoria por tipo de recurso e identificador.

Action aberta

action não é enum. Ela é uma string aberta, definida pela aplicação no momento do registro. A convenção recomendada é usar uma combinação legível de recurso + ação de negócio, como:
ExemploUso
USER_BLOCKEDUsuário bloqueado
SESSION_REVOKEDSessão revogada
SESSION_REVOKED_AUTOMATICALLYSessão revogada por rotina automática
ROUTE_APPROVEDRota aprovada
TICKET_REPRINTEDTicket reimpresso
BENEFIT_REQUEST_APPROVEDSolicitação de benefício aprovada

Exemplo de Registros

ORDER_CREATED

{
  "auditLogId": "0197a819-ae6c-7cd6-b872-1f6c898c50d9",
  "type": "APPLICATION_LOG",
  "domain": "SALES",
  "resource": "ORDER",
  "resourceId": "0197a813-0fb9-7d42-9c81-50c0f6d9ae5a",
  "action": "ORDER_CREATED",
  "oldData": null,
  "newData": {
    "orderId": "0197a813-0fb9-7d42-9c81-50c0f6d9ae5a",
    "companyId": "0197a801-6a42-79aa-9e56-d3c85148c0fa",
    "amount": 15000,
    "status": "PENDING"
  },
  "userId": "0197a805-0910-7eb2-bae7-90a13df2a9b2",
  "ip": "192.168.1.10",
  "createdAt": "2026-07-03T16:00:00.000Z"
}

USER_BLOCKED

{
  "auditLogId": "0197a819-b9b0-7b85-96c5-2bd4a2214e59",
  "type": "APPLICATION_LOG",
  "domain": "IDENTITY",
  "resource": "USER",
  "resourceId": "0197a7f5-2a88-7c1e-9b65-1f6d8f3b3a10",
  "action": "USER_BLOCKED",
  "oldData": {
    "status": "ACTIVE"
  },
  "newData": {
    "status": "BLOCKED"
  },
  "userId": "0197a805-0910-7eb2-bae7-90a13df2a9b2",
  "ip": "192.168.1.10",
  "createdAt": "2026-07-03T16:02:00.000Z"
}

ROUTE_APPROVED

{
  "auditLogId": "0197a819-c960-75c6-b82e-947c32b4a9c1",
  "type": "APPLICATION_LOG",
  "domain": "OPERATIONS",
  "resource": "ROUTE",
  "resourceId": "0197a80c-4204-7b77-9005-48cc23677587",
  "action": "ROUTE_APPROVED",
  "oldData": {
    "status": "PENDING_APPROVAL"
  },
  "newData": {
    "status": "ACTIVE"
  },
  "userId": "0197a805-0910-7eb2-bae7-90a13df2a9b2",
  "ip": "192.168.1.20",
  "createdAt": "2026-07-03T17:00:00.000Z"
}

SESSION_REVOKED_AUTOMATICALLY

{
  "auditLogId": "0197a819-d37f-708d-9c98-a3d51704fbd3",
  "type": "SYSTEM_LOG",
  "domain": "IDENTITY",
  "resource": "USER_SESSION",
  "resourceId": "0197a80c-4204-7b77-9005-48cc23677587",
  "action": "SESSION_REVOKED_AUTOMATICALLY",
  "oldData": {
    "status": "ACTIVE"
  },
  "newData": {
    "status": "REVOKED"
  },
  "userId": null,
  "ip": null,
  "createdAt": "2026-07-03T18:00:00.000Z"
}

Regras de Negócio

  • O AuditLog é append-only — registros são permanentes.
  • O userId identifica quem disparou a ação, mesmo que tenha sido uma operação automática (nesse caso, pode ser um usuário de sistema).
  • type = SYSTEM_LOG pode ter userId = null quando não houver ator humano ou usuário de sistema associado.
  • domain e resource são catálogos fixos. action é aberta e não deve virar enum.

Dados Capturados

DadoPropósito
typeClassifica se o registro vem da aplicação ou de uma rotina do sistema
domain / resource / resourceIdIdentifica exatamente a instância auditada
actionNomeia livremente a ação de negócio registrada
oldData / newDataPermite reconstruir o estado da entidade em qualquer ponto no tempo
userIdIdentifica o responsável pela mutação
userAgentIdentifica o cliente utilizado (browser, app, API)
ipIdentifica a origem da requisição
createdAtTimestamp preciso da mutação
O AuditLog pode ser utilizado para gerar relatórios de atividade, detectar padrões anômalos e atender solicitações de auditoria externa.