Fehlende/falsche Steuerraten/-sätze hinterlegen, insbesondere bei "alten" Bestellungen

Dieser Hilfe-Artikel behandelt einen Spezialfall, der meist a) sehr selten und b) erst einige Monate/Jahre nach Nutzung des Plugins auftritt. Wenn du einfach "die richtigen Steuersätze" im Rahmen der ersten Einrichtung hinterlegen willst, dann wirst du wahrscheinlich eher in der Einrichtungs-Anleitung fündig.

Wichtig: Bitte lies dir zuerst die kurze, nachstehende Erklärung durch. Sie ist wichtig für das Verständnis der Funktionsweise der Software. Nur so kannst du verstehen, ob das überhaupt der richtige Fehler ist, der auch bei dir auftritt. Nur so kannst du den Fehler dann auch sinnvoll beheben.

Kurzerklärung der Funktionsweise der Steuerermittlung

Das DATEV-Format-Plugin ermittelt die Netto-/Brutto-Umsätze einer Bestellposition anhand der sogenannten Steuerrate. Das ist wichtig, damit z.B. das Steuersatz-Splitting bei Versandkosten korrekt funktioniert (z.B. 73% der Bestellung müssen mit 7% besteuert werden, 10% mit 19%, der Rest ist steuerfrei).

WooCommerce kennt sowohl Steuerklassen (z.B. Standard, Reduziert,...) wie auch Steuerraten. Eine Steuerklasse kann mehrere Raten haben (z.B. Steuerklasse "Standard" mit vielen verschiedenen Steuersätzen für verschiedene EU-Länder, teilweise sogar nach Postleitzahl bei Überseegebieten, und so weiter).

Bei Erstellung von Buchungssätzen ermittelt das DATEV-Format-Plugin die Steueranteile einer Bestellposition. Daraus wird dann mittels der Steuerrate der passende Netto-Betrag ermittelt.

Rechenbeispiel:

  • Mobiltelefon für 119 EUR Brutto, 19% USt
  • Steueranteil: 19 EUR
  • 19 EUR / 19% Steuer = 100 EUR Netto
  • -> 19 EUR Steuer, 100 EUR Nettoumsatz

Das geht auch komplizierter, da eine Bestellposition mehrere Steuersätze umfassen kann (eben z.B. bei Versandkosten). Das ist für den konkreten Fall nicht relevant, aber wichtig fürs Verständnis bei Spezialfällen.

Wie Fehler entstehen können

WooCommerce speichert bei Bestellungen immer die Steurraten-ID zum Zeitpunkt der Erstellung der Bestellung ab. Leider speichert WooCommerce aber nicht ab, wie hoch diese Steuerrate zum jeweiligen Zeitpunkt war.Wenn diese Steuerrate dann nicht mehr existiert, kann der Steuerprozentsatz nicht mehr ermittelt werden.

Dasselbe gilt, wenn eine Steurrate geändert wird: Dann sind z.B. 7% statt 9% hinterlegt. Das Plugin verrechnet sich dann. Das kann passieren, wenn eine Steuerrate von Hand geändert wird (z.B. bei einer Steueränderung) oder wenn dies automatisch durch ein Plugin geschieht ("Möchten Sie automatisch EU-Steuersätze importieren lassen?").

Das Plugin verfügt über eine automatische Konsistenzprüfung, die dann versucht, einfach nur die Brutto-Beträge zu nutzen. Das funktioniert in sehr, sehr vielen Fällen - in manchen Spezialfällen aber nicht.

Beispielhafte Fehler, die auftreten können

  • Bestellpositionen aus der Vergangenheit werden mit den falschen Brutto-Beträgen verbucht (z.B. da der Steuersatz von 19% auf 21% geändert wurde). Denn dann rechnet das Plugin falsch.
  • Es wird immer das Rückfallkonto verwendet, obwohl eigentlich ein Buchungskonto bei Steuersatz/-steuerrate vorhanden ist.
  • Die Bruttobeträge stimmen nur bei alten Bestellungen nicht, die jetzt noch nachträglich verbucht werden müssen (z.B. im Laufe des Jahresabschlusses).

Fehlerbehebung A: Steuerraten nachtragen

Du kannst in der Datenbank-Tabelle "woocommerce_tax_rates" fehlende Steuerraten anhand der jeweils fehlenden IDs nachtragen. Das musst du tatsächlich in der Datenbank machen, da du im WooCommerce-Admin-Backend die ID nicht beeinflussen kannst. Die ist aber wichtig für die Zuordnung.

Vorteile: Verhältnismäßig einfach
Nachteile: Auf Dauer unübersichtlich im Backend, funktioniert nur, wenn eine Steuerrate ganz fehlt

Fehlerbehebung B: Komplexere Fallback-Programmierlogik hinterlegen

Wenn du eine Steuerrate z.B. geändert hast, dann bleibt dir (leider) nichts anderes übrig, als eine kompliziertere Logik zu hinterlegen. Du kannst hierfür den Filter "wcdtvfe_tax_rate_percent_value" verwenden (ab Version 1.4.18, zum Zeitpunkt der Erstellung des Hilfe-Artikels noch in der Beta-Probephase).

add_filter( 'wcdtvfe_tax_rate_percent_value', function( $tax_percent, $item_tax_entry_tax_rate_id, $order, $line_item ) {
	if( $tax_percent === null || $tax_percent === false ) {
		/**
		 * - Add missing tax_rate_ids below
		 * - Check your orders for the missing tax_rate_ids
		 * - Cross-check woocommerce_tax_rates tables (rates that exist there usually do not need to be included here)
		 * - However, if you changed a tax rate e.g. within a year, you could also filter for existing tax_rates and e.g. cross-check the order creation date (for example, 7% instead of 9% before a certain order creation date). In this case, do not check for $tax_percent === null / $tax_percent === false in line 2.
		 */
		
		// You must change this tax_rate_id to whatever is missing in your system!
		if( $item_tax_entry_tax_rate_id === 13 ) {
			return 19; //19% USt
		}

		// You must change this tax_rate_id to whatever is missing in your system!
		else if ( $item_tax_entry_tax_rate_id === 28 ) {
			return 7; //7% USt
		}

		// etc.
	}
	return $tax_percent;
}, 10, 4 );

Sie haben Fragen oder möchten ein Angebot anfordern?

Jetzt Kontakt aufnehmen
crosslist