Refunds & Notifications · Article 6.3
Zwrot SEPA / poza pasmem: gdy automatyzacja nie może pomóc
Gdy oryginalny depozyt był opłacony przelewem bankowym SEPA (lub jakimkolwiek kanałem innym niż Stripe), Clozo nie może automatycznie dokonać zwrotu — API Stripe nie ma niczego do zwrotu. Wystawiasz przelew SEPA ręcznie ze swojego banku, a następnie klikasz `Oznacz jako zwrócono`, żeby zaktualizować notę kredytową i powiadomić klienta.
Przelewy bankowe SEPA są powszechne w UE, szczególnie w Niemczech, Holandii i Austrii, gdzie płatności konto-do-konta są rutynowe w B2B. Clozo obsługuje SEPA na oryginalnym depozycie przez kod QR EPC na fakturze zaliczkowej — ale Stripe nie odgrywa żadnej roli w tej transakcji, więc gdy potrzebny jest zwrot za depozyt opłacony SEPA, Stripe nie może nic zrobić. Przepływ wraca do manualnego: Ty przelewasz środki, a następnie rejestrujesz przelew w Clozo, żeby nota kredytowa odzwierciedlała rzeczywistość i klient otrzymał potwierdzenie.
Step by step
Odbierz wyzwalacz post-sign.
Po podpisaniu przez klienta aneksu Δ_REFUND, nota kredytowa pojawia się ze statusem
pendingi powodem „Wymagana ręczna wypłata freelancera".Wyszukaj IBAN klienta.
Albo ze swoich zapisów (jeśli zapisałeś go podczas oryginalnego depozytu SEPA), z e-maila z fakturą zaliczkową (klient wysłał Ci środki; jego IBAN jest w wyciągu bankowym), albo wysyłając e-mail do klienta, żeby potwierdzić, że docelowy IBAN jest tym samym, którego użył do zapłaty.
Wystaw przelew SEPA ze swojego banku.
Użyj numeru noty kredytowej jako referencji (np. „Zwrot CRN-2026-0007"). Większość banków UE przetwarza SEPA tego samego dnia lub następnego dnia roboczego; transgraniczny SEPA Instant często trwa w ciągu sekund.
Kliknij
Oznacz jako zwróconona nocie kredytowej.Z banera Zwrot strony oferty, strony not kredytowych (
/credit-notes) lub wiersza noty kredytowej z listy rozwijanej Dokumentów.Podaj powód.
Minimum 1 znak; typowe: numer referencji bankowej („PKO BP ref 9XK7-2026-0511") lub krótka notatka. Jest przechowywany trwale w wierszu noty kredytowej.
Potwierdź — nota kredytowa przechodzi do
manual.E-mail wychodzi do klienta; oferta zamyka się na
Opłaconajeśli dotyczy.
Baner Zwrot pokazuje „Ręczny zwrot zainicjowany" ze szczegółami noty kredytowej, Twoim zamaskowanym kontem bankowym i przyciskiem Potwierdź zakończenie zwrotu. Po kliknięciu i podaniu powodu, baner zmienia się na „Zwrot zakończony przez ręczny przelew dnia [data]" z tekstem powodu inline.
Why this works this way
Przekazanie następuje wewnątrz _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."
)
``
To ustawia notę kredytową, żeby wyświetlała interfejs ręcznego zwrotu. Baner oferty czyta „Ręczny zwrot zainicjowany — potwierdź przelew bankowy" ze szczegółami noty kredytowej i przyciskiem wezwania do działania, żeby oznaczyć zwrot jako zakończony.
Akcja po stronie freelancera (CreditNoteMarkRefundedView w amendment_views.py:686):
1. Sprawdź, czy nota kredytowa nie jest już succeeded (idempotentne — zwróć 409 jeśli tak).
2. Wymagaj pola reason w treści (1–500 znaków) — zazwyczaj numer referencji bankowej, data wypłaty lub krótka notatka. Przechowywane jako manual_refund_reason dla audytu.
3. Ustaw refund_status=manual, refund_completed_at=now, zapisz.
4. Wywołaj close_proposal_if_settled, żeby zmienić ofertę na Opłacona jeśli nie pozostały inne zobowiązania.
5. Kolejkuj send_credit_note_refund_completed_email — ten sam szablon e-maila co ścieżka zwrotu Stripe; doświadczenie klienta jest identyczne.
Status manual (vs succeeded) zachowuje rozróżnienie audytu: succeeded oznacza potwierdzenie webhooka Stripe; manual oznacza, że freelancer zaświadcza, że zwrot został wystawiony poza pasmem. Oba zamykają notę kredytową dla celów księgowych; tylko ścieżka audytu śledzi różnicę.
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.