Facturation électronique et affacturage : le guide complet
L'affacturage dans le contexte de la facturation électronique est un sujet complexe. Entre les codes de type de document spécifiques, les blocs XML obligatoires, les notes conditionnelles et les règles de validation françaises... il est facile de se perdre.
Ce guide vous explique tout ce qu'il faut savoir, et comment le SDK FactPulse vous simplifie considérablement la tâche.
Pourquoi l'affacturage complique la facturation électronique
L'affacturage (ou factoring) est un mécanisme de financement courant : une entreprise cède ses créances à un factor qui paie immédiatement le fournisseur et se charge du recouvrement.
┌─────────────┐ Facture ┌─────────────┐
│ FOURNISSEUR │─────────────►│ ACHETEUR │
└──────┬──────┘ └──────┬──────┘
│ │
│ Cession de créance │ Paiement
▼ ▼
┌─────────────┐◄─────────────────────┘
│ FACTOR │
└─────────────┘
Le problème ? Une facture affacturée n'est pas une facture ordinaire. Elle doit :
- Utiliser un code de type spécifique (pas 380, mais 393, 396, etc.)
- Contenir un bloc Bénéficiaire (BG-10) identifiant le factor
- Inclure une note de subrogation (code ACC) obligatoire
- Afficher l'IBAN du factor (pas celui du fournisseur)
- Respecter les règles BR-FR-04, BR-FR-05, BR-FR-06
Sans outillage adapté, c'est un vrai casse-tête. Voyons comment ça fonctionne.
Les codes de type pour l'affacturage (BR-FR-04)
La règle BR-FR-04 définit les codes de type de document (BT-3) autorisés. Pour l'affacturage, ce ne sont pas les codes habituels :
Factures affacturées
| Code | Type de document |
|---|---|
| 393 | Facture affacturée |
| 501 | Facture auto-facturée affacturée |
Avoirs affacturés
| Code | Type de document |
|---|---|
| 396 | Avoir affacturé |
| 502 | Avoir auto-facturé affacturé |
Factures rectificatives affacturées
| Code | Type de document |
|---|---|
| 472 | Facture rectificative affacturée |
| 473 | Facture rectificative auto-facturée affacturée |
Attention : Utiliser le code 380 (facture simple) pour une facture affacturée est une erreur de conformité.
Les 4 éléments obligatoires d'une facture affacturée
1. Le type de document (BT-3)
Le code doit indiquer qu'il s'agit d'une facture affacturée :
<ram:TypeCode>393</ram:TypeCode> <!-- Facture affacturée -->
2. Le bloc Bénéficiaire (BG-10 / PayeeTradeParty)
Le factor doit être identifié comme bénéficiaire du paiement. Ce bloc est obligatoire pour les factures affacturées.
Note : Le bénéficiaire (BG-10) est renseigné UNIQUEMENT s'il est différent du vendeur.
<ram:PayeeTradeParty>
<ram:GlobalID schemeID="0009">30000000700033</ram:GlobalID> <!-- SIRET du factor -->
<ram:Name>FACTOR SAS</ram:Name>
<ram:SpecifiedLegalOrganization>
<ram:ID schemeID="0002">300000007</ram:ID> <!-- SIREN du factor -->
</ram:SpecifiedLegalOrganization>
</ram:PayeeTradeParty>
| Business Term | Donnée | Cardinalité |
|---|---|---|
| BT-59 | Nom du bénéficiaire | 1..1 |
| BT-60 | Identifiant du bénéficiaire (SIRET) | 0..1 |
| BT-61 | Identifiant légal (SIREN) | 0..1 |
3. La note de subrogation (Code ACC)
La note avec le code sujet ACC est obligatoire pour indiquer la clause de cession de créance :
<ram:IncludedNote>
<ram:Content>Cette créance a été cédée à FACTOR SAS. Tout paiement doit être effectué à l'ordre du factor. Contrat n° AFF-2025-001</ram:Content>
<ram:SubjectCode>ACC</ram:SubjectCode>
</ram:IncludedNote>
BR-FR-05 : La note ACC (Clause de subrogation factoring) est conditionnellement obligatoire pour les factures affacturées.
4. Les coordonnées bancaires du factor
L'IBAN renseigné doit être celui du factor, pas celui du fournisseur :
<ram:SpecifiedTradeSettlementPaymentMeans>
<ram:TypeCode>30</ram:TypeCode> <!-- Virement -->
<ram:PayeePartyCreditorFinancialAccount>
<ram:IBANID>FR76 3000 4000 0500 0012 3456 789</ram:IBANID>
<ram:AccountName>FACTOR SAS</ram:AccountName>
</ram:PayeePartyCreditorFinancialAccount>
</ram:SpecifiedTradeSettlementPaymentMeans>
Cohérence PDF / XML : attention aux pièges
Conformément à la norme Factur-X, toutes les informations du XML doivent apparaître dans le PDF :
- Le type "Facture affacturée" doit être visible
- Le factor doit être identifié comme bénéficiaire
- L'IBAN affiché doit être celui du factor
- La mention de subrogation doit être lisible
Exemple de mention dans le PDF :
Règlement à effectuer à :
FACTOR SAS
SIRET : 300 000 007 00033
IBAN : FR76 3000 4000 0500 0012 3456 789Cette créance a été cédée à FACTOR SAS. Tout paiement doit être effectué à l'ordre du factor.
Comment FactPulse simplifie tout ça
Face à cette complexité, le SDK Python facture_electronique de FactPulse gère automatiquement tous ces cas. Toutes les règles métier (BR-FR-04, BR-FR-05, BG-10) sont validées par les modèles Pydantic.
Ce que le SDK fait pour vous
| Élément | Action automatique |
|---|---|
| Type de document (BT-3) | Le code 393 est inséré automatiquement |
| Note ACC (BR-FR-05) | Validation que la note ACC est présente |
| Bénéficiaire (BG-10) | Validation et génération du bloc XML |
| IBAN du factor | Utilisation automatique de l'IBAN du bénéficiaire |
| SIREN auto-extrait | Le SIREN est extrait du SIRET si non fourni |
| Validation BR-FR-06 | Unicité des codes de notes vérifiée |
Exemple d'implémentation
from decimal import Decimal
from facture_electronique.models import (
FactureFacturX,
Beneficiaire,
Fournisseur,
Destinataire,
References,
TypeFacture,
Note,
# ... autres imports
)
# 1. Définir le factor comme bénéficiaire
factor = Beneficiaire(
nom="FACTOR SAS",
siret="30000000700033",
iban="FR7630004000031234567890143",
bic="BNPAFRPP",
)
# 2. Inclure la note ACC (obligatoire)
notes = [
Note(code_sujet="PMT", contenu="Indemnité forfaitaire: 40 EUR"),
Note(code_sujet="PMD", contenu="Pénalités de retard: 3x taux légal"),
Note(code_sujet="AAB", contenu="Pas d'escompte"),
Note(
code_sujet="ACC", # Note de subrogation
contenu="Cette créance a été cédée à FACTOR SAS. "
"Tout paiement doit être effectué à l'ordre du factor."
),
]
# 3. Créer la facture avec le type affacturé
facture = FactureFacturX(
numero_facture="FA-AFF-2025-001",
date_facture="2025-01-15",
# Type 393 = Facture affacturée
references=References(
type_facture=TypeFacture.FACTURE_AFFACTUREE,
# ...
),
# Le factor est le bénéficiaire
beneficiaire=factor,
# Notes incluant ACC
notes=notes,
# ... fournisseur, destinataire, lignes, etc.
)
Gestion automatique des erreurs
Le SDK rejette les factures non conformes avec des messages explicites :
# ❌ Facture affacturée sans note ACC
facture = FactureFacturX(
references=References(type_facture=TypeFacture.FACTURE_AFFACTUREE),
beneficiaire=factor,
notes=[], # Pas de note ACC !
)
# → ValueError: "BR-FR-05 : La note ACC (clause de subrogation)
# est obligatoire pour les factures affacturées (type 393)."
# ❌ Facture affacturée sans bénéficiaire
facture = FactureFacturX(
references=References(type_facture=TypeFacture.FACTURE_AFFACTUREE),
beneficiaire=None, # Pas de factor !
)
# → ValueError: "BG-10 : Le bénéficiaire (factor) est obligatoire
# pour les factures affacturées (type 393)."
Tous les types affacturés supportés
from facture_electronique.models import TypeFacture
# Le SDK reconnaît automatiquement les types affacturés
TypeFacture.FACTURE_AFFACTUREE.est_affacture() # True (393)
TypeFacture.AVOIR_AFFACTURE.est_affacture() # True (396)
TypeFacture.FACTURE_AUTOFACTUREE_AFFACTUREE.est_affacture() # True (501)
TypeFacture.AVOIR_AUTOFACTURE_AFFACTURE.est_affacture() # True (502)
# Les factures simples ne sont pas affacturées
TypeFacture.FACTURE.est_affacture() # False (380)
Points d'attention pour Chorus Pro (B2G)
"En cas d'affacturage par subrogation, il convient de renseigner les mentions légales associées à la subrogation dans l'image PDF de la facture. Dans ce cas, l'identifiant bancaire renseigné dans la facture est celui du factor."
— Factur-X 1.08, §BG-10
Profil EXTENDED : le code rôle DL
Dans le profil EXTENDED-CTC-FR, on peut préciser le rôle du bénéficiaire avec le code DL (Deliverer) qui indique explicitement que le bénéficiaire est un affactureur :
<ram:PayeeTradeParty>
<ram:RoleCode>DL</ram:RoleCode> <!-- Affactureur -->
<ram:GlobalID schemeID="0009">30000000700033</ram:GlobalID>
<ram:Name>FACTOR SAS</ram:Name>
</ram:PayeeTradeParty>
Le SDK FactPulse ajoute automatiquement ce code en profil EXTENDED.
Règles de validation à retenir
| Règle | Description |
|---|---|
| BR-FR-04 | Le type de document doit être parmi les codes autorisés (393, 396, 501, 502, 472, 473 pour l'affacturage) |
| BR-FR-05 | La note ACC est obligatoire pour les factures affacturées |
| BR-FR-06 | Les codes de notes (PMD, PMT, AAB, ACC, TXD) ne doivent être présents qu'une seule fois chacun |
Références normatives
| Norme | Description |
|---|---|
| Factur-X 1.08 | Spécification du format hybride PDF/XML — §BG-10 Payee |
| XP Z12-012 | Formats et Profils des messages Factures (AFNOR) — BR-FR-04, BR-FR-05 |
| EN 16931-1:2017 | Norme Sémantique Européenne — BG-10 PAYEE |
Liens utiles
- Spécifications Factur-X — FNFE-MPE
- Spécifications externes B2B — DGFiP
- Validateur Factur-X gratuit — FactPulse
En résumé
L'affacturage dans la facturation électronique nécessite de respecter plusieurs contraintes :
- Type de document spécifique (393, 396, etc.)
- Bloc Bénéficiaire (BG-10) avec les identifiants du factor
- Note ACC pour la clause de subrogation
- IBAN du factor dans les coordonnées bancaires
- Cohérence PDF/XML sur tous ces éléments
Le SDK FactPulse compile toutes ces règles métier et les valide automatiquement, vous permettant de vous concentrer sur votre métier plutôt que sur la conformité normative.
Guide basé sur les normes Factur-X 1.08 et XP Z12-012