En Italia, fiskaly admite el envío de facturas electrónicas B2B y B2C, y la recepción de facturas electrónicas B2B. Actualmente admitimos la Standard Invoice (Fattura, TD01). El soporte para la Simplified Invoice (Fattura semplificata, TD07) llegará próximamente.
La facturación electrónica es obligatoria y está regulada por la Agenzia delle Entrate (Agencia Tributaria). Todas las facturas B2B deben intercambiarse a través del SDI (Sistema di Interscambio — Sistema de Intercambio) en el formato XML FatturaPA (factura electrónica) y son obligatorias por ley desde enero de 2019. Las facturas también deben conservarse a largo plazo mediante archivado certificado (conservazione a norma).
Esta página cubre los requisitos específicos para Italia que complementan la Guía de integración general paso a paso para dar de alta un Taxpayer en la facturación electrónica.
fiskaly gestiona ambas direcciones del intercambio con el SDI, y las dos funcionan de forma diferente:
Envío — B2B y B2C
fiskaly genera la FatturaPA y la envía al SDI, que la valida y la reenvía al destinatario de forma asíncrona. No se requiere registro en la red. Los destinatarios empresa y los consumidores requieren campos distintos.
Recepción — solo B2B
Opcional, y se habilita por Taxpayer. Requiere un registro único para recibir las facturas de sus proveedores.
Además del intercambio en ambas direcciones, fiskaly archiva automáticamente cada factura que usted envía y recibe. Esto supone la conservación certificada a largo plazo (conservazione a norma) durante los 10 años exigidos por ley, sin ninguna configuración por su parte.
Si ya tiene una integración de SIGN IT, no empieza desde cero — amplía su Taxpayer existente con los datos de registro adicionales y pone en servicio un System E_INVOICE_SERVICE. Consulte E-INVOICE IT para clientes de SIGN IT para ver todos los pasos.
Requisitos previos
Sección titulada «Requisitos previos»Estos requisitos se aplican a cualquier Taxpayer que dé de alta para la facturación electrónica en Italia, ya sea que envíe, reciba o haga ambas cosas. Asegúrese de tener disponible la siguiente información del Taxpayer antes de continuar.
E-INVOICE IT admite actualmente Taxpayers de tipo COMPANY. Dar de alta un Taxpayer INDIVIDUAL — un autónomo o empresario individual que emite con su propio codice fiscale en lugar de un NIF de empresa — llegará próximamente.
Datos de registro específicos para Italia — enviados en content.fiscalization.registration:
company_id— Numero Registro Imprese (número del Registro Mercantil)office— código de provincia de la Camera di Commercio que emitió el número REA, p. ej.MI,RMentry— número REA (6 o 7 dígitos)legal_form— forma jurídica de la entidad (p. ej.LIMITED_LIABILITY_COMPANY,JOINT_STOCK_COMPANY)capital— capital social registrado en EUR (p. ej."10000.00")shareholder_status—SOLE_SHAREHOLDERoMULTIPLE_SHAREHOLDERSliquidation_status—IN_LIQUIDATIONoNOT_IN_LIQUIDATIONtax_regime— opcional,ORDINARY(predeterminado) oFLAT_RATE_SCHEME(Regime Forfettario)
Campos estándar del Taxpayer — parte del propio Taxpayer (compartidos con SIGN IT si lo utiliza):
content.name— denominación legal registrada de la empresa o del individuocontent.address— dirección legal registradacontent.address.region— Provincia (código de provincia, p. ej.MI,RM); obligatorio en el Taxpayer y validado al poner en servicio
Para la facturación electrónica en Italia, content.address.region (Provincia) es un campo obligatorio en el Taxpayer. Se valida al poner en servicio el System E_INVOICE_SERVICE — si falta region, la puesta en servicio falla. Asegúrese de que esté establecida o actualizada en el Taxpayer de antemano.
Envío de facturas electrónicas: requisitos del destinatario
Sección titulada «Envío de facturas electrónicas: requisitos del destinatario»Para enviar una factura electrónica, indique su destinatario y sus datos de enrutamiento directamente en el Record de la factura. Cuando cree la factura (TRANSACTION::INVOICE) con createRecord, añada el destinatario a su array recipients. Los campos que debe rellenar dependen de a quién factura:
Destinatarios empresa (B2B)
Se enrutan mediante el código de destinatario SDI, o por PEC si no tienen buzón SDI.
Destinatarios consumidores (B2C)
Los residentes en Italia se identifican por el codice fiscale; los consumidores en el extranjero, por un identificador extranjero.
Todo destinatario lleva invoicing.type = SDI. Lo que cambia entre los tres casos es la identificación, el código de destinatario y si interviene o no una PEC:
| Empresa | Consumidor en Italia | Consumidor en el extranjero | |
|---|---|---|---|
type | BUSINESS | CONSUMER | CONSUMER |
identification | VAT — validado | TAX — codice fiscale, validado | cualquier tipo; sin validar |
invoicing.destination_code | el código de 7 caracteres del destinatario, o "0000000", o "XXXXXXX" | "0000000" | "XXXXXXX" |
invoicing.pec | obligatoria con "0000000" | opcional | no se utiliza |
address.region | obligatoria cuando la dirección está en Italia | obligatoria | no obligatoria |
name | nombre de la empresa | gender, forename, surname | gender, forename, surname |
- El código de 7 caracteres que le haya facilitado el destinatario (p. ej.
ABC1234): solo letras mayúsculas y dígitos. "0000000": el destinatario no tiene buzón SDI, como todos los consumidores y las empresas que reciben por PEC."XXXXXXX": el destinatario está en el extranjero.
Destinatarios empresa (B2B)
Sección titulada «Destinatarios empresa (B2B)»Cada destinatario empresa es de tipo BUSINESS con el bloque invoicing cumplimentado, como explica la integración general paso a paso. Además de los datos estándar que requiere toda factura electrónica (nombre del destinatario, dirección, identificación fiscal, líneas de factura, etc.), Italia añade los campos de enrutamiento SDI indicados arriba.
Los valores que toman destination_code y pec dependen del destinatario:
| Escenario | destination_code | pec |
|---|---|---|
| El destinatario tiene un buzón SDI registrado | su código de 7 caracteres (p. ej. ABC1234) | opcional |
| El destinatario no está registrado en el SDI | "0000000" | obligatorio |
| El destinatario está fuera de Italia | "XXXXXXX" | no se utiliza |
Una pec es una dirección de Posta Elettronica Certificata, el correo electrónico certificado de Italia. El SDI comprueba el dominio, por lo que un buzón ordinario se rechaza.
"0000000" significa entrega por PEC, y por eso la pec es obligatoria en ese caso para un destinatario empresa.
recipients[].address.region (la Provincia del destinatario) no está marcada como obligatoria en el esquema compartido de la Unified API, pero Italia la exige siempre que la dirección esté en Italia. No se comprueba al crear el registro: createRecord responde correctamente y la transmisión falla más tarde, llevando toda la cadena a FAILED. Indíquela desde el principio en lugar de descubrirlo de forma asíncrona.
Destinatarios consumidores (B2C)
Sección titulada «Destinatarios consumidores (B2C)»Cuando su cliente es un particular y no una empresa, establezca recipients[].type en CONSUMER. La factura circula por el SDI como documento FatturaPA (TD01), igual que una factura B2B.
Los consumidores no tienen buzón SDI, así que el enrutamiento funciona de otra manera. Cómo identifique al consumidor depende de si reside en Italia:
- Residente en Italia — se identifica por su codice fiscale y se enruta con el código de destinatario
"0000000". - Fuera de Italia — no existe codice fiscale, por lo que un identificador extranjero ocupa su lugar y la factura se enruta con
"XXXXXXX".
Además de los campos de la tabla anterior, un destinatario consumidor lleva siempre name.gender, name.forename y name.surname, junto con su dirección.
Consumidores residentes en Italia
Sección titulada «Consumidores residentes en Italia»Envíe el codice fiscale como identificación de tipo TAX (16 caracteres), el domicilio de residencia incluida la region (Provincia) y el código de destinatario "0000000". Puede añadirse una pec, pero no es obligatoria.
Para un consumidor residente en Italia la identificación es obligatoria, debe ser de tipo TAX y el codice fiscale se comprueba al crear el registro: si falta o tiene un formato incorrecto, la solicitud se rechaza ahí y no se crea ninguna factura. El SDI lo valida de nuevo contra el registro tributario, por lo que un código bien formado pero desconocido se rechaza en esa fase.
Consumidores fuera de Italia
Sección titulada «Consumidores fuera de Italia»Un consumidor que no reside en Italia no tiene codice fiscale, así que envíe en su lugar un identificador extranjero, normalmente un número fiscal o de IVA extranjero.
| Campo | Valor |
|---|---|
recipients[].identification | obligatoria; VAT, TAX, PASSPORT, DOCUMENT u OTHER, según el identificador del que disponga |
recipients[].address.country | el país del consumidor como código ISO 3166-1 alfa-2 |
recipients[].address.code | "00000": FatturaPA solo acepta un código postal de 5 dígitos |
recipients[].invoicing.destination_code | "XXXXXXX" |
El identificador viaja al SDI como IdCodice; ni fiskaly ni el SDI comprueban su validez en cuanto el país de la dirección no es Italia. La region no es obligatoria para una dirección no italiana.
"XXXXXXX" indica al SDI que se solicita el despacho pero que la entrega a través del sistema de intercambio no procede: el SDI no tiene ningún canal para llegar a un destinatario en el extranjero. Envíe al consumidor su copia de la factura (PDF o equivalente) por separado, fuera del SDI.
gender lo exige la Unified API, no el SDI: la factura FatturaPA no incluye ese campo. Envíe DIVERSE cuando no tenga el dato.
Para un consumidor residente en Italia, el SDI deposita la factura original en su área reservada en el portal de la AdE (Fatture e Corrispettivi).
Cuando el cliente necesita una factura en lugar de un documento commerciale
Sección titulada «Cuando el cliente necesita una factura en lugar de un documento commerciale»Italia declara los dos documentos por canales separados —el documento commerciale por los corrispettivi, la factura por el SDI— y nada los vincula automáticamente.
Recoja la petición antes de cerrar la venta. Cuando el cliente le indique que necesita una fattura, emita una TRANSACTION::INVOICE en lugar de una TRANSACTION::RECEIPT. Es el flujo que fiskaly admite de principio a fin hoy, tanto si el cliente lo pide antes como durante la venta.
Estamos construyendo un camino compatible que vincule entre sí un documento commerciale fiscalizado y una factura electrónica, de modo que una misma operación tenga una sola factura y un solo rastro de auditoría. Hasta que esté disponible, recoja la petición de factura antes de cerrar la transacción.
Gestión de las respuestas del SDI
Sección titulada «Gestión de las respuestas del SDI»A diferencia de una llamada de API síncrona, el resultado del SDI es asíncrono. Tras crear la factura (TRANSACTION::INVOICE) con createRecord, consulte periódicamente o escuche las actualizaciones del Record E_INVOICE::TRANSMISSION para saber si el SDI la ha aceptado.
Los resultados del SDI suelen llegar en pocos minutos. Sin embargo, la especificación del SDI permite hasta 48 horas.
Los tres Records alcanzan su estado final de forma conjunta:
| Record | Estado final |
|---|---|
E_INVOICE::TRANSMISSION | COMPLETED o FAILED, mode=FINISHED |
TRANSACTION::INVOICE | COMPLETED o FAILED, mode=FINISHED |
INTENTION::TRANSACTION | COMPLETED o FAILED, mode=FINISHED |
En caso de fallo, el motivo de rechazo del SDI está disponible en logs[].message en los tres Records. Para más detalles, consulte How to check the status of an e-invoice en nuestra página de Soporte.
Fases de error
Sección titulada «Fases de error»Los errores pueden producirse en tres fases distintas, cada una con un comportamiento diferente:
| Fase | Cuándo | Comportamiento |
|---|---|---|
| Validación de UAPI (síncrona) | Payload inválido | Se devuelve 4xx de inmediato — no se crea ningún Record. Corrija el payload y reinténtelo en el mismo INTENTION::TRANSACTION. |
| Validación previa al SDI (asíncrona) | La factura se rechaza antes de llegar al SDI | Toda la cadena alcanza state=FAILED — se requiere una nueva cadena para reintentar. |
| Rechazo del SDI (asíncrono) | El SDI devuelve NS | Toda la cadena alcanza state=FAILED — se requiere una nueva cadena para reintentar. |
Fallos y reenvío
Sección titulada «Fallos y reenvío»Si el SDI devuelve NS (Notifica di Scarto), la factura es legalmente inexistente:
- Lea
logs[].messageen cualquiera de los tres Records para obtener el motivo de rechazo del SDI - Cree una nueva
INTENTION::TRANSACTIONy una nuevaTRANSACTION::INVOICEcon los datos corregidos - El mismo
document.numberpuede reutilizarse dentro de los 5 días posteriores al rechazoNS - La cadena fallida permanece
FAILEDde forma permanente — se conserva con fines de auditoría
Cada reenvío inicia una nueva cadena de transacción — UAPI la trata como un envío completamente nuevo.
Recepción de facturas electrónicas
Sección titulada «Recepción de facturas electrónicas»Un System E_INVOICE_SERVICE puede tanto enviar como recibir facturas electrónicas. La recepción es opcional — un Taxpayer que solo envía puede omitir esta sección.
Intervienen dos cosas separadas e independientes:
- Disponibilidad para recibir — fiskaly la configura automáticamente cuando pone en servicio el System.
- Registro del código de destinatario SDI (manual, realizado por usted) — en su portal de la Agenzia delle Entrate (AdE), establezca el código de destinatario SDI de fiskaly
JKKZDGRcomo el destino SDI de su empresa, de modo que el SDI enrute sus facturas entrantes a fiskaly.
La respuesta de la puesta en servicio muestra compliance.state como TRANSMISSION_ONLY. Luego pasa a TRANSMISSION_RECEPTION automáticamente una vez que se completa el registro del Taxpayer — lo cual normalmente ocurre, independientemente de si ha realizado el registro en la AdE o de si tiene previsto recibir.
TRANSMISSION_RECEPTION significa que el System puede recibir, pero no que las facturas entrantes se entreguen realmente al Taxpayer. Esa entrega requiere el registro en la AdE: mientras este no se complete, el Taxpayer no recibe ninguna factura, aunque el System esté listo. Puede completar el registro en la AdE en cualquier momento — por ejemplo, para habilitar la recepción en un Taxpayer que anteriormente estaba configurado solo para enviar.
Llame a retrieveSystem en cualquier momento para leer el compliance.state actual, que refleja únicamente la disponibilidad — no el registro en la AdE:
TRANSMISSION_RECEPTION— fiskaly ha configurado el System para recibir.TRANSMISSION_ONLY— esa configuración no se ha completado.
Si retrieveSystem sigue devolviendo compliance.state = TRANSMISSION_ONLY tras la puesta en servicio, el registro del Taxpayer no se completó. Trátelo como una transición bloqueada y póngase en contacto con el soporte de fiskaly en dev-support@fiskaly.com con el VAT ID del Taxpayer para que podamos investigar.
No hay nada adicional que configurar para el enrutamiento: fiskaly asocia automáticamente cada factura entrante al Taxpayer correcto mediante su tax ID — razón por la cual cada tax ID debe pertenecer a un único Taxpayer registrado. No necesita configurar ni almacenar un código de enrutamiento aparte.
Cuando llega una factura
Sección titulada «Cuando llega una factura»Cuando se le envía una factura a través del SDI, fiskaly la recibe automáticamente:
- la entrega entrante activa un webhook
- se crea un Record de recepción para la factura
- el XML firmado, el PDF y los metadatos se almacenan asociados al Record
- las entregas duplicadas se deduplican
En la práctica, la primera factura que le llega de esta forma es también su confirmación de que la recepción está configurada correctamente.
Si está integrando E-INVOICE IT sin SIGN IT, póngase en contacto con el soporte de fiskaly en dev-support@fiskaly.com — le guiaremos en la configuración del Taxpayer para su caso específico.
Archivado
Sección titulada «Archivado»La ley italiana exige que las facturas electrónicas se conserven a largo plazo mediante archivado digital certificado (conservazione a norma): deben conservarse durante al menos 10 años y almacenarse de modo que permanezcan inmutables, auténticas y fácilmente recuperables, con firmas digitales y sellos de tiempo (marca temporale). Conservar su propia copia del XML no es suficiente — fiskaly se encarga de ello por usted.
Para Italia, el archivado es automático y siempre está activo: cada factura que envía y cada factura que recibe a través del SDI se conserva legalmente, sin configuración adicional ni llamada a la API por su parte. Solo depende del tax ID italiano del Taxpayer, que ya forma parte del alta. Cada factura conservada obtiene un recibo de conservación como prueba de la conservazione a norma. La conservación suele completarse en segundos; el propio recibo puede tardar unos minutos en emitirse, tras lo cual fiskaly lo adjunta automáticamente — no se requiere nada por su parte.
Recupere los artefactos de una factura electrónica desde su Record con retrieveRecord, seleccionando el artefacto mediante un parámetro de consulta:
compliance-artifact— el documento legalmente vinculante. Para Italia, el XML FatturaPA validado por el SDI.archive-artifact— el recibo de conservación que atestigua la conservación legal (conservazione a norma), disponible como PDF legible por humanos y como XML firmado para uso de auditoría o legal.
En el entorno de test el archivado se ejecuta de principio a fin, pero el resultado no tiene validez legal — es solo para pruebas de integración. Únicamente las facturas procesadas en live se certifican como legalmente conservadas.