Declaraciones ANAF (base)

El módulo Romania - ANAF Declarations Base (l10n_ro_declaration) es el marco común de las declaraciones fiscales rumanas presentadas ante la ANAF. Cada declaración tiene su propio módulo, que calcula la declaración a partir de los apuntes contables contabilizados del periodo, genera el archivo XML oficial y lo comprueba antes de presentarlo. El módulo base proporciona lo que todas comparten: la gestión de periodos y plazos, el flujo de estados, los mensajes de validación, los datos del declarante, la validación del XML con el esquema oficial y la conexión con el validador de la ANAF DUKIntegrator.

Declaración

Contenido

Base legal

Módulo

D300

Declaración de IVA (Decont de TVA), mensual, trimestral, semestral o anual, con la conciliación con la declaración precumplimentada e-TVA de la ANAF.

OPANAF 174/2026, periodos a partir de enero de 2026.

l10n_ro_d300

D390

Declaración recapitulativa de las operaciones intracomunitarias (Declarația recapitulativă, VIES), mensual.

OPANAF 705/2020.

l10n_ro_d390

D394

Declaración informativa sobre las entregas y adquisiciones nacionales (Declarația informativă).

OPANAF 3769/2015, sustituida por la OPANAF 2194/2025, operaciones a partir de agosto de 2025.

l10n_ro_d394

D406

Archivo SAF-T (Fișierul Standard de Control Fiscal).

Consulte la página de SAF-T.

l10n_ro_d406

D101

Declaración anual del impuesto sobre beneficios y asistente para el impuesto trimestral de las microempresas.

OPANAF 206/2025, ejercicio 2025.

l10n_ro_d101

S1002 a S1005, S1027

Cuentas anuales e informes contables anuales, e informe semestral.

OMF 2036/2025 (ejercicio 2025), OMF 1194/2025 (informe semestral).

l10n_ro_financial_statements

Las declaraciones se instalan desde el menú Aplicaciones; instale el módulo de cada declaración. El módulo base se instala automáticamente como dependencia. Los módulos D390 y D394 requieren el módulo D300 (comprueban sus totales con la declaración de IVA del mismo periodo), y el módulo D101 requiere el módulo de cuentas anuales.

Importante

  • Las declaraciones solo están disponibles para las empresas cuyo país fiscal es Rumanía y cuya moneda es el RON. No se puede crear una declaración para otra empresa, y el cálculo se rechaza si la moneda de la empresa no es el RON.

  • Los importes de las declaraciones se redondean a lei enteros (redondeo hacia arriba en la mitad), como exigen los formularios de la ANAF.

  • Las declaraciones se preparan en Odoo, pero su presentación ante la ANAF es un paso manual fuera de Odoo, véase Presentación ante la ANAF.

Configuración

Datos de la empresa

Vaya a Contabilidad ‣ Configuración ‣ Ajustes y desplácese hasta la sección Declaraciones ANAF de Rumanía, que aparece para las empresas rumanas. Los valores se almacenan en la empresa y se proponen en cada nueva declaración.

Ajuste

Campos

Utilizado para

Declarante

Apellido del declarante, Nombre del declarante, Cargo del declarante, CNP/CUI del declarante, Teléfono del declarante, Correo del declarante

La persona que firma las declaraciones (nume, prenume, funcție). El apellido, el nombre y el cargo son obligatorios: la validación falla si alguno está vacío. El teléfono y el correo electrónico toman por defecto los de la empresa.

Actividad y periodo de IVA

Código CAEN principal, Periodo de IVA, Cuenta bancaria de las declaraciones

El código CAEN de la actividad principal realmente ejercida (exactamente 4 dígitos); el periodo de IVA (Mensual, Trimestral, Semestral o Anual), que se propone como tipo de periodo de las nuevas declaraciones; y la cuenta bancaria impresa en las declaraciones (por defecto, la primera cuenta bancaria de la empresa).

Representante fiscal

Nombre del representante, CUI/CNP del representante, Dirección del representante

