KBO - Als bronbeheerder wil ik de gegevens in VR synchroon houden met die van KBO
KBO = Kruispuntbank van de Ondernemingen
KBO verenigingen worden geregistreerd met behulp van hun ondernemingsnummer. Al tijdens de registratie wordt de data gevalideerd ten opzichte van KBO en worden er al gegevens overgehaald. Eens geregistreerd, wordt er op regelmatige basis gesynchroniseerd met KBO zodat deze gegevens steeds gelijk blijven.
Data afkomstig vanuit KBO kan je in VR niet wijzigen, wel verrijken.
Validatie bij registratie
Bij registratie van een nieuwe KBO vereniging wordt nagekeken dat:
het KBO nummer bestaat
Het KBO nummer een rechtspersoon betreft (en dus niet een natuurlijk persoon)
Het KBO nummer een Onderneming betreft (dus geen vestigingsplaats)
De status in KBO
ActiefofIn oprichtingisDe rechtsvorm in KBO een van de mogelijke waarden in scope is:
Vereniging zonder winstoogmerk
internationale vereniging zonder winstoogmerk
Private stichting
Stichting van openbaar nut
Wanneer aan een van deze voorwaarden niet voldaan is, wordt een foutboodschap wergegeven: Er werd voor dit KBO-nummer geen geldige vereniging gevonden.
Data overnemen bij registratie
Wanneer het opgegeven KBO nummer correct is en verwijst naar een valide vereniging in scope van het register, dan wordt de vereniging geregistreerd in VR en wordt data uit KBO overgenomen.
Basisgegevens: De naam, korte naam, startdatum worden overgenomen. Het type van de vereniging is VR wordt gelijk gezet aan de rechtsvorm in KBO
In de historiek van de verenigng staan deze gegevens mee in het registratie event.
Locaties: Het adres van de maatschappelijke zetel wordt overgenomen voor zover deze voldoet aan de voorwaarden van VR (verplichte velden aanwezig)
Als het adres uit KBO niet overgenomen kan worden, dan wordt dit gemeld via een gebeurtenis die via de historiek te raadplegen is (Maatschappelijke zetel volgens KBO kan niet overgenomen worden)
Als het adres uit KBO wel overgenomen wordt, dan wordt dit ook gemeld via de historiek (Maatschappelijke zetel volgens KBO werd overgenomen)
Contactgegevens: de beschikbare contactgegevens worden overgenomen en krijgen als bron KBO:
telefoon en mobiel worden gemapt naar contacttype telefoon
website wordt website en e-mail wordt e-mail
Wanneer een contactgegeven uit KBO niet voldoet aan de voorwaarden die geldig zijn voor VR contactgegevens, dan wordt dit gemeld via een gebeurtenis die via de historiek te raadplegen is (Contactgegeven kan niet overgenomen worden)
Als een contactgegeven uit KBO wel overgenomen wordt, dan wordt dit ook gemeld via de historiek (Contactgegeven werd overgenomen)
Vertegenwoordigers (vanaf Q1-2026) : de wettelijke vertegenwoordigers uit KBO worden overgenomen
enkel insz, naam en voornaam worden overgenomen. De andere velden bij het object vertegenwoordiger blijven leeg. Deze kunnen wel aangepast worden zoals andere vertegenwoordigers (zie 👬 Vertegenwoordigers - Als GI wil ik de vertegenwoordigers van een vereniging beheren, inclusief contactgegevens )
Synchronisatie van de data
Overzicht
Wanneer een nieuwe KBO vereniging geregistreerd wordt, gaan we ons bij MAGDA abonneren op wijzigingen via Repertorium.RegistreerInschrijving-02.01
Dagelijks stuurt MAGDA een KBO mutatie bestand met daarin alle gewijzigde KBO nummers. Vanuit VR wordt er meerdere keren per dag (om 4u, 7u, 12u en 17u) een proces opgestart om de bestanden die klaar staan op te halen en te verwerken. Zo anticiperen we op een latere levering
Voor elk gewijzigd kbo nummer worden de huidige gegevens in KB0 opgehaald met Onderneming.GeefOnderneming-02.00. Eerst wordt nagekeken of de vereniging in KBO nog voldoet aan de initiële voorwaarden om geregistreerd te worden.
Zo ja, dan worden alle data velden uit KBO vergeleken met de huidige waarden in VR. Voor elk verschil wordt een nieuw event aangemaakt XXXWerdOvergenomenUitKBO en wordt de bijhorende data aangepast. De initiator van dit event is Digitaal Vlaanderen:OVO002949.
Zo nee, dan kijken we na of de status in KBO niet langer Actief of In Oprichting is. In dat geval gaan we de vereniging stopzetten in VR. In alle andere gevallen is er een zeldzame wijziging gebeurd (voorbeeld een VZW is een NV geworden of zoiets) en wordt dat issue op Slack gemeld.
Gedetailleerde beschrijving
Check toelatingsmaatregelen & stoppen KBO-vereniging
Bij synchronisatie wordt gecontroleerd of de KBO vereniging nog steeds voldoet aan de voorwaarden die nodig waren om de vereniging te kunnen registreren. (zie https://vlaamseoverheid.atlassian.net/wiki/spaces/AGB/pages/edit-v2/7566983172#Validatie-bij-registratie ). Als dat niet het geval is, dan zijn er 2 mogelijke gevallen:
Status is niet langer
ActiefofIn Oprichting. De vereniging wordt nu beschouwd als gestopt in KBO, met als gevolgStatus wordt gestopt
Einddatum wordt overgenomen uit KBO (veld
Stopzetting.datumof indien dit leeg is, de datum dat de status gewijzigd was (statusKBO.@datumBegin)Een nieuw event wordt toegevoegd aan de historiek:
VerenigingWerdGestoptInKBODe vereniging verdwijnt uit de publieke datastroom (publiek zoek en publiek detail)
De vereniging kan geen potentiële dubbel meer zijn bij de dubbel detectie
Het is nog steeds mogelijk om de data van deze KBO vereniging aan te passen (zoals bvb roepnaam aanpassen)
Alle andere gevallen → Deze situatie is zo vreemd en/of zo zeldzaam dat we deze gevallen niet automatisch behandelen.
Synchronisatie van de basisgegevens
De basis gegevens worden een voor een nagekeken. Telkens er 1 item verschilt wordt er een event aangemaakt:
naam →
NaamWerdGewijzigdInKbokorte naam →
KorteNaamWerdGewijzigdInKboDe korte naam kan hiermee ook leeg gemaakt worden
rechtsvorm →
RechtsvormWerdGewijzigdInKBODit is enkel mogelijk indien de nieuwe rechtsvorm ook in scope is, boorbeeld: een VZW die een IVZW geworden is. Dit event verandert het type van de vereniging.
startdatum →
StartdatumWerdGewijzigdInKbo
Synchronisatie van de maatschappelijke zetel
De maatschappelijke zetel in KBO wordt vergeleken met de waarde die in VR voorkwam. Hierbij onderscheiden we volgende gevallen, afhankelijk of er bij synchronisatie al een maatschappelijke zetel aanwezig is in VR en of de maatschappelijke zetel in KBO al dan niet voldoet aan onze formaat vereisten (alle vereiste velden moeten een waarde hebben)
MZ in VR | MZ in KBO | Welke actie |
|---|---|---|
Niet aanwezig | Voldoet | Event: |
Niet aanwezig | Voldoet niet | Geen actie |
Niet aanwezig | Leeg | Geen actie |
Aanwezig | Voldoet | Indien Vorige <> Nieuwe => Event: anders geen actie |
Aanwezig | Voldoet niet | 2 nieuwe events:
|
Aanwezig | Leeg | Event: |
Het adres van de maatschappelijke zetel wordt steeds overgenomen zoals die in KBO staat. Op dit adres wordt geen adresmatch uitgevoerd. Deze locatie heeft dan ook geen adresId.
Synchronisatie van de contactgegevens
Voor elk van de 4 contactgegevens die in KBO kunnen voorkomen (website, e-mail, telefoon, mobiel), worden de waarden uit KBO vergeleken met de waarde in VR.
Ook hierbij onderscheiden we enkele gevallen, afhankelijk of er bij synchronisatie dat contactgegeven al aanwezig is in VR en of dat contactgegeven al dan niet voldoet aan onze formaat vereisten (zoals bvb website moet beginnen met http:// of https://)
Contact in VR | Contact in KBO | Welke actie |
|---|---|---|
Niet aanwezig | Voldoet | Event: |
Niet aanwezig | Voldoet niet | Geen actie |
Niet aanwezig | Leeg | Geen actie |
Aanwezige | Voldoet | Indien Vorige <> Nieuwe => Event: anders geen actie |
Aanwezig | Voldoet niet | 2 nieuwe events:
|
Aanwezig | Leeg | Event: |
(1) Bij contactgegevens bestaat er een speciale situatie.
Stel In KBO is er een nieuw contactgegeven beschikbaar (zoals
e-mail: info@vereniging.be), en we volgen het algorithme zoals hierboven beschreven, dan zouden we eigenlijk een nieuw contactgegeven moeten toevoegen in VR met de waarde zoals in KBO en met een beschrijving = ““.Stel nu dat er al zo’n contactgegeven bestaat (aangemaakt door een GI).
In dat geval gaan we geen nieuw contactgegeven toevoegen, maar gaan we wel het bestaande contactgegeven aanpassen:
bron:initiatorwordt danbron:kbo, alle andere gegevens blijven gelijk. Het event dat hier voor gegenereerd wordt =ContactgegevenWerdInBeheerGenomenDoorKbo. Als dit contactgegeven al zou bestaan, maar de beschrijving is niet leeg, dan is er geen enkel probleem om het nieuwe contactgegeven toe te voegen naast het bestaande.
(2) Het event ContactgegevenKonNietOvergenomenWordenUitKBO zal gegenereerd worden telkens een synchronisatie van een KBO nummer plaatsvindt. Een mogelijke optimalisatie later kan zijn om er voor te zorgen dat dit slechts 1x gegenereerd wordt en de volgende keren niet meer herhaald wordt.
Synchronisatie van de vertegenwoordigers
(vanaf Q1-2026)
De wettelijke vertegenwoordigers uit KBO worden vergeleken met de gekende vertegenwoordigers in het verenigingsregister op basis van het veld INSZ en gelijk getrokken. Eventuele naamswijzigingen worden daarbij ook in rekening genomen.
INSZ in VR | INSZ in KBO | Welke actie |
|---|---|---|
Niet aanwezig | Aanwezig | Event: |
Aanwezig | Niet aanwezig | Event: |
Aanwezig | Aanwezig | Indien naam en voornaam nog steeds gelijk zijn: geen actie, anders event: |
Data mapping
MAGDA diensten in gebruik
We gebruiken de MAGDA dienst Onderneming.GeefOnderneming-02.00 zowel tijdens registratie als tijdens de synchronisatie.
Om in te schrijven voor latere updates gebruiken we Repertorium.RegistreerInschrijving-02.01
De triggers voor een update worden binnengehaald met Onderneming.PubliceerOndernemingVKBO-02.00
Mapping basisgegevens
Selectie
Een KBO nummer is geldig wanneer
het KBO nummer terug te vinden is in deze Magda dienst
OndernemingOfVestiging.code = 1 (Onderneming)
Rechtsvorm.Code (*) is een van:
017: VZW
026: Private stichting
029: Stichting van openbaar nut
125: IVZW
StatusKBO.code (*) = AC (Actief) OF JU (Juridische creatie)
SoortOnderneming.code (*) = 2 (Rechtspersoon)
(*) Zie opmerking *Waarden met historiek
Mapping
VR dataset/Veld | KBO veld | Detail |
|---|---|---|
naam | Namen.MaatschappelijkeNaam | Zie *Waarden met taalcodes Zie *Waarden met historiek |
korteNaam | Namen.AfgekorteNaam | Zie *Waarden met taalcodes Zie *Waarden met historiek |
startdatum | Start.Datum |
|
type | afhankelijk van Rechtsvorm.Code:
| Zie *Waarden met historiek |
kbo Nummer | Ondernemingsnummer |
|
Vertegenwoordiger | Zie selectie Persoon hierboven | Zie *Waarden met historiek |
| Persoon.INSZ |
|
| Persoon.Voornaam |
|
| Persoon.Achternaam |
|
Mapping locatie
Selectie
We nemen het adres van de maatschappelijke zetel over. Dit vinden we terug door binnen de blok Adressen het adres te nemen met
Adres.Type.Code = 001 (Adres van de Zetel)
@DatumBegin <= vandaag
@DatumEinde is leeg of > vandaag
Mapping
Van dit adres worden deze velden overgenomen
VR dataset/Veld | KBO veld | Detail |
|---|---|---|
type | “Maatschappelijke Zetel volgens KBO” |
|
straatnaam | Adres.Descripties.Descriptie.Straat.Naam | Zie *Waarden met taalcodes |
huisnummer | Adres.Huisnummer |
|
busnummer | Adres.Busnummer |
|
postcode | Adres.Gemeente.postcode |
|
gemeente | Adres.Descripties.Descriptie.Gemeente.Naam | Zie *Waarden met taalcodes |
land | Adres.Descripties.Descriptie.Land.Naam | Zie *Waarden met taalcodes |
adresvoorstelling | Dit wordt samengesteld uit de vorige elementen zoals bij het aangeven van een adres met componenten |
|
Mapping contactgegevens
Selectie
De contactgegevens zijn terug te vinden binnen de blok Adressen door het adres te nemen dat komt uit de selectie adres (zoals hierboven beschreven).
Maak 1 contactgegeven aan per waarde die beschikbaar is in Adres.Descripties.Descriptie.Contact. Het veld FAX wordt niet gemapt.
Mapping
VR dataset/Veld | KBO veld | Detail |
|---|---|---|
Type | Telefoonnummer → “Telefoon” GSM → “Telefoon” Email → “E-mail” Website → “Website” |
|
Waarde | De waarde van het veld |
|
Mapping vertegenwoordigers
Selectie
XML Pad = Onderneming.Functies, MAGDA doc : Functies - Type Onderneming 02.00
Wanneer een KBO nummer geldig is, nemen we de functies over als vertegenwoordigers, maar enkel wanneer
@DatumBegin <= vandaag
@DatumEinde is leeg of > vandaag
AanduidingPersoonOnderneming.code = 1 of 3
Persoon.INSZ is ingevuld
het functie type (AardFunctie.Code) is een geldige vertegenwoordiger voor de betreffende rechtsvorm (zie tabel hieronder + extra info om te weten waarom juist deze codes)
Code | Functie type | Waar mogelijk |
|---|---|---|
00002 | Algemeen lasthebber | Alle types |
00005 | Plaatsvervangende vaste vertegenwoordiger | Alle types |
10002 | Bestuurder | Alle types |
10003 | Vaste vertegenwoordiger | Alle types |
10004 | Persoon belast met dagelijks bestuur | Alle types |
10007 | Gedelegeerd bestuurder | Enkel voor VZW en iVZW |
10022 | Vertegenwoordiger (niet bestuurder) | Alle types |
10030 | Vereffenaar | Alle types |
90001 | Curator | Alle types |
90002 | Voorlopig bewindvoerder (gerechtelijke reorganisatie en faillissement) | Alle types |
90005 | Gerechtsmandataris | Alle types |
We beperken ons tot deze functies omdat deze als wettelijke vertegenwoordiger van een onderneming van het bepaalde type aanzien worden volgens deze nota: https://economie.fgov.be/sites/default/files/Files/Entreprises/KBO/Lijst-van-functies-die-de-machtiging-verlenen-om-de-onderneming-te-vertegenwoordigen.pdf
Hiermee is er ook een overeenkomst tussen de personen die gelinkt zijn aan een KBO-vereniging in VR en de ondernemingen die geselecteerd worden door ACM (via de KBO webservice) bij het aanmelden als wettelijk vertegenwoordiger van een onderneming.
Mapping
Voor elke vertegenwoordiger worden deze velden overgenomen
VR dataset/Veld | KBO veld |
|---|---|
INSZ | Persoon.INSZ |
Voornaam | Persoon.Voornaam |
Achternaam | Persoon.Achternaam |
Opmerkingen
*Waarden met taalcodes
Sommige dataelementen worden in meerdere talen weergegeven. Kies hier dan de 1e beschikbare waarde in volgorde: NL, FR, DU, ENG. Als er maar 1 waarde beschikbaar is, dan wordt die waarde genomen, ongeacht de taalcode.
Edge: als er meerdere actieve namen zou den zijn en geen enkele van die namen heeft als taalcode NL, FR, DU of ENG, dan wordt de eerste naam in de lijst gekozen, ongeacht welke taalcode daar bij staat.
*Waarden met historiek
Sommige dataelementen worden historisch weergegeven. (Sinds 1/1/2000 was het dit ; Sinds 1/1/2022 was het dat). Voor deze elementen wordt steeds de rij genomen die op de datum van synchronisatie geldig is. Dat is meestal diegene met de hoogste @DatumModificatie. (of bij KBO diegene zonder @DatumEinde)
Intern addendum
Als Digitaal Vlaanderen kunnen we de KBO synchronisatie opvolgen en zelfs de eenmalige synchronisatie van een individuele KBO vereniging aanvragen. Dit werd gedocumenteerd op een interne pagina (die enkel voor Digitaal Vlaanderen beschikbaar is): https://vlaamseoverheid.atlassian.net/wiki/spaces/VG/pages/7569179574