Refunds & Notifications · Article 6.3
SEPA-/Außerbörsliche Erstattung: wenn Automatisierung nicht helfen kann
Wenn die ursprüngliche Anzahlung per SEPA-Banküberweisung (oder einem anderen Non-Stripe-Kanal) geleistet wurde, kann Clozo nicht automatisch erstatten – die Stripe-API hat nichts zu erstatten. Sie führen die SEPA-Überweisung manuell über Ihre Bank aus und klicken dann auf `Als erstattet markieren`, um die Gutschrift zu aktualisieren und den Kunden zu benachrichtigen.
SEPA-Banküberweisungen sind in der EU verbreitet, insbesondere in Deutschland, den Niederlanden und Österreich, wo Konto-zu-Konto-Zahlung im B2B-Bereich üblich ist. Clozo unterstützt SEPA für die ursprüngliche Anzahlung über den EPC-QR-Code auf der Anzahlungsrechnung – aber Stripe hat an dieser Transaktion keinen Anteil. Wenn eine Erstattung für eine SEPA-gezahlte Anzahlung benötigt wird, kann Stripe nichts tun. Der Ablauf fällt auf manuell zurück: Sie überweisen die Mittel und erfassen die Überweisung dann in Clozo, damit die Gutschrift die Realität widerspiegelt und der Kunde eine Bestätigung erhält.
Step by step
Post-Sign-Auslöser erhalten.
Nachdem der Kunde den Δ_REFUND-Nachtrag unterzeichnet hat, erscheint die Gutschrift mit Status
ausstehendund der Begründung „Manuelle Freiberufler-Auszahlung erforderlich."Die IBAN des Kunden nachschlagen.
Entweder aus Ihren Unterlagen (wenn Sie sie bei der ursprünglichen SEPA-Anzahlung gespeichert haben), aus der Anzahlungsrechnungs-E-Mail (der Kunde hat Ihnen die Mittel geschickt; seine IBAN steht im Kontoauszug) oder durch E-Mail an den Kunden, um die Ziel-IBAN zu bestätigen.
Die SEPA-Überweisung über Ihre Bank ausführen.
Die Gutschriftnummer als Verwendungszweck verwenden (z. B. „Erstattung CRN-2026-0007"). Die meisten EU-Banken verarbeiten SEPA am selben oder nächsten Werktag; grenzüberschreitendes SEPA Instant ist oft innerhalb von Sekunden.
Auf
Als erstattet markierenbei der Gutschrift klicken.Vom Erstattungs-Banner der Angebotsseite, der Gutschriftenseite (
/credit-notes) oder der Gutschriftzeile im Dokumente-Dropdown.Begründung angeben.
Mindestens 1 Zeichen; üblich: Bankreferenznummer („Sparkasse Ref. 9XK7-2026-0511") oder eine kurze Notiz. Diese wird dauerhaft auf der Gutschriftzeile gespeichert.
Bestätigen – Gutschrift wechselt zu
manuell.E-Mail wird an den Kunden versendet; Angebot schließt auf
Bezahlt, falls zutreffend.
Das Erstattungs-Banner zeigt „Manuelle Erstattung eingeleitet" mit Gutschriftdetails, Ihrer maskierten Bankverbindung und einer Schaltfläche „Erstattung abgeschlossen bestätigen". Nach dem Klicken und Angeben einer Begründung wechselt das Banner zu „Erstattung abgeschlossen per manueller Überweisung am [Datum]" mit dem Begründungstext direkt daneben.
Why this works this way
Die Übergabe erfolgt innerhalb von _trigger_stripe_refund (amendment_postsign.py:472):
``
if not payment:
credit_note.refund_status = REFUND_PENDING
credit_note.refund_failure_reason = (
"No Stripe PaymentIntent found — likely SEPA flow. "
"Manual freelancer payout required."
)
``
Damit wird die Gutschrift so eingerichtet, dass die manuelle Erstattungs-UI angezeigt wird. Das Angebots-Banner lautet „Manuelle Erstattung eingeleitet – Banküberweisung bestätigen" mit den Gutschriftdetails und einem CTA zum Markieren als abgeschlossen.
Die Freiberufler-Aktion (CreditNoteMarkRefundedView in amendment_views.py:686):
1. Prüft, dass die Gutschrift nicht bereits succeeded ist (idempotent – gibt 409 zurück, wenn sie es ist).
2. Verlangt ein reason-Feld im Body (1–500 Zeichen) – typischerweise eine Bankreferenznummer, Auszahlungsdatum oder kurze Notiz. Wird als manual_refund_reason für das Prüfprotokoll gespeichert.
3. Setzt refund_status=manual, refund_completed_at=now, speichert.
4. Ruft close_proposal_if_settled auf, um das Angebot auf Paid zu setzen, wenn keine weiteren Verpflichtungen bestehen.
5. Stellt send_credit_note_refund_completed_email in die Warteschlange – dieselbe E-Mail-Vorlage wie beim Stripe-Erstattung-abgeschlossen-Pfad; die Kundenerfahrung ist identisch.
Der Status manual (vs. succeeded) bewahrt die Prüfunterscheidung: succeeded bedeutet, Stripe-Webhook hat bestätigt; manual bedeutet, der Freiberufler bezeugt, dass die Erstattung außerbörslich ausgestellt wurde. Beide schließen die Gutschrift für Buchungszwecke; nur der Prüfpfad verfolgt den Unterschied.
Troubleshooting
Keep reading
Refunds & Notifications
When refunds happen: the Δ_REFUND amendment branches
A refund in Clozo is always tied to a Δ_REFUND amendment branch — partial (revised total smaller than deposit paid) or full (revised total at zero). The amendment is the legal trigger; the refund is the cash consequence.
Refunds & Notifications
Mark refunded manually — for SEPA and out-of-band proof
When a refund is issued outside Stripe — SEPA bank transfer, cash, PayPal, mailed cheque — `Mark refunded` is how you record it in Clozo. Reason field is mandatory (typically a bank reference). The credit note moves to `manual` status and the client receives a confirmation email.
Refunds & Notifications
Stripe automatic refund (Direct Charges via Connect)
When the original deposit was paid via Stripe, the refund is automatic. Clozo issues a Refund on the freelancer's connected account, watches for the `refund.updated` webhook, and flips the credit note to `succeeded` once Stripe confirms — typically within 3–5 business days for the cash to reach the client.
Refunds & Notifications
Failed refunds & recovery — common Stripe failure reasons
A `failed` credit note has a `refund_failure_reason` string from Stripe. Most reasons fall into a small set; here's what each means and the recommended recovery.