EU-Steuerberechnung in Magento erklärt
Die Steuerberechnung ist einer der Bereiche in Magento, mit denen man sich einmal gründlich beschäftigt und danach möglichst wenig. Zuständig dafür sind drei Steuerklassen und die Steuerregeln, die sie miteinander verbinden. In diesem Beitrag gehen wir diese Konfiguration der Reihe nach durch, mit Blick auf den EU-Handel. Dabei zeigt sich auch, warum die Kundengruppe eines Kunden über seinen Steuersatz mitentscheidet, obwohl ihr Name das nicht vermuten lässt.
Die drei Steuerklassen
Eine Steuerklasse ist zunächst nur eine Kennzeichnung. Sie enthält keinen Prozentsatz und legt nichts fest außer der Zugehörigkeit zu einer Gruppe. Magento kennt davon zwei Typen, die in der Tabelle tax_class über die Spalte class_type auseinandergehalten werden — verwendet werden sie an drei Stellen:
| Steuerklasse | Typ | Gepflegt unter | Standardwert |
|---|---|---|---|
| Produkt | PRODUCT |
Produkt → Reiter Advanced Pricing, Attribut tax_class_id |
Taxable Goods |
| Kunde | CUSTOMER |
Stores → Customer Groups, Feld tax_class_id |
Retail Customer |
| Versand | PRODUCT |
Stores → Configuration → Sales → Tax, Abschnitt Tax Classes | Taxable Goods |
Der Versand fällt dabei etwas aus dem Rahmen: Er hat keinen eigenen Typ, sondern greift auf eine Produktsteuerklasse zurück, die du zentral in der Konfiguration hinterlegst und die für alle Versandarten gilt. Steht dort None, bleiben die Versandkosten unversteuert, während die Artikel im selben Warenkorb ganz normal besteuert werden. Das ist eine der häufigeren Ursachen, wenn Positions- und Gesamtsumme nicht zusammenpassen.
Warum die Kundengruppe darüber entscheidet
Bei der Produktsteuerklasse ist die Sache übersichtlich: Sie steht als Attribut direkt am Artikel, du siehst sie im Produkt und kannst sie dort ändern. Bei der Kundensteuerklasse ist das anders — sie hängt nämlich gar nicht am Kunden. Sie hängt an seiner Kundengruppe.
Jede Gruppe unter Stores → Customer Groups trägt genau ein Feld tax_class_id, und alle Kunden dieser Gruppe erben diesen Wert. Ein zweites Feld, das die Klasse für einen einzelnen Kunden, eine Adresse oder eine Bestellung überschreiben könnte, sieht der Magento-Kern nicht vor.
Damit ist die Kundengruppe die Entscheidungsgrundlage der gesamten Steuerberechnung. Sie bestimmt, welche Steuerklasse ein Besteller mitbringt — und damit, welche Steuerregeln für ihn überhaupt in Frage kommen und aus welchen Steuersätzen Magento am Ende den Satz für seine Bestellung zieht. Alles Weitere baut darauf auf.
Die Steuerregel führt Klassen und Sätze zusammen
Eine Steuerklasse allein löst noch keine Berechnung aus. Erst die Steuerregel unter Stores → Tax Rules stellt die Verbindung her, und sie besteht immer aus denselben drei Angaben:
- Eine oder mehrere Kundensteuerklassen
- Eine oder mehrere Produktsteuerklassen
- Einen oder mehrere Steuersätze aus Stores → Tax Zones and Rates, die jeweils Land, Region und Postleitzahl mitbringen
Damit eine Regel greift, müssen drei Dinge zugleich zutreffen: Die Kundensteuerklasse des Bestellers ist in der Regel enthalten, die Produktsteuerklasse der Position ebenfalls, und die maßgebliche Adresse liegt in der Zone eines der zugewiesenen Steuersätze. Passt eine dieser Bedingungen nicht, greift die Regel nicht. Und greift überhaupt keine Regel, berechnet Magento einfach keine Steuer — einen Standardsatz, auf den das System ersatzweise zurückfällt, gibt es nicht.
Priorität und Sortierreihenfolge
Wenn mehrere Regeln gleichzeitig auf denselben Artikel zutreffen, entscheidet das Feld Priority, wie Magento damit umgeht:
- Regeln mit unterschiedlicher Priorität werden aufgeschlagen — die niedrigere Zahl greift zuerst, jede weitere schlägt ihren Satz auf die Summe der vorhergehenden Steuerberechnung auf (die Checkbox Calculate off Subtotal Only schaltet das ab)
- Regeln mit gleicher Priorität werden addiert und wirken gemeinsam auf denselben Nettobetrag
Der zweite Fall ist gewollt, etwa wenn in einem Land Landes- und Regionalsteuer nebeneinander anfallen. In einem europäischen Shop ist er meistens ein Versehen — dort trennen sich voller und ermäßigter Satz über die Produkt-Steuerklasse, sodass je Artikel nur eine Regel greift. Ein Blick lohnt sich, sobald ein Satz höher ausfällt als erwartet.
Nicht verwechseln solltest du die Priorität mit dem Feld Sort Order. Das wertet Magento 2 an keiner Stelle aus — weder in der Berechnung noch bei der Anzeige der Steuerzeilen.
Bleibt die Frage, welche Adresse überhaupt gemeint ist, wenn Liefer- und Rechnungsadresse sich unterscheiden. Das legst du unter Stores → Configuration → Sales → Tax mit der Einstellung Tax Calculation Based On fest. Zur Wahl stehen Lieferadresse, Rechnungsadresse und Versandursprung. Diese eine Einstellung zu ändern, verschiebt das Ergebnis jeder Bestellung, bei der die beiden Adressen in verschiedenen Ländern liegen — es lohnt sich zu wissen, worauf sie bei dir steht.
Wenn Rechnungs- und Lieferadresse sich unterscheiden
Was die Wahl der Adresse praktisch bedeutet, zeigt sich am schnellsten an einem Beispiel. Nehmen wir einen Shop mit Sitz in Deutschland. Hinterlegt sind zwei Steuersätze, Deutschland mit 19 % und Frankreich mit 20 %, beide derselben Steuerregel zugewiesen — zusammen mit der Kundensteuerklasse Retail Customer und der Produktsteuerklasse Taxable Goods. Sämtliche Kunden liegen in der Standardgruppe General. Vier Bestellungen unterscheiden sich allein in den Adressen:
| Rechnungsadresse | Lieferadresse | Based On: Shipping Address | Based On: Billing Address |
|---|---|---|---|
| Deutschland | Deutschland | 19 % | 19 % |
| Deutschland | Frankreich | 20 % | 19 % |
| Frankreich | Deutschland | 19 % | 20 % |
| Frankreich | Frankreich | 20 % | 20 % |
Die erste und die letzte Zeile sind unauffällig: Stimmen beide Adressen überein, spielt die Einstellung keine Rolle. Interessant sind die beiden mittleren. Dort führt dieselbe Bestellung zu unterschiedlichen Beträgen, je nachdem worauf Tax Calculation Based On steht — und das ist eine einzige Einstellung, die für den gesamten Shop gilt, nicht pro Bestellung wählbar.
Wer die Einstellung ändert, ändert damit rückwirkend nichts an bestehenden Bestellungen, wohl aber die Berechnung jedes künftigen Warenkorbs. Ein Test mit zwei Adressen in verschiedenen Ländern zeigt in einer Minute, welche der beiden Spalten dein Shop gerade abbildet.
Was in keiner der vier Zeilen vorkommt, ist der Kunde selbst. Ob hinter der französischen Adresse ein Privatkunde steht oder ein Unternehmen mit gültiger USt-IdNr. im Konto, ändert am Ergebnis nichts: Beide liegen in derselben Kundengruppe, tragen dieselbe Kundensteuerklasse und werden von derselben Regel erfasst. Die USt-IdNr. ist kein Bestandteil einer Steuerregel. Sie überhaupt unterscheiden zu können, setzt zwei verschiedene Kundengruppen voraus. Einsortieren kann Magento die Besteller selbst — dazu gleich mehr.
Die Zuordnung kann Magento selbst übernehmen
Die Kundengruppe muss nicht von Hand gepflegt werden. Unter Stores → Configuration → Customers → Customer Configuration → Create New Account Options steht die Einstellung Enable Automatic Assignment to Customer Group. Ist sie aktiv, prüft Magento eine eingetragene USt-IdNr. gegen VIES und ordnet den Besteller einer von vier Gruppen zu, die du gleich darunter festlegst:
| Fall | Wann er eintritt | Einstellung |
|---|---|---|
| Inland | Nummer gültig, Land des Bestellers = Land des Shops | Group for Valid VAT ID - Domestic |
| Innergemeinschaftlich | Nummer gültig, anderes EU-Land | Group for Valid VAT ID - Intra-Union |
| Ungültig | VIES antwortet, kennt die Nummer aber nicht | Group for Invalid VAT ID |
| Fehler | VIES nicht erreichbar oder Anfrage gescheitert | Validation Error Group |
Das greift an zwei Stellen. Speichert ein eingeloggter Kunde eine Adresse mit USt-IdNr., ändert Magento seine Kundengruppe dauerhaft — die Nummer darf also durchaus nachgereicht werden. Und im Warenkorb wird die Gruppe bei jeder Neuberechnung der Summen gesetzt, auch für Gäste ohne Konto. Ein Gast mit gültiger Nummer aus einem anderen EU-Land bekommt seine Nettorechnung damit ohne jedes Zutun.
Ein einziger Hebel für alles
Bequem ist das — solange klar ist, woran es hängt. Denn ob die Automatik greift, entscheidet eine einzige Frage: welche Adresse Magento ansieht. Das legt Tax Calculation Based on in derselben Konfigurationsgruppe fest. Diese Einstellung ist nicht dieselbe wie die gleichnamige im Steuerbereich, die den Steuersatz bestimmt — und beide können auf verschiedene Adressen zeigen.
Steht die Zuordnung auf der Rechnungsadresse, bleibt eine USt-IdNr. an der Lieferadresse wirkungslos. Der Besteller trägt sie ein, sieht sie im Checkout stehen und zahlt trotzdem Steuer. Der Satz selbst kann derweil nach dem Land der Lieferadresse berechnet werden. Wer beide Einstellungen nicht bewusst gesetzt hat, hat hier eine stille Fehlerquelle.
Der eigentliche Haken liegt aber tiefer, und er steckt schon im Aufbau: Magento kann die Steuer ausschließlich über die Kundengruppe beeinflussen. Jede Zuordnung, die es trifft, muss diesen einen Weg nehmen. Damit ändert eine geprüfte USt-IdNr. nicht nur die Besteuerung, sondern alles, was sonst an der Gruppe hängt: Katalogpreise, Warenkorbregeln, Versandkosten, gruppenabhängige Inhalte. Ein Geschäftskunde, der wegen seiner Nummer in die B2B-Gruppe wandert, bekommt womöglich Staffelpreise, die für ihn nie gedacht waren — und beim eingeloggten Kunden bleibt er dort, bis eine Adressänderung ihn wieder herausholt.
Wer die Steuer sauber trennen will, braucht deshalb Gruppen, die nichts anderes tun als Steuern zu unterscheiden. Das ist machbar, aber es kostet die Gruppen als Werkzeug für alles Übrige.
Dazu kommt, was die Automatik von sich aus nicht leistet:
- Es gibt genau vier Gruppen. Eine Abstufung nach Land, Steuersatz oder Produktart ist nicht vorgesehen
- Antwortet VIES nicht, landet der Besteller in der Fehlergruppe. Einen zweiten Versuch gibt es nicht, und niemand erfährt davon
- Das Prüfergebnis wird am Warenkorb zwischengespeichert. Ohne Validate on Each Transaction wirkt eine inzwischen ungültig gewordene Nummer weiter
Für einen Shop, der überwiegend im Inland verkauft und gelegentlich eine Rechnung ins EU-Ausland schreibt, reicht das aus. Wer dort regelmäßig verkauft, merkt die Grenzen früher.
Die Steuerklasse ohne diesen Umweg
Genau diesen Umweg über die Gruppe nimmt unsere Erweiterung EU VAT Enhanced heraus. Sie löst die Kundensteuerklasse von der Kundengruppe und bestimmt sie bei jeder Berechnung neu — aus Inland oder Ausland, aus Liefer- und Rechnungsadresse und aus dem Prüfergebnis der USt-IdNr. gegen VIES. Für unser Beispiel heißt das: Die beiden französischen Besteller lassen sich unterschiedlich behandeln, ohne dass jemand ihre Kundengruppen anfassen müsste.
Am Aufbau selbst ändert sich dabei nichts. Die drei Steuerklassen bleiben, die Steuerregeln bleiben, und du pflegst sie weiter an denselben Stellen. Nur wird die Kundensteuerklasse nicht mehr aus der Gruppe abgelesen, sondern bei jeder Berechnung aus Adresse und Prüfergebnis abgeleitet. Die Kundengruppe steht damit wieder für das zur Verfügung, wofür du sie sonst brauchst — Staffelpreise, Warenkorbregeln, alles Übrige. Welche Einstellungen dafür vorgesehen sind, findest du in der Dokumentation zu Steuerklassen und Berechnung.
Dieser Beitrag beschreibt die Einrichtung eines Magento-Shops und ist keine Steuerberatung. Welche Behandlung in deinem Fall zutrifft, können weder wir noch unsere Software beurteilen. Lass verbindliche Fragen von deiner Steuerberatung oder der zuständigen Behörde klären.
Was ist eine Steuerklasse in Magento?
Eine Kennzeichnung ohne eigenen Prozentsatz. Sie ordnet ein Produkt, einen Kunden oder den Versand einer Gruppe zu. Den Satz liefert erst die Steuerregel, die eine Produkt- mit einer Kundensteuerklasse und einem Steuersatz verbindet.
Wo wird die Kundensteuerklasse eines Kunden festgelegt?
Nicht am Kunden, sondern an seiner Kundengruppe unter Stores → Customer Groups. Jeder Kunde erbt den Wert seiner Gruppe. Ein Feld, das die Klasse für eine einzelne Bestellung überschreibt, sieht der Magento-Kern nicht vor.
Wie lege ich eine neue Steuerklasse an?
Ein eigenes Menü gibt es dafür nicht. Öffne Stores → Tax Rules, lege eine Regel an oder bearbeite eine bestehende und klappe Additional Settings auf. Dort legst du Produkt- und Kundensteuerklassen über das Pluszeichen an. Anschließend steht die Produktklasse im Produkt unter Advanced Pricing zur Auswahl, die Kundenklasse in der Kundengruppe.
Und Lieferungen an Privatkunden im EU-Ausland?
Die laufen nicht über die USt-IdNr., sondern über den Steuersatz des Ziellandes. Welchen du hinterlegen musst und ab wann, regelt der One Stop Shop — dazu haben wir einen eigenen Beitrag über die OSS-Steuersätze in Magento geschrieben.
Warum wird auf eine Bestellung gar keine Steuer berechnet?
Weil keine Steuerregel zutrifft. Meistens ist für das Land der maßgeblichen Adresse kein Steuersatz hinterlegt, oder der vorhandene Satz ist keiner Regel zugewiesen. Magento greift dann nicht auf einen Standardsatz zurück, sondern lässt die Steuerzeile weg. Welche Adresse maßgeblich ist, legt Tax Calculation Based On fest.
Warum wird trotz gültiger USt-IdNr. Steuer berechnet?
Magento schaltet die Gruppe für den Warenkorb durchaus dynamisch um, sobald eine geprüfte Nummer vorliegt. Bleibt die Steuer trotzdem stehen, liegt es meist an einem von drei Punkten: Enable Automatic Assignment to Customer Group ist nicht aktiv, die Nummer steht an der Adresse, die Tax Calculation Based on gerade nicht auswertet, oder die Zielgruppe trägt eine Steuerklasse, für die weiterhin eine Steuerregel greift — so beim Fall Inland, wo der Vorteil auch nicht vorgesehen ist.
Kommentare schreiben
Schreib den ersten Kommentar zu diesem Beitrag.
Kommentar hinzufügen