Opcional. El apoderado (împuternicit) que presenta las declaraciones en nombre de la empresa.

Validación con DUKIntegrator

URL del servicio de validación DUK, Token del servicio de validación DUK, Solicitar PDF DUK

La conexión con el validador de la ANAF, véase Validación con DUKIntegrator.

Los módulos de declaraciones añaden sus propios ajustes a esta sección; por ejemplo, el módulo D394 añade los datos de la persona que elabora la declaración.

La empresa necesita un CUI válido en su campo NIF: la validación comprueba su dígito de control. Una empresa cuyo NIF no empieza por RO no está registrada a efectos de IVA, y las declaraciones de IVA muestran un aviso.

Permisos de acceso

El menú Contabilidad ‣ Rumanía (ANAF) se muestra a los usuarios que tienen acceso a una empresa cuyo país fiscal es Rumanía y que tienen un derecho de acceso de contabilidad. Los contables pueden crear y modificar las declaraciones, los usuarios con acceso de solo lectura a la contabilidad solo pueden leerlas, y los asesores contables (responsables) también pueden eliminarlas y editar la configuración. Un usuario solo ve las declaraciones de las empresas seleccionadas en el selector de empresas.

Códigos de impuesto y reglas de correspondencia

Las declaraciones no leen directamente los impuestos. Cada impuesto del plan contable rumano está vinculado a un código fiscal rumano, que indica a cada declaración dónde se notifica la operación: las filas de la D300, el tipo de operación de la D390, etc. El vínculo es el campo Código de impuesto rumano del impuesto (Contabilidad ‣ Configuración ‣ Impuestos), que se rellena automáticamente para los impuestos del plan contable rumano.

Los asesores contables pueden revisar y completar el catálogo en Contabilidad ‣ Rumanía (ANAF) ‣ Configuración (este menú les está reservado):

  • Códigos de impuesto rumanos: los códigos, con el tipo de IVA, la clase de operación y el tratamiento D300, D390 y D394 de cada código. Son datos maestros globales, compartidos por todas las empresas.

  • Reglas de correspondencia de impuestos: reglas que asignan un código fiscal a una operación según el impuesto, el tipo de documento, la posición fiscal, la ubicación del contacto (Rumanía, UE, fuera de la UE), la categoría de producto o un intervalo de fechas. Se utilizan, por ejemplo, para los impuestos históricos al 19 %, 9 % y 5 %, y para los impuestos de IVA de caja.

Nota

Si un impuesto utilizado en el periodo no tiene código fiscal ni regla, la declaración muestra un mensaje de error y la operación se deja fuera. Vincule el impuesto a un código, o cree una regla, y vuelva a calcular la declaración.

Preparar una declaración

Todas las declaraciones funcionan de la misma manera. Abra la declaración desde Contabilidad ‣ Rumanía (ANAF) ‣ Declaraciones y haga clic en Nuevo.

  1. Elija el periodo. El Tipo de periodo se propone a partir del Periodo de IVA de la empresa, y el año y el número de periodo a partir del último periodo finalizado. El formulario muestra las fechas del periodo (Periodo) y el Plazo legal. Los datos del declarante se copian de la empresa y pueden modificarse en la declaración.

  2. Haga clic en Calcular. Las filas de la declaración se rellenan a partir de los apuntes contables contabilizados del periodo y la declaración pasa al estado Calculada. Las comprobaciones locales se ejecutan al mismo tiempo y sus resultados se enumeran en la pestaña Validación.

  3. Revise las filas y complete los datos que no pueden calcularse a partir de la contabilidad. Los valores editados se conservan cuando se vuelve a calcular la declaración con Recalcular.

  4. Haga clic en Validar. Odoo ejecuta de nuevo las comprobaciones locales, genera el XML, lo comprueba con el esquema XSD oficial y, si el validador DUK está configurado, lo valida con DUKIntegrator. Si ningún resultado es un error, la declaración pasa a Validada; de lo contrario, permanece en Calculada.

  5. Haga clic en Exportar XML. El archivo XML se adjunta a la declaración y se descarga, y la declaración pasa a Exportada.

  6. Presente la declaración ante la ANAF (véase Presentación ante la ANAF) y después haga clic en Marcar como presentada.

