Zum Inhalt springen

Italien — E-INVOICE IT (Unified API)

In Italien unterstützt fiskaly den Versand von B2B- und B2C-E-Rechnungen sowie den Empfang von B2B-E-Rechnungen. Derzeit unterstützen wir die Standardrechnung (Fattura, TD01). Die Unterstützung für die vereinfachte Rechnung (Fattura semplificata, TD07) folgt in Kürze.

Die elektronische Rechnungsstellung ist verpflichtend und wird von der Agenzia delle Entrate (Finanzverwaltung) geregelt. Alle B2B-Rechnungen müssen über das SDI (Sistema di Interscambio — Austauschsystem) im XML-Format FatturaPA (elektronische Rechnung) ausgetauscht werden und sind seit Januar 2019 gesetzlich vorgeschrieben. Rechnungen müssen zudem durch zertifizierte Archivierung (conservazione a norma) langfristig aufbewahrt werden.

Diese Seite beschreibt die italienspezifischen Anforderungen für das Onboarding eines Taxpayers zur elektronischen Rechnungsstellung; sie ergänzen die allgemeine Schritt-für-Schritt-Integration.

fiskaly wickelt beide Richtungen des SDI-Austauschs ab, wobei beide unterschiedlich funktionieren:

Über beide Richtungen hinaus wird jede Rechnung, die Sie senden und empfangen, automatisch für Sie archiviert. Das bedeutet zertifizierte Langzeitaufbewahrung (conservazione a norma) für die gesetzlich vorgeschriebenen 10 Jahre — ohne Einrichtung auf Ihrer Seite.

Diese gelten für jeden Taxpayer, den Sie für die elektronische Rechnungsstellung in Italien onboarden — egal, ob Sie senden, empfangen oder beides. Stellen Sie sicher, dass Sie die folgenden Taxpayer-Informationen bereithalten, bevor Sie fortfahren.

Italienspezifische Registrierungsdaten — übermittelt unter content.fiscalization.registration:

  • company_idNumero Registro Imprese (Handelsregisternummer)
  • office — Provinzkürzel der Camera di Commercio, die die REA-Nummer ausgestellt hat, z. B. MI, RM
  • entry — REA-Nummer (6 oder 7 Ziffern)
  • legal_form — Rechtsform des Unternehmens (z. B. LIMITED_LIABILITY_COMPANY, JOINT_STOCK_COMPANY)
  • capital — eingetragenes Stammkapital in EUR (z. B. "10000.00")
  • shareholder_statusSOLE_SHAREHOLDER oder MULTIPLE_SHAREHOLDERS
  • liquidation_statusIN_LIQUIDATION oder NOT_IN_LIQUIDATION
  • tax_regime — optional, ORDINARY (Standard) oder FLAT_RATE_SCHEME (Regime Forfettario)

Standard-Taxpayer-Felder — Teil des Taxpayers selbst (gemeinsam mit SIGN IT genutzt, falls verwendet):

  • content.name — eingetragener rechtlicher Name des Unternehmens oder der Person
  • content.address — eingetragene rechtliche Adresse
  • content.address.regionProvincia (Provinzkürzel, z. B. MI, RM); verpflichtend am Taxpayer und wird bei der Inbetriebnahme validiert

E-Rechnungen senden: Anforderungen an den Empfänger

Abschnitt betitelt „E-Rechnungen senden: Anforderungen an den Empfänger“

Um eine E-Rechnung zu senden, geben Sie deren Empfänger und dessen Routing-Daten an — direkt im Rechnungs-Record. Wenn Sie die Rechnung (TRANSACTION::INVOICE) mit createRecord erstellen, fügen Sie den Empfänger dem recipients-Array hinzu. Welche Felder Sie setzen, hängt davon ab, wen Sie in Rechnung stellen:

Jeder Empfänger trägt invoicing.type = SDI. Was sich zwischen den drei Fällen unterscheidet, sind die Identifikation, der Empfängercode und die Frage, ob eine PEC im Spiel ist:

UnternehmenVerbraucher in ItalienVerbraucher im Ausland
typeBUSINESSCONSUMERCONSUMER
identificationVAT — validiertTAXCodice fiscale, validiertbeliebiger Typ; nicht validiert
invoicing.destination_codeder 7-stellige Code des Empfängers, oder "0000000", oder "XXXXXXX""0000000""XXXXXXX"
invoicing.pecerforderlich bei "0000000"optionalnicht verwendet
address.regionerforderlich, wenn die Adresse in Italien liegterforderlichnicht erforderlich
nameFirmennamegender, forename, surnamegender, forename, surname

Jeder Geschäftsempfänger ist vom Typ BUSINESS mit befülltem invoicing-Block, wie in der allgemeinen Schritt-für-Schritt-Integration beschrieben. Über die Standarddaten hinaus, die jede E-Rechnung erfordert (Empfängername, Adresse, Steueridentifikation, Rechnungspositionen usw.), kommen in Italien die oben genannten SDI-Routing-Felder hinzu.

