Próxima cita HeavyDeals participa como ponente en el Summit internacional HVAC&R de China · Hangzhou · 22 octSummit HVAC&R · Hangzhou · 22 oct

Odoo y las tarifas indexadas al metal: qué pueden hacer sus tarifas y qué no

Qué calcula una regla de tarifa de Odoo 19, leído en su código, dónde no encaja un índice del cobre o el aluminio, y 12 puntos para revisar tu sistema.

HeavyDeals Publicada 7 min Checklist

Una tarifa de Odoo 19 resuelve bien el precio a partir del coste: recargo, redondeo, importe fijo, margen mínimo y máximo, escalas por cantidad, fechas, conversión de divisa y una tarifa para cada cliente. Lo que no hace por sí sola es ligar parte del coste de un producto a un índice externo del metal, como el cobre del LME, y recalcular cuando ese índice se mueve: la base de una regla solo puede ser el precio de venta, el coste u otra tarifa. Para cubrir ese hueco hace falta un módulo a medida o una tarea programada que actualice el coste.

Compara tu sistema con Odoo 19

Lista de comprobación

¿Lo hace tu tarifa?

Doce cosas que necesita una tarifa indexada al metal. La columna de Odoo 19 ya viene rellena según su código; tú rellena la última con lo que hace tu sistema.

Odoo 19 estándar

3 sí · 3 con configuración · 6 no / desarrollo a medida

Tu sistema

0 sí · 0 con configuración · 0 no / desarrollo a medida

0 de 12 respondidas
  1. 01
    Parte del coste de cada producto ligada al metal Una regla de tarifa no tiene campo para eso. Sus datos son una base, un descuento o recargo, el redondeo, un importe fijo, un margen mínimo y máximo, una cantidad mínima y fechas. Inferido del código
    Odoo 19 estándar No / desarrollo a medida
  2. 02
    Índice de referencia y fecha con la que se hizo la tarifa Nada en la tarifa guarda un índice externo ni su valor cuando se fijó. La base solo puede ser el precio de venta, el coste u otra tarifa. Inferido del código
    Odoo 19 estándar No / desarrollo a medida
  3. 03
    Recálculo automático cuando se mueve el índice Los precios se calculan desde la base cada vez que se piden, así que siguen al coste. Falta el paso que convierte un movimiento del índice en un coste nuevo: un módulo a medida o una tarea programada. Inferido del código
    Odoo 19 estándar No / desarrollo a medida
  4. 04
    Coste en dólares, precio en euros Una regla convierte su base a la divisa de la tarifa con el cambio de la fecha. El coste del producto va en la divisa de la empresa, así que una base en dólares exige una tarifa en USD debajo. Odoo documenta la actualización automática del cambio (diaria, semanal o mensual) en los ajustes de Contabilidad. Leído en el código
    Odoo 19 estándar Con configuración
  5. 05
    Descuento por cliente La ficha de cada cliente tiene un campo de tarifa, y una regla puede tomar otra tarifa como base y aplicarle un descuento. Documentado por Odoo
    Odoo 19 estándar Sí
  6. 06
    Escalas por cantidad que no se contradicen Las escalas son nativas: cada regla tiene una cantidad mínima y se mira primero la más alta. Nada comprueba que una escala mayor dé un precio menor; las validaciones cubren fechas, márgenes, bucles entre tarifas y producto. Inferido del código
    Odoo 19 estándar Con configuración
  7. 07
    Redondeo Redondea a un múltiplo de un valor, después del descuento y antes del importe fijo. El propio texto de ayuda de Odoo: redondear a 10,00 y sumar −0,01 para acabar en 9,99. Documentado por Odoo
    Odoo 19 estándar Sí
  8. 08
    Fecha de entrada en vigor de cada precio Cada regla tiene fecha de inicio y de fin, y solo se aplica entre ellas. Documentado por Odoo
    Odoo 19 estándar Sí
  9. 09
    Aprobación antes de publicar un cambio La tarifa no tiene campo de estado. Una regla guardada se aplica en cuanto sus fechas están vigentes. Una fecha de inicio futura programa el cambio, no lo aprueba. Inferido del código
    Odoo 19 estándar No / desarrollo a medida
  10. 10
    Rastro de cómo se calculó cada precio En parte. En una línea de venta Odoo sabe qué regla le puso precio, y cada regla con fórmula muestra un ejemplo sobre 100. El coste y el cambio detrás de cada precio no se guardan con él, y los cambios en las reglas no quedan en el historial. Inferido del código
    Odoo 19 estándar No / desarrollo a medida
  11. 11
    Cada cliente ve sus precios en línea La tarifa del cliente fija los precios que ve en la app de comercio electrónico (website_sale). El portal de cliente estándar lista presupuestos y pedidos (/my/quotes, /my/orders), no un catálogo con precios. Leído en el código
    Odoo 19 estándar Con configuración
  12. 12
    Aviso a los clientes cuando cambian sus precios Nada en el código de tarifas escribe a los clientes cuando cambia una regla. El historial de la tarifa registra su divisa, su empresa y sus grupos de países, no sus reglas. Inferido del código
    Odoo 19 estándar No / desarrollo a medida

