How fees are taxed, the tax-inclusive entry mode, and multi-currency behavior
Fee tax is not calculated by this module. Taxable fees are registered with Magento’s own tax engine as associated taxables, and core computes the tax with the same rules, rates, and rounding it applies to everything else. That is what keeps fee tax correct across tax zones, customer groups, and Cross Border Trade without a parallel implementation to maintain.
Which tax class applies
A fee with Is Taxable = Yes resolves its tax class in two steps:
- The fee’s own Tax Class field, when set to a specific class - use this when one fee (an environmental surcharge, say) is taxed differently than the rest.
- Otherwise (“Use Default (Configuration)”) the global Fee Tax Class at Stores > Configuration > OrangeCollar > Extra Fees > Tax.
If neither resolves to a real class, the fee is not taxed - by design, not by error. Is Taxable = No skips the tax engine entirely and charges the amount as entered.
Fee tax is added to the order’s existing Tax total line. No separate per-fee tax line is created anywhere - storefront, admin, emails, or PDFs.
Tax-inclusive fee entry
By default, amounts are entered tax-exclusive and tax is added on top. Stores that price everything tax-inclusive (common outside the US) can set Fee Amounts Include Tax to Yes. With it on:
- For any taxable fee with an effective tax class, the entered (or percentage-calculated) amount is treated as already including tax, and the tax engine derives the exclusive amount used on totals, orders, invoices, and credit memos.
- Min/Max caps apply to the tax-inclusive figure, before the exclusive amount is derived - a fee capped at $50 never shows more than $50 including tax.
- Non-taxable fees, and taxable fees with no effective tax class, are unaffected and always charged exactly as entered.
- Amounts are inclusive at the store’s own rate (its shipping origin, or the customer’s rate under Cross Border Trade). In the unusual case where the store’s origin matches no tax rule at all, the entered amount is used as the exclusive price and tax is added on top at the destination’s rate - it is not silently treated as already covering that destination’s tax.
The setting is store-wide; there is no per-fee inclusive/exclusive override.
Multi-currency stores
- Fixed fees are configured in the store’s base currency and converted to the shopper’s display currency at the current rate, with rounding in the display currency.
- Percentage fees are computed independently in each currency from that currency’s own pre-discount, tax-exclusive row totals of matching items. The percentage is never computed once and converted, so the base and display amounts each stay consistent with their own item prices.
- Min/Max caps are always base-currency values.
- The
cart.subtotalcondition is always compared in base currency, whatever currency the shopper is browsing in.
Orders persist both currencies (amount and base amount, tax and base tax), so reporting in base currency stays exact regardless of what the shopper paid in.