Markus Michalski FAQ

Kleinunternehmer: Preis-Migration

Produktpreise im Sylius-Shop auf die 0-%-Steuerkategorie nach §19 UStG umstellen und zurücksetzen: Admin-Button, Konsolenbefehl mit allen Optionen, Rundungsgrenzen, übersprungene Varianten.

English Version

Zurück zur Übersicht

Kleinunternehmer: Preis-Migration

Live Demo: Teste dieses und weitere Plugins live — ohne Installation, ohne Risiko: demo.markus-michalski.net

Was die Migration macht

Bestehende Produkte behalten ihre Steuerkategorie (zum Beispiel 19 % oder 7 %), auch wenn du die Regelung aktivierst. Die Migration stellt jede Produktvariante auf die 0-%-Steuerkategorie kleinunternehmer_zero um und rechnet dabei den Preis neu:

  1. Aus dem bisherigen Bruttopreis wird der Nettopreis berechnet: Netto = Brutto / (1 + Steuersatz), auf den nächsten Cent gerundet. Der Steuersatz ist der der bisherigen Steuerkategorie für die Zone DE.
  2. Die Variante bekommt die Kategorie kleinunternehmer_zero, der Nettopreis wird ihr neuer Preis.
  3. Das Plugin merkt sich pro Variante die ursprüngliche Steuerkategorie, damit ein Zurücksetzen weiß, welche Kategorie es wiederherstellen muss.

Gearbeitet wird in Blöcken zu je 100 Varianten.

graph TD
    A["Variante auf bisheriger Steuerkategorie"] --> B{"Kategorie, Code und Steuersatz für Zone DE vorhanden?"}
    B -->|Nein| C["Wird übersprungen, bleibt unverändert"]
    B -->|Ja| D["Netto = Brutto geteilt durch 1 plus Steuersatz, gerundet"]
    D --> E["Kategorie kleinunternehmer_zero, Preis = Netto"]
    E --> F["Ursprungs-Kategorie in mmd_kleinunternehmer_migrated_variant merken"]

Die Migration ändert Preise im Shop. Sichere vorher deine Datenbank und prüfe die Anzahl mit --dry-run.

Migration im Admin

Auf der Einstellungsseite (Admin → MMKreativ Plugins → Kleinunternehmer §19 UStG) zeigt die Karte „Preise migrieren“ zwei Zähler: wie viele Varianten noch nicht migriert und wie viele bereits migriert sind. Der Knopf Jetzt migrieren erscheint nur, solange noch Varianten offen sind, und verlangt eine Bestätigung.

Die Karte warnt außerdem bei Widersprüchen:

Der Knopf löst eine geschützte POST-Anfrage aus (CSRF-Token, Recht ROLE_ADMINISTRATION_ACCESS). Konnten einzelne Varianten nicht migriert werden, erscheint der Hinweis „Einige Varianten konnten nicht migriert werden (kein Steuersatz für die DE-Zone auf ihrer Steuerkategorie hinterlegt) und wurden unverändert gelassen.“

Im Admin gibt es nur die Richtung zur Kleinunternehmerregelung. Zurücksetzen geht ausschließlich per Konsolenbefehl.

Migration per Konsole

Für Skripte und zum Zurücksetzen gibt es mmd:kleinunternehmer:migrate-prices:

Option Kürzel Beschreibung
--to-small-business Preise auf die 0-%-Kategorie migrieren
--restore Zuvor migrierte Varianten auf ihre ursprüngliche Steuerkategorie und ihren Preis zurücksetzen
--dry-run Nur melden, wie viele Varianten betroffen wären, ohne etwas zu schreiben
--force -f Bestätigungsabfrage überspringen

Genau eine der beiden Optionen --to-small-business und --restore ist Pflicht, sonst bricht der Befehl ab.

# Vorschau: Wie viele Varianten wären betroffen?
bin/console mmd:kleinunternehmer:migrate-prices --to-small-business --dry-run

# Migrieren, mit Bestätigungsabfrage
bin/console mmd:kleinunternehmer:migrate-prices --to-small-business

# Migrieren in einem Skript ohne Rückfrage
bin/console mmd:kleinunternehmer:migrate-prices --to-small-business --force

# Auf die ursprüngliche Steuerkategorie zurücksetzen
bin/console mmd:kleinunternehmer:migrate-prices --restore

Ohne --force verweigert der Befehl in einer nicht interaktiven Umgebung die Arbeit, weil die Umstellung einmalig ist und das Zurücksetzen Rundungsabweichungen hat. Im Skript also immer --force angeben.

Bei einer ungültigen Optionskombination und bei fehlendem --force ohne Terminal endet der Befehl mit dem Exit-Code INVALID. Während der Arbeit zeigt er einen Fortschrittsbalken. Nach --to-small-business prüft er, ob Varianten übrig geblieben sind, und warnt dann, dass sie wegen eines fehlenden Steuersatzes für die Zone DE übersprungen wurden. bin/console mmd:kleinunternehmer:migrate-prices --help zeigt den ausführlichen Hilfetext.

Zurücksetzen und seine Grenzen

--restore stellt für jede gemerkte Variante die ursprüngliche Steuerkategorie wieder her und rechnet den Bruttopreis aus dem aktuellen Preis der Variante zurück: Brutto = Netto x (1 + ursprünglicher Steuersatz), auf den Cent gerundet. Gespeichert ist nur die ursprüngliche Steuerkategorie, nicht der Preis. Hast du den Preis nach der Migration von Hand geändert, rechnet das Zurücksetzen von diesem neuen Preis aus.

Das Zurücksetzen ist nicht cent-genau. Weil der Nettopreis schon beim Migrieren auf den Cent gerundet wurde, kann der zurückgerechnete Bruttopreis um ein bis zwei Cent vom ursprünglichen abweichen. Das gilt für die meisten Steuersätze und ist kein Fehler.

Gibt es die ursprüngliche Steuerkategorie oder ihren Steuersatz für die Zone DE nicht mehr, bleibt die Variante auf der 0-%-Kategorie und ihrem Preis. Der Eintrag zur Variante wird trotzdem gelöscht, weil ein erneuter Versuch nichts ändern würde, und die gemeldete Anzahl der zurückgesetzten Varianten zählt solche Einträge mit.

Was übersprungen wird

Das Plugin rät keine Preise und überspringt deshalb Varianten, die es nicht umrechnen kann:

Grenzen der Preisumrechnung