Suplidos
El dinero que pagas por cuenta de tu cliente —tasas judiciales, aranceles registrales, visados— no es ingreso tuyo. Cómo facturarlo para que quede fuera de tu base imponible, de tu IVA y de tu declaración anual de operaciones con terceros.
Un suplido es una cantidad pagada en nombre y por cuenta del cliente, bajo su mandato expreso (art. 78.Tres.3 de la Ley del IVA). No forma parte de lo que cobras por tu servicio: lo anticipas, lo repercutes a coste y nunca llega a ser tu base imponible.
Facturado como línea ordinaria, ese mismo importe infla tu base imponible, tu IVA repercutido, el total que declaras a la AEAT y la base que informas de ese cliente en la declaración anual de operaciones con terceros (Modelo 347). Facturado como suplido, aparece en el documento, el cliente lo paga y queda fuera de las cuatro cosas.
Cuándo aplica
Solo en facturas emitidas. Los presupuestos, las proformas, los albaranes,
las facturas de compra y las plantillas de recurrentes no modelan los suplidos en
absoluto — sus tablas de líneas no tienen esa columna
(BR-INV-037). Una plantilla de recurrente, en particular, no
podría llevar la referencia de origen obligatoria, así que la línea degradaría en
silencio a una operación ordinaria y cada factura generada la declararía como
ingreso propio.
Dos restricciones más:
- Una factura simplificada no puede llevar ninguno. El contenido obligatorio
de una factura simplificada no identifica al destinatario, así que no puede
acreditar por cuenta de quién se pagó el importe, y la Administración
tributaria lo trataría como base imponible tuya. Su rectificativa se rechaza por
el mismo motivo. Emite una factura completa o quita la línea
(
BR-INV-040). - Una factura no puede estar hecha solo de suplidos. Se exige al menos una
línea ordinaria (
BR-INV-046).
La API solo puede imponer una de las tres condiciones legales: que puedas justificar el importe. El mandato expreso del cliente es un requisito documental que Factuarea ni pide ni guarda: sin él el importe no es un suplido, lo etiquete como lo etiquete la factura. Y el IVA soportado de un suplido no es deducible por ti — el destinatario real de esa operación es el cliente. Nada en el producto te impide deducirlo, así que esto queda de tu mano.
Qué envía la API
Cuatro campos opcionales de línea en
POST /v1/invoices,
PUT /v1/invoices/{id}
y POST /v1/invoices/{id}/corrective:
| Campo | Reglas |
|---|---|
line_type | NORMAL o SUPLIDO. Ausente o null equivale a NORMAL, así que omitirlo reproduce exactamente el comportamiento anterior. |
source_invoice_reference | Obligatorio en una línea de suplido. Texto libre, hasta 100 caracteres. |
source_invoice_ids | Trazabilidad opcional: facturas de compra de tu propia empresa, validadas con alcance de tenant. Una lista vacía colapsa a nulo. |
line_total | Suma de control opcional de entrada — ver La suma de control de línea. |
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": "Honorarios de constitución de sociedad", "quantity": 1, "unit_price": 1000, "tax_rate": 21 },
{ "description": "Tasa del Registro Mercantil",
"quantity": 1, "unit_price": 150,
"line_type": "SUPLIDO",
"source_invoice_reference": "RM-2026-0451" }
]
}'POST /v1/invoices no tiene campo type, así que no puede emitir una factura
simplificada; el rechazo por factura simplificada solo se alcanza, por tanto, a
través del endpoint de rectificativa sobre un original simplificado. Ver
Facturas simplificadas o completas.
La referencia de origen es obligatoria, y es texto
Es texto libre y no una clave ajena porque el justificante —una tasa judicial, un
arancel registral, un visado— rara vez está registrado como factura de compra en
Factuarea. Sin él no puedes acreditar que el gasto pertenece al cliente
(BR-INV-038).
source_invoice_ids es la contraparte estructurada opcional, y la regla práctica
conviene interiorizarla:
Si el justificante está a tu nombre, no es un suplido. Factúralo como línea ordinaria.
El suplido canónico tiene el documento expedido a nombre del cliente, así que no es una compra tuya y la lista se queda vacía. Enlaza facturas de compra solo cuando hayas registrado de verdad el pago en tus propios libros como soporte del anticipo — y recuerda que el IVA soportado de esa factura no debe deducirse.
Una línea de suplido no lleva carga fiscal propia
Ocho campos se rechazan en una línea SUPLIDO con valor distinto de cero o de
nulo (BR-INV-039):
| Campo | Por qué |
|---|---|
tax_rate | Un suplido no es contraprestación — no le repercutes IVA. |
retention_rate | No hay ingreso tuyo sobre el que retener. |
surcharge_rate | El recargo de equivalencia grava una entrega tuya; esto no lo es. |
discount_percent | Descontar un importe pagado por cuenta ajena lo distorsiona — repercutes lo que pagaste. |
regime_key | Una clave de régimen califica una operación tuya. |
exemption_reason | Un suplido ni tributa ni está exento: no es operación tuya. |
product_id | No es una entrega de bienes tuyos y no debe mover stock. |
pack_id | Mismo motivo — un pack se expande en entregas propias. |
El error nombra el campo infractor, y lo lleva como offending_field en el
detalle del error.
Como una línea de suplido no puede referenciar un producto, el libro de stock la ignora por construcción: la fila persistida no tiene producto y ya queda filtrada.
La suma de control de línea
lines[].line_total es una suma de control de entrada y opcional. Cuando
viene, se compara con el total que el motor acaba de calcular, y la petición se
rechaza si la desviación supera un céntimo (BR-INV-044). El
detalle del error lleva los valores expected y received para que localices un
descuadre de redondeo con tu ERP sin tener que parsear el mensaje.
Tres propiedades, todas deliberadas:
- Nunca se persiste, nunca se devuelve. No existe esa columna y ningún recurso la emite. El importe facturado es siempre el que calcula Factuarea.
- Nunca es obligatoria, en ningún escenario. Exigirla te obligaría a replicar nuestro motor de cálculo, algo explícitamente fuera de alcance.
- La tolerancia de un céntimo es inclusiva. Una desviación de exactamente 0,01 € pasa; 0,02 € falla. La comparación se hace en aritmética de precisión arbitraria, no en coma flotante — el error de coma flotante es precisamente lo que este campo existe para diagnosticar.
Errores
Todos 422:
subcode | Causa |
|---|---|
suplido_requires_source_invoice_reference | La línea de suplido no tiene referencia de origen. |
suplido_line_cannot_carry_taxes | Se envió uno de los ocho campos prohibidos. |
suplido_not_allowed_in_simplified_invoice | Una factura simplificada o su rectificativa. |
invoice_requires_at_least_one_line | Todas las líneas son suplidos, así que la factura no declara ninguna operación. |
line_total_checksum_mismatch | El total de línea declarado se desvía más de un céntimo. |
El índice del mensaje empieza en cero sobre la colección completa de líneas, de
modo que casa con la ruta lines.{i} de tu payload.
Cómo quedan los totales
La calculadora de totales particiona las líneas por tipo
(BR-INV-041):
| Campo | Contenido |
|---|---|
subtotal, taxes_total, total | Solo las líneas ordinarias. La fórmula queda intacta. |
total_disbursements | La suma de las líneas de suplido, y solo eso. Persistido. |
total_to_pay | total + total_disbursements. Derivado, nunca almacenado. |
Para la factura de arriba: subtotal 1000, IVA 210, total 1210, suplidos 150, importe a pagar 1360.
Hay exactamente un punto del código donde se suman esos dos términos, y todos los consumidores —recursos de la API, el PDF, el enlace público del documento— leen el valor derivado en vez de recomponer la suma. Dos columnas llamadas «total» acabarían divergiendo.
Toda cifra por factura que mide deuda usa el importe a pagar, no el total
fiscal (BR-INV-045): pending_amount es
total_to_pay − paid_amount, el libro de cobros acepta un pago que cubra el
importe a pagar íntegro sin responder «supera lo pendiente», la transición a
paid exige el importe a pagar cubierto —pagar solo el total fiscal deja la
factura sin cobrar con el suplido pendiente— y los tres enlaces de pago en línea
cobran el importe a pagar.
Las cifras agregadas de cartera son la excepción documentada: miden volumen facturado, no importe debido. Ese límite, y el que afecta a los documentos Facturae y UBL, están recogidos en Alcance y limitaciones.
Una factura sin suplidos tiene total_disbursements: 0 y
total_to_pay == total, al céntimo, incluida toda factura histórica.
Qué sale en el PDF
El suplido sí se imprime —el cliente lo pagó y la factura es la
representación legal de eso— pero marcado como lo que es
(BR-INV-042): la línea muestra un guion en la columna de IVA, y
el bloque de totales gana una fila Suplidos y una fila Total a pagar debajo
del total fiscal.
El enlace público del documento muestra lo mismo. La exportación a hoja de cálculo a nivel de línea añade una columna de tipo de línea, porque sin ella un suplido es indistinguible de una operación al 0 % de IVA y sumar la columna de total de línea daría el importe cobrado en lugar del ingreso declarable.
Dos campos de línea que son solo de presentación ayudan aquí y no tienen efecto
fiscal alguno (BR-INV-043): unit, una unidad de medida de
texto libre impresa junto a la cantidad, y exemption_reason_text, texto libre
impreso bajo la descripción para la redacción de la exención cuando la causa
catalogada no la cubre.
Qué llega a la AEAT
Nada. Una línea de suplido no llega nunca al registro de facturación
VeriFactu: ni al desglose fiscal, ni al total declarado
(BR-VFC-036).
La exclusión ocurre en un único punto, la pasarela de lectura, aguas arriba del constructor del desglose — así el mismo conjunto filtrado alimenta a todos los consumidores: el array de líneas, el tipo de IVA agregado, la descripción de la operación, la clave de régimen y el generador de XML. Filtrar solo el array de líneas habría dejado abiertos los demás caminos: un suplido en primera posición donaba un tipo del 0 % al agregado de una factura que sí repercute IVA, y describía la operación a la AEAT como «Tasa del Registro…».
El total declarado no cambia de fórmula y excluye los suplidos por construcción, porque el total fiscal agrega solo las líneas ordinarias. La AEAT valida ese total contra la suma del desglose; añadir el suplido descuadraría el registro y provocaría su rechazo. El importe a pagar es presentación y no se transmite nunca.
En la declaración anual de operaciones con terceras personas, la base
declarada de cada contraparte es (BR-TXR-023):
base = total facturado (IVA incluido) + retención de IRPF − suplidosLa retención suma —la contraparte recibió una factura por el importe bruto— y el suplido resta, porque solo lo repercutiste por cuenta de tu cliente. Invertir cualquiera de los dos signos declara mal a la contraparte. Mientras el término de suplidos fue un cero fijado a fuego, la declaración sobredeclaraba a todo cliente al que se le hubieran repercutido tasas o aranceles, con riesgo de descuadre contra su propia declaración cruzada.
Las facturas de compra no modelan ni retención ni suplidos, así que ambos términos son estructuralmente cero en el lado recibido.
Que un tercero se declare o no se decide en el contacto, no en la factura. El
campo accumulate_347 del cliente —escribible desde la v1 en
POST /v1/clients y
PUT /v1/clients/{id},
con valor por defecto true— excluye todas las operaciones de ese cliente cuando
vale false, y se lee en vivo al calcular la declaración en lugar de congelarse
al emitir (BR-TXR-037).
La antigua marca por factura sobrevive como override dormido, expuesta en
solo lectura en el objeto factura de la v1 como exclude_347: puede forzar la
exclusión de una factura concreta, nunca reincluir a un tercero ya marcado como
no acumulable, y la API pública no la fija (BR-TXR-024).
Ninguna de las dos marcas reincluye lo que las reglas automáticas ya excluyeron
—operaciones intracomunitarias, exportaciones y facturas simplificadas sin NIF—.
Trazabilidad
Derivado de las reglas de dominio del backend de Factuarea:
BR-INV-037— el catálogo cerrado de tipos de líneaNORMAL|SUPLIDO, su valor por defecto retrocompatible y por qué existe solo en las facturas emitidas.BR-INV-038— la referencia de origen obligatoria, la trazabilidad opcional a facturas de compra y las dos condiciones legales que el software no puede imponer.BR-INV-039— los ocho campos que una línea de suplido no puede llevar.BR-INV-040— sin suplidos en una factura simplificada ni en su rectificativa.BR-INV-041— suplidos fuera de la base, del IVA y del total; el agregado persistido y la fórmula única derivada del importe a pagar.BR-INV-042— qué superficies excluyen el suplido y cuáles lo muestran marcado.BR-INV-043—unityexemption_reason_textcomo campos de sola presentación.BR-INV-044—line_totalcomo suma de control de entrada, opcional, nunca persistida, con tolerancia inclusiva de un céntimo.BR-INV-045— el saldo pendiente medido contra el importe a pagar.BR-INV-046— una factura no puede componerse solo de suplidos.BR-VFC-036— los suplidos no llegan nunca al registro de facturación, y la invariante de huella idéntica en las facturas que no los llevan.BR-TXR-023— la base de la declaración de operaciones con terceros: total facturado más retención menos suplidos.BR-TXR-037— la acumulación en esa declaración se decide en el contacto, se lee en vivo, y la marca por factura queda como override dormido.BR-TXR-024— la marca de exclusión por documento, superseded porBR-TXR-037y conservada como ese override.