«Documentado por Odoo»: lo dice la documentación de Odoo 19.0 y el código coincide. «Leído en el código»: la respuesta se basa en un campo o una línea de Odoo 19.0 (Community) que leímos el 11 de octubre de 2026. «Inferido del código»: se basa en algo que no encontramos en el código; es nuestra interpretación, no algo que diga Odoo. «Estándar» quiere decir sin módulos a medida. Tus respuestas se quedan solo en este navegador.

De los doce puntos, Odoo 19 estándar cumple tres de serie, tres configurándolo y seis solo con desarrollo a medida. Los seis que faltan son justo los que convierten una tarifa normal en una indexada: la parte de metal, la referencia, el recálculo, la aprobación, el rastro y el aviso al cliente. Todo esto sale de leer el código de la rama 19.0 el 11 de octubre de 2026 (commit e4e2d65) y la documentación oficial de Odoo 19; lo que marcamos como inferido es lo que no encontramos escrito ahí.

Cómo calcula una regla de tarifa de Odoo

En Odoo, una tarifa (en la interfaz, «lista de precios») es un conjunto de reglas. Según product_pricelist_item.py, cada regla calcula el precio de una de estas tres maneras: precio fijo, descuento o fórmula. Con fórmula, el precio sale así:

base   = precio de venta | coste | otra tarifa
precio = base × (1 − descuento %)
precio = redondeo a un múltiplo
precio = precio + importe fijo
precio = máx(precio, base + margen mínimo)
precio = mín(precio, base + margen máximo)

Antes de nada, la base se pasa a la divisa de la tarifa con el cambio de la fecha del cálculo. Y un descuento negativo funciona como un recargo.

Odoo aplica la primera regla que encaja, en este orden: primero las de variante, luego las de producto, de categoría y las generales; dentro de cada grupo, la de cantidad mínima más alta. Solo cuentan las reglas cuyas fechas de inicio y de fin abarcan la fecha del cálculo, que en un pedido es la fecha del pedido (product_pricelist.py). El precio no se guarda: se calcula cada vez que hace falta. Y, como recuerda la documentación de tarifas de Odoo 19, la tarifa propone un precio, y en el pedido siempre se puede cambiar a mano.

Lo que Odoo hace bien

  • Precio sobre coste. Una regla que parte del coste y aplica un recargo da el precio de venta; si cambia el coste, el siguiente presupuesto ya sale con el precio nuevo, porque se calcula en ese momento.
  • Redondeo y márgenes. El redondeo a múltiplo va después del descuento y antes del importe fijo; la documentación de Odoo explica cómo hacer que el precio acabe en 9,99 (redondeo a 10 e importe fijo de −0,01). Los márgenes mínimo y máximo ponen suelo y techo al resultado.
  • Escalas y fechas. Cada regla tiene cantidad mínima, fecha de inicio y fecha de fin.
  • Tarifa por cliente. Cada cliente tiene asignada su tarifa (res_partner.py), y una tarifa puede apoyarse en otra con un descuento encima.
  • Divisas. La base se pasa a la divisa de la tarifa con el cambio de la fecha del cálculo, y Odoo explica cómo actualizar el cambio de forma automática, a diario, cada semana o cada mes, desde los ajustes de Contabilidad.

Dónde no encaja el índice del metal

La fórmula de una tarifa indexada al metal necesita tres datos que una regla de Odoo no tiene: la parte del coste que sigue al metal, el valor del índice con el que se fijó la tarifa y el valor de hoy.

factor  = parte_metal × índice_hoy / índice_ref + (1 − parte_metal)
coste_€ = coste_ref_USD × factor / EURUSD_hoy

Una regla de Odoo calcula base × factor + importe, y la base le llega ya hecha. Si el índice se mueve, ese movimiento tiene que estar ya en la base cuando la regla la lee, y nada en el código de tarifas lo mete ahí (inferido). Un ejemplo con cifras ilustrativas: si el índice pasa de 13.500 a 14.738 USD/t y el 70 % del coste es metal, el coste sube un 6,4 % (0,7 × 14.738 / 13.500 + 0,3 = 1,064). La regla de Odoo seguirá dando el precio de ayer hasta que alguien cambie el coste.

Hay un segundo matiz, con la divisa. El coste de un producto se guarda en la divisa de la empresa (product_template.py), que para una empresa española es el euro. Si compras en dólares, la conversión se hace al registrar el coste, no al calcular el precio (inferido); para que el cambio de hoy entre en el precio hace falta una tarifa base en USD.

