Skip to main content

Italy ๐Ÿ‡ฎ๐Ÿ‡น

SDI (Sistema di Interscambio) and FatturaPA requirements for Italy.

Overviewโ€‹

AspectDetails
B2G MandateRequired since 2014 (FatturaPA)
B2B MandateRequired since 2019
National FormatFatturaPA XML
Peppol SupportAvailable (Peppolโ†”SDI interop)
Primary Scheme0211 (Codice Fiscale), 9906 (Partita IVA)
Exchange SystemSDI (Sistema di Interscambio)
Unique Italian Requirements

Italy has a mandatory national e-invoicing system (SDI) since 2019 for all B2B transactions. Peppol invoices must be converted to/from FatturaPA format.

How Italy Worksโ€‹

SDI Systemโ€‹

All Italian invoices flow through SDI:

Supplier โ†’ SDI โ†’ Receiver

For cross-border via Peppol:

Foreign Supplier โ†’ Peppol โ†’ SDI โ†’ Italian Receiver
Italian Supplier โ†’ SDI โ†’ Peppol โ†’ Foreign Receiver

Codice Destinatarioโ€‹

Every Italian recipient has a 7-character routing code:

# Examples of Codice Destinatario
routing_codes = {
"0000000": "Private individual (PEC used instead)",
"XXXXXXX": "SDI-registered business",
"AAAAAAA": "Government entity (FatturaPA)"
}

Identifier Schemesโ€‹

Codice Fiscale (0211)โ€‹

The Italian fiscal code (16 chars for individuals, 11 for companies):

# For companies: 11 digits
participant = {
"scheme": "0211",
"identifier": "12345678901",
"name": "Esempio SRL",
"country": "IT"
}

# For individuals: 16 alphanumeric
individual = {
"scheme": "0211",
"identifier": "RSSMRA80A01H501U",
"country": "IT"
}

Partita IVA (9906)โ€‹

VAT number, 11 digits:

participant = {
"scheme": "9906",
"identifier": "IT12345678901",
"name": "Esempio SpA",
"country": "IT"
}

Codice Destinatario (0201)โ€‹

The 7-character SDI routing code:

participant = {
"scheme": "0201",
"identifier": "W7YVJK9", # 7 chars
"name": "Esempio SRL",
"country": "IT"
}

FatturaPA Formatโ€‹

Structureโ€‹

Italian invoices use FatturaPA XML format:

<FatturaElettronica versione="FPR12">
<FatturaElettronicaHeader>
<DatiTrasmissione>
<IdTrasmittente>
<IdPaese>IT</IdPaese>
<IdCodice>01234567890</IdCodice>
</IdTrasmittente>
<ProgressivoInvio>00001</ProgressivoInvio>
<FormatoTrasmissione>FPR12</FormatoTrasmissione>
<CodiceDestinatario>W7YVJK9</CodiceDestinatario>
</DatiTrasmissione>
<!-- ... -->
</FatturaElettronicaHeader>
</FatturaElettronica>

Format Versionsโ€‹

CodeDescription
FPA12B2G (Pubblica Amministrazione)
FPR12B2B/B2C (Privati)

Peppol to SDI Conversionโ€‹

GoRoute handles automatic conversion:

Sending to Italyโ€‹

# Send Peppol BIS 3.0 invoice to Italian recipient
# GoRoute converts to FatturaPA and routes via SDI
response = requests.post(
"https://app.goroute.ai/peppol-api/api/v1/send",
headers={"X-API-Key": "your_api_key"},
json={
"sender": {
"scheme": "9930", # German VAT
"identifier": "DE123456789"
},
"receiver": {
"scheme": "0211", # Italian Codice Fiscale
"identifier": "12345678901",
"routing_code": "W7YVJK9" # Codice Destinatario
},
"document": base64_ubl_invoice
}
)

Receiving from Italyโ€‹

Invoices from Italy are converted from FatturaPA to UBL:

