feat(erp): facturation KissMetrics en dollars, part différée M3 retrouvée, et le format de lettre commerciale (#97)
Co-authored-by: Gabriel Radureau <[email protected]>
This commit was merged in pull request #97.
This commit is contained in:
@@ -1,66 +1,136 @@
|
||||
---
|
||||
id: adc-006
|
||||
title: "KM retainer currency & composition (USD multicurrency vs EUR-at-settlement; line structure)"
|
||||
status: Proposed
|
||||
decided: null
|
||||
effective_from: null
|
||||
title: "Retainer KissMetrics : factures libellées en dollars, une facture par part, écarts de change en 766/666"
|
||||
status: Accepted
|
||||
decided: 2026-08-24
|
||||
effective_from: 2026-08-24
|
||||
effective_until: null
|
||||
supersedes: null
|
||||
superseded_by: null
|
||||
---
|
||||
|
||||
# adc-006 — KM retainer currency & composition (Proposed)
|
||||
|
||||
> **Proposed — operator input needed.** This stub reserves the decision slot
|
||||
> per the PRD [compliance › ADC seed table](https://gitea.arcodange.lab/arcodange-org/factory/src/branch/main/vibe/PRD/ai-back-office/compliance.md#accounting-decision-records-adc)
|
||||
> ("blocks erp#53 wiring; operator input needed"). Agents may enrich the
|
||||
> draft with sources and alternatives; **only the operator Accepts**.
|
||||
# adc-006 — Le retainer KissMetrics se facture en dollars
|
||||
|
||||
## Context
|
||||
|
||||
The recurring template id=1 carries 5100 while the actual May/June drafts were
|
||||
2×2145.92 + 2×2575.11 EUR; the 2026-07-11 regularization surfaced a probable
|
||||
**USD-denominated retainer** ($5,500/mo = $2,500 net-30 + $3,000 deferred
|
||||
+3 months — erp#53; contract WIP `test/km_contract.json` in the trunk). FX
|
||||
deltas have already been booked twice under adc-002. The invoicing method must
|
||||
be stable before T05 automation wires it (permanence des méthodes — not
|
||||
improvised per month).
|
||||
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.
|
||||
|
||||
Le client **paie en dollars** ; l'argent **arrive en euros**, Wise convertissant
|
||||
à la réception puisqu'il ne détient qu'un solde en euros. Les montants reçus
|
||||
varient donc de 2 147,00 à 2 195,97 € pour une prestation à prix fixe.
|
||||
|
||||
La méthode antérieure consistait à faire coïncider la facture avec l'encaissement
|
||||
— à « matcher » l'un sur l'autre. Elle représente fidèlement ce qui est entré en
|
||||
banque, et c'est sa qualité : les factures réglées portent au centime près ce qui
|
||||
a été reçu. Sa limite apparaît sur une facture NON encore réglée : le montant
|
||||
affiché n'est alors qu'une contre-valeur provisoire, et la note devait l'écrire —
|
||||
« le montant effectivement dû en euros sera arrêté au taux du jour du règlement ».
|
||||
Le 24 août 2026, trois factures ont dû être ajustées après coup pour rejoindre le
|
||||
virement reçu : 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) — 51,13 € d'encaissement qui manquaient
|
||||
aux livres.
|
||||
|
||||
## Decision
|
||||
|
||||
**To arbitrate — no decision recorded.** Open questions (erp#53):
|
||||
**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.
|
||||
|
||||
1. USD multicurrency invoices vs EUR-at-settlement invoicing?
|
||||
2. One invoice with two lines vs two invoices per month (net-30 part /
|
||||
deferred part)?
|
||||
3. Écarts de change policy interaction with adc-002 (would a USD-multicurrency
|
||||
choice narrow or supersede it for future invoices)?
|
||||
**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
|
||||
|
||||
To gather with the full draft: CGI art. 289 (invoice currency rules), PCG FX
|
||||
treatment for multicurrency receivables, Dolibarr multicurrency module
|
||||
implications. Nothing asserted here yet.
|
||||
**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
|
||||
|
||||
None yet — the alternatives above are open; each needs its why-it-loses
|
||||
written before acceptance.
|
||||
**Rester en euros avec contre-valeur au règlement** — c'est l'état antérieur, et
|
||||
il n'est pas absurde : il fait dire à la facture ce qui est réellement entré en
|
||||
banque. Rejeté pour les factures NON réglées seulement, où il n'a rien à
|
||||
représenter encore : le montant affiché y est provisoire, et l'ajustement après
|
||||
coup a coûté trois reprises en une 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
|
||||
|
||||
- **Blocks erp#53** (T05 monthly client invoice at A2): wiring waits for this
|
||||
record to be Accepted.
|
||||
- May supersede or narrow adc-002's scope for future invoices.
|
||||
- Annexe: revenue-recognition/currency method disclosure once Accepted.
|
||||
- **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
|
||||
|
||||
Planned per erp#53: dry-run parity (first agent-fired invoice == its manual
|
||||
twin), then one real month through the gate — after acceptance.
|
||||
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 client invoice; decision D3) · erp#54 (register seeding).
|
||||
- PRD compliance.md § ADC seed table (adc-006).
|
||||
- adc-002 (current FX method) · trunk WIP `test/km_contract.json`.
|
||||
- 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.
|
||||
|
||||
Reference in New Issue
Block a user