Refunds & Notifications · Article 6.1
Wanneer terugbetalingen plaatsvinden: de Δ_REFUND-addendum-takken
Een terugbetaling in Clozo is altijd gekoppeld aan een Δ_REFUND-addendum-tak — gedeeltelijk (herzien totaal kleiner dan betaalde aanbetaling) of volledig (herzien totaal op nul). Het addendum is de juridische trigger; de terugbetaling is de geldconsequentie.
Clozo heeft geen knop "geef de klant wat geld terug" los van het contract. Elke terugbetaling is de geldleg van een ondertekend addendum dat het totaal heeft verminderd tot onder het bedrag dat de klant al als aanbetaling heeft betaald. Dit ontwerp is opzettelijk — terugbetalingen zonder een overeenkomstige contractwijziging zijn een nachtmerrie voor belastingaudits; door elke terugbetaling te koppelen aan een ondertekend addendum worden de juridische documenten (Stornorechnung, Berichtigung, Gutschrift) en de geldbeweging altijd gesynchroniseerd.
Quick visual tour

Step 1: Terugbetalingsverzoek ontvangen. Geen paniek — er is een duidelijk pad.

Step 2: Controleer de geschiktheid op de beslissingsboom. De meeste gevallen zijn geldig.

Step 3: Druk op Terugbetalen. Stripe handelt de daadwerkelijke geldbeweging af.

Step 4: Zie de munten terugvliegen van uw kluis naar de klant.

Step 5: Geef een creditnota uit. De boekhouding sluit netjes.
Step by step
Bepaal het terugbetalingsbedrag.
Het is geen getal dat u invoert — het is de consequentie van het bewerken van regelitems in een addendum. Nieuw totaal onder geïnde aanbetaling → terugbetaling. Nieuw totaal op nul → volledige aanbetaling terugbetaald.
Open de addendum-wizard.
/proposals/{id}/amend. Verklein regelitems in Stap 1 totdat de aanbetalingscontext-banner van de wizard "Terugbetaling: €X" toont.Stel de reden in op Stap 2.
Minimaal 30 tekens (het langere minimum weerspiegelt dat u vermindert — maak het expliciet). De reden verschijnt op het addendum, op de creditnota-tekst, en is onderdeel van het audittraject.
Verstuur en wacht tot de klant ondertekent.
Het addendum doorloopt de standaard PIN-beveiligde stroom (artikel 7.4). Bij ondertekening wordt de terugbetalingspipeline uitgevoerd.
Volg de terugbetalingstijdlijn.
Een banner "Terugbetaling in behandeling" verschijnt op de offertepagina zodra het is ondertekend. Fasen: uitgegeven → aangevraagd (Stripe geaccepteerd) → afgerekend (Stripe-webhook bevestigd) — zie artikel 8.4.
Nadat de klant het Δ_REFUND-addendum ondertekent, wisselt de offertebanner naar "Terugbetaling in behandeling" met het creditnotanummer en een verwacht venster. Het dropdown-menu Documenten krijgt de nieuwe documenten (Stornorechnung, Berichtigung, Gutschrift). De refund_status van de creditnota stuurt de UI: aangevraagd → "Terugbetaling in behandeling, verwacht binnen 3–5 werkdagen"; mislukt → "Terugbetaling mislukt" met opnieuw proberen / handmatige opties; geslaagd / handmatig → "Terugbetaling voltooid op [datum]".
Why this works this way
De terugbetalingsstroom is verankerd in process_amendment_signed (backend/apps/proposals/amendment_postsign.py). Bij ondertekening controleert de functie amendment.triggers_refund. Als dit waar is, berekent het refund_gross = aanbetaling_betaald − herzien_totaal (afgekapt op nul) en:
1. Maakt een DepositInvoiceCorrection (Berichtigung der Anzahlungsrechnung) aan met correction_type=partial_refund of full_cancellation.
2. Maakt een CreditNote (Gutschrift) aan met refund_status=in behandeling, de bruto/netto/btw-bedragen gesplitst via _split_refund_vat, en verwijzingen naar de oorspronkelijke aanbetalingsfactuur (nummer + datum) per Art. 219 EU BTW-richtlijn.
3. Roept _trigger_stripe_refund aan om de geldleg via de Stripe API op de verbonden rekening van de freelancer te proberen.
Twee verschillende "trigger"-bronnen produceren een terugbetaling:
| Trigger | Tak | Documenten aangemaakt | Geldleg |
|---|---|---|---|
Addendum met herzien_totaal < aanbetaling_betaald, oorspronkelijke aanbetaling via Stripe | Δ_REFUND gedeeltelijk OF volledig | Stornorechnung + Berichtigung + Gutschrift (+ geannuleerde Eindafrekening bij volledig) | Stripe-terugbetaling (artikel 8.2) |
Addendum met herzien_totaal < aanbetaling_betaald, oorspronkelijke aanbetaling via SEPA / buiten systeem | Δ_REFUND gedeeltelijk OF volledig | Zelfde documenten | Handmatige SEPA (artikel 8.3 + 8.9) |
Er is geen pad voor "terugbetaling van de eindafrekening" omdat de eindafrekening geen aanbetaling is — zodra Betaald, is het contract afgerekend. Om een deeltje van een betaald contract terug te betalen, maakt u een addendum aan dat de scope vermindert (Δ−), ondertekent het; de offerte gaat terug naar Wachten op eindafrekening met een kleiner saldo, en elk te veel geïnd bedrag wordt via de post-ondertekeningspipeline verwerkt als een Δ_REFUND. Het addendum is altijd de enige ingang.
Opmerking: vanaf 2026-05-07 is directe verwijdering van een in_work-offerte ook verboden — de backend weigert DELETE met HTTP 409 in_work_requires_amendment. De rode callout 'Alles terugbetalen' in de addendum-wizard (Stap 1) is het enige UI-pad om een betaalde aanbetaling terug te betalen; klikken stelt elke regelitem-hoeveelheid in op 0, de wizard toont de Δ_REFUND-volledige-tak, en bij handtekening van de klant wordt de pipeline van dit artikel uitgevoerd (per [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.