Aller au contenu

Italie — E-INVOICE IT (Unified API)

En Italie, fiskaly prend en charge l’envoi de factures électroniques B2B et B2C, ainsi que la réception de factures électroniques B2B. Nous prenons actuellement en charge la Facture standard (Fattura, TD01). La prise en charge de la Facture simplifiée (Fattura semplificata, TD07) arrive bientôt.

La facturation électronique est obligatoire et réglementée par l’Agenzia delle Entrate (administration fiscale). Toutes les factures B2B doivent être échangées via le SDI (Sistema di Interscambio — système d’échange) au format XML FatturaPA (facture électronique) et sont légalement obligatoires depuis janvier 2019. Les factures doivent également être conservées à long terme via un archivage certifié (conservazione a norma).

Cette page couvre les exigences spécifiques à l’Italie qui complètent le Guide d’intégration général étape par étape pour intégrer un Taxpayer à la facturation électronique.

fiskaly gère les deux sens de l’échange SDI, qui fonctionnent différemment :

Au-delà de ces deux sens, chaque facture que vous envoyez et recevez est automatiquement archivée. Cela signifie une conservation certifiée à long terme (conservazione a norma) pendant les 10 années légalement requises, sans aucune configuration de votre côté.

Ces prérequis s’appliquent à tout Taxpayer que vous intégrez pour la facturation électronique en Italie — que vous envoyiez, receviez, ou les deux. Assurez-vous de disposer des informations suivantes sur le Taxpayer avant de continuer.

Données d’enregistrement spécifiques à l’Italie — transmises sous content.fiscalization.registration :

  • company_idNumero Registro Imprese (numéro du registre du commerce)
  • office — code de la province de la Camera di Commercio qui a délivré le numéro REA, p. ex. MI, RM
  • entry — numéro REA (6 ou 7 chiffres)
  • legal_form — forme juridique de l’entité (p. ex. LIMITED_LIABILITY_COMPANY, JOINT_STOCK_COMPANY)
  • capital — capital social enregistré en EUR (p. ex. "10000.00")
  • shareholder_statusSOLE_SHAREHOLDER ou MULTIPLE_SHAREHOLDERS
  • liquidation_statusIN_LIQUIDATION ou NOT_IN_LIQUIDATION
  • tax_regime — facultatif, ORDINARY (par défaut) ou FLAT_RATE_SCHEME (Regime Forfettario)

Champs standard du Taxpayer — font partie du Taxpayer lui-même (partagés avec SIGN IT si vous l’utilisez) :

  • content.name — dénomination légale enregistrée de l’entreprise ou du particulier
  • content.address — adresse légale enregistrée
  • content.address.regionProvincia (code de province, p. ex. MI, RM) ; obligatoire sur le Taxpayer et validé lors de la mise en service

Envoi de factures électroniques : exigences relatives au destinataire

Section intitulée « Envoi de factures électroniques : exigences relatives au destinataire »

Pour envoyer une facture électronique, vous indiquez son destinataire et ses données de routage directement dans le Record de la facture. Lorsque vous créez la facture (TRANSACTION::INVOICE) avec createRecord, ajoutez le destinataire à son tableau recipients. Les champs à renseigner dépendent de la personne que vous facturez :

Chaque destinataire porte invoicing.type = SDI. Ce qui change d’un cas à l’autre, c’est l’identification, le code destinataire et l’intervention ou non d’une PEC :

EntrepriseConsommateur en ItalieConsommateur à l’étranger
typeBUSINESSCONSUMERCONSUMER
identificationVAT — validéTAXcodice fiscale, validétout type ; non validé
invoicing.destination_codele code du destinataire sur 7 caractères, ou "0000000", ou "XXXXXXX""0000000""XXXXXXX"
invoicing.pecobligatoire avec "0000000"facultativenon utilisée
address.regionobligatoire lorsque l’adresse est en Italieobligatoirenon obligatoire
nameraison socialegender, forename, surnamegender, forename, surname

Chaque destinataire professionnel est de type BUSINESS avec un bloc invoicing renseigné, comme l’explique l’intégration générale pas à pas. Outre les informations standard exigées par toute facture électronique (nom du destinataire, adresse, identification fiscale, lignes de facture, etc.), l’Italie ajoute les champs de routage SDI présentés ci-dessus.

