From 9d618b107c6bbcd62e0f9fcc6f7ac49fea6477e2 Mon Sep 17 00:00:00 2001 From: Till-JS <101404291+Till-JS@users.noreply.github.com> Date: Mon, 16 Feb 2026 12:42:02 +0100 Subject: [PATCH] =?UTF-8?q?=F0=9F=93=9D=20docs:=20add=20SEPA=20activation?= =?UTF-8?q?=20checklist=20with=20TODOs=20and=20test=20cases?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/SEPA_ACTIVATION_CHECKLIST.md | 259 ++++++++++++++++++++++++++++++ 1 file changed, 259 insertions(+) create mode 100644 docs/SEPA_ACTIVATION_CHECKLIST.md diff --git a/docs/SEPA_ACTIVATION_CHECKLIST.md b/docs/SEPA_ACTIVATION_CHECKLIST.md new file mode 100644 index 000000000..ec3a07160 --- /dev/null +++ b/docs/SEPA_ACTIVATION_CHECKLIST.md @@ -0,0 +1,259 @@ +# SEPA-Lastschrift Aktivierung - Checkliste + +> **Status:** Code deployed, Stripe Dashboard Konfiguration ausstehend +> **Datum:** 2026-02-16 +> **Commit:** `b5d7524c` - feat(stripe): add SEPA Direct Debit payment option + +--- + +## Übersicht + +SEPA Direct Debit wurde im Code aktiviert. Diese Checkliste dokumentiert die verbleibenden manuellen Schritte und Tests. + +**Vorteile:** +- Gebühren: 0.8% statt 1.5% + €0.25 (Ersparnis ~€0.32 pro €10) +- Beliebt bei DACH-Kunden +- Keine Kreditkarte erforderlich + +**Besonderheit:** +- SEPA-Zahlungen sind nicht sofort bestätigt +- Bankverarbeitung dauert 3-14 Werktage +- Credits werden erst nach `payment_intent.succeeded` gutgeschrieben + +--- + +## TODO: Stripe Dashboard Konfiguration + +### [ ] 1. SEPA-Lastschrift aktivieren + +**URL:** https://dashboard.stripe.com/settings/payment_methods + +1. Einloggen in Stripe Dashboard +2. Settings → Payment methods +3. "SEPA Direct Debit" finden +4. "Turn on" klicken +5. SEPA-Bedingungen lesen und akzeptieren +6. Speichern + +**Erwartetes Ergebnis:** SEPA Direct Debit erscheint als "Enabled" + +--- + +### [ ] 2. Webhook-Event hinzufügen + +**URL:** https://dashboard.stripe.com/webhooks + +1. Webhook-Endpoint auswählen (URL endet mit `/webhooks/stripe`) +2. "Update details" klicken +3. Tab "Events" öffnen +4. Event hinzufügen: `payment_intent.processing` +5. "Update endpoint" klicken + +**Bereits konfigurierte Events (sollten vorhanden sein):** +- `checkout.session.completed` +- `payment_intent.succeeded` +- `payment_intent.payment_failed` +- `customer.subscription.created` +- `customer.subscription.updated` +- `customer.subscription.deleted` +- `invoice.created` +- `invoice.updated` +- `invoice.paid` +- `invoice.payment_failed` + +**Neu hinzuzufügen:** +- `payment_intent.processing` + +--- + +### [ ] 3. Server Deployment + +```bash +ssh mana-server +cd ~/projects/manacore-monorepo +git pull +./scripts/mac-mini/deploy.sh +``` + +**Verifizierung:** +```bash +# Logs prüfen +docker logs mana-core-auth --tail 50 + +# Health Check +curl https://auth.mana.how/health +``` + +--- + +## TODO: Tests + +### [ ] 4. Test: Credit-Kauf mit SEPA (Testmodus) + +**Voraussetzung:** Stripe ist im Testmodus oder Test-API-Keys verwenden + +1. Öffne: https://mana.how/credits (oder lokale Dev-Umgebung) +2. Einloggen +3. Credit-Paket auswählen +4. "Kaufen" klicken +5. Im Checkout: **SEPA-Lastschrift** auswählen +6. Test-IBAN eingeben: `DE89370400440532013000` +7. Name eingeben +8. "Bezahlen" klicken + +**Erwartetes Ergebnis:** +- Checkout erfolgreich abgeschlossen +- Weiterleitung zur Success-Seite +- Purchase-Status: `pending` (nicht `completed`!) +- Im Stripe Dashboard: PaymentIntent im Status `processing` + +**Test-IBANs (Stripe Testmodus):** +| IBAN | Verhalten | +|------|-----------| +| `DE89370400440532013000` | Erfolgreiche Zahlung | +| `DE62370400440532013001` | Zahlung fehlgeschlagen | + +--- + +### [ ] 5. Test: Subscription mit SEPA + +1. Öffne: https://mana.how/subscription +2. Einloggen +3. Plan auswählen (Plus, Pro, oder Ultra) +4. "Abonnieren" klicken +5. Im Checkout: **SEPA-Lastschrift** auswählen +6. Test-IBAN eingeben +7. "Abonnieren" klicken + +**Erwartetes Ergebnis:** +- Subscription erstellt +- Status: `active` (Stripe erlaubt sofortigen Zugang bei SEPA-Subscriptions) +- Erste Rechnung im Status `open` oder `paid` + +--- + +### [ ] 6. Test: Webhook-Verarbeitung + +**Im Stripe Dashboard (Developers → Webhooks → Event-Log):** + +1. Nach dem Testkauf: Event `checkout.session.completed` prüfen +2. Event `payment_intent.processing` sollte erscheinen +3. Status: "Succeeded" (200 Response) + +**In den Server-Logs:** +```bash +ssh mana-server +docker logs mana-core-auth --tail 100 | grep -i "sepa\|processing\|webhook" +``` + +**Erwartete Log-Einträge:** +``` +Webhook received { type: 'checkout.session.completed', ... } +Webhook received { type: 'payment_intent.processing', ... } +Payment processing (SEPA in progress) { paymentIntentId: 'pi_...' } +``` + +--- + +### [ ] 7. Test: SEPA-Zahlung simulieren (Stripe CLI) + +**Optional - für detailliertere Tests:** + +```bash +# Stripe CLI installieren (falls nicht vorhanden) +brew install stripe/stripe-cli/stripe + +# Einloggen +stripe login + +# Webhook lokal testen +stripe listen --forward-to localhost:3001/webhooks/stripe + +# In neuem Terminal: SEPA-Zahlung simulieren +stripe trigger payment_intent.processing +stripe trigger payment_intent.succeeded +``` + +--- + +### [ ] 8. Test: Payment Intent Completion (nach Bankverarbeitung) + +**Im Stripe Dashboard:** + +1. Developers → Events +2. PaymentIntent finden (vom Testkauf) +3. "Trigger webhook" → `payment_intent.succeeded` + +**Oder via Stripe CLI:** +```bash +stripe payment_intents confirm pi_XXXXX --payment-method pm_sepa_debit +``` + +**Erwartetes Ergebnis:** +- Credits werden gutgeschrieben +- Purchase-Status wechselt zu `completed` +- Transaction-Eintrag erstellt + +--- + +## Bekannte Einschränkungen + +### SEPA-Timing +- Zahlungen sind nicht sofort bestätigt +- Kunden sehen Credits erst nach 3-14 Tagen +- UI sollte darauf hinweisen (optional: TODO für bessere UX) + +### Rückbuchungen (R-Transactions) +- Kunden können SEPA-Lastschriften 8 Wochen widersprechen +- Bei Rückbuchung: `charge.dispute.created` Event +- Aktuell nicht behandelt (Credits werden nicht abgezogen) + +### Währung +- SEPA funktioniert nur mit EUR +- Aktuell kein Problem (alle Preise in EUR) + +--- + +## Dateien (Referenz) + +| Datei | Änderung | +|-------|----------| +| `services/mana-core-auth/src/stripe/stripe.service.ts` | `payment_method_types: ['card', 'sepa_debit']` | +| `services/mana-core-auth/src/subscriptions/subscriptions.service.ts` | `payment_method_types: ['card', 'sepa_debit']` | +| `services/mana-core-auth/src/stripe/stripe-webhook.controller.ts` | `payment_intent.processing` Handler | +| `apps/manacore/apps/landing/src/content/blueprints/003-*.md` | Dokumentation | + +--- + +## Rollback (falls nötig) + +Falls Probleme auftreten: + +1. **SEPA im Dashboard deaktivieren:** + - Stripe Dashboard → Settings → Payment methods + - SEPA Direct Debit → "Turn off" + +2. **Code-Rollback (nur falls kritisch):** + ```bash + git revert b5d7524c + git push origin main + # Dann neu deployen + ``` + +--- + +## Abschluss + +Nach Abschluss aller Tests: + +- [ ] Diese Datei als erledigt markieren (Checkboxen abhaken) +- [ ] Im Team kommunizieren +- [ ] Monitoring für SEPA-Fehler einrichten (optional) +- [ ] Kundenkommunikation: "Jetzt auch per Lastschrift zahlen" (optional) + +--- + +## Kontakt + +Bei Fragen zur Implementation: Till Schneider +Blueprint-Dokumentation: `/apps/manacore/apps/landing/src/content/blueprints/003-payment-systems-stripe-vs-direct-debit.md`