Welche Werte destination_code und pec annehmen, hängt vom Empfänger ab:

Szenariodestination_codepec
Empfänger hat ein registriertes SDI-Postfachsein 7-stelliger Code (z. B. ABC1234)optional
Empfänger ist nicht beim SDI registriert"0000000"erforderlich
Empfänger befindet sich außerhalb Italiens"XXXXXXX"nicht verwendet

Wenn Ihr Kunde eine Privatperson und kein Unternehmen ist, setzen Sie recipients[].type auf CONSUMER. Die Rechnung läuft wie eine B2B-Rechnung als FatturaPA-Dokument (TD01) über das SDI.

Verbraucher haben kein SDI-Postfach, daher funktioniert das Routing anders. Wie Sie den Verbraucher identifizieren, hängt davon ab, ob er in Italien ansässig ist:

  • In Italien ansässig — identifiziert über den Codice fiscale, geroutet mit dem Empfängercode "0000000".
  • Außerhalb Italiens — es existiert kein Codice fiscale, daher tritt eine ausländische Kennung an dessen Stelle und die Rechnung wird mit "XXXXXXX" geroutet.

Über die Felder in der Tabelle oben hinaus trägt ein Verbraucherempfänger stets name.gender, name.forename und name.surname sowie die Adresse des Verbrauchers.

Senden Sie den Codice fiscale als TAX-Identifikation (16 Zeichen), die Wohnadresse einschließlich region (Provincia) und den Empfängercode "0000000". Eine pec kann ergänzt werden, ist aber nicht erforderlich.

Ein nicht in Italien ansässiger Verbraucher hat keinen Codice fiscale. Senden Sie an dessen Stelle eine ausländische Kennung — in der Regel eine ausländische Steuer- oder USt-IdNr.

FeldWert
recipients[].identificationerforderlich; VAT, TAX, PASSPORT, DOCUMENT oder OTHER — je nachdem, welche Kennung Ihnen vorliegt
recipients[].address.countrydas Land des Verbrauchers als ISO-3166-1-alpha-2-Code
recipients[].address.code"00000" — FatturaPA akzeptiert nur eine 5-stellige Postleitzahl
recipients[].invoicing.destination_code"XXXXXXX"

Die Kennung wird dem SDI als IdCodice übermittelt; weder fiskaly noch das SDI prüfen sie auf Gültigkeit, sobald das Adressland nicht Italien ist. Für eine nicht italienische Adresse ist region nicht erforderlich.

Bei einem in Italien ansässigen Verbraucher legt das SDI die Originalrechnung in dessen geschützten Bereich im AdE-Portal ab (Fatture e Corrispettivi).

Wenn der Kunde eine Rechnung statt eines Belegs benötigt

Abschnitt betitelt „Wenn der Kunde eine Rechnung statt eines Belegs benötigt“

Italien meldet die beiden Dokumente über getrennte Kanäle — den Beleg über die corrispettivi, die Rechnung über das SDI — und nichts verknüpft sie automatisch.

Erfassen Sie den Wunsch, bevor der Verkauf abgeschlossen ist. Teilt Ihnen der Kunde mit, dass er eine Fattura benötigt, stellen Sie eine TRANSACTION::INVOICE anstelle einer TRANSACTION::RECEIPT aus. Das ist der Ablauf, den fiskaly heute durchgängig unterstützt — unabhängig davon, ob der Kunde vor oder während des Verkaufs danach fragt.

Im Gegensatz zu einem synchronen API-Aufruf erfolgt das SDI-Ergebnis asynchron. Nachdem Sie die Rechnung (TRANSACTION::INVOICE) mit createRecord erstellt haben, fragen Sie den E_INVOICE::TRANSMISSION Record ab oder warten auf Aktualisierungen, um zu erfahren, ob das SDI sie angenommen hat.

Alle drei Records erreichen ihren Endzustand gemeinsam:

RecordEndzustand
E_INVOICE::TRANSMISSIONCOMPLETED oder FAILED, mode=FINISHED
TRANSACTION::INVOICECOMPLETED oder FAILED, mode=FINISHED
INTENTION::TRANSACTIONCOMPLETED oder FAILED, mode=FINISHED

Im Fehlerfall ist der SDI-Ablehnungsgrund im Feld logs[].message aller drei Records verfügbar. Weitere Details finden Sie unter How to check the status of an e-invoice auf unserer Support-Seite.

Fehler können in drei verschiedenen Phasen auftreten, jeweils mit unterschiedlichem Verhalten:

PhaseWannVerhalten
UAPI-Validierung (synchron)Ungültiges Payload4xx wird sofort zurückgegeben — es wird kein Record erstellt. Korrigieren Sie das Payload und versuchen Sie es erneut mit demselben INTENTION::TRANSACTION.
Vor-SDI-Validierung (asynchron)Die Rechnung wird abgelehnt, bevor sie das SDI erreichtDie gesamte Kette erreicht state=FAILED — für einen erneuten Versuch ist eine neue Kette erforderlich.
SDI-Ablehnung (asynchron)SDI gibt NS zurückDie gesamte Kette erreicht state=FAILED — für einen erneuten Versuch ist eine neue Kette erforderlich.

