Por que usar o motor de regras
- Flexibilidade: Crie e modifique regras sem deploys de código
- Modelo de execução: o Tracer avalia expressões compiladas durante a validação
- Segurança de tipos: Sintaxe da expressão validada na criação da regra
- Sem curto-circuito: as regras correspondentes são avaliadas juntas, então a trilha de auditoria registra as regras que dispararam, não apenas a categoria vencedora
- Baseado em escopo: Aplique regras a segmentos, contas ou tipos de transação específicos
- Entender os conceitos do motor de regras e o fluxo de avaliação
- Criar e testar regras baseadas em expressões
- Gerenciar o ciclo de vida das regras (DRAFT, ACTIVE, INACTIVE, DELETED)
- Aplicar melhores práticas para gerenciamento de regras
O que é o motor de regras
O motor de regras é o componente do Tracer responsável por avaliar expressões durante a validação de transações. Ele permite que analistas de fraude e gestores de risco configurem lógica de negócios que executa em tempo real - sem necessidade de deploys de código ou suporte de engenharia.
Como funciona
Figure 1. Fluxo de avaliação do motor de regras
- Carregar regras busca todas as regras ativas do cache (ou banco de dados em caso de cache miss)
- Avaliar expressões executa a expressão CEL de cada regra cujo escopo corresponde à transação
- Coletar correspondências reúne todas as regras que corresponderam e determina a decisão
Padrão de avaliação
As regras cujo escopo corresponde à transação são avaliadas juntas. Não há ordenação por prioridade ou avaliação de curto-circuito. Isso garante:- Trilha de auditoria completa (todas as regras correspondentes são registradas)
- Sem perda de informação (analistas podem ver todos os gatilhos)
- Lógica simples (sem conflitos de prioridade)
- DENY — qualquer regra
DENYque corresponder vence imediatamente. - Limite excedido — se nenhuma regra DENY corresponder, mas algum limite aplicável for excedido, a decisão é DENY (a precedência das regras se aplica primeiro; limites entram apenas quando nenhuma DENY casou).
- REVIEW — se nenhuma regra DENY corresponder e nenhum limite for excedido, qualquer regra
REVIEWque corresponder vence. - ALLOW — se apenas regras
ALLOWcorresponderem, a decisão é ALLOW. - Padrão — se nenhuma regra corresponder, o Tracer retorna o
DEFAULT_DECISION_WHEN_NO_MATCHconfigurado (ALLOW, a menos que explicitamente definido comoDENYpara implantações fail-closed). ApenasALLOWeDENYsão aceitos;REVIEWnão é um valor válido como decisão padrão, e qualquer outro valor faz o serviço falhar na inicialização.
matchedRuleIds na resposta contém todas as regras que corresponderam, independente da categoria vencedora, para que consumidores de auditoria vejam todos os gatilhos.
Por que DENY vence REVIEW e REVIEW vence ALLOW. A precedência é fixa e não configurável, de propósito: remove a ambiguidade de “qual regra DENY vence?” em runtime e torna a auditoria trivial — a resposta sempre identifica a ação mais estrita que disparou. O custo é que você não consegue escrever “regras ALLOW que sobrescrevem DENYs”; se você precisa desse padrão, a resposta certa é tornar a regra DENY mais específica.
O Tracer retorna decisões; ele não bloqueia transações diretamente. Seu sistema recebe a decisão e é responsável por tomar a ação apropriada (ex.: bloquear, permitir ou enfileirar para revisão).
Conceitos principais
Antes de criar regras, entenda os elementos fundamentais.
Regras
Uma regra é uma unidade de lógica de negócios composta por:- Expressão - Uma expressão type-safe que avalia para true ou false
- Ação - Qual decisão retornar quando a expressão é verdadeira
- Escopos - A quais transações a regra se aplica
- Status - O estado do ciclo de vida da regra
Expressões
Expressões são escritas em CEL (Common Expression Language), uma linguagem type-safe que avalia o contexto da transação e retorna um valor booleano (true ou false). CEL fornece validação em tempo de compilação, então erros de sintaxe são detectados quando você cria a regra - não quando as transações estão sendo processadas. Exemplos de expressões:merchant.category é o código MCC ISO 18245 de 4 dígitos — "7995" é o MCC para apostas/cassino. Tanto merchant.category quanto merchant["category"] são aceitos; os exemplos em produção usam a notação com colchetes por convenção. Se precisar casar com um rótulo textual como "gambling", armazene-o em metadata e faça o match por lá.)
As expressões leem a requisição de validação através de dez variáveis. Para os tipos e formatos de campo por trás de cada uma, consulte o schema ValidationRequest na referência da API.
Valores de campo que vale conhecer antes de escrever uma condição:
account.statusaceitaactive,suspended,closed, eaccount.typeaceitachecking,savings,credit.merchant.categoryrecebe um código MCC ISO 18245 de 4 dígitos;merchant.countryrecebe um código ISO 3166-1 alpha-2.- Esses quatro campos são opcionais na requisição. Um campo que a requisição omite chega à sua expressão como string vazia, então uma condição que o compara com um valor específico é falsa.
segment.segmentId,portfolio.portfolioId,account.accountIdemerchant.merchantIdsão strings UUID.
segmentId e portfolioId ficam nas variáveis de primeiro nível segment e portfolio, não em account. Para filtrar por segmento, escreva segment.segmentId == "...", não account.segmentId == "...".Uma regra que lê um campo de contexto que a requisição não carrega não corresponde, e as outras regras seguem rodando — então você não precisa de uma guarda de presença para esse caso. Quando a presença em si é a condição que você quer, escreva size(segment) > 0 ou "risk_score" in metadata.O custo das expressões é limitado pelo
CEL_COST_LIMIT (padrão 10000). A verificação roda em tempo de compilação — na criação da regra, na atualização da expressão e novamente na ativação —, não apenas na ativação: uma expressão cujo custo estimado no pior caso excede o limite é rejeitada com o código de erro 0342 (limite de custo excedido) na primeira vez que você a envia. Erros de sintaxe aparecem como 0340, erros de tipo (incluindo uma expressão que não retorna um booleano) como 0341, e uma falha ao estimar o custo como 0345.Exemplos de expressões por caso de uso
Aqui estão exemplos práticos organizados por cenário de negócio:Regras baseadas em valor
Regras baseadas em comerciante
Regras baseadas em conta
Condições combinadas
Regras por horário
Usando metadata
Campos de metadata são fornecidos pela sua integração. Projete seu payload para incluir o contexto que suas regras precisam.
Ações
Ações determinam a decisão quando uma expressão avalia para true:Escopos
Escopos definem a quais transações uma regra se aplica. Uma regra semscopes é global e avalia contra qualquer transação. Uma regra com um ou mais objetos de escopo só avalia quando a transação corresponde a pelo menos um deles (semântica OR entre objetos de escopo).
Dentro de um único objeto de escopo, os campos suportados são:
segmentId- Corresponder transações de um segmento específicoportfolioId- Corresponder transações de um portfólio específicoaccountId- Corresponder transações de uma conta específicamerchantId- Corresponder transações para um comerciante específicotransactionType- Corresponder tipos de transação específicos (CARD, WIRE, PIX, CRYPTO)subType- Corresponder subtipos específicos (debit, credit, instant, etc.)
- Dentro de um objeto de escopo: os campos combinam com AND. Um campo não especificado funciona como wildcard (corresponde a qualquer valor). Pelo menos um campo deve estar definido — objetos de escopo vazios (
{}) são rejeitados com o código de erro0358. - Entre múltiplos objetos de escopo na mesma regra: combinam com OR. A regra corresponde se qualquer objeto de escopo corresponder à transação.
transactionType: CARD e outro filtrando transactionType: PIX — executa tanto para transações de cartão quanto para PIX. Um único escopo com segmentId E accountId exige que a transação corresponda ao segmento E à conta.
Ciclo de vida da regra
Regras progridem através de um ciclo de vida definido para garantir implantação segura.
Figura 2. Ciclo de vida e transições do motor de regras
Estados
Transições
Regras ativas devem ser desativadas antes da exclusão. Isso previne remoção acidental de regras que estão sendo avaliadas.
Criar uma regra
Crie regras usando
POST /v1/rules. Regras são criadas com status DRAFT por padrão.
Uma regra requer:
- name: Um nome descritivo, único dentro do seu contexto. O contexto é derivado dos escopos da regra (o menor
segmentIdentre eles); regras sem escopo compartilham um único contexto global. Assim, o mesmo nome de regra pode coexistir em dois segmentos diferentes, mas não duas vezes dentro de um. A comparação diferencia maiúsculas de minúsculas e preserva os espaços internos; os espaços no início e no fim são removidos antes de salvar. Uma colisão retorna409 Conflictcom o código de erro0441. Referencie a regra peloruleIdda resposta. - expression: Uma expressão CEL que avalia para true ou false
- action: A decisão a retornar quando a expressão corresponder (ALLOW, DENY ou REVIEW)
- scopes (opcional): Limita a quais transações a regra se aplica
Ativar e desativar regras
Após criar uma regra, ative-a para iniciar a avaliação. Desative regras para parar a avaliação sem excluí-las.
Desativar uma regra a preserva para fins de auditoria. Use exclusão apenas quando quiser remover permanentemente uma regra.
Listar e consultar regras
Consulte regras para gerenciamento e auditoria usando
GET /v1/rules.
Parâmetros de consulta
Obter uma regra específica
UseGET /v1/rules/{id} para recuperar a definição completa da regra incluindo expressão e escopos.
Atualizar uma regra
Atualize regras usando
PATCH /v1/rules/{id}. Regras podem ser atualizadas em qualquer status, com uma restrição importante:
Excluir uma regra
Exclua regras que não são mais necessárias. Apenas regras DRAFT e INACTIVE podem ser excluídas. Regras ACTIVE devem ser desativadas primeiro.
204 No Content
Melhores práticas
Siga estas práticas para regras eficazes e manuteníveis.
Nomenclatura
- Use nomes descritivos - O nome deve indicar claramente o que a regra faz
- Inclua contexto - Mencione o cenário ou tipo de transação
- Evite abreviações - Prefira clareza à brevidade
Design de expressões
- Mantenha expressões simples - Lógica complexa é mais difícil de manter
- Use escopos para filtrar - Não repita condições de escopo nas expressões
- Teste casos limite - Considere valores de fronteira e campos nulos
Gerenciamento de ciclo de vida
- Comece em DRAFT - Teste antes de ativar
- Volte para DRAFT antes de editar a expressão - A expressão é imutável em ACTIVE e INACTIVE; mova a regra para DRAFT via
POST /v1/rules/{id}/draftpara editar, depois reative - Arquive regras não utilizadas - Mantenha a trilha de auditoria intacta
- Exclua apenas quando tiver certeza - A exclusão é permanente
Monitoramento
- Revise regras correspondentes - Verifique quais regras estão sendo acionadas
- Monitore taxas de DENY - Taxas de negação altas podem indicar regras muito agressivas
- Audite regularmente - Garanta que as regras ainda estão alinhadas com os requisitos de negócio
Referência rápida
Endpoints, ações e informações de status-chave.

