Normas de visualización de precios en Europa: cuándo mostrar precios netos, brutos y por unidad
Este es un resumen en lenguaje claro de cómo los ajustes de PrestaShop se corresponden con las normas habituales de visualización de precios en la UE; no constituye asesoramiento legal. Confirma tus obligaciones en cada mercado con un asesor cualificado.
La mayoría de los comerciantes de PrestaShop tratan la visualización de precios como una cuestión de diseño: el tamaño de la fuente, el color del precio tachado, dónde colocar la nota "IVA incl.". En Europa no es nada de eso. Si muestras precios netos o brutos, si debe aparecer un precio unitario junto al precio de venta, y qué norma nacional se aplica cuando un cliente francés compra en tu tienda alemana son preguntas con respuesta legal; equivocarse es justo el tipo de cosa que puede denunciar un competidor o revisar una autoridad de consumo en una inspección puntual. La buena noticia: casi todas estas normas se corresponden con un ajuste concreto de PrestaShop. Esta guía trata exactamente de esa correspondencia: qué exige la ley sobre presentación de precios y qué interruptor, campo o regla fiscal del back office lo resuelve.
Para mantener el foco: este artículo se ocupa de la visualización del precio: neto frente a bruto, precios unitarios y cómo deben mostrarse los precios rebajados. La mecánica del IVA en sí, qué tipo se aplica, el registro OSS/IOSS, la inversión del sujeto pasivo en B2B transfronterizo, tiene sus propias guías, enlazadas en los puntos donde se conectan. Si tu pregunta es "qué tipo aplico", empieza por la configuración fiscal en PrestaShop y el IVA en la UE: OSS, IOSS y lo que debe gestionar tu tienda. Si tu pregunta es "qué precio debo mostrar", estás en el lugar adecuado.
La regla que lo sostiene todo: los precios B2C son brutos