Wenn das SDI NS (Notifica di Scarto) zurückgibt, ist die Rechnung rechtlich nicht existent:

  1. Lesen Sie logs[].message an einem der drei Records, um den SDI-Ablehnungsgrund zu erhalten
  2. Erstellen Sie eine neue INTENTION::TRANSACTION und eine neue TRANSACTION::INVOICE mit den korrigierten Daten
  3. Dieselbe document.number darf innerhalb von 5 Tagen nach der NS-Ablehnung erneut verwendet werden
  4. Die fehlgeschlagene Kette bleibt dauerhaft FAILED — sie wird zu Prüfzwecken aufbewahrt

Ein E_INVOICE_SERVICE System kann E-Rechnungen sowohl senden als auch empfangen. Der Empfang ist optional — ein Taxpayer, der nur sendet, kann diesen Abschnitt überspringen.

Dabei sind zwei getrennte, voneinander unabhängige Dinge beteiligt:

  • Empfangsbereitschaft — fiskaly richtet dies automatisch ein, wenn Sie das System in Betrieb nehmen.
  • Registrierung des SDI-Empfängercodes (manuell, von Ihnen) — hinterlegen Sie in Ihrem Portal der Agenzia delle Entrate (AdE) den SDI-Empfängercode JKKZDGR von fiskaly als SDI-Zieladresse Ihres Unternehmens, damit das SDI Ihre eingehenden Rechnungen an fiskaly weiterleitet.

Die Antwort auf die Inbetriebnahme zeigt compliance.state als TRANSMISSION_ONLY. Anschließend wechselt er automatisch zu TRANSMISSION_RECEPTION, sobald die Registrierung des Taxpayers abgeschlossen ist — was normalerweise geschieht, unabhängig davon, ob Sie die AdE-Registrierung durchgeführt haben oder den Empfang planen.

Rufen Sie jederzeit retrieveSystem auf, um den aktuellen compliance.state zu lesen, der nur die Bereitschaft widerspiegelt — nicht die AdE-Registrierung:

  • TRANSMISSION_RECEPTION — fiskaly hat das System für den Empfang eingerichtet.
  • TRANSMISSION_ONLY — diese Einrichtung ist nicht abgeschlossen.

Für das Routing ist nichts weiter einzurichten: fiskaly ordnet jede eingehende Rechnung automatisch dem richtigen Taxpayer anhand seiner Steuer-ID zu — weshalb jede Steuer-ID zu genau einem registrierten Taxpayer gehören muss. Sie müssen keinen separaten Routing-Code konfigurieren oder speichern.

Wenn Ihnen über das SDI eine Rechnung zugesendet wird, empfängt fiskaly sie automatisch:

  • die eingehende Zustellung löst einen Webhook aus
  • ein Reception Record wird für die Rechnung erstellt
  • das signierte XML, das PDF und die Metadaten werden am Record gespeichert
  • doppelte Zustellungen werden dedupliziert

In der Praxis ist die erste Rechnung, die Sie auf diesem Weg erreicht, zugleich Ihre Bestätigung, dass der Empfang korrekt eingerichtet ist.

Das italienische Recht verlangt, dass E-Rechnungen durch zertifizierte digitale Archivierung (conservazione a norma) langfristig aufbewahrt werden: Sie müssen mindestens 10 Jahre aufbewahrt und so gespeichert werden, dass sie unveränderlich, authentisch und leicht abrufbar bleiben, mit digitalen Signaturen und Zeitstempeln (marca temporale). Eine eigene Kopie des XML aufzubewahren reicht nicht aus — fiskaly übernimmt dies für Sie.

Für Italien erfolgt die Archivierung automatisch und immer: Jede Rechnung, die Sie senden, und jede Rechnung, die Sie über das SDI empfangen, wird rechtskonform aufbewahrt, ohne zusätzliche Einrichtung oder API-Aufruf auf Ihrer Seite. Sie stützt sich lediglich auf die italienische Steuer-ID des Taxpayers, die bereits Teil des Onboardings ist. Jede aufbewahrte Rechnung erhält einen Aufbewahrungsnachweis als Beleg der conservazione a norma. Die Aufbewahrung ist in der Regel innerhalb von Sekunden abgeschlossen; die Ausstellung des Nachweises selbst kann einige Minuten dauern, danach hängt fiskaly ihn automatisch an — auf Ihrer Seite ist nichts erforderlich.

Rufen Sie die Artefakte einer E-Rechnung aus ihrem Record mit retrieveRecord ab und wählen Sie das Artefakt über einen Query-Parameter aus:

  • compliance-artifact — das rechtlich maßgebliche Dokument. Für Italien das SDI-validierte FatturaPA-XML.
  • archive-artifact — der Aufbewahrungsnachweis, der die rechtskonforme Aufbewahrung (conservazione a norma) bestätigt, verfügbar als menschenlesbares PDF und als signiertes XML für Prüf- oder Rechtszwecke.