docs: Bienenpatenschaft mit SEPA-Schutz, Stripe-Einrichtung und Abo-Stufen je Monat
Docker Image bauen und veroeffentlichen / lint (push) Canceled after 0s
Docker Image bauen und veroeffentlichen / typecheck (push) Canceled after 0s
Docker Image bauen und veroeffentlichen / test (push) Canceled after 0s
Docker Image bauen und veroeffentlichen / build-and-push (push) Canceled after 0s
Docker Image bauen und veroeffentlichen / lint (push) Canceled after 0s
Docker Image bauen und veroeffentlichen / typecheck (push) Canceled after 0s
Docker Image bauen und veroeffentlichen / test (push) Canceled after 0s
Docker Image bauen und veroeffentlichen / build-and-push (push) Canceled after 0s
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) <[email protected]>
This commit is contained in:
1 parent
4bcf90a8d9
commit
86f2145115
1 file changed
+70
-20
@@ -318,11 +318,10 @@ Das betrifft nur die digitale Darstellung, nicht den Druck.
|
|||||||
|
|
||||||
### 3. Abo-Stufen und VIP (Teilprojekt 5)
|
### 3. Abo-Stufen und VIP (Teilprojekt 5)
|
||||||
|
|
||||||
- Grundlage: ununterbrochen bezahlte Abo-Dauer.
|
- Grundlage: ununterbrochen bezahlte Abo-Monate.
|
||||||
- Vorgabe des Inhabers: Stufen bis 24, danach eine Stufe ohne Zahl, „VIP“,
|
- Vorgabe: Stufe 1 bis 24, je bezahltem Monat eine Stufe, danach eine Stufe
|
||||||
als Zeichen besonders hoher Wertschätzung. Ob die 24 Jahre oder Monate
|
ohne Zahl, „VIP“, als Zeichen besonders hoher Wertschätzung. Die Schwellen
|
||||||
meint, ist offen (siehe „Offene Fragen“). Die Schwellen sind im Admin
|
sind im Admin pflegbar und lassen sich ohne Codeänderung anpassen.
|
||||||
pflegbar, damit sich das ohne Codeänderung anpassen lässt.
|
|
||||||
- VIP bekommt eine eigene Medaille und eine VIP-Kennzeichnung im Konto. Weitere
|
- 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
|
Vorteile (Rabatt, Versand) gehören nicht zum Umfang und lassen sich später
|
||||||
über die bestehenden Rabattcodes ergänzen.
|
über die bestehenden Rabattcodes ergänzen.
|
||||||
@@ -453,10 +452,8 @@ hat:
|
|||||||
- Nach der Ernte: Der Inhaber legt im Admin die Erntefenster fest. Geliefert
|
- Nach der Ernte: Der Inhaber legt im Admin die Erntefenster fest. Geliefert
|
||||||
wird im nächsten Fenster, sobald seit der letzten Lieferung mindestens sechs
|
wird im nächsten Fenster, sobald seit der letzten Lieferung mindestens sechs
|
||||||
Monate bezahlt sind.
|
Monate bezahlt sind.
|
||||||
- Bezahlt heißt: Stripe meldet die Rechnung als bezahlt. Bei SEPA-Lastschrift
|
- Bezahlt heißt: Stripe meldet die Rechnung als bezahlt, bei SEPA zusätzlich
|
||||||
ist eine Rückbuchung bis acht Wochen möglich. Empfehlung: Abos zuerst nur mit
|
die Regeln unter „SEPA-Lastschrift und Rückbuchungen“.
|
||||||
Karte und Wallets (Apple Pay, Google Pay) anbieten. SEPA ist eine
|
|
||||||
Entscheidung des Inhabers.
|
|
||||||
- Fehlgeschlagene Zahlung: Stripe versucht es automatisch erneut. Solange das
|
- Fehlgeschlagene Zahlung: Stripe versucht es automatisch erneut. Solange das
|
||||||
Abo im Verzug ist, entsteht keine Lieferung. Scheitern alle Versuche, endet
|
Abo im Verzug ist, entsteht keine Lieferung. Scheitern alle Versuche, endet
|
||||||
das Abo wie bei einer Kündigung.
|
das Abo wie bei einer Kündigung.
|
||||||
@@ -466,6 +463,59 @@ hat:
|
|||||||
- Widerruf innerhalb von 14 Tagen: Bis dahin ist kein Honig verschickt, es
|
- Widerruf innerhalb von 14 Tagen: Bis dahin ist kein Honig verschickt, es
|
||||||
entsteht kein Warenverlust.
|
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
|
### Lieferaufträge
|
||||||
|
|
||||||
Ein täglicher Lauf im CronJob `wabenhain-certificates` prüft fällige
|
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`),
|
(eindeutig), Status (`AKTIV`, `IM_VERZUG`, `GEKUENDIGT`, `BEENDET`),
|
||||||
Beginn, Kündigung wirksam zum, Ende
|
Beginn, Kündigung wirksam zum, Ende
|
||||||
- `SubscriptionPayment`: Abo, `stripeInvoiceId` (eindeutig), bezahlt am,
|
- `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
|
- `SubscriptionDelivery`: Abo, fällig am, Gläser, Status, erzeugte Bestellung
|
||||||
- `HarvestWindow`: Zeitraum, geplante Abo-Gläser je Angebot
|
- `HarvestWindow`: Zeitraum, geplante Abo-Gläser je Angebot
|
||||||
- `SponsorshipTransfer`: Patenschaft, Token-Hash, gültig bis, erstellt von,
|
- `SponsorshipTransfer`: Patenschaft, Token-Hash, gültig bis, erstellt von,
|
||||||
eingelöst von, eingelöst am, widerrufen am
|
eingelöst von, eingelöst am, widerrufen am
|
||||||
- `LoyaltyLevel`: Art (`STAMMKUNDE`, `ABO`), Schwelle, Name, Medaillendesign;
|
- `LoyaltyLevel`: Art (`STAMMKUNDE`, `ABO`), Schwelle, Name, Medaillendesign;
|
||||||
VIP als Stufe ohne Zahl
|
VIP als Stufe ohne Zahl
|
||||||
- `Customer.stripeCustomerId`
|
- `Customer.stripeCustomerId`, `Customer.sepaBlockedAt` (gesetzt nach einer
|
||||||
|
Rückbuchung)
|
||||||
|
|
||||||
Statuswerte der Patenschaft: `AUSSTEHEND`, `FEHLER`, `BEREIT`, `GEDRUCKT`.
|
Statuswerte der Patenschaft: `AUSSTEHEND`, `FEHLER`, `BEREIT`, `GEDRUCKT`.
|
||||||
Aktiv, abgelaufen und gekündigt werden aus Daten berechnet.
|
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;
|
- Bestand: Einzelverkauf kann reservierte Abo-Gläser nicht kaufen;
|
||||||
Kontingent voll stoppt neue Abos
|
Kontingent voll stoppt neue Abos
|
||||||
- doppelte Stripe-Abo-Ereignisse: eine Rechnung, eine Zahlung
|
- 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
|
- Treuestufen: Erstattung senkt die Stammkunden-Stufe
|
||||||
- E2E (Playwright): Einmalkauf mit Stripe-Testkarte bis zur 3D-Ansicht im
|
- E2E (Playwright): Einmalkauf mit Stripe-Testkarte bis zur 3D-Ansicht im
|
||||||
Konto; Abo-Abschluss mit Stripe-Testuhr (Test Clock) über drei Monate
|
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
|
8. Druck- und Korrekturablauf im Admin
|
||||||
9. offene geschäftliche Konfiguration (Liste unten)
|
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
|
## Geschäftliche Konfiguration vor Veröffentlichung
|
||||||
|
|
||||||
1. Preise kaufmännisch prüfen: Einmalpakete und Abo-Monatspreise mit Honig,
|
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
|
„nach bezahlten Monaten“, Übertragung auf eigene Verantwortung. Rechtlich
|
||||||
prüfen lassen.
|
prüfen lassen.
|
||||||
5. Datenschutzerklärung: Namen Dritter, Speicherdauer, Stripe Billing.
|
5. Datenschutzerklärung: Namen Dritter, Speicherdauer, Stripe Billing.
|
||||||
6. Stripe: Billing aktivieren, Kundenportal nur für Zahlungsart einrichten,
|
6. Stripe-Livemodus freigeben: Die Einrichtung (siehe „Stripe-Einrichtung“)
|
||||||
Webhook-Ereignisse ergänzen.
|
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.
|
7. Versandstaffel für Patenschaftspakete anlegen.
|
||||||
8. Logo als SVG oder PNG mit mindestens 300 dpi hochladen.
|
8. Logo als SVG oder PNG mit mindestens 300 dpi hochladen.
|
||||||
9. Material bevorraten: Urkundenpapier (200–250 g/m², matt, naturweiß),
|
9. Material bevorraten: Urkundenpapier (200–250 g/m², matt, naturweiß),
|
||||||
|
|||||||
Reference in new issue
Block a user