# Webhook receives UBL-converted invoice
{
"event": "document.received",
"original_format": "FatturaPA",
"converted_format": "UBL",
"sender": {
"scheme": "0211",
"identifier": "12345678901"
}
}

Required Fieldsโ€‹

For Italian B2Bโ€‹

<Invoice>
<!-- Standard Peppol - GoRoute converts to FatturaPA -->
<cbc:CustomizationID>urn:cen.eu:en16931:2017#compliant#urn:fdc:peppol.eu:2017:poacc:billing:3.0</cbc:CustomizationID>

<!-- Italian supplier -->
<cac:AccountingSupplierParty>
<cac:Party>
<cbc:EndpointID schemeID="0211">12345678901</cbc:EndpointID>

<!-- Regime fiscale required for Italy -->
<cac:PartyTaxScheme>
<cbc:CompanyID>IT12345678901</cbc:CompanyID>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:PartyTaxScheme>
</cac:Party>
</cac:AccountingSupplierParty>

<!-- Italian buyer with Codice Destinatario -->
<cac:AccountingCustomerParty>
<cac:Party>
<cbc:EndpointID schemeID="0201">W7YVJK9</cbc:EndpointID>

<cac:PartyTaxScheme>
<cbc:CompanyID>IT98765432101</cbc:CompanyID>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:PartyTaxScheme>
</cac:Party>
</cac:AccountingCustomerParty>
</Invoice>

Regime Fiscaleโ€‹

Italian suppliers must specify their tax regime:

CodeDescription
RF01Ordinario
RF02Contribuenti minimi
RF04Agricoltura
RF05Pesca
RF19Forfettario

VAT Requirementsโ€‹

Italian VAT Formatโ€‹

# Italian VAT: IT + 11 digits
def validate_italian_vat(vat: str) -> bool:
if not vat.startswith("IT"):
return False
number = vat[2:]
if len(number) != 11 or not number.isdigit():
return False
# Luhn check digit
return luhn_validate(number)

VAT Ratesโ€‹

CodeRateDescription
S22%Standard rate
AA10%Reduced
H5%Super-reduced
I4%Minimum
Z0%Zero rate
E0%Exempt
N1-N7-Exclusion codes

Natura (Exclusion Codes)โ€‹

Italian invoices use specific codes for non-taxable transactions:

CodeDescription
N1Escluse art. 15
N2Non soggette
N3Non imponibili
N4Esenti
N5Regime del margine
N6Reverse charge
N7IVA assolta in altro stato

Example Invoice to Italyโ€‹

<?xml version="1.0" encoding="UTF-8"?>
<Invoice xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2"
xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2"
xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2">

<cbc:CustomizationID>urn:cen.eu:en16931:2017#compliant#urn:fdc:peppol.eu:2017:poacc:billing:3.0</cbc:CustomizationID>
<cbc:ProfileID>urn:fdc:peppol.eu:2017:poacc:billing:01:1.0</cbc:ProfileID>

<cbc:ID>IT-FATT-2024-00123</cbc:ID>
<cbc:IssueDate>2024-01-15</cbc:IssueDate>
<cbc:DueDate>2024-02-15</cbc:DueDate>
<cbc:InvoiceTypeCode>380</cbc:InvoiceTypeCode>
<cbc:DocumentCurrencyCode>EUR</cbc:DocumentCurrencyCode>

<!-- Foreign Seller -->
<cac:AccountingSupplierParty>
<cac:Party>
<cbc:EndpointID schemeID="9930">DE123456789</cbc:EndpointID>
<cac:PartyName>
<cbc:Name>German Company GmbH</cbc:Name>
</cac:PartyName>
<cac:PostalAddress>
<cbc:StreetName>MusterstraรŸe 1</cbc:StreetName>
<cbc:CityName>Berlin</cbc:CityName>
<cbc:PostalZone>10115</cbc:PostalZone>
<cac:Country>
<cbc:IdentificationCode>DE</cbc:IdentificationCode>
</cac:Country>
</cac:PostalAddress>
<cac:PartyTaxScheme>
<cbc:CompanyID>DE123456789</cbc:CompanyID>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:PartyTaxScheme>
<cac:PartyLegalEntity>
<cbc:RegistrationName>German Company GmbH</cbc:RegistrationName>
</cac:PartyLegalEntity>
</cac:Party>
</cac:AccountingSupplierParty>

