Configure EU VAT for B2C and B2B
Use this guide to configure EU VAT for a seller established in an EU member state. After activation, Workspace determines tax for carts, quotes, and orders from server-side transaction facts. Invoices and accounting use the immutable order tax snapshot.
EU VAT processing does not replace tax advice. Have a qualified reviewer approve tax positions, registrations, validity periods, and reporting routes before activation.
Prepare the tenant
You need a seller legal entity, active price lists with an explicit net or gross basis, an explicit tax supply kind on every sold product variant, complete fulfilment origins, and an active posting profile with postable revenue and tax accounts. Prepare approved B2C and B2B tax positions for every country and supply kind the shop uses.
Open Commerce > Policies & Taxes > Taxes > Set up EU VAT. The guided page returns only masked tax identifiers.
Maintain tenant master data instead of relying on country presets
Workspace does not ship fixed rates, tax categories, or posting accounts for individual countries. Maintain the values in each tenant through the regular lists:
| Prerequisite | Maintained list |
|---|---|
| Countries in use | System > Localization > Countries |
| Product and shipping tax categories | PIM > Master Data > Tax Classes |
| Base country and allowed buyer countries | Commerce > Policies & Taxes > Profiles |
| Legal entity | System > Organization Structure > Organizations |
| Country-specific posting logic | Finance > Accounting > Posting Profiles |
| Revenue and tax accounts | Finance > Accounting > Accounts |
The setup page offers only enabled tenant countries and active tax classes. Registration references come from previously created tax registrations. If no country preset is provided, authorized users can create every required value manually; product code does not contain a hidden fallback for Germany or Austria.
Maintain the tax supply kind in the commercial section under PIM > Variants & Prices > Variants. The field is also available when a variant is created and uses the regular select control. Each tenant can therefore classify every sold product explicitly.
EU membership is a separate, versioned legal policy rule. Tenant master data cannot redefine it. The tenant country list determines which legally supported countries that tenant actually uses.
Set up domestic B2C sales in one country
If a shop sells only to consumers in its own EU country, use Set up local B2C sales in the first step. Select a commerce profile that allows only that country, a supply kind, an active tax category, an active posting profile, and its revenue and tax accounts. The country comes from the commerce profile; this path does not offer a free-form or global country list.
After tax identifier, rate, start date, and evidence reference have been reviewed, Workspace creates the domestic registration, active policy release, approved B2C position, and both accounting mappings in one transaction. If a prerequisite fails, the EU VAT configuration remains unchanged. The same flow supports Germany, Spain, and other enabled EU countries. Workspace does not provide a country-specific tax rate or chart of accounts as legal guidance; those values must already be reviewed and configured in the tenant.
Then create an activation plan for B2C_ACTIVE. For a domestic-only profile, readiness requires neither a second country nor a B2B position. A later move to B2C_B2B_ACTIVE validates the B2B cases that the profile actually allows.
The supported product scope covers physical goods, electronically supplied software and SaaS, and general-rule B2B services. Classification follows the sold product; it is not inferred from storage, download, or other technical product flags. Unclassified sellable variants block activation.
Configure the tax posture
Assign one tax subject to the seller legal entity. Then record its domestic VAT, Union OSS, or local destination registrations. Union OSS is a reporting route, not the rule that determines the place of taxation. A destination sale without an applicable OSS or local registration is blocked.
Create a time-bound EU VAT policy release and add every required jurisdiction, active product tax category, and active shipping tax category. Enter 19 percent as 0.19 and 20 percent as 0.20. Mark a component as inclusive only when the source price includes tax. Activate the release after its rate set is complete; activation seals the dataset.
Record B2C and B2B decisions
For the EU EUR 10,000 exception, use the Article 59c decision type. ORIGIN_EXCEPTION uses the origin country when all conditions are met; DESTINATION_GENERAL_RULE uses the destination rule. Exactly EUR 10,000 does not exceed the threshold. In the current pilot, this decision type covers intra-EU distance sales of physical goods and supplies explicitly classified as ELECTRONICALLY_SUPPLIED_SERVICE. General services are separate; telecommunications, broadcasting, television services, and imported distance sales remain outside this product scope. The current product version does not calculate the threshold automatically, so record a reviewed, time-bound DECLARED position with evidence. Missing coverage is not treated as zero turnover.
Use a declared transaction decision for domestic B2B, intra-EU goods, and cross-border services. Keep place of taxation, liable party, reporting route, and registration reference separate. Workspace applies B2B treatment only when the storefront provides a current accepted business tax check. For the EU pilot, its issuing country must match the determined customer country for cross-border goods and general B2B services. A company name or unverified VAT ID is not sufficient. Multi-establishment customers, triangular transactions, and other special cases remain outside the pilot until dedicated presence and policy modules are available.
Save positions as drafts. A user with approval permission reviews the evidence and reason codes before approval.
Transfer configuration between tenants
Export tax positions, rates, and accounting mappings as a CSV configuration matrix. The format uses stable business references instead of tenant-local IDs. The target tenant must already contain the legal entity, policy release, posting profile, and accounts under matching references.
Preview the file before importing it. Each row is classified as CREATE, UNCHANGED, or CONFLICT, and the preview returns a digest. Only a conflict-free file with that exact digest can be applied atomically. Imported positions and rates remain drafts and require the target tenant's own review and activation. This makes the configuration reusable without transferring another customer's approval.
Map accounting and activate
Map each economic source, including order lines and paid shipping, to a revenue account. Then map every jurisdiction, tax type, tax category, liable party, and reporting route to a tax account. These mappings post an existing tax decision; they do not determine tax.
Create a fresh activation plan. Resolve every blocker and plan again. Activate B2C_ACTIVE first. Workspace rejects the digest if the configuration changes before activation, and business buyers remain blocked during this stage. After the B2C observation period, create a new plan and advance the same tenant to B2C_B2B_ACTIVE.
If tax output is under review, suspend admission for new EU VAT transactions. Resuming requires a fresh ready digest and an external approval reference. Finalized transactions never fall back to legacy tax logic.
After activation, verify consumer domestic and destination cases, verified and invalid business cases, separate billing and shipping destinations, quotes created directly by sales, quotes created from carts, reconfirmation, orders, invoices, and accounting components in a test shop.
A sales quote does not have to originate from a cart. Add a variant directly to the quote, then edit the line name, description, quantity, and custom price as required. Workspace still determines tax on the server from the quote context, commerce profile, and the variant's tax supply kind. Cart lineage is additional evidence only when a quote actually originated from a cart. Once EU VAT processing has finalized its first order, do not switch back to the previous tax logic. Activate it only after the full readiness review. The current product version records credit notes and corrected invoices as separate immutable follow-up documents with a source-invoice reference; test this workflow in your installation before activation.
XRechnung and reporting periods
A document profile using XRECHNUNG_3_0_2_UBL creates a separate UBL file next to the PDF invoice. Workspace publishes the final invoice bundle only after the configured external validator confirms the expected format and XRechnung profile. The bundle manifest records the validator name, version, ruleset, and XML hash. ZUGFeRD and Peppol transport are not part of this profile.
Every XRechnung requires a buyer-assigned reference; the seller's own order number is not used as a substitute. An intra-community supply of goods also requires the actual shipment date and complete delivery address in the final snapshot. The invoice bundle is not published if any of these facts is missing.
In addition to the adapter URL, configure the exact expected ruleset evidence under einvoice.validation.xrechnung_3_0_2_ruleset. For the verified KoSIT validator release, use EN16931 1.3.13, XRechnung 3.2. Publication is blocked if the value is missing or the validator reports a different value. Review and update the pin deliberately whenever the validator is upgraded.
Final EU VAT invoices create immutable tax transaction records. The reporting view groups the relevant country's VAT return and EC sales list obligations alongside Union OSS by period. Country-specific destinations include the ISO country code, for example ES_VAT_RETURN or NL_EC_SALES_LIST. For intra-EU goods, a current business tax check and initial shipment reference are sufficient for invoicing, but the period export remains blocked until complete transport evidence is confirmed. CSV and JSON exports support review and handoff to a tax advisor; Workspace does not submit returns to an authority.