Petri Heil Online — Vereins-Operations-Guide

Schritt-für-Schritt: vom Null-Zustand bis zum vollen Online-Bezahl-Betrieb.

Stand: 2026-05-06 (v1.2) Zielgruppe: Vorstand, Kassier, Vereins-Admin Ergänzendes Dokument: TENANT_HANDBOOK.md (Referenz)

Dieses Dokument richtet sich an den Vereins-Vorstand als Anwender. Technische Plattform-Operationen (Server-Konfiguration, Webhook-Setup, Live-Switch) führt Petri Heil Online zentral aus und sind hier nicht beschrieben.


Was du am Ende hast

Mitglieder bezahlen Jahresbeiträge selbst online. Der Erlaubnisschein wird automatisch aktiviert sobald das Konto ausgeglichen ist. Tageskarten und Gastkarten haben einen separaten, aber ebenfalls Stripe-basierten Workflow.

Vorstand            Mitglied                Stripe                 Verein
───────             ────────                ──────                 ──────
generate-permits ──▶ E-Mail "bitte zahlen"
                     /portal/account/  ──▶ Checkout
                                         ──▶ Webhook ────────────▶ Charge=paid
                                                                   Permit aktiv
                                                                   Bestätigungs-Mail
                                                                   Servicegebühr

Vorbereitung: was du vorab brauchst

  • [ ] Vereins-Instanz ist eingerichtet (<verein>.petri-heil.online)
  • [ ] Vereins-Admin-Login funktioniert
  • [ ] Vereinsdaten vollständig (Name, Adresse, IBAN, USt./Steuernummer, Kontakt-E-Mail)
  • [ ] Mitgliederliste mit Bankdaten in MemberBankInfo gepflegt (für Übergang von SEPA)
  • [ ] MembershipBasePrice-Tabelle gepflegt (Preise pro Status)
  • [ ] Mindestens ein Vorstandsbeschluss, dass ihr auf Online-Zahlung umstellt

Phase 0 — Stripe Connect verbinden (einmalig)

0.1 Voraussetzungen sammeln

Vor dem Stripe-Onboarding bereitlegen: - Vereinsregister-Auszug (nicht älter als 3 Monate) - Vereinssatzung (PDF) - Steuernummer + Freistellungsbescheid (falls gemeinnützig) - IBAN des Vereinskontos - Personalausweis-Kopie der/des Vorstandsvorsitzenden + Kassier - Wohnadresse + Geburtsdatum der vertretungsberechtigten Personen - Geschätztes Jahresvolumen (z.B. 50.000 €)

0.2 Stripe Connect Onboarding