<!-- Italian Buyer -->
<cac:AccountingCustomerParty>
<cac:Party>
<cbc:EndpointID schemeID="0201">W7YVJK9</cbc:EndpointID>
<cac:PartyName>
<cbc:Name>Esempio S.r.l.</cbc:Name>
</cac:PartyName>
<cac:PostalAddress>
<cbc:StreetName>Via Roma 1</cbc:StreetName>
<cbc:CityName>Milano</cbc:CityName>
<cbc:PostalZone>20100</cbc:PostalZone>
<cac:Country>
<cbc:IdentificationCode>IT</cbc:IdentificationCode>
</cac:Country>
</cac:PostalAddress>
<cac:PartyTaxScheme>
<cbc:CompanyID>IT12345678901</cbc:CompanyID>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:PartyTaxScheme>
<cac:PartyLegalEntity>
<cbc:RegistrationName>Esempio S.r.l.</cbc:RegistrationName>
<cbc:CompanyID schemeID="0211">12345678901</cbc:CompanyID>
</cac:PartyLegalEntity>
</cac:Party>
</cac:AccountingCustomerParty>

<cac:TaxTotal>
<cbc:TaxAmount currencyID="EUR">22.00</cbc:TaxAmount>
<cac:TaxSubtotal>
<cbc:TaxableAmount currencyID="EUR">100.00</cbc:TaxableAmount>
<cbc:TaxAmount currencyID="EUR">22.00</cbc:TaxAmount>
<cac:TaxCategory>
<cbc:ID>S</cbc:ID>
<cbc:Percent>22</cbc:Percent>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:TaxCategory>
</cac:TaxSubtotal>
</cac:TaxTotal>

<cac:LegalMonetaryTotal>
<cbc:LineExtensionAmount currencyID="EUR">100.00</cbc:LineExtensionAmount>
<cbc:TaxExclusiveAmount currencyID="EUR">100.00</cbc:TaxExclusiveAmount>
<cbc:TaxInclusiveAmount currencyID="EUR">122.00</cbc:TaxInclusiveAmount>
<cbc:PayableAmount currencyID="EUR">122.00</cbc:PayableAmount>
</cac:LegalMonetaryTotal>

<cac:InvoiceLine>
<cbc:ID>1</cbc:ID>
<cbc:InvoicedQuantity unitCode="C62">10</cbc:InvoicedQuantity>
<cbc:LineExtensionAmount currencyID="EUR">100.00</cbc:LineExtensionAmount>
<cac:Item>
<cbc:Name>Consulting Services</cbc:Name>
<cac:ClassifiedTaxCategory>
<cbc:ID>S</cbc:ID>
<cbc:Percent>22</cbc:Percent>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:ClassifiedTaxCategory>
</cac:Item>
<cac:Price>
<cbc:PriceAmount currencyID="EUR">10.00</cbc:PriceAmount>
</cac:Price>
</cac:InvoiceLine>
</Invoice>

Looking Up Italian Recipientsโ€‹

# Find Codice Destinatario for an Italian company
response = requests.get(
"https://app.goroute.ai/peppol-api/api/v1/participants/lookup/italy",
params={
"vat_number": "IT12345678901"
},
headers={"X-API-Key": "your_api_key"}
)

# Returns:
{
"vat_number": "IT12345678901",
"codice_fiscale": "12345678901",
"codice_destinatario": "W7YVJK9",
"pec": "esempio@pec.it" # Alternative if no Codice Destinatario
}

Resourcesโ€‹

Next Stepsโ€‹