En B2C un descuento es un "cupón de 10% OFF". En B2B, un descuento es un "Si el cliente es categoría Platino, compra más de 50 unidades del SKU-X de la marca Y, y paga al contado, entonces 15% off y envío gratis". Bienvenidos al infierno de la lógica de negocios.
Anatomía de una Regla B2B
Un motor robusto evalúa dos cosas: Condiciones (cuándo aplica) y Acciones (qué hace).
Condiciones B2B comunes:
- Segmento de cliente: Solo para grupo "Distribuidores Sur".
- Atributo de producto: Solo para la marca "Stanley".
- Volumen (Tiers): De 10 a 50 unidades (5%), más de 51 unidades (12%).
- Método de pago: Solo transferencia bancaria (para evitar costos de tarjeta).
El problema de la Colisión
¿Qué pasa si un cliente cumple la condición de la "Promo Stanley" (10% OFF) y también es "Cliente Platino" (15% OFF en todo el sitio)? ¿Se suma un 25%? ¿Se aplica el mayor? ¿Se aplica en cascada?
Acá es donde las plataformas mal diseñadas destruyen la rentabilidad. Un motor serio tiene un sistema de Prioridades y Exclusividad.
- Cada regla tiene un peso (Prioridad 1, 2, 3).
- Las reglas se evalúan de mayor a menor prioridad.
- Un flag de "Detener evaluación": Si la regla exclusiva A se aplica, el motor deja de buscar otros descuentos, previniendo el temido descuento sobre descuento involuntario.
Performance: Evaluación perezosa (Lazy Evaluation)
Evaluar 1.000 reglas en cada adición al carrito colapsa el servidor. La clave técnica es pre-filtrar las reglas aplicables al inicio de la sesión del usuario (basado en su ID de cliente) y cachear en Redis ese subconjunto activo.