Por qué usar el motor de reglas
- Flexibilidad: crea y modifica reglas sin despliegues de código
- Modelo de ejecución: Tracer evalúa expresiones compiladas durante la validación
- Seguridad de tipos: la sintaxis de la expresión se valida al crear la regla
- Sin cortocircuito: Tracer evalúa juntas las reglas que coinciden, así que el registro de auditoría guarda las reglas que se activaron, no solo la categoría ganadora
- Basado en alcance: aplica reglas a segmentos, cuentas o tipos de transacción específicos
- Entender los conceptos del motor de reglas y el flujo de evaluación
- Crear y probar reglas basadas en expresiones
- Gestionar el ciclo de vida de la regla (DRAFT, ACTIVE, INACTIVE, DELETED)
- Aplicar buenas prácticas para la gestión de reglas
Qué es el motor de reglas
El motor de reglas es el componente de Tracer responsable de evaluar expresiones durante la validación de transacciones. Permite a los analistas de fraude y a los gerentes de riesgo configurar lógica de negocio que se ejecuta en tiempo real, sin requerir despliegues de código ni soporte de ingeniería.
Cómo funciona
Figura 1. Flujo de evaluación del motor de reglas
- Cargar reglas obtiene todas las reglas activas desde la caché (o desde la base de datos si falla la caché)
- Evaluar expresiones ejecuta la expresión CEL de cada regla cuyo alcance coincide con la transacción
- Recolectar coincidencias reúne todas las reglas que coincidieron y determina la decisión
Patrón de evaluación
Tracer evalúa juntas todas las reglas cuyo alcance coincide con la transacción. No hay orden de prioridad ni evaluación por cortocircuito. Esto garantiza:- Registro de auditoría completo (se registran todas las reglas que coinciden)
- Sin pérdida de información (los analistas pueden ver todos los disparadores)
- Lógica simple (sin conflictos de prioridad)
- DENY: cualquier regla
DENYque coincida gana de forma definitiva. - Límite excedido: si ninguna regla DENY coincidió pero la transacción excede algún límite aplicable, la decisión es DENY. La precedencia de reglas se aplica primero, y los límites entran en juego solo cuando ninguna regla DENY coincidió.
- REVIEW: si ninguna regla DENY coincidió y la transacción no excedió ningún límite, cualquier regla
REVIEWque coincida gana. - ALLOW: si solo coincidieron reglas
ALLOW, la decisión es ALLOW. - Predeterminado: si ninguna regla coincidió, Tracer devuelve la
DEFAULT_DECISION_WHEN_NO_MATCHconfigurada (ALLOW, a menos que se configure explícitamente comoDENYpara despliegues de fallo cerrado). Tracer acepta soloALLOWyDENY.REVIEWdeliberadamente no es un valor predeterminado válido para “sin coincidencia”, y cualquier otro valor hace fallar el servicio al iniciar.
matchedRuleIds en la respuesta contiene cada regla que coincidió, sin importar la categoría ganadora, así que los consumidores de auditoría pueden ver todos los disparadores.
Por qué DENY le gana a REVIEW y REVIEW le gana a ALLOW. La precedencia nunca cambia y no puedes configurarla, a propósito. Elimina la ambigüedad de “¿qué regla DENY gana?” en tiempo de ejecución y hace que la auditoría sea trivial. La respuesta siempre identifica la acción más estricta que se activó. El costo es que no puedes escribir “reglas ALLOW que anulan DENYs”. Si necesitas ese patrón, la respuesta correcta es hacer la regla DENY más específica en su lugar.
Tracer devuelve decisiones. No bloquea transacciones directamente. Tu sistema recibe la decisión y debe tomar la acción correspondiente (por ejemplo, bloquear, permitir o poner en cola para revisión).
Conceptos centrales
Antes de crear reglas, entiende los elementos fundamentales.
Reglas
Una regla es una unidad de lógica de negocio compuesta por:- Expresión - una expresión con tipado seguro que se evalúa como verdadera o falsa
- Acción - qué decisión devolver cuando la expresión es verdadera
- Alcances - a qué transacciones aplica la regla
- Estado - el estado del ciclo de vida de la regla
Expresiones
Escribes las expresiones en CEL (Common Expression Language), un lenguaje con tipado seguro que evalúa el contexto de la transacción y devuelve un valor booleano (verdadero o falso). CEL ofrece validación en tiempo de compilación, así que los errores de sintaxis aparecen cuando creas la regla, no cuando Tracer procesa transacciones. Ejemplos de expresiones:merchant.category es el código MCC ISO 18245 de 4 dígitos. "7995" es el MCC de apuestas/casino. Tracer acepta tanto merchant.category como merchant["category"]. Los ejemplos de producción usan la notación de corchetes por convención. Si necesitas hacer coincidir una etiqueta de texto como "gambling", guárdala en metadata y haz coincidir sobre eso en su lugar.)
Las expresiones leen la solicitud de validación a través de diez variables. Para conocer los tipos y formatos de campo detrás de cada una, consulta el esquema ValidationRequest en la referencia de la API.
Valores de campo que conviene conocer antes de escribir una condición:
account.statusaceptaactive,suspended,closed, yaccount.typeaceptachecking,savings,credit.merchant.categorytoma un código MCC ISO 18245 de 4 dígitos.merchant.countrytoma un código ISO 3166-1 alpha-2.- Esos cuatro campos son opcionales en la solicitud. Un campo que la solicitud omite llega a tu expresión como una cadena vacía, así que una condición que lo compara contra un valor específico da falso.
segment.segmentId,portfolio.portfolioId,account.accountIdymerchant.merchantIdson cadenas UUID.
segmentId y portfolioId viven en las variables de nivel superior segment y portfolio, no en account. Para comparar por segmento, escribe segment.segmentId == "...", no account.segmentId == "...".Una regla que lee un campo de contexto que la solicitud no trae no coincide, y las demás reglas se siguen ejecutando, así que no necesitas una guarda de presencia para ese caso. Cuando la presencia en sí es la condición que quieres, escribe size(segment) > 0 o "risk_score" in metadata.Tracer limita el costo de las expresiones con
CEL_COST_LIMIT (predeterminado 10000). La verificación se ejecuta en tiempo de compilación (al crear, al actualizar la expresión, y de nuevo al activar), no solo en la activación. Tracer rechaza una expresión cuyo costo estimado en el peor caso supere el límite, la primera vez que la envías, con el código de error 0342 (límite de costo excedido). Los errores de sintaxis aparecen como 0340, los errores de tipo (incluida una expresión que no devuelve un booleano) como 0341, y una falla al estimar el costo como 0345.Ejemplos de expresiones por caso de uso
Estos son ejemplos prácticos por escenario de negocio:Reglas basadas en monto
Reglas basadas en comercio
Reglas basadas en cuenta
Condiciones combinadas
Reglas basadas en tiempo
Uso de metadatos
Tu integración proporciona los campos de metadatos. Diseña tu payload para incluir el contexto que tus reglas necesitan.
Acciones
Las acciones determinan la decisión cuando una expresión se evalúa como verdadera:Alcances
Los alcances definen a qué transacciones aplica una regla. Una regla sinscopes es global y se evalúa contra cada transacción. Una regla con uno o más objetos de alcance se evalúa solo cuando la transacción coincide con al menos uno de ellos (semántica OR entre objetos de alcance).
Dentro de un solo objeto de alcance, los campos admitidos son:
segmentId- hace coincidir transacciones de un segmento específicoportfolioId- hace coincidir transacciones de un portafolio específicoaccountId- hace coincidir transacciones de una cuenta específicamerchantId- hace coincidir transacciones hacia un comercio específicotransactionType- hace coincidir tipos de transacción específicos (CARD, WIRE, PIX, CRYPTO)subType- hace coincidir subtipos específicos (debit, credit, instant, etc.)
- Dentro de un objeto de alcance: los campos se combinan con AND. Un campo que dejas fuera funciona como comodín (coincide con cualquier valor). Debes establecer al menos un campo. Tracer rechaza objetos de alcance vacíos (
{}) con el código de error0358. - Entre varios objetos de alcance de la misma regla: se combinan con OR. La regla coincide si cualquier objeto de alcance coincide con la transacción.
transactionType: CARD y otro que apunta a transactionType: PIX) se ejecuta tanto para transacciones de tarjeta como de Pix. Un solo alcance con segmentId Y accountId requiere que la transacción coincida con el segmento Y con la cuenta.
Ciclo de vida de la regla
Las reglas avanzan por un ciclo de vida definido para garantizar un despliegue seguro.
Figura 2. Ciclo de vida de reglas y transiciones de estado
Estados
Transiciones
Debes desactivar las reglas activas antes de eliminarlas. Esto evita la eliminación accidental de reglas que Tracer todavía evalúa.
Crear una regla
Crea reglas usando
POST /v1/rules. Tracer crea las reglas en estado DRAFT por defecto.
Una regla requiere:
- name: un nombre descriptivo, único dentro de su contexto. Los alcances de la regla determinan el contexto (el
segmentIdmás bajo entre ellos), y las reglas sin alcance comparten un único contexto global. Así, el mismo nombre de regla puede coexistir en dos segmentos distintos, pero no dos veces dentro de uno solo. La comparación distingue mayúsculas de minúsculas y conserva los espacios en blanco internos, y Tracer recorta los espacios en blanco al inicio y al final antes de almacenar. Una colisión responde409 Conflictcon el código de error0441. Referencia la regla por elruleIdde la respuesta. - expression: una expresión CEL que se evalúa como verdadera o falsa
- action: la decisión que se devuelve cuando la expresión coincide (ALLOW, DENY o REVIEW)
- scopes (opcional): limita a qué transacciones aplica la regla
Activar y desactivar reglas
Después de crear una regla, actívala para empezar a evaluarla. Desactiva reglas para detener la evaluación sin eliminarlas.
Desactivar una regla la conserva con fines de auditoría. Usa la eliminación solo cuando quieras remover una regla de forma permanente.
Listar y consultar reglas
Consulta reglas para gestión y auditoría usando
GET /v1/rules.
Parámetros de consulta
Obtener una regla específica
UsaGET /v1/rules/{id} para recuperar la definición completa de la regla, incluida la expresión y los alcances.
Actualizar una regla
Actualiza reglas usando
PATCH /v1/rules/{id}. Las reglas aceptan actualizaciones en cualquier estado, con una restricción importante:
Eliminar una regla
Elimina las reglas que ya no necesites. Solo puedes eliminar reglas DRAFT e INACTIVE. Desactiva primero las reglas ACTIVE.
Mejores prácticas
Sigue estas prácticas para reglas efectivas y fáciles de mantener.
Nomenclatura
- Usa nombres descriptivos - el nombre debe indicar claramente qué hace la regla
- Incluye contexto - menciona el escenario o el tipo de transacción
- Evita abreviaturas - prefiere la claridad sobre la brevedad
Diseño de la expresión
- Mantén las expresiones simples - la lógica compleja es más difícil de mantener
- Usa alcances para filtrar - no repitas condiciones de alcance dentro de las expresiones
- Prueba casos límite - considera valores frontera y campos nulos
Gestión del ciclo de vida
- Empieza en DRAFT - prueba antes de activar
- Vuelve a DRAFT antes de editar la expresión - la expresión es inmutable en ACTIVE e INACTIVE. Mueve la regla a DRAFT mediante
POST /v1/rules/{id}/draftpara editarla, y luego reactívala - Archiva las reglas sin uso - mantén intacto el registro de auditoría
- Elimina solo cuando estés seguro - la eliminación es permanente
Monitoreo
- Revisa las reglas que coincidieron - verifica cuáles reglas se activan
- Monitorea las tasas de DENY - tasas de denegación altas pueden indicar reglas demasiado agresivas
- Audita con regularidad - asegúrate de que las reglas sigan alineadas con los requisitos de negocio
Referencia rápida
Endpoints, acciones e información de estado clave.

