Format TEIF et Spécifications Techniques de la Facturation Électronique en Tunisie

Équipe Noqta
Par Équipe Noqta ·

Chargement du lecteur de synthèse vocale...

La facturation électronique en Tunisie repose sur un format de données standardisé appelé TEIF — Tunisian Electronic Invoice Format. Comprendre ce format est indispensable pour tout développeur ou responsable technique chargé d'intégrer la plateforme El Fatoora dans un système d'information. Ce guide couvre la structure XML, les champs obligatoires, la signature numérique, le QR code et les deux modes d'intégration disponibles.

Ce tutoriel est le cinquième épisode de notre série Facturation Électronique en Tunisie. Il suppose que vous êtes déjà inscrit sur la plateforme El Fatoora. Si ce n'est pas le cas, consultez d'abord l'épisode 4 : Guide d'inscription étape par étape.


Qu'est-ce que le TEIF ?

Le TEIF (Tunisian Electronic Invoice Format) est le standard national tunisien pour l'échange électronique de factures entre entreprises et entre entreprises et administrations (B2B et B2G). Il est défini par Tunisie TradeNet (TTN) en coordination avec la Direction Générale des Impôts (DGI) et l'Agence Nationale de Certification Électronique (ANCE).

Le TEIF s'appuie sur le langage XML (eXtensible Markup Language) et est gouverné par un schéma XSD (XML Schema Definition) qui définit la structure obligatoire et les règles de validation de chaque document.

Versions actuelles :

  • Version 1.8.7 : version stable en production depuis janvier 2026
  • Version 1.9.x : en cours de finalisation, non encore déployée en production

Le TEIF est aligné sur les standards internationaux de facturation électronique, notamment UBL 2.1 (Universal Business Language) et CII (Cross Industry Invoice), tout en intégrant les spécificités fiscales tunisiennes (TVA tunisienne, droits de timbre, taxation sur les articles soumis à régime spécial).


Structure du schéma XML/XSD

Un document TEIF est un fichier XML structuré en plusieurs sections hiérarchiques. Voici la structure de haut niveau :

<?xml version="1.0" encoding="UTF-8"?>
<Invoice xmlns="urn:tn:gov:dgi:teif:1.8"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="urn:tn:gov:dgi:teif:1.8 TEIF_v1.8.7.xsd">
 
  <!-- Section 1 : En-tête de la facture -->
  <Header>
    <InvoiceID>FAC-2026-001234</InvoiceID>
    <IssueDate>2026-02-22</IssueDate>
    <IssueTime>14:30:00</IssueTime>
    <InvoiceTypeCode>380</InvoiceTypeCode>
    <DocumentCurrencyCode>TND</DocumentCurrencyCode>
    <TaxCurrencyCode>TND</TaxCurrencyCode>
  </Header>
 
  <!-- Section 2 : Parties (émetteur et destinataire) -->
  <Parties>
    <Supplier>...</Supplier>
    <Customer>...</Customer>
  </Parties>
 
  <!-- Section 3 : Lignes de facturation -->
  <InvoiceLines>
    <InvoiceLine>...</InvoiceLine>
  </InvoiceLines>
 
  <!-- Section 4 : Totaux fiscaux -->
  <TaxTotal>...</TaxTotal>
 
  <!-- Section 5 : Montants globaux -->
  <LegalMonetaryTotal>...</LegalMonetaryTotal>
 
  <!-- Section 6 : Signature numérique (ajoutée après génération) -->
  <Signature>...</Signature>
 
  <!-- Section 7 : Cachet électronique visible (QR Code) -->
  <VisibleElectronicSeal>...</VisibleElectronicSeal>
 
</Invoice>

Champs obligatoires et règles de validation

Le schéma TEIF distingue trois niveaux de champs : obligatoires (M — Mandatory), conditionnels (C — Conditional) et optionnels (O — Optional).

Section Header — Champs obligatoires

ChampTypeDescriptionExemple
InvoiceIDString (max 50)Numéro unique de la factureFAC-2026-001234
IssueDateDate (YYYY-MM-DD)Date d'émission2026-02-22
IssueTimeTime (HH:MM:SS)Heure d'émission14:30:00
InvoiceTypeCodeCode (3 chiffres)Type de document380 (facture), 381 (avoir)
DocumentCurrencyCodeISO 4217Devise de la factureTND
DueDateDateDate d'échéance de paiement2026-03-22

