From 86f21451153b64f8dec00676fd0ec3ecb39d3021 Mon Sep 17 00:00:00 2001 From: Nick Szaunig Date: Fri, 16 Oct 2026 10:04:27 +0200 Subject: [PATCH] docs: Bienenpatenschaft mit SEPA-Schutz, Stripe-Einrichtung und Abo-Stufen je Monat Abo-Stufen 1 bis 24 je bezahltem Monat, danach VIP. SEPA fuer Abos mit Neukunden-Frist, Verzug und Sperre nach Rueckbuchung. Stripe-Einrichtung erst im Testmodus per Skript, Livemodus nur nach Freigabe. Co-Authored-By: Claude Opus 5.5 (1M context) --- .../2026-10-16-bienenpatenschaft-design.md | 90 ++++++++++++++----- 1 file changed, 70 insertions(+), 20 deletions(-) diff --git a/docs/superpowers/specs/2026-10-16-bienenpatenschaft-design.md b/docs/superpowers/specs/2026-10-16-bienenpatenschaft-design.md index 7c380cd..103b9cb 100644 --- a/docs/superpowers/specs/2026-10-16-bienenpatenschaft-design.md +++ b/docs/superpowers/specs/2026-10-16-bienenpatenschaft-design.md @@ -318,11 +318,10 @@ Das betrifft nur die digitale Darstellung, nicht den Druck. ### 3. Abo-Stufen und VIP (Teilprojekt 5) -- Grundlage: ununterbrochen bezahlte Abo-Dauer. -- Vorgabe des Inhabers: Stufen bis 24, danach eine Stufe ohne Zahl, „VIP“, - als Zeichen besonders hoher Wertschätzung. Ob die 24 Jahre oder Monate - meint, ist offen (siehe „Offene Fragen“). Die Schwellen sind im Admin - pflegbar, damit sich das ohne Codeänderung anpassen lässt. +- Grundlage: ununterbrochen bezahlte Abo-Monate. +- Vorgabe: Stufe 1 bis 24, je bezahltem Monat eine Stufe, danach eine Stufe + ohne Zahl, „VIP“, als Zeichen besonders hoher Wertschätzung. Die Schwellen + sind im Admin pflegbar und lassen sich ohne Codeänderung anpassen. - VIP bekommt eine eigene Medaille und eine VIP-Kennzeichnung im Konto. Weitere Vorteile (Rabatt, Versand) gehören nicht zum Umfang und lassen sich später über die bestehenden Rabattcodes ergänzen. @@ -453,10 +452,8 @@ hat: - Nach der Ernte: Der Inhaber legt im Admin die Erntefenster fest. Geliefert wird im nächsten Fenster, sobald seit der letzten Lieferung mindestens sechs Monate bezahlt sind. -- Bezahlt heißt: Stripe meldet die Rechnung als bezahlt. Bei SEPA-Lastschrift - ist eine Rückbuchung bis acht Wochen möglich. Empfehlung: Abos zuerst nur mit - Karte und Wallets (Apple Pay, Google Pay) anbieten. SEPA ist eine - Entscheidung des Inhabers. +- Bezahlt heißt: Stripe meldet die Rechnung als bezahlt, bei SEPA zusätzlich + die Regeln unter „SEPA-Lastschrift und Rückbuchungen“. - Fehlgeschlagene Zahlung: Stripe versucht es automatisch erneut. Solange das Abo im Verzug ist, entsteht keine Lieferung. Scheitern alle Versuche, endet das Abo wie bei einer Kündigung. @@ -466,6 +463,59 @@ hat: - Widerruf innerhalb von 14 Tagen: Bis dahin ist kein Honig verschickt, es entsteht kein Warenverlust. +### SEPA-Lastschrift und Rückbuchungen + +Abos lassen sich mit Karte, Apple Pay, Google Pay und SEPA-Lastschrift +bezahlen. + +Grenze, die keine Einstellung aufhebt: Bei einer SEPA-Lastschrift kann der +Kunde acht Wochen lang ohne Angabe von Gründen bei seiner Bank die Erstattung +verlangen, bei einer nicht autorisierten Lastschrift 13 Monate lang. Das ist +Bankrecht. Stripe kann es nicht verhindern und solche Rückbuchungen nicht +anfechten. Stripe berechnet dafür außerdem eine Gebühr. Der Schutz liegt +deshalb in der Lieferlogik von Wabenhain: + +1. Lieferung nur gegen bezahlte Monate (siehe oben). Eine Rückbuchung kann + höchstens Honig betreffen, der schon bezahlt erschien. +2. Neukunden-Frist: Bei SEPA zählt die erste Abo-Zahlung eines Kontos erst + nach einer Frist für den Lieferanspruch. Vorgabe 56 Tage, also die + Acht-Wochen-Frist. Die erste Lieferung kommt dadurch bei SEPA etwas später, + alle weiteren normal. Die Frist ist im Admin einstellbar (0 schaltet sie + ab). Die Verkaufsseite nennt sie bei der Zahlart. +3. Rückbuchung erkannt (`charge.dispute.created`, im Webhook schon + abonniert): Das Abo geht sofort auf `IM_VERZUG`, offene Lieferungen werden + gestoppt und ihre Reservierung freigegeben, die Abo-Stufe ruht. Der Kunde + bekommt eine Mail mit der Bitte, den Betrag zu begleichen. Der Fall + erscheint in der Aufmerksamkeitsliste. +4. Wird der Betrag nicht binnen 14 Tagen bezahlt, endet das Abo wie bei einer + Kündigung. Der Anspruch auf den Betrag bleibt bestehen. Ob er eingefordert + wird, entscheidet der Inhaber. +5. Ein Konto mit einer Rückbuchung kann neue Abos nur noch mit Karte oder + Wallet abschließen. Der Admin kann diese Sperre aufheben. + +### Stripe-Einrichtung + +Die Einrichtung erfolgt in Teilprojekt 4, zuerst im Testmodus, dann +identisch im Livemodus. Was per API geht, legt ein Einrichtungsskript im Repo +an (wiederholbar, ohne Geheimnisse im Code). Was nur im Dashboard geht, +steht als Checkliste in `docs/EINRICHTUNG.md`. + +- Zahlarten für Abo-Checkout: Karte, Apple Pay, Google Pay, SEPA-Lastschrift + (Mandat wird im Checkout erteilt). +- Billing: Smart Retries für fehlgeschlagene Zahlungen, nach dem letzten + Versuch Abo kündigen. Stripe-eigene Kundenmails zu Rechnungen aus, weil + Wabenhain eigene Rechnungen und Mails schickt. +- Kundenportal: nur Zahlungsart ändern. Kündigung und Tarifwechsel im Portal + aus, weil die Kündigung über den eigenen Kündigungsbutton läuft. +- Webhook-Endpunkt: bestehende Ereignisse plus + `customer.subscription.created`, `customer.subscription.updated`, + `customer.subscription.deleted`, `invoice.paid`, + `invoice.payment_failed`, `charge.dispute.closed`. +- Produkte und Preise der Abo-Angebote legt der Admin über Wabenhain an, + nicht von Hand im Stripe-Dashboard. +- Tests mit Stripe Test Clocks (Abo über mehrere Monate) und + SEPA-Testkonten, darunter eines, das eine Rückbuchung auslöst. + ### Lieferaufträge Ein täglicher Lauf im CronJob `wabenhain-certificates` prüft fällige @@ -585,14 +635,16 @@ vorherigen Revision. Medaillen sind ebenso versioniert. (eindeutig), Status (`AKTIV`, `IM_VERZUG`, `GEKUENDIGT`, `BEENDET`), Beginn, Kündigung wirksam zum, Ende - `SubscriptionPayment`: Abo, `stripeInvoiceId` (eindeutig), bezahlt am, - Betrag, Wabenhain-Rechnung, zählt für Lieferung (ja/nein) + Betrag, Zahlart, zählt für Lieferung ab (Datum, bei SEPA-Neukunden nach + der Frist), zurückgebucht am, Wabenhain-Rechnung - `SubscriptionDelivery`: Abo, fällig am, Gläser, Status, erzeugte Bestellung - `HarvestWindow`: Zeitraum, geplante Abo-Gläser je Angebot - `SponsorshipTransfer`: Patenschaft, Token-Hash, gültig bis, erstellt von, eingelöst von, eingelöst am, widerrufen am - `LoyaltyLevel`: Art (`STAMMKUNDE`, `ABO`), Schwelle, Name, Medaillendesign; VIP als Stufe ohne Zahl -- `Customer.stripeCustomerId` +- `Customer.stripeCustomerId`, `Customer.sepaBlockedAt` (gesetzt nach einer + Rückbuchung) Statuswerte der Patenschaft: `AUSSTEHEND`, `FEHLER`, `BEREIT`, `GEDRUCKT`. Aktiv, abgelaufen und gekündigt werden aus Daten berechnet. @@ -762,6 +814,9 @@ Originalgröße. 3D-Ansicht auf Desktop, 390 px mobil, mit - Bestand: Einzelverkauf kann reservierte Abo-Gläser nicht kaufen; Kontingent voll stoppt neue Abos - doppelte Stripe-Abo-Ereignisse: eine Rechnung, eine Zahlung +- SEPA: erste Zahlung zählt erst nach der Neukunden-Frist; Rückbuchung + stoppt Lieferungen, setzt das Abo in Verzug, sperrt SEPA für das Konto; + ohne Ausgleich endet das Abo nach 14 Tagen - Treuestufen: Erstattung senkt die Stammkunden-Stufe - E2E (Playwright): Einmalkauf mit Stripe-Testkarte bis zur 3D-Ansicht im Konto; Abo-Abschluss mit Stripe-Testuhr (Test Clock) über drei Monate @@ -783,13 +838,6 @@ Kontrolle und einer Vorführung. Gesamtabnahme: 8. Druck- und Korrekturablauf im Admin 9. offene geschäftliche Konfiguration (Liste unten) -## Offene Fragen an den Inhaber - -1. Abo-Stufen „bis 24“: Jahre oder Monate? Die Schwellen sind pflegbar, die - Antwort bestimmt nur die Vorgabe. -2. SEPA-Lastschrift für Abos anbieten (Rückbuchungsrisiko bis acht Wochen) - oder zuerst nur Karte und Wallets? - ## Geschäftliche Konfiguration vor Veröffentlichung 1. Preise kaufmännisch prüfen: Einmalpakete und Abo-Monatspreise mit Honig, @@ -802,8 +850,10 @@ Kontrolle und einer Vorführung. Gesamtabnahme: „nach bezahlten Monaten“, Übertragung auf eigene Verantwortung. Rechtlich prüfen lassen. 5. Datenschutzerklärung: Namen Dritter, Speicherdauer, Stripe Billing. -6. Stripe: Billing aktivieren, Kundenportal nur für Zahlungsart einrichten, - Webhook-Ereignisse ergänzen. +6. Stripe-Livemodus freigeben: Die Einrichtung (siehe „Stripe-Einrichtung“) + läuft erst im Testmodus. Den Livemodus stellt das Skript erst nach + ausdrücklicher Freigabe des Inhabers um. Neukunden-Frist für SEPA + bestätigen (Vorgabe 56 Tage). 7. Versandstaffel für Patenschaftspakete anlegen. 8. Logo als SVG oder PNG mit mindestens 300 dpi hochladen. 9. Material bevorraten: Urkundenpapier (200–250 g/m², matt, naturweiß),