Ir al contenido

Aplicación de Promociones en el POS

Las promociones activas se evalúan de forma automática en el POS cada vez que el carrito cambia. No se requiere ninguna acción manual del cajero para aplicarlas: el motor calcula los descuentos en segundo plano y actualiza el pie de página del POS con el monto total descontado.

El motor de promociones se activa con un breve retraso (debounce) tras cada cambio en el carrito (agregar producto, cambiar cantidad, eliminar línea). El proceso es:

  1. Carga todas las promociones en estado ACTIVA del tenant con fecha vigente.
  2. Las ordena de mayor a menor prioridad.
  3. Por cada promoción verifica:
    • Que la fecha y hora actuales están dentro de la vigencia temporal.
    • Que no se ha alcanzado el límite de uso total ni el límite por cliente (si están configurados).
    • Que hay líneas del carrito elegibles (productos/categorías no excluidos).
  4. Invoca la estrategia del tipo de promoción sobre las líneas elegibles.
  5. Si aplica, registra el descuento y marca la promoción como aplicada en el ticket.

El resultado visible en el POS es el monto total de descuentos en el pie de página.

Pie de página del POS mostrando el descuento de promoción aplicado

Cuando una o más promociones se aplican, el pie del POS muestra:

  • Descuento: monto total de los descuentos por promociones activas en el carrito.

El panel de resumen del carrito refleja el subtotal, IVA, descuentos y el total con todos los descuentos aplicados.

Se descuenta el porcentaje configurado sobre el precio unitario de cada línea elegible:

Descuento por línea = Precio unitario × Cantidad × (Porcentaje ÷ 100)

Se descuenta el monto fijo configurado del total del carrito (repartido entre las líneas elegibles).

Al haber 2 o más unidades del mismo producto, el segundo artículo es gratis:

Artículos gratis = floor(Cantidad ÷ 2)
Descuento = Precio unitario × Artículos gratis

Al cumplir la cantidad mínima de artículos distintos, se aplica el porcentaje de descuento sobre las líneas elegibles:

Si cantidad de artículos elegibles ≥ cantidadMinima:
Descuento por línea = Precio unitario × Cantidad × (Porcentaje ÷ 100)

Idéntico a PORCENTAJE, pero el motor verifica adicionalmente que el día de la semana y la hora actuales están dentro de la ventana configurada.

Escenario Resultado
Dos promociones acumulables (ambas con stackable = true) Ambas aplican; los descuentos se suman.
Una no acumulable de prioridad alta + otra de prioridad baja (stackable = false) Solo aplica la de mayor prioridad; la segunda se omite.
Una no acumulable + una acumulable Ambas pueden aplicar: la no acumulable bloquea otras no acumulables, pero no bloquea las acumulables.

En Insights → Promociones (/insights/promociones) puede consultar:

Pantalla de insights de promociones con gráfica de barras top 10 y tabla detalle

Use los campos Desde y Hasta para delimitar el período del reporte. Los datos se actualizan automáticamente.

Muestra las 10 promociones con mayor número de aplicaciones en el período, ordenadas de mayor a menor.

Columna Descripción
Nombre Nombre de la promoción
Tipo Tipo de promoción (PORCENTAJE, MONTO_FIJO, etc.)
Veces usada Total de veces que la promoción fue aplicada en el período
Ahorro total Monto total de descuento generado por la promoción (MXN)

Haga clic en Exportar CSV para descargar la tabla completa en formato CSV para el período seleccionado.

  • Solo las promociones en estado ACTIVA se evalúan en el POS.
  • Si ninguna promoción aplica al carrito actual, el descuento se muestra como $0.
  • Los descuentos calculados por el motor se guardan en AplicacionPromocion junto con un snapshot de la promoción al momento de aplicarse; este registro persiste aunque la promoción sea editada o cancelada posteriormente.
  • El motor filtra siempre por tenantId; las promociones de un tenant nunca aplican en otro.

El descuento no aparece aunque la promoción está activa. Verifique: (1) que la fecha y hora actuales están dentro del rango de vigencia, (2) que el día de la semana está incluido, (3) que los productos del carrito no están en la lista de exclusiones, (4) que se cumple la cantidad mínima para BUNDLE.

La promoción aplica pero el descuento es menor al esperado. Puede que algunos productos del carrito estén excluidos, reduciendo la base de cálculo. Revise la configuración de exclusiones y aplicabilidades de la promoción.

¿Se puede forzar la aplicación de una promoción que el motor no aplicó? No. El motor aplica automáticamente las promociones que cumplen todas las condiciones. Si una promoción no aplica, es porque al menos uno de los criterios no se cumple. Revise la configuración de la promoción.

¿Qué pasa si cancelo una venta? ¿Se revierten los usos de la promoción? Sí. Al cancelar una venta, los registros de AplicacionPromocion asociados se anulan. Los contadores de uso total y por cliente se actualizan consecuentemente.