Retenue de garantie 5% en BTP : comment l'encoder dans Factur-X sans rejet Chorus Pro
La retenue de garantie 5% sur les marchés BTP doit apparaître sur la facture ET dans le XML Factur-X. Guide pratique : règles légales, exemple chiffré, codes EN 16931, libération de la RG et erreurs Chorus Pro à éviter.
La retenue de garantie de 5% est l'un des trois pièges qui font rejeter le plus de factures BTP sur Chorus Pro, avec l'autoliquidation TVA et les factures de situation. Mal présentée sur le PDF ou mal encodée dans le XML Factur-X, elle bloque le paiement et oblige à recommencer la procédure. Cet article explique comment la formaliser correctement, avec un exemple chiffré et l'extrait XML conforme.
Qu'est-ce que la retenue de garantie 5% ?
La retenue de garantie (RG) est une fraction du montant facturé que le maître d'ouvrage (ou le donneur d'ordre) conserve pendant une année après la réception des travaux, à titre de garantie contre d'éventuelles malfaçons. Son taux légal maximum est de 5% du montant TTC du marché, et elle est encadrée par :
- L'article 1799-1 du Code de la construction et de l'habitation pour les marchés privés
- Les articles R. 2191-32 à R. 2191-37 du Code de la commande publique pour les marchés publics
- L'article L. 111-5 du Code de la consommation pour les contrats avec un particulier
Quand la RG s'applique-t-elle ?
- Marchés publics de travaux passés par l'État, une collectivité, un hôpital, etc.
- Marchés privés dès que le contrat le prévoit (clause CCAG, CCAP, ou marché type FFB)
- Sous-traitance BTP : la RG est répercutée par le donneur d'ordre sur le sous-traitant
Quand elle ne s'applique PAS
- Le contrat ne la prévoit pas explicitement (sauf marchés publics où elle est de droit)
- L'entrepreneur a fourni une caution bancaire à première demande à la place — la RG est alors libérée immédiatement
- Vente de matériel sans pose
Exemple chiffré : facture d'un maçon sous-traitant
Sylvie est maçon, sous-traitante d'BTP Construct SAS sur un chantier de rénovation d'école. Son marché prévoit une RG de 5% sur le TTC. Comme c'est de la sous-traitance BTP, elle facture également en autoliquidation TVA. Voici ce que doit afficher sa facture pour 8 000 € HT de travaux :
| Désignation | Quantité | PU HT | Total HT |
|---|---|---|---|
| Reprise de murs porteurs — chantier école Pasteur | 1 | 8 000,00 € | 8 000,00 € |
| Total HT | 8 000,00 € | ||
| TVA 20% (autoliquidation — code AE) | 0,00 € | ||
| Total TTC | 8 000,00 € | ||
| Retenue de garantie 5% (libération sous 1 an) | − 400,00 € | ||
| Net à payer | 7 600,00 € | ||
En pied de facture, Sylvie doit ajouter la mention :
« Retenue de garantie 5% conformément à l'article 1799-1 du CCH — libération à l'issue du délai de garantie d'un an à compter de la réception des travaux. »
Sans cette mention et sans la ligne explicite « Retenue de garantie » dans le détail des montants, le donneur d'ordre est en droit de payer le TTC complet — ce qui semble bénéfique mais provoque, en pratique, une re-facturation après réception. C'est le moment où Chorus Pro se complique.
Encodage Factur-X : le code EN 16931 à utiliser
Dans le XML Factur-X, la retenue de garantie n'est pas une remise commerciale ni une déduction de TVA. C'est une retenue sur paiement qui doit apparaître au niveau du document, pas de la ligne. La norme EN 16931 prévoit pour cela un élément SpecifiedTradeAllowanceCharge avec un code de raison spécifique.
Le code à utiliser est BT-92 / Code 102 (UNTDID 5189 — « Retention »), avec un ChargeIndicator à false (c'est une déduction).
| Champ EN 16931 | Valeur pour la RG | Commentaire |
|---|---|---|
ChargeIndicator | false | C'est une déduction, pas un frais ajouté |
ActualAmount | 400.00 | Montant absolu en euros |
ReasonCode | 102 | « Retention » — UNTDID 5189 |
Reason | "Retenue de garantie 5%" | Texte libre lisible par l'humain |
CategoryTradeTax | AE | Doit reprendre le code TVA de la facture (autoliquidation ici) |
Extrait XML correct (Factur-X EN 16931)
<ram:SpecifiedTradeAllowanceCharge>
<ram:ChargeIndicator>
<udt:Indicator>false</udt:Indicator>
</ram:ChargeIndicator>
<ram:ActualAmount>400.00</ram:ActualAmount>
<ram:ReasonCode>102</ram:ReasonCode>
<ram:Reason>Retenue de garantie 5%</ram:Reason>
<ram:CategoryTradeTax>
<ram:TypeCode>VAT</ram:TypeCode>
<ram:CategoryCode>AE</ram:CategoryCode>
<ram:RateApplicablePercent>0</ram:RateApplicablePercent>
</ram:CategoryTradeTax>
</ram:SpecifiedTradeAllowanceCharge>Le bloc s'insère au niveau du document (dans ApplicableHeaderTradeSettlement), après les lignes de facture mais avant le bloc SpecifiedTradeSettlementHeaderMonetarySummation. Le montant net à payer doit refléter la RG : DuePayableAmount = TotalTTC − Retenue = 8000 − 400 = 7600.
Les 4 erreurs Chorus Pro les plus fréquentes
Erreur 1 : encoder la RG comme une remise commerciale
Beaucoup d'outils de facturation traitent la RG comme une ReasonCode = 95 (« Discount »). Chorus Pro accepte le XML mais le donneur d'ordre comptabilise une remise définitive au lieu d'une retenue temporaire — la RG ne sera jamais libérée. Solution : utiliser ReasonCode = 102 (Retention).
Erreur 2 : déduire la RG du montant HT au lieu du TTC
La RG s'applique sur le TTC (article 1799-1 CCH), même si dans une facture en autoliquidation le TTC = HT. Pour une facture standard avec TVA collectée, déduire la RG du HT sous-évalue la retenue de 20%. Le donneur d'ordre détecte l'écart et rejette ou paie un montant erroné.
Erreur 3 : oublier le CategoryTradeTax sur le bloc RG
EN 16931 impose qu'une déduction au niveau document reprenne le régime TVA appliqué. Sans ce sous-élément, Chorus Pro lève l'erreur « Cardinality violation : CategoryTradeTax required on TradeAllowanceCharge ».
Erreur 4 : facturer la libération de RG sans nouveau Factur-X
À l'issue du délai d'un an, la libération de la RG n'est pas un avoir sur la facture d'origine — c'est une nouvelle facture portant uniquement la mention « Libération de la retenue de garantie — facture n°XXXX du JJ/MM/AAAA », au format Factur-X complet. Sans nouveau dépôt PPF, le donneur d'ordre ne peut pas mandater le paiement.
L'alternative : la caution bancaire à première demande
Si vous voulez encaisser 100% du marché immédiatement, vous pouvez fournir une caution bancaire à première demande d'un montant équivalent à 5% du marché (article 1799-1 CCH). Le donneur d'ordre renonce alors à la retenue. Coût bancaire : typiquement 0,5% à 1,5% par an du montant cautionné, soit pour un marché de 100 000 € une caution de 5 000 € à environ 50 €/an.
En pratique, la caution est intéressante si :
- Vous avez besoin de la trésorerie maintenant (cas d'achats matériel à honorer)
- Le coût bancaire est inférieur au coût d'opportunité de la trésorerie immobilisée
- Votre banque vous l'accorde rapidement (encours, garanties)
Comment se passe la libération de la RG ?
Au terme du délai de garantie d'un an à compter de la réception des travaux (ou réception définitive selon le marché), vous devez émettre une facture distincte pour réclamer la RG. Cette facture porte :
- Référence à la facture initiale :
« Libération de la RG — facture n°2026-042 du 15/05/2026 » - Le montant exact de la RG retenue (400 € dans notre exemple)
- Le même régime TVA (autoliquidation si la facture initiale l'était)
- Le même format Factur-X et un dépôt Chorus Pro distinct
Si le donneur d'ordre tarde à libérer la RG, l'article 1799-1 du CCH prévoit qu'à défaut de notification de malfaçon dans les 30 jours suivant la fin du délai de garantie, la RG est réputée acquise de plein droit.
Et avec la réforme française 2026 ?
La réforme e-invoicing 2026-2027 ne change pas les règles de la RG, mais elle renforce l'exigence d'encodage XML. À partir de septembre 2027, toutes les factures BTP devront passer par une PDP ou le PPF directement, et chaque déduction document devra être structurée en EN 16931. Les outils qui se contentent d'écrire « − 5% RG » dans une cellule de tableau PDF seront incompatibles avec la réforme.
Checklist : votre facture avec retenue est-elle conforme ?
- ☐ Mention « Retenue de garantie 5% — article 1799-1 CCH » sur le PDF
- ☐ Ligne « Retenue de garantie » distincte dans le détail des montants
- ☐ Calcul sur le TTC, pas sur le HT
- ☐ Net à payer = TTC − RG (champ
DuePayableAmount) - ☐ Bloc
SpecifiedTradeAllowanceChargeau niveau document dans le XML - ☐
ReasonCode = 102(et non 95 « Discount ») - ☐
CategoryTradeTaxreprend le régime TVA (souventAEen sous-traitance BTP) - ☐ Document au format Factur-X (PDF/A-3 + XML embarqué)
- ☐ Plan de libération communiqué (date prévisionnelle)
Pour aller plus loin
La retenue de garantie est rarement seule sur une facture BTP. Elle se combine systématiquement avec d'autres mécanismes :
- L'autoliquidation TVA en sous-traitance (le code
AEet la mention 283-2 nonies CGI) - Les factures de situation sur travaux longs (cumul, références au marché — article à venir)
- Le décompte général et définitif (DGD) à la réception
InvoiceOps gère ces trois cas nativement : la RG est calculée automatiquement sur le TTC, l'XML Factur-X est encodé avec le bon ReasonCode = 102, et le suivi de libération de RG est géré dans votre tableau de bord. Plan gratuit jusqu'à 10 factures/mois pour tester sur vos chantiers en cours.