Skip to main content

Proposals & Invoices · Article 5.6

Chaînes multi-avenants : un seul brouillon à la fois, référence = état effectif actuel

Un devis peut avoir plusieurs avenants au cours de sa vie — mais un seul ouvert à tout moment, et chaque nouvel avenant prend comme référence l'état signé le plus récent, pas le devis original. Voici comment la chaîne se maintient.

La plupart des devis n'ont aucun ou un seul avenant. Quelques-uns en ont plus — projets de design où le brief évolue, projets de développement où les spécifications dérivent, contrats récurrents où chaque mois est un nouvel addendum. Clozo gère des chaînes de n'importe quelle longueur en traitant chaque nouvel avenant comme un delta par rapport à l'état signé le plus récent, pas par rapport à l'original immuable. Cela rend le calcul intuitif : lorsque vous modifiez après la signature d'un avenant précédent, vous travaillez à partir du contrat actuel, pas d'un point dans le passé.

Step by step

  1. Consultez la page de détail du devis.

    Sous le menu déroulant Documents, une section Avenants liste tous les avenants du devis par ordre chronologique, avec le statut (signé / refusé / annulé / expiré), le numéro de séquence, la date de signature et un lien direct vers le PDF de l'addendum.

  2. Ouvrez l'assistant pour un nouvel avenant.

    Depuis le panneau Actions de /proposals/{id}, Proposer une modification de périmètre. L'assistant inspecte has_signed_amendment et précharge le dernier périmètre signé comme référence.

  3. Modifiez, envoyez, faites signer comme d'habitude.

    Le flux est identique à un premier avenant du point de vue du freelancer. Le client voit un diff par rapport au dernier état signé, pas par rapport au devis original.

  4. Après la signature, la chaîne s'étend.

    Le périmètre révisé du nouvel avenant signé devient la référence pour tout futur avenant. Le menu déroulant Documents reçoit un nouveau PDF d'addendum (AMD-NNNN-vN), une nouvelle FinalInvoice active (avec révision incrémentée) et un nouveau Storno pour la facture active précédente.

Une section Avenants claire sur la page de détail du devis énumérant la chaîne. Chaque ligne est indépendante : statut propre, documents propres, piste d'audit propre. Le « périmètre effectif actuel » est toujours l'état révisé du dernier avenant signé ; les postes du devis original sont préservés dans proposal.line_items (immuable selon [D-086]) mais seul l'état révisé pilote les factures et les totaux à l'avenir.

Why this works this way

Trois règles régissent la chaîne :

1. Un seul ouvert à la fois. Une contrainte de base de données (uniq_open_amendment_per_proposal avec condition status IN (sent, viewed)) l'applique au niveau des données. L'assistant l'applique au niveau de l'interface en vous orientant vers Reprendre le brouillon si un brouillon existe déjà. Si vous essayez de rédiger un deuxième avenant alors qu'un autre attend la signature du client, l'API renvoie 409 open_amendment_exists. Pour démarrer un nouvel avenant, le précédent doit passer à un état terminal : signed, declined, cancelled ou expired.

2. Référence = périmètre effectif actuel. Lorsque vous ouvrez l'assistant pour un nouvel avenant sur un devis qui a déjà des avenants signés, l'étape 1 affiche les postes du dernier avenant signé en tant que colonne « Original » verrouillée — pas les postes du devis original. L'API expose cela via proposal.has_signed_amendment et proposal.revised_line_items ; l'assistant frontend bascule vers ceux-ci lorsqu'ils sont présents.

3. L'acompte est ancré à l'original. Même après plusieurs avenants signés, le calcul de l'acompte utilise le tout premier total (parent.total_amount), pas le dernier total révisé. C'est intentionnel selon [D-086] : l'acompte a été payé pour un montant spécifique ; il ne se recalcule pas rétroactivement. La bannière de contexte d'acompte de l'assistant reflète cela — le montant de l'acompte reste constant tout au long de la chaîne même si le total révisé évolue.

Troubleshooting

Keep reading

Chaînes multi-avenants : un seul brouillon à la fois, référence = état effectif actuel · Help · Clozo