Discount Rules
| Campo | Valor |
|---|---|
| Handler | admin/handlers/discount_rules.go |
| Ruta base | /admin/discounts/rules |
| Modelo | discount_rules, discount_conditions, discount_actions |
| Estado | Implementado |
Descripción
El módulo de reglas de descuento permite crear reglas condicionales complejas con múltiples condiciones y acciones. Soporta combinación de reglas, priorización, y un simulador para probar el efecto antes de activar.
Endpoints
| Método | Ruta | Acción |
|---|---|---|
| GET | /admin/discounts/rules | Listar reglas |
| POST | /admin/discounts/rules | Crear regla |
| GET | /admin/discounts/rules/:id | Editar regla |
| PUT | /admin/discounts/rules/:id | Actualizar regla |
| DELETE | /admin/discounts/rules/:id | Eliminar regla |
| POST | /admin/discounts/rules/:id/toggle | Activar/desactivar |
| POST | /admin/discounts/rules/simulate | Simular regla |
Campos
DiscountRule
| Campo | Tipo | Descripción |
|---|---|---|
id | UUID | Identificador único |
tenant_id | UUID | Tenant propietario |
name | string | Nombre de la regla |
priority | int | Prioridad (menor = mayor prioridad) |
combinable | bool | Se puede combinar con otras reglas |
active | bool | Regla activa |
created_at | timestamp | Fecha de creación |
updated_at | timestamp | Última actualización |
Condition
| Campo | Tipo | Descripción |
|---|---|---|
id | UUID | Identificador único |
rule_id | UUID | Regla padre |
type | enum | Tipo de condición |
operator | enum | Operador de comparación |
value | string | Valor a comparar |
Tipos de condición:
cart_total- Total del carritocart_quantity- Cantidad de itemsproduct_in_collection- Producto en colección específicacustomer_tag- Tag del clientefirst_order- Primera orden del clienteday_of_week- Día de la semana
Action
| Campo | Tipo | Descripción |
|---|---|---|
id | UUID | Identificador único |
rule_id | UUID | Regla padre |
type | enum | Tipo de acción |
value | string | Valor del descuento |
Tipos de acción:
percentage_off- Porcentaje de descuentofixed_amount_off- Monto fijo de descuentofree_shipping- Envío gratisbuy_x_get_y- Lleva X paga Y
Ejemplo de Regla
{
"name": "Descuento Black Friday",
"priority": 1,
"combinable": false,
"conditions": [
{"type": "day_of_week", "operator": "eq", "value": "friday"},
{"type": "cart_total", "operator": "gte", "value": "10000"}
],
"actions": [
{"type": "percentage_off", "value": "15"}
]
}
Simulador
El simulador permite probar reglas sin afectar datos reales:
- Seleccionar reglas a simular
- Ingresar datos de prueba (carrito, cliente, etc.)
- Ver el resultado: descuento aplicado, total final
- Validar combinación de reglas
Notas
- Las reglas se evalúan en orden de prioridad (menor número primero)
- Si
combinablees false, detiene la evaluación al aplicar - El simulador usa las colecciones del tenant para el selector "producto en colección"
- Los mensajes de error se muestran en español