Clasificación fiscal y exenciones por línea
E1–E6 y N1–N2 por línea, la retención de IRPF que resta, y la matriz cerrada de pares legales de IVA y recargo de equivalencia — los cuatro campos que deciden qué dice el desglose que llega a la AEAT.
Una línea de factura lleva más información fiscal que un tipo impositivo. Cuatro campos opcionales deciden cómo se clasifica la operación, si se repercute IVA siquiera y cuánto paga realmente el destinatario:
| Campo | Qué hace |
|---|---|
exemption_reason | Declara la línea exenta (E1–E6) o no sujeta (N1, N2). |
regime_key | Declara el régimen especial — ver Claves de régimen. |
retention_rate | Retención de IRPF, restada del importe a pagar. |
surcharge_rate | Recargo de equivalencia, sumado — y solo en combinaciones emparejadas legalmente. |
Los cuatro son opcionales y aditivos. Una factura que los omite todos se comporta exactamente igual que antes de que existieran, huella incluida.
Cuándo aplica
Declara una causa de exención cuando la operación esté exenta o no sujeta según la Ley del IVA. Declara retención cuando factures como profesional o arriendes un local de negocio. Declara recargo cuando tu cliente sea un minorista en régimen de recargo de equivalencia.
La distinción entre las dos familias de códigos es legal, no cosmética
(BR-INV-032):
| Familia | Códigos | Base en la LIVA | Desglose AEAT |
|---|---|---|---|
| Exenta | E1 art. 20 · E2 art. 21 · E3 art. 22 · E4 arts. 23 y 24 · E5 art. 25 · E6 otros | La operación sí está sujeta al IVA, y exenta. | Declara un código de operación exenta. Sin cuota de IVA. |
| No sujeta | N1 arts. 7, 14 y otros · N2 reglas de localización | La operación queda fuera del ámbito del impuesto. | Declara una calificación de no sujeción. |
El catálogo no contiene ningún código S a propósito. «Sujeta y no exenta»
es el valor por defecto, no una causa seleccionable, y la inversión del sujeto
pasivo se modela en la cabecera de la factura, no por línea. Como el régimen
de cabecera es de solo lectura en la v1, la inversión del sujeto pasivo no se
puede declarar por la API pública — ver
Clientes internacionales.
Qué envía la API
Exención y no sujeción
lines[].exemption_reason en
POST /v1/invoices y
PUT /v1/invoices/{id}.
Un valor fuera del catálogo de ocho códigos responde 422 con allowed_values.
curl -X POST https://api.factuarea.com/v1/invoices \
-H "Authorization: Bearer fact_live_3pXnR2VbY7TcA9eFmN5z8KqW" \
-H "Content-Type: application/json" \
-d '{
"client_id": "0197a2a8-4cf0-7a31-9a5e-3f2b8c1d6e42",
"series_id": "019e5584-7a72-7038-a8f6-561ed180b699",
"issued_on": "2026-06-01",
"due_on": "2026-07-01",
"lines": [
{ "description": "Exportación de maquinaria", "quantity": 1, "unit_price": 100, "tax_rate": 0, "exemption_reason": "E2" },
{ "description": "Servicio de instalación", "quantity": 1, "unit_price": 50, "tax_rate": 21 }
]
}'El desglose de la AEAT agrupa por el par (tipo impositivo, causa de exención), así que una factura mixta produce un grupo por combinación y cada grupo cuadra por su cuenta. Las líneas que comparten ambos valores se agregan en un solo grupo.
Una línea que omite el campo cae a la calificación derivada de la cabecera de la factura. Como una factura creada por la v1 tiene siempre el régimen general de cabecera, ese valor por defecto es «sujeta y no exenta» — y por eso una línea exenta tiene que decirlo de forma explícita.
La retención de IRPF resta
lines[].retention_rate es un porcentaje de 0 a 100, opcionalmente acompañado de
lines[].retention_rate_id, una referencia a una retención de tu catálogo. La
fórmula canónica del total es:
total = subtotal + IVA − retención + recargo de equivalenciaLa retención es dinero que el cliente se queda e ingresa en la Administración
tributaria en nombre del profesional, así que reduce el importe a pagar
(BR-INV-033):
{
"lines": [
{ "description": "Servicios de consultoría", "quantity": 1, "unit_price": 1000, "tax_rate": 21, "retention_rate": 15 }
]
}Esa línea factura 1000, repercute 210 de IVA, retiene 150, y el cliente paga 1060.
Si envías a la vez retention_rate y retention_rate_id, tienen que
coincidir. Una discrepancia es un 422 que nombra ambos porcentajes, en lugar de
una decisión silenciosa sobre cuál gana.
Algunos tipos de retención se almacenan con signo negativo — una convención
visual heredada que significa «esto se retiene». El cálculo toma el valor
absoluto y la resta está cableada en la propia fórmula, así que el signo no
cambia nunca el resultado (BR-TAX-008). El catálogo fiscal
público publica siempre estos tipos en positivo.
La matriz del recargo de equivalencia es cerrada
lines[].surcharge_rate no es un número libre. Toda línea con recargo por encima
de cero se valida contra el emparejamiento legal con su tipo de IVA
(BR-INV-034):
| Tipo de IVA | Recargo legal |
|---|---|
| 21 % | 5,2 % |
| 10 % | 1,4 % |
| 4 % | 0,5 % |
| 0 % | 0 % |
Una combinación ilegal —21 % de IVA con un recargo del 1,4 %, por ejemplo—
responde 422 con los pares legales en allowed_values. La comparación es por
valor redondeado a dos decimales, así que 5.2 y 5.20 son el mismo par.
Las operaciones bajo este régimen suelen llevar además regime_key: "18".
Qué devuelve cada línea
El objeto línea de factura devuelve tax_rate, retention_rate,
surcharge_rate, discount_percent, el subtotal calculado, taxes y total,
más los campos fiscales: regime_key, exemption_reason, indirect_tax_regime
y aeat_tax_code.
Los dos últimos son un snapshot fiscal congelado, escrito al construir la
línea y nunca recalculado (BR-TAX-023). Una factura emitida no
cambia su régimen indirecto porque la empresa traslade después su domicilio
fiscal, y las líneas históricas anteriores al snapshot se quedan vacías en lugar
de rellenarse con los datos de hoy.
De dónde salen los valores por defecto
Cuando omites un tipo, lo resuelve una única cadena del backend compartida por
todas las superficies —panel, API pública, herramientas de agente, importadores,
facturas recurrentes— en orden estricto de prioridad
(BR-TAX-025):
Valores por defecto del cliente. El cliente guarda tipos, no referencias, y cada tipo se resuelve a un impuesto concreto filtrado por el régimen indirecto del emisor: un 7 % por defecto de un cliente en una empresa canaria resuelve a IGIC al 7 %, no a un IVA peninsular.
Ajustes de la empresa, incluida la sugerencia derivada de la zona AEAT de la empresa.
El catálogo global.
La cadena es de mejor esfuerzo y nunca devuelve error por un valor por
defecto irresoluble: degrada al siguiente escalón. Si el cliente está marcado
como sujeto al recargo de equivalencia y el tipo de IVA resuelto tiene un recargo
legalmente vinculado, ese recargo se inyecta en los valores por defecto
(BR-TAX-022).
Consúltala directamente con
GET /v1/taxes/defaults/{docType}
cuando quieras enseñar a tus usuarios lo que se va a aplicar antes de que lo
confirmen.
Qué sale en el PDF
Cambian dos cosas en el documento impreso.
El bloque de totales refleja la fórmula de arriba: la retención aparece como
resta y el recargo de equivalencia como suma, así que el importe a pagar difiere
de subtotal + IVA.
Las menciones legales. Cuando la factura lleva una causa de exención a nivel
de documento, su frase legal —citando el artículo de la LIVA— se añade como
primera mención legal de la factura (BR-TAX-024). Esa causa es
un campo de cabecera, uno por factura, y es de solo lectura por la API
pública: el objeto factura expone exemption_reason y legal_mentions, pero
ninguna operación de la v1 los fija. Una factura creada por la v1 no imprime, por
tanto, ninguna frase automática de exención; pon el texto en notes si el
documento lo necesita.
El campo de línea exemption_reason_text (hasta 255 caracteres) existe con el
mismo propósito a nivel de línea, y es solo de presentación — no tiene efecto
fiscal.
Qué llega a la AEAT
Una calificación por grupo de desglose. Una línea que declara un código E
produce una entrada de operación exenta con ese código literal y sin cuota
repercutida; una línea que declara un código N produce una calificación de no
sujeción. Una línea que no declara nada hereda la calificación derivada de la
cabecera (BR-VFC-029).
La clave de agrupación es el par (tipo impositivo, causa de exención), que es lo
que permite a una factura mixta pasar la validación de la AEAT: cada grupo
declara su propia base, su propio tipo y su propia cuota, y dentro del grupo se
cumple base × tipo = cuota.
La retención no aparece en el desglose VeriFactu — no es IVA. Se declara en las declaraciones de retenciones y reduce el total de la factura.
El recargo de equivalencia solo se propaga a las líneas sujetas y no exentas; las líneas exentas no llevan ni IVA ni recargo.
Trazabilidad
Derivado de las reglas de dominio del backend de Factuarea:
BR-INV-032— el catálogo cerradoE1–E6/N1–N2, el valor derivado de la cabecera, la agrupación por (tipo, causa) y la invariante de huella idéntica.BR-INV-033— la retención de IRPF por línea en el contrato v1 y la comprobación de coherencia entre el tipo y el impuesto referenciado.BR-INV-034— la matriz legal cerrada de pares de IVA y recargo.BR-TAX-008— la retención almacenada con signo pero calculada en valor absoluto.BR-TAX-022— el vínculo legal de un tipo de IVA con su recargo de equivalencia.BR-TAX-023— el snapshot fiscal inmutable por línea.BR-TAX-024— la causa de exención a nivel de documento y la mención legal automática.BR-TAX-025— la cadena cliente → empresa → catálogo global de valores fiscales por defecto.BR-VFC-029— cómo se deriva la calificación cuando la línea no declara causa.