---
title: Tax Treatment
date: 2026-07-02T14:38:00+01:00
author: John Henry Donovan
canonical_url: "https://johnhenry.ie/plugins/bundle-builder/docs/guide/tax-treatment"
section: Plugins
---
esc

↑↓ to navigate↵ to selectesc to close

Menu On this page 

- [Return to top](#)

Documentation

Documentation

# Tax Treatment

A bundle is one line item, but its components can carry different tax rates. This follows the **composite vs. multiple supply** distinction used across most VAT, GST and sales-tax regimes ([Irish Revenue's mixed-supply guidance](https://www.revenue.ie/en/vat/charging-vat/vat-and-mixed-supplies-of-goods/index.aspx) is one example, not the only one this plugin supports); the **Tax treatment** is set per [bundle type](https://johnhenry.ie/plugins/bundle-builder/docs/getting-started/bundle-types).

The plugin doesn't hard-code VAT, or any other tax scheme: it reads whatever tax rates, zones, tax categories and tax-ID validators you've already configured in Commerce, so the same mixed-supply apportionment works for VAT, GST, US sales tax, or anything else Commerce's tax engine supports.

![](https://johnhenry.ie/images/plugins/docs/bundle-builder/bundle-type-tax-treatment.png)## Composite supply (single rate)

A supply with a **principal element** and inseparable ancillary parts. The whole bundle is taxed at the **bundle's own tax category**: set it to the principal element's rate.

This is the default, and it uses Commerce's standard tax handling.

## Multiple supply (apportion tax per component)

Independent items sold together for one price (say, a **bag at 23%** plus a **collection service at 13.5%**). The consideration **must be apportioned** across the components, each taxed at its own rate.

When a bundle type is set to *Multiple*:

1. Its bundles are assigned the zero-rate **“Bundle (apportioned)”** tax category, so Commerce's core tax adjuster leaves the line untaxed.
2. The plugin's `<strong>BundleTaxAdjuster</strong>` apportions the line price across components by **selling-price share** and taxes each share at its component product's own tax category rate(s), matching every Commerce tax rate whose category and zone apply, the same way Commerce's own adjuster would tax a normal line.
3. Inclusive pricing is handled correctly: the right tax is extracted per component, and the reverse-charge / tax-ID exemption rules you've configured on a tax rate (`removeIncluded` / `removeVatIncluded`) are honoured for apportioned bundles the same as any other line item.

The result is a single bundle line showing the correct **blended** tax.

## Limitations

- Apportionment is by **component selling price**; amounts reconcile exactly to the order currency's own minor-unit precision (2 decimal places for most currencies, but the plugin doesn't assume that; it reads it from the currency itself).
- On *Multiple*, the bundle's own tax-category sidebar setting is ignored (overridden to the apportioned category).
- Jurisdiction-specific carve-outs that aren't expressed as a Commerce tax rate/zone/category (like Irish Revenue's separate **two-thirds rule** for mixed supplies) aren't applied automatically. If your jurisdiction has a rule like this, you'll need to model it as its own tax category/rate in Commerce, or handle it outside the plugin.

Warning Tax treatment is a legal determination. Confirm whether each bundle is a composite or a multiple supply, and which rules apply in your jurisdiction, with your accountant.

On this page
