Coherencia de la causa de exención y conflicto al generar recurrentes
Cambian tres operaciones: la vista previa de la factura acepta un exemption_reason opcional, guardar o emitir una factura con causa de cabecera sin IVA y líneas con IVA responde 422 exemption_cause_contradicts_taxed_lines, y generar una factura recurrente puede responder un 409 reintentable recurring_presentation_activation_changed.
24 de octubre de 2026 — Esta versión añade un campo a la vista previa de plantillas PDF, un
422 nuevo a las operaciones de factura que guardan o emiten un borrador y un 409 reintentable
nuevo a la generación manual de una factura recurrente. No se añade ni se retira ninguna operación.
Operaciones de esta versión
| Operación | operationId | Herramienta MCP | Qué cambia |
|---|---|---|---|
POST /v1/companies/{company}/pdf-template-previews | public-api.v1.pdf_template_previews.create | preview_pdf_template | Campo opcional nuevo source.form.document.exemption_reason. |
POST /v1/companies/{company}/recurring-invoices/{recurring_invoice}/generate | public-api.v1.recurring_invoices.generate | generate_recurring_invoice | Nuevo 409 reintentable recurring_presentation_activation_changed. |
PATCH /v1/companies/{company}/invoices/{invoice} | public-api.v1.invoices.update | update_invoice | Nuevo 422 exemption_cause_contradicts_taxed_lines. |
POST /v1/companies/{company}/invoices/{invoice}/issue | public-api.v1.invoices.issue | issue_invoice | Nuevo 422 exemption_cause_contradicts_taxed_lines. |
POST /v1/companies/{company}/invoices/{invoice}/send | public-api.v1.invoices.send | send_invoice | Nuevo 422 exemption_cause_contradicts_taxed_lines cuando el envío emite un borrador. |
POST /v1/companies/{company}/invoices/{invoice}/mark-sent | public-api.v1.invoices.mark_sent | mark_invoice_as_sent | Nuevo 422 exemption_cause_contradicts_taxed_lines cuando emite un borrador. |
Vista previa con causa de exención
source.form.document.exemption_reason es opcional y solo se aplica a document_type invoice.
Es la causa de exención de la cabecera de la factura. El catálogo lo publica GET /v1/tax-catalog.
- Su mención legal abre las menciones legales automáticas de la vista previa, igual que al guardar la factura.
- Si la omites, o envías
null, la vista previa se genera sin causa. - Una causa desconocida, o una causa enviada en un presupuesto, una proforma o un albarán, se rechaza.
- La vista previa no rechaza una causa que contradiga el IVA de las líneas. Guardar la factura sí, con el error siguiente.
preview_pdf_template acepta el mismo campo en el mismo sitio.
Error nuevo: exemption_cause_contradicts_taxed_lines
Un borrador de factura cuya cabecera lleva una causa de exención que declara la operación sin IVA (las exenciones de los artículos 20 a 26 y 140 bis de la LIVA, la no sujeción y la inversión del sujeto pasivo) no admite una línea de operación, que no sea un suplido, con un IVA mayor que cero.
La respuesta es un 422 con error.code business_rule_violation y error.subcode
exemption_cause_contradicts_taxed_lines.
param es lines.N.tax_rate y line_index indica la línea.
La API v1 no acepta la causa de cabecera al crear o editar una factura, pero sí edita y emite borradores
creados en la aplicación que la conservan. Ahí es donde puede aparecer el error: en
PATCH /v1/companies/{company}/invoices/{invoice} y en las operaciones que emiten un borrador
(issue, send y mark-sent). Los documentos ya emitidos no cambian.
Qué hacer:
- Pon el IVA de la línea indicada en
paramal 0 %, o quita la causa de exención de la factura. - En una factura mixta, con líneas con y sin IVA, no uses una causa de cabecera. Declara la exención
en cada línea exenta con
lines[].exemption_reason. - Repite la petición. La que se rechazó no cambió nada.
Conflicto reintentable nuevo: recurring_presentation_activation_changed
Mientras POST /v1/companies/{company}/recurring-invoices/{recurring_invoice}/generate genera la factura,
la empresa puede activar o desactivar su sistema de presentación dos veces seguidas. La operación responde
entonces 409 recurring_presentation_activation_changed.
- No se escribió nada. No se creó ninguna factura y no se consumió ninguna ocurrencia.
- Repite la petición. Es un conflicto reintentable, no una violación de una regla de negocio.
- Idempotencia. La respuesta no se guarda para reproducirla: repetir la llamada con la misma
Idempotency-Keyejecuta la generación de nuevo y no duplica la factura.
generate_recurring_invoice devuelve el mismo error, así que un asistente solo tiene que volver a llamar a la herramienta.
La tabla siguiente lista las operaciones de esta versión.
Endpoints actualizados6
| Endpoint | Descripción |
|---|---|
POST/v1/companies/{company}/pdf-template-previews | Crear una vista previa de plantilla de PDF |
POST/v1/companies/{company}/recurring-invoices/{recurring_invoice}/generate | Genera una factura a partir de una plantilla recurrente |
PATCH/v1/companies/{company}/invoices/{invoice} | Actualizar una factura |
POST/v1/companies/{company}/invoices/{invoice}/issue | Emite una factura |
POST/v1/companies/{company}/invoices/{invoice}/send | Envía la factura por email |
POST/v1/companies/{company}/invoices/{invoice}/mark-sent | Marca una factura como enviada |