Get in touch
  • WordPress
  • Payments
  • v1.0.0

Deposit Return Fee for WooCommerce — bottle and can deposit (kaucja, SGR, Pfand) as a separate line

The deposit on bottles and cans as a separate line in the cart, order and invoice, not inside the product price. Ready-made sets for Poland (kaucja), Romania (SGR), Germany and Austria (Pfand) with VAT per container type.

Download Free
Pro · one-year licence The more sites, the less each one costs
Compatibility
WordPress 6.2+ · WooCommerce 8.2+ (tested on WordPress 7.1 and WooCommerce 11.2) · PHP 7.4+ (run on PHP 8.3 and 7.4) · HPOS and posts · MariaDB, MySQL 8.0 · block and classic checkout, block theme and Storefront
Licence
one site, annual
Trial
7 days, no card, one per site
Updated
October 2026
Or all 173 Pro modules with All Access — 4 990 ₴ / year

What Free has,
and what Pro adds

The free version works with no time limit. Pro adds the rest of the features in the table.

Feature Free Pro
Container types with ready-made sets for Poland (system kaucyjny), Romania (SGR), Germany and Austria (Pfand) — starting amounts and VAT that the shop checks itself and can change ✔ ✔
Containers on a product and on each variation: up to 3 rows (crate = 20 × bottle + 1 × crate), a variation can inherit the product containers ✔ ✔
The deposit is a separate line in the cart and checkout (classic and block), the order, e-mails, My account and PDF invoices; not part of the product price ✔ ✔
VAT per container type: outside VAT / like the product / a tax class (presets: PL, RO, Einweg AT without VAT; Pfand DE, Mehrweg AT like the drink); amounts including VAT stay the same for any customer country ✔ ✔
Coupons do not reduce the deposit, it does not count towards free shipping thresholds ✔ ✔
Price note ("+ kaucja 0,50 zł", "zzgl. 0,25 € Pfand") on the product page, in the catalogue and in product blocks ✔ ✔
"How to get the deposit back" text in the cart, at checkout, on the thank-you page and in the customer e-mail ✔ ✔
Deposit only for chosen delivery countries; a single line for the whole deposit or a line per type ✔ ✔
Interface: English, polski, română, Deutsch ✔ ✔
Category rules: containers for a whole category and its subcategories — ✔
Bulk edit of containers in the products list — ✔
CSV import and export of containers by SKU or GTIN/EAN, with a dry run — ✔
Deposit refund for returned containers from the order (partial, with VAT, via gateways that support refunds) — ✔
Deposit lines for orders created in the admin — ✔
Report: deposit charged / refunded / balance by month and type + CSV — ✔
Updates from catcode.com.ua in Dashboard → Updates — ✔

What it looks like

WooCommerce block cart with deposit lines for PET bottles and glass containers
Block cart: containers under each product and separate deposit lines in the totals.
WooCommerce product page: price 2,99 zł and the note + kaucja 0,50 zł
Product page: the deposit next to the price, not inside it.
Container type settings: Kaucja and Pfand Einweg, Mehrweg, Kasten with amounts and VAT
Container types: the Polish and German sets — line name, price note, amount and VAT; category rules (Pro) below.

The trial starts when you ask

A fresh install is the free version, nothing switches on by itself. The “Try Pro for 7 days” button → e-mail → the key right in the window and by e-mail.

One key — one site

Moving the store? Unbind the licence on the old domain and activate it on the new one yourself. For studios — keys for 5 or 25 sites, or unlimited.

Technical requirements

  • WordPress 6.2+ · WooCommerce 8.2+ · PHP 7.4+; tested on WordPress 7.1 and WooCommerce 11.2, PHP 8.3 and 7.4.
  • Order storage: HPOS and the classic posts storage — the “Deposit” box and refunds work in both.
  • Database: MariaDB and MySQL 8.0 (tested).
  • Checkout and themes: classic and block cart/checkout; Storefront and the block theme Twenty Twenty-Five (Product Collection, Order confirmation).
  • Currency: deposit amounts are in the shop currency; multi-currency plugins do not convert the deposit amount.
  • Interface languages: English, polski, română, Deutsch. Line names, notes and return texts in the sets are in the scheme country’s language.
  • Together with our Grundpreis plugin: the Pfand is not part of the unit price (tested).

Version history

v1.0.0 Current October 2026

Container types with sets for Poland (kaucja), Romania (SGR), Germany and Austria (Pfand); containers on products and variations; the deposit as separate lines in the classic and block cart…

Frequently bought with Deposit Return Fee for WooCommerce

4 modules in one order — 40% cheaper than separately

