Saltar al contenido principal

Guía: Lectura desde GET · ← Condiciones · Efectos →

rule_application — referencia completa

info

Campo en la respuesta GET

En GET /discounts y GET /discounts/{id}, este bloque viene en **rule_application** (string JSON). Tras parsear, la raíz interna es **application.and[]** (no conditions).

Índice​


Qué hace (y qué no hace)​

BloquePregunta que responde
**rule_conditions**¿Cuándo puede entrar en juego la campaña? (elegibilidad: cliente, carrito, líneas, umbrales, …)
**rule_application**¿Dónde se aplica el descuento si la campaña aplica? (líneas del carrito y/o un coste adicional concreto)

rule_application no sustituye a las condiciones de victoria: acota el alcance del efecto. Reutiliza gramática similar a condiciones de líneas (conditions.and, array_field: lines, field, values, …) y admite además aplicación sobre un campo de **additional_costs** del carrito.

Vacío vs definido​

Estado de rule_applicationComportamiento
Vacío / ausente / nullEl descuento puede aplicar sobre todas las líneas del carrito (según rule_effects.distribution)
Con filtrosEl descuento solo aplica donde indique la regla (líneas y/o un additional_costs.nombre``)

Caso típico: sin condiciones de victoria, solo aplicación​

Para una campaña que debe descontar ciertos productos siempre (sin umbral de carrito, sin qty mínima en condiciones, etc.):

  1. Deja **rule_conditions vacío** (sin requisitos de elegibilidad).
  2. Define en **rule_application** únicamente los productos (o categorías) objetivo.

Ejemplo conceptual:

{
"rule_conditions": { "conditions": { "and": [] } },
"rule_application": {
"conditions": {
"and": [
{
"array_field": "lines",
"field": "product_id",
"key": "cart_item_product",
"operator": "in",
"values": [10045, 10046]
}
]
}
},
"rule_effects": "{ ... percentage, distribution: individual_items ... }"
}

Interpretación: «La campaña no exige nada especial para “ganar”; si está activa y el customer califica por audiencia/stackability, el % (o valor) solo baja en las líneas con product_id 10045 o 10046.»

En GET /discounts y GET /discounts/{id}, rule_conditions y rule_application vienen como string JSON; parsear ambos por separado.

Dos familias de aplicación​

FamiliaCómo se identificaQué acota
Líneas del carritoarray_field: linesProductos, categorías, atributos de línea
Coste adicionalfield: additional_costs.nombre``Un cargo concreto del objeto additional_costs del carrito (ej. envío)

No uses en aplicación condiciones de cliente (customer.*), país, total de carrito, pagos, etc. — eso va en rule_conditions.

Subcondiciones anidadas en líneas: solo quantity​

Dentro de conditions[] en cláusulas de aplicación sobre líneas, solo existe quantity. No se puede elegir **total** de línea (a diferencia de rule_conditions, donde sí puede aparecer total).

field en subcondiciónEn rule_conditionsEn rule_application
quantity✓✓
total✓No disponible

Ejemplo válido en aplicación:

"conditions": [{ "field": "quantity", "value": 1, "operator": "gte" }]

Gramática compartida con condiciones de líneas​

ConceptoEn rule_conditionsEn rule_application
Producto por catálogoPuede exigir qty y/o total líneaDefine sobre qué productos se aplica; subcondición típica: solo quantity
Producto manual (cart_product_id)IgualIgual
Categoría (product_categories)Puede exigir qty/totalDefine categorías objetivo; subcondición: solo quantity
Atributos de líneaCondición de victoriaAcota aplicación (sin subcondición de qty si no hace falta)

Reglas de lectura (igual que en condiciones):

  • **field** define el dato; **key** es informativo.
  • cart_item_product = catálogo; cart_product_id = manual.
  • Categorías: values = feature_pk (taxonomy_slug|external_id).
  • bundle / grouped: flags internos — ignorar valor del flag.

Bundle / 2x1: quantity en aplicación​

Si rule_effects.rule_group es **true**, la subcondición **quantity** en **rule_application** define cuántas unidades de cada grupo reciben el efecto (p. ej. gte 1 = una unidad con descuento por cada grupo armado en condiciones de victoria). Ver Mecánica bundle.

Aplicación sobre additional_costs​

Puedes indicar que el efecto aplica sobre un coste adicional concreto del carrito (no sobre una línea de producto).