Codes de type de document

CodeType de document
380Facture commerciale standard
381Avoir (note de crédit)
383Note de débit
386Acompte / facture de prépaiement
389Auto-facturation

Section Supplier (Émetteur) — Champs obligatoires

<Supplier>
  <PartyIdentification>
    <ID schemeID="TN_MF">12345678A000000</ID> <!-- Matricule fiscal -->
  </PartyIdentification>
  <PartyName>
    <Name>Société Exemple SARL</Name>
  </PartyName>
  <PostalAddress>
    <StreetName>Avenue Habib Bourguiba</StreetName>
    <CityName>Tunis</CityName>
    <PostalZone>1000</PostalZone>
    <CountrySubentity>Tunis</CountrySubentity>
    <Country>
      <IdentificationCode>TN</IdentificationCode>
    </Country>
  </PostalAddress>
  <TaxScheme>
    <ID>TVA</ID>
    <TaxTypeCode>VAT</TaxTypeCode>
  </TaxScheme>
</Supplier>

Règles importantes :

  • Le schemeID="TN_MF" est obligatoire pour le matricule fiscal tunisien
  • L'adresse doit correspondre exactement à celle déclarée à la DGI
  • Le code pays doit être TN pour les entreprises tunisiennes

Section InvoiceLine — Structure d'une ligne

<InvoiceLine>
  <ID>1</ID> <!-- Numéro séquentiel de la ligne -->
  <InvoicedQuantity unitCode="C62">10</InvoicedQuantity>
  <LineExtensionAmount currencyID="TND">500.000</LineExtensionAmount>
  <Item>
    <Name>Prestation de développement web</Name>
    <SellersItemIdentification>
      <ID>PROD-001</ID>
    </SellersItemIdentification>
    <ClassifiedTaxCategory>
      <ID>S</ID> <!-- S=Standard, Z=Zéro, E=Exonéré -->
      <Percent>19</Percent>
      <TaxScheme>
        <ID>TVA</ID>
      </TaxScheme>
    </ClassifiedTaxCategory>
  </Item>
  <Price>
    <PriceAmount currencyID="TND">50.000</PriceAmount>
    <BaseQuantity unitCode="C62">1</BaseQuantity>
  </Price>
</InvoiceLine>

Taux de TVA tunisiens applicables

CodeTauxApplication
S (Standard)19%Taux général
S (Réduit 1)13%Services financiers, assurances
S (Réduit 2)7%Produits alimentaires de base, médicaments
Z (Zéro)0%Exportations, produits exonérés
E (Exonéré)-Secteurs spécifiques exonérés par la loi

Intégration de la signature numérique

La signature numérique est le mécanisme qui garantit l'authenticité et l'intégrité d'une facture TEIF. Elle est basée sur le standard XMLDSig (XML Digital Signature) du W3C, en utilisant l'algorithme RSA-SHA256.

Comment la signature est intégrée dans le XML

La signature est ajoutée dans la section <Signature> du document XML après la génération du contenu de la facture :

<Signature Id="TEIF-SIG-001">
  <SignedInfo>
    <CanonicalizationMethod
      Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
    <SignatureMethod
      Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/>
    <Reference URI="">
      <Transforms>
        <Transform
          Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
      </Transforms>
      <DigestMethod
        Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>
      <DigestValue>
        <!-- Hash SHA256 du document canonicalisé -->
        7H3fKpL2mN9oQr1sT4uVwX6yZ8aB0cD2eF4gH6iJ8kL=
      </DigestValue>
    </Reference>
  </SignedInfo>
  <SignatureValue>
    <!-- Valeur de la signature RSA encodée en Base64 -->
    MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA...
  </SignatureValue>
  <KeyInfo>
    <X509Data>
      <X509Certificate>
        <!-- Certificat TUNTRUST en Base64 -->
        MIIDpDCCAoygAwIBAgIUX7k2Y...
      </X509Certificate>
    </X509Data>
  </KeyInfo>