El archivo XML se denomina <form>_<CUI>_<period>_v<version>.xml, por ejemplo D300_12345678_2026-01_v1.xml (2026-T1 para un trimestre, 2026-S1 para un semestre, 2026 para un año).

Estados y botones

Estado

Significado

Borrador

La declaración está creada pero no calculada. El periodo todavía puede modificarse.

Calculada

Las filas están calculadas. Haga clic en Recalcular tras corregir la contabilidad, o en Validar para comprobar la declaración.

Validada

La validación no encontró ningún error. Revalidar la ejecuta de nuevo.

Exportada

El archivo XML está generado. Volver a exportar XML sustituye el archivo adjunto.

Presentada

Ha marcado la declaración como presentada. La Fecha de presentación se establece en la fecha de hoy salvo que la haya rellenado, y el Número de registro recibido de la ANAF puede introducirse en la pestaña Validación.

Archivada

Una declaración sustituida por una versión posterior, o archivada con Archivar.

Restablecer a borrador está disponible en los estados Calculada, Validada y Exportada y elimina el contenido calculado y los mensajes. Solo se pueden eliminar las declaraciones que aún no se han exportado. No puede existir dos veces una declaración de la misma empresa, tipo de periodo, periodo, tipo de declaración y versión.

Plazos

La Fecha límite se calcula a partir del final del periodo. Si cae en fin de semana o en un día festivo nacional rumano (calendario de la base de la localización), se traslada al siguiente día hábil.

  • D300 y D390: el día 25 del mes siguiente al periodo.

  • D394: el día 30 del mes siguiente al periodo.

  • D101: el 25 de junio del año siguiente.

  • Estados financieros anuales: 150 días después del final del ejercicio; informe semestral: 45 días.

Correcciones

Una declaración que se ha exportado, presentado o archivado no puede modificarse. Para corregirla, haga clic en Crear rectificativa (Crear declaración corregida en la D394). Odoo copia la declaración como una nueva versión del mismo periodo (Tipo de declaración Rectificativa, Versión + 1), vinculada a la declaración que corrige, y usted la calcula, valida, exporta y presenta como la primera. Cuando la versión corregida se marca como presentada, las versiones anteriores se archivan. El contenido exacto de una rectificativa depende de la declaración: consulte su página.

Mensajes de validación

Los resultados de las comprobaciones se guardan como mensajes de validación. Los botones Errores y Advertencias de la parte superior de la declaración los abren, y Contabilidad ‣ Rumanía (ANAF) ‣ Mensajes de validación enumera los de todas las declaraciones, con filtros por gravedad y por origen del mensaje (XSD, DUKIntegrator o las comprobaciones locales). Cada mensaje tiene un código, la fila afectada y, cuando procede, el asiento contable y el contacto, para abrirlos directamente.

Un error bloquea la validación. Una advertencia no: léala y corrija la contabilidad o la declaración si está justificado.

Validación con DUKIntegrator

DUKIntegrator es el programa Java con el que la ANAF comprueba las declaraciones antes de su presentación; contiene las reglas de validación oficiales de cada formulario. Odoo comprueba por sí mismo cada XML con el esquema XSD incluido en el módulo, pero las reglas de la ANAF son más estrictas. Por ello, Odoo envía el XML a un pequeño servicio de validación DUK, que ejecuta DUKIntegrator y devuelve el resultado. El servicio se suministra con el módulo en addons/l10n_ro_declaration/tools/duk_service y se instala por separado de Odoo, en un servidor que pueda acceder a static.anaf.ro.

Nota

Los programas de la ANAF (archivos jar) no forman parte del módulo y no se redistribuyen: se descargan del sitio web de la ANAF con el script proporcionado.

