Anul·lar o rectificar
Quatre operacions semblen «desfer una factura» i només una és correcta en cada cas — eliminar, cancel·lar, anul·lar i rectificar. Si tries malament, perds un document fiscal o presentes una declaració que no pretenies.
Una factura emesa no es pot editar. Tot allò que sembla editar-la és en realitat una de quatre operacions diferents, cadascuna amb les seves condicions prèvies i la seva pròpia conseqüència davant l'Administració tributària. Aquesta pàgina és la taula de decisió, i el motiu de cada branca.
Quan aplica
Sempre que hi hagi alguna cosa malament en una factura i l'hagis de desfer. L'estat actual de la factura acota les operacions legals; quan n'hi ha més d'una de legal, ho decideix la teva intenció. La gravetat de l'error no hi entra mai.
| Estat de la factura | Número assignat? | Operació | Conseqüència |
|---|---|---|---|
draft, i no hi ha res que valgui la pena conservar | No | Eliminar — DELETE /v1/invoices/{id} | El registre desapareix. Mai no va ser fiscal. |
draft, però vols deixar constància de l'intent | No | Cancel·lar — canviar l'estat a cancelled | L'esborrany es retira però es conserva. |
sent, overdue sense cobraments vigents — la factura no s'hauria d'haver emès mai | Sí | Anul·lar — POST /v1/invoices/{id}/annul | La factura deixa de ser cobrable i es declara una anul·lació a l'AEAT. |
sent, overdue, paid — la factura havia d'existir, el seu contingut és incorrecte | Sí | Rectificar — POST /v1/invoices/{id}/corrective | Un document fiscal nou que referencia l'original. |
sent, però només estava malament la marca de lliurament | Sí | Desfer la marca de lliurament — POST /v1/invoices/{id}/unsend | Es neteja la marca de lliurament. La factura continua emesa. |
Tres regles fan que la taula sigui inequívoca:
Una factura numerada no s'elimina mai físicament. Eliminar exigeix estat
draft (o un cancelled que vingui d'un esborrany) i un número que continuï
sent el provisional de l'esborrany. Tota factura que ha consumit un número de la
seva sèrie queda protegida pel soft-delete fiscal; la via per retirar-la és
l'anul·lació (BR-INV-002, art. 29.4 de la Llei general
tributària sobre el deure de conservar els documents amb transcendència
tributària).
Una factura que has cobrat està tancada. Anul·lar-la trencaria la
traçabilitat i distorsionaria les declaracions d'IVA del període, així que l'API
la rebutja mentre quedi algun cobrament vigent —encara que sigui parcial— amb
422 i subcode: "invoice_has_active_collections". El guard és el ledger, no
l'estat: anul·la abans els seus cobraments i l'anul·lació passa a ser possible, o
recorre a una rectificativa, que és el camí canònic quan el que està malament és
el contingut (BR-INV-023).
Sobre una factura emesa i sense cobrar totes dues són legals — així que
pregunta't què ha fallat. Una rectificativa s'admet sobre qualsevol factura
emesa (BR-INV-001) i una anul·lació sobre sent o overdue
amb el ledger buit (BR-INV-003): una factura emesa que ningú
no ha pagat encara és on l'API accepta qualsevol de les dues. L'estat no pot decidir
per tu; la pregunta sí:
- La factura no hauria d'haver existit mai — s'ha cancel·lat la comanda, ha anat al client equivocat, en duplica una altra → anul·lar.
- La factura s'havia d'emetre però el seu contingut és incorrecte — import erroni, tipus d'IVA incorrecte, dades del destinatari malament, una devolució parcial → rectificativa.
Si anul·les per un simple error d'import, declares una ANULACION a l'AEAT i
cremes el número per no res; la rectificativa era el camí net i continua
disponible en sent.
Cancel·lar no és anul·lar
Són actes diferents, i el domini els manté separats a propòsit.
Cancel·lar retira un esborrany — un document que encara no obliga
fiscalment. Només està disponible des de draft, i cancelled és terminal: un
esborrany cancel·lat no es pot revifar, se'n crea un de nou
(BR-INV-012).
Anul·lar retira una factura emesa. Només està disponible des de sent o
overdue. No és una eliminació: la factura roman al llibre registre, en estat
annulled, i si l'empresa està adherida a VeriFactu l'anul·lació es declara al
seu torn.
Intentar cancel·lar una factura emesa, o anul·lar un esborrany, respon 422 amb
un error de transició no vàlida. Aquest codi és deliberat: es tracta d'una
violació de regla de negoci, no d'un problema de permisos.
Les rectificatives no s'anul·len
Una factura rectificativa no s'anul·la mai. Si la rectificativa mateixa està
malament, emets una rectificativa nova de la factura original
(BR-INV-003). Intentar-ho respon 422.
El raonament és que tot el sentit d'una rectificativa és «aquest document modifica aquell». Anul·lar la modificació deixaria l'original en un estat ambigu davant l'Administració tributària, on tots dos documents ja estan registrats.
unsend desfà una marca de lliurament, no una emissió
unsend existeix per a un error concret: marcar com a lliurada una factura que
no ho estava. Neteja la marca de lliurament i manté l'estat en sent. El
número de sèrie, l'alta a l'AEAT i els snapshots congelats queden intactes,
perquè una factura emesa és immutable (BR-INV-030,
RD 1007/2023).
Dues propietats importen per a les integracions:
- És idempotent. Tornar-la a cridar quan la marca ja està neta és un no-op
controlat, mai un
500. - Està estrictament acotada a
sent. Sobre una facturaoverdue,annulled,cancelledo programada respon422— mai403. També es rebutja mentre el ledger tingui un cobrament vigent: la factura es va lliurar i es va cobrar.
La matriu de transicions d'estat no conté cap camí de tornada de sent a draft
per cap ruta, inclòs l'endpoint genèric de canvi d'estat. No existeix la
«desemissió».
Què envia l'API
Comprova primer.
GET /v1/invoices/{id}/can-annul
(scope invoices:read) et dona la resposta abans de comprometre't, inclòs si
l'anul·lació produirà un registre VeriFactu addicional:
curl https://api.factuarea.com/v1/invoices/0197a2a8-4cf0-7a31-9a5e-3f2b8c1d6e42/can-annul \
-H "Authorization: Bearer fact_live_3pXnR2VbY7TcA9eFmN5z8KqW"{
"data": {
"can_annul": false,
"reasons": ["La factura tiene cobros vigentes por 1.210,00 EUR y no puede ser anulada. Revierta antes sus cobros indicando el motivo."],
"will_create_verifactu": false,
"info": []
}
}Després anul·la.
POST /v1/invoices/{id}/annul
(scope invoices:void) deixa constància del motiu:
curl -X POST https://api.factuarea.com/v1/invoices/0197a2a8-4cf0-7a31-9a5e-3f2b8c1d6e42/annul \
-H "Authorization: Bearer fact_live_3pXnR2VbY7TcA9eFmN5z8KqW" \
-H "Content-Type: application/json" \
-d '{"reason": "El cliente cancela el pedido tras la emisión"}'POST /v1/invoices/{id}/void arriba a la mateixa operació de domini sota el
nom extern que el contracte de l'API fa servir per a l'estat (voided).
Prefereix annul quan vulguis deixar constància del motiu; una segona crida
sobre una factura ja anul·lada respon 422 en tots dos casos.
Per al camí de la rectificativa —payload, codis de rectificació, herència de línies— consulta Factures rectificatives.
Què surt al PDF
L'anul·lació no reescriu el document original. La factura conserva el seu número, les seves dades congelades de destinatari i emissor i el seu bloc QR; el que canvia és el seu estat al llibre registre i el fet que ara existeix una segona declaració davant l'AEAT.
Eliminar un esborrany retira el document del tot — però un esborrany mai no va tenir número definitiu, ni snapshot congelat, ni QR, que és exactament per què eliminar és segur allà i enlloc més.
unsend no canvia res del document imprès. Només neteja una marca de lliurament;
la factura no torna a ser editable (BR-INV-030).
Què arriba a l'AEAT
L'anul·lació d'una factura d'una empresa adherida a VeriFactu produeix un
segon registre de facturació de classe ANULACION, encadenat a l'últim registre
de l'empresa i referit a l'alta original (BR-VFC-014). Es crea
de manera asíncrona, després que la transacció confirmi, de manera que la factura
arriba a annulled a la teva base de dades abans que es transmeti la declaració.
Consulta el registre si necessites confirmar que l'AEAT l'ha acceptada — vegeu
Estats d'enviament VeriFactu.
Hi ha un matís amb conseqüències reals. Si l'alta original no es va acceptar
mai —està rebutjada, amb error, o encara pendent—, l'anul·lació ha de declarar
explícitament que no existeix cap registre previ a l'AEAT. El sistema deriva
aquesta marca de l'estat de l'alta en el moment en què es crea l'anul·lació i la
persisteix com a snapshot, de manera que un canvi posterior de l'estat de
l'original no desincronitza l'XML ja transmès. Sense aquesta marca, l'AEAT
rebutja l'anul·lació de pla amb «el registre de facturació no existeix»
(BR-VFC-026).
Cancel·lar i eliminar un esborrany no arriben a l'AEAT de cap manera: un esborrany no es va declarar mai.
Les rectificatives són documents fiscals ordinaris i produeixen la seva pròpia alta, exactament igual que qualsevol altra factura.
Si l'empresa no està adherida a VeriFactu, l'anul·lació funciona igualment i simplement no produeix cap declaració.
Traçabilitat
Derivat de les regles de domini del backend de Factuarea:
BR-INV-001— una rectificativa exigeix un original emès; aquest solapament amb l'anul·lació és la raó que allà hi decideixi la intenció i no l'estat.BR-INV-002— soft-delete fiscal: una factura numerada no s'elimina mai físicament.BR-INV-003— l'anul·lació es limita a factures emeses; les rectificatives no s'anul·len mai.BR-INV-012— la cancel·lació es limita a esborranys i és terminal.BR-INV-023— una factura amb cobraments vigents no s'anul·la; anul·la abans els seus cobraments, o corregeix-la amb una rectificativa.BR-INV-054— l'estat de cobrament que llegeixes (paid,partially_paid) es deriva del ledger, no és un estat documental emmagatzemat.BR-INV-030—unsendneteja la marca de lliurament, manté la factura emesa, és idempotent i respon422en lloc de403.BR-VFC-014— la classe de registre d'anul·lació i la cadena a què pertany.BR-VFC-026— la marca de «sense registre previ» en l'anul·lació d'una alta que no es va acceptar mai.
Derivat també de la màquina d'estats de factura documentada al costat d'aquestes regles, que és la font de veritat de les transicions citades a Quan aplica.