Markus Michalski FAQ

Small Business: Product migration

Small Business §19 UStG for Shopware 6.7 - move products to the 0% tax rate and back via admin card or CLI command, all options, price logic and limits of the migration.

Deutsche Version

Back to overview

Small Business: Product migration

The plugin does not calculate anything in the cart itself. Which tax a product carries is determined by the tax rate on the product. The migration moves products to the tax rate Kleinunternehmer §19 UStG (0%) and adjusts their prices in the process. It is the only function of the plugin that changes product data.

The migration changes tax rate and prices of your products in the database. Make a backup first.

Two ways

Admin card CLI command
Direction only to the 0% tax rate to the 0% tax rate and back (--restore)
Suited for small to medium catalogs large catalogs, automation
Safety prompt confirmation dialog prompt, can be skipped with --force
Preview no --dry-run

Both ways require that the tax rate Kleinunternehmer §19 UStG (0%) exists. It is created when the plugin is activated.

Admin card

The "Product Migration" card is in the plugin configuration (Extensions > My Extensions > Small Business §19 UStG).

The card calls the two Admin API routes of the plugin. Users need the permissions product:read (status) or product:update and system_config:read (migration).

CLI command

# Preview: only count, change nothing
bin/console mmd:kleinunternehmer:migrate-products --to-small-business --dry-run

# Move all products to the 0% tax rate
bin/console mmd:kleinunternehmer:migrate-products --to-small-business

# Restore products from the 0% tax rate to 19 %
bin/console mmd:kleinunternehmer:migrate-products --restore --tax-rate=19

# Restore to 7 % without a prompt
bin/console mmd:kleinunternehmer:migrate-products --restore --tax-rate=7 --force
Option Meaning
--to-small-business Migrates all products that are not on the 0% tax rate to it.
--restore Restores all products that are on the 0% tax rate to a regular tax rate.
--tax-rate=<rate> Target tax rate in percent for --restore. Default: 19. The first tax rate in the shop with exactly this percentage is used.
--dry-run Only shows how many products would be affected.
--force, -f Skips the safety prompt (the prompt's default answer is "No").

Exactly one of --to-small-business and --restore must be given; both together is an error. If no tax rate exists for --tax-rate, the command aborts and prints the existing tax rates as a table. During the migration the command shows a progress bar.

Price logic

Gross and net price are rewritten per currency:

Direction Gross Net
to the 0% tax rate previous net price previous net price
back (--restore) net price × (1 + rate / 100), rounded to 2 decimals unchanged

Example: a product with €100 net and €119 gross costs €100 after the migration to the 0% tax rate. Restoring to 19 % turns it back into €100 net and €119 gross.

Products without a price only receive the new tax rate.

Limits

On restore, all products on the 0% tax rate receive the same target tax rate. A product's original tax rate is not stored. Products that were at 7 % before end up at 19 % with --restore --tax-rate=19, too.

An existing list price (strike price) is lost during the migration and must be re-entered afterwards. For each currency the plugin writes back only currency, gross, net and linked; it does not pass a list price. This applies in both directions.