L'opérateur a demandé « on ne peut pas emettre de facture en dollars ? ». Si, et
c'est même la bonne réponse ici — au point que la question avait déjà son créneau
au registre : adc-006 était Proposed depuis juillet, sa première question ouverte
étant mot pour mot « USD multicurrency invoices vs EUR-at-settlement ? ».
LE DÉFAUT. Le contrat fixe un prix EN DOLLARS — 2 500 USD en part fixe, 3 000 en
part différée — mais les factures étaient libellées en euros, contre-valeur figée
au taux du jour d'émission. Leur propre note l'avouait : « le montant
effectivement dû en euros sera arrêté au taux du jour du règlement ». Une facture
dont le montant affiché n'est pas le montant dû.
Le coût était réel et mesuré : FAC004, FAC006 et FAC009 ont dû être reprises le
même jour parce que leur contre-valeur ne correspondait pas aux virements reçus.
51,13 EUR d'encaissement manquaient aux livres.
Le client paie d'ailleurs en dollars : les euros reçus varient de 2 147,00 à
2 195,97 pour une prestation à prix fixe, signature d'un virement en devise
converti à l'arrivée par Wise, qui ne détient qu'un solde en euros.
LE DROIT. Une facture peut être libellée dans toute monnaie (CGI art. 289, II,
transposant la directive 2006/112 art. 230) ; seule la TVA à payer doit être
déterminée en euros, et il n'y en a pas — autoliquidation par un preneur hors UE.
Les LIVRES, eux, restent tenus en euros (C. com. art. L.123-22) : la
contre-valeur inscrite n'a pas bougé d'un centime.
PÉRIMÈTRE. Les quatre factures NON RÉGLÉES, aucune n'ayant été transmise :
FAC005, FAC007, FAC010, FAC011, toutes portées à 3 000,00 USD. Les quatre réglées
restent en euros — leur montant est exactement ce qui a été encaissé et rapproché
avec la banque. Chaque facture dit ainsi sa propre vérité.
CE QUE adc-006 DOIT CONSIGNER, ET CONSIGNE. adc-002 pose qu'« une facture validée
n'est jamais ajustée pour raison de change ». Trois l'ont pourtant été le 24/08.
L'opérateur l'a arbitré au motif qu'aucune n'avait été transmise au client, et
adc-006 supprime la situation qui rendait l'arbitrage nécessaire : une facture en
dollars n'a aucune raison d'être ajustée, son montant ne dépendant d'aucun taux.
adc-002 s'en trouve restreinte, pas abrogée — les écarts de change continuent
d'aller en 766 et 666, et deviennent le cas normal au lieu de l'exception.
test/setInvoiceCurrency.ts. Deux pièges consignés. `PUT /invoices/{id}` ACCEPTE
`multicurrency_code`, répond 200, et n'applique rien : seule l'interface change
la devise. Et ce changement ABÎME la ligne — Dolibarr recalcule le montant en
devise depuis les euros et le taux du dictionnaire, puis le changement de taux
fige la devise et recalcule les euros, si bien que la contre-valeur dérive. Le
script réunit donc les deux opérations, réécrit la ligne ENTIÈRE (le PUT n'est
pas un PATCH) et refuse si la contre-valeur euro a bougé d'un centime.
Le juge a relevé, à raison, que le titre du change-set débordait de son contenu :
le passage en devise est fait par le script, en amont. Accepté et consigné au
gate ; le manifeste n'a pas été retouché pour ne pas rompre l'empreinte sur
laquelle le gate est scellé. Son residual risk — vérifier la multidevise en
production — est honoré. Juge post-gate PASS sans dérive.
Co-Authored-By: Claude Opus 5 (1M context) <[email protected]>
6.8 KiB
id, title, status, decided, effective_from, effective_until, supersedes, superseded_by
| id | title | status | decided | effective_from | effective_until | supersedes | superseded_by |
|---|---|---|---|---|---|---|---|
| adc-006 | Retainer KissMetrics : factures libellées en dollars, une facture par part, écarts de change en 766/666 | Accepted | 2026-08-24 | 2026-08-24 | null | null | null |
adc-006 — Le retainer KissMetrics se facture en dollars
Context
Le contrat cadre du 23/04/2026 fixe un prix en dollars : 2 500 USD par mois en part fixe, plus 3 000 USD en part différée à trois mois. Les factures, elles, étaient libellées en euros, pour une contre-valeur figée au taux du jour de leur émission — le montant dû n'étant arrêté qu'au règlement.
Ce montage a un défaut que la pratique a révélé le 24 août 2026 : le montant affiché sur la facture n'est pas le montant dû. Leur propre note le disait — « le montant effectivement dû en euros sera arrêté au taux du jour du règlement ». Trois factures ont dû être reprises le même jour parce que leur contre-valeur ne correspondait pas à ce que le client avait viré : FAC004 (2 145,92 € portés à 2 147,00), FAC006 (portés à 2 195,97) et FAC009 (2 140,45 portés à 2 164,75). Cinquante et un euros d'encaissement manquaient aux livres.
Le client paie d'ailleurs en dollars. Les euros reçus varient de 2 147,00 à 2 195,97 pour une prestation à prix fixe : c'est la signature d'un virement en devise, converti à l'arrivée par Wise, qui ne détient qu'un solde en euros.
Decision
1. Les factures du retainer sont libellées en dollars des États-Unis. Le montant porté sur la facture est le montant contractuel — 2 500,00 ou 3 000,00 USD — et non une contre-valeur. La contre-valeur en euros inscrite aux livres est celle du taux retenu à l'émission ; elle n'a qu'une portée comptable interne.
2. Une facture par part, pas une facture à deux lignes. La part fixe et la part différée ont des échéances distinctes — net 30 pour l'une, trois mois après la fin du cycle pour l'autre. Deux échéances sur une même facture ne se relancent pas séparément et ne se soldent pas séparément. C'est la pratique suivie depuis M1 ; elle est ici confirmée, pas inaugurée.
3. Les écarts de change restent régis par adc-002 : le règlement solde la facture pour son montant restant, et la différence entre la contre-valeur euro inscrite et les euros réellement reçus va en 766 (gain) ou 666 (perte). Ce qui était un cas d'exception devient le cas normal, et c'est le but.
4. Le périmètre du basculement, au 24/08/2026 : les quatre factures alors non réglées — FAC005, FAC007, FAC010, FAC011 — passent en dollars ; aucune n'avait été transmise au client. Les quatre déjà réglées restent en euros : leur montant est exactement ce qui a été encaissé, et rien de rapproché avec la banque ne doit bouger. Chaque facture dit ainsi sa propre vérité.
Base légale & doctrine
Une facture peut être libellée dans toute monnaie. CGI art. 289, II, qui transpose l'article 230 de la directive 2006/112/CE : seule contrainte, le montant de taxe à payer doit être déterminé en euros. Il n'y a pas de TVA française ici — autoliquidation par un preneur assujetti établi hors de l'Union européenne, CGI art. 259, 1° et 283-2, ce que pose déjà [adc-001]. La contrainte ne s'applique donc pas.
Les livres restent tenus en euros. C. com. art. L.123-22 : les documents comptables sont établis en euros et en langue française. Facture en devise et comptabilité en euros ne s'opposent pas — ce sont deux objets différents.
Permanence des méthodes. [adc-011] impose qu'un changement de méthode soit daté, motivé et appliqué uniformément ensuite. C'est le cas : le basculement porte une date, un motif écrit, un périmètre explicite, et vaut pour toute facture émise à compter du 24/08/2026.
Alternatives rejected
Rester en euros avec contre-valeur au règlement — c'est l'état antérieur. Rejeté : il produit des factures dont le montant affiché n'est pas le montant dû, et il a effectivement coûté trois reprises en une seule journée.
Basculer aussi les factures déjà réglées — rejeté : leur montant en euros est exactement ce qui a été encaissé et rapproché avec la banque. Le modifier déplacerait un montant déjà vérifié, sans rien gagner.
Attendre le cycle M5 pour basculer — rejeté par l'opérateur : les quatre factures non réglées partaient le jour même dans le dossier client. Les envoyer avec un montant euro que leur propre note qualifie d'indicatif aurait figé le défaut dans les mains du client.
Consequences
- Débloque erp#53 (T05, facture client mensuelle) : la méthode est stable, l'automatisation peut la câbler.
- Restreint [adc-002] sans l'abroger. adc-002 pose qu'« une facture validée
n'est jamais ajustée pour raison de change ». Cette règle reste vraie et
devient d'application plus simple : une facture en dollars n'a aucune raison
d'être ajustée, puisque son montant ne dépend d'aucun taux. Il faut cependant
consigner que le 24/08/2026 trois factures en euros ont bel et bien été
reprises — ce qu'adc-002 proscrit. L'opérateur l'a arbitré au motif
qu'aucune n'avait été transmise au client, et la présente décision supprime
la situation qui rendait l'arbitrage nécessaire. Voir la trace complète dans
fleet/harness/runs/2026-08-24-reprise-fac004-fac006/. - Écarts de change plus fréquents : chaque règlement en produira un. C'est attendu et sans gravité — 766 et 666 sont faits pour ça.
- Annexe des comptes : la méthode de conversion et le changement daté du 24/08/2026 sont à mentionner au titre des règles et méthodes comptables.
QA & validation
Appliqué le 24/08/2026 par la voie gated, avec répétition sur bac à sable
rafraîchi depuis la production, juge pré-gate, gate motivé et juge post-gate.
Artefacts : fleet/harness/runs/2026-08-24-facturation-usd/.
Contrôles passés : la contre-valeur en euros n'a bougé sur aucune des quatre factures ; les PDF portent « Montants exprimés en Dollars US » et un total de 3 000,00 ; les désignations et le type de ligne (prestation de services) sont intacts ; juge post-gate PASS sans dérive.
Un piège, consigné dans test/setInvoiceCurrency.ts : PUT /invoices/{id}
accepte multicurrency_code et répond 200 sans rien appliquer. Seule
l'interface change la devise, et ce changement abîme la ligne — la contre-valeur
euro dérive et doit être rétablie dans le même mouvement.
References
- erp#53 (T05 facture client) · erp#54 (amorçage du registre).
- [adc-001] autoliquidation CGI 259-1° · [adc-002] écarts de change 766/666 · [adc-011] permanence des méthodes.
- Contrat cadre du 23/04/2026 et son avenant ; pro forma PR2607-0001.
- CGI art. 289, II ; directive 2006/112/CE art. 230 ; C. com. art. L.123-22.