Tres formas de cubrir el hueco

  1. Una tarea programada que reescriba el coste. Lee el índice, calcula el coste indexado de cada producto y lo escribe en el campo de coste; las reglas que parten del coste lo siguen. Es código a medida. Y ojo: ese mismo campo sirve para valorar el inventario. Su texto de ayuda dice que se calcula solo con coste medio (AVCO) y que se usa para valorar el producto y calcular márgenes, así que meter ahí la fórmula de venta afecta a la valoración (inferido).
  2. Una tarifa base en dólares que se vuelve a importar. Tienes precios fijos en USD, los recalculas fuera (en una hoja de cálculo) cada vez que se mueve el índice y los importas; las tarifas de cliente en euros se apoyan en ella. La conversión de divisa la hace Odoo de serie; el índice sigue siendo un paso manual.
  3. Un módulo que amplíe el cálculo de la regla. El código deja la puerta abierta: el cálculo pasa parámetros «disponibles para extensiones», y el texto de la base está pensado para que otros módulos añadan opciones. Un módulo puede añadir una base «índice» con su referencia y su parte de metal. Hay que desarrollarlo y mantenerlo en cada versión de Odoo (inferido).

Ninguna de las tres añade por sí sola un paso de aprobación ni un aviso al cliente: el modelo de tarifas no tiene estado y su historial no registra las reglas.

Cómo trabaja HeavyDeals junto a Odoo

HeavyDeals es el sistema comercial para la distribución industrial y trabaja junto a tu ERP: la contabilidad, las compras y el almacén se quedan donde están. En HeavyDeals cada precio es una fórmula con el índice del cobre del LME, el cambio EUR/USD y el margen, con el descuento de cada cliente; cuando el índice se mueve, el sistema propone el recálculo y nada se publica hasta que alguien lo aprueba. Cada cliente ve sus precios netos en su portal y descarga su tarifa en PDF con las cotizaciones fechadas. Tienes la fórmula paso a paso en la guía de la tarifa indexada al metal, y todas las demás en el índice de guías. Mira cómo funciona.

Preguntas frecuentes

¿Puede una tarifa de Odoo seguir el precio del cobre del LME?

No por sí sola. En Odoo 19 una regla de tarifa solo puede partir del precio de venta, del coste del producto o de otra tarifa, y no tiene campo para un índice externo ni para la parte del coste ligada al metal. Para seguir un índice hace falta un módulo a medida o una tarea programada que actualice el coste.

¿Qué puede hacer una fórmula de tarifa en Odoo?

Toma una base, le aplica un descuento (un descuento negativo es un recargo), redondea a un múltiplo, suma un importe fijo y deja el resultado entre un margen mínimo y uno máximo sobre la base. Cada regla puede aplicarse a una variante, un producto, una categoría o a todo, desde una cantidad mínima y entre dos fechas.

¿Convierte Odoo un coste en dólares a un precio en euros?

Una regla convierte su base a la divisa de la tarifa con el cambio de la fecha. El coste del producto se guarda en la divisa de la empresa, así que, para partir de dólares, hace falta una tarifa en USD por debajo de la tarifa en euros.

¿Tienen las tarifas de Odoo un paso de aprobación antes de publicar un cambio?

No en el modelo de tarifas de Odoo 19: no tiene campo de estado, y una regla guardada se aplica en cuanto sus fechas están vigentes. Poner una fecha de inicio futura programa el cambio, pero no lo aprueba. Es lo que deducimos al leer el código.

Fuentes

  1. Pricelists (Odoo 19.0 documentation) Odoo · consultada el 11 oct 2026
  2. Multi-currency system (Odoo 19.0 documentation) Odoo · consultada el 11 oct 2026
  3. addons/product/models/product_pricelist_item.py (branch 19.0) Odoo, GitHub · consultada el 11 oct 2026
  4. addons/product/models/product_pricelist.py (branch 19.0) Odoo, GitHub · consultada el 11 oct 2026
  5. addons/product/models/product_template.py (branch 19.0) Odoo, GitHub · consultada el 11 oct 2026
  6. addons/product/models/res_partner.py (branch 19.0) Odoo, GitHub · consultada el 11 oct 2026
  7. addons/website_sale/models/website.py (branch 19.0) Odoo, GitHub · consultada el 11 oct 2026
  8. addons/sale/controllers/portal.py (branch 19.0) Odoo, GitHub · consultada el 11 oct 2026

Cada cifra y cada norma se ha comprobado en las fuentes de arriba, en la fecha que lleva cada una; última revisión de la guía: 11 de octubre de 2026. Los ejemplos usan cifras ilustrativas, no cotizaciones del día. No es asesoramiento legal ni fiscal. Redactado con ayuda de IA y revisado por el equipo de HeavyDeals.

Recibe las guías nuevas

Te escribimos cuando publiquemos una guía o cuando cambie una norma que ya cubrimos (CBAM, antidumping, aranceles). Nada más.

Te das de baja respondiendo a cualquiera de los correos. Privacidad · O síguelas por RSS

Tu tarifa ligada al metal se recalcula cuando se mueve el mercado, y tu equipo solo tiene que aprobarla.

Pide una demo

Solo usamos tus datos para atender tu solicitud. Política de privacidad