Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
---
tags:
- API Changes
- Etendo 26
- Etendo 25
- Migrate to Etendo 25
- Spain Localization
- Update Etendo
- Updating Guide
- Developer Changelog
---

# Documentación de Cambios de API

## Resumen

Este documento explica todos los cambios ocurridos en la API pública de los módulos contenidos en el bundle de Localización Española.

Estos cambios representan un riesgo potencial de rotura de módulos, por lo que todos han sido revisados y aprobados explícitamente. Cada vez que se produzca un nuevo cambio, será incluido en esta lista. Antes de actualizar un entorno, se recomienda revisar también la guía oficial de actualización: [Actualizar Etendo a Cualquier Versión](../../../getting-started/upgrade/upgrade-etendo-to-any-version.md).

Los cambios se agrupan por **versión del bundle** de Localización Española y, dentro de cada versión, por **tipo de cambio**.

## 4.x

### Eliminación del "Destino" de TicketBAI (reemplazado por el "Territorio" de sif.general)

*Versión del bundle: [4.4.0](https://github.com/etendosoftware/com.etendoerp.localization.spain.extensions/releases/tag/4.4.0){target="_blank"} · Módulos: `com.smf.ticketbai`, `com.etendoerp.sif.general` · Riesgo: Medio*

El campo/tabla **Destino** de TicketBAI (Gipuzkoa / Bizkaia / Álava), que resolvía las URLs y *endpoints* de cada hacienda foral, ha sido **eliminado**. TicketBAI resuelve ahora el territorio a través del campo **Territorio** del módulo `com.etendoerp.sif.general`, que se apoya en el catálogo centralizado de *endpoints* `ETSG_SIF_Channel_Endpoint` compartido por SII, TicketBAI y Verifactu.

**Tablas Eliminadas**

Se ha eliminado por completo la siguiente tabla, junto con todas sus columnas, pestañas y entradas del Diccionario de Aplicación. Cualquier módulo personalizado que consulte o referencie directamente esta entidad Hibernate debe actualizarse:

| Tabla | Clase Entidad Hibernate | Descripción |
|---|---|---|
| `TBAI_Destiny_Config` | `TbaiDestinyConfig` | Configuración por destino de TicketBAI (URLs de alta/anulación/QR, licencia, NIF del desarrollador, URIs de esquema, etc.) |

**Columnas Eliminadas**

| Tabla | Columna | Descripción |
|---|---|---|
| `TBAI_Config` | `Tbai_Destiny_Config_ID` | Referencia (FK `TBAI_CONFIG_DESTINY_CONFIG_ID`) al destino de TicketBAI. Sustituida por el campo Territorio. |

**Columna Nueva (reemplazo)**

| Tabla | Columna | Entidad / Propiedad Hibernate | Descripción |
|---|---|---|---|
| `TBAI_Config` | `ETSG_SIF_Territory` | `TBAI_Config` / `eTSGSIFTerritory` | Territorio SIF (lista: `GIPUZKOA`, `BIZKAIA`, `ARABA`). Referencia de lista "Territorio SIF" definida en `com.etendoerp.sif.general`. |
| `ETSG_SIF_Channel_Endpoint` | `Territory` | `SifChannelEndpoint` | Catálogo centralizado de *endpoints* por territorio (en `com.etendoerp.sif.general`), contra el que TicketBAI resuelve ahora sus URLs. |

!!! warning "Acción Requerida para Desarrollos Personalizados"
Los módulos o reportes personalizados que referencien la tabla/columna eliminada del destino de TicketBAI (`TBAI_Destiny_Config`, `TbaiDestinyConfig`, `TBAI_Config.Tbai_Destiny_Config_ID`) deben actualizarse para leer el territorio desde el campo `ETSG_SIF_Territory` de `com.etendoerp.sif.general` (y, si resuelven *endpoints*, contra la tabla `ETSG_SIF_Channel_Endpoint`) **antes** de la actualización.

## 3.x

### Flujo unificado de carga de certificado digital

*Versión del bundle: [3.13.0](https://github.com/etendosoftware/com.etendoerp.localization.spain.extensions/releases/tag/3.13.0){target="_blank"} · Módulos: `com.etendoerp.sif.general`, `com.etendoerp.verifactu`, `com.smf.ticketbai`, `org.openbravo.module.sii` · Riesgo: Bajo*

Verifactu, SII y TicketBAI ahora utilizan la misma funcionalidad para cargar un Certificado Digital desde la ventana de Organización, usando el proceso "Añadir Certificado Digital" en la organización legal deseada.

### Unificación del campo "Fecha de Operación"

*Versión del bundle: [3.9.0](https://github.com/etendosoftware/com.etendoerp.localization.spain.extensions/releases/tag/3.9.0){target="_blank"} · Módulos: `com.etendoerp.sif.general`, `com.etendoerp.verifactu`, `com.smf.ticketbai`, `org.openbravo.module.sii` · Riesgo: Medio*

Cada sistema de facturación disponía de su propia columna de **Fecha de Operación** en la factura. Estas columnas se han **deprecado** en favor de una única columna unificada `EM_Etsg_Date_Operation`, definida en `com.etendoerp.sif.general` y utilizada por Verifactu, TicketBAI y SII.

!!! note "Deprecadas, no eliminadas"
Las columnas antiguas **no se eliminan** de la base de datos: siguen presentes y activas, conservando sus datos. Sin embargo, **dejan de ser la fuente de verdad**: la nueva lógica escribe y lee únicamente en `EM_Etsg_Date_Operation`, por lo que las columnas antiguas ya no se pueblan para las facturas nuevas.

**Columnas Deprecadas**

| Tabla | Columna | Entidad / Propiedad Hibernate | Módulo |
|---|---|---|---|
| `C_Invoice` | `EM_Etvfac_Date_Operation` | `Invoice` / `eTVFACDateOperation` | com.etendoerp.verifactu |
| `C_Invoice` | `EM_Tbai_Date_Operation` | `Invoice` / `tbaiDateOperation` | com.smf.ticketbai |
| `C_Invoice` (y `C_Order`) | `EM_Aeatsii_Fecha_Operacion` | `Invoice` / `aeatsiiFechaOperacion` (y `Order`) | org.openbravo.module.sii |

**Columna Nueva (reemplazo)**

| Tabla | Columna | Entidad / Propiedad Hibernate | Descripción |
|---|---|---|---|
| `C_Invoice` | `EM_Etsg_Date_Operation` | `Invoice` / `eTSGDateOperation` (`Invoice.PROPERTY_ETSGDATEOPERATION`) | Fecha de Operación unificada (en `com.etendoerp.sif.general`). Valor por defecto `@DateInvoiced@`. |

!!! note "SII en pedidos"
La columna `EM_Aeatsii_Fecha_Operacion` de SII existe también en la tabla `C_Order`. La columna unificada **solo** se define en `C_Invoice`; **no** existe un equivalente unificado en `C_Order`, por lo que el uso de la Fecha de Operación de SII en pedidos permanece inalterado.

Para poblar la nueva columna con los valores de las columnas antiguas en facturas previas a la actualización, se dispone del proceso **Rellenar Fechas de Operación** (ver la sección [Rellenar Fechas de Operación](../../../../../user-guide/etendo-classic/optional-features/bundles/spain-localization/funcionalidades-generales-para-sifs.md#rellenar-fechas-de-operacion) de la guía de usuario). La copia es solo hacia adelante (no sobrescribe valores ya informados), por lo que **no hay pérdida de datos**.

!!! warning "Acción Requerida para Desarrollos Personalizados"
Los módulos, reportes o consultas personalizados que lean las columnas/propiedades antiguas (`EM_Etvfac_Date_Operation` / `eTVFACDateOperation`, `EM_Tbai_Date_Operation` / `tbaiDateOperation`, `EM_Aeatsii_Fecha_Operacion` / `aeatsiiFechaOperacion`) deben actualizarse para leer la Fecha de Operación desde `EM_Etsg_Date_Operation` (`Invoice.PROPERTY_ETSGDATEOPERATION`) **antes** de la actualización. Aunque las columnas antiguas siguen existiendo, ya no se pueblan para las facturas nuevas, por lo que el código que dependa de ellas verá valores vacíos o desactualizados.

---

This work is licensed under :material-creative-commons: :fontawesome-brands-creative-commons-by: :fontawesome-brands-creative-commons-sa: [ CC BY-SA 2.5 ES](https://creativecommons.org/licenses/by-sa/2.5/es/){target="_blank"} by [Futit Services S.L](https://etendo.software){target="_blank"}.
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ El módulo de Funcionalidades Generales para SIFs (**Sistemas de Información Fi
- [Carga de certificados digitales](#carga-de-certificados-digitales): permite configurar el certificado digital de cada organización legal.
- [Rellenar Fechas de Operación](#rellenar-fechas-de-operacion): proceso para migrar las fechas de facturas existentes al nuevo campo unificado.
- [Tipos de Documento Rectificativos](#tipos-de-documento-rectificativos): define las restricciones sobre los documentos utilizados en facturas rectificativas.
- [Facturas Rectificativas](#facturas-rectificativas): explica qué rectificación usar en cada caso y cómo realizarla de principio a fin en Etendo, de forma común a todos los SIFs.

## Rellenar Fechas de Operación

Expand Down Expand Up @@ -107,6 +108,95 @@ Las facturas rectificativas deben utilizar exclusivamente un tipo de documento y

![](../../../../../../assets/user-guide/etendo-classic/optional-features/bundles/spain-localization/funcionalidades-generales-para-sifs/tipo-doc-rectificativo.png)

!!! info "Solo aplica a organizaciones acogidas a un SIF"
La selección y validación del tipo de documento rectificativo **solo se aplica en organizaciones que tengan configurado algún SIF** (*Verifactu*, *TicketBAI* o *SII*). Es decir, las comprobaciones que exigen que una factura rectificativa utilice un tipo de documento (y una secuencia) marcados como rectificativos, y que impiden usar un tipo rectificativo en una factura que no rectifica a ninguna otra, se activan únicamente cuando la entidad legal de la factura está acogida a *Verifactu*, *TicketBAI* o *SII*.

## Facturas Rectificativas

Cuando una factura ya emitida (completada y enviada al SIF correspondiente) contiene un error, la normativa **no permite reactivarla ni modificarla**: la corrección se realiza mediante una **factura rectificativa**. Esta sección explica, de forma común a **Verifactu**, **TicketBAI** y **SII**, **qué rectificación usar en cada caso** y **cómo realizarla de principio a fin en Etendo**.

En una rectificativa se registra la variación respecto a la factura original, **sin detallar los importes originales corregidos**.

Por ejemplo, si una factura original tenía una base de 1.000 € y una cuota de 210 € (21 %), y el importe correcto era 200 € superior, la rectificativa registrará **base +200 €, cuota +42 €** (no la base total corregida de 1.200 €).

### Qué motivo de rectificación usar (R1–R5)

Toda factura rectificativa debe indicar el **motivo de la rectificación**, que la AEAT clasifica según la causa. La siguiente tabla resume cuándo usar cada uno:

| Motivo | Cuándo se usa | Ejemplo |
|---|---|---|
| **R1** — Error fundado en derecho y art. 80.Uno, .Dos y .Seis LIVA | Es el motivo **general**, para la mayoría de correcciones: errores fundados en derecho (base o cuota mal calculadas, tipo de IVA incorrecto, etc.) y modificaciones de la base por **devolución** de mercancías, envases o embalajes, **descuentos o rappels** posteriores a la operación, resolución de operaciones o alteración/provisionalidad de precios. | Se devuelve parte de la mercancía; se aplica un descuento posterior; se corrige un tipo de IVA mal aplicado. |
| **R2** — Art. 80.Tres LIVA | El destinatario entra en **concurso de acreedores** después de emitida la factura. | El cliente es declarado en concurso y se modifica la base para recuperar el IVA. |
| **R3** — Art. 80.Cuatro LIVA | **Créditos incobrables** que cumplen los requisitos legales (plazos, reclamación, etc.). | Una factura impagada deviene incobrable transcurrido el plazo legal. |
| **R4** — Resto | Cualquier rectificación **no encuadrable en R1–R3**, incluidas las **correcciones de datos no monetarios** del mismo destinatario (razón social, domicilio, código postal, un apellido, etc.). | Corregir el domicilio o la razón social del cliente sin que cambien la base, la cuota ni el total. |
| **R5** — Facturas simplificadas | Rectificación de una **factura simplificada** (ticket). | Rectificar una factura simplificada emitida anteriormente. |

!!! note "Correcciones de datos no monetarios (R4)"
Cuando solo se corrige un **dato no monetario** del **mismo** destinatario, la rectificativa se registra con **base 0 €, cuota 0 € y total 0 €**: no hay variación económica. Debe indicarse la causa y la modificación efectuada, e identificar la factura original; esta no se elimina, queda **complementada** por la rectificativa.

Si, en cambio, la factura **identifica a otro destinatario** (otra persona o un NIF distinto), no basta con una rectificativa de importe cero: consulte [Reemplazar una factura por completo](#reemplazar-una-factura-por-completo-reversion-y-reemision).

!!! example "Ejemplo R4 — corrección del domicilio del destinatario"
Factura original **F-2026-0105** a *Empresa Ejemplo, S.L.* (NIF `B12345678`), base 1.000 €, cuota 210 €, con el **domicilio mal consignado**. Se emite una rectificativa **R-2026-0012** con **motivo R4**, manteniendo el mismo destinatario y NIF, con el **domicilio correcto**, identificando la factura rectificada (F-2026-0105) y la causa (*«se corrige el domicilio del destinatario; no se modifican la base imponible, la cuota de IVA ni el importe total»*). Importes de la rectificación: **base 0 €, cuota 0 €, total 0 €**.

### Reemplazar una factura por completo (reversión y reemisión)

Cuando el error obliga a reemplazar la factura entera —por ejemplo, la factura **identifica a un destinatario equivocado** (otra persona o un NIF distinto)— se aplica el patrón de **reversión y reemisión**, en dos pasos:

1. **Revertir la factura original**: emitir una factura rectificativa, con el **motivo que corresponda a la causa** (por ejemplo, **`R4` — Resto** cuando el error está en el destinatario), por el **100 % de la original con signo contrario** (base −1.000 €, cuota −210 €), dejando la operación original **a cero**.
2. **Emitir una nueva factura normal** con los datos correctos (por ejemplo, con el destinatario corregido).

!!! warning "Efecto económico, no anulación registral"
En el caso de un **destinatario equivocado**, este procedimiento consigue el **efecto económico de un abono** (deja la operación original a cero), pero **no** el efecto **técnico y registral de una anulación**:

- La factura original **sigue constando en VERI\*FACTU como un registro de alta válido**, vinculado al destinatario equivocado.
- La rectificativa R4 es un **segundo registro** de factura rectificativa.
- La AEAT **no considera anulado** el registro original.
- El destinatario incorrecto **podría seguir cotejando la factura original** mediante su código QR.

### Casos de uso y su registro

Todos los ejemplos siguientes parten de una **factura original con base 1.000 € y cuota 210 € (21 %)** y se registran informando en un único registro **solo la variación** respecto a la original. Siguen el criterio de la [explicación dada en la AEAT al respecto](https://sede.agenciatributaria.gob.es/Sede/iva/sistemas-informaticos-facturacion-verifactu/preguntas-frecuentes/procedimientos-facturacion.html){target="_blank"}.

#### Ejemplo: descuento posterior de 200 € sobre la base

Tras emitir la factura se concede un descuento que reduce la base en 200 € (base correcta **800 €**, cuota correcta **168 €**). Se registra únicamente el ajuste:

| Campo | Valor |
|---|---|
| Base (desglose) | **−200 €** |
| Cuota (desglose) | **−42 €** |
| Importe total | **−242 €** |

#### Otros casos frecuentes

En todos los casos se informa únicamente la variación respecto a la factura original:

- **Aumento de la base (se facturó de menos).** La operación era 200 € superior a lo facturado → base **+200 €**, cuota **+42 €**.
- **Impago: crédito incobrable o concurso.** El cliente no paga y el crédito deviene incobrable (motivo `R3`, art. 80.Cuatro LIVA) o el destinatario entra en concurso (motivo `R2`, art. 80.Tres LIVA). Se rectifica solo la cuota repercutida que no se cobrará, manteniendo la base → base **0 €**, cuota **−210 €**.
- **Tipo de IVA incorrecto (la base era correcta).** Se aplicó 10 % en lugar de 21 %. Se mantiene la base imponible y se corrige solo el impuesto con **dos desgloses a tipos positivos**: se revierte el erróneo (base **−1.000 €**, cuota **−100 €** al 10 %) y se añade el correcto (base **+1.000 €**, cuota **+210 €** al 21 %). Neto: base 0 €, cuota **+110 €**.
- **Reemplazo completo de la factura** (base incorrecta, error en un dato de cabecera como la fecha o el tercero, varios errores a la vez). Se aplica la [reversión y reemisión](#reemplazar-una-factura-por-completo-reversion-y-reemision): anular la original (base **−1.000 €**, cuota **−210 €**) y emitir a continuación una **nueva factura normal** con los datos correctos.
- **Rectificar una rectificativa anterior.** Se emite otra rectificativa con base y cuota positivas o negativas según el ajuste necesario.

### Cómo hacerlo en Etendo

El procedimiento es común a los tres SIFs:

1. **Configure un tipo de documento rectificativo** y su secuencia, tal como se describe en [Tipos de Documento Rectificativos](#tipos-de-documento-rectificativos). La factura rectificativa debe usar una **serie distinta** a la de la factura original.
2. **Cree una factura de venta** usando ese tipo de documento rectificativo.
3. **Introduzca las líneas con la diferencia** según el caso de la tabla anterior.
4. **Indique el motivo de rectificación** que corresponda (según el SIF, ver más abajo).
5. **Enlace la factura original** que se está rectificando en la solapa correspondiente (**Factura Rectificativa**).
6. **Complete la factura y envíela al SIF** por el procedimiento habitual (envío automático o botón de registro manual, según el SIF).

### Diferencias específicas por SIF

Aunque el mecanismo es común (un tipo de documento marcado como rectificativo, mediante el campo `Es Rectificativo`), cada SIF identifica la rectificativa con sus propios campos:

- **Verifactu**: se selecciona la **clave de tipo de factura** (motivo) `R1`–`R5`. Consulte [Verifactu → Rectificación](./verifactu.md#rectificacion).
- **TicketBAI**: se utiliza un tipo de documento rectificativo con una **secuencia con prefijo** (ver [restricciones del prefijo](./ticketbai-batuz.md#tipo-de-documento-para-facturas-rectificativas)).
- **SII**: la rectificativa se identifica con **Clave tipo factura = Factura Rectificativa** (`R`), más el **Motivo de la rectificación** (`R1`–`R5`). Consulte [SII → Facturas Rectificativas de Venta](./sii-para-iva.md#facturas-rectificativas-de-venta).

---

This work is licensed under :material-creative-commons: :fontawesome-brands-creative-commons-by: :fontawesome-brands-creative-commons-sa: [ CC BY-SA 2.5 ES](https://creativecommons.org/licenses/by-sa/2.5/es/){target="_blank"} by [Futit Services S.L](https://etendo.software){target="_blank"}.
Loading
Loading