Troubleshooting & Reference · Article 7.4
"De factuurkoppeling is verbroken of de PDF ontbreekt"
PDF's mislukken soms bij het renderen (Gotenberg-fout) of bij het uploaden naar R2. Symptoom: het document toont als "uitgesteld" maar het klikken op de koppeling geeft een 404-fout of de PDF is leeg. Herstel: opnieuw genereren vanuit de Documenten-dropdown.
PDF-generatie is een meerstaps asynchroon proces: HTML renderen vanuit een Jinja-sjabloon, sturen naar Gotenberg (Chrome headless) voor PDF-conversie, bytes uploaden naar Cloudflare R2, de URL opslaan in het offerte-record. Elke stap kan afzonderlijk mislukken. Het herstelmodel van Clozo is "opnieuw proberen vanuit elke stap" — de knop Opnieuw genereren herbouwt de ontbrekende onderdelen.
Step by step
Identificeer de ontbrekende PDF.
Open de Documenten-dropdown op de offerte-detailpagina; het gebroken document is het document met de 404-koppeling.
Klik op
Opnieuw genererenernaast.De renderer wordt opnieuw uitgevoerd; nieuwe bytes worden geüpload naar R2.
Wacht ~10 seconden en probeer de koppeling opnieuw.
Nieuwe URL vervangt de oude; de koppeling in eerder verstuurde e-mails zal ook verwijzen naar het nieuwe bestand (R2-pad is stabiel).
Why this works this way
Het renderpad is apps/pdf/service.py. Elk documenttype heeft zijn eigen renderer (render_proposal_pdf, render_final_invoice_pdf, render_credit_note_pdf, enz.). Bij succes gaan de bytes naar apps/storage/r2.py:upload_to_r2() die een URL retourneert opgeslagen op het model.
Stoeringsmodes: - Gotenberg-time-out (standaard 30 seconden): gewoonlijk een lang sjabloon (enorm aantal regelitems) of een Gotenberg-pod-herstart. Opnieuw proberen slaagt meestal. - R2-uploadfout: voorbijgaand probleem met aanmeldingsgegevens of netwerk; opnieuw proberen slaagt binnen minuten. - Spookfactuur: de factuurrecord werd aangemaakt (nummer toegewezen, status ingesteld) maar de PDF-render of upload mislukte stil. De freelancer ziet de status "Eindafrekening uitgegeven" maar de PDF-koppeling geeft 404.
Raceconditie specifiek voor addenda: de post-ondertekenings-hook genereert nieuwe INV / Storno / Creditnota PDF's parallel. Als één renderer crasht, slagen de anderen en zet de modelstatus voort. De ontbrekende PDF vereist gerichte hernieuwde generatie.
Troubleshooting
Keep reading
Lifecycle
Status: Deposit paid — work can start
The deposit landed (Stripe webhook or manual confirmation). Clozo flips the status, queues the deposit receipt PDF, and starts a behind-the-scenes job to pre-render the final invoice. You can begin the work.
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.