Les valeurs de destination_code et de pec dépendent du destinataire :

Scénariodestination_codepec
Le destinataire a une boîte SDI enregistréeson code à 7 caractères (p. ex. ABC1234)facultatif
Le destinataire n’est pas enregistré auprès du SDI"0000000"obligatoire
Le destinataire est hors d’Italie"XXXXXXX"non utilisé

Lorsque votre client est un particulier et non une entreprise, définissez recipients[].type sur CONSUMER. La facture passe par le SDI sous forme de document FatturaPA (TD01), comme une facture B2B.

Les consommateurs n’ont pas de boîte SDI, le routage fonctionne donc différemment. La façon d’identifier le consommateur dépend de sa résidence en Italie ou non :

  • Résident en Italie — identifié par son codice fiscale, routé avec le code destinataire "0000000".
  • Hors d’Italie — aucun codice fiscale n’existe : un identifiant étranger prend sa place et la facture est routée avec "XXXXXXX".

Au-delà des champs du tableau ci-dessus, un destinataire consommateur porte toujours name.gender, name.forename et name.surname, ainsi que son adresse.

Envoyez le codice fiscale comme identification de type TAX (16 caractères), l’adresse de résidence y compris region (Provincia), et le code destinataire "0000000". Une pec peut être ajoutée, mais elle n’est pas obligatoire.

Un consommateur qui ne réside pas en Italie n’a pas de codice fiscale : envoyez à la place un identifiant étranger, généralement un numéro fiscal ou de TVA étranger.

ChampValeur
recipients[].identificationobligatoire ; VAT, TAX, PASSPORT, DOCUMENT ou OTHER, selon l’identifiant dont vous disposez
recipients[].address.countryle pays du consommateur, code ISO 3166-1 alpha-2
recipients[].address.code"00000" — FatturaPA n’accepte qu’un code postal à 5 chiffres
recipients[].invoicing.destination_code"XXXXXXX"

L’identifiant est transmis au SDI comme IdCodice ; ni fiskaly ni le SDI n’en contrôlent la validité dès lors que le pays de l’adresse n’est pas l’Italie. La region n’est pas obligatoire pour une adresse non italienne.

Pour un consommateur résidant en Italie, le SDI dépose la facture originale dans son espace réservé sur le portail de l’AdE (Fatture e Corrispettivi).

Lorsque le client a besoin d’une facture plutôt que d’un ticket

Section intitulée « Lorsque le client a besoin d’une facture plutôt que d’un ticket »

L’Italie déclare les deux documents par des canaux distincts — le ticket via les corrispettivi, la facture via le SDI — et rien ne les relie automatiquement.

Recueillez la demande avant la clôture de la vente. Lorsque le client vous indique qu’il a besoin d’une fattura, émettez une TRANSACTION::INVOICE à la place d’une TRANSACTION::RECEIPT. C’est le flux que fiskaly prend en charge de bout en bout aujourd’hui, que le client le demande avant ou pendant la vente.

Contrairement à un appel d’API synchrone, le résultat du SDI est asynchrone. Après avoir créé la facture (TRANSACTION::INVOICE) avec createRecord, interrogez ou écoutez les mises à jour du Record E_INVOICE::TRANSMISSION pour savoir si le SDI l’a acceptée.

Les trois Records atteignent leur état final ensemble :

RecordÉtat final
E_INVOICE::TRANSMISSIONCOMPLETED ou FAILED, mode=FINISHED
TRANSACTION::INVOICECOMPLETED ou FAILED, mode=FINISHED
INTENTION::TRANSACTIONCOMPLETED ou FAILED, mode=FINISHED

En cas d’échec, le motif de rejet du SDI est disponible dans logs[].message sur les trois Records. Pour plus de détails, consultez How to check the status of an e-invoice sur notre page d’assistance.

Les erreurs peuvent survenir à trois étapes distinctes, chacune avec un comportement différent :

ÉtapeQuandComportement
Validation UAPI (synchrone)Payload invalide4xx renvoyé immédiatement — aucun Record n’est créé. Corrigez le payload et réessayez sur le même INTENTION::TRANSACTION.
Validation pré-SDI (asynchrone)La facture est rejetée avant d’atteindre le SDIToute la chaîne atteint state=FAILED — une nouvelle chaîne est requise pour réessayer.
Rejet du SDI (asynchrone)Le SDI renvoie NSToute la chaîne atteint state=FAILED — une nouvelle chaîne est requise pour réessayer.

