Proposals & Invoices · Article 5.3
Créer un avenant (l'assistant en 4 étapes)
L'assistant d'avenant à `/proposals/{id}/amend` vous guide à travers les lignes, le motif, l'aperçu et l'e-mail — dans cet ordre. Cinq minutes pour un changement simple, dix pour un cas complexe. Le client ne voit rien tant que vous n'avez pas cliqué sur Envoyer à l'étape 4.
L'assistant ouvre avec le périmètre effectif courant comme point de départ — soit les lignes d'origine si aucun avenant n'a été signé auparavant, soit les lignes du dernier avenant signé si vous chaînez (article 7.6). Vous éditez, remodelez, ajoutez ou retirez des lignes à l'étape 1 ; expliquez pourquoi à l'étape 2 ; passez en revue l'addendum rendu à l'étape 3 ; et rédigez l'e-mail à l'étape 4. Tout ce qui précède le bouton Envoyer de l'étape 4 reste privé.
Step by step
Étape 1 : lignes.
Les lignes d'origine apparaissent en haut, verrouillées et grisées. Votre liste révisée éditable apparaît en dessous. Chaque rangée reçoit une étiquette colorée — vert
+ ajoutée, ambre~ modifiée, rouge− retirée, grisinchangée— pour que vous (et le client, dans la vue diff) puissiez voir d'un coup d'œil ce qui a changé. La bannière de contexte d'acompte à droite affiche : pourcentage d'acompte du contrat d'origine, montant d'acompte encaissé, et ce que sera le nouveauamount_due(ou remboursement, si Δ_REFUND). L'assistant recalcule à chaque frappe.Étape 2 : motif.
Un champ texte court. Minimum 10 caractères pour Δ+ / Δ=0, 30 caractères en cas de réduction de périmètre (Δ− / Δ_REFUND) — le minimum plus long encourage à enregistrer la justification de toute baisse, puisque c'est le cas le plus susceptible d'être contesté plus tard. Le motif apparaît verbatim sur le PDF d'addendum et dans la vue diff du client.
Étape 3 : aperçu.
L'assistant rend le PDF d'addendum à la volée via un point de terminaison
/preview-pdfet l'embarque dans une iframe. Lisez-le. Confirmez que les lignes, totaux, ventilation TVA et motif sont tous corrects. Cochez la case de consentement (« J'ai relu le PDF rendu et confirme qu'il reflète fidèlement le changement ») — Envoyer est désactivé tant que vous ne le faites pas. Toute modification vous renvoie à l'étape 1 et invalide le consentement (vous le recocherez).Étape 4 : compositeur d'e-mail.
Objet et corps préremplis dans la langue du devis ; les deux sont éditables. Le destinataire prend par défaut l'e-mail du client en fiche mais peut être surchargé (par ex. pour un signataire alternatif). Cliquez sur
Envoyer l'avenant au clientpour déclencher l'e-mail et verrouiller l'avenant contre toute modification ultérieure.
L'assistant occupe tout l'écran avec une barre de progression à quatre étapes en haut. La bannière de contexte d'acompte reste collée à l'étape 1. Les erreurs (par ex. « Le motif doit faire ≥ 30 caractères » sur Δ−) apparaissent en ligne en haut de l'étape concernée. Après Envoyer, vous êtes redirigé vers /proposals/{id} où l'avenant apparaît dans un panneau « Avenant en attente » avec compte à rebours, bouton de copie de lien et bouton Annuler.
Why this works this way
L'assistant crée automatiquement (ou reprend automatiquement) une ligne ProposalAmendment en brouillon la première fois que vous dépassez l'étape 1. À partir de là, chaque navigation entre étapes fait un PATCH du brouillon côté serveur avec les lignes courantes et le motif. Cela signifie que fermer le navigateur en plein milieu de l'assistant ne perd jamais le travail — rouvrez /proposals/{id}/amend et vous reprenez là où vous étiez.
Un détail d'implémentation plus subtil : l'assistant crée une ligne FinalInvoice de « prévisualisation » rattachée à l'avenant en brouillon, avec status=cancelled (pas active). Le statut bascule sur active uniquement à l'instant où le client signe, lorsque upsert_pending_invoice_for_amendment devient process_amendment_signed. Deux conséquences :
1. Votre compteur INV-2026-NNNN avance lors de la rédaction (le numéro est réservé). Si vous annulez le brouillon, le numéro reste dans vos livres comme une ligne annulée — c'est normal et conforme à la façon dont les Steuerberater allemands s'attendent à voir des annulations numérotées dans le journal d'audit.
2. L'iframe d'aperçu de l'étape 3 est rendu contre cette facture de prévisualisation — c'est le PDF exact que recevra le client, donc ce que vous voyez est ce qu'il/elle obtient.
Si le devis parent est en statut in_work (acompte payé, projet en cours), l'étape 1 fait apparaître un bouton de mise en avant rouge « Tout rembourser » en plus de l'éditeur de lignes — cliquer dessus fixe la quantité de chaque ligne à 0, ramène revised_total à 0, et à la signature du client la cascade dans process_amendment_signed émet une Stornorechnung + Berichtigung der Anzahlungsrechnung + facture d'avoir et déclenche le remboursement Stripe. C'est la seule voie légitime pour rembourser un acompte in_work ; la suppression directe du devis est rejetée avec HTTP 409 in_work_requires_amendment (au titre de [D-125]).
Troubleshooting
Keep reading
Proposals & Invoices
When to use an amendment (vs a new proposal vs withdraw)
Three paths exist to change a deal: amend it, withdraw and resend, or start a new proposal. Pick the wrong one and you'll either break the audit trail or scare the client. Here's the decision tree.
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.
Proposals & Invoices
Multi-amendment chains: one draft at a time, baseline = current effective
A proposal can have many amendments over its life — but only one open at any given moment, and each new amendment baselines on the most recent signed state, not the original proposal. Here's how the chain holds together.
Proposals & Invoices
What your client sees when an amendment lands
The client receives an email with a fresh PIN, lands on a PIN-gated page, sees a side-by-side diff of old vs new with totals and a reason, and signs (or declines) — exactly like the original proposal flow but with the diff baked in.