# Sintaxis para expresiones Las expresiones usadas en [reglas](/es/transactional/rules/) siguen una sintaxis sencilla inspirada en fórmulas de hojas de cálculo. Cada expresión está compuesta por, como mínimo, una **variable**, una **operación** y un **valor**. ``` $merchant_id == "XYZ" ``` La expresión anterior es verdadera cuando el ID del comercio es igual a `"XYZ"`. ## Variables Toda variable comienza con `$`. Las variables disponibles dependen del tipo de evento evaluado. | Variable | Contenido | Tipo | Ejemplo | |--------------------------|----------------------------------------------------------------------------|--------------|------------------| | `$amount` | Valor total del pago | Decimal | `100.12` | | `$card_bin` | Primeros 6 a 8 dígitos del PAN (BIN/IIN) | Texto | `"44332211"` | | `$card_issuer_country` | País del emisor de la tarjeta (ISO 3166-1 alfa-2) | Texto | `"BR"` | | `$card_last_four` | Últimos cuatro dígitos de la tarjeta | Texto | `"1234"` | | `$device_fingerprint_id` | Fingerprint del dispositivo | Texto | `"xyz"` | | `$device_ip_address` | Dirección IP del dispositivo | Dirección IP | `"200.123.10.2"` | | `$device_user_agent` | User-Agent del dispositivo | Texto | `"Mozilla/5.0"` | | `$merchant_id` | ID del comercio | Texto | `"tienda-1234"` | | `$metadata_[clave]` | Metadato enviado vía API | Texto | `"valor"` | | `$score` | Puntuación de riesgo calculada por la plataforma (0,00 a 1,00) | Decimal | `0.75` | | `$user_email_domain` | Dominio del correo del usuario | Texto | `"gmail.com"` | | `$user_id` | ID del usuario | Texto | `"cliente-1234"` | | `$user_profiles` | Perfiles de pago del usuario (solo con la función `count`) | Colección | N/A | ## Operaciones | Operación | Significado | |-----------|------------------------------| | `==` | Igualdad | | `!=` | Desigualdad | | `>` | Mayor que | | `>=` | Mayor o igual | | `<` | Menor que | | `<=` | Menor o igual | | `in` | Pertenece a una colección | | `not in` | No pertenece a una colección | ## Valores El valor comparado con una variable puede ser un texto o un número: - **Texto**: siempre entre comillas dobles, como `"XYZ"`. No se aceptan comillas simples ni textos sin comillas. - **Número**: escrito sin comillas, usando punto como separador decimal, como `1000` o `99.01`. Como todo texto va entre comillas dobles, valores como una IP, una fecha o una palabra usada en la propia sintaxis (por ejemplo, `in`) también necesitan las comillas para tratarse como texto. Para verificar si una variable está vacía, compárela con `null` (sin comillas) usando `==` o `!=`: ``` $device_fingerprint_id == null ``` La expresión anterior es verdadera cuando el evento no tiene fingerprint del dispositivo. Use `!=` para el caso contrario, cuando la variable tiene algún valor. ## Funciones ### `concat` La función `concat` une varios valores en un único texto, que puede compararse con un valor. Cada argumento es una variable (`$variable`) o un texto fijo, separados por comas: ``` concat($user_id, "-", $merchant_id) == "cliente-1234-tienda-1234" ``` La expresión anterior es verdadera cuando la combinación del ID del usuario y el ID del comercio, unidos por un guion, resulta en `"cliente-1234-tienda-1234"`. Consideraciones sobre los valores unidos: - Las variables sin valor se tratan como texto vacío. - Los valores numéricos se convierten a texto en su forma original (por ejemplo, `99.01` y `0.9`). ## Combinando expresiones Use `and` y `or` para combinar expresiones. `and` tiene precedencia sobre `or`: en una combinación sin paréntesis, las partes unidas por `and` se evalúan primero. Así, `A and B or C` equivale a `(A and B) or C`. Use paréntesis para agrupar expresiones y cambiar esa precedencia: ``` ($amount > 1000 and $user_email_domain == "gmail.com") or $card_issuer_country != "BR" ``` ## Listas Las listas configuradas en **Configuración > Listas** quedan disponibles como colecciones. Por ejemplo, para verificar si un cliente está en una lista de cuarentena: ``` $user_id in @clientes_cuarentena ``` También es posible escribir la colección directamente en la expresión, entre corchetes y con los valores separados por comas. Por ejemplo, para verificar si el país del emisor de la tarjeta no está entre los países atendidos: ``` $card_issuer_country not in ["BR", "AR", "CL"] ```