The EU Omnibus Directive (2019/2161) has been applicable since 28 May 2022, and in the UK its equivalent — the price-reference rules in the Digital Markets, Competition and Consumers Act 2024 (DMCC Act), in force since 6 April 2025 — has put British merchants in the same boat. Four years into the EU enforcement and the first year of UK enforcement, compliance is no longer optional: fines reach up to 4% of annual turnover for serious breaches in the EU, with similar magnitudes under the UK regime, and competition authorities have publicly announced intensified e-commerce inspections in 2025-2026 around sales, Black Friday and permanent-promotion claims.
The problem: the rule is simple to state, complex to implement technically, and catastrophic on promotions if applied badly. This article unpacks the rule, the pitfalls that kill promos, and the correct mechanics on PrestaShop.
What the rules actually say
Across the EU and now the UK, the substance is identical:
Any announcement of a price reduction must show the prior price applied by the trader before the reduction. The prior price is the lowest price applied by the trader to all consumers during the thirty days preceding the application of the reduction.
In practice, four rules apply:
- Every promotion must show the reference price = the lowest price of the previous 30 days.
- The reference price must be visible next to the new promotional price.
- The calculation is per product and per reference (variant), not per category.
- The percentage reduction shown must be calculated against the reference price, not an inflated price.
Exceptions and edge cases
Official sales periods
The rule applies to sales. The “reference price” shown during sales must be the lowest price applied in the 30 days preceding the sale opening — not an arbitrary RRP.
Progressive promotion
If you apply -20% the first week, then -30% the second, the reference price remains the one from the 30 days preceding the FIRST discount. The -30% is calculated against the original price, not the previous promotional price.
New product (less than 30 days)
If the product has been on sale for less than 30 days, you take the lowest price since it went on sale. The rule does not invent a prior price — it uses the available history.
Perishable goods
Exception: fresh products with a short shelf life. Omnibus applies with flexibility, but traceability is still required.
Products never previously commercialised
An initial discount (“launch price”) does not need to display a reference price. But you cannot indicate a fake “crossed-out price”.
The trap that kills promotions: the inflated crossed-out price
Before Omnibus, many e-tailers aligned their crossed-out price on a fantasy manufacturer’s RRP and showed -50% permanently. Practice that died in 2022 in the EU and is now actively sanctioned across Europe and the UK in 2025-2026.
Typical case from a CMA or trading standards inspection: a store displays a product at £39.90 with a crossed-out £79.90 price (-50%). The audit asks for the price history. The product has never been sold above £49.90. Sanction: administrative fine, withdrawal of the promotional claim, public publication of the inspection.
The underlying mistake: confusing manufacturer’s recommended retail price (RRP, not enforceable as the reference) with the Omnibus reference price (the actually applied price).
Technical mechanics on PrestaShop
PrestaShop 8 and 9 do not natively manage the Omnibus reference price. The catalogue module handles “discounts” and “specific prices”, but without a 30-day history nor automatic calculation of the actual prior price.
Manual implementation requires four layers:
1. Price history tracking
A new table ps_price_history records every price change by id_product and id_product_attribute, with timestamp. Either triggered by hook actionObjectProductUpdateAfter, or by a daily cron that snapshots prices.
CREATE TABLE ps_price_history (
id_history INT AUTO_INCREMENT PRIMARY KEY,
id_product INT NOT NULL,
id_product_attribute INT DEFAULT 0,
id_shop INT NOT NULL,
id_currency INT NOT NULL,
price DECIMAL(20,6) NOT NULL,
date_change DATETIME NOT NULL,
INDEX idx_product_date (id_product, date_change)
) ENGINE=InnoDB;
2. Reference price calculation
When displaying a promotion, the module computes for each product the lowest price of the previous 30 days:
SELECT MIN(price) AS reference_price
FROM ps_price_history
WHERE id_product = :product_id
AND id_product_attribute = :attribute_id
AND date_change >= DATE_SUB(NOW(), INTERVAL 30 DAY)
AND date_change < :promo_start_date;
3. Compliant display
On the product page and in listings, the price block shows:
- Current promotional price (large).
- Reference price of the previous 30 days, crossed out (“Lowest prior price (30 days): £39.90”).
- Percentage reduction calculated against the reference price.
Optionally, a tooltip or “View price history” link improves transparency (and defuses disputes).
4. Traceability for audit
In case of a CMA, trading standards, or EU national authority inspection, you must be able to produce the history on request. The ps_price_history table must be kept at least 2 years, ideally 5 years. Exportable as CSV from the back-office.
Frequent production errors
- Calculating the reference price on the net price instead of gross or vice versa. The rule applies to the price paid by the consumer — so gross (VAT-inclusive) for B2C.
- Ignoring variants. The reference price is per physical reference, not per parent product.
- Not managing multi-currency. If you sell in GBP and EUR, the history must be per currency.
- Resetting the history on each catalogue update. A migration or bulk import can wipe the history. The module must preserve past history.
- Showing the manufacturer’s RRP instead of the reference price. The major legal error.
- Not covering category pages and listings. If the product page is compliant but the category thumbnail shows an inflated crossed-out price, you are non-compliant.
Our dfomnibus module: automatic compliance
Implementing this mechanic by hand is a 5 to 8-day dev project, with tests across multi-shop, multi-currency and variants. Our dfomnibus module for PrestaShop 8 and 9 industrialises the whole stack:
- Automatic history tracking via hook on price changes (no cron, real-time).
- Omnibus reference price calculation per product and per variant, with multi-shop and multi-currency handling.
- Compliant display on product pages, category listings, cross-sell blocks, basket.
- Auditable traceability: CSV history export, ready for CMA or national consumer authority.
- Percentage reduction recalculated on the reference price, never on an arbitrary price.
- Compatible with official sales and scheduled promotions.
- Multilingual EN/FR/ES/DE for international stores (the Omnibus rules apply across the entire EU, and the UK DMCC Act mirrors them).
For €79, you become compliant without touching the catalogue and without risk on future promotions.
Beyond compliance: conversion
Paradoxically, an Omnibus-compliant promotion often converts better than an inflated one. The reason: consumers have become wary of artificial crossed-out prices. Showing a verified reference price and an honest percentage reinforces credibility. On stores we have moved to strict compliance, the click-through rate on promotional thumbnails has stabilised or slightly increased.
And above all, compliance removes a major operational risk: a CMA, trading standards or national consumer body report (often filed by a competitor) triggers an audit that can paralyse promotional strategy for months.
FAQ
Do these rules apply to seasonal sales?
Yes, fully. The reference price displayed during sales must be the lowest price applied in the 30 days preceding the sale opening — not the “catalogue price” or “manufacturer’s RRP”. UK trading standards and EU consumer authorities have explicitly targeted 2024 and 2025 sales in their e-commerce inspections.
What about products on permanent promotion?
“Permanent” promotion is incompatible with the rules. If a product has been at -30% for three months, the reference price is in fact the discounted price (because that’s the lowest of the previous 30 days). So -30% against… -30% = 0% real displayable discount. Either remove the promotional communication, or alternate promotional periods and full-price periods.
Does the module handle retroactivity?
If you install dfomnibus today, history starts at the installation date. For inspections covering past promotions (before installation), the history must be produced by other means (DB backups, old CSV exports). We recommend installing the module ahead of sales or major promotional operations, not on the day itself.
What is the sanction for non-compliance?
In the EU, fines can reach 4% of annual turnover for serious breaches. In practice, national consumer authority sanctions on e-tailers in 2024-2025 range between €5,000 and €80,000 depending on severity and recidivism. The UK DMCC Act provides for similar magnitudes, with the CMA newly empowered to impose direct financial penalties.
Do these rules apply outside the EU/UK?
The Omnibus Directive is European. UK rules apply in Great Britain via the DMCC Act. If your store sells to consumers in either jurisdiction from a third country, you are subject to the rule for B2C sales in the target jurisdiction. The criterion is consumer targeting, not the merchant’s seat.
To go further
Regulatory compliance in 2026 e-commerce is structured around three pillars: GDPR (Consent Mode v2), Omnibus / DMCC Act (reference price), and sectoral (age gate, INCO, product safety). Three independent layers, to stack cleanly.