Refunds & Notifications · Article 6.1
Kiedy zdarzają się zwroty: gałęzie aneksu Δ_REFUND
Zwrot w Clozo jest zawsze powiązany z gałęzią aneksu Δ_REFUND — częściową (poprawiona suma mniejsza niż opłacona zaliczka) lub pełną (poprawiona suma wynosi zero). Aneks jest wyzwalaczem prawnym; zwrot jest konsekwencją gotówkową.
Clozo nie ma przycisku „oddaj klientowi trochę pieniędzy" oderwany od umowy. Każdy zwrot to noga gotówkowa podpisanego aneksu, który obniżył sumę poniżej tego, co klient już zapłacił jako zaliczkę. Ten projekt jest celowy — zwroty bez odpowiadającej zmiany umowy to koszmar audytu podatkowego; powiązanie każdego zwrotu z podpisanym aneksem zapewnia, że dokumenty prawne (Stornorechnung, Berichtigung, Gutschrift) i przepływ gotówki są zawsze zsynchronizowane.
Quick visual tour

Step 1: Prośba o zwrot nadchodzi. Nie panikuj — jest jasna ścieżka.

Step 2: Sprawdź kwalifikowalność na drzewie decyzji. Większość przypadków jest prawidłowa.

Step 3: Naciśnij Zwróć. Stripe obsługuje faktyczny przepływ pieniędzy.

Step 4: Obserwuj jak monety wracają z Twojego skarbca do klienta.

Step 5: Wystaw notę kredytową. Księgowość zamyka się czysto.
Step by step
Zdecyduj kwotę zwrotu.
To nie jest liczba, którą wpisujesz — to konsekwencja edytowania pozycji w aneksie. Nowa suma poniżej pobranej zaliczki → zwrot. Nowa suma wynosi zero → pełna zaliczka zwrócona.
Otwórz kreator aneksu.
/proposals/{id}/amend. Zmniejszaj pozycje w Kroku 1, dopóki baner kontekstu zaliczki kreatora nie pokaże „Zwrot: X EUR".Ustaw powód w Kroku 2.
Minimum 30 znaków (dłuższe minimum odzwierciedla, że zmniejszasz — rób to jawnie). Powód pojawia się na aneksie, w narracji noty kredytowej i jest częścią ścieżki audytu.
Wyślij i poczekaj na podpisanie przez klienta.
Aneks przechodzi przez standardowy przepływ z bramą PIN (artykuł 7.4). Przy podpisaniu uruchamia się pipeline zwrotu.
Obserwuj oś czasu zwrotu.
Baner „Zwrot w toku" pojawia się na stronie oferty po podpisaniu. Etapy: wystawiony → zlecony (Stripe zaakceptował) → rozliczony (webhook Stripe potwierdzony) — patrz artykuł 8.4.
Po podpisaniu aneksu Δ_REFUND przez klienta, baner oferty przełącza się na „Zwrot w toku" z numerem noty kredytowej i oczekiwanym oknem. Lista Dokumenty dostaje nowe dokumenty (Storno, Berichtigung, Gutschrift). Pole refund_status noty kredytowej steruje UI: requested → „Zwrot w toku, spodziewany w ciągu 3–5 dni roboczych"; failed → „Zwrot nie powiódł się" z opcjami ponowienia / ręcznymi; succeeded / manual → „Zwrot zakończony dnia [data]".
Why this works this way
Przepływ zwrotu jest zakorzeniony w process_amendment_signed (backend/apps/proposals/amendment_postsign.py). W momencie podpisania funkcja sprawdza amendment.triggers_refund. Jeśli true, oblicza refund_gross = deposit_paid − revised_total (obcięte do zera) i:
1. Tworzy DepositInvoiceCorrection (Berichtigung der Anzahlungsrechnung) z correction_type=partial_refund lub full_cancellation.
2. Tworzy CreditNote (Gutschrift) z refund_status=pending, kwotami brutto/netto/VAT podzielonymi przez _split_refund_vat i odwołaniami do oryginalnej faktury zaliczkowej (numer + data) zgodnie z Art. 219 Dyrektywy VAT UE.
3. Wywołuje _trigger_stripe_refund, aby wykonać nogę gotówkową przez API Stripe na połączonym koncie freelancera.
Dwa różne „wyzwalaczy" produkują zwrot:
| Wyzwalacz | Gałąź | Tworzone dokumenty | Noga gotówkowa |
|---|---|---|---|
Aneks z revised_total < deposit_paid, oryginalna zaliczka opłacona przez Stripe | Δ_REFUND częściowy LUB pełny | Storno + Berichtigung + Gutschrift (+ anulowana FinalInvoice przy pełnym) | Zwrot Stripe (artykuł 8.2) |
Aneks z revised_total < deposit_paid, oryginalna zaliczka opłacona przez SEPA / poza systemem | Δ_REFUND częściowy LUB pełny | Te same dokumenty | Ręczny SEPA (artykuł 8.3 + 8.9) |
Nie ma ścieżki „zwróć płatność końcową", ponieważ płatność końcowa nie jest zaliczką — po Opłacona, umowa jest rozliczona. Aby częściowo zwrócić opłaconą umowę, tworzysz aneks, który zmniejsza zakres (Δ−), podpisujesz go; oferta wraca do Oczekiwanie na płatność końcową z mniejszym saldem, a nadpobrana kwota jest obsługiwana przez pipeline po podpisaniu jako Δ_REFUND. Aneks jest zawsze główną bramą.
Uwaga: od 2026-05-07, bezpośrednie usunięcie oferty in_work jest również zabronione — backend odrzuca DELETE z HTTP 409 in_work_requires_amendment. Czerwony callout „Zwróć wszystko" kreatora aneksu (Krok 1) to jedyna ścieżka UI do zwrotu opłaconej zaliczki; kliknięcie go ustawia ilość każdej pozycji na 0, kreator wyświetla gałąź Δ_REFUND pełny, a przy podpisaniu przez klienta uruchamia się pipeline tego artykułu (zgodnie z [D-125]).
Troubleshooting
Keep reading
Proposals & Invoices
The 4 delta branches: Δ+, Δ−, Δ=0, Δ_REFUND
Every signed amendment falls into one of four branches based on (a) the sign of the cost change and (b) whether the proposal was already paid. Each branch fires a different document chain. This is the central conceptual map for the entire amendment system.
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
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.