> ## Documentation Index
> Fetch the complete documentation index at: https://docs.retailgrid.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Guía de reglas de precios

> Recorrido para usuarios de negocio por los 8 tipos de regla de Dynamic Pricing, con parámetros y ejemplos resueltos

Esta guía explica los 8 tipos de regla detrás de [Dynamic Pricing](https://docs.retailgrid.io/es/agents/dynamic-pricing.md) para las personas que toman las decisiones de precios: responsables de categoría, analistas de pricing, líderes comerciales. Para cada regla: qué hace en lenguaje sencillo, el valor de negocio, todos los parámetros y un ejemplo resuelto.

> [!NOTE]
>
> Este es el complemento orientado a negocio de la [referencia de Dynamic Pricing](https://docs.retailgrid.io/es/agents/dynamic-pricing.md), que cubre todo el detalle técnico: la mecánica de los corredores, el comportamiento de respaldo, las columnas de salida y el panel Price Analysis. Las mismas reglas también se ejecutan como el paso **Apply Pricing Rules** del flujo de trabajo de [Price Optimization](https://docs.retailgrid.io/es/agents/price-optimization.md), actuando como barreras de protección sobre los precios recomendados por el modelo.

## Cómo piensa el agente de precios

Cuatro ideas explican todo lo demás. Las reglas no compiten entre sí: cada una estrecha un **corredor de precio**, y el precio final se elige de lo que queda.

> **El corredor de precio**
>
> Cada regla se traduce en un rango de precios aceptables. "Margen de al menos 25%" es un corredor. "Igualar al competidor ±2%" es un corredor. "No tocar este precio" es un corredor de exactamente un punto.

> **Orden de prioridad**
>
> Las reglas se ejecutan según su número de **Priority** (1 = la más alta, máximo 50). Cada regla cruza su corredor con lo que dejaron las reglas anteriores. El orden visual en la pestaña Rules es cosmético: solo importa Priority.

> **Lo más cercano al precio actual**
>
> Después de ejecutar todas las reglas, el precio final es el punto dentro del corredor resultante **más cercano al precio actual**. El agente mueve los precios lo menos posible mientras cumple todas las reglas.

> **Alcance con Conditions**
>
> Cualquier regla puede limitarse a filas concretas con **Conditions** (condiciones): filtros de columna + operador + valor combinados con AND. En la vista SKU-Store, los atributos de tienda (país, canal, zona de precios) también funcionan como columnas de condición.

Cuando el corredor de una regla no se solapa con lo que queda, la regla queda **violada**. Con el respaldo por defecto (Follow priority) se marca y el cálculo continúa; con Return error la fila se detiene. Las violaciones son información, no fallos: te muestran dónde dos reglas codifican intenciones en conflicto.

## Los 8 tipos de regla

### 1. Fixed Price - bloquea un precio exactamente donde está

Bloquea cada fila que coincide en su precio actual. Ninguna regla posterior puede moverlo.

**Por qué usarla:** algunos precios no le corresponden al algoritmo: artículos en un folleto impreso, precios acordados con un proveedor, SKUs regulados, precios aprobados manualmente. Fixed Price te permite automatizar el resto del surtido con la plena confianza de que estos no se mueven.

| Parámetro | Qué significa |
| :- | :- |
| - (ninguno) | No tiene parámetros propios. Controla *qué* filas bloquea mediante **Conditions**. |

**Ejemplo - supermercado.** El folleto semanal anuncia el aceite de oliva de marca propia a €6.99. Los competidores venden a €7.49 y tu regla de margen empujaría el precio hacia arriba, pero el folleto ya está impreso. `Fixed Price · Priority 1 · Conditions: on_promo IS TRUE` mantiene cada SKU en promoción exactamente donde está mientras el resto de la categoría se reprecia con normalidad. Las reglas posteriores que apunten a estas filas aparecerán como violadas: es el rastro de auditoría que te dice que ganó el bloqueo.

### 2. Price Change Limit - barreras al movimiento

Limita cuánto pueden mover un precio las demás reglas (**Maximum**), o prohíbe cambios menores que un umbral (**Minimum**, la "zona muerta").

**Por qué usarla:** la estabilidad de precios es confianza del cliente. Un comprador que vio €49.99 ayer y €64.99 hoy se siente engañado, y repreciar miles de SKUs por dos céntimos genera ruido operativo para nada. Los límites de cambio mantienen la automatización dentro de fronteras que tu equipo comercial puede defender.

| Parámetro | Qué significa |
| :- | :- |
| Limit Type | **Maximum** limita el movimiento total: corredor `[current - decrease, current + increase]`. **Minimum** prohíbe cambios menores que el umbral. |
| Increase | Percent o Absolute, con un valor: cuánto puede subir el precio (Maximum) o la subida mínima permitida (Minimum). |
| Decrease | Percent o Absolute, con un valor: lo mismo para el movimiento a la baja. |

**Ejemplo - electrónica.** Un televisor de 55" se vende a 499 €. El matching de competidores se ejecuta a diario, pero una venta flash de un rival no debería tirar tu precio por un precipicio de la noche a la mañana. `Maximum · Increase 5% · Decrease 5%` mantiene el precio de hoy dentro de €474.05 - €523.95; si el mercado realmente se movió, el precio llega ahí a lo largo de varias ejecuciones. Una segunda regla, `Minimum · Absolute 0.10`, le dice al agente que no se moleste con cambios inferiores a 10 céntimos.

### 3. Price Change - mueve precios de forma activa

Ajusta los precios que coinciden en un porcentaje, un importe fijo o un valor leído de otra columna. El ajuste siempre se calcula a partir del **precio actual** (la base), nunca a partir de lo que produjeron reglas anteriores, de modo que las reglas apiladas siguen siendo predecibles.

**Por qué usarla:** rebajas, traslados de costo y campañas sin una hoja de cálculo: una regla, miles de filas, totalmente auditable.

| Parámetro | Qué significa |
| :- | :- |
| Value Type | **Percent** cambio relativo · **Absolute** importe fijo · **Column** importe por fila a partir de una columna numérica. |
| Value | El número en sí (`-20` para una rebaja del 20%, `0.50` para +50 céntimos) o la columna a leer. Negativo reduce, positivo aumenta. |

**Ejemplo - moda.** Fin del verano: todo lo etiquetado `season = SS26` con más de 12 semanas de cobertura de stock baja un 20%. `Percent · -20 · Conditions: season = SS26 AND stock_cover_weeks > 12` lleva la camisa de lino de €59.00 a €47.20 y el vestido midi de €89.00 a €71.20. Combínala con una Margin Rule para que ninguna rebaja perfore el margen mínimo, y con Price Rounding para aterrizar en terminaciones ,95.

### 4. Price Match - posiciónate frente a una referencia

Alinea tu precio con una **columna de referencia**: normalmente un precio de competidor, pero sirve cualquier columna numérica. **Equals** lo iguala exactamente; **Between** define una banda de posicionamiento a su alrededor. También puedes aplicar primero un **ajuste de referencia** opcional (multiplicar la referencia por un factor, o desplazarla un porcentaje o un importe fijo) para posicionarte frente a un valor derivado en lugar de la columna en bruto.

**Por qué usarla:** en los artículos clave que definen tu imagen de precio, "nunca más de un 3% por encima del competidor más barato" vale más que cualquier descuento generalizado: los compradores juzgan toda la tienda por esos SKUs. La banda te mantiene competitivo sin seguir cada movimiento de los competidores al céntimo. El ajuste de referencia cubre los casos en que el objetivo se *deriva* de una columna en lugar de ser la columna en sí, por ejemplo "80% del Regular Price cuando el stock es bajo".

| Parámetro | Qué significa |
| :- | :- |
| Reference Column | La columna numérica frente a la que posicionarse, p. ej. `cheapest_competitor`, `market_median` o tu propia columna de PVP recomendado. |
| Reference adjustment | *(opcional)* Transforma la referencia **antes** de igualar: **multiply** por un factor, o suma/resta un **percent** o un importe fijo **absolute**. Déjalo desactivado para usar la referencia tal cual. |
| Operator | **Equals** iguala exactamente · **Between** se mantiene dentro de una banda. |
| From / To | Con Between: límites porcentuales por debajo y por encima de la referencia. `From 2, To 3` = cualquier punto entre un 2% por debajo y un 3% por encima. |

**Ejemplo - electrónica.** Tu lista de KVI debe seguir al mercado. El competidor más barato vende la cafetera más vendida a €179.00. `Between · From 2 · To 3 · Conditions: role = KVI` da un corredor de €175.42 - €184.37. Tu precio actual de €189.00 queda por encima de la banda, así que el agente lo baja a €184.37, y el redondeo lo deja en €183.99.

**Ejemplo - rebaja según stock.** Quieres precios de liquidación en las líneas con poco stock: fija el precio al 80% del Regular Price cuando queden menos de cuatro unidades. `Price Match · Reference Column: regular_price · Reference adjustment: multiply × 0.8 · Equals · Conditions: stock < 4` posiciona cada SKU que cumple la condición al 80% de su propio precio regular.

### 5. Sync Prices - un precio para toda la familia

Obliga a que todas las filas que comparten un valor en una **columna de grupo** terminen con un mismo precio final idéntico.

**Por qué usarla:** nada erosiona la confianza más rápido que el yogur de fresa costando más que el de vainilla de al lado, o la misma camiseta con precios distintos según el color. Las familias de variantes son también donde se esconden los errores de pricing manual. Sync hace que la consistencia sea automática.

| Parámetro | Qué significa |
| :- | :- |
| Group Column | Una columna de texto o categórica cuyo valor compartido define la familia, p. ej. `product_family`, `style_code`. |

El precio compartido se elige en cascada: la **moda** si dos o más miembros ya comparten un precio actual; si no, el **precio del miembro con más ventas** (cuando existe una columna `sales_units`); si no, la **mediana**. Si otras reglas dejan los corredores del grupo solo parcialmente solapados, el motor excluye de la sincronización los SKUs atípicos y los precia individualmente en lugar de romper todo el grupo.

**Ejemplo - supermercado.** Seis sabores de yogur de 150 g de marca propia se fueron separando tras meses de ediciones puntuales: cuatro a €1.19, uno a €1.15, uno a €1.29. `Sync Prices · Group Column: product_line` encuentra la moda, €1.19, y los seis sabores aterrizan ahí en una sola ejecución.

### 6. Margin Rule - protege la rentabilidad

Restringe el precio a partir del **costo** mediante un objetivo de margen o de markup: exacto, o como rango. Suele ser el suelo no negociable debajo de todo lo demás.

**Por qué usarla:** el matching de competidores y las rebajas solo son seguros cuando algo garantiza que sigues ganando dinero. Un margen mínimo significa que el agente puede perseguir al mercado el lunes y tú aún puedes explicar la cuenta de resultados el viernes.

| Parámetro | Qué significa |
| :- | :- |
| Margin Type | **Margin** beneficio como % del precio de venta · **Markup** beneficio como % del costo. Un margen del 25% ≈ un markup del 33%: elige el que use tu equipo en sus informes. |
| Constraint | **Exact** alcanza el objetivo con precisión · **Between** se mantiene dentro de un rango From-To (así se construye un margen mínimo). |
| Value Source | **Percent** · **Absolute** (un importe fijo sobre el costo) · **Column** (un porcentaje por fila, p. ej. objetivos por categoría; Column requiere Constraint = Exact). |
| Value / From-To | El número objetivo, o los límites del rango con Between. |

La matemática de los límites: el porcentaje de margen da `cost / (1 - T)`, el porcentaje de markup da `cost * (1 + T)`, el absoluto da `cost + value` (con `T = value / 100`).

**Ejemplo - productos para mascotas.** El pienso premium para perros cuesta €18.00 la bolsa; la política de la categoría es un margen entre 25% y 45%. Eso es un corredor de €24.00 - €32.73. El matching de competidores puede moverse dentro de la banda, pero un rival a €22.99 no te arrastrará por debajo de €24.00; la regla de match aparece como violada y el suelo se mantiene.

### 7. Price Rounding - aterriza en las terminaciones que esperan los clientes

Obliga a que los precios finales caigan en terminaciones permitidas: ,99, ,95, euros enteros, lo que pida tu imagen de precio. El redondeo es especial: **siempre se ejecuta después de todas las demás reglas**, sin importar su posición en la lista de prioridad.

**Por qué usarla:** un lineal lleno de €12.37 y €8.42 daña silenciosamente la percepción de precio. Las terminaciones psicológicas están entre los efectos mejor documentados del retail, y distintas terminaciones pueden transmitir cosas distintas: ,99 para líneas de valor, números redondos para premium. El redondeo hace que los precios automatizados parezcan fijados deliberadamente por un comerciante.

| Parámetro | Qué significa |
| :- | :- |
| Price Scope | Todos los precios, o un filtro por rango de precio (Equals / Between), para que los artículos baratos y los caros puedan seguir convenciones distintas. |
| Pattern | Terminaciones permitidas separadas por comas, p. ej. `*.99, *.95`. |
| Excluded endings | Patrones a evitar, p. ej. `*.00`. |
| Rounding Direction | **Up** · **Down** · **Closest**: hacia qué terminación válida moverse, siempre dentro del rango factible. |

**Ejemplo - hogar y bricolaje.** Dos reglas de redondeo dividen el surtido: por debajo de 100 €, `Pattern *.99, *.95 · Closest` convierte un €12.78 calculado en €12.95; de 100 € en adelante, `Pattern *9.00 · Down` convierte €342.60 en €339.00. Los artículos económicos reciben terminaciones psicológicas; los de ticket alto, números limpios de comerciante.

### 8. Price Relations - mantén una escalera de precios deliberada

Donde Sync hace idéntico a un grupo, Price Relations lo mantiene **deliberadamente distinto**: conserva una separación estructurada entre los miembros, sobre el precio de estantería o sobre el **precio unitario** (por kg / por litro).

**Por qué usarla:** el bueno-mejor-óptimo solo funciona si las separaciones cuentan la historia; si "mejor" se acerca a menos de 50 céntimos de "óptimo", la escalera se derrumba. Lo mismo para la arquitectura de formatos: la bolsa de 1 kg debe ganar a la de 500 g por kilo, siempre. Price Relations codifica esa lógica de merchandising para que ningún reprecio individual pueda romperla. Comparar dentro de varios atributos mantiene en una misma cadena solo productos realmente comparables, y un *rango* de separación deja respirar a la escalera en lugar de forzar un único paso exacto.

| Parámetro | Qué significa |
| :- | :- |
| Group Column | La columna que define la escalera, p. ej. `ladder_group`, `pack_family`. |
| Compare within | *(opcional)* Atributos adicionales que los miembros de la escalera **también** deben compartir, p. ej. `model`, `storage`, `colour`. Añádelos cuando una sola columna de grupo sea demasiado amplia y productos no relacionados acabarían en la misma cadena. Hasta 10 atributos; deben ser distintos de la columna de grupo. |
| Price Type | **Price** el precio de estantería · **Unit Price** por unidad de medida, la opción correcta para familias de tamaños de formato. |
| Relationship Type | **One by one** cada artículo baja un escalón respecto al anterior · **Same gap** todos los miembros mantienen una separación constante respecto al ancla. |
| Gap Value Type + Value | Percent o Absolute, más el tamaño de la separación (p. ej. 15% o €5.00). Define un **máximo** junto a la separación base para permitir un **rango** en lugar de una separación exacta. |
| Anchor Logic | **Highest priced** el miembro más caro ancla la escalera · **Explicit item** tú nombras el SKU ancla. |

Antes de ejecutar, obtén una **vista previa** de la escalera desde el cuadro de diálogo de la regla: muestra la cadena resultante y la separación en la que cae cada miembro, para que detectes un SKU mal agrupado antes de que llegue a un precio.

**Ejemplo - moda.** Una pared de camisetas sigue el bueno-mejor-óptimo, anclada por la camiseta premium de algodón pima a €39.90. `One by one · Percent 25 · Anchor: Highest priced` escalona la escalera a €29.93 y €22.44; el redondeo los pule a €29.95 y €22.45. Cuando el ancla se mueve (una rebaja, un cambio de costo), toda la escalera la sigue automáticamente.

## Un SKU a través de cuatro reglas

Las estrategias reales apilan reglas. Un televisor de 55" (precio actual €499.00, costo €380.00, competidor más barato €479.00) a través de una estrategia típica de electrónica:

| Priority | Regla | Corredor que produce | Rango factible acumulado |
| :- | :- | :- | :- |
| 1 | Margin Rule - margen entre 15% y 60% | €447.06 - €950.00 | €447.06 - €950.00 |
| 2 | Price Match - cheapest\_competitor, Between -2% / +3% | €469.42 - €493.37 | €469.42 - €493.37 |
| 3 | Price Change Limit - Maximum ±5% | €474.05 - €523.95 | €474.05 - €493.37 |
| 4 | Price Rounding - `*.99`, Closest *(siempre se ejecuta al final)* | solo terminaciones permitidas | final: **€492.99** |

El punto del rango factible más cercano al precio actual de 499 € es el borde superior, €493.37; el redondeo lo lleva a la terminación permitida más cercana dentro del rango, €492.99. Resultado: 6 € más afilado que ayer, dentro del 3% del competidor más barato, 22,9% de margen, una terminación amigable para el lineal, y cada paso visible en el panel Price Analysis.

## Consejos para construir estrategias

* **Ordena según lo negociable que sea cada regla.** Primero los bloqueos (Fixed Price), luego las restricciones duras (margen mínimo, Change Limit), luego los objetivos (Price Match, Price Change, Sync, Relations). El redondeo puede ir en cualquier sitio: siempre se ejecuta al final.
* **Prueba primero con la muestra.** Ejecuta sobre **Sample 10 Rows** (pestaña Parameters) y revisa el panel Price Analysis en unas cuantas filas antes de comprometerte con el conjunto de datos completo.
* **Las violaciones son información.** Las violaciones recurrentes suelen significar que dos reglas codifican intenciones en conflicto. Reserva **Return error** para las verdaderas líneas rojas.
* **Usa Conditions con generosidad.** La misma Margin Rule con distintas Conditions se convierte en una política de margen por categoría; en la vista SKU-Store, las condiciones por atributo de tienda te dan estrategias específicas por país o por canal.
* **Define Priority de forma explícita.** Cuando un resultado te sorprenda, revisa los números de Priority antes que cualquier otra cosa.

## Relacionado

* [Dynamic Pricing](https://docs.retailgrid.io/es/agents/dynamic-pricing.md) - referencia técnica completa del motor de reglas
* [Price Optimization](https://docs.retailgrid.io/es/agents/price-optimization.md) - precios recomendados por el modelo, con las reglas como barreras de protección
* [Revisar y aprobar cambios de precio](https://docs.retailgrid.io/es/agents/price-approval.md)
* [Descripción general de los agentes](https://docs.retailgrid.io/es/agents/overview.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.