Skip to main content

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

  1. Odbierz wyzwalacz post-sign.

    Po podpisaniu przez klienta aneksu Δ_REFUND, nota kredytowa pojawia się ze statusem pending i powodem „Wymagana ręczna wypłata freelancera".

  2. 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.

  3. 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.

  4. Kliknij Oznacz jako zwrócono na nocie kredytowej.

    Z banera Zwrot strony oferty, strony not kredytowych (/credit-notes) lub wiersza noty kredytowej z listy rozwijanej Dokumentów.

  5. 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.

  6. Potwierdź — nota kredytowa przechodzi do manual.

    E-mail wychodzi do klienta; oferta zamyka się na Opłacona jeś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