Factuarea APIDevelopers

Factures rectificatives

De R1 a R5, substitució davant diferències, i com es construeixen les línies d'una rectificativa — les quatre decisions que determinen el que reben de debò l'AEAT i la declaració d'IVA.

Una factura rectificativa és un document fiscal per dret propi: rep el seu propi número, la seva pròpia alta davant l'AEAT i el seu propi efecte a la declaració d'IVA. Emetre-la implica quatre decisions independents, i les integracions tendeixen a barrejar-les:

  1. Quina factura es pot rectificar.
  2. Quin codi de rectificació porta — el motiu legal.
  3. Substitució o diferències — si la rectificativa declara els imports correctes o només el delta.
  4. Amb quines línies acaba la rectificativa.

Equivoca't alhora a la tercera i a la quarta i presentaràs una declaració d'IVA amb el signe invertit.

Quan aplica

La factura original ha d'estar emesa: issued o overdue, estigui cobrada o no. Cap altra serveix (BR-INV-001, RD 1619/2012 art. 15):

Estat de l'originalRectificable?
issued, overdueSí — cobrada o no, la correcció és fiscal i l'estat de cobrament no la condiciona.
draft, scheduled, cancelledNo — edita-la o elimina-la, encara no és un document fiscal.
annulledNo — ja s'ha retirat.
Ja és una rectificativaNo. Emet una rectificativa nova de la factura original.

Per a una factura pagada això no és una opció entre moltes: per defecte és l'única. Una factura pagada no s'anul·la per defecte, perquè el seu IVA repercutit ja està compromès amb un període (BR-INV-023); l'única excepció és una factura emesa per error, que s'anul·la amb revert_collections: true. Vegeu Anul·lar o rectificar.

Una factura ja anul·lada per complet (amb una rectificativa total per diferències) no admet cap altra rectificativa (invoice_already_rectified_in_full). Una substituïda per complet no admet una segona correcció total, però sí una de parcial.

La matriu de codis de rectificació és legal, no cosmètica

El codi de rectificació declara per què es rectifica l'original, i l'AEAT restringeix quins codis són legals per a cada tipus d'original.

Tipus de la factura originalCodis legals
Simplificada F2només R5
Completa F1, substitutiva F3només R1–R4

Força un codi fora de la seva fila i l'API respon 422 amb els valors legals a allowed_values (BR-INV-035).

Hi ha dues maneres d'arribar al codi. Per defecte es deriva del slug correction_reason que envies (BR-INV-018):

correction_reasonCodiBase legal
error_fundadoR1Art. 80.Uno, Dos y Seis LIVA — error fonamentat de dret
concursoR2Art. 80.Tres LIVA — concurs de creditors
incobrableR3Art. 80.Cuatro LIVA — crèdit incobrable
error_importe, error_cliente, devolucion, descuento, otrasR4RD 1619/2012 art. 15 — resta de causes

R5 no es deriva mai d'un motiu. Ve del tipus de l'original: una rectificativa d'una F2 neix sempre R5, sigui quin sigui el motiu que passis (BR-INV-019).

Com a alternativa, fixes correction_code de manera explícita. Sobre un original complet, un R1–R4 explícit guanya a la derivació per slug i passa a ser el codi que viatja a la cadena VeriFactu. Fes-lo servir quan el teu propi sistema ja conegui la causa legal i no vulguis que s'infereixi d'un slug.

R2 i R3 exigeixen documentació acreditativa per llei. Passa justification (de 10 a 1000 caràcters); s'anteposa a les notes de la rectificativa com a traçabilitat documental.

Substitució o diferències

És la decisió de més radi d'impacte. L'article 15.5 del RD 1619/2012 permet expressar la correcció amb l'import de la rectificació, sigui quin sigui el seu signe (per diferències, I), o amb la factura tal com queda (substitució, S). Es tria amb correction_type i, opcionalment, correction_nature; les tres maneres de corregir una factura són:

Manera de corregirPeticióLa rectificativa contéNaturalesa
Anul·lar tota la factura (reemborsament total)correction_type: full, sense linesCada línia original, negada.I — base negativa.
Corregir alguns importscorrection_type: partial amb les lines d'ajustNomés la diferència entre el que es va facturar i el que és correcte; una quantity negativa resta.I
Substituir-la per la versió correctacorrection_type: full amb les lines finalsEls imports correctes, complets; sense quantitats negatives.S

correction_nature és opcional. Sense ella, full amb lines és una substitució (S) i full sense lines i partial són per diferències (I). La naturalesa que envies mana sempre, però ha de ser coherent amb la resta de la petició: una combinació incoherent es rebutja amb 422 abans de crear res.

