Italy ๐ฎ๐น
SDI (Sistema di Interscambio) and FatturaPA requirements for Italy.
Overviewโ
| Aspect | Details |
|---|---|
| B2G Mandate | Required since 2014 (FatturaPA) |
| B2B Mandate | Required since 2019 |
| National Format | FatturaPA XML |
| Peppol Support | Available (PeppolโSDI interop) |
| Primary Scheme | 0211 (Codice Fiscale), 9906 (Partita IVA) |
| Exchange System | SDI (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โ
| Code | Description |
|---|---|
| FPA12 | B2G (Pubblica Amministrazione) |
| FPR12 | B2B/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:
| Code | Description |
|---|---|
| RF01 | Ordinario |
| RF02 | Contribuenti minimi |
| RF04 | Agricoltura |
| RF05 | Pesca |
| RF19 | Forfettario |
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โ
| Code | Rate | Description |
|---|---|---|
| S | 22% | Standard rate |
| AA | 10% | Reduced |
| H | 5% | Super-reduced |
| I | 4% | Minimum |
| Z | 0% | Zero rate |
| E | 0% | Exempt |
| N1-N7 | - | Exclusion codes |
Natura (Exclusion Codes)โ
Italian invoices use specific codes for non-taxable transactions:
| Code | Description |
|---|---|
| N1 | Escluse art. 15 |
| N2 | Non soggette |
| N3 | Non imponibili |
| N4 | Esenti |
| N5 | Regime del margine |
| N6 | Reverse charge |
| N7 | IVA 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
}