Saltar al contenido principal

Detalles operativos de descuentos

Esta guía reúne la estructura del formulario de campaña (descuentos), los tipos de efecto y un mapa de capacidades frente a mecánicas retail habituales. Para apilamiento, límites y cupones, consulta las páginas enlazadas al final.

Scope de integración​

Loyal Guru admite dos scopes de integración para descuentos. El scope activo se define a nivel de Company (configurations.apply_discounts) y puede sobreescribirse por transacción mediante el flag apply_discounts en el payload de la petición.

Scopeapply_discountsQué hace LG en el checkout
LG como motor promocionaltrue (por defecto)Evalúa campañas, calcula el descuento y modifica los valores de las líneas del carrito en la respuesta. El TPV aplica directamente los precios devueltos.
Cliente como motor promocionalfalseEvalúa campañas y devuelve los IDs/códigos de descuento aplicables, pero no modifica los valores de las líneas del carrito. El TPV o el sistema de e-commerce aplica los importes.

Cuando apply_discounts: false, la respuesta de GET /discounts incluye campos adicionales para TPV (product_ids_rule_*, locations_*, location_codes) rellenos para reglas que usen categorías con taxonomía interna, permitiendo al cliente hacer el matching de productos y tiendas — ver Campos para TPV.

info

El resto de esta guía describe el scope LG como motor promocional (apply_discounts: true). Cuando apply_discounts: false, LG devuelve IDs/códigos aplicables sin modificar los valores de línea; el sistema cliente aplica los importes.

Estructura de campaña​

Cada campaña de descuento se construye con el mismo conjunto de secciones. A continuación, la referencia de opciones por sección.

Sección 1: Descripción​

CampoRequeridoPor defectoDescripción
NombreSí—Nombre interno de la campaña
DescripciónNo—Notas internas
Fechas de disponibilidadSíSiempre activaVentana activa de la campaña
Tipo de recurrenciaSíDiariaDiaria, semanal, mensual o último día del mes
Días disponiblesCondicional—Requerido si la recurrencia es semanal o mensual
CategoríaSí—La categoría de campaña a la que pertenece
ImagenNo—Visual que se muestra a los clientes

Sección 2: Evento​

El evento define qué acción del cliente activa la evaluación de esta campaña.

EventoDescripción
CarritoUna compra enviada por API (after_create_activity). Opción por defecto
Evento personalizadoUna entidad personalizada enviada por API. Requiere seleccionar una definición de entidad
TriggerUn trigger nombrado enviado por API. Requiere seleccionar un trigger
ChallengeCompletar un challenge. Requiere seleccionar al menos un challenge

El tipo de evento determina qué efectos, distribuciones y opciones de apilamiento están disponibles.

Sección 3: Audiencia​

OpciónDescripción
Todos los clientesAplica a cualquier cliente, incluidos los no inscritos en el programa
Loyalty membersSolo miembros del programa. Subfiltros opcionales: países de registro, tiers, propiedades del cliente
TargetedUna audiencia específica, enviada mediante una campaña de envío dirigido

Las campañas dirigidas (targeted) tienen siempre coupon_required = true.

Sección 4: Condiciones de victoria​

Definen qué debe contener la transacción para que la campaña se aplique. Lógica AND por defecto. En condiciones de línea se soportan subgrupos con lógica AND/OR.

Condiciones de carrito​

CondiciónSubcondiciones
Producto (por ID/código)Cantidad, total, total neto (>=, <=, <, >)
Producto (del catálogo)Cantidad, total, total neto
Categoría de productoCantidad, total, total neto
Tienda—
Categoría de tienda—
País (tienda de compra)—
Total del carrito>=, <=, <, >
Método de pago—

Subgrupos AND/OR para condiciones de línea: puedes combinar varias condiciones de línea con AND/OR. Ejemplo: (producto A O producto B) Y país = ES.

Condiciones de evento personalizado​

Condiciones sobre atributos de la entidad personalizada. Solo un bloque de evento personalizado por campaña. Los atributos de texto también soportan el operador Not equals.

Condiciones de trigger​

CondiciónDescripción
TiendaUbicaciones concretas
Categoría de tiendaCategorías de tienda

Condiciones de challenge​

Debe seleccionarse al menos un challenge. Solo un bloque de challenge por campaña.

Condiciones adicionales (todos los tipos de evento)​

CondiciónDescripción
País de registro del clientePaís de alta
Tier del clienteNivel de tier actual
Propiedades del clienteAtributos personalizados
Atributos calculadosAtributos calculados en tiempo real
Atributos de líneaCampos personalizados en líneas
Atributos del ticketCampos personalizados en el ticket
Canal de comunicaciónCanal de interacción

Sección 5: Aplicación​

Restringe a qué artículos se aplica el efecto dentro de una transacción calificada. Si está vacío, el efecto aplica a todos los artículos calificados.

FiltroDisponible para
Producto (por ID/código)Carrito, evento personalizado
Producto (del catálogo)Carrito, evento personalizado
Categoría de productoCarrito, evento personalizado