Qué comprueba la validación

Al hacer clic en Validar, Odoo ejecuta tres comprobaciones en este orden y registra el resultado en la pestaña Validación:

  1. Las comprobaciones locales de la declaración (datos de la empresa, declarante, reglas del formulario, comprobaciones cruzadas con otras declaraciones).

  2. La comprobación XSD (Comprobación XSD): Válido, No válido o Falta el esquema.

  3. La comprobación de DUKIntegrator (Validación DUK).

Validación DUK

Significado

Válido

DUKIntegrator respondió ok: no encontró ningún error ni advertencia. Es el resultado que cabe esperar antes de presentar.

Válido con advertencias

DUKIntegrator solo notificó advertencias (líneas W:, A: o I:). Las advertencias se enumeran en los mensajes y no bloquean la validación.

Errores

DUKIntegrator notificó al menos un error (líneas E: o F:, o un resultado ilegible). Los errores se enumeran en los mensajes y bloquean la validación: corríjalos y haga clic en Revalidar.

No configurado

No hay ninguna URL de servicio configurada. El paso se omite sin ningún mensaje, y la declaración puede alcanzar el estado Validado sin haber sido comprobada con las reglas de la ANAF.

Servicio no disponible

El servicio no respondió, respondió con un error (por ejemplo, el token es incorrecto) o DUKIntegrator no pudo ejecutarse (por ejemplo, el validador del formulario no está instalado). Odoo registra una advertencia, que no bloquea la validación.

Advertencia

Validado solo significa que Odoo no ha encontrado ningún error. Si Validación DUK está en No configurado o Servicio no disponible, la declaración no ha sido validada por DUKIntegrator. Instale el servicio y asegúrese de que el estado sea Válido antes de presentar.

Cuando Solicitar PDF DUK está marcado (por defecto), el servicio también devuelve el PDF oficial generado por el programa de la ANAF, con el XML adjunto, si la validación se realiza correctamente. Se adjunta a la declaración como PDF DUK. La D101 y los estados financieros se validan sin el PDF: el PDF de la ANAF de estos formularios contiene los anexos de la declaración (notas, informes), que se elaboran con el programa de asistencia de la ANAF.

Instalar el servicio de validación DUK

El servicio necesita Java (se utilizó OpenJDK 21 para verificarlo) y Python 3, y se inicia con los archivos de la ANAF en una misma carpeta (DUK_HOME). El módulo proporciona un Dockerfile que contiene Java y Python.

  1. Descargue los programas de la ANAF. En una máquina que pueda acceder a static.anaf.ro, ejecute el script download_duk.sh de la carpeta del servicio con la carpeta de destino y los formularios que desea validar:

    $ ./download_duk.sh /srv/duk D300 D390 D394 D406
    

    El script descarga DUKIntegrator.jar, sus bibliotecas, la configuración y los jar de validación y de PDF de cada formulario solicitado (D300Validator.jar, D300Pdf.jar…) desde el canal de actualizaciones de la ANAF (versiuni.xml). Solicite todos los formularios que utilice; por ejemplo, añada D101, S1002, S1003, S1004 y S1005 para la declaración del impuesto sobre beneficios y los estados financieros. Cuando se solicita D406, el script también instala DUKIntegrator_AnLunaUI.jar, el validador con control de periodo utilizado para el archivo SAF-T (véase SAF-T D406 (Rumanía)). Ejecute el script de nuevo cuando la ANAF publique nuevas versiones de los validadores.

  2. Elija un token. El servicio se niega a iniciarse sin un token (DUK_TOKEN), que Odoo envía como bearer token. Utilice un secreto largo y aleatorio. La opción --insecure inicia el servicio sin token y está pensada únicamente para máquinas de prueba privadas.

  3. Inicie el servicio. Por ejemplo, con Docker:

    $ docker build -t eyssen/duk-service .
    $ docker run -d --name duk -p 127.0.0.1:8080:8080 -e DUK_TOKEN=<secret> \
          -v /srv/duk:/opt/duk:ro eyssen/duk-service
    

    O directamente en el servidor: DUK_HOME=/srv/duk DUK_PORT=8080 DUK_TOKEN=<secret> python3 duk_service.py. Por defecto, el servicio escucha únicamente en 127.0.0.1.

  4. Compruébelo. curl http://localhost:8080/health responde {"status": "ok"}, y curl -H "Authorization: Bearer <secret>" http://localhost:8080/info enumera los validadores instalados.