En todos los Estados miembros de la UE, el precio que ve un consumidor debe ser el total que pagará, IVA incluido. Esto deriva de la Directiva sobre los derechos de los consumidores y de la Directiva sobre indicación de precios (98/6/CE): el "precio de venta" mostrado a un consumidor es el precio final con todos los impuestos incluidos. Un producto que cuesta 100 € más un 21% de IVA se muestra al comprador como 121,00 €, sin más. Mostrar a consumidores solo precios netos no es una preferencia estética que puedas activar; es incumplimiento.
Esto sorprende a muchos porque PrestaShop no tiene un único interruptor maestro "Mostrar precios con impuestos incluidos" en una página de ajustes: la visualización bruto-frente-a-neto se controla desde el grupo de clientes. Todo visitante pertenece a un grupo, y cada grupo tiene un Método de visualización de precios configurado como Impuestos incluidos o Impuestos excluidos. El comportamiento que ven tus visitantes anónimos y clientes minoristas normales se controla con los grupos predeterminados en Clientes → Grupos; en una instalación estándar son Visitante, Invitado y Cliente. En cualquier tienda que venda a consumidores, el Método de visualización de precios de cada uno de esos grupos debe ser Impuestos incluidos. ¿Y qué cambia eso en la práctica? Controla si las páginas de producto, los listados de categoría, el carrito y los resultados de búsqueda muestran la cifra bruta o la neta a ese visitante. Deja un grupo predeterminado en "Impuestos excluidos", un estado que arrastran algunos temas importados y configuraciones orientadas a B2B, y todos los precios visibles para consumidores de esos compradores serán técnicamente ilícitos en Europa, aunque el IVA se siga calculando correctamente en la línea del pedido.
Un ajuste cercano que suele confundirse con esto: en Internacional → Impuestos hay un interruptor Mostrar impuestos en el carrito de compra (la clave de configuración PS_TAX_DISPLAY), pero solo determina si el impuesto aparece en su propia línea dentro del carrito; no controla la visualización bruta/neta de los precios del catálogo. La palanca real es el Método de visualización de precios del grupo.
Hay dos cosas que el método de visualización del grupo no hace, y que suelen causar confusión: no añade literalmente el texto "IVA incl." (eso es texto de la plantilla del tema, más abajo), y configurar un grupo B2B en neto es exactamente el mecanismo que se usa para ofrecer precios netos junto a precios brutos B2C. Ese segundo punto es donde la mayoría de las tiendas mixtas se complican, así que merece su propia sección.
Mostrar neto a empresas y bruto a consumidores, sin incumplir la ley para ninguno
Los precios netos no están prohibidos: son la información adecuada para el público correcto. El patrón estándar y legal es: los clientes empresariales verificados ven precios netos (sin IVA) con una indicación clara de "IVA excl.", y todos los demás ven precios brutos. PrestaShop lo gestiona con el mismo mecanismo de grupos de clientes descrito arriba: un grupo B2B específico simplemente recibe el método de visualización contrario.
Ve a Clientes → Grupos, crea o edita un grupo (por ejemplo, un grupo "Mayoristas" o "B2B") y configura Método de visualización de precios como Impuestos excluidos. El campo se almacena como price_display_method del grupo, y PrestaShop determina qué cifra ve un visitante concreto a partir del ajuste de su grupo mediante Product::getTaxCalculationMethod(). Un cliente asignado a ese grupo verá precios netos en toda la tienda; un cliente minorista dentro de un grupo predeterminado seguirá viendo precios brutos. Ambos cumplen para su público, siempre que tu tema etiquete con claridad la visualización neta para que un comprador profesional nunca dude de que el IVA se añadirá después.
La fricción práctica está en todo lo que rodea a ese interruptor: asignar clientes al grupo correcto, gestionar a los visitantes que aún no han iniciado sesión y permitir que un comprador cambie de vista cuando tu catálogo sirve legítimamente a ambos públicos. Construir esa lógica de grupos, el registro condicionado por el número de IVA y las condiciones de pago a cuenta que suelen acompañarlo es un proyecto en sí mismo; cubrimos toda la configuración B2B en comercio electrónico B2B con PrestaShop: gestión del IVA, precios netos y condiciones de pago, y la inversión del sujeto pasivo transfronteriza que aplica tipo cero a un número de IVA válido de la UE forma parte de la guía OSS/IOSS.
Si quieres una experiencia más limpia que cambiar grupos a mano, un selector visible neto/bruto controlado por el comprador, o una visualización automática por grupo sin editar el tema. Ese es el hueco que cubre nuestro módulo Tax Display Switcher. Lo que te aporta: una tienda que atiende legítimamente tanto a clientes minoristas como profesionales puede mostrar a cada uno el precio que legalmente le corresponde ver, configurado desde el back office, sin bifurcar tu tema para conseguirlo.
El texto "IVA incl." es texto de plantilla, no un ajuste
Esta es una distinción que cuesta dinero real a los comerciantes alemanes: configurar el método de visualización de un grupo como "Impuestos incluidos" hace que el precio sea bruto, pero no imprime por sí solo las palabras "inkl. MwSt." junto a él. Esa etiqueta la genera el tema, y varios países, Alemania con especial rigor, exigen el texto, no solo la cifra bruta.
En los temas predeterminados de PrestaShop, el bloque de precio lo renderiza la plantilla product-prices.tpl (en themes/<your-theme>/templates/catalog/_partials/). En la propia página de producto, el tema imprime un indicador fiscal genérico mediante {$product.labels.tax_short}, que se resuelve como "(tax incl.)" o "(tax excl.)", no como el nombre localizado del impuesto. El texto específico de cada país se controla en otro lugar: hay un interruptor por país Mostrar etiqueta de impuesto en Internacional → Localización → Países (el campo display_tax_label), y el propio nombre del impuesto, que configuras en Internacional → Impuestos y aplicas por país en Internacional → Reglas de impuestos, es lo que aparece en los contextos de etiqueta fiscal (sobre todo carrito, transportista y pago). Para mostrar correctamente el texto alemán, normalmente tienes que editar la plantilla del tema para imprimir literalmente "inkl. MwSt." cerca del precio, porque el núcleo solo ofrece de serie la cadena genérica "(tax incl.)". ¿Y qué importa? Una tienda alemana que muestra 119,00 € sin el texto "inkl. MwSt." incumple la Preisangabenverordnung aunque el cálculo sea correcto; y eso se corrige en la plantilla y en el nombre del impuesto, no recalculando el precio.
La PAngV alemana: el reglamento más estricto y lo que exige en PrestaShop
Si vendes a consumidores alemanes, en la práctica estás configurando la visualización de precios según el estándar más exigente de la UE. La Preisangabenverordnung (PAngV) exige que los precios dirigidos a consumidores:
- Incluyan el IVA (19% general, 7% reducido): tus grupos de clientes predeterminados en Impuestos incluidos, más la regla fiscal alemana correcta.
- Incluyan literalmente el texto "inkl. MwSt." (o "inkl. gesetzlicher MwSt."): el punto sobre etiquetas fiscales explicado arriba.
- Indiquen los gastos de envío o enlacen a ellos cerca del precio: normalmente una línea "zzgl. Versandkosten" con enlace a tu página CMS de envíos, colocada en el bloque de precio.
- Muestren un precio unitario (Grundpreis) para todo lo vendido por peso, volumen, longitud o superficie: un champú de 500 ml a 8,99 € también debe mostrar "17,98 € / 1 Liter".
La norma del Grundpreis afecta a muchos más productos de lo que esperan los propietarios: cosméticos, alimentos, productos de limpieza, tela por metro, cable por metro, cualquier cosa donde un comprador compararía razonablemente cantidades. La conclusión práctica a la que llegan muchos comerciantes es configurar toda la tienda según los estándares alemanes y servir así a todos los mercados: es una base conservadora, no una garantía universal de cumplimiento. La visualización al estilo alemán del IVA, los gastos de envío y el precio unitario es un estándar común sólido, pero no satisface por sí sola todas las normas nacionales de idioma, información, Ómnibus, sector o pago; aun así, permite construirlo una vez en lugar de ramificar la lógica de visualización por país. La parte del precio unitario tiene un campo dedicado en PrestaShop, que es la siguiente sección.
Precios unitarios: el campo de producto que la mayoría de las tiendas deja vacío
El precio unitario, precio por kg, por litro, por metro, por pieza, es obligatorio en toda la UE (Directiva 98/6/CE) para bienes vendidos por cantidad medible, y PrestaShop cuenta desde hace años con un campo de primera clase para ello. La mayoría de las tiendas simplemente nunca lo rellena.
En la página del producto, abre la pestaña Precios y busca Precio por unidad (las versiones antiguas 1.6/1.7 lo etiquetan como "Precio unitario"). Introduces la unidad (por kg, por litro, por m, "pieza") y PrestaShop calcula la cifra por unidad a partir del precio del producto. Internamente son los campos unit_price_ratio y unity del producto, y el front office renderiza el resultado automáticamente: la línea "17,98 € / 1 Liter" aparece junto al precio sin cirugía de plantilla. ¿Qué ganas realmente al rellenarlo? Cumplimiento para los productos donde es obligatorio y una ventaja discreta de conversión: una cifra clara por litro o por kg es exactamente lo que busca un comprador que compara, y mostrarla elimina una razón para irse a un competidor que hizo el cálculo por él.
Dos notas operativas de hacerlo a escala. Primero, en un catálogo grande no quieres escribir la unidad a mano en cientos de productos: el campo está disponible en la importación CSV de productos (Parámetros avanzados → Importar), así que asigna tus columnas "unidad" y "ratio de precio unitario" y configúralas en bloque. Segundo, el precio unitario mostrado se deriva del precio base; si tu precio base es bruto (como debe ser en B2C), el precio unitario lo hereda. Mantén ambos coherentes o una revisión del Grundpreis alemán marcará la discrepancia.
Precios rebajados: mostrar descuentos a la manera de la Directiva Ómnibus
Las normas Ómnibus sobre reducciones de precio se aplican en los Estados miembros de la UE a través de leyes nacionales desde la fecha límite de implementación de 2022, con matices locales; por tanto, cómo muestras un descuento está regulado, no solo si lo ofreces. Cuando anuncias una reducción de precio, el precio de referencia que tachas debe ser el precio más bajo al que se vendió el producto en los 30 días anteriores, salvo que exista una excepción local; no el precio completo original, y desde luego no una cifra inflada la semana anterior a la promoción.
Un ejemplo práctico: un producto suele estar a 50 €. Hace dos semanas hiciste una promoción de fin de semana a 40 €. Ahora lanzas una nueva oferta a 35 €. La referencia legal es 40 € (el mínimo de 30 días), así que lo presentas como 40 € → 35 €, una reducción del 12,5%; no 50 € → 35 € con un 30% de descuento. La norma alcanza los precios tachados en páginas de producto, banners de rebajas, correos promocionales y cualquier evento de Black Friday o liquidación. Consulte las normas nacionales sobre reducciones personalizadas, precios de packs genuinos y productos que llevan menos de 30 días en el mercado; no dé por supuesta una exención universal.
Donde esto afecta específicamente a PrestaShop: las Reglas de precios del catálogo y los Precios específicos (el panel "Añadir un precio específico" por producto en la pestaña Precios) muestran por defecto el precio original como referencia tachada; y "precio original" en el núcleo significa tu precio de catálogo, que no es lo mismo que el mínimo de 30 días que exige la norma Ómnibus. PrestaShop de serie no tiene memoria nativa del "precio más bajo de los últimos 30 días", así que un tachado literal del precio de catálogo puede exagerar el descuento e incumplir la norma. Los enfoques conformes son configurar deliberadamente la referencia del precio específico como el mínimo real de 30 días, o usar un módulo que registre el historial de precios y renderice automáticamente la referencia correcta. En cualquier caso, trata el tachado predeterminado como algo que debes verificar, no dar por bueno.
Venta transfronteriza: ¿qué normas de precios se aplican?
Cuando te diriges a consumidores de otro país de la UE, las normas obligatorias de protección del consumidor de ese país pueden aplicarse a esas ventas. No es una regla simple de "siempre el país del cliente", sino que depende de si orientas tus actividades a ese mercado. Una tienda alemana que se dirige activamente a consumidores franceses puede tener que seguir las normas francesas de presentación para esas ventas; si te diriges a Polonia, la aplicación polaca de Ómnibus (la UOKiK supervisa activamente las tiendas en línea) puede ser el estándar por el que se te evalúe. Diseña, por tanto, para cada mercado al que sirves. La respuesta pragmática a la que llegan muchos comerciantes es la ya mencionada: usar precios brutos con texto explícito de IVA, precios unitarios donde correspondan y referencias correctas según Ómnibus como base, y después confirmar los requisitos adicionales de cada mercado.
El tipo que impulsa la cifra bruta sí cambia según el destino, y PrestaShop lo gestiona mediante reglas fiscales vinculadas al país de entrega: configura un grupo de reglas fiscales por país en Internacional → Reglas de impuestos y asígnalo a tus productos, y el precio bruto mostrado se recalculará a partir de la dirección de envío. La parte de registro y declaración al cobrar el IVA de otro país (umbrales OSS, cuándo debes registrarte) es un tema propio, tratado en la guía OSS/IOSS; cómo interactúan las devoluciones y los reembolsos entre países se explica en devoluciones transfronterizas.
Una nota sobre los documentos posteriores al precio
El precio que muestras y el precio de la factura deben coincidir, y la factura tiene sus propias normas legales de contenido. Si estás ajustando la visualización de precios, merece la pena revisar la factura al mismo tiempo: la presentación bruto/neto, el desglose del IVA y los campos obligatorios se tratan en personalización de facturas en PrestaShop: plantillas PDF y requisitos legales, y las obligaciones más amplias al vender en la UE están en la guía para propietarios de tiendas sobre la legislación de comercio electrónico en la UE.
Preguntas frecuentes
¿Dónde cambio en PrestaShop los precios para consumidores a impuestos incluidos (brutos)?
No hay un único interruptor maestro "mostrar precios con impuestos incluidos": bruto-frente-a-neto se controla por grupo de clientes. Ve a Clientes → Grupos y configura el Método de visualización de precios como Impuestos incluidos en cada grupo predeterminado al que pertenezcan tus consumidores (Visitante, Invitado, Cliente en una instalación estándar). Dejar uno en "Impuestos excluidos", un estado que arrastran algunos temas importados, hace que todos los precios visibles para consumidores de esos compradores no cumplan en la UE, aunque el IVA se siga calculando correctamente en la línea del pedido. (Resumen en lenguaje claro, no asesoramiento legal).
¿Por qué mi precio bruto no muestra "IVA incl." / "inkl. MwSt."?
Porque ese texto lo genera el tema, no es un efecto secundario del método de visualización del grupo. El núcleo imprime un {$product.labels.tax_short} genérico, "(tax incl.)", en la página de producto, y el interruptor por país Mostrar etiqueta de impuesto (Internacional → Localización → Países), junto con el nombre propio del impuesto, controla la etiqueta localizada en contextos de carrito y pago. Para mostrar literalmente "inkl. MwSt." junto al precio, algo que exige la PAngV alemana, normalmente tienes que editar la plantilla product-prices.tpl, porque el núcleo solo ofrece de serie la cadena genérica.
¿Cómo muestro precios netos a empresas y brutos a consumidores en la misma tienda?
Usa el mismo mecanismo de grupos en sentido inverso. Crea un grupo "Mayoristas" o "B2B" en Clientes → Grupos y configura su Método de visualización de precios como Impuestos excluidos (almacenado como price_display_method del grupo; PrestaShop determina qué cifra ve un visitante mediante Product::getTaxCalculationMethod()). Los miembros de ese grupo ven precios netos en toda la tienda, mientras que los clientes minoristas siguen viendo precios brutos; ambos enfoques cumplen para su público, siempre que tu tema etiquete claramente la visualización neta con "IVA excl." para que un comprador profesional nunca dude de que el IVA se añadirá.
¿Qué productos necesitan precio unitario (Grundpreis) y dónde lo configuro?
Cualquier producto vendido por peso, volumen, longitud o superficie, cosméticos, alimentos, productos de limpieza, tela o cable por metro, necesita un precio unitario en toda la UE según la Directiva 98/6/CE. PrestaShop tiene un campo de primera clase para ello: en la pestaña Precios del producto, rellena Precio por unidad (los campos unit_price_ratio y unity), y el front office renderiza automáticamente la línea "€17,98 / 1 Liter" sin tocar plantillas. En un catálogo grande, asigna las columnas de unidad en la importación CSV (Parámetros avanzados → Importar) en lugar de escribirlas a mano.
¿PrestaShop muestra automáticamente el precio "antes" correcto según Ómnibus?
No, y este es justo el punto que hay que verificar, no dar por bueno. Las Reglas de precios del catálogo y los Precios específicos tachan por defecto tu precio de catálogo, pero las normas Ómnibus exigen que la referencia sea el precio más bajo de los 30 días anteriores (con matices locales). PrestaShop de serie no tiene memoria nativa de ese mínimo de 30 días, así que el tachado predeterminado puede exagerar el descuento e incumplir la norma. Configura deliberadamente la referencia del precio específico como el mínimo real de 30 días, o usa un módulo que registre el historial de precios y renderice la referencia correcta. (Solo resumen: confirma los detalles para tus mercados).
La lista de comprobación de visualización de precios para una tienda PrestaShop
- Grupos predeterminados en bruto: Clientes → Grupos → Visitante / Invitado / Cliente → Método de visualización de precios = Impuestos incluidos para cualquier tienda B2C (no hay un único interruptor global "mostrar precios con impuestos incluidos").
- Texto del IVA visible: nombre correcto del impuesto en Internacional → Impuestos más el ajuste por país Mostrar etiqueta de impuesto, y normalmente una pequeña edición de plantilla para que el bloque de precio imprima "IVA incl." / "inkl. MwSt.", no solo la cifra bruta.
- Grupos B2B en neto: Clientes → Grupos → Método de visualización de precios = Impuestos excluidos, con etiquetado claro "IVA excl." solo para esos compradores.
- Referencia a los gastos de envío cerca del precio: una línea "más envío" enlazada a tu página CMS de envíos, obligatoria en Alemania.
- Precios unitarios rellenados: el campo Precio por unidad de la pestaña Precios (unit_price_ratio / unity) para cada producto vendido por peso, volumen, longitud o superficie; configuración masiva mediante importación CSV.
- Referencia Ómnibus verificada: referencia tachada configurada como el mínimo real de 30 días, no como el precio de catálogo; no confíes en el valor predeterminado.
- Reglas fiscales por país: grupos de Reglas de impuestos asignados para que la cifra bruta se recalcule por país de entrega en ventas OSS.
Las normas de visualización de precios existen para impedir precios engañosos, y las tiendas que las cumplen obtienen algo más que evitar multas: un comprador que ve un total honesto, una cifra real por litro y un descuento que no es humo confía también en el resto de tu tienda. En PrestaShop, la imagen completa de cumplimiento está al alcance de ajustes que ya tienes; el trabajo consiste en saber qué interruptor responde a qué norma y no dejar el campo de precio unitario, la etiqueta fiscal o la referencia de 30 días en sus valores predeterminados poco útiles.