Factuarea API

Suplerts

Els diners que pagues per compte del teu client —taxes judicials, aranzels registrals, visats— no són ingrés teu. Com facturar-los perquè quedin fora de la teva base imposable, del teu IVA i de la teva declaració anual d'operacions amb tercers.

Un suplert (suplido en la nomenclatura fiscal espanyola) és una quantitat pagada en nom i per compte del client, sota el seu mandat exprés (art. 78.Tres.3 de la Llei de l'IVA). No forma part del que cobres pel teu servei: l'avances, el repercuteixes a cost i no arriba mai a ser la teva base imposable.

Facturat com a línia ordinària, aquest mateix import infla la teva base imposable, el teu IVA repercutit, el total que declares a l'AEAT i la base que informes d'aquell client a la declaració anual d'operacions amb tercers (Modelo 347). Facturat com a suplert, apareix al document, el client el paga i queda fora de les quatre coses.

Quan aplica

Només a factures emeses. Els pressupostos, les proformes, els albarans, les factures de compra i les plantilles de recurrents no modelen els suplerts en absolut — les seves taules de línies no tenen aquesta columna (BR-INV-037). Una plantilla de recurrent, en particular, no podria portar la referència d'origen obligatòria, així que la línia degradaria en silenci a una operació ordinària i cada factura generada la declararia com a ingrés propi.

Dues restriccions més:

  • Una factura simplificada no en pot portar cap. El contingut obligatori d'una factura simplificada no identifica el destinatari, així que no pot acreditar per compte de qui es va pagar l'import, i l'Administració tributària el tractaria com a base imposable teva. La seva rectificativa es rebutja pel mateix motiu. Emet una factura completa o treu la línia (BR-INV-040).
  • Una factura no pot estar feta només de suplerts. S'exigeix almenys una línia ordinària (BR-INV-046).

L'API només pot imposar una de les tres condicions legals: que puguis justificar l'import. El mandat exprés del client és un requisit documental que Factuarea ni demana ni desa: sense ell l'import no és un suplert, l'etiqueti com l'etiqueti la factura. I l'IVA suportat d'un suplert no és deduïble per tu — el destinatari real d'aquella operació és el client. Res del producte no t'impedeix deduir-lo, així que això queda de la teva mà.

Què envia l'API

Quatre camps opcionals de línia a POST /v1/invoices, PUT /v1/invoices/{id} i POST /v1/invoices/{id}/corrective:

CampRegles
line_typeNORMAL o SUPLIDO. Absent o null equival a NORMAL, així que ometre'l reprodueix exactament el comportament anterior.
source_invoice_referenceObligatori en una línia de suplert. Text lliure, fins a 100 caràcters.
source_invoice_idsTraçabilitat opcional: factures de compra de la teva pròpia empresa, validades amb abast de tenant. Una llista buida col·lapsa a nul.
line_totalSuma de control opcional d'entrada — vegeu La suma de control de línia.
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 té camp type, així que no pot emetre una factura simplificada; el rebuig per factura simplificada només s'assoleix, per tant, a través de l'endpoint de rectificativa sobre un original simplificat. Vegeu Factures simplificades o completes.

La referència d'origen és obligatòria, i és text

És text lliure i no una clau forana perquè el justificant —una taxa judicial, un aranzel registral, un visat— rarament està registrat com a factura de compra a Factuarea. Sense ell no pots acreditar que la despesa pertany al client (BR-INV-038).

source_invoice_ids és la contrapart estructurada opcional, i la regla pràctica convé interioritzar-la:

Si el justificant està al teu nom, no és un suplert. Factura'l com a línia ordinària.

El suplert canònic té el document expedit a nom del client, així que no és una compra teva i la llista es queda buida. Enllaça factures de compra només quan hagis registrat de debò el pagament als teus propis llibres com a suport de la bestreta — i recorda que l'IVA suportat d'aquella factura no s'ha de deduir.

Una línia de suplert no porta càrrega fiscal pròpia

Vuit camps es rebutgen en una línia SUPLIDO amb un valor diferent de zero o de nul (BR-INV-039):

CampPer què
tax_rateUn suplert no és contraprestació — no li repercuteixes IVA.
retention_rateNo hi ha cap ingrés teu sobre el qual retenir.
surcharge_rateEl recàrrec d'equivalència grava un lliurament teu; això no ho és.
discount_percentDescomptar un import pagat per compte d'altri el distorsiona — repercuteixes el que vas pagar.
regime_keyUna clau de règim qualifica una operació teva.
exemption_reasonUn suplert ni tributa ni està exempt: no és operació teva.
product_idNo és un lliurament de béns teus i no ha de moure estoc.
pack_idMateix motiu — un pack s'expandeix en lliuraments propis.

L'error anomena el camp infractor, i el porta com a offending_field al detall de l'error.

Com que una línia de suplert no pot referenciar cap producte, el llibre d'estoc la ignora per construcció: la fila persistida no té producte i ja queda filtrada.

La suma de control de línia

lines[].line_total és una suma de control d'entrada i opcional. Quan hi és, es compara amb el total que el motor acaba de calcular, i la petició es rebutja si la desviació supera un cèntim (BR-INV-044). El detall de l'error porta els valors expected i received perquè localitzis un desquadrament d'arrodoniment amb el teu ERP sense haver de parsejar el missatge.

Tres propietats, totes deliberades:

  • No es persisteix mai, no es retorna mai. No existeix aquesta columna i cap recurs no l'emet. L'import facturat és sempre el que calcula Factuarea.
  • No és mai obligatòria, en cap escenari. Exigir-la t'obligaria a replicar el nostre motor de càlcul, cosa explícitament fora d'abast.
  • La tolerància d'un cèntim és inclusiva. Una desviació d'exactament 0,01 € passa; 0,02 € falla. La comparació es fa en aritmètica de precisió arbitrària, no en coma flotant — l'error de coma flotant és precisament el que aquest camp existeix per diagnosticar.

Errors

Tots 422:

subcodeCausa
suplido_requires_source_invoice_referenceLa línia de suplert no té referència d'origen.
suplido_line_cannot_carry_taxesS'ha enviat un dels vuit camps prohibits.
suplido_not_allowed_in_simplified_invoiceUna factura simplificada o la seva rectificativa.
invoice_requires_at_least_one_lineTotes les línies són suplerts, així que la factura no declara cap operació.
line_total_checksum_mismatchEl total de línia declarat es desvia més d'un cèntim.

L'índex del missatge comença a zero sobre la col·lecció completa de línies, de manera que casa amb la ruta lines.{i} del teu payload.

Com queden els totals

La calculadora de totals particiona les línies per tipus (BR-INV-041):

CampContingut
subtotal, taxes_total, totalNomés les línies ordinàries. La fórmula queda intacta.
total_disbursementsLa suma de les línies de suplert, i només això. Persistit.
total_to_paytotal + total_disbursements. Derivat, mai emmagatzemat.

Per a la factura de dalt: subtotal 1000, IVA 210, total 1210, suplerts 150, import a pagar 1360.

Hi ha exactament un punt del codi on se sumen aquests dos termes, i tots els consumidors —recursos de l'API, el PDF, l'enllaç públic del document— llegeixen el valor derivat en lloc de recompondre la suma. Dues columnes anomenades «total» acabarien divergint.

Tota xifra per factura que mesura deute fa servir l'import a pagar, no el total fiscal (BR-INV-045): pending_amount és total_to_pay − paid_amount, el llibre de cobraments accepta un pagament que cobreixi l'import a pagar íntegre sense respondre «supera el pendent», la transició a paid exigeix l'import a pagar cobert —pagar només el total fiscal deixa la factura sense cobrar amb el suplert pendent— i els tres enllaços de pagament en línia cobren l'import a pagar.

Les xifres agregades de cartera són l'excepció documentada: mesuren volum facturat, no import degut. Aquest límit, i el que afecta els documents Facturae i UBL, són a Abast i limitacions.

Una factura sense suplerts té total_disbursements: 0 i total_to_pay == total, al cèntim, inclosa tota factura històrica.

Què surt al PDF

El suplert que s'imprimeix —el client el va pagar i la factura és la representació legal d'això— però marcat com el que és (BR-INV-042): la línia mostra un guionet a la columna d'IVA, i el bloc de totals guanya una fila Suplidos i una fila Total a pagar a sota del total fiscal.

L'enllaç públic del document mostra el mateix. L'exportació a full de càlcul a nivell de línia hi afegeix una columna de tipus de línia, perquè sense ella un suplert és indistingible d'una operació al 0 % d'IVA i sumar la columna de total de línia donaria l'import cobrat en lloc de l'ingrés declarable.

Dos camps de línia que són només de presentació ajuden aquí i no tenen cap efecte fiscal (BR-INV-043): unit, una unitat de mesura de text lliure impresa al costat de la quantitat, i exemption_reason_text, text lliure imprès sota la descripció per a la redacció de l'exempció quan la causa catalogada no la cobreix.

Què arriba a l'AEAT

Res. Una línia de suplert no arriba mai al registre de facturació VeriFactu: ni al desglossament fiscal, ni al total declarat (BR-VFC-036).

L'exclusió passa en un únic punt, la passarel·la de lectura, aigües amunt del constructor del desglossament — així el mateix conjunt filtrat alimenta tots els consumidors: l'array de línies, el tipus d'IVA agregat, la descripció de l'operació, la clau de règim i el generador d'XML. Filtrar només l'array de línies hauria deixat oberts els altres camins: un suplert en primera posició donava un tipus del 0 % a l'agregat d'una factura que sí que repercuteix IVA, i descrivia l'operació a l'AEAT com a «Tasa del Registro…».

El total declarat no canvia de fórmula i exclou els suplerts per construcció, perquè el total fiscal agrega només les línies ordinàries. L'AEAT valida aquest total contra la suma del desglossament; afegir-hi el suplert desquadraria el registre i en provocaria el rebuig. L'import a pagar és presentació i no es transmet mai.

A la declaració anual d'operacions amb terceres persones, la base declarada de cada contrapart és (BR-TXR-023):

base = total facturat (IVA inclòs) + retenció d'IRPF − suplerts

La retenció suma —la contrapart va rebre una factura per l'import brut— i el suplert resta, perquè només el vas repercutir per compte del teu client. Invertir qualsevol dels dos signes declara malament la contrapart. Mentre el terme de suplerts va ser un zero fixat de manera rígida, la declaració sobredeclarava tot client a qui s'haguessin repercutit taxes o aranzels, amb risc de desquadrament contra la seva pròpia declaració creuada.

Les factures de compra no modelen ni retenció ni suplerts, així que tots dos termes són estructuralment zero al costat rebut.

Que un tercer es declari o no es decideix al contacte, no a la factura. El camp accumulate_347 del client —escrivible des de la v1 a POST /v1/clients i PUT /v1/clients/{id}, amb valor per defecte true— exclou totes les operacions d'aquell client quan val false, i es llegeix en viu en calcular la declaració en lloc de congelar-se en emetre (BR-TXR-037).

L'antiga marca per factura sobreviu com a override adormit, exposada en només lectura a l'objecte factura de la v1 com a exclude_347: pot forçar l'exclusió d'una factura concreta, mai reincloure un tercer ja marcat com a no acumulable, i l'API pública no la fixa (BR-TXR-024). Cap de les dues marques no reinclou el que les regles automàtiques ja van excloure —operacions intracomunitàries, exportacions i factures simplificades sense NIF—.

Traçabilitat

Derivat de les regles de domini del backend de Factuarea:

  • BR-INV-037 — el catàleg tancat de tipus de línia NORMAL|SUPLIDO, el seu valor per defecte retrocompatible i per què existeix només a les factures emeses.
  • BR-INV-038 — la referència d'origen obligatòria, la traçabilitat opcional a factures de compra i les dues condicions legals que el programari no pot imposar.
  • BR-INV-039 — els vuit camps que una línia de suplert no pot portar.
  • BR-INV-040 — sense suplerts en una factura simplificada ni en la seva rectificativa.
  • BR-INV-041 — suplerts fora de la base, de l'IVA i del total; l'agregat persistit i la fórmula única derivada de l'import a pagar.
  • BR-INV-042 — quines superfícies exclouen el suplert i quines el mostren marcat.
  • BR-INV-043unit i exemption_reason_text com a camps només de presentació.
  • BR-INV-044line_total com a suma de control d'entrada, opcional, mai persistida, amb tolerància inclusiva d'un cèntim.
  • BR-INV-045 — el saldo pendent mesurat contra l'import a pagar.
  • BR-INV-046 — una factura no es pot compondre només de suplerts.
  • BR-VFC-036 — els suplerts no arriben mai al registre de facturació, i la invariant de huella idèntica a les factures que no en porten.
  • BR-TXR-023 — la base de la declaració d'operacions amb tercers: total facturat més retenció menys suplerts.
  • BR-TXR-037 — l'acumulació en aquella declaració es decideix al contacte, es llegeix en viu, i la marca per factura queda com a override adormit.
  • BR-TXR-024 — la marca d'exclusió per document, superseded per BR-TXR-037 i conservada com aquell override.

En aquesta pàgina