Refunds & Notifications · Article 6.9
Oznaczanie zwrotu ręcznie — dla SEPA i dowodów poza systemem
Gdy zwrot jest realizowany poza Stripe — przelew bankowy SEPA, gotówka, PayPal, czek pocztowy — `Oznacz jako zwrócony` to sposób na zarejestrowanie tego w Clozo. Pole powodu jest obowiązkowe (zazwyczaj referencja bankowa). Nota kredytowa przechodzi do statusu `manual`, a klient otrzymuje e-mail potwierdzający.
Zdecydowana większość zwrotów w Clozo jest obsługiwana przez Stripe i automatyczna. Ale trzy typowe przypadki przełamują ten wzorzec: (1) zaliczki zapłacone SEPA, gdzie Stripe nie ma czego zwracać; (2) zwroty Stripe, które nie powiodły się z nietranzytywnych przyczyn (zamknięta karta, niewystarczające saldo — patrz artykuł 8.10) i freelancer realizuje przelew poza systemem; (3) zwroty, które freelancer decyduje się obsłużyć ręcznie z powodów biznesowych (np. konsolidacja z oddzielną płatnością goodwill w jednym przelewie bankowym). Wszystkie trzy kończą się w tym samym miejscu: freelancer realizuje rzeczywisty zwrot przez własną bankowość, a następnie klika Oznacz jako zwrócony, aby utrzymać porządek w rejestrach Clozo.
Step by step
Zrealizuj zwrot przez własną bankowość.
Przelew SEPA, czek, gotówka, cokolwiek pasuje. Użyj numeru noty kredytowej (CRN-2026-NNNN) jako referencji, aby klient mógł go dopasować.
Potwierdź, że przelew opuścił Twoje konto.
Sprawdź dwukrotnie przez bankowość online przed oznaczeniem jako zwrócony — po kliknięciu klient otrzymuje e-mail mówiący, że jest gotowe.
Otwórz notę kredytową.
Z banera Zwrot oferty, strony Not kredytowych lub listy Dokumenty.
Kliknij
Oznacz jako zwrócony.Pojawia się modal z pytaniem o powód.
Wprowadź powód.
Numer referencji bankowej to konwencja ("Ref. banku XYZ-789", "Transakcja PayPal 7K9N", "Czek bankowy #4521"). Cokolwiek pozwoli Ci zrekonstruować rzeczywisty przelew wiele lat później.
Potwierdź.
Status przechodzi do
manual; baner zmienia się na „Zwrot zakończony dnia [data] przez przelew ręczny"; klient otrzymuje e-mail potwierdzający; oferta zamyka się jeśli dotyczy.
Baner Zwrotu z przyciskiem Oznacz jako zwrócony. Po kliknięciu i potwierdzeniu baner zmienia się na „Zwrot zakończony dnia [data] przez przelew ręczny — [powód]". PDF noty kredytowej (zregenerowany) zawiera ten sam tekst powodu w treści.
Why this works this way
Implementacja (CreditNoteMarkRefundedView w amendment_views.py:686):
1. Autoryzacja. IsAuthenticated, zakres właściciela.
2. Guard idempotentności. Już-succeeded zwraca 409 z completed_at — nie możesz oznaczyć jako zwróconego zwrotu, który Stripe już zakończył.
3. Wymagany powód. Jeśli treść nie zawiera niepustego reason, zwróć 400 z details.field=reason.
4. Aktualizacja noty kredytowej. refund_status=manual, refund_completed_at=now, manual_refund_reason=reason (skrócone do 500 znaków).
5. Próba zamknięcia oferty. close_proposal_if_settled zmienia ofertę na Paid, jeśli nie pozostają inne zobowiązania (brak innych oczekujących zwrotów, brak zaległych aktywnych faktur z amount_due > 0).
6. Uruchomienie e-maila „zwrot zakończony". send_credit_note_refund_completed_email.delay(credit_note_id). Ten sam szablon co po Stripe-succeeded; klient nie widzi różnicy.
7. Zwrot zaktualizowanego stanu noty kredytowej + czy oferta się zamknęła.
Status manual (vs succeeded) zachowuje rozróżnienie audytu. Dla celów księgowych i podatkowych manual jest traktowany identycznie jak succeeded — oba oznaczają, że operacja gotówkowa się rozliczyła i nota kredytowa jest zamknięta. Ścieżka audytu oddzielnie rejestruje kanał, dzięki czemu spory wiele lat później mogą precyzyjnie prześledzić, jak zwrot był realizowany.
Troubleshooting
Keep reading
Refunds & Notifications
SEPA / out-of-band refund: when automation can't help
When the original deposit was paid via SEPA bank transfer (or any non-Stripe channel), Clozo can't refund automatically — Stripe API has nothing to refund. You issue the SEPA transfer manually from your bank, then click `Mark refunded` to update the credit note and notify the client.
Refunds & Notifications
Refund stages: issued → requested → succeeded (or manual)
The credit note moves through up to four states from creation to settled. Each state corresponds to a specific point in the refund lifecycle, with predictable UI badges and email triggers.
Refunds & Notifications
The Credit Notes page
A first-class section in the freelancer dashboard that lists every credit note across all your proposals, with status, refund amount, linked proposal, and action buttons. Use this when you want to manage refunds without drilling into each proposal individually.
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.