Den, der driver forretning i Østrig, kender spørgsmålene: Er min nye kundes firmanavn og adresse korrekte? Er virksomheden stadig registreret i Firmenbuch, eller er den under likvidation? Er der åbnet en insolvensbehandling over en kunde, som jeg har leveret til i to år? Svarene står i justitsministeriets Firmenbuch, men næsten ingen kigger efter med jævne mellemrum. I Odoo oprettes kontakten én gang, og derefter forældes den.
Til det formål har vi udviklet modulet Firmenbuch for partnere (partner_firmenbuch_at). Det forbinder Odoo-kontakter med Firmenbuch og med BEV's officielle adresseregister. Det er skrevet til Odoo 19 og er tilgængeligt gratis på GitHub som fri software under LGPL-3-licensen:
github.com/Alex0176/odoo-partner-firmenbuch-at
Indhold i dette indlæg
- Problemet: stamdata, som ingen vedligeholder
- Hvad modulet gør
- Forslag i stedet for overskrivning
- Advarsler: insolvens, likvidation, regnskab
- Adressekontrol med BEV-adresseregisteret
- Teknisk implementering
- Hvad den rigtige tjeneste har lært os
- Installation og opsætning
- Databeskyttelse: hvad modulet sender til hvem
- Tests
- Begrænsninger og juridisk bemærkning
- Ofte stillede spørgsmål
- Støtte fra Biricon IT Services
Problemet: stamdata, som ingen vedligeholder
En kontakt i Odoo opstår oftest under tidspres: navn, omtrentlig adresse, måske et UID-nummer. Det rækker til det første tilbud. Det rækker ikke til fakturaer, der juridisk skal være korrekt adresseret, og slet ikke til at opdage, at der er sket noget hos kunden. I praksis viser der sig fire huller:
- Ufuldstændige stamdata. Firmenbuchnummer, ret og selskabsform mangler næsten altid, fordi opslag er manuelt arbejde.
- Forkerte stavemåder. Firmanavn uden selskabsform, tastefejl i gade eller by, forbyttet postnummer. Det opdager man først, når posten kommer retur.
- Ingen overvågning. Åbner en domstol en insolvensbehandling, eller opløser en kunde sit selskab, får Odoo intet at vide om det. Salgsafdelingen leverer fortsat på kredit.
- Spredte kilder. Firmenbuch, årsregnskaber og adresseregister findes forskellige steder. Den, der vil kontrollere dem, kopierer data i hånden mellem browservinduer.
Hvad modulet gør
- Nye virksomheder slås op. Opretter nogen en kontakt som virksomhed (land Østrig eller tomt), søger modulet i Firmenbuch inden for få minutter. Er der præcis ét match, udfyldes tomme felter: gade, postnummer, by, land, Firmenbuchnummer, ret og selskabsform.
- Afvigelser foreslås, overskrives aldrig. Står der noget andet i kontakten end i registeret, opstår et ændringsforslag, som en medarbejder godkender felt for felt.
- Firmenbuch-søgning på kontakten. I fanebladet Firmenbuch finder søgningen virksomheder via navn, også selv om det automatiske match ikke var entydigt.
- Daglig overvågning. Modulet forespørger dagligt, hvilke virksomheder og dokumenter der har ændret sig i registeret, og kontrollerer de berørte kunder. Desuden kontrolleres hver virksomhed fuldstændigt påny med indstillelige intervaller.
- Advarselsniveauer. Åbnede insolvens- og rekonstruktionsprocedurer (fra registerets retsfakta), likvidation, sletning, negativ egenkapital og en lav egenkapitalandel registreres og gøres synlige på kontakten.
- Adressekontrol. Østrigske adresser kontrolleres lokalt mod det officielle adresseregister fra Bundesamt für Eich- und Vermessungswesen (BEV).
- Registerdata på kontakten. Ret, selskabsform, direktører og retsfakta står i fanebladet Firmenbuch. De afspejler registeret og opdateres direkte.
- Beskeder kun internt. Alle beskeder går til den interne Discuss-kanal Firmenbuch og til kontaktens chatter. En kontrolkørsel over mange virksomheder genererer én samlebesked i stedet for én pr. virksomhed. Modulet sender aldrig noget til kunder.
Forslag i stedet for overskrivning
Officielle data er ikke automatisk de bedre data for din virksomhed: Måske står leveringsadressen bevidst i kontakten, måske er der indført et kortnavn. Derfor ændrer modulet aldrig eksisterende værdier af sig selv. Det udfylder kun tomme felter og opretter et forslag ved afvigelser.
Under Kontakter → Firmenbuch → Firmenbuch-forslag ser du pr. felt den aktuelle værdi og registerværdien. Felter, du ikke vil overføre, lader du være fravalgt. Med Overfør valgte skrives kun de markerede felter, med Afvis bortfalder forslaget. Et nyt forslag erstatter ældre åbne forslag for samme kontakt, så der ikke anvendes forældede værdier.
Advarsler: insolvens, likvidation, regnskab
Modulet skelner mellem tre niveauer:
- Upåfaldende: Der er intet at melde.
- Advarsel (gul): I registeret står der gyldige indførsler om likvidation, opløsning, afvikling, sletning eller fusion, virksomheden er markeret som slettet, eller en tidligere insolvensbehandling er blevet ophævet inden for de seneste år (standard tre år, kan indstilles). Eller årsregnskabet viser negativ egenkapital, en egenkapitalandel under 8 % (standard med udgangspunkt i § 23 URG, kan indstilles), et årsunderskud eller et omsætningsfald på 25 % eller mere.
- Kritisk (rød): En insolvens-, konkurs- eller rekonstruktionsprocedure er åbnet og endnu ikke ophævet, eller en begæring er afvist på grund af manglende formue til dækning af omkostningerne. Sidstnævnte regnes som betalingsudygtighed.
På kontakten vises et farvet banner, i kontaktlisten en markering, og i søgningen findes filtre for Firmenbuch-advarsel og Firmenbuch kritisk. Bliver en kunde kritisk, får den ansvarlige sælger (eller i stedet administratoren) en aktivitet Firmenbuch: kontrollér kunde, og kanalen Firmenbuch modtager en besked.
Retsfakta. Insolvensbehandlinger står i registeret ikke i firmateksten, men som retsfakta med dato, sagsnummer og ret. Modulet læser dem, tilordner åbning og ophævelse til samme sagsnummer og viser dem på kontakten som en liste. Således er en ophævet procedure efter nogle år kun information, mens en igangværende er rød.
Årsregnskaber. Foreligger det seneste årsregnskab som XML, aflæser modulet egenkapital, årsresultat, balancesum og omsætning og beregner egenkapitalandelen, omsætningsændringen og størrelsesklassen efter § 221 UGB (også mikrovirksomheder). Små selskaber behøver ikke offentliggøre deres omsætning, og så viser modulet ingen. Deres resultat udleder det af balanceoverskuddet fratrukket overført overskud og markerer det som et skøn. De positionsnavne, der søges efter, kan indstilles, fordi XML'en er opbygget forskelligt afhængigt af formularen.
Adressekontrol med BEV-adresseregisteret
BEV stiller adresseregisteret til rådighed som åbne data (Adresse Relationale Tabellen – Stichtagsdaten, ny skæringsdato to gange om året, gratis at bruge med kildeangivelse). Modulet henter udtrækket via den officielle INSPIRE-ATOM-tjeneste, ca. 120 MB med omkring 2,5 millioner adresser, og importerer det i egne, slanke tabeller.
Derefter kontrolleres hver østrigsk virksomhedsadresse med gade lokalt ved oprettelsen og ved hver ændring: postnummer, gade, husnummer, by og delstat. Ingen adresse sendes til en tjeneste. Resultatet står som markering under adressen:
- Gyldig: Adressen findes sådan i registeret.
- Husnummer ukendt: Gade og by stemmer, husnummeret gør ikke.
- Rettelse foreslået: Tastefejl i gade eller by, forkert postnummer. Rettelsen ligger klar som forslag.
- Ikke fundet: Registeret kender ikke denne adresse.
En tom delstat udfyldes direkte. Private kontaktadresser (type Privatadresse) kontrolleres ikke. Kildeangivelsen © Österreichisches Adressregister, Stichtagsdaten vom … står med den aktuelle skæringsdato i indstillingerne. Opdateringen kører ugentligt, men henter kun, hvis BEV har offentliggjort en nyere skæringsdato.
Teknisk implementering
Registeradgangen
Justitsministeriet tilbyder Firmenbuch via FBW-WebServices (HVD) på JustizOnline som SOAP-grænseflade. Adgangen er gratis, men kræver en API-nøgle, som man ansøger om med ID Austria under Informationsweiterverwendung. Nøglen følger med i HTTP-headeren X-API-KEY. Modulet bruger tjenesten direkte, uden screen scraping.
Klienten models/firmenbuch_client.py er ren Python uden Odoo-afhængighed. Den kender forespørgslerne SUCHEFIRMAREQUEST, AUSZUG_V2_REQUEST, SUCHEURKUNDEREQUEST, URKUNDEREQUEST samt VERAENDERUNGENFIRMAREQUEST og VERAENDERUNGENURKUNDEREQUEST. Derved kan den testes med gemte svar. Forespørgsler stilles med 0,3 sekunders mellemrum, ændringsforespørgsler i blokke på syv dage.
Aflæsning af udtrækket
Fra udtrækket anvendes kun indførsler, der stadig er gyldige (attributten AUFRECHT ikke false). Navnet stammer fra datakendetegnet FI_DKZ02, adressen fra FI_DKZ03, hjemstedet fra FI_DKZ06 og selskabsformen fra FI_DKZ07. Dertil kommer ret, webadresse, de tegningsberettigede personer og retsfakta. Til advarselsniveauet gennemsøges teksterne i alle gyldige indførsler efter de indstillelige nøgleord:
DEFAULT_CRITICAL = "Konkursverfahren, Insolvenzverfahren, Sanierungsverfahren, Konkurs eröffnet, ..."
DEFAULT_WARNING = "Liquidation, aufgelöst, Auflösung, Abwicklung, Löschung, gelöscht, Verschmelzung, in Liqu."
Fordelen ved nøgleordskontrollen: Den fungerer uafhængigt af, i hvilket felt registeret fører en hændelse. Ulempen står i afsnittet Begrænsninger.
Overvågning
Modulet opretter tre planlagte handlinger:
- Slå nye virksomheder op (hvert 10. minut, op til 20 kontakter pr. kørsel). Desuden udløses det straks ved oprettelsen.
- Overvåg virksomheder (dagligt kl. 04:30). Forespørger ændrede virksomheder og dokumenter siden sidste kørsel (højst 30 dage tilbage), kontrollerer de berørte kunder og derefter op til 50 kunder, hvis seneste kontrol ligger længere tilbage end den indstillede frist. Hver virksomhed gemmes i en separat transaktion, så en fejl ikke mister tidligere resultater. Kørslens resultat kommer som én samlebesked i kanalen.
- Opdater adresseregister (ugentligt kl. 03:15).
Uden API-nøgle vender de to første straks tilbage. En kontrolsum pr. virksomhed forhindrer, at uændrede udtræk aflæses igen.
Adresseregisteret
BEV-dataene ligger i tre tabeller (bev.locality, bev.street, bev.address) med et indeks på postnummer, gadekode og husnummer. Importen kører via COPY i én transaktion, tabellerne erstattes altså i ét trin. Husnumre normaliseres til registerets skrivemåde (51-55, 12a). Med husnumre fylder tabellerne omkring 400 MB i databasen. Den, der ikke ønsker det, slår Kontrollér husnumre fra og klarer sig med ca. 150.000 rækker.
Hvad den rigtige tjeneste har lært os
Et modul, der kun er afprøvet mod selvskrevne testsvar, regnes endnu ikke for færdigt. Derfor afprøvede vi klienten mod den rigtige tjeneste før offentliggørelsen, med nøglen til vores egen virksomhed. Her opdagede vi flere afvigelser fra vores antagelser, som vi har rettet:
- Kun kortoplysningen. Udtrækket kan med denne nøgle kun hentes i omfanget Kurzinformation. Forespørgsler med Vollinformation afviser tjenesten. I version 1.0.0 forespurgte den daglige kørsel dette stadig forkert, version 1.1.0 retter det. Fra personerne overtager modulet kun navnene på de tegningsberettigede direktører; selskabsdeltagere og personadresser aflæses ikke.
- Gade og husnummer adskilt. Adressen kommer som
STRASSEogHAUSNUMMERi separate elementer, ikke som én tekst. Modulet sætter begge sammen. - Retten i Vollzug. Den kompetente ret står ikke i firmadelen, men i udtrækkets sidste
VOLLZ-blok. - Slettede virksomheder. En slettet virksomhed genkender man på en attribut (
MIT_FIRMA_GELOESCHT_DURCH_VNR) og ikke på en tekst. Modulet gør det til fundet Virksomhed slettet, som udløser en advarsel. - Firmanavnet er ikke søgeordet. Søgningen sammenligner navnets begyndelse. »Muster GmbH« finder intet, hvis registeret skriver »Muster Gesellschaft m.b.H.«; virksomheder under likvidation har »in Liqu.« i navnet, og i kontaktnavnet står der somme tider stadig
&. Modulet gentager derfor søgningen uden selskabsform og sammenligner navne uden skrivevarianter af selskabsformen, uden HTML-tegn og uden tilføjelsen »in Liqu.«. Et enkelt match overtages kun, hvis dets navn begynder som kontaktens. - Dokumentændringer uden Firmenbuchnummer. Listen over ændrede dokumenter indeholder kun en nøgle. Firmenbuchnummeret (uden kontrolbogstav) står i begyndelsen af denne nøgle. Modulet tilordner ændringerne til kunderne via den.
Til hvert af disse punkter findes der nu en automatiseret test med et efterbygget svar.
Testen på vores eget kundekartotek
Efter version 1.1.0 afprøvede vi modulet på vores eget kundekartotek. Først kørte kun en læsende navnesøgning, derefter tilordningen af de entydige match. Der blev ikke ændret noget uden hensyn til eksisterende værdier: Tomme felter blev udfyldt, afvigelser ligger som forslag klar til godkendelse, og der gik ikke en eneste e-mail ud. Resultatet, uden at nævne enkelte virksomheder:
- 438 virksomhedskontakter med kundestatus i Østrig eller uden land blev søgt.
- 138 af dem blev entydigt tilordnet i Firmenbuch. Yderligere 18 havde et entydigt navnematch, men en anden adresse i registeret (flytning eller virksomhed med samme navn), og blev derfor ikke rørt. 2 navne er flertydige.
- Omkring 280 fandt vi ikke eller kun som delvist match. Det er privatpersoner, enkeltmandsvirksomheder, udenlandske virksomheder, kontakter, der kun nævner et mærke eller et sted, og virksomheder, hvis navn i kontakten afviger fra registreringen, f.eks. fordi der står en anden selskabsform. For dem er der stadig den manuelle Firmenbuch-søgning.
- 63 ændringsforslag opstod, mest for gade og husnummer (skrivemåde) og landet.
- 66 advarsler, intet kritisk niveau. 36 virksomheder er i registeret markeret som slettet (9 af dem også under likvidation), 2 havde en nu ophævet insolvensbehandling, og hos 42 var årsregnskabet påfaldende: lav egenkapitalandel, underskud eller omsætningsfald. En slettet virksomhed er ikke automatisk en tabt kunde, men en anledning til at kontrollere adresse og fakturamodtager.
To erfaringer deraf: Et kundekartotek fra rigtig drift er en langt bedre test end ethvert efterbygget svar. Vi fandt her fejl i navnesøgningen, som er rettet i version 1.1.1 (se ovenfor). Og hitraten afhænger stærkt af, hvor omhyggeligt kontakterne er navngivet: Den, der skriver firmanavnet, som registeret fører det, bliver fundet pålideligt.
Installation og opsætning
Forudsætninger: Odoo 19.0 med standardapps'ene Kontakter og Discuss, Python-pakken requests (findes i enhver Odoo-installation) og udgående HTTPS-adgang til justizonline.gv.at og data.bev.gv.at. Modulet har ingen afhængigheder uden for standardapps'ene, så det trækker ingen yderligere moduler med.
- Læg mappen
partner_firmenbuch_atiaddons_path, opdater app-listen og installér modulet, på produktionssystemer helst først på en testdatabase. - Modulet opretter Discuss-kanalen Firmenbuch (interne brugere) og tilføjer alle administratorer. Desuden oprettes de tre planlagte handlinger.
- Ansøg om API-nøgle: JustizOnline (ID Austria), Informationsweiterverwendung, API FBW.
- Indstillinger → Firmenbuch: indtast nøglen og Test forbindelse. Vælg derefter kanal, indstillinger, nøgleord og positionskoder.
odoo-bin -c /etc/odoo/odoo.conf -d <datenbank> -i partner_firmenbuch_at --stop-after-init
Vigtigt på produktionssystemer: Den første kørsel af adresseregisteropdateringen starter automatisk natten efter installationen kl. 03:15 og henter omkring 120 MB. Derefter kontrolleres alle østrigske kontakter; påfaldende forhold vises som forslag og som én besked i kanalen. Den, der ikke ønsker det, deaktiverer på forhånd den planlagte handling Adresseregister (BEV): opdater eller slår Kontrollér østrigske adresser fra i indstillingerne.
Masseimport: Importér med kontekstnøglerne fb_no_lookup=True og bev_no_check=True. Ellers ville hver importeret østrigsk virksomhed blive noteret til en registerforespørgsel (20 pr. ti minutter) og hver adresse blive kontrolleret ved oprettelsen.
Databeskyttelse: hvad modulet sender til hvem
- Personoplysninger: Direktørernes navne er personoplysninger, selv om de står offentligt i registeret. Modulet gemmer dem kun for at vedligeholde forretningsforholdet. Den, der ikke ønsker det, sletter feltet eller lader være med at bruge det.
- Firmenbuch: Kun navnet eller Firmenbuchnummeret på kontakter, der er markeret som virksomhed (uden overordnet virksomhed, land Østrig eller tomt), sendes til
justizonline.gv.at, sammen med API-nøglen. Privatpersoner og kontaktpersoner hos en virksomhed sendes aldrig. - Adresseregister: Der hentes kun det offentlige udtræk. Kundeadresser forlader ikke systemet.
- Ingen kundemails: Beskeder går til den interne kanal, til chatteren og som aktivitet til medarbejdere.
- Nøgle: API-nøglen er kun synlig for administratorer.
Firmenbuch er et offentligt register. Videreanvendelsen af dataene er underlagt JustizOnlines betingelser for Informationsweiterverwendung.
Tests
Modulet leveres med 18 automatiserede tests. De arbejder med efterbyggede registersvar og et miniatureadresseudtræk og behøver derfor hverken API-nøgle eller netværk:
- Normalisering af Firmenbuchnummeret
- Aflæsning af udtrækket (navn, adresse, ret, direktører, slettet virksomhed, ugyldige indførsler ignoreres)
- Navnesammenligning: skrivevarianter af selskabsformen, »in Liqu.«, HTML-tegn, intet match for en fremmed virksomhed
- Årsregnskab: egenkapital, resultat, balancesum
- Ny virksomhed findes, tomme felter udfyldes, afvigelser foreslås, forslag anvendes delvist
- Overvågning: åbnet insolvensbehandling sætter niveauet til kritisk og opretter aktiviteten, en ophævet procedure giver en advarsel, kontaktpersoner kontrolleres ikke særskilt
- Dokumentændringer tilordnes via nøglen
- Uden API-nøgle forespørges der ikke om noget
- Adressekontrol mod miniatureudtrækket
odoo-bin -d <testdatenbank> -i partner_firmenbuch_at \
--test-enable --test-tags=/partner_firmenbuch_at --stop-after-init
Den tyske oversættelse findes i i18n/de.po.
Begrænsninger og juridisk bemærkning
- Et match er et fingerpeg, ikke en juridisk oplysning. Status udledes af nøgleord i gyldige registerindførsler. Kontrollér selv registeret, før du træffer afgørelse om kredit eller leveringsbetingelser.
- Insolvensgenkendelse kun afprøvet med efterbyggede tilfælde. Modulet genkender procedurer på ord i retsfaktaenes fritekst (åbning, ophævelse, stadfæstet rekonstruktionsplan, mangels formue). Deres format har vi efterbygget efter et ægte registerudtræk, men et ægte insolvenstilfælde havde vi ikke ved hånden under udviklingen. En usædvanlig formulering kan derfor blive overset. Modulet erstatter ikke den officielle Ediktsdatei.
- Årsregnskaber kun som XML. Rene PDF-indberetninger springes over. Ved meget små selskaber kan balancen være indleveret i forkortet form, uden de tal, som modulet aflæser.
- Kun Østrig. Udenlandske virksomheder forespørges ikke. Virksomheders websteder står ikke i registeret og tilføjes ikke.
- Automatisk tilordning kun ved entydigt match. Findes der flere virksomheder med samme navn, spørger en besked i kanalen efter den manuelle Firmenbuch-søgning.
- Grænseflader kan ændre sig. Modulet er afhængigt af tjenesterne fra BMJ og BEV. Ændres endepunkt, skema eller ATOM-feed, kan en opdatering blive nødvendig.
- Testet til Odoo 19. Udviklet og testet til Odoo 19.0 Community. Til andre versioner har vi ikke afprøvet det. Indlægget er ikke juridisk rådgivning.
Ofte stillede spørgsmål
Koster registeradgangen noget?
Efter vores viden ikke: FBW-WebServices til Informationsweiterverwendung er gratis, men kræver en API-nøgle, som du ansøger om via JustizOnline. Justitsministeriets aktuelle betingelser er afgørende.
Bliver eksisterende kontaktdata overskrevet?
Nej. Modulet skriver kun i tomme felter. Afvigende værdier oprettes som forslag, som en medarbejder godkender felt for felt.
Får mine kunder noget at vide om kontrollen?
Nej. Alle beskeder går til den interne kanal, til kontaktens chatter og som aktivitet til medarbejdere. Modulet sender ingen e-mails til kunder.
Bliver direktører eller selskabsdeltagere gemt?
Navnene på de tegningsberettigede direktører ja (feltet Direktør i fanebladet Firmenbuch), selskabsdeltagere og personers adresser nej. Behandl navnene som personoplysninger.
Hvor mange af vores kunder finder modulet?
Det afhænger af kundekartoteket. Hos os var det 138 ud af 438 virksomhedskontakter (omkring en tredjedel). Resten er privatpersoner, enkeltmandsvirksomheder, udenlandske virksomheder og kontakter, hvis navn ikke svarer til firmanavnet. Tallene står i afsnittet Testen på vores eget kundekartotek.
Kan jeg finde en kunde uden Firmenbuchnummer?
Ja. Fanebladet Firmenbuch har knappen Firmenbuch-søgning med søgning efter navnet. Modulet udfylder kun automatisk, hvis præcis én virksomhed passer. Ellers vælger du selv matchet.
Hvad med virksomheder i Tyskland eller Schweiz?
De forespørges ikke. Modulet ser kun på kontakter med land Østrig eller uden land.
Hvor meget lagerplads kræver adressekontrollen?
Med husnumre omkring 400 MB i databasen og ved importen omkring 120 MB midlertidig diskplads. Uden husnummerkontrol rækker omkring 150.000 rækker.
Hvad hvis jeg kun vil have Firmenbuch og ingen adressekontrol?
Slå Kontrollér østrigske adresser fra i indstillingerne, og deaktivér den planlagte handling for adresseregisteret. Så hentes der ingenting.
Under hvilken licens udgives modulet?
Under LGPL-3. Du må bruge, tilpasse og videregive det. Fejl og forbedringsforslag er velkomne som issue i GitHub-repositoryet .
Støtte fra Biricon IT Services
Vi passer Odoo-installationer for små og mellemstore virksomheder: fra implementering over tilpasninger og migreringer til den løbende drift. Hvis du vil holde kundestamdata i Odoo rene, opdage kreditrisici tidligere eller have et modul som dette gennemgået og sikkert bragt ind i din produktionsinstans, hjælper vi dig gerne. Flere egenudviklinger finder du i vores blog, f.eks. Produktsæt i tilbuddet som sektion og Web RBL, spærrelisten for angrebstrafik.
Status: 3. november 2026. Modulversion 19.0.1.1.1. Eksempeldataene i illustrationerne er frit valgt og ikke ægte virksomheder.