CampoDescripción
fieldRuta al coste: additional_costs.clave`` (ej. additional_costs.delivery si en el carrito existe "delivery": 2.99 dentro de additional_costs)
operator / valueComparación sobre el importe de ese coste (ej. gt + 0 → que exista y sea > 0)
keySuele ser total_cart_without_additional_costs (informativo); manda **field**
additional_cost_idID interno del tipo de coste adicional (auxiliar; ej. 34 = envío en la Company)

Ejemplo — efecto sobre el coste de envío:

{
"conditions": {
"and": [
{
"key": "total_cart_without_additional_costs",
"field": "additional_costs.delivery",
"value": 0,
"operator": "gt",
"additional_cost_id": 34
}
]
}
}

Interpretación: el descuento/efecto se aplica sobre el componente delivery del bloque additional_costs del carrito (cuando su valor es > 0), no sobre líneas de producto.

JSON maestro de referencia — aplicación en líneas​

Ejemplo real con categorías, productos (catálogo y manual) y atributos de línea:

{
"conditions": {
"and": [
{
"key": "cart_item_product_category",
"field": "product_categories",
"bundle": 1,
"values": ["gaston_interno|106", "frutas|17852"],
"grouped": true,
"operator": "in",
"conditions": [{ "field": "quantity", "value": 1, "operator": "gte" }],
"array_field": "lines",
"feature_ids": [17885, 17852]
},
{
"key": "cart_item_product",
"field": "product_code",
"bundle": 1,
"values": ["12000041", "camisetaGlobo", "croata_01", "croata_02", "undefined"],
"grouped": true,
"operator": "in",
"conditions": [{ "field": "quantity", "value": 1, "operator": "gte" }],
"array_field": "lines",
"product_ids": ["1", "2", "4", "5", "6"]
},
{
"key": "cart_product_id",
"field": "product_code",
"bundle": 1,
"values": ["22333", "98999", "977788"],
"grouped": true,
"operator": "in",
"conditions": [{ "field": "quantity", "value": 1, "operator": "gte" }],
"array_field": "lines"
},
{
"key": "cart_item_attributes",
"field": "attributes.color",
"value": "azul",
"operator": "eq",
"array_field": "lines"
},
{
"key": "cart_item_attributes",
"field": "attributes.product_condition",
"value": "refurbished",
"operator": "neq",
"array_field": "lines"
}
]
}
}

Lectura rápida del JSON maestro (aplicación)​

#field / contextoInterpretación
1lines → product_categoriesDescuento en líneas de categorías `gaston_interno
2lines → product_code, catálogoCódigos del catálogo listados; qty≥1
3lines → product_code, manualCódigos ingresados a mano (cart_product_id); qty≥1
4lines → attributes.colorSolo líneas con color = azul
5lines → attributes.product_conditionExcluye líneas refurbished (neq)

Condiciones de victoria + aplicación distinta (caso frecuente)​

La campaña gana con una lógica y el descuento cae en un subconjunto de líneas:

BloqueEjemplo de negocio
rule_conditionsCarrito ≥ 50 € y al menos 2 unidades de Coca-Cola
rule_applicationEl % solo en líneas de categoría Snacks

Integración: el carrito puede cumplir condiciones por Coca-Cola pero el descuento en la respuesta solo aparece en líneas Snacks que cumplan rule_application.

Obligatoriedad (porcentaje / ratio)​

Para efectos **percentage** y **ratio** en carrito, la aplicación suele ser obligatoria en Owner App (véase Detalles operativos §5). Si falta y el efecto es % por línea, revisar configuración incompleta.

Errores frecuentes — rule_application​

ConfusiónCómo resolverlo
Condición vs aplicaciónrule_conditions = ¿aplica la campaña? · rule_application = ¿en qué líneas va el descuento?
Copiar condiciones de cliente en aplicaciónCliente/carrito van en rule_conditions; aplicación = líneas y/o additional_costs
Buscar total en subcondición de aplicaciónEn aplicación solo existe **quantity** en conditions[]; total de línea no aplica
rule_conditions vacío mal interpretadoVacío = sin filtros de victoria, no “campana desactivada”
Descuento no en producto esperadoRevisar field + values en aplicación, no solo condiciones de victoria
Confundir líneas con additional_costsarray_field: lines = productos; field: additional_costs.X = cargo extra (envío, etc.)
Mismo producto en condiciones y aplicaciónVálido: condiciones exigen comprarlo; aplicación limita dónde se descuenta (puede ser la misma lista u otra)


Siguiente: Efectos (rule_effects)