How taxes are applied
The Fiscal Mirror rule — BeeL. reflects the Stripe charge exactly, with a clean fallback when Stripe Tax isn't enabled.
When BeeL. generates an invoice from a Stripe payment, it does not recalculate taxes. It reflects the Stripe charge exactly — total, breakdown, currency, everything. This is the Fiscal Mirror rule. This page is the practical version of that contract; the full mechanics live in Data conversion.
At a glance
| Tax breakdown source | Stripe (when Stripe Tax is enabled) → your account defaults (otherwise) |
| Does BeeL. recalculate | Never. The invoice total = the Stripe charge total |
| IRPF on Stripe invoices | Always 0, regardless of your default IRPF setting |
| Where to override the fallback | Settings > Integrations > Stripe (per-connection inclusivity flag) |
| Where to set your account default | Settings > Taxes (used only when Stripe Tax is off) |
How it works
When Stripe Tax is enabled
Every Stripe charge carries tax_amounts[] per line with rate, amount, and inclusivity. BeeL. reads those and emits the invoice with the exact same numbers — your account-level tax defaults are not consulted.
Example: Stripe Tax says 21 % IVA, inclusive, on 121 EUR → BeeL. emits a line with base 100.00 €, IVA 21.00 €, total 121.00 €.
When Stripe Tax is NOT enabled
The charge has no breakdown — just a total. BeeL. falls back to your defaults:
- The connection's "Prices include tax" setting (override per Stripe integration)
- Your default tax (IVA / IGIC / IPSI) at the rate configured in Settings > Taxes
It then decomposes the Stripe total as inclusive of that rate. The decomposition is exact — no residual rounding.
Example: Stripe charges 121 €, your default is IVA 21 % inclusive → BeeL. emits base 100.00 €, IVA 21.00 €, total 121.00 €.
IRPF is always 0 on Stripe invoices
This is a BeeL. rule, not a statement about who must withhold. A withholding would make the invoice total differ from the Stripe charge, which Fiscal Mirror does not allow, so BeeL. never applies your default professional IRPF to a Stripe payment.
If a customer withholds IRPF from what they pay you, a Stripe-generated invoice will not reflect it: issue that invoice through the Invoicing API instead.
Charges at 0 %
A line Stripe charges at 0 % becomes an exempt or non-taxable line, and an invoice needs the reason. Stripe's taxability_reason says whether it knows it; when your main tax is IVA, BeeL. completes what Stripe leaves open with the default exemption reason you declared in Settings > Taxes.
| What Stripe reports on the 0 % line | What BeeL. does |
|---|---|
| No reason | Uses your default exemption reason. Without one, the charge waits in Needs attention with the reason "0 % rate requires an exemption reason": declare it and retry the event |
product_exempt, product_exempt_holiday | Uses your default reason if it is an exemption. Otherwise the same wait |
not_subject_to_tax | Uses your default reason if it is a non-subject one. Otherwise the same wait |
not_available — a manual tax rate at 0 %, such as the one some platforms create by default | Treated as a charge with no reason when the buyer is in the IVA territory; see below. Otherwise UNSUPPORTED_STRIPE_TAX_TREATMENT |
zero_rated, reverse_charge, customer_exempt, not_collecting, not_supported, or a reason BeeL. does not know | UNSUPPORTED_STRIPE_TAX_TREATMENT: BeeL. does not reflect these treatments |
The buyer is in the IVA territory when the buyer's country is Spain and the postal code (five digits) is in the peninsula or the Balearic Islands. A postal code starting with 35 or 38 (Canary Islands), 51 (Ceuta) or 52 (Melilla), a buyer from another country, or a payment with no postal code is outside it. A manual 0 % rate does not say why there is no tax, so BeeL. only takes your declared reason for it where the sale carries IVA.
A charge that waits as UNSUPPORTED_STRIPE_TAX_TREATMENT is not retried and has no draft: issue that invoice through the Invoicing API, or correct the tax in Stripe.
If you create a manual 0 % rate in Stripe for sales to Spanish customers, declare your default exemption reason in BeeL. first; without it, those charges wait in Needs attention.
Equivalence surcharge
If your account has the equivalence surcharge (recargo de equivalencia) configured and the Stripe charge maps to a B2B retailer (mapping has the right flag), BeeL. applies the surcharge automatically as part of the line classification. See Equivalence surcharge.
It only ever lands on a standard (F1) invoice: a simplified one cannot carry the surcharge (SIMPLIFICADA_FORBIDS_SURCHARGE), so a retailer in that regime needs a payment that resolves to F1 — with NIF and address on the Stripe customer.
Where to change settings
Connection-level (per Stripe integration)
- Go to Settings > Integrations > Stripe
- Edit Prices include tax — controls the inclusivity flag used in the fallback path
- Save
Account-level (default tax)
- Go to Settings > Taxes
- Choose your main tax (IVA, IGIC, or IPSI) and the standard rate
- Save
Account-level defaults are used only when Stripe Tax doesn't expose a breakdown — when Stripe Tax is on, your defaults are bypassed.
Changes to either set of settings apply to new invoices only. Already-issued invoices are immutable once their VeriFactu submission is in flight.
Worked example
Imagine your Stripe customer pays 100 EUR:
Case A — Stripe Tax enabled (21 % inclusive)
Stripe says: line of 100 EUR base + 21 EUR IVA = 121 EUR total. Customer paid 121 EUR.
| Field | Value |
|---|---|
| Taxable base | 100.00 € |
| IVA (21 %) | 21.00 € |
| IRPF | 0 € |
| Total | 121.00 € |
Case B — Stripe Tax disabled, your default is IVA 21 % inclusive
Stripe says: total of 100 EUR. Customer paid 100 EUR.
BeeL. decomposes inclusively:
| Field | Value |
|---|---|
| Taxable base | 82.64 € |
| IVA (21 %) | 17.36 € |
| IRPF | 0 € |
| Total | 100.00 € |
Case C — Stripe Tax disabled, your default is IVA 21 % exclusive
Stripe says: total of 100 EUR. You turned Prices include tax off on the connection. BeeL. treats the 100 EUR as the base and adds the IVA on top:
| Field | Value |
|---|---|
| Taxable base | 100.00 € |
| IVA (21 %) | 21.00 € |
| IRPF | 0 € |
| Total | 121.00 € |
The customer paid 100 EUR but the invoice total is 121 EUR — a divergence. Only use the exclusive mode when your Stripe prices are net (rare in B2C). Otherwise leave Prices include tax on.
FAQ
Does BeeL. use Stripe's tax rates?
Yes, when Stripe Tax is enabled. BeeL. copies Stripe's breakdown verbatim — that's the Fiscal Mirror rule.
What happens if I change my default IVA rate?
It only matters when Stripe Tax is disabled on that connection. With Stripe Tax enabled, BeeL. uses Stripe's rate, not yours. Either way, the change applies to new invoices only.
Can I have different taxes per Stripe customer?
The per-connection settings apply uniformly. For genuinely per-customer tax behaviour, enable Stripe Tax (which lets you configure tax codes per product / per customer) — BeeL. will reflect Stripe's decision.
What about IGIC / IPSI?
If your default tax is IGIC or IPSI, BeeL. uses it in the fallback path. With Stripe Tax enabled, BeeL. uses whatever rate Stripe sends — make sure your Stripe Tax registrations match your invoicing reality.