Importante

No exponga el servicio en Internet. Publique el puerto en una interfaz privada o en una red privada a la que solo pueda acceder el servidor de Odoo, y mantenga el token en secreto.

El servicio se configura con variables de entorno:

Variable

Valor predeterminado

Significado

DUK_HOME

/opt/duk

Carpeta con DUKIntegrator.jar, lib/ y config/.

DUK_TOKEN

ninguno

Bearer token, obligatorio salvo que el servicio se inicie con --insecure.

DUK_BIND, DUK_PORT

127.0.0.1, 8080

Dirección y puerto del servicio (0.0.0.0 dentro de la imagen de Docker).

DUK_TIMEOUT

120

Segundos permitidos para una validación. Auméntelo para archivos SAF-T grandes.

DUK_MAX_CONCURRENT

2

Número de validaciones que se ejecutan al mismo tiempo. Una solicitud que espera más de DUK_QUEUE_TIMEOUT segundos (60 por defecto) recibe una respuesta HTTP 503.

DUK_MAX_BYTES

400 MB

Tamaño máximo del archivo XML.

DUK_JAVA, DUK_JAVA_OPTS

java

Ejecutable de Java y opciones adicionales, por ejemplo -Xmx4g para archivos SAF-T grandes.

Conectar Odoo con el servicio

Vaya a Contabilidad ‣ Configuración ‣ Ajustes, sección Declaraciones ANAF de Rumanía, ajuste Validación DUKIntegrator, y complete:

  • URL del servicio de validación DUK: la URL base del servicio, por ejemplo http://duk:8080. Déjela vacía para omitir la validación de la ANAF.

  • Token del servicio de validación DUK: el DUK_TOKEN del servicio. Solo los administradores ven este campo.

  • Solicitar PDF DUK: márquelo para recibir el PDF oficial.

En lugar de configurar cada empresa, el servicio puede definirse una sola vez para la base de datos con los parámetros del sistema l10n_ro_declaration.duk_service_url y l10n_ro_declaration.duk_service_token (modo desarrollador, Ajustes ‣ Técnico ‣ Parámetros ‣ Parámetros del sistema). Una empresa que tiene su propia URL utiliza su propio token; el token del parámetro del sistema solo se envía a la URL del parámetro del sistema, nunca a una URL escrita en una empresa. También pueden definirse los parámetros l10n_ro_declaration.duk_service_timeout (segundos, 120 por defecto) y l10n_ro_declaration.duk_raw_threshold (bytes, 20 MB por defecto; los archivos mayores se transmiten en flujo al servicio).

Presentación ante la ANAF

Odoo prepara y comprueba las declaraciones, pero no las envía a la ANAF: los módulos de declaraciones no tienen conexión con los servicios de presentación de la ANAF. Tras la validación:

  1. Haga clic en Exportar XML y, si se solicitó, abra el PDF DUK en la pestaña Validación.

  2. Presente usted mismo la declaración ante la ANAF, por ejemplo a través del SPV (Spațiul Privat Virtual, el espacio privado virtual del contribuyente en el portal de la ANAF), con el archivo que el portal exige para el formulario.

  3. De vuelta en Odoo, haga clic en Marcar como presentada. Opcionalmente, introduzca la Fecha de presentación y el Número de registro (număr de înregistrare) que la ANAF asignó a la declaración. Estos dos campos son informativos: Odoo no los comprueba.

Nota

La integración de e-Factura, que envía facturas al SPV, es una función independiente y no presenta las declaraciones.