CombinacióResposta
full amb lines i un correction_nature: I explícitparameter_invalid_value, subcodi corrective_full_cancellation_with_lines.
Substitució o correcció parcial sense linesmissing_required_param, param: lines.
Substitució amb una quantity negativaparameter_invalid_value, subcodi corrective_substitution_negative_amount, amb line_index.
Substitució parcialparameter_invalid_value, subcodi corrective_substitution_requires_full.

La regla que imposa el motor fiscal: una base imposable pot ser negativa només en una rectificativa per diferències. En una substitució —i en qualsevol factura ordinària— una base negativa és una dada incoherent i es rebutja amb 422 (BR-VFC-033, BR-INV-017, BR-INV-078). Una rectificativa amb base negativa es llegeix sempre com a I, i unit_price mai és negatiu: el que resta és una quantity negativa.

Un abonament és, doncs, una rectificativa per diferències amb base i quota d'IVA negatives, i l'AEAT l'accepta precisament perquè és la manera fiscalment correcta d'expressar un crèdit. VeriFactu la registra com a TipoRectificativa I; una substitució es registra com a TipoRectificativa S juntament amb ImporteRectificacion, la base i la quota de l'original.

Una rectificativa per diferències sobre una factura al 0 % d'IVA té base negativa i quota zero — no quota negativa. El motor fiscal hereta el tipus de les línies de l'original i mai se l'inventa; fabricar aquí un 21 % és la manera clàssica de collir un rebuig de l'AEAT.

Què envia l'API

POST /v1/companies/{company}/invoices/{id}/corrective, scope invoices:write. Respon 201 amb la factura nova i una capçalera Location que hi apunta.

Totes les rutes d'aquesta guia pengen de /v1/companies/{company}/…: {company} és l'id (UUID v7) del NIF amb què operes, i als exemples curl és $COMPANY_ID. Arribar a un NIF explica com resoldre'l.

CampObligatoriNotes
correction_reasonSíUn dels vuit slugs de dalt.
correction_typeSífull o partial.
correction_natureNoI (per diferències) o S (substitució). Vegeu Substitució o diferències.
correction_codeNoR1–R5. Es valida contra la matriu legal.
series_idNoSèrie en què es numera la rectificativa. Ha de ser una sèrie de rectificatives (invoice_kind: corrective, o simplified_corrective per a una R5); sense ella s'usa la sèrie per defecte. Vegeu Numeració i sèries.
justificationNoDe 10 a 1000 caràcters. A la pràctica, obligatòria per a R2 i R3.
notesNoText lliure, fins a 1000 caràcters.
pdf_template_idNoUUID de la plantilla PDF (o null per heretar). Vegeu Triar la plantilla.
linesObligatori en una correcció parcial i en una substituciódescription, quantity, unit_price i, opcionalment, tax_rate, discount_percent, indirect_tax_regime, product_id i la naturalesa fiscal de la línia: unit, regime_key, exemption_reason, exemption_reason_text.

L'API Reference publica un exemple llest per enviar per cada codi — r1_error_fundado, r2_concurso, r3_incobrable, r4_otras i r5_simplificada — al desplegable d'exemples del cos de petició d'aquesta operació. Es publiquen a més com a entrades reutilitzables components.examples.corrective_* del document OpenAPI, de manera que els clients generats les puguin resoldre per $ref.

curl -X POST https://api.factuarea.com/v1/companies/$COMPANY_ID/invoices/0197a2a8-4cf0-7a31-9a5e-3f2b8c1d6e42/corrective \
  -H "Authorization: Bearer fact_live_3pXnR2VbY7TcA9eFmN5z8KqW" \
  -H "Content-Type: application/json" \
  -d '{
        "correction_reason": "otras",
        "correction_type": "partial",
        "correction_code": "R3",
        "justification": "Crédito declarado incobrable por resolución judicial firme.",
        "lines": [
          { "description": "Ajuste por impago", "quantity": -1, "unit_price": 100, "tax_rate": 21 }
        ]
      }'

La resposta és un objecte factura ordinari amb is_corrective a true i amb un bloc corrective que porta original_id, original_number, original_date, correction_reason, correction_type, correction_nature, base_rectificada, cuota_rectificada i correction_aeat_type — aquest últim és el codi de rectificació que va viatjar de debò a l'AEAT.

Per llistar totes les rectificatives emeses contra una factura, fes servir GET /v1/companies/{company}/invoices/{id}/correctives.