“Store starter” bundle Deposit Return Fee Nova Poshta Premium Mono Acquiring Telegram notifications and Viber/SMS for customers Need more — all 173 modules in All Access for 4 990 ₴.
2 690 ₴ / year instead of 4 460 UAH bought separately
Buy the bundle →

Full module description

Deposit Return Fee for WooCommerce charges the deposit on bottles, cans and crates as a separate line in the cart, at checkout, in the order, e-mails and invoices — not inside the product price. Ready-made container sets cover the Polish system kaucyjny, the Romanian SGR and the German and Austrian Pfand. The presets use 0.50 zł per PET bottle and can and 1.00 zł per reusable glass bottle (Poland), 0.50 lei (Romania), 0.25 € per Einweg container (Germany, Austria). The deposit stays out of the shelf price, coupons do not reduce it, and it has its own VAT setting.

Put the deposit “into the price” or sell it as a separate product and everything breaks at once: the Grundpreis comes out wrong, a -50 % coupon cuts the deposit, the deposit lands in the VAT base together with the product, and the invoice has no separate line. The plugin solves it with WooCommerce’s own mechanism — a fee line: the classic and block cart, the order, e-mails, My account and invoice plugins all see it.

The core version is free. Container types with ready-made sets for Poland, Romania, Germany and Austria, containers on products and variations, deposit lines in the cart, checkout, order and e-mails, VAT per container type, price notes and the “how to get the deposit back” text work without a licence and without a time limit. Pro adds category rules, bulk edit, CSV import by SKU and GTIN, deposit refunds from the order, deposit lines for orders created in the admin and a report.

There is a separate module for OpenCart — Deposit Return Fee for OpenCart.

What the customer sees

  • Next to the price — a note in the scheme’s language: “2,99 zł + kaucja 0,50 zł”, “1,99 € zzgl. 0,25 € Pfand”, “+ garanție SGR 0,50 lei”. On the product page, in the catalogue, in product blocks and in the Product Collection template of block themes; a variation shows its own amount.
  • In the cart and at checkout — separate lines “Kaucja — butelka PET do 3 l × 5”, “Pfand Einweg × 4”: one line per container type or a single line for the whole deposit. Under each product — how many containers it brings: “Kaucja — butelka PET do 3 l: 2 × 0,50 zł”.
  • Changing the quantity or removing a product recalculates the deposit at once — in the classic and in the block cart.
  • Coupons (percentage and fixed) discount only the products; free shipping “from 100 zł” is counted without the deposit.
  • “How to get the deposit back” — a short text under the cart, at checkout, on the thank-you page (classic and the Order confirmation block) and in the customer e-mail. Each country has a ready text you can change.
  • After payment the deposit lines are in the order, the e-mails, My account and the PDF invoice (checked with PDF Invoices & Packing Slips).

What the admin gets

  • WooCommerce → Deposit return → Container types — the table of container types: line name, price note, amount, VAT (outside VAT / like the product / a specific tax class). Buttons for the ready-made sets: Poland, Romania, Germany, Austria; types you have already changed are not overwritten.
  • Product → Product data → General → Deposit — up to 3 rows “type × quantity”; a variation can use “same as product”, its own containers or “no deposit”.
  • Settings — on/off, delivery countries, with or without VAT, a line per type or a single line, where to show the notes and the return text.
  • Currency warning: Polish types in a shop running in EUR (0.50 zł would be charged as 0.50 €) — the plugin tells you.
  • Pro: Category rules — “Napoje → PET × 1” for a whole category and its subcategories; a product with its own setting or “No deposit” is left alone.
  • Pro: bulk edit in the products list — set containers, “no deposit” or reset to the category rule.
  • Pro: CSV — export of all products and variations with SKU, GTIN and containers; import by SKU, then by GTIN (the WooCommerce field or an EAN plugin’s meta such as _ean), “,” or “;” separator (Excel), a dry run without changes.
  • Pro: the “Deposit” box in the order — how many containers were charged and returned; “Returned now” + “Refund the deposit” makes a regular WooCommerce refund on the deposit lines only, with VAT and an order note; for gateways that support refunds there is a “refund via the gateway” checkbox.
  • Pro: Report — deposit charged, refunded and the balance by month and container type, with CSV export.

