Phase 9F: Tarif-Seite mit Stripe-Checkout und Billing Portal
- Buchungs-Seite zeigt das echte 4-Tier-Raster aus plans (Monat/Jahr-
Toggle, Jahrespreis als "2 Monate gratis") mit Checkout-Buttons,
Einzel-PM als separaten No-Abo-Block und Enterprise-Hinweis;
Credit-Konzept-Mock entfernt (Credits folgen mit 9I bzw. Phase 2)
- Aktueller-Tarif-Panel real: Abo (Preis, Kontingent, Kündigungsstatus),
Bestandstarif (unbegrenzt, nächste MAN-Rechnung), offene Einzelkäufe;
Kontingent-Kachel zeigt "Unbegrenzt" bei Bestandsschutz
- "Abo verwalten" über das Stripe Billing Portal
(me.checkout.billing-portal; Zahlungsmethode, Rechnungen, Kündigung)
- Aktive Buchungen + Verlauf aus echten Daten (Abo, Legacy-Vereinbarung,
offene/eingelöste Einzelkäufe mit PM-Verknüpfung)
- Tests: BookingsPageTest (9 Tests), PanelConsolidationTest angepasst;
Suite 519 passed / 4 skipped
- Doku: PHASE-9-Plan 9F ✅, Billing-Doku (Routen, Stripe Tax aktiviert),
STATUS-ABGLEICH, Checkliste, PROGRESS
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
parent
c8dc99c3c8
commit
23ac8bc7f1
11 changed files with 581 additions and 316 deletions
|
|
@ -1,8 +1,8 @@
|
|||
# Billing & Rechnungskreise (hybrides Modell)
|
||||
|
||||
Stand: 12.06.2026 — Datenmodell, MAN-Kreis, USt-Behandlung (Phase 9D) sowie
|
||||
Stripe-Sync, Webhook-Verarbeitung, Checkout-Flows und Plan-Kontingent
|
||||
(Phase 9E) umgesetzt. Es fehlt die Checkout-UI (Phase 9F).
|
||||
Stripe-Sync, Webhook-Verarbeitung, Checkout-Flows, Plan-Kontingent
|
||||
(Phase 9E) und Tarif-Seite/Checkout-UI (Phase 9F) umgesetzt.
|
||||
|
||||
Dieses Dokument ist die zentrale Referenz für das Abrechnungssystem:
|
||||
Rechnungskreise, Tarif-Datenmodell, Steuerlogik, Befehle und Konfiguration.
|
||||
|
|
@ -61,12 +61,13 @@ monatlicher Reset), danach wird der älteste bezahlte Einmalkauf eingelöst
|
|||
(`single_purchases.status → consumed`, verknüpft mit der PM). Die frühere
|
||||
Stub-Spalte `users.press_release_quota` ist entfernt.
|
||||
|
||||
**Checkout-Einstiege** (Phase 9E; UI-Anbindung folgt in 9F):
|
||||
**Checkout-Einstiege** (Phase 9E/9F — verdrahtet auf der Buchungs-Seite):
|
||||
|
||||
| Route | Zweck |
|
||||
|---|---|
|
||||
| `me.checkout.subscription` (`/admin/me/checkout/abo/{slug}/{monthly\|yearly}`) | Stripe-Checkout für ein Tarif-Abo |
|
||||
| `me.checkout.single-pm` (`/admin/me/checkout/einzel-pm`) | Stripe-Checkout Einzel-PM (legt `single_purchases`-Eintrag `pending` an; Webhook setzt `paid`) |
|
||||
| `me.checkout.billing-portal` (`/admin/me/checkout/abo-verwalten`) | Stripe Billing Portal (Zahlungsmethode, Rechnungen, Kündigung) |
|
||||
|
||||
Erfolg/Abbruch landen auf der Buchungs-Seite (`?checkout=erfolg|abbruch`).
|
||||
Die Steuer ergänzt **Stripe Tax** automatisch (`Cashier::calculateTaxes()`
|
||||
|
|
@ -180,12 +181,12 @@ CLI ausgegebene `whsec_…` temporär als `STRIPE_WEBHOOK_SECRET` in die `.env`.
|
|||
Routen siehe Abschnitt 2), Slot-Logik auf Plan-Kontingent umgestellt
|
||||
(Grandfathered = unbegrenzt, Entscheidung 12.06.2026), Stub-Spalte
|
||||
entfernt, Stripe Tax aktiviert (`Cashier::calculateTaxes()`).
|
||||
1. **Phase 9F**: Tarif-Seite/Buchungs-UI an die Checkout-Routen anbinden
|
||||
(die Buchungs-Seite ist noch Konzept-Mock mit deaktivierten Buttons);
|
||||
echte Tarif-/Buchungsdaten statt Platzhalter anzeigen.
|
||||
2. **Stripe Tax im Dashboard aktivieren** (Ursprungsadresse/Registrierung
|
||||
hinterlegen) — ohne das schlägt der Checkout mit automatischer Steuer
|
||||
fehl. Im Test-Mode prüfen, dann im Live-Mode wiederholen; dort auch
|
||||
1. **Phase 9F erledigt** (12.06.2026): Die Buchungs-Seite zeigt das echte
|
||||
Tarif-Raster (Monat/Jahr-Toggle), den Einzel-PM-Block, Bestandstarife
|
||||
und „Abo verwalten" (Stripe Billing Portal, `me.checkout.billing-portal`).
|
||||
2. **Stripe Tax**: im Dashboard aktiviert (12.06.2026, Produkt-Steuercode
|
||||
„SaaS – business use", Steuer nicht im Preis enthalten — passt zu den
|
||||
Netto-Preisen). Vor Relaunch im **Live-Mode** wiederholen; dort auch
|
||||
`billing:sync-stripe-plans` erneut ausführen (Live-Produkt-IDs).
|
||||
3. **VIES-Validierung** der USt-ID (aktuell Formatprüfung; Stripe prüft
|
||||
die im Checkout erfasste USt-ID asynchron selbst).
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue