# Migration Steps – aktuelles Runbook Stand: 2026-05-04. Dieses Kurz-Runbook spiegelt den aktuell implementierten Command-Stand. Details und Go-Live-Kontext stehen in `05-DATABASE-MERGE.md` und `08-PROGRESS.md`. ## Dry-Run ```bash php artisan legacy:import --source=all --dry-run php artisan legacy:archive-invoices --dry-run php artisan legacy:verify --no-report php artisan legacy:migrate-media --portal=all --type=all --base-path=dev/migration --dry-run ``` Hinweis: `legacy:archive-invoices` importiert die Legacy-Rechnungen vollständig in `legacy_invoices`, inkl. Status/User-Zuordnung, `raw_snapshot`, `pdf_payload` und Report. Die PDF-Erzeugung erfolgt im Customer-Bereich bei Abruf aus diesen Archivdaten. ## Vollimport in korrekter Reihenfolge ```bash php artisan legacy:import --source=presseecho --step=categories --force php artisan legacy:import --source=all --step=users --force php artisan legacy:import --source=presseecho --step=companies --force php artisan legacy:import --source=businessportal24 --step=companies --force php artisan legacy:import --source=presseecho --step=contacts --force php artisan legacy:import --source=businessportal24 --step=contacts --force php artisan legacy:import --source=presseecho --step=press-releases --force php artisan legacy:import --source=businessportal24 --step=press-releases --force php artisan legacy:import --step=link-associations --force php artisan legacy:archive-invoices php artisan legacy:fix-timestamps php artisan legacy:verify ``` Hinweis: Der Schritt `--step=users` importiert nicht nur `sf_guard_user`, sondern auch die direkt verknüpften Daten aus `sf_guard_user_profile` in die neue Tabelle `profiles`. ## Alternativer Komplettlauf ```bash php artisan legacy:import --source=all --force php artisan legacy:archive-invoices php artisan legacy:fix-timestamps php artisan legacy:verify php artisan legacy:migrate-media --portal=all --type=all --base-path=dev/migration ``` ## Noch nicht im Runbook finalisiert - `legacy:grandfather-subscriptions`: noch nicht implementiert bzw. blockiert durch Kriterien vom Auftraggeber. - Medien-/Bilddateien-Transfer: Scope und finaler Command noch offen. - Staging-Rehearsal mit aktuellem Produktiv-Snapshot bleibt Pflicht vor Go-Live. ## Legacy-Rechnungsreport `legacy:archive-invoices` schreibt standardmäßig: ```bash storage/app/private/migration/legacy-invoices-*.json ``` Der Report enthält pro Portal: - Source-Count - importierte/übersprungene/fehlerhafte Rechnungen - Summe in Cent - Statusverteilung - Anzahl unzugeordneter Legacy-User - Anzahl erzeugter PDF-Payloads