ediverse Explorer la plateforme

À la une PEPPOL BIS Billing 3.0 L’obligation européenne d’e-invoicing arrive : France sept 2026, Belgique janv 2026, Allemagne 2025.

E-faktura — Bankgirot / Nets, la facture consommateur

E-faktura est le système historique suédois de facturation électronique pour les particuliers, lancé en 1995 par Bankgirot. Avec ~12 millions d'utilisateurs et ~250 millions de factures par an, c'est le réseau B2C le plus mature d'Europe. À ne pas confondre avec PEPPOL (B2B/B2G) : les deux coexistent sans recouvrement fonctionnel.

Historique — 30 ans de Bankgirot

Le système E-faktura est le fruit de 30 ans d'innovation paiements en Suède :

  • 1959 : création de Bankgirocentralen (BgC) par les banques suédoises pour gérer les virements interbancaires domestiques.
  • 1971 : introduction du système Bankgiro (numéros 7-8 chiffres) pour les paiements de factures, alternative à Plusgiro (poste).
  • 1995 : lancement de E-faktura BgC — première offre mondiale de "facture présentée dans la banque en ligne", pionnier de l'EBPP (Electronic Bill Presentment and Payment).
  • 2005 : intégration mobile via les apps bancaires (BankID nécessaire pour signature).
  • 2014 : renommage en simplement "E-faktura", ouverture aux acteurs étrangers (Klarna, PayEx) pour la présentation B2C.
  • 2022 : acquisition de Bankgirot par Nets Group (filiale Mastercard depuis 2021) pour ~9,5 Mds SEK. Voir section suivante.

Acquisition par Nets en 2022

L'acquisition de Bankgirot par Nets en 2022 a marqué un tournant structurel pour le paysage paiement nordique :

  • Vendeur : consortium de 7 banques suédoises (SEB, Swedbank, Handelsbanken, Nordea, Danske Bank, Länsförsäkringar Bank, Skandiabanken) — anciens actionnaires historiques.
  • Acheteur : Nets Group, racheté par Mastercard en 2021 (deal ~7,3 Mds USD). Création d'un acteur paneuropéen Nets couvrant DK, NO, SE, FI.
  • Périmètre : 100% des actifs Bankgirot — infrastructure de paiement BG, E-faktura, traitement OCR, réconciliation Autogiro.
  • Continuité opérationnelle : aucun changement utilisateur final, marque "Bankgirot" maintenue. Le siège reste à Stockholm.
  • Conséquences réglementaires : autorisation par Konkurrensverket (autorité de la concurrence) en avril 2022, conditionnelle à l'engagement de non-discrimination entre banques.
  • Vision Nets : consolider E-faktura SE avec eBoks (DK), Vipps (NO), MobilePay (DK/FI) pour créer une plateforme nordique unifiée — projet "Nordic Hub" 2025-2027.

Fonctionnement E-faktura

Le flux E-faktura suit un modèle 3-corner :

  1. Émetteur : entreprise B2C (Telia, Vattenfall, Ellevio, Apotek, ICA, SJ AB) émet la facture dans son ERP, l'envoie au format ITSME (Internet Transaction Security Multipart Encoding) à Bankgirot via une connexion SFTP/HTTPS sécurisée.
  2. Hub Bankgirot : route la facture vers la banque du destinataire (lookup par numéro de contrat E-faktura = identifiant client + n° bancaire).
  3. Banque réceptrice : présente la facture dans l'app/internet banking du destinataire, qui peut approuver d'un clic (signature BankID), modifier le montant ou refuser.
  4. Paiement : à l'échéance, la banque débite automatiquement le compte du destinataire et crédite l'émetteur via Bankgiro (compensation J+1).
  5. Confirmation : Bankgirot renvoie un accusé de paiement à l'émetteur, qui peut clôturer la créance dans son ERP.

Intégration avec les banques SE

