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 is one example, not the only one this plugin supports); the Tax treatment is set per bundle type.

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.

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 BundleTaxAdjuster 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.