Countries and VAT: what the presets contain

  • Poland: 0.50 zł — PET bottle up to 3 l and metal can up to 1 l, 1.00 zł — reusable glass bottle up to 1.5 l (regulation of the Minister of Climate and Environment of 8.07.2024, Dz.U. 2024 poz. 1046). The preset charges the deposit line without VAT, even in a shop with 23 % VAT; reference — art. 29a ust. 11a of the VAT act and the Ministry of Finance explanations of 29.08.2025.
  • Romania: 0.50 lei per bottle or can from 0.1 to 3 l (SGR). The preset charges the line without TVA; ask your accountant how the garanția SGR is treated in your case.
  • Germany: the Einweg preset is 0.25 € including VAT (VerpackG § 31 states 0.25 € “einschließlich Umsatzsteuer”), at the rate of the drink. The plugin splits Einweg by rate: a cart with cola (19 %) and a milk drink (7 %) gets “Pfand Einweg (Standard rate) × 4” and “Pfand Einweg (Reduced rate) × 2”. The amount stays 0.25 € for a customer from another country; a VAT-exempt customer pays it without VAT. Under PAngV § 7 the Pfand is shown next to the price and is not part of the Grundpreis — checked together with our Grundpreis plugin: 1.99 € for 1.5 l gives 1.33 € / 1 l, without the Pfand.
  • Austria: the preset charges the Einwegpfand of 0.25 € without VAT and the Mehrwegpfand at the rate of the drink.
  • Mehrweg amounts (0.08 / 0.15 / 1.50 € in DE, 0.20 € in AT) are not set by law — the usual ones are filled in; check them against your supplier’s invoice.

Rates and VAT here are presets, not tax advice. They are starting values from sources as of October 2026. The shop checks them itself — together with its accountant and the deposit system operator — and changes the amount, VAT and countries of each container type when needed.

How it works — step by step

  1. Install the plugin: for a shop in Poland, Romania, Germany or Austria the container set and the return text are added automatically (other countries — with a set button or your own types).
  2. Check the amounts and VAT on the “Container types” tab and the “how to get the deposit back” text in “Settings”.
  3. Pick containers on products: 1.5 l water — 1 × PET, a 6-pack of cans — 6 × can, a crate of beer — 20 × glass bottle + 1 × crate. In Pro — a rule for a whole category, bulk edit or your supplier’s CSV.
  4. The customer sees the deposit next to the price, as separate lines in the cart and at checkout, and then in the order, e-mail and invoice.
  5. Pro: when containers are brought back to your shop — enter the number in the order and press “Refund the deposit”; the report shows how much deposit was charged and refunded per month.

Under the hood

  • Deposit lines are WooCommerce fees with the id ccdrf-<type>-<VAT>: both carts and checkouts (Store API), the order, e-mails and invoice plugins see them natively, while coupons and the free shipping threshold ignore them. Lines with different VAT are never merged.
  • Amounts including VAT: line net = gross − VAT at the customer’s rates, so 0.25 € stays 0.25 € in another country, and a VAT-exempt customer pays the net.
  • Order data: a deposit line carries _ccdrf_deposit, the types, the number of containers and the gross; a product line stores its containers. Invoice plugins can use ccdrf_is_deposit_item( $item ).
  • Developer hooks: ccdrf_product_components, ccdrf_default_rows, ccdrf_groups.
  • Deposit refund (Pro) — a regular WooCommerce refund on the deposit lines: the order total, Analytics and invoice plugins see it; the last units take the remaining cents, and you cannot refund more than is left.
  • Deleting the plugin removes its settings and cron jobs; deposit lines in existing orders stay.

Installation

  1. Plugins → Add New → Upload Plugin: pick the zip and activate it (WooCommerce must be active).
  2. WooCommerce → Deposit return: check the container set on the “Container types” tab and the options on “Settings”.
  3. On products — Product data → General → Deposit: pick the containers and quantity.
  4. For Pro: the “Pro licence” tab — paste the key from the e-mail or press “Try Pro for 7 days”.

Questions
about the module

Didn't find the answer? Message us on Telegram and we'll reply within a business day.

@catcode_support Setup, compatibility, activation
Is the deposit part of the product price or the tax base?

Not of the price: it is a separate order line. VAT follows the container type: the Poland, Romania and Austrian Einweg presets have no VAT, the German Pfand and Austrian Mehrweg are taxed at the rate of the drink, and the plugin calculates that itself. The presets are starting values the shop checks with its accountant.

Will a -50 % coupon reduce the deposit?

No. Coupons apply only to products, the deposit stays in full. It does not count towards the free shipping threshold either.

How does the customer get the deposit back?

By returning the empty container to a collection point. The plugin shows this text in the cart, at checkout, on the thank-you page and in the e-mail. If containers are brought back to your shop, Pro has a "Refund the deposit" button in the order.

What about variable products and crates?

Up to 3 container rows on a product and on each variation: "20 × bottle + 1 × crate". A variation can take the parent's containers or have its own.

Is this tax advice?

No. The sets are starting values from sources as of October 2026 (listed in the plugin readme). The shop chooses the container type, amount and VAT together with its accountant; all amounts can be changed.

Not quite what you are looking for?

We build custom modules for WordPress, WooCommerce, OpenCart and Shopify. Tell us about the task and we'll prepare an estimate.

Order a custom module