Para efectos porcentaje y ratio, la sección de aplicación es obligatoria.

Triggers y challenges no tienen sección de aplicación.

Sección 6: Efectos​

El efecto define qué recibe el cliente. Los disponibles dependen del tipo de evento:

EfectoCarritoTriggerEvento personalizadoChallenge
percentage✓—✓—
ratio✓—✓—
direct_value✓✓✓✓
strikethrough✓———
combo_price✓———
formula (externo)✓———

Las descripciones completas están en Efectos de campaña más abajo.

Sección 7: Distribución​

Cómo se reparte el efecto entre líneas:

DistribuciónUsoNotas
totalTodos los efectos (por defecto)Efecto al total de la transacción
individual_itemsTodos los efectosLínea a línea
individual_items_pro_rataTodos salvo strikethroughReparto proporcional

Restricciones:

  • strikethrough → solo individual_items
  • combo_price → solo total o individual_items_pro_rata
  • formula → solo individual_items

Para trigger, evento personalizado y challenge: solo total.

Sección 8: Límites de efecto y bundles​

Solo para eventos de carrito con efectos percentage, direct_value o combo_price.

OpciónDescripción
Límite de efecto (limits)Veces máximas que el efecto puede aplicar por transacción (0 = sin límite). Con bundle, cada aplicación suele ser un grupo bonificado (p. ej. limits: 2 = máximo 2 grupos 2x1 en el ticket)
Bundle / grupo (rule_group)Activa agrupación: el motor forma grupos según la quantity en rule_conditions (tamaño del grupo, ej. 2 para 2x1) y aplica el beneficio sobre la quantity en rule_application (unidades bonificadas por grupo, ej. 1). Requiere alinear producto/categoría entre condiciones, aplicación y efecto

Guía para integraciones con ejemplo 2x1: Lectura desde GET — Mecánica bundle.

Sección 9: Apilamiento (stackability)​

ConfiguraciónDisponible paraComportamiento
Stackable (+ prioridad)Solo carritoLa campaña se apila con otras stackable en orden de prioridad
Highest DiscountSolo carritoSolo la campaña con mayor descuento en esa categoría
Siempre Stackable, prioridad 1Trigger, evento personalizado, challengeFijo; no configurable

strikethrough y combo_price requieren siempre Highest Discount.

Más detalle: Apilamiento.

Sección 10: Límites de victoria​

LímiteRequeridoDescripción
Posibilidades de acumulaciónSí (por defecto: siempre)Frecuencia: siempre, N por día/mes/año, total N
PresupuestoNoValor máximo total (puntos o descuento) que la campaña puede otorgar por período
Límite por transacciónNoValor máximo por transacción individual

Más detalle: Límites.


Efectos de campaña​

Un efecto de campaña define qué recibe el cliente cuando se aplica la campaña. El motor soporta seis tipos. La disponibilidad depende del evento (carrito, trigger, evento personalizado o challenge).

Tabla de compatibilidad​

EfectoCarritoTriggerEvento personalizadoChallenge
percentage✓—✓—
ratio✓—✓—
direct_value✓✓✓✓
strikethrough✓———
combo_price✓———
formula (externo)✓———

Porcentaje (percentage)​

Descuento porcentual sobre artículos calificados u otorga un porcentaje del valor como saldo de loyalty.

ParámetroDescripción
ValorPorcentaje > 0. Decimales permitidos (p. ej. 0,8 = 0,8 %)
Distribucióntotal, individual_items o individual_items_pro_rata
Bundle/grupoSoportado

Caso de uso: 15 % en categoría «Calzado» si el total supera €100.

Ratio​

Importe fijo de saldo (puntos o wallet) por unidad monetaria gastada.

ParámetroDescripción
UnidadUnidad monetaria de referencia (≥ 1). Ej.: 1 = por cada €1 gastado
ValorSaldo por unidad. Entero en modo points; decimal en modo money
Distribucióntotal, individual_items o individual_items_pro_rata

Casos de uso: 2 puntos por €1 en selección; €0,05 de wallet por €1 gastado.

Valor directo (direct_value)​

Importe fijo de saldo o descuento fijo.

ParámetroDescripción
ValorEntero en points; decimal en money
Distribucióntotal, individual_items o individual_items_pro_rata
Bundle/grupoSoportado

Casos de uso: 200 puntos al completar un challenge; €5 de dto. si el carrito supera €50.

Tachado (strikethrough)​

Sustituye el precio de la línea en el ticket por el precio promocional del mapa strikethrough_data. El descuento aplicado es precio en ticket − precio promocional (p. ej. ticket 3 €, promo 1 € → dto. 2 €, línea a 1 €).

ParámetroDescripción
strikethrough_dataMapa clave → precio promocional. Clave = product_id o product_code según la compañía (debe coincidir con el identificador en la línea del ticket)
DistribuciónSiempre individual_items
ApilamientoSiempre Highest Discount