Com es construeixen les línies

Les tres maneres de corregir produeixen documents genuïnament diferents (BR-INV-036):

full sense lines — una anul·lació completa. Es genera una línia per cada línia de l'original amb la quantitat negada i el prefix [ANULACION], conservant el producte, el preu, el tipus impositiu, la retenció, el recàrrec, el descompte i el règim indirecte de l'original.

full amb lines — una substitució. Les línies que envies són les línies finals; no hi ha comparació de diferències, i correction_nature: S és opcional perquè aquesta combinació és una substitució per defecte. Cada camp que ometis s'hereta per índex de la línia original equivalent, fiscalitat inclosa. L'herència mai cau a un tipus per defecte, així que una operació exempta continua exempta en lloc d'adquirir un 21 % fantasma. Si envies més línies de les que tenia l'original, les sobrants no tenen contrapart: no porten producte i la seva fiscalitat queda a zero.

partial — línies d'ajust, amb el prefix [AJUSTE]. No hi ha cap línia original amb què casar per índex, així que els valors per defecte són zero i product_id viatja només si el declares explícitament. Una línia sense product_id no mou inventari.

L'herència per índex dona per fet que les línies rectificades arriben en el mateix ordre que les originals. Reordenar o suprimir línies creua els valors heretats. Quan qui et crida reordeni, declara els camps de manera explícita a cada línia en lloc d'apoiar-te en l'herència.

Naturalesa de cada línia corregida. Una línia pot declarar unit, regime_key, exemption_reason i exemption_reason_text, amb les mateixes regles que POST /v1/companies/{company}/invoices. Segueixen la presència de la clau: una clau que omets hereta el valor de la línia original amb el mateix índex; una clau que envies —fins i tot null— el substitueix, i null significa expressament cap. Per exemple, exemption_reason: null converteix una línia original exempta en una de gravada. Val tant per a una substitució com per a una correcció per diferències, i les mateixes claus existeixen a la tool MCP create_corrective_invoice.

Les línies de suplert també s'hereten de l'original, i per això el payload de la rectificativa accepta line_type i source_invoice_reference en una línia. Vegeu Suplerts.

Numeració i sèries

Cada sèrie de factures té un propòsit fix (invoice_kind), i un document només es numera en una sèrie del seu propi propòsit (BR-INV-076):

DocumentPropòsit de la sèrieEs crea sola si falta
Rectificativa d'una factura completa (R1–R4)correctiveR
Rectificativa d'una factura simplificada (R5)simplified_correctiveRS

La rectificativa es numera amb el comptador correlatiu d'aquesta sèrie i el seu format, així que amb el format per defecte els números són R-2026-001, R-2026-002… per a les factures completes i RS-2026-001… per a les simplificades. L'original conserva el seu propi número, el seu estat i el seu registre VeriFactu; la rectificativa el referencia pel seu número.

Envia series_id per triar la sèrie; si no, s'usa la sèrie per defecte del propòsit correcte i, si l'empresa no en té cap, es crea al moment. Una sèrie d'un altre propòsit es rebutja amb 422 series_invoice_kind_mismatch; també una d'arxivada o d'una altra empresa. Una rectificativa no es duplica (invoice_not_duplicatable_in_current_state): per tornar a corregir l'original, emet una rectificativa nova a partir d'ell.

Què surt al PDF

La rectificativa s'imprimeix com a document a part amb el seu propi número, pres de la seva sèrie de rectificatives (vegeu Numeració i sèries).

Els seus blocs de destinatari i emissor es congelen en el seu propi moment d'emissió, no es copien de l'original. És deliberat: un motiu habitual per rectificar és precisament que les dades del destinatari estaven malament, així que la rectificativa ha d'imprimir les corregides (BR-INV-024).

Com qualsevol factura emesa per una empresa adherida a VeriFactu, porta el bloc QR legal.

Triar la plantilla

Una rectificativa és un document nou amb la seva pròpia presentació: no copia la plantilla de l'original. Tant POST /v1/companies/{company}/invoices/{invoice}/corrective com POST /v1/companies/{company}/invoices/substitute-simplified accepten el pdf_template_id opcional:

EnviesResultat
Res, o "pdf_template_id": nullLa plantilla s'hereta, per aquest ordre: la sèrie de la rectificativa (R o RS), el client, el valor per defecte de l'empresa per al tipus de document i propòsit, i el valor per defecte de l'empresa.
"pdf_template_id": "<uuid>"Elecció manual. Ha de ser compatible amb el propòsit del document.

