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:
- Quina factura es pot rectificar.
- Quin codi de rectificació porta — el motiu legal.
- Substitució o diferències — si la rectificativa declara els imports correctes o només el delta.
- 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'original | Rectificable? |
|---|---|
issued, overdue | Sí — cobrada o no, la correcció és fiscal i l'estat de cobrament no la condiciona. |
draft, scheduled, cancelled | No — edita-la o elimina-la, encara no és un document fiscal. |
annulled | No — ja s'ha retirat. |
| Ja és una rectificativa | No. 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 original | Codis legals |
|---|---|
Simplificada F2 | només R5 |
Completa F1, substitutiva F3 | nomé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_reason | Codi | Base legal |
|---|---|---|
error_fundado | R1 | Art. 80.Uno, Dos y Seis LIVA — error fonamentat de dret |
concurso | R2 | Art. 80.Tres LIVA — concurs de creditors |
incobrable | R3 | Art. 80.Cuatro LIVA — crèdit incobrable |
error_importe, error_cliente, devolucion, descuento, otras | R4 | RD 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 corregir | Petició | La rectificativa conté | Naturalesa |
|---|---|---|---|
| Anul·lar tota la factura (reemborsament total) | correction_type: full, sense lines | Cada línia original, negada. | I — base negativa. |
| Corregir alguns imports | correction_type: partial amb les lines d'ajust | Nomé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ó correcta | correction_type: full amb les lines finals | Els 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ícit | parameter_invalid_value, subcodi corrective_full_cancellation_with_lines. |
Substitució o correcció parcial sense lines | missing_required_param, param: lines. |
Substitució amb una quantity negativa | parameter_invalid_value, subcodi corrective_substitution_negative_amount, amb line_index. |
| Substitució parcial | parameter_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.
| Camp | Obligatori | Notes |
|---|---|---|
correction_reason | Sí | Un dels vuit slugs de dalt. |
correction_type | Sí | full o partial. |
correction_nature | No | I (per diferències) o S (substitució). Vegeu Substitució o diferències. |
correction_code | No | R1–R5. Es valida contra la matriu legal. |
series_id | No | Sè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. |
justification | No | De 10 a 1000 caràcters. A la pràctica, obligatòria per a R2 i R3. |
notes | No | Text lliure, fins a 1000 caràcters. |
pdf_template_id | No | UUID de la plantilla PDF (o null per heretar). Vegeu Triar la plantilla. |
lines | Obligatori 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):
| Document | Propòsit de la sèrie | Es crea sola si falta |
|---|---|---|
Rectificativa d'una factura completa (R1–R4) | corrective | R |
Rectificativa d'una factura simplificada (R5) | simplified_corrective | RS |
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:
| Envies | Resultat |
|---|---|
Res, o "pdf_template_id": null | La 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 exactamentSoI.BR-INV-018— el mapatge de slug de motiu aR1–R4.BR-INV-019— una rectificativa d'unaF2neixR5.BR-INV-021— el format de número de facturaSÈ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_codeexplícit, la matriu legal de l'AEAT ijustification.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 persource_line_id.