Caso de uso: precio fijo promocional por producto en caja (p. ej. producto a 1 € aunque el ticket traiga precio 3 €).

Precio combo (combo_price)​

Precio combinado para un grupo de productos (bundle).

ParámetroDescripción
ValorPrecio total del bundle > 0
Distribucióntotal o individual_items_pro_rata
ApilamientoSiempre Highest Discount

Caso de uso: 3 artículos de la categoría por €29,99.

Fórmula / efecto promocional externo (formula)​

Descuento a partir de un atributo de línea enviado por un sistema externo (precio promo precalculado).

ParámetroDescripción
FórmulaFija: lines.total - lines.attributes.promoPrice
DistribuciónSiempre individual_items
Bundle/grupoSiempre false
ApilamientoStackable o Highest Discount (configurable)

Flujo: el sistema externo envía promoPrice por línea; el motor calcula dto. = total línea − promoPrice; si ≤ 0 en una línea, no aplica ahí.

Distribuciones (resumen)​

DistribuciónComportamiento
totalUn solo valor al total
individual_itemsPor línea calificada
individual_items_pro_rataReparto proporcional por valor de línea

Restricciones: como en la sección 7; trigger / evento personalizado / challenge → solo total.


Capacidades de campaña​

Esta sección relaciona mecánicas retail habituales con el motor: totalmente soportadas, parcialmente (workaround) o no soportadas.

Para ejemplos de API, consulta Ejemplos de campañas.

Totalmente soportadas​

Mecánicas de descuento — producto y línea​

MecánicaCómo configurarla
2x1 (mismo producto)percentage: 50, individual_items, cantidad >= 2 en el producto
3x2 en categoríapercentage: 33.33, individual_items, cantidad >= 3 en la categoría
50 % en la N.ª unidadpercentage: X repartido entre N unidades (ahorro equivalente). Ver ejemplos
% en un productopercentage + aplicación en el producto
% en categoríapercentage + aplicación en la categoría
Descuento fijo en cestadirect_value, distribution: total, condición total_cart >= X
Bundle: 3 unidades por €Xcombo_price, cantidad >= 3, individual_items_pro_rata
Bundle cruzado A + B por €Xcombo_price, condición OR en líneas, distribution: total
Cross-category: compra A, dto. en BCondición sobre A; aplicación restringida a categoría B
Precio promocional fijo por productostrikethrough con strikethrough_data (sustituye precio de línea; dto. = ticket − promo)
Motor externo de preciosformula con atributo promoPrice

Mecánicas de descuento — contexto y audiencia​

MecánicaCómo configurarla
Dto. por método de pagoCondición payment_method + percentage
Dto. por tierCondición customer_tier + percentage
Promo por paísCondición country (tienda)
Promo por tiendaCondición store o store_category
Dto. de bienvenidaTrigger after_create_profile + direct_value o percentage
Dto. de cumpleañosTrigger birthday + percentage o direct_value
Campaña con cupón exclusivoAudiencia targeted + coupons_desired en compra
Campaña con audiencia específicaAudiencia targeted con definición de audiencia

Puntos y wallet​

MecánicaCómo configurarla
Puntos fijos en compradirect_value, total, evento carrito
Ratio (2 pts/€1)ratio, unit: 1, carrito
Multiplicador en categoríaratio + aplicación en categoría
Puntos de bienvenidaafter_create_profile + direct_value
Bonus cumpleañosbirthday + direct_value
Referidosrefer_a_friend + direct_value
Recompensa de retochallenge + direct_value
Evento personalizadoafter_create_custom_entity + direct_value
Cashback en walletratio con accrual_mode money

Parcialmente soportadas (workaround)​

MecánicaLimitaciónWorkaround
Dto. escalonado por gastoUna campaña, varios umbralesUna campaña por tramo, misma categoría Highest Discount. Ver ejemplo 6
Dto. primera compraSin condición nativacalculated_attribute de recuento de transacciones
BOGO cruzado (B gratis)Dto. máx. ~50 % por líneaHasta 50 % en B con A en carrito; 100 % gratis no nativo
Reto multi-ticketObjetivos entre tickets separadosRoadmap; hoy condiciones en mismo periodo de evaluación
Apilado >50 % por artículoTope acumulado 50 %Diseñar categorías para no superar 50 %
Recompensa en N.ª compraSin contador nativocalculated_attribute (p. ej. módulo 10)

No soportadas​

MecánicaMotivo
Producto regalo / gratis en motorNo gestiona fulfillment ni añade líneas al carrito
Flash sale por franja horariaDisponibilidad por fecha, no intradía
Dto. en envíoSin coste de envío en el modelo de transacción
Rifa / sorteoSin probabilidad en el motor
Recompensa por redes socialesSin eventos de RRSS
Pricing dinámico interno por demandaNo calcula demanda; formula acepta precios externos
Precio por suscripciónSin entidad suscripción; usar externo + formula

Diagrama resumen​

Páginas relacionadas​