Si le SDI renvoie NS (Notifica di Scarto), la facture est juridiquement inexistante :

  1. Lisez logs[].message sur l’un des trois Records pour obtenir le motif de rejet du SDI
  2. Créez une nouvelle INTENTION::TRANSACTION et une nouvelle TRANSACTION::INVOICE avec les données corrigées
  3. Le même document.number peut être réutilisé dans les 5 jours suivant le rejet NS
  4. La chaîne ayant échoué reste FAILED de façon permanente — elle est conservée à des fins d’audit

Un System E_INVOICE_SERVICE peut à la fois envoyer et recevoir des factures électroniques. La réception est facultative — un Taxpayer qui ne fait qu’émettre peut ignorer cette section.

Deux éléments distincts et indépendants entrent en jeu :

  • La capacité à recevoir — fiskaly la configure automatiquement lorsque vous mettez en service le System.
  • L’enregistrement du code destinataire SDI (manuel, réalisé par vous) — dans votre portail Agenzia delle Entrate (AdE), définissez le code destinataire SDI de fiskaly JKKZDGR comme destination SDI de votre entreprise, afin que le SDI achemine vos factures entrantes vers fiskaly.

Dans la réponse de mise en service, compliance.state vaut TRANSMISSION_ONLY. Il passe ensuite automatiquement à TRANSMISSION_RECEPTION une fois l’enregistrement du Taxpayer terminé — ce qui se produit normalement, que vous ayez ou non effectué l’enregistrement AdE ou prévu de recevoir.

Appelez retrieveSystem à tout moment pour lire le compliance.state actuel, qui reflète uniquement la capacité à recevoir — et non l’enregistrement AdE :

  • TRANSMISSION_RECEPTION — fiskaly a configuré le System pour recevoir.
  • TRANSMISSION_ONLY — cette configuration n’est pas terminée.

Il n’y a rien de plus à configurer pour l’acheminement : fiskaly associe automatiquement chaque facture entrante au bon Taxpayer grâce à son identifiant fiscal — c’est aussi pourquoi chaque identifiant fiscal doit appartenir à un seul Taxpayer enregistré. Vous n’avez pas besoin de configurer ni de stocker un code d’acheminement distinct.

Lorsqu’une facture vous est envoyée via le SDI, fiskaly la reçoit automatiquement :

  • la livraison entrante déclenche un webhook
  • un enregistrement de réception (reception record) est créé pour la facture
  • le XML signé, le PDF et les métadonnées sont stockés avec l’enregistrement
  • les livraisons en double sont dédupliquées

En pratique, la première facture qui vous parvient de cette manière confirme aussi que la réception est correctement configurée.

La loi italienne exige que les factures électroniques soient conservées à long terme via un archivage numérique certifié (conservazione a norma) : elles doivent être conservées pendant au moins 10 ans et stockées de manière à rester immuables, authentiques et facilement récupérables, avec des signatures numériques et des horodatages (marca temporale). Conserver votre propre copie du XML ne suffit pas — fiskaly s’en charge pour vous.

Pour l’Italie, l’archivage est automatique et toujours actif : chaque facture que vous envoyez et chaque facture que vous recevez via le SDI est légalement conservée, sans configuration supplémentaire ni appel d’API de votre côté. Cela repose uniquement sur l’identifiant fiscal italien du Taxpayer, qui fait déjà partie de l’onboarding. Chaque facture conservée reçoit un reçu de conservation comme preuve de conservazione a norma. La conservation se termine généralement en quelques secondes ; le reçu lui-même peut mettre quelques minutes à être émis, après quoi fiskaly le joint automatiquement — rien n’est requis de votre côté.

Récupérez les artefacts d’une facture électronique depuis son enregistrement avec retrieveRecord, en sélectionnant l’artefact via un paramètre de requête :

  • compliance-artifact — le document qui fait juridiquement foi. Pour l’Italie, le XML FatturaPA validé par le SDI.
  • archive-artifact — le reçu de conservation attestant la conservation légale (conservazione a norma), disponible sous forme de PDF lisible et de XML signé pour un usage d’audit ou juridique.