El propòsit decideix quines plantilles encaixen: corrective per a la rectificació d'una factura completa (R1–R4), simplified_corrective per a la d'una simplificada (R5) i complete per a la factura completa que substitueix simplificades. expected_selection_version no s'accepta en aquestes dues operacions — no hi ha cap versió anterior amb què comparar — i tampoc pdf_template_uuid; enviar-ne qualsevol respon 422 quan la presentació amb revisions està activa per a la teva empresa i s'ignora en cas contrari. Mentre la presentació amb revisions no estigui activa per a la teva empresa, pdf_template_id s’ignora i la rectificativa es genera com abans.

curl -X POST https://api.factuarea.com/v1/companies/$COMPANY_ID/invoices/0197b1c2-89ab-7def-8123-456789abcdef/corrective \
  -H "Authorization: Bearer $FACTUAREA_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
    "correction_reason": "otras",
    "correction_type": "partial",
    "correction_code": "R3",
    "justification": "Crédito declarado incobrable por resolución judicial firme.",
    "lines": [
      { "description": "Ajuste por impago", "quantity": -1, "unit_price": 100, "tax_rate": 21 }
    ],
    "pdf_template_id": "0197c4a1-02aa-7c31-9e5b-6d2f8a4c1b73"
  }'

La rectificativa s'emet en crear-se, així que la seva presentació es conserva en aquell moment. Canviar després l'aspecte del seu PDF és una revisió de presentació, mai una edició: consulta Presentació de documents. Les dades de negoci estructurades d'una factura (calendari de pagaments, referències, centres DIR3) s'expliquen a Dades de negoci de la factura: una rectificativa admet el seu propi calendari de pagaments (els terminis negatius són vàlids) i hereta les referències de línia només a través de source_line_id. Una rectificativa venç el dia del seu últim termini, o 30 dies després d'emetre's si no té calendari.

Què arriba a l'AEAT

Com a registre VeriFactu, la rectificativa és una alta ordinària amb un invoice_type que és el codi de rectificació. El seu desglossament fiscal porta el signe descrit a Substitució o diferències: base i quota negatives per a una correcció a la baixa per diferències, sempre no negatives per a una substitució. La substitució declara a més la base i la quota rectificades de l'original; una correcció per diferències no ho fa, en línia amb l'esquema de l'AEAT (BR-VFC-033).

A la declaració trimestral d'IVA, la rectificació d'una operació en règim general aterra a les caselles [14] i [15] amb el seu signe: una correcció a la baixa resta, una a l'alça suma. El snapshot fiscal conserva el codi real (R1–R4) en lloc de col·lapsar tota rectificativa a R5 (BR-TXR-019).

Aquest encaminament aplica només al règim general. Una rectificativa amb un règim d'operació de capçalera diferent segueix les caselles pròpies d'aquell règim — la inversió del subjecte passiu i les operacions exemptes o d'exportació es declaren en un altre lloc i per tant no arriben a [14]/[15]. Vegeu Claus de règim per saber com es determina el règim de capçalera.

Traçabilitat

Derivat de les regles de domini del backend de Factuarea:

  • BR-INV-001 — una rectificativa ha de referenciar un original emès; els estats admissibles.
  • BR-INV-017 — la naturalesa de la rectificació és exactament S o I.
  • BR-INV-018 — el mapatge de slug de motiu a R1–R4.
  • BR-INV-019 — una rectificativa d'una F2 neix R5.
  • BR-INV-021 — el format de número de factura SÈRIE-AAAA-NNN.
  • BR-INV-076 — una sèrie només numera documents del seu propi propòsit; les rectificatives, a la seva pròpia sèrie.
  • BR-INV-078 — les tres maneres de corregir i la coherència de naturalesa, abast i línies.
  • BR-INV-024 — el snapshot immutable del destinatari, congelat en el moment d'emissió de la rectificativa mateixa.
  • BR-INV-035 — correction_code explícit, la matriu legal de l'AEAT i justification.
  • BR-INV-036 — com es generen les línies de la rectificativa i què s'hereta per índex.
  • BR-VFC-033 — base i quota negatives admeses només en rectificacions per diferències.
  • BR-TXR-019 — el signe a les caselles [14]/[15] i la conservació del codi de rectificació real.
  • BR-PDF-022 — com es tria la plantilla d'un document i l'escala de precedència.
  • BR-INV-086 — la identitat de línia i què hereta una rectificativa per source_line_id.

En aquesta pàgina

Et donem un cop de mà?Contactar amb suport