P6.6: legacy:grandfather-subscriptions — aktive Legacy-Abos aus dem Rechnungsarchiv migrieren
Kriterien vom Auftraggeber (12.06.2026): Quelle der Aktiv-Erkennung ist
ausschliesslich das read-only Rechnungsarchiv legacy_invoices (D-12).
Legacy-Rechnungen bleiben Archiv; neue manuelle Rechnungen entstehen im
MAN-Rechnungskreis.
- Aktiv-Regel: juengste Rechnung pro (Portal, Legacy-Vereinbarung) mit
payment_option.type=recurring und user_payment_option.status=active;
next_due_date max. --grace-months (Default 12) ueberfaellig, sonst
stale -> bleibt reines Archiv. Einmal-Kaeufe werden nie uebernommen.
- Uebernahme als grandfathered in user_payment_options:
current_period_end = next_due_date, Betraege/Intervall der letzten
Legacy-Rechnung in legacy_conditions -> der taegliche MAN-Lauf
(billing:generate-manual-invoices) fakturiert zum gewohnten
jaehrlichen Rhythmus weiter. Versteckte Katalog-Platzhalter
LEGACY-{PE|BP}-{Artikel} in payment_options.
- Replay-faehig (D-18): Re-Runs aktualisieren anhand der Legacy-IDs in
legacy_conditions statt zu duplizieren — die Kern-Migration laeuft
kurz vor dem Relaunch erneut.
- Optionen: --dry-run, --as-of, --grace-months, --no-report; JSON-Report
nach storage/app/migration/. Dry-Run gegen Test-Snapshot: 22 aktive
jaehrliche Vereinbarungen, davon 4 sofort faellig, 0 stale.
- Doku: MIGRATION-STEPS.md (Runbook-Reihenfolge nach archive-invoices),
05-DATABASE-MERGE §5.6, 12-NAECHSTE-SCHRITTE 6.6, 08-PROGRESS,
PHASE-9-Plan + Checkliste.
Tests: GrandfatherLegacySubscriptionsTest (7, inkl. End-to-End
Migration -> MAN-Rechnung mit Legacy-Betraegen). Suite: 475 passed,
4 skipped. Pint clean.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
parent
d548f4b235
commit
1cd4d8e33a
8 changed files with 526 additions and 12 deletions
|
|
@ -4,6 +4,34 @@ Chronologisches Protokoll aller Migrationsschritte. Jede Session / jeder Commit
|
|||
|
||||
---
|
||||
|
||||
## 2026-06-12 – P6.6 Grandfathering aktiver Legacy-Abos ✅
|
||||
|
||||
**Phase:** P6 Daten-Migration (D-13, Kriterien vom Auftraggeber präzisiert)
|
||||
**Status:** ✅ umgesetzt; Rehearsal gegen Produktiv-Snapshot bleibt P6.10.
|
||||
|
||||
- Neuer Command `legacy:grandfather-subscriptions` (`--dry-run`, `--as-of=`,
|
||||
`--grace-months=12`, `--no-report`; JSON-Report nach
|
||||
`storage/app/migration/grandfather-subscriptions-*.json`).
|
||||
- Quelle ist ausschließlich das Rechnungsarchiv `legacy_invoices` (D-12):
|
||||
jüngste Rechnung pro (Portal, Legacy-UPO) mit `payment_option.type =
|
||||
recurring` und `user_payment_option.status = active`; `next_due_date`
|
||||
max. 12 Monate überfällig, sonst stale → bleibt Archiv.
|
||||
- Übernahme als `grandfathered` in `user_payment_options` mit
|
||||
`current_period_end = next_due_date` und Beträgen der letzten
|
||||
Legacy-Rechnung in `legacy_conditions` — der tägliche MAN-Kreis-Lauf
|
||||
(`billing:generate-manual-invoices`, Phase 9D im Hauptprojekt)
|
||||
fakturiert ab dann zum gewohnten jährlichen Rhythmus weiter.
|
||||
- Versteckte Katalog-Platzhalter `LEGACY-{PE|BP}-{Artikel}` in
|
||||
`payment_options`; Re-Runs aktualisieren statt duplizieren (D-18,
|
||||
Replay kurz vor Relaunch).
|
||||
- Dry-Run gegen aktuellen Test-Snapshot: 22 aktive jährliche
|
||||
Vereinbarungen (49 € bis 1.190 €), davon 4 sofort fällig; 0 stale.
|
||||
- Tests: `tests/Feature/Billing/GrandfatherLegacySubscriptionsTest.php`
|
||||
(7 Tests, inkl. End-to-End: Migration → MAN-Rechnung mit
|
||||
Legacy-Beträgen).
|
||||
|
||||
---
|
||||
|
||||
## 2026-05-04 – P6.5d Legacy-Rechnungen Vollimport + on-demand PDF ✅
|
||||
|
||||
**Phase:** P6 Daten-Migration + P4 Customer-Portal
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue