Ir al contenido

Italia — E-INVOICE IT (Unified API)

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:

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.

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.

Datos de registro específicos para Italia — enviados en content.fiscalization.registration:

  • company_idNumero 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, RM
  • entry — 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_statusSOLE_SHAREHOLDER o MULTIPLE_SHAREHOLDERS
  • liquidation_statusIN_LIQUIDATION o NOT_IN_LIQUIDATION
  • tax_regime — opcional, ORDINARY (predeterminado) o FLAT_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 individuo
  • content.address — dirección legal registrada
  • content.address.regionProvincia (código de provincia, p. ej. MI, RM); obligatorio en el Taxpayer y validado al poner en servicio

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:

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:

EmpresaConsumidor en ItaliaConsumidor en el extranjero
typeBUSINESSCONSUMERCONSUMER
identificationVAT — validadoTAXcodice fiscale, validadocualquier tipo; sin validar
invoicing.destination_codeel código de 7 caracteres del destinatario, o "0000000", o "XXXXXXX""0000000""XXXXXXX"
invoicing.pecobligatoria con "0000000"opcionalno se utiliza
address.regionobligatoria cuando la dirección está en Italiaobligatoriano obligatoria
namenombre de la empresagender, forename, surnamegender, forename, surname

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:

Escenariodestination_codepec
El destinatario tiene un buzón SDI registradosu 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

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.

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.

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.

CampoValor
recipients[].identificationobligatoria; VAT, TAX, PASSPORT, DOCUMENT u OTHER, según el identificador del que disponga
recipients[].address.countryel 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.

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.

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 tres Records alcanzan su estado final de forma conjunta:

RecordEstado final
E_INVOICE::TRANSMISSIONCOMPLETED o FAILED, mode=FINISHED
TRANSACTION::INVOICECOMPLETED o FAILED, mode=FINISHED
INTENTION::TRANSACTIONCOMPLETED 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.

Los errores pueden producirse en tres fases distintas, cada una con un comportamiento diferente:

FaseCuándoComportamiento
Validación de UAPI (síncrona)Payload inválidoSe 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 SDIToda la cadena alcanza state=FAILED — se requiere una nueva cadena para reintentar.
Rechazo del SDI (asíncrono)El SDI devuelve NSToda la cadena alcanza state=FAILED — se requiere una nueva cadena para reintentar.

Si el SDI devuelve NS (Notifica di Scarto), la factura es legalmente inexistente:

  1. Lea logs[].message en cualquiera de los tres Records para obtener el motivo de rechazo del SDI
  2. Cree una nueva INTENTION::TRANSACTION y una nueva TRANSACTION::INVOICE con los datos corregidos
  3. El mismo document.number puede reutilizarse dentro de los 5 días posteriores al rechazo NS
  4. La cadena fallida permanece FAILED de forma permanente — se conserva con fines de auditoría

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 JKKZDGR como 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.

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.

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 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.

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.