Quien hace negocios en Austria conoce las preguntas: ¿son correctos la razón social y la dirección de mi nuevo cliente? ¿Sigue figurando la empresa en el Registro Mercantil o está en liquidación? ¿Se ha abierto un procedimiento de insolvencia contra el cliente al que suministro desde hace dos años? Las respuestas figuran en el Registro Mercantil del Ministerio de Justicia, pero apenas nadie lo consulta con regularidad. En Odoo el contacto se crea una vez y, después, envejece.
Para ello hemos desarrollado el módulo Registro Mercantil para contactos (partner_firmenbuch_at). Conecta los contactos de Odoo con el Registro Mercantil y con el registro oficial de direcciones del BEV. Está escrito para Odoo 19 y está disponible gratuitamente en GitHub como software libre bajo la licencia LGPL-3:
github.com/Alex0176/odoo-partner-firmenbuch-at
Contenido de este artículo
- El problema: datos maestros que nadie mantiene
- Qué hace el módulo
- Propuestas en lugar de sobrescribir
- Avisos: insolvencia, liquidación, balance
- Verificación de direcciones con el registro de direcciones del BEV
- Implementación técnica
- Lo que nos ha enseñado el servicio real
- Instalación y configuración
- Protección de datos: qué envía el módulo y a quién
- Pruebas
- Límites y aviso legal
- Preguntas frecuentes
- Asistencia de Biricon IT Services
El problema: datos maestros que nadie mantiene
Un contacto en Odoo suele crearse con prisa: nombre, dirección aproximada, quizá un número de IVA. Eso basta para el primer presupuesto. No basta para facturas que deben estar dirigidas de forma jurídicamente correcta, y mucho menos para darse cuenta de que algo ha cambiado en el cliente. En la práctica se aprecian cuatro carencias:
- Datos maestros incompletos. El número del Registro Mercantil, el tribunal y la forma jurídica casi siempre faltan, porque consultarlos es un trabajo manual.
- Grafías incorrectas. Razón social sin forma jurídica, erratas en la calle o en la localidad, código postal intercambiado. Uno solo se da cuenta cuando el correo postal regresa.
- Falta de seguimiento. Si un tribunal abre un procedimiento de insolvencia o un cliente disuelve su sociedad, Odoo no se entera. Ventas sigue suministrando a crédito.
- Fuentes dispersas. El Registro Mercantil, las cuentas anuales y el registro de direcciones se encuentran en lugares distintos. Quien quiere comprobarlos copia datos a mano entre ventanas del navegador.
Qué hace el módulo
- Las empresas nuevas se consultan. Cuando alguien crea un contacto como empresa (país Austria o vacío), el módulo la busca en el Registro Mercantil en pocos minutos. Si hay exactamente una coincidencia, se completan los campos vacíos: calle, código postal, localidad, país, número del Registro Mercantil, tribunal y forma jurídica.
- Las discrepancias se proponen, nunca se sobrescriben. Si el contacto contiene algo distinto de lo que figura en el registro, se genera una propuesta de modificación que un empleado aprueba campo por campo.
- Búsqueda en el Registro Mercantil desde el contacto. En la pestaña Registro Mercantil, la búsqueda encuentra empresas por nombre, incluso si la coincidencia automática no fue inequívoca.
- Supervisión diaria. El módulo consulta cada día qué empresas y documentos han cambiado en el registro y revisa a los clientes afectados. Además, a intervalos configurables, se vuelve a revisar por completo cada empresa.
- Niveles de aviso. Se detectan y se hacen visibles en el contacto los procedimientos de insolvencia y de reestructuración abiertos (según los hechos jurídicos del registro), la liquidación, la cancelación, los fondos propios negativos y un ratio de fondos propios bajo.
- Verificación de direcciones. Las direcciones austriacas se comprueban localmente con el registro oficial de direcciones de la Oficina Federal de Metrología y Topografía (BEV).
- Datos del registro en el contacto. El tribunal, la forma jurídica, los gerentes y los hechos jurídicos figuran en la pestaña Registro Mercantil. Reflejan el registro y se actualizan directamente.
- Avisos solo hacia dentro. Todos los mensajes van al canal interno de Discuss Registro Mercantil y al Chatter del contacto. Una pasada de revisión sobre muchas empresas genera un mensaje colectivo en lugar de uno por empresa. El módulo nunca envía nada a los clientes.
Propuestas en lugar de sobrescribir
Los datos oficiales no son automáticamente los mejores datos para su negocio: quizá en el contacto figure deliberadamente la dirección de entrega, quizá se haya introducido un nombre abreviado. Por eso el módulo nunca modifica por sí mismo los valores existentes. Solo completa los campos vacíos y, en caso de discrepancia, crea una propuesta.
En Contactos → Registro Mercantil → Propuestas del Registro Mercantil verá, por campo, el valor actual y el valor del registro. Los campos que no desee aplicar, déjelos sin marcar. Con Aplicar seleccionados solo se escriben los campos marcados; con Rechazar la propuesta caduca. Una propuesta nueva sustituye a las propuestas abiertas anteriores del mismo contacto, para que no se apliquen valores obsoletos.
Avisos: insolvencia, liquidación, balance
El módulo distingue tres niveles:
- Sin incidencias: no hay nada que comunicar.
- Aviso (amarillo): en el registro figuran inscripciones vigentes sobre liquidación, disolución, extinción, cancelación o fusión, la empresa está marcada como cancelada, o un procedimiento de insolvencia anterior se ha dado por concluido en los últimos años (por defecto tres años, configurable). O bien las cuentas anuales muestran fondos propios negativos, un ratio de fondos propios inferior al 8 % (valor por defecto basado en el § 23 URG, configurable), una pérdida del ejercicio o una caída de la facturación del 25 % o más.
- Crítico (rojo): se ha abierto un procedimiento de insolvencia, de quiebra o de reestructuración que aún no ha concluido, o se ha desestimado una solicitud por falta de patrimonio que cubra los costes. Esto último cuenta como insolvencia.
En el contacto aparece un banner de color, en la lista de contactos un indicador, y en la búsqueda hay filtros para Aviso del Registro Mercantil y Registro Mercantil crítico. Si un cliente pasa a nivel crítico, el vendedor responsable (o, en su defecto, el administrador) recibe una actividad Registro Mercantil: revisar clientes y el canal Registro Mercantil recibe un mensaje.
Hechos jurídicos. Los procedimientos de insolvencia no figuran en el registro en el texto de la empresa, sino como hechos jurídicos con fecha, número de expediente y tribunal. El módulo los lee, asocia la apertura y la conclusión al mismo número de expediente y los muestra en el contacto como lista. Así, un procedimiento concluido pasa a ser, pasados unos años, solo información, mientras que uno en curso aparece en rojo.
Cuentas anuales. Si las últimas cuentas anuales están disponibles en XML, el módulo lee los fondos propios, el resultado del ejercicio, el total del balance y la facturación, y calcula el ratio de fondos propios, la variación de la facturación y la clase de tamaño según el § 221 UGB (incluidas las microempresas). Las sociedades pequeñas no están obligadas a publicar su facturación; en ese caso el módulo no muestra ninguna. Su resultado lo deduce del beneficio del balance menos el beneficio acumulado de ejercicios anteriores y lo marca como estimación. Los nombres de las partidas que se buscan son configurables, porque el XML está estructurado de forma distinta según el formulario.
Verificación de direcciones con el registro de direcciones del BEV
El BEV ofrece el registro de direcciones como datos abiertos (Adresse Relationale Tabellen – Stichtagsdaten, con nueva fecha de referencia dos veces al año, de uso gratuito citando la fuente). El módulo descarga el extracto a través del servicio oficial INSPIRE-ATOM, unos 120 MB con aproximadamente 2,5 millones de direcciones, y lo importa a tablas propias y ligeras.
A continuación, cada dirección de empresa austriaca con calle se comprueba localmente al crearla y en cada modificación: código postal, calle, número de portal, localidad y estado federado. Ninguna dirección se envía a un servicio. El resultado figura como indicador bajo la dirección:
- Válida: la dirección existe tal cual en el registro.
- Número de portal desconocido: la calle y la localidad coinciden, el número de portal no.
- Corrección propuesta: errata en la calle o la localidad, código postal incorrecto. La corrección queda disponible como propuesta.
- No encontrada: el registro no conoce esta dirección.
Un estado federado vacío se completa directamente. Las direcciones de contacto privadas (tipo Dirección privada) no se comprueban. La indicación de la fuente © Österreichisches Adressregister, Stichtagsdaten vom … figura en los ajustes con la fecha de referencia actual. La actualización se ejecuta semanalmente, pero solo descarga si el BEV ha publicado una fecha de referencia más reciente.
Implementación técnica
El acceso al registro
El Ministerio de Justicia ofrece el Registro Mercantil a través de los FBW-WebServices (HVD) en JustizOnline como interfaz SOAP. El acceso es gratuito, pero requiere una clave de API que se solicita con ID Austria en Informationsweiterverwendung (reutilización de la información). La clave se envía en la cabecera HTTP X-API-KEY. El módulo utiliza el servicio directamente, sin screen scraping.
El cliente models/firmenbuch_client.py es Python puro, sin dependencia de Odoo. Conoce las consultas SUCHEFIRMAREQUEST, AUSZUG_V2_REQUEST, SUCHEURKUNDEREQUEST, URKUNDEREQUEST, así como VERAENDERUNGENFIRMAREQUEST y VERAENDERUNGENURKUNDEREQUEST. De este modo puede probarse con respuestas guardadas. Las solicitudes se realizan con un intervalo de 0,3 segundos y las consultas de cambios, en bloques de siete días.
Interpretación del extracto
Del extracto solo se utilizan las inscripciones que siguen vigentes (atributo AUFRECHT distinto de false). El nombre procede del indicador de datos FI_DKZ02, la dirección de FI_DKZ03, el domicilio social de FI_DKZ06 y la forma jurídica de FI_DKZ07. A ello se suman el tribunal, la dirección web, las personas con poder de representación y los hechos jurídicos. Para el nivel de aviso, se buscan en los textos de todas las inscripciones vigentes las palabras clave configurables:
DEFAULT_CRITICAL = "Konkursverfahren, Insolvenzverfahren, Sanierungsverfahren, Konkurs eröffnet, ..."
DEFAULT_WARNING = "Liquidation, aufgelöst, Auflösung, Abwicklung, Löschung, gelöscht, Verschmelzung, in Liqu."
La ventaja de la búsqueda por palabras clave: funciona con independencia del campo en el que el registro lleve una operación. La desventaja figura en la sección Límites.
Supervisión
El módulo crea tres acciones planificadas:
- Buscar empresas nuevas (cada 10 minutos, hasta 20 contactos por ejecución). Además, se activa de inmediato al crear el contacto.
- Supervisar empresas (diariamente a las 04:30). Consulta las empresas y los documentos modificados desde la última ejecución (como máximo 30 días atrás), revisa a los clientes afectados y, después, a hasta 50 clientes cuya última revisión sea anterior al plazo configurado. Cada empresa se guarda en una transacción propia, para que un error no haga perder resultados anteriores. El resultado de la ejecución llega al canal como un único mensaje colectivo.
- Actualizar el registro de direcciones (semanalmente a las 03:15).
Sin clave de API, las dos primeras terminan de inmediato. Una suma de comprobación por empresa evita que se vuelvan a analizar extractos sin cambios.
El registro de direcciones
Los datos del BEV se encuentran en tres tablas (bev.locality, bev.street, bev.address) con un índice sobre código postal, código de calle y número de portal. La importación se realiza mediante COPY en una transacción, de modo que las tablas se sustituyen en un solo paso. Los números de portal se normalizan a la grafía del registro (51-55, 12a). Con números de portal, las tablas ocupan unos 400 MB en la base de datos. Quien no lo desee, desactiva Comprobar números de portal y se las arregla con unas 150.000 filas.
Lo que nos ha enseñado el servicio real
Un módulo que solo se ha probado con respuestas de prueba escritas por uno mismo aún no se considera terminado. Por eso comprobamos el cliente con el servicio real antes de la publicación, con la clave de nuestra propia empresa. Con ello salieron a la luz varias diferencias respecto a nuestras suposiciones, que hemos corregido:
- Solo la información resumida. Con esta clave, el extracto solo puede obtenerse con el alcance información resumida. El servicio rechaza las solicitudes con información completa. En la versión 1.0.0, la ejecución diaria todavía lo solicitaba mal; la versión 1.1.0 lo corrige. De las personas, el módulo solo toma los nombres de los gerentes con poder de representación; no se leen los socios ni las direcciones de personas.
- Calle y número de portal por separado. La dirección llega como
STRASSEyHAUSNUMMERen elementos distintos, no como un único texto. El módulo une ambos. - Tribunal en la ejecución. El tribunal competente no figura en la parte de la empresa, sino en el último bloque
VOLLZdel extracto. - Empresas canceladas. Una empresa cancelada se reconoce por un atributo (
MIT_FIRMA_GELOESCHT_DURCH_VNR) y no por un texto. El módulo convierte esto en el hallazgo Empresa cancelada, que activa un aviso. - El nombre de la empresa no es la palabra de búsqueda. La búsqueda compara el comienzo del nombre. «Muster GmbH» no encuentra nada si el registro escribe «Muster Gesellschaft m.b.H.»; las empresas en liquidación llevan «in Liqu.» en el nombre y en el nombre del contacto a veces aparece todavía
&. Por eso el módulo repite la búsqueda sin la forma jurídica y compara nombres sin las variantes de grafía de la forma jurídica, sin caracteres HTML y sin el añadido «in Liqu.». Una coincidencia única solo se acepta si su nombre empieza igual que el del contacto. - Cambios de documentos sin número del Registro Mercantil. La lista de documentos modificados contiene solo una clave. El número del Registro Mercantil (sin letra de control) figura al comienzo de esa clave. El módulo asocia con ella los cambios a los clientes.
Para cada uno de estos puntos existe ahora una prueba automatizada con una respuesta reconstruida.
La prueba con nuestra propia base de clientes
Tras la versión 1.1.0 probamos el módulo con nuestra propia base de clientes. Primero se ejecutó solo una búsqueda de nombres de solo lectura y, después, la asignación de las coincidencias inequívocas. No se modificó nada sin tener en cuenta los valores existentes: se completaron campos vacíos, las discrepancias quedan como propuestas pendientes de aprobación y no salió ni un solo correo electrónico. El resultado, sin nombrar empresas concretas:
- Se buscaron 438 contactos de empresa con estado de cliente en Austria o sin país.
- 138 de ellos se asignaron de forma inequívoca en el Registro Mercantil. Otros 18 tenían una coincidencia de nombre inequívoca, pero otra dirección en el registro (cambio de domicilio o empresa homónima), y por eso quedaron intactos. 2 nombres son ambiguos.
- Unos 280 no los encontramos o solo como coincidencia parcial. Se trata de personas físicas, empresarios individuales, empresas extranjeras, contactos que solo indican una marca o una localidad, y empresas cuyo nombre en el contacto difiere de la inscripción, por ejemplo porque figura otra forma jurídica. Para ellos queda la Búsqueda en el Registro Mercantil manual.
- Se generaron 63 propuestas de modificación, sobre todo para la calle y el número de portal (grafía) y para el país.
- 66 avisos, ningún nivel crítico. 36 empresas figuran en el registro como canceladas (9 de ellas también en liquidación), 2 habían tenido un procedimiento de insolvencia ya concluido y en 42 llamaron la atención las cuentas anuales: ratio de fondos propios bajo, pérdidas o caída de la facturación. Una empresa cancelada no es automáticamente un cliente perdido, pero sí un motivo para revisar la dirección y el destinatario de la factura.
Dos lecciones: una base de clientes de operaciones reales es una prueba mucho mejor que cualquier respuesta reconstruida. Con ella encontramos errores en la búsqueda de nombres, corregidos en la versión 1.1.1 (véase más arriba). Y la tasa de coincidencias depende mucho de lo cuidadosamente que estén nombrados los contactos: quien escribe la razón social tal como la lleva el registro es encontrado de forma fiable.
Instalación y configuración
Requisitos: Odoo 19.0 con las aplicaciones estándar Contactos y Discuss, el paquete Python requests (presente en toda instalación de Odoo) y acceso HTTPS saliente a justizonline.gv.at y data.bev.gv.at. El módulo no tiene dependencias fuera de las aplicaciones estándar, por lo que no arrastra ningún otro módulo.
- Colocar la carpeta
partner_firmenbuch_aten eladdons_path, actualizar la lista de aplicaciones e instalar el módulo; en sistemas de producción, lo mejor es hacerlo primero en una base de datos de prueba. - El módulo crea el canal de Discuss Registro Mercantil (usuarios internos) y añade a todos los administradores. Además se crean las tres acciones planificadas.
- Solicitar la clave de API: JustizOnline (ID Austria), Informationsweiterverwendung, API FBW.
- Ajustes → Registro Mercantil: introducir la clave y pulsar Probar conexión. Después, elegir el canal, las opciones, las palabras clave y los códigos de partida.
odoo-bin -c /etc/odoo/odoo.conf -d <datenbank> -i partner_firmenbuch_at --stop-after-init
Importante en sistemas de producción: la primera ejecución de la actualización del registro de direcciones se inicia automáticamente la noche posterior a la instalación, a las 03:15, y descarga unos 120 MB. Después se comprueban todos los contactos austriacos; las incidencias aparecen como propuestas y como un mensaje en el canal. Quien no lo desee, debe desactivar antes la acción planificada Registro de direcciones (BEV): actualizar o desactivar Comprobar direcciones austriacas en los ajustes.
Importaciones masivas: importe con las claves de contexto fb_no_lookup=True y bev_no_check=True. De lo contrario, cada empresa austriaca importada quedaría anotada para una consulta al registro (20 cada diez minutos) y cada dirección se comprobaría al crearla.
Protección de datos: qué envía el módulo y a quién
- Datos personales: los nombres de los gerentes son datos personales, aunque figuren públicamente en el registro. El módulo los almacena únicamente para gestionar la relación comercial. Quien no lo desee, borra el campo o no lo utiliza.
- Registro Mercantil: solo el nombre o el número del Registro Mercantil de los contactos marcados como empresa (sin empresa superior, país Austria o vacío) se envía a
justizonline.gv.at, junto con la clave de API. Las personas físicas y las personas de contacto de una empresa no se envían nunca. - Registro de direcciones: solo se descarga el extracto público. Las direcciones de los clientes no salen del sistema.
- Sin correos a clientes: los avisos van al canal interno, al Chatter y, como actividad, a los empleados.
- Clave: la clave de API solo es visible para los administradores.
El Registro Mercantil es un registro público. La reutilización de los datos está sujeta a las condiciones de reutilización de la información de JustizOnline.
Pruebas
El módulo incluye 18 pruebas automatizadas. Trabajan con respuestas de registro reconstruidas y un extracto de direcciones en miniatura, por lo que no necesitan ni clave de API ni red:
- Normalización del número del Registro Mercantil
- Interpretación del extracto (nombre, dirección, tribunal, gerentes, empresa cancelada; las inscripciones no vigentes se ignoran)
- Comparación de nombres: variantes de grafía de la forma jurídica, «in Liqu.», caracteres HTML, ninguna coincidencia con una empresa ajena
- Cuentas anuales: fondos propios, resultado, total del balance
- Se encuentra una empresa nueva, se completan los campos vacíos, se proponen las discrepancias, la propuesta se aplica parcialmente
- Supervisión: un procedimiento de insolvencia abierto sitúa el nivel en crítico y genera la actividad, un procedimiento concluido genera un aviso, las personas de contacto no se revisan por separado
- Los cambios de documentos se asignan mediante la clave
- Sin clave de API no se consulta nada
- Verificación de direcciones con el extracto en miniatura
odoo-bin -d <testdatenbank> -i partner_firmenbuch_at \
--test-enable --test-tags=/partner_firmenbuch_at --stop-after-init
La traducción al alemán se encuentra en i18n/de.po.
Límites y aviso legal
- Una coincidencia es un indicio, no un dictamen jurídico. El estado se deduce de palabras clave en inscripciones vigentes del registro. Consulte usted mismo el registro antes de decidir sobre crédito o condiciones de suministro.
- Detección de insolvencias probada solo con casos reconstruidos. El módulo reconoce los procedimientos por palabras del texto libre de los hechos jurídicos (apertura, conclusión, plan de reestructuración confirmado, por falta de patrimonio). Reconstruimos su formato a partir de un extracto real del registro, pero durante el desarrollo no dispusimos de ningún caso real de insolvencia. Por ello, una formulación inusual puede pasar desapercibida. El módulo no sustituye al archivo oficial de edictos (Ediktsdatei).
- Cuentas anuales solo en XML. Las presentaciones solo en PDF se omiten. En sociedades muy pequeñas, el balance puede haberse presentado abreviado, sin las cifras que lee el módulo.
- Solo Austria. No se consultan empresas extranjeras. Los sitios web de las empresas no figuran en el registro y no se completan.
- Asignación automática solo con coincidencia inequívoca. Si hay varias empresas con el mismo nombre, un mensaje en el canal solicita la Búsqueda en el Registro Mercantil manual.
- Las interfaces pueden cambiar. El módulo depende de los servicios del BMJ y del BEV. Si cambian el punto final, el esquema o el feed ATOM, puede ser necesaria una actualización.
- Probado para Odoo 19. Desarrollado y probado para Odoo 19.0 Community. No lo hemos comprobado para otras versiones. Este artículo no constituye asesoramiento jurídico.
Preguntas frecuentes
¿Cuesta algo el acceso al registro?
Según nuestra información, no: los FBW-WebServices para la reutilización de la información son gratuitos, pero requieren una clave de API que se solicita a través de JustizOnline. Son determinantes las condiciones vigentes del Ministerio de Justicia.
¿Se sobrescriben los datos de contacto existentes?
No. El módulo solo escribe en campos vacíos. Los valores discrepantes se crean como propuesta que un empleado aprueba campo por campo.
¿Se enteran mis clientes de la revisión?
No. Todos los avisos van al canal interno, al Chatter del contacto y, como actividad, a los empleados. El módulo no envía correos electrónicos a los clientes.
¿Se almacenan los gerentes o los socios?
Los nombres de los gerentes con poder de representación sí (campo Gerentes en la pestaña Registro Mercantil); los socios y las direcciones de personas, no. Trate los nombres como datos personales.
¿A cuántos de nuestros clientes encuentra el módulo?
Depende de la base de clientes. En nuestro caso fueron 138 de 438 contactos de empresa (aproximadamente un tercio). El resto son personas físicas, empresarios individuales, empresas extranjeras y contactos cuyo nombre no se corresponde con la razón social. Las cifras figuran en la sección La prueba con nuestra propia base de clientes.
¿Puedo encontrar a un cliente sin número del Registro Mercantil?
Sí. La pestaña Registro Mercantil tiene el botón Búsqueda en el Registro Mercantil, con búsqueda por nombre. El módulo solo escribe automáticamente cuando coincide exactamente una empresa. En caso contrario, usted mismo elige la coincidencia.
¿Qué ocurre con las empresas de Alemania o de Suiza?
No se consultan. El módulo solo examina los contactos con país Austria o sin país.
¿Cuánto almacenamiento necesita la verificación de direcciones?
Con números de portal, unos 400 MB en la base de datos y, durante la importación, unos 120 MB de espacio temporal en disco. Sin la comprobación de números de portal bastan unas 150.000 filas.
¿Y si solo quiero el Registro Mercantil y no la verificación de direcciones?
Desactive Comprobar direcciones austriacas en los ajustes y desactive la acción planificada del registro de direcciones. Entonces no se descarga nada.
¿Bajo qué licencia se distribuye el módulo?
Bajo la LGPL-3. Puede utilizarlo, adaptarlo y redistribuirlo. Los errores y las sugerencias de mejora son bienvenidos como issue en el repositorio de GitHub .
Asistencia de Biricon IT Services
Gestionamos instalaciones de Odoo para pequeñas y medianas empresas: desde la implantación, pasando por las adaptaciones y las migraciones, hasta la explotación diaria. Si desea mantener limpios los datos maestros de clientes en Odoo, detectar antes los riesgos de solvencia o revisar un módulo como este e incorporarlo con seguridad a su instancia de producción, estaremos encantados de ayudarle. Encontrará más desarrollos propios en nuestro blog, por ejemplo Conjuntos de productos en el presupuesto como sección y Web RBL, la lista de bloqueo para el tráfico de ataque.
Situación a 3 de noviembre de 2026. Versión del módulo 19.0.1.1.1. Los datos de ejemplo de las ilustraciones son de libre elección y no corresponden a empresas reales.