Proposals & Invoices · Article 5.9
Dlaczego podpisany aneks generuje dwa nowe dokumenty (Storno + nowa faktura)
Każdy podpisany aneks dotykający strony finansowej umowy generuje co najmniej dwa nowe dokumenty: Stornorechnung (faktura anulująca) dla starej faktury końcowej i nową aktywną FinalInvoice ze zmienionymi kwotami. Wymaga tego GoBD §147 AO oraz analogiczne przepisy unijne — to nie jest dowolna decyzja Clozo.
Prawo fakturowania UE traktuje wystawione faktury jako dokumenty prawne, których nie można edytować ani usuwać — można je jedynie anulować (za pomocą Stornorechnung) i zastąpić (nową fakturą). Egzekwowane jest to na mocy GoBD §147 AO w Niemczech (10-letnia retencja z niezmiennością), z analogicznymi przepisami w całej UE: BTW Art. 35a (Holandia), CGI Art. 289 (Francja), Art. 6 Reglamento de Facturación (Hiszpania), Ustawa VAT Art. 106 (Polska). Gdy aneks zmienia zakres finansowy, Clozo automatycznie tworzy właściwą ścieżkę dokumentacyjną — warto jednak wiedzieć, co jest tworzone i dlaczego, bo Twój księgowy to zobaczy.
Step by step
Zdarzenie podpisania uruchamia potok.
Klient klika Podpisz na stronie aneksu; backend rejestruje stos dowodów eIDAS i uruchamia
process_amendment_signedw tej samej transakcji DB.Dokumenty pojawiają się w liście w ciągu ~30 sekund.
Generowanie PDF jest asynchroniczne przez Celery, ale wiersze są utrwalane natychmiast. Odśwież stronę oferty, jeśli nie widzisz dokumentów — Gotenberg może być wolny.
Stary wiersz INV otrzymuje plakietkę „Unieważniony".
Lista rozwijana Dokumenty pokazuje starą fakturę końcową z etykietą „Unieważniona przez INV-NNNN-v2" i linkiem do Stornorechnung.
Nowa INV staje się aktywna.
Zawiera przyrostek
v2wdisplay_numberjeśli jest to druga iteracja. Aktywny wiersz pojawia się na banerze oferty („Oczekuje płatności INV-NNNN-v2: X zł").Gałęzie Δ_REFUND wyświetlają oś czasu zwrotu.
Pojawia się nowy baner „Zwrot w toku" z numerem noty kredytowej, szacowanym terminem i przyciskiem „Sprawdź status" (artykuł 8.7).
Lista rozwijana Dokumenty reorganizuje się, wyraźnie pokazując nową aktywną fakturę i starą jako unieważnioną. Sekcja Aneksy otrzymuje nowy wpis. W przypadku Δ_REFUND baner oferty przełącza się z „Opłacone" na „Zwrot w toku" do momentu rozliczenia operacji gotówkowej.
Why this works this way
Potok post-podpisania (process_amendment_signed w backend/apps/proposals/amendment_postsign.py) wykonuje się w ramach pojedynczej transakcji DB w chwili, gdy klient podpisuje:
1. Storno poprzedniej aktywnej FinalInvoice. Jeśli faktura końcowa była już wystawiona (Okno B), jej status zmienia się na status=superseded, superseded_by wskazuje na nową fakturę, void_reason zapisuje „Anulowana przez aneks {numer_aneksu}", a wiersz StornoInvoice jest tworzony z typem dokumentu właściwym dla języka (Stornorechnung po niemiecku, Annulation po francusku, Rectificativa po hiszpańsku, Creditfactuur po niderlandzku, Korekta po polsku, Cancellation po angielsku).
2. Aktywacja nowej FinalInvoice. Faktura podglądowa utworzona przez kreatora (w stanie status=cancelled podczas szkicu) jest przeliczana według najnowszych wartości aneksu i zmienia status na status=active. Otrzymuje nowy numer sekwencyjny z licznika roku (INV-2026-NNNN) i przyrostek wersji w display_number (np. INV-2026-0042-v2). Oba numery pozostają w dzienniku audytu na zawsze.
3. Tylko Δ_REFUND — DepositInvoiceCorrection (Berichtigung). W gałęziach Δ_REFUND tworzony jest trzeci dokument formalnie korygujący oryginalną fakturę zaliczkową (Anzahlungsrechnung). Typ to partial_refund, jeśli nowa suma jest dodatnia, ale mniejsza niż deposit_paid; full_cancellation, jeśli nowa suma wynosi zero. Dokument ten jest mechanizmem prawnym wymaganym przez §17 UStG (Niemcy), Art. 90 Dyrektywy VAT UE (ogólnie) i krajowe odpowiedniki — bez niego linia VAT faktury zaliczkowej pozostaje w Twoich księgach na pierwotną kwotę i urząd skarbowy nie zaakceptuje zwrotu.
4. Tylko Δ_REFUND — CreditNote (Gutschrift / factura d'avoir / nota de crédito). Czwarty dokument, właściwa nota kredytowa, którą klient otrzymuje z informacją o zwrocie. Odwołuje się do numeru oryginalnej faktury zaliczkowej (DEP-2026-NNNN) i daty tej faktury zgodnie z Art. 219 Dyrektywy VAT UE (wzajemne odwołania między korektami a oryginałami są obowiązkowe).
5. Uruchomienie zwrotu przez Stripe. Jeśli oryginalna zaliczka została zapłacona przez Stripe (Direct Charge na podłączonym koncie freelancera), wywoływane jest _trigger_stripe_refund z kwotą brutto noty kredytowej. Nota kredytowa przechodzi do statusu refund_status=requested. Potwierdzenie przez webhook zmienia go na succeeded (lub failed); szczegóły cyklu życia zwrotu opisano w Sekcji 8.
Artefakty prawne są utrwalane przed uruchomieniem operacji gotówkowej. Jeśli Stripe jest niedostępny, dokumenty są nadal poprawne — tylko płatność jest wstrzymana i możesz ponowić próbę z poziomu wiersza noty kredytowej (artykuł 8.8).
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
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
Storno vs Berichtigung vs Gutschrift: three documents, three jobs
Three German VAT documents commonly confused with each other, each with a specific legal job and a specific moment when Clozo issues it. EU equivalents have similar names and identical purposes. Mixing them up is a frequent topic in support tickets — and a frequent cause of accountant pushback.
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.