</Signature>

Processus de signature en 4 étapes

  1. Génération du XML de la facture (sans la section Signature)
  2. Canonicalisation du document XML selon l'algorithme C14N
  3. Calcul du hash SHA-256 du document canonicalisé
  4. Chiffrement du hash avec la clé privée du certificat TUNTRUST → valeur de signature

La vérification de la signature par TTN suit le processus inverse : recalcul du hash et déchiffrement de la signature avec la clé publique du certificat.

Important : La signature invalide toute modification ultérieure du document. Une facture modifiée après signature doit être resignée.


Génération du QR Code (Cachet Électronique Visible)

Le Cachet Électronique Visible (CEV) est un QR code imprimé sur la facture qui permet à tout tiers (client, auditeur, administration fiscale) de vérifier rapidement l'authenticité de la facture en scannant le code.

Contenu encodé dans le QR Code

Le QR code contient une URL de vérification pointant vers le portail El Fatoora, avec les paramètres suivants encodés :

ParamètreDescription
iidIdentifiant unique TTN de la facture (hash)
sidIdentifiant du fournisseur (matricule fiscal)
dtDate et heure d'émission
amtMontant total TTC
sigSignature de contrôle (hash tronqué)

Exemple d'URL encodée dans le QR code :

https://verify.elfatoora.tn/v?iid=a3f7e2b1c9d4&sid=12345678A000000&dt=20260222143000&amt=619.000&sig=f4e2a1b3

Intégration dans le XML TEIF

<VisibleElectronicSeal>
  <QRCode format="QR_CODE" version="2">
    <!-- Données du QR code encodées en Base64 -->
    aHR0cHM6Ly92ZXJpZnkuZWxmYXRvb3JhLnRuL3Y/...
  </QRCode>
  <SealDescription>Facture électronique certifiée TTN</SealDescription>
  <SealDate>2026-02-22T14:30:00</SealDate>
</VisibleElectronicSeal>

Le QR code doit être généré après la signature numérique, car il contient une référence au hash de la facture signée.


Modes d'intégration : Web Mode vs EDI Mode

Web Mode

Dans le Web Mode, le processus de facturation se déroule entièrement via l'interface web du portail El Fatoora :

  1. L'utilisateur se connecte sur elfatoora.tn
  2. Il saisit les données de la facture dans un formulaire
  3. Le portail génère le XML TEIF automatiquement
  4. L'utilisateur signe électroniquement via son certificat (ou Mobile-ID)
  5. La facture est transmise et validée en temps réel

Avantages : Aucun développement, mise en production immédiate Limites : Pas d'automatisation, saisie manuelle uniquement

EDI Mode (API)

Dans le EDI Mode, votre système d'information génère les factures TEIF et les soumet automatiquement via l'API REST de TTN :

Flux d'intégration :

Votre ERP/CRM
    │
    ▼ (génère XML TEIF)
Middleware de signature
    │
    ▼ (XML signé)
API TTN (HTTPS/REST)
    │
    ▼ (validation + horodatage)
Plateforme El Fatoora ──► DGI (déclaration fiscale automatique)
    │
    ▼ (accusé de réception)
Votre système (stockage + archivage)

Endpoints API TTN (EDI Mode)

EndpointMéthodeDescription
/api/v1/auth/tokenPOSTObtenir un token d'accès OAuth2
/api/v1/invoicesPOSTSoumettre une nouvelle facture
/api/v1/invoices/{id}GETRécupérer le statut d'une facture
/api/v1/invoices/{id}/ackGETTélécharger l'accusé de réception
/api/v1/invoices/{id}/pdfGETTélécharger la version PDF
/api/v1/invoices/searchGETRechercher des factures

URL de base :

  • Sandbox : https://api-sandbox.elfatoora.tn
  • Production : https://api.elfatoora.tn

Cycle de vie d'une facture

Une facture TEIF passe par plusieurs statuts tout au long de son cycle de vie :