1. Vereins-Admin  Konfiguration  Tab "Stripe Connect (Online-Zahlungen)"
2. Klick "🚀 Stripe Connect einrichten"
3. Weiterleitung zu Stripe-Onboarding (https://connect.stripe.com)
4. Konto-Typ: "Unternehmen / Verein"
5. Vereinsdaten ausfüllen
6. IBAN für Auszahlungen
7. Personalausweis + Selfie verifizieren
8. Stripe redirect zurück zu Petri Heil
9. Stripe-Verifikation läuft (13 Werktage)

0.3 Status prüfen

Konfiguration → Tab Stripe Connect: - ✅ stripe_account_id: gefüllt (acct_xxx) - ✅ stripe_account_status: Aktiv - ✅ stripe_charges_enabled: True - ✅ stripe_onboarding_completed: True

Wenn Status „Ausstehend" oder „Eingeschränkt": Stripe wartet auf Dokumente. Mail-Postfach prüfen.

0.4 Zahlungsmethoden im Stripe-Dashboard aktivieren

Vorstand öffnet sein Stripe-Dashboard: https://dashboard.stripe.com/settings/payment_methods

Aktivieren (alle Schalter auf ON): - [x] Karten (Visa, Mastercard, Amex) - [x] Link (Stripe One-Click) - [x] SEPA Direct Debit - [x] Klarna (separater Vertrag — Stripe leitet weiter) - [x] EPS (für AT-Gäste)

⚠️ Ohne diese Aktivierung filtert Stripe die Methoden im Checkout heraus. Mitglied sieht dann nur „Karte".


Phase 1 — Modus festlegen (SEPA ODER Stripe)

1.1 Wo umschalten

Vereins-Admin → Konfiguration → Tab "Bezahl-Modus Mitgliedsbeiträge"

Dropdown: - SEPA-Lastschrift (Verein zieht ein) — alter Workflow, Default - Online-Zahlung über Stripe (Mitglied bezahlt selbst) — neuer Push-Modus

⚠️ Tageskarten und Gastkarten sind von dieser Einstellung nicht betroffen — sie haben einen eigenen Workflow.

1.2 Wann auf Stripe schalten?

Vorteil Stripe
Keine SEPA-Rückläufer
Sofortige Liquidität
Mitglied trägt Verantwortung
Erlaubnisschein-Sperre erzwingt Zahlung
Nachteil Stripe
Mitglied muss aktiv werden (manche werden vergessen) ⚠️
Servicegebühr 0,3 € + 0,9 % Petri Heil + Stripe-Gebühr ⚠️
Mehr Erinnerungs-E-Mails nötig ⚠️

1.3 Wechsel-Bedingungen

  • SEPA → Stripe: nur möglich, wenn Stripe Connect vollständig eingerichtet ist (stripe_account_id gesetzt, stripe_account_status='active', stripe_onboarding_completed=True, stripe_charges_enabled=True). Sonst Validierungs-Fehler beim Speichern der Konfiguration.
  • Stripe → SEPA: jederzeit möglich. Bestehende Mitgliederkonten + Zahlungshistorie bleiben erhalten.

Phase 2 — Datenbasis vorbereiten

2.1 Mitgliedsstatus-Preise pflegen

Admin → Finanzen → Basispreise

Pro MembershipStatus (Erwachsen, Jugend, Senior, Familie …): - active_base_price: 80 €, 30 €, 60 €, 120 € … - passive_base_price: 40 €, 15 €, 30 €, 60 €

Wenn ein Status keine Zeile hat → kein Beitrag.

2.2 Adjustments anlegen (Rabatte / Aufschläge)

Admin → Finanzen → Kosten / Rabatte

Beispiele: - Rabatt „Doppel-Mitglied": -20 € - Aufschlag „Putzdienst-Pauschale": +10 €

2.3 Spez. Gewässerkosten

Admin → Finanzen → spez. Gewässerkosten

Pro Gewässer optional Zusatz-Pauschale (z.B. 90 € für Hammerweiher).

2.4 Mitglieder-Bankdaten + Adjustment-Zuweisung

Admin → Finanzen → Bankdaten

Pro Mitglied: - IBAN, BIC, Bankname, Kontoinhaber - Adjustments anhaken (z.B. „Doppel-Mitglied") - include_in_calculation

update_total_cost() läuft beim Speichern automatisch. Im Stripe-Modus erzeugt das gleichzeitig den MemberCharge für die Saison.


Phase 3 — Test-Lauf (Test-Modus, nicht Live!)

3.1 Modus auf Stripe schalten

Vereins-Admin → Konfiguration → Tab Bezahl-Modus → Online-Zahlung über Stripe → Speichern

3.2 Bestehende Mitglieder-Bankdaten resyncen

Beim Speichern der Bankdaten werden automatisch Mitglieder-Posten erzeugt. Für alle Mitglieder gleichzeitig: Bulk-Aktion benutzen.

Admin → Finanzen → Bankdaten → alle markieren → Aktion „Beiträge neu berechnen"

Verifikation: - Admin → Finanzen → Mitglieder-Posten — Liste sollte sich füllen mit „Jahresbeitrag 2027"-Einträgen.

3.3 Permits generieren

Admin → Mitglieder → Mitglieder-Erlaubnisscheine → Aktion „Erlaubnisscheine für aktuelle Saison erstellen"

Im Stripe-Modus: - Permits werden mit is_active=False (gesperrt) angelegt sofern offene Posten vorhanden - PDF wird trotzdem erzeugt - revocation_reason: „Online-Zahlung ausstehend — wird nach Begleichen aller Posten freigeschaltet."

3.4 Test als Mitglied

1. Mitglied-Test-Account einloggen: <verein>.petri-heil.online/portal/login/
2. Sidebar  "Mein Konto"
3. Saldo + Posten sichtbar
4. Klick "Alle bezahlen"
5. Stripe Checkout öffnet sich
6. Test-Karte: 4242 4242 4242 4242 / CVC 123 / Datum 12/30
7. "Zahlen"  Erfolgreich
8. Redirect zu Success-Seite
9. Bestätigungs-E-Mail kommt im Mail-Postfach des Test-Mitglieds an
10. Saldo = 0,00 , Permit = "Aktiv"

3.5 Edge-Cases testen

Test Erwartung
Karte abgelehnt (4000 0000 0000 9995) Status error, Charges bleiben offen
Browser-Tab schließen vor Bezahlen „Jetzt bezahlen"-Button bleibt im Konto
Manueller Zusatz-Posten anlegen Permit wird sofort gesperrt
Posten als „Erlassen" markieren Permit aktiviert wenn keine anderen Posten offen
SEPA-XML im Stripe-Modus aufrufen Fehler-Hinweis erscheint

Phase 4 — Mitglieder kommunizieren

4.1 Vorab-Anschreiben (8 Wochen vor Live)

Vorlage (anpassen):

Liebe Mitglieder,

ab Saison 2027 stellen wir den Jahresbeitrag von SEPA-Lastschrift auf Online-Zahlung um.

Was ändert sich für dich? - Du loggst dich im Mitglieder-Portal ein: <verein>.petri-heil.online/portal/login/ - Unter „Mein Konto" siehst du deinen Beitrag - Du bezahlst online per Karte, SEPA, Klarna oder Sofort - Erst nach Zahlung wird dein Erlaubnisschein freigeschaltet

Frist: bitte bis 31.01.2027 bezahlen.

Bei Fragen:

4.2 Erinnerungen automatisch

Petri Heil schickt automatische Erinnerungs-E-Mails: - 14 Tage vor Fälligkeit - 7 Tage vor Fälligkeit - 1 Tag vor Fälligkeit - 1 / 7 / 30 Tage nach Fälligkeit (Eskalation)

Verein muss nichts tun. Voraussetzung: Mitglieder haben gültige E-Mail-Adresse im User-Profil.


Phase 5 — Live-Schaltung

5.1 Test-Modus → Live

Die Umstellung von Test- auf Live-Betrieb wird zentral durch Petri Heil Online vorgenommen. Sobald aktiv, sieht der Vorstand in der Stripe-Connect-Sektion den Status „Live-Account aktiv". Bitte rechtzeitig per Mail an support@petri-heil.online Bescheid geben, wann Live geschaltet werden soll.

5.2 Erst-Generierung der Saison-Permits

Admin → Mitglieder-Erlaubnisscheine → Erlaubnisscheine für aktuelle Saison erstellen
  → Saison: <kommende Saison>
  → Erstellen

System legt automatisch: - Permit-Datensatz pro Mitglied (gesperrt da Posten offen) - PDF-Generierung - MemberDocument-Eintrag (Mitglied sieht im Portal)

5.3 Initiales Mitglieder-E-Mail

Optional: einmalige Push-Mail an alle Mitglieder „dein Jahresbeitrag steht zur Zahlung bereit".


Phase 6 — Laufender Betrieb

Was Petri Heil automatisch macht

Vorgang Trigger
Reminder-E-Mails (14/7/1d) täglich um 08:30 Uhr
Eskalations-E-Mails (1/7/30d nach Frist) täglich um 08:30 Uhr
Charge → bezahlt → Permit aktiv sofort nach Stripe-Webhook
Bestätigungs-E-Mail an Mitglied sofort nach Bezahlung
Servicegebühr-Abzug automatisch bei jeder Zahlung
Application Fee Audit-Log automatisch

Was der Vorstand tun muss

Vorgang Wann
Monatliches Audit Mitglieder-Posten (Status, Saldo) monatlich
Manuelle Posten anlegen (Arbeitsstunden-Strafe etc.) nach Bedarf
Bei „nichts erscheint" → MemberBankInfo neu berechnen nach Tarif-Änderung
Eskalierte Mitglieder kontaktieren nach 30-Tage-Eskalations-Mail
Stripe Dashboard → Auszahlungen prüfen wöchentlich/monatlich

Manuelle Posten anlegen (Beispiel: fehlende Arbeitsstunden)

Admin → Finanzen → Mitglieder-Posten → Hinzufügen
  Mitglied: Müller, Hans
  Saison-Jahr: 2026
  Posten-Typ: Fehlende Arbeitsstunden
  Bezeichnung: Fehlende Arbeitsstunden 2026 (3h)
  Beschreibung: Soll: 10h, geleistet: 7h. Pönale 25 €/h.
  Betrag: 75,00 € (im Formular technisch in Cent: 7500)
  Status: Offen
  Speichern

→ Mitglieds-Permit wird automatisch gesperrt (sofern aktiv war). Mitglied sieht den Posten + bezahlt online → Permit aktiv.

Bezahl-Modus wechseln

Vereins-Admin → Konfiguration → Tab Bezahl-Modus → Speichern

Wechsel Effekt
SEPA → Stripe Bestand bleibt. Bei nächstem update_total_cost: Charges entstehen.
Stripe → SEPA SEPA-Lastschrift wieder möglich. Bestehende Charges bleiben offen.

Troubleshooting

„Mitglied sieht keine Posten im Portal"

Ursachen + Lösung: - Verein ist im SEPA-Modus → wechseln auf Stripe - Mitglied hat keine MemberBankInfo → Bankdaten anlegen + speichern - include_in_calculation=False → auf True setzen

„Permit ist trotz Bezahlung noch gesperrt"

Ursachen + Lösung: - Andere Posten noch offen → Admin → Finanzen → Mitglieder-Posten filtern auf Mitglied + Status „Offen" - Manuelle Posten vom Vorstand vergessen zu erlassen → erlassen - Wenn alle Posten als „bezahlt" markiert sind und Permit trotzdem gesperrt → Petri Heil Support kontaktieren (support@petri-heil.online); kann an einer fehlgeschlagenen Webhook-Zustellung liegen, wird zentral geprüft

„SEPA-XML-Generator zeigt Fehler"

Verein ist im Stripe-Modus. Wechsel zurück auf SEPA-Modus → SEPA-Generierung wieder möglich.

„Mitglied beklagt sich, hat aber keine E-Mail-Adresse"

Admin → Mitglieder → Mitgliedsprofil — E-Mail nachpflegen. Reminder-Versand skippt automatisch Mitglieder ohne E-Mail.

„Mitglied bekommt keine Erinnerungs-Mails"

  • Verein ist im SEPA-Modus → keine Reminder (sinnvoll: Verein zieht ja selbst ein)
  • Mitglied hat keine offene Forderung → keine Reminder
  • Mitglied hat keine E-Mail
  • Gestern wurde schon eine Erinnerung der gleichen Stufe gesendet → Doppel-Schutz

„Permit für ein einzelnes Mitglied trotz Saldo aktivieren?"

Vorstand setzt im Mitglieder-Posten-Admin alle offenen Charges auf Erlassen → Permit aktiviert sich automatisch. Audit bleibt erhalten.

„Wie sehe ich was Petri Heil an Servicegebühren einbehält?"

Im Stripe Dashboard des Vereins unter „Plattform-Gebühren" / „Application Fees" — pro Zahlung Cent-genau ausgewiesen. Zusätzlich erhält der Verein monatlich eine Sammelrechnung von Petri Heil Online über die abgezogenen Servicegebühren.


Checkliste vor Go-Live

  • [ ] Stripe Connect Konto aktiv (charges_enabled=True)
  • [ ] Zahlungsmethoden im Stripe Dashboard aktiviert (Karte, SEPA, Link, Klarna, EPS)
  • [ ] Petri Heil Servicegebühr in den AGB erwähnt (Standard-Klausel im Vorstandsbeschluss)
  • [ ] MembershipBasePrice für alle aktiven Status gepflegt
  • [ ] WaterAdditionalCost für besondere Gewässer
  • [ ] AdjustmentDefinition (falls Rabatte/Aufschläge)
  • [ ] MemberBankInfo für alle aktiven Mitglieder vollständig
  • [ ] Test-Bestellung erfolgreich durchgelaufen (Bezahl + Permit-Aktivierung)
  • [ ] Mitglieder vorab informiert (mind. 4 Wochen)
  • [ ] Bezahl-Modus auf Stripe gestellt
  • [ ] Permits für aktuelle Saison generiert
  • [ ] Erste Wochen aktiv überwachen, Mitglieder mit Problemen kontaktieren

Support

  • Plattform-Support Petri Heil Online: support@petri-heil.online / werktags 9–17 Uhr
  • Stripe-spezifische Probleme: Stripe Dashboard Chat (24/7) oder support.stripe.com
  • Rechts-/Steuerfragen: eigener Steuerberater oder Verein-Rechtsschutz

Anhang: Schnell-Referenz Admin-URLs

Funktion URL
Vereins-Konfiguration /admin/tenant_config/configuration/1/change/
Mitglieder-Posten /admin/accounting/membercharge/
Mitglieder-Bankdaten /admin/accounting/memberbankinfo/
Basispreise /admin/accounting/membershipbaseprice/
Erlaubnisscheine /admin/members/memberfishingpermit/
Erlaubnisscheine generieren /admin/members/memberfishingpermit/generate-season-permits/
Stripe-Zahlungen /admin/daycards/stripepayment/
Rechnungen /admin/billing/invoice/
Mitglieder-Portal URL
Mitglied-Login /portal/login/
Konto-Übersicht /portal/account/
Tageskarten /portal/daycards/cards/

© Petri Heil Online — Version 1.2 — 2026-05-07

Änderungshistorie: - v1.1 — Code-Verifikation: Admin-Button-Label korrigiert („🚀 Stripe Connect einrichten"). SEPA→Stripe-Wechsel an Stripe-Connect-Vollständigkeit gebunden. Bulk-Action „Beiträge neu berechnen" (nicht „Beträge"). revocation_reason exakt zitiert. - v1.2 — Zielgruppen-Säuberung: technische Operator-Inhalte entfernt (STRIPE_TEST_MODE-Env, Stripe-CLI-Befehle, MailHog-Hinweis, Servicegebühr-Log-Admin-URL, zentrale Webhook-Diagnose). Begriff „Tenant" durch „Verein" / „Vereins-Admin" / „Vorstand" ersetzt. Live-Schaltung als zentrale Petri-Heil-Aktion klargestellt. Operator-Inhalte ins separate PLATFORM_OPERATOR_RUNBOOK.md ausgelagert.