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.
| 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.
The "Product Migration" card is in the plugin configuration (Extensions > My Extensions > Small Business §19 UStG).
mmd:kleinunternehmer:migrate-products --restore --tax-rate=19 for restoring.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).
# 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.
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.
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.
price) per currency is changed. Tiered prices (advanced prices) and purchase prices are not touched.