CREATED → SIGNED → SUBMITTED → VALIDATING → VALID
                                    │
                                    └── INVALID (avec code d'erreur)
StatutDescriptionAction requise
CREATEDXML généré, non encore signéSigner le document
SIGNEDDocument signé, non encore soumisSoumettre à l'API
SUBMITTEDReçu par TTN, validation en coursAttendre
VALIDATINGVérification en cours (< 30 secondes)Attendre
VALIDFacture acceptée, archivéeConserver l'accusé
INVALIDRejetée pour non-conformitéCorriger et resoumettre
CANCELLEDAnnulée par émission d'un avoirVérifier l'avoir associé

Archivage des factures

La réglementation tunisienne impose une durée d'archivage minimale de 5 ans pour toutes les factures électroniques. TTN propose un service d'archivage géré avec les tarifs suivants :

ServiceTarif
Stockage XML/données0,190 DT par tranche de 50 Ko
Copie PDF de la facture0,250 DT par unité
Copie XML de la facture0,250 DT par unité
Consultation via portailIncluse dans l'abonnement
Export d'archivesSur demande, tarif variable

Calcul estimatif : Un fichier XML TEIF moyen pèse entre 5 et 15 Ko selon le nombre de lignes. Pour une entreprise émettant 500 factures/mois, le coût d'archivage représente environ 0,95 à 2,85 DT/mois, ce qui est négligeable.

Options d'archivage :

  1. Archivage TTN (recommandé) : TTN gère la conservation, la sécurité et la disponibilité
  2. Archivage propre : Vous conservez les fichiers XML et PDF sur vos propres serveurs, à condition de respecter les normes de sécurité DGI
  3. Archivage hybride : TTN + copie locale synchronisée

Exemple complet d'une facture TEIF

Voici une facture simple mais complète au format TEIF 1.8.7, pour une prestation de service avec TVA à 19% :

<?xml version="1.0" encoding="UTF-8"?>
<Invoice xmlns="urn:tn:gov:dgi:teif:1.8"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="urn:tn:gov:dgi:teif:1.8 TEIF_v1.8.7.xsd">
 
  <Header>
    <InvoiceID>FAC-2026-001234</InvoiceID>
    <IssueDate>2026-02-22</IssueDate>
    <IssueTime>14:30:00</IssueTime>
    <InvoiceTypeCode>380</InvoiceTypeCode>
    <DocumentCurrencyCode>TND</DocumentCurrencyCode>
    <TaxCurrencyCode>TND</TaxCurrencyCode>
    <DueDate>2026-03-22</DueDate>
    <Note>Facture pour services de développement web — Projet NoqtaApp v2</Note>
  </Header>
 
  <Parties>
    <Supplier>
      <PartyIdentification>
        <ID schemeID="TN_MF">12345678A000000</ID>
      </PartyIdentification>
      <PartyName>
        <Name>Tech Solutions SARL</Name>
      </PartyName>
      <PostalAddress>
        <StreetName>12 Rue des Entrepreneurs</StreetName>
        <CityName>Tunis</CityName>
        <PostalZone>1002</PostalZone>
        <CountrySubentity>Tunis</CountrySubentity>
        <Country><IdentificationCode>TN</IdentificationCode></Country>
      </PostalAddress>
      <Contact>
        <Telephone>+216 71 000 000</Telephone>
        <ElectronicMail>facturation@tech-solutions.tn</ElectronicMail>
      </Contact>
    </Supplier>
 
    <Customer>
      <PartyIdentification>
        <ID schemeID="TN_MF">98765432B000111</ID>
      </PartyIdentification>
      <PartyName>
        <Name>Client Entreprise SA</Name>
      </PartyName>
      <PostalAddress>
        <StreetName>45 Avenue de la République</StreetName>
        <CityName>Sfax</CityName>
        <PostalZone>3000</PostalZone>
        <CountrySubentity>Sfax</CountrySubentity>
        <Country><IdentificationCode>TN</IdentificationCode></Country>
      </PostalAddress>
    </Customer>
  </Parties>
 
  <InvoiceLines>
    <InvoiceLine>
      <ID>1</ID>
      <InvoicedQuantity unitCode="HUR">20</InvoicedQuantity>
      <LineExtensionAmount currencyID="TND">1000.000</LineExtensionAmount>
      <Item>
        <Name>Développement front-end React</Name>
        <ClassifiedTaxCategory>
          <ID>S</ID>
          <Percent>19</Percent>
          <TaxScheme><ID>TVA</ID></TaxScheme>
        </ClassifiedTaxCategory>
      </Item>
      <Price>
        <PriceAmount currencyID="TND">50.000</PriceAmount>
        <BaseQuantity unitCode="HUR">1</BaseQuantity>
      </Price>
    </InvoiceLine>
 
    <InvoiceLine>
      <ID>2</ID>
      <InvoicedQuantity unitCode="HUR">10</InvoicedQuantity>
      <LineExtensionAmount currencyID="TND">400.000</LineExtensionAmount>
      <Item>
        <Name>Intégration API et tests</Name>
        <ClassifiedTaxCategory>
          <ID>S</ID>
          <Percent>19</Percent>
          <TaxScheme><ID>TVA</ID></TaxScheme>
        </ClassifiedTaxCategory>
      </Item>
      <Price>
        <PriceAmount currencyID="TND">40.000</PriceAmount>
        <BaseQuantity unitCode="HUR">1</BaseQuantity>
      </Price>
    </InvoiceLine>
  </InvoiceLines>
 
  <TaxTotal>
    <TaxAmount currencyID="TND">266.000</TaxAmount>
    <TaxSubtotal>
      <TaxableAmount currencyID="TND">1400.000</TaxableAmount>
      <TaxAmount currencyID="TND">266.000</TaxAmount>
      <TaxCategory>
        <ID>S</ID>
        <Percent>19</Percent>
        <TaxScheme><ID>TVA</ID></TaxScheme>
      </TaxCategory>
    </TaxSubtotal>
  </TaxTotal>
 
  <LegalMonetaryTotal>
    <LineExtensionAmount currencyID="TND">1400.000</LineExtensionAmount>
    <TaxExclusiveAmount currencyID="TND">1400.000</TaxExclusiveAmount>
    <TaxInclusiveAmount currencyID="TND">1666.000</TaxInclusiveAmount>
    <PayableAmount currencyID="TND">1666.000</PayableAmount>
  </LegalMonetaryTotal>
 
  <!-- Sections Signature et QR Code ajoutées par le processus de signature -->
 
</Invoice>

Points d'attention dans cet exemple :

  • Les montants utilisent 3 décimales (format DT tunisien : 1400.000)
  • Le code unité HUR correspond aux heures (selon la norme UN/ECE 20)
  • Les montants de la ligne (LineExtensionAmount) sont hors TVA
  • TaxInclusiveAmount = TaxExclusiveAmount + TaxAmount (1400 + 266 = 1666)

Points de contrôle avant soumission

Avant de soumettre une facture TEIF, vérifiez systématiquement ces points :

  • Validation XSD réussie (aucune erreur de schéma)
  • Matricule fiscal de l'émetteur conforme au format TN_MF
  • Somme des LineExtensionAmount = TaxExclusiveAmount
  • TaxInclusiveAmount = TaxExclusiveAmount + total TaxAmount
  • Date d'émission au format ISO 8601 (YYYY-MM-DD)
  • Signature numérique valide (vérifiée avec la clé publique)
  • QR code généré après la signature

Pour une implémentation technique complète avec des exemples de code Node.js/TypeScript, consultez notre épisode 7 : Intégration de l'API TTN pour les développeurs.

Besoin d'une intégration sur mesure de la facturation électronique dans votre système ? Noqta.tn accompagne les entreprises tunisiennes dans leur transformation numérique. Contactez notre équipe technique pour un audit gratuit de votre système existant.


Discutez de votre projet avec nous

Nous sommes ici pour vous aider avec vos besoins en développement Web. Planifiez un appel pour discuter de votre projet et comment nous pouvons vous aider.

Trouvons les meilleures solutions pour vos besoins.

Articles connexes

Construire un Agent IA Autonome avec Agentic RAG et Next.js

Apprenez a construire un agent IA qui decide de maniere autonome quand et comment recuperer des informations depuis des bases de donnees vectorielles. Un guide pratique complet avec Vercel AI SDK et Next.js, accompagne d'exemples executables.

30 min read·