E-faktura est présent dans 100% des banques de détail suédoises raccordées à Bankgirot :

BanquePart de marché B2CApp
Swedbank ~28% Swedbank Mobilbanken
Handelsbanken ~17% Handelsbanken Mobilbanken
SEB ~20% SEB Privat-App
Nordea ~15% Nordea Mobile
Länsförsäkringar Bank ~5% LF Mobilbank
Skandiabanken ~3% Skandia App
ICA Banken ~5% ICA Bank App
Resurs Bank, Klarna Bank, autres ~7% Apps respectives

Coexistence avec PEPPOL B2B

E-faktura et PEPPOL coexistent sans recouvrement fonctionnel — chacun cible un segment différent :

  • E-faktura : B2C exclusivement, présentation dans l'internet banking de personnes physiques, signature BankID pour approbation. Pas de cycle de validation B2B.
  • PEPPOL : B2B / B2G via réseau eDelivery AS4, adressé aux ERP / systèmes de gestion. Pas de présentation aux personnes physiques.
  • Pas de migration : contrairement au scénario Norvégien (eFaktura B2C sur EHF en cours d'unification), la Suède ne planifie pas de fusion. Les deux systèmes resteront indépendants à moyen terme.
  • Ponts éventuels : certains éditeurs ERP (Visma, Fortnox) proposent un mode dual qui émet la facture en PEPPOL pour le B2B et en E-faktura pour le B2C selon le destinataire. Pas de standardisation.

OCR Bankgirot — référence structurée

Au cœur du système Bankgirot/E-faktura : la référence OCR (Optical Character Recognition reference, en réalité plus proche d'un identifiant Modulo 10), équivalent suédois de la communication structurée belge ou de la référence créancier SEPA.

  • Longueur : 2 à 25 chiffres (généralement 8-12), dernier digit = checksum.
  • Algorithme : "Modulo 10 vikt 1212" (variante du Luhn avec pondération alternée 1-2-1-2 depuis la droite).
  • Variante longue : certains émetteurs utilisent le format "OCR avec longueur" (un digit indique la longueur totale, permettant un contrôle plus strict).
  • Utilisation : imprimée sur la facture papier (ligne OCR au bas), reproduite automatiquement par les apps bancaires lors du paiement, permet à l'émetteur le rapprochement automatique paiement → créance.
python ocr-bankgirot-checksum.py
# Calcul d'une référence OCR Bankgirot suédoise (algorithme Modulo 10 vikt 1212)
# Référence : longueur 1-25 chiffres + 1 checksum + (optionnel) longueur
# Exemple : facture 123456 chez Telia
#   Référence interne entreprise: 123456
#   On veut ajouter un checksum Luhn-like ("Modulo 10 vikt 1212")

def calculate_ocr_checksum(ref):
    """Bankgirot's OCR checksum — modulo 10 with alternating 1-2-1-2 weighting"""
    digits = [int(d) for d in str(ref)]
    weighted_sum = 0
    for i, d in enumerate(reversed(digits)):
        # Position 1 (le plus à droite) = poids 2, position 2 = poids 1, etc.
        weight = 2 if i % 2 == 0 else 1
        weighted = d * weight
        # Si > 9, somme des deux digits (équivaut à -9)
        weighted_sum += weighted if weighted < 10 else weighted - 9
    return (10 - weighted_sum % 10) % 10

# Exemples
ref = "123456"
checksum = calculate_ocr_checksum(ref)
print(f"OCR référence : {ref}{checksum}")
# Sortie : OCR référence : 1234562

# Variante avec longueur encodée (référence "longue" Bankgirot)
ref = "98765432"  # 8 digits
checksum = calculate_ocr_checksum(ref + str(len(ref) + 1))  # +1 pour le checksum
length = (len(ref) + 1 + 1) % 10  # longueur totale (digit final)
print(f"OCR longue : {ref}{length}{checksum}")

Liens transverses