{
  "api": "Identix.org",
  "versie": "v1 (bèta)",
  "onderdeel": "distributiemonitor.methodiek",
  "bron_type": "eigen-dienst",
  "gegenereerd_op": "2026-09-02T00:50:33Z",
  "duur_ms": 0.0,
  "integriteit": {
    "algoritme": "sha-256",
    "canonieke_vorm": "json.dumps(data, sort_keys=True, separators=(',',':'), ensure_ascii=False)",
    "hash": "09455c8adffcb3e583cb81b2a6b1ef10f0238f63826620670ad408af82a29270"
  },
  "bronnen": [],
  "data": {
    "gegenereerd_op": "2026-09-02T00:50:33Z",
    "dekking": {
      "karakter": "continue marktmonitor — dagelijks ververst; de cijfers volgen de bron",
      "nog_niet_ontsloten": [
        "KvK-mutaties (oprichting/opheffing): vereist een bedrijfsdata-overeenkomst met de KvK (betaald)",
        "hypotheekdistributie per kantoor: vereist  Kadaster/HDN-transactiedata (commercieel contract)",
        "provisiescenario: vereist Toetssteen/Parametrics-data",
        "persoonsleeftijd per adviseur: persoonsgegevens (AVG) — niet publiek; vergunningsduur-cohorten dienen als proxy"
      ]
    },
    "privacy": {
      "regel": "Geen persoonsgegevens: aggregeren op kantoor- of hoger niveau; namen van individuele adviseurs blijven buiten elke output.",
      "doorvoering": [
        "metrics bevatten uitsluitend aantallen en proporties",
        "plaats-aggregaten kennen geen kruisingen met rechtsvorm of productgroep",
        "kruisingen uitsluitend op landelijk niveau"
      ]
    },
    "metrics": [
      {
        "id": "universum",
        "naam": "Kantooruniversum",
        "vraag": "Hoe groot is de vergunninghoudende adviesmarkt, en waar zit zij?",
        "definitie": "Aantal Nederlandse instellingen in het AFM-register met minstens één Wft-vergunning (actief of beëindigd); 'actief kantoor' = minstens één geldige vergunning op de peildatum (geen einddatum, of einddatum op/na peildatum).",
        "bronvelden": [
          "land",
          "rechtsvorm",
          "vestigingsadres.plaats",
          "statutaire_zetel",
          "vergunningen[].start_datum",
          "vergunningen[].eind_datum"
        ],
        "transformatie": "src/distributiemonitor/metrics.py::bereken_universum",
        "aggregaties": [
          "totaal",
          "actief",
          "per_rechtsvorm (landelijk)",
          "per_plaats (top 25, genormaliseerd)"
        ],
        "beperkingen": [
          "Plaats is vrije tekst in het bronregister: ~71% dekking na normalisatie (vestigingsadres, terugval statutaire zetel); de dekking staat bij elk antwoord.",
          "Plaats-aggregaten bevatten alléén totalen — geen kruising met rechtsvorm of productgroep (privacy: kleine cellen kunnen bij eenmanduszaken naar natuurlijke personen wijzen).",
          "Een 'kantoor' is hier een vergunninghoudende entiteit; binnen één juridische entheid kunnen meerdere vestigingen werken."
        ]
      },
      {
        "id": "profielen",
        "naam": "Wft-vergunningsprofielen",
        "vraag": "Hoe breed is het productpakket per kantoor — specialist of allround?",
        "definitie": "Per actief kantoor: de set productgroepen waarvoor het minstens één geldige vergunning heeft, uitgesplitst per dienstsoort (adviseren, bemiddelen, aanbieden). Productgroepen: negen clusters (hypotheken, consumptief krediet, betalen, sparen, beleggen, schade, zorg, inkomen, pensioen) conform de productindeling van het AFM-rapport Marktmonitor Adviseurs & Bemiddelaars.",
        "bronvelden": [
          "vergunningen[].producten[].omschrijving",
          "vergunningen[].producten[].diensten[].omschrijving",
          "vergunningen[].eind_datum"
        ],
        "transformatie": "src/distributiemonitor/metrics.py::bereken_profielen; mapping: src/distributiemonitor/segmenten.py",
        "aggregaties": [
          "per_productgroep × dienstsoort (landelijk)",
          "breedteverdeling: 1 / 2–4 / 5–9 productgroepen"
        ],
        "beperkingen": [
          "Vergunningsbreedte ≠ feitelijk aanbod: een vergunning zegt dat een kantoor een product mag adviseren/bemiddelen, niet hoeveel het er feitelijk verkoopt.",
          "Producten buiten de negen clusters (of nieuwe omschrijvingen in het register) worden als 'onbekend' geteld en apart gerapporteerd, nooit stilletjes weggefilterd."
        ]
      },
      {
        "id": "stromen",
        "naam": "In- en uitstroom kantoren",
        "vraag": "Komt er vers kantoor bij, en hoeveel stopt er?",
        "definitie": "Instroom per jaar: jaar van de eerste vergunningstart van een kantoor. Uitstroom per jaar: jaar waarin de laatste vergunning van dat kantoor eindigde (alle vergunningen beëindigd).",
        "bronvelden": [
          "vergunningen[].start_datum",
          "vergunningen[].eind_datum"
        ],
        "transformatie": "src/distributiemonitor/metrics.py::bereken_stromen",
        "aggregaties": [
          "per jaar: instroom, uitstroom, netto"
        ],
        "beperkingen": [
          "Het register kent vergunningsdata, geen kantoorbeëindigingen: 'uitstroom' betekent hier 'laatste Wft-vergunning beëindigd' — een kantoor kan zonder Wft-vergunning doorbestaan (bijv. als executiewinkel of in andere dienstverlening).",
          "Het extract registreert einddata van vergunningen pas vanaf ~2021 structureel; oudere beëindigingen ontbreken en de uitstroom vóór 2021 is daarmee een onderschatting.",
          "Kantoren waarvan het volledige dossier ontbreekt in het extract vallen buiten de telling (wordt gerapporteerd in tellingen)."
        ]
      },
      {
        "id": "ontwikkeling",
        "naam": "Voorraadontwikkeling advieskantoren",
        "vraag": "Hoeveel advieskantoren zijn er actief — en welke kant gaat het op?",
        "definitie": "Actieve kantoren per jaareinde: kantoren met minstens één vergunning waarvan de start op of vóór de peildatum ligt én die nog niet beëindigd is op die datum. Het lopende jaar meet op de huidige peildatum (niet op 31 december), zodat het laatste punt exact klopt met universum.actieve_kantoren. Per jaar wordt ook de verandering t.o.v. het voorgaande jaar gegeven.",
        "bronvelden": [
          "vergunningen[].start_datum",
          "vergunningen[].eind_datum"
        ],
        "transformatie": "src/distributiemonitor/metrics.py::bereken_ontwikkeling",
        "aggregaties": [
          "per jaar: actieve kantoren + verandering t.o.v. voorgaand jaar"
        ],
        "beperkingen": [
          "Het extract registreert einddata van vergunningen pas vanaf ~2021 structureel; oudere beëindigingen ontbreken, waardoor de voorraad vóór 2021 een bovengrens is.",
          "Actief = vergunninghoudend: dit zegt niets over feitelijke activiteit of omzet, alleen over het recht om te adviseren of bemiddelen."
        ]
      },
      {
        "id": "geografie",
        "naam": "Adviesdichtheid per gemeente",
        "vraag": "Waar is fysiek financieel advies dichtbij — en waar dun?",
        "definitie": "Actieve Wft-kantoren per 10.000 huishoudens per gemeente. Kantoren worden via hun vestigingsplaats (terugval: statutaire zetel) gekoppeld aan CBS-gemeenten; huishoudens komen uit de CBS-kerncijfers wijken en buurten (GM-rijen). Landelijke dichtheid = gekoppelde actieve kantoren gedeeld door het totaal huishoudens in gemeenten met bekende huishoudens.",
        "bronvelden": [
          "vestigingsadres.plaats",
          "statutaire_zetel",
          "vergunningen[].eind_datum",
          "CBS 86165NED: HuishoudensTotaal per GM-rij",
          "CBS/PDOK gebiedsindelingen 2025: statcode, statnaam, geometrie (alleen voor de kaartweergave)"
        ],
        "transformatie": "src/distributiemonitor/metrics.py::bereken_geografie; koppeling: src/distributiemonitor/geografie.py + woonplaats_gemeente.json; kaart-asset: src/distributiemonitor/gemeente_paden.py → public/innovatie/distributiemonitor/gemeente-paden-2025.json",
        "aggregaties": [
          "per gemeente: kantoren, huishoudens, per 10.000",
          "landelijk per 10.000 huishoudens",
          "kaartweergave: choropleth per gemeente"
        ],
        "beperkingen": [
          "Koppelingsdekking: ~57% van de actieve kantoren koppelt aan een gemeente (vestigingsadres ontbreekt bij ~60% van de dossiers; de statutaire zetel vangt een deel op). De dekking staat bij elk antwoord — een lage gemeentedichtheid is deels een ondergrens.",
          "De vertaaltabel woonplaats→gemeente is gegenereerd via de PDOK Locatieserver (type:woonplaats, exacte match) tegen de CBS-gemeentecodes 2025; bij een herindeling moet zij worden hergegenereerd.",
          "CBS-peildatum (1 januari van het tabeljaar) wijkt af van de AFM-peildatum; beide staan bij het antwoord.",
          "Een 'kantoor' telt op zijn gemeente van vestiging/zetel — klanten wonen niet per definitie in dezelfde gemeente (vooral in stedelijke regio's een onderschatting van de feitelijke dekking rond kleine gemeenten).",
          "Per gemeente alléén totalen — geen kruisingen met productgroep of rechtsvorm (privacy).",
          "Kaart: de gemeentegrenzen zijn een statische weergave van de CBS-gebiedsindeling 2025 (gegeneraliseerd, 100 m-raster); bij een herindeling wijkt de kaartvorm af van de CBS-tabel totdat het curatie-asset is hergegenereerd. Gemeenten zonder cijfer krijgen een eigen neutrale kleur — nooit de null-kleur."
        ]
      },
      {
        "id": "consolidatie",
        "naam": "Consolidatie — groepen achter de kantoren",
        "vraag": "Hoeveel advieskantoren zitten bij dezelfde (uiteindelijke) moeder — en hoe geconcentreerd is de markt daardoor?",
        "definitie": "Actieve AFM-kantoren worden via KvK-nummer gekoppeld aan een actieve LEI (GLEIF-entiteiten) en via de GLEIF Relationship Records aan de geregistreerde ouder: de ultimate parent als die bekend is, anders de direct parent. Kantoren onder dezelfde ouder vormen een groep.",
        "bronvelden": [
          "AFM-index: kvk_nummer, statutaire_naam, actieve_vergunningen",
          "GLEIF entiteiten: kvk_nummer → lei (status=actief)",
          "GLEIF relaties: child_lei → parent_lei, parent_naam (RelationshipStatus=ACTIVE)"
        ],
        "transformatie": "src/distributiemonitor/consolidatie.py::bereken",
        "aggregaties": [
          "groepen (top 15) met leden",
          "verdeling naar groepgrootte (enkelvoudig / 2–4 / 5–9 / 10+)",
          "dekking per koppelstap"
        ],
        "beperkingen": [
          "Waarom de dekking laag is: een LEI is alleen verplicht voor specifieke rollen (uitgevende instellingen, fondsen, kredietinstellingen) — de meeste bemiddelaars registreren er geen; hij leeft op holdinglevel. Ruwweg 88% van de actieve kantoren mét KvK heeft geen LEI in het register: geen koppelfout maar de vorm van de bron.",
          "KvK's worden genormaliseerd (cijfers, voorloopnullen) en bij afwezigheid van een actieve LEI wordt een vervallen LEI mét vlag gebruikt — de entiteit bestaat en haar relaties blijven informatief.",
          "Alleen kantoren mét KvK, LEI én geregistreerde consolidatie-ouder tellen mee: de dekking staat per stap bij elk antwoord — een groep kan groter zijn dan de koppeling ziet.",
          "Relaties zijn zelfgerapporteerd door de entiteiten (GLEIF): niet elke groep registreert zijn structuur; ouders zonder LEI vallen buiten beeld.",
          "Dit is de groepsstructuur op entiteitsniveau; de interactieve netwerkgraaf met tijdslider staat live — KvK-mutaties (oprichting/opheffing) zijn nog niet gekoppeld."
        ]
      },
      {
        "id": "kwaliteit",
        "naam": "Kwaliteitsindex v1 — Kifid-aansluiting en -uitspraken",
        "vraag": "Welke kantoren zijn aangesloten bij de klachtenautoriteit, en bij wie vallen klachtuitspraken?",
        "definitie": "Twee signalen uit het publieke Kifid-register: (1) aansluiting — een actief AFM-kantoor is via zijn AFM-nummer teruggevonden in het Kifid-dienstverlenersregister met status 'aangesloten'; (2) uitspraken — het aantal keren dat een dienstverlener als defendant voorkomt in het uitsprakenregister, gekoppeld via de registernaam naar het AFM-nummer.",
        "bronvelden": [
          "Kifid FSP: afmNumber, name, connectionStatus",
          "Kifid uitspraken: defendant, name, date"
        ],
        "transformatie": "src/distributiemonitor/kwaliteit.py::bereken",
        "aggregaties": [
          "aansluitingsgraad over actieve kantoren",
          "uitspraken per kantoor (top 12)"
        ],
        "beperkingen": [
          "Het Kifid-register kent geen volledige export: dienstverleners worden geoogst via rechtsvorm-zoektermen — namen zonder die fragmenten kunnen ontbreken (aansluitingsgraad is een ondergrens).",
          "Uitspraken worden geoogst via de zoekterm 'klacht': uitspraken zonder die term kunnen ontbreken.",
          "Een uitspraak is géén oordeel over kwaliteit: een groot kantoor krijgt logischerwijs meer klachten. Aantallen zijn context, geen ranking.",
          "Defendant-koppeling loopt via exacte registernaam — handelsnaamvarianten vallen buiten beeld (geteld als niet-gekoppeld)."
        ]
      },
      {
        "id": "nowcast",
        "naam": "Nowcast — de jaargang in september al geschat",
        "vraag": "Waarmee sluit dit jaar af: instroom, uitstroom, netto?",
        "definitie": "Run-rate-projectie van het netto-saldo (instroom minus uitstroom van kantoren) voor het lopende jaar: het netto-YTD wordt geëxtraporeerd met de verhouding tussen netto-YTD en uiteindelijk jaarnetto uit de afgelopen jaren (zelfde maand gemeten). De band toont min/kwartielen/max van die historische verhoudingen.",
        "bronvelden": [
          "vergunningen[].start_datum (eerste start = instroom)",
          "vergunningen[].eind_datum (laatste eind bij alles-beëindigd = uitstroom)"
        ],
        "transformatie": "src/distributiemonitor/nowcast.py::bereken",
        "aggregaties": [
          "netto-YTD (instroom/uitstroom)",
          "projectie: min · q25 · mediaan · q75 · max",
          "maandbeeld: cumulatief netto per maand dit jaar"
        ],
        "beperkingen": [
          "Geen economisch model en geen seizoenscorrectie: de band is uitsluitend de spreiding die de historie laat zien — externe schokken (wetgeving, marktgolven) vallen er buiten.",
          "Uitstroom betekent hier 'laatste Wft-vergunning beëindigd', niet 'kantoor opgehouden te bestaan' (zelfde definitie als de stromen-metric).",
          "Jaren met klein of nul netto worden buiten de run-rate gehouden (≥ 10 netto over het jaar); de mediaan is robuust maar de band kan scheef zijn bij weinig bruikbare jaren."
        ]
      },
      {
        "id": "scenario",
        "naam": "Scenario v1 — wat doet een renteschok met de markt?",
        "vraag": "Beweegt de netto-stroom van kantoren mee met het hypotheekrenteniveau?",
        "definitie": "Per jaar: gemiddelde DNB-hypotheekrente (zuiver nieuwe woninghypotheken, totaal) tegenover de netto-stroom van kantoren (instroom minus uitstroom, zelfde definitie als de stromen-metric). OLS-regressie met 95%-band op de residu-spreiding; scenario's schuiven de rente −2 tot +3 procentpunten op van het huidige niveau.",
        "bronvelden": [
          "DNB reeksen: chart/serie/categorie/periode/waarde",
          "AFM: vergunningen[].start_datum, eind_datum"
        ],
        "transformatie": "src/distributiemonitor/scenario.py::bereken",
        "aggregaties": [
          "rente-nu + laatste 24 maanden",
          "richtingscoefficient (kantoren per procentpunt)",
          "scenario-band per rentestap"
        ],
        "beperkingen": [
          "Correlatie, geen causaliteit: rente en marktactiviteit bewegen samen met vraag, regulatie en conjunctuur — de band toont het historische verband, geen voorspelling.",
          "Jaaraggregaat (n ≈ 20): de schatting is robuust in richting, nauwkeurig in geen van beide richtingen; de band is ruim.",
          "De DNB-API wordt bevraagd met de publieke subscription-key uit het rente-dashboard en alléén met de endpoints die het dashboard zelf gebruikt."
        ]
      },
      {
        "id": "digitalisering",
        "naam": "Digitaliseringsindex — hoe digitaal is de adviesmarkt?",
        "vraag": "Hoeveel kantoren hebben een werkende site, en welke digitale diensten zijn daar zichtbaar?",
        "definitie": "Homepage-scan van kantoorsites uit het Kifid-dienstverlenersregister (gekoppeld via vergunningnummer aan actieve AFM-kantoren). Aanwezigheidssignalen: https, contactformulier, klantportaal/login, online aanvraag, chat, telefoon-nummer-online, e-mail-online, vacatures. De index is het gemiddelde aantal signalen per bereikbare site (0-1); signalen zijn waarnemingen, geen oordeel.",
        "bronvelden": [
          "Kifid FSP: website, afmNumber",
          "homepage-HTML: form/login/aanvraag/chat-patronen, tel:/mailto:"
        ],
        "transformatie": "src/sources/collecties/digitalisering.py (scan) · src/distributiemonitor/digitalisering_metric.py::bereken",
        "aggregaties": [
          "dekking: zaad via Kifid, bereikbaarheid, robots-blokkades",
          "aandeel per signaal onder bereikbare sites",
          "index: gemiddeld aantal signalen per site"
        ],
        "beperkingen": [
          "Zaad = Kifid-geregistreerde URL's (~39% van de dienstverleners): de index meet digitale aanwezigheid waar die zichtbaar is — geen volledige marktmeting.",
          "Alleen de homepage: signalen op diepere pagina's kunnen ontbreken.",
          "robots.txt-blokkades worden gerespecteerd (geteld als geblokkeerd, niet afwezig); de scan is hervatbaar en herhaalt dagelijks."
        ]
      },
      {
        "id": "groei",
        "naam": "Groeiclassificatie — wie groeit en wie krimpt?",
        "vraag": "Hoe ontwikkelt de productgroepen-breedte van elke vestiging zich jaar-op-jaar?",
        "definitie": "Per vestiging: verandering in het aantal actieve productgroepen (uit de vergunningsdata) tussen het huidige en vorige jaar. Absolute groei in procenten; klasse op eigen drempels (sterk_groeiend ≥+20%, groeiend ≥+5%, stabiel ±5%, krimpend ≤−5%, sterk_krimpend <−20%). Relatieve marktpositie: kwartiel t.o.v. alle actieve vestigingen.",
        "bronvelden": [
          "vergunningen[].producten[].omschrijving",
          "vergunningen[].start_datum, eind_datum"
        ],
        "transformatie": "src/distributiemonitor/groei.py::groeiclassificatie",
        "aggregaties": [
          "per_groeiklasse (aantal vestigingen)",
          "per_relatieve_positie (kwartiel)"
        ],
        "beperkingen": [
          "Zonder Kadaster/HDN-productiecijfers is 'groei' hier vergunningsbreedte (aantal productgroepen), geen omzetgroei — eerlijk gelabeld.",
          "Nieuwe vestigingen (vorig jaar 0 groepen) krijgen 100% groei — dit is instroom, geen organische groei."
        ]
      },
      {
        "id": "marktdekking",
        "naam": "Marktdekking — hoe groot is elke deelmarkt?",
        "vraag": "Hoeveel vestigingen zijn actief per productgroep?",
        "definitie": "Aantal actieve vestigingen per productgroep (deelmarkt) in het huidige jaar, met het aandeel van de totale actieve markt.",
        "bronvelden": [
          "vergunningen[].producten[].omschrijving"
        ],
        "transformatie": "src/distributiemonitor/groei.py::marktdekking",
        "aggregaties": [
          "per_deelmarkt (aantal + aandeel)"
        ],
        "beperkingen": [
          "Dekkingsgraad t.o.v. de totale markt vereist externe marktschattingen (Kadaster/HDN) — nog niet beschikbaar."
        ]
      },
      {
        "id": "segmenten_v2",
        "naam": "Segmenten v2 — holding-niveau taxonomie",
        "vraag": "Welk type adviesgroep is dit (specialist, allround, overig)?",
        "definitie": "Eigen taxonomie op holding-niveau, geclassificeerd op basis van de productgroepen-spreiding van de onderliggende vestigingen. Zes segmenten met eigen drempels; criteria en versiehistorie zijn publiek.",
        "bronvelden": [
          "vergunningen[].producten[].omschrijving",
          "GLEIF holding-structuur"
        ],
        "transformatie": "src/distributiemonitor/segmenten_v2.py::classificeer_holding",
        "aggregaties": [
          "per_segment (aantal holdings)"
        ],
        "beperkingen": [
          "Alleen holdings mét GLEIF-koppeling: de dekking is dezelfde ondergrens als de consolidatie-metric.",
          "Nieuwe criteria (v2.1+) worden gepubliceerd mét versiehistorie en changelog in de API."
        ]
      },
      {
        "id": "radar",
        "naam": "Consolidatie Radar — wie neemt over, wie is het volgende doelwit?",
        "vraag": "Welke groepen groeien door overname, en welke onafhankelijke vestigingen zijn logische kandidaten?",
        "definitie": "Vier analyses op de entiteitslaag: (1) consolidator-overzicht: hoofdholdings gerangschikt op vestigingen; (2) structuur per consolidator; (3) doelwit-signalering: onafhankelijke vestigingen mét groeiscore; (4) marktbeweging: consolidatiegraad (groep vs onafhankelijk).",
        "bronvelden": [
          "GLEIF holding-structuur",
          "AFM vergunningen (groei + segment)"
        ],
        "transformatie": "src/distributiemonitor/radar.py::bereken",
        "aggregaties": [
          "consolidator-overzicht (top 20)",
          "doelwitten (top 20, fit-score)",
          "consolidatiegraad (groep vs onafhankelijk)"
        ],
        "beperkingen": [
          "Zonder Kadaster/KvK-mutaties is 'overname' hier zichtbaar via GLEIF-structuren, niet via feitelijke overnamedata — de consolidatiegraad is een ondergrens (dekking ~3%).",
          "Doelwit-scores zijn signalen, geen advies: fit-score = groei × breedte; externe due diligence blijft nodig."
        ]
      },
      {
        "id": "benchmark",
        "naam": "Peer Benchmark — eigen positie t.o.v. vergelijkbare kantoren",
        "vraag": "Waar sta ik binnen mijn peergroep op vergunningsbreedte en groei?",
        "definitie": "Percentiel-indicator per kengetal t.o.v. alle actieve vestigingen (peergroep). Nu beschikbaar: vergunningsbreedte (aantal productgroepen) en groeiklasse. Later: portefeuillewaarde en productie.",
        "bronvelden": [
          "vergunningen[].combinaties",
          "vergunningen[].start_datum, eind_datum"
        ],
        "transformatie": "src/distributiemonitor/benchmark.py::benchmark",
        "aggregaties": [
          "percentiel per kengetal",
          "peergroep-median en kwartielen"
        ],
        "beperkingen": [
          "Zonder Kadaster/HDN is 'breedte' het aantal productgroepen, geen omzet — eerlijk gelabeld als vergunningsbreedte.",
          "Peergroep is voorlopig alle actieve vestigingen; verfijning op segment/regio volgt."
        ]
      },
      {
        "id": "kansmodel",
        "naam": "Consolidatiekans-model — wie wordt overgenomen?",
        "vraag": "Welke onafhankelijke kantoren hebben het hoogste signaal voor consolidatie-activiteit?",
        "definitie": "Heuristisch model met vijf transparante factoren: vergunningsbreedte (smal → hoger), groeiklasse (krimpend → hoger), rechtsvorm (eenmanszaak/VoF → hoger), vergunningsduur (≥12 jaar → hoger), en onafhankelijkheid (geen holding → doelwit). Score 0-100.",
        "bronvelden": [
          "vergunningen[].combinaties (breedte)",
          "vergunningen[].start_datum (duur)",
          "index: rechtsvorm",
          "GLEIF: holding-koppeling (onafhankelijkheid)",
          "groeiclassificatie"
        ],
        "transformatie": "src/distributiemonitor/kansmodel.py::bereken",
        "aggregaties": [
          "kansenlijst (top 20)",
          "factorbijdragen per vestiging (transparant)"
        ],
        "beperkingen": [
          "Heuristisch model v1.0: geen machine learning, alleen transparante factorgewichten. Zodra de wijzigingslog ≥1 kwartaal historie heeft, trainen we een echt model mét publieke backtest.",
          "Een hoge score is een signaal, geen voorspelling of advies: consolidatie hangt af van veel factoren buiten de data.",
          "Alleen onafhankelijke vestigingen (niet in een GLEIF-groep) worden gescoord — de dekking is dezelfde ondergrens."
        ]
      }
    ],
    "bronnen": [
      {
        "id": "afm-register",
        "naam": "AFM — Register financiële dienstverleners (Wft)",
        "status": "live",
        "endpoint": "/v1/afm/register",
        "voedt": [
          "universum",
          "profielen",
          "stromen",
          "geografie",
          "relatiegraaf",
          "hypotheeksegment"
        ],
        "peilfrequentie": "dagelijks (collectiebron, 24-uurs verversing)",
        "licentie": "hergebruik onder uitdrukkelijke bronvermelding AFM"
      },
      {
        "id": "gleif",
        "naam": "GLEIF — LEI Golden Copy (NL-slice, KvK-brug + relaties)",
        "status": "live",
        "endpoint": "/v1/gleif/register",
        "voedt": [
          "consolidatie",
          "relatiegraaf (naamlookup)"
        ],
        "peilfrequentie": "3× per dag door GLEIF",
        "licentie": "CC0 1.0"
      },
      {
        "id": "afm-nieuws",
        "naam": "AFM — nieuws en handhaving (RSS)",
        "status": "live",
        "endpoint": "/v1/distributiemonitor/kwaliteit",
        "voedt": [
          "kwaliteit (toezichtszijde)"
        ],
        "peilfrequentie": "dagelijks (eigen verversing; historie stapelt)",
        "licentie": "persberichten; hergebruik met bronvermelding AFM"
      },
      {
        "id": "kifid-register",
        "naam": "Kifid — dienstverleners- en uitsprakenregister",
        "status": "live",
        "endpoint": "/v1/distributiemonitor/kwaliteit",
        "voedt": [
          "kwaliteit"
        ],
        "peilfrequentie": "dagelijks (eigen verversing)",
        "licentie": "publiek beschikbaar register"
      },
      {
        "id": "dnb-register",
        "naam": "DNB — Openbaar register",
        "status": "beschikbaar",
        "endpoint": "/v1/dnb/register",
        "voedt": [
          "toezichtinstellingen-context"
        ],
        "peilfrequentie": "elke werkdag 06:00",
        "licentie": "CC BY 4.0"
      },
      {
        "id": "cbs",
        "naam": "CBS StatLine — wijkdata, demografie, bedrijvendemografie",
        "status": "live",
        "endpoint": "/v1/cbs/kerncijfers",
        "voedt": [
          "geografie: huishoudens per gemeente"
        ],
        "peilfrequentie": "per release (OData live)",
        "licentie": "CC BY 4.0"
      },
      {
        "id": "cbs-pdok-gebiedsindelingen",
        "naam": "CBS/PDOK — gebiedsindelingen 2025 (gemeentegrenzen)",
        "status": "live",
        "endpoint": null,
        "voedt": [
          "geografie: kaartweergave — gemeentegrenzen als compacte SVG-paden (curatie-asset)"
        ],
        "peilfrequentie": "per jaargang (herindeling); asset hergeneren met python3 -m src.distributiemonitor.gemeente_paden",
        "licentie": "CC BY 4.0"
      },
      {
        "id": "kvk",
        "naam": "KvK Handelsregister (SBI 6619x, 6622) — oprichting/opheffing",
        "status": "in_ontwikkeling",
        "endpoint": null,
        "voedt": [
          "consolidatiegraaf (oprichting en opheffing)",
          "instroom- en uitstroomverdieping"
        ],
        "bron_die_komt": "KvK open dataset / API — nog niet gekoppeld"
      },
      {
        "id": "kadaster",
        "naam": "Kadaster — hypotheekinschrijvingen",
        "status": "in_ontwikkeling",
        "endpoint": null,
        "voedt": [
          "hypotheekdistributie per kantoor"
        ],
        "bron_die_komt": "Kadaster open data — nog niet gekoppeld"
      },
      {
        "id": "cdfd",
        "naam": "CDFD — Wft-examenstatistieken",
        "status": "live",
        "endpoint": "/v1/distributiemonitor/hypotheek",
        "voedt": [
          "personenlaag hypotheekdistributie: examens en bevoegde adviseurs"
        ],
        "peilfrequentie": "per kwartaal (na publicatie)",
        "licentie": "persberichten; bronvermelding CDFD"
      },
      {
        "id": "duo",
        "naam": "DUO — persoonsleeftijden adviseurs",
        "status": "niet_publiek",
        "endpoint": null,
        "voedt": [
          "vergrijzing op persoonsleeftijd"
        ],
        "bron_die_komt": "Persoonsleeftijden zijn persoonsgegevens (AVG) en worden niet publiek ontsloten; de monitor toont vergunningsduur-cohorten als eerlijke proxy op kantooriveau."
      },
      {
        "id": "kifid-uitspraken",
        "naam": "Kifid — uitsprakenregister",
        "status": "live",
        "endpoint": "/v1/distributiemonitor/kwaliteit",
        "voedt": [
          "kwaliteit (uitspraken per categorie/jaar, per kantoor)"
        ],
        "peilfrequentie": "dagelijks (eigen verversing via de Kifid-API)",
        "licentie": "publiek beschikbaar register",
        "bron_die_komt": null
      },
      {
        "id": "hdn",
        "naam": "HDN — marktcijfers hypotheekaanvragen",
        "status": "live",
        "endpoint": "/v1/distributiemonitor/hypotheek",
        "voedt": [
          "marktvolume hypotheekaanvragen (maand · kwartaal · jaar)"
        ],
        "peilfrequentie": "maandelijks (persbericht); jaar- en kwartaaloverzichten per publicatie",
        "licentie": "persberichten en rapporten; bronvermelding HDN"
      },
      {
        "id": "dnb-statistieken",
        "naam": "DNB — rentestanden (statistiek-API)",
        "status": "live",
        "endpoint": "/v1/distributiemonitor/scenario",
        "voedt": [
          "scenario: hypotheekrente"
        ],
        "peilfrequentie": "dagelijks (eigen verversing; DNB publiceert maandelijks)",
        "licentie": "publieke statistiekpublicaties; bronvermelding DNB"
      }
    ],
    "taxonomie": {
      "productgroepen": [
        {
          "productgroep": "hypotheken",
          "label": "Hypotheken",
          "afm_producten": [
            "Hypothecair krediet"
          ]
        },
        {
          "productgroep": "consumptief_krediet",
          "label": "Consumptief krediet",
          "afm_producten": [
            "Consumptief krediet"
          ]
        },
        {
          "productgroep": "betalen",
          "label": "Betalen",
          "afm_producten": [
            "Betaalrekeningen",
            "Elektronisch geld"
          ]
        },
        {
          "productgroep": "sparen",
          "label": "Sparen",
          "afm_producten": [
            "Spaarrekeningen"
          ]
        },
        {
          "productgroep": "beleggen",
          "label": "Beleggen",
          "afm_producten": [
            "Vermogen",
            "Deelnemingsrechten in beleggingsinstellingen",
            "Beleggingsobjecten"
          ]
        },
        {
          "productgroep": "schade",
          "label": "Schade",
          "afm_producten": [
            "Schadeverzekeringen particulier",
            "Schadeverzekeringen zakelijk"
          ]
        },
        {
          "productgroep": "zorg",
          "label": "Zorg",
          "afm_producten": [
            "Zorgverzekeringen"
          ]
        },
        {
          "productgroep": "inkomen",
          "label": "Inkomen",
          "afm_producten": [
            "Inkomensverzekeringen"
          ]
        },
        {
          "productgroep": "pensioen",
          "label": "Pensioen",
          "afm_producten": [
            "Pensioenverzekeringen",
            "Premiepensioenvorderingen"
          ]
        }
      ],
      "dienstsoorten": [
        {
          "dienstsoort": "adviseren",
          "label": "Adviseren",
          "afm_diensten": [
            "Adviseren",
            "Adviseren en orders doorgeven"
          ]
        },
        {
          "dienstsoort": "bemiddelen",
          "label": "Bemiddelen",
          "afm_diensten": [
            "Bemiddelen",
            "Optreden als (onder)gevolmachtigd agent",
            "Herverzekeringsbemiddelen"
          ]
        },
        {
          "dienstsoort": "aanbieden",
          "label": "Aanbieden",
          "afm_diensten": [
            "Aanbieden"
          ]
        }
      ],
      "bron": "AFM-register: vergunningen per product (bijlage Gedragstoezicht Wft) per dienst; clustering conform de productindeling van het AFM-rapport Marktmonitor Adviseurs & Bemiddelaars. Code: src/distributiemonitor/segmenten.py"
    },
    "endpoints": {
      "universum": "/v1/distributiemonitor/universum",
      "profielen": "/v1/distributiemonitor/profielen",
      "stromen": "/v1/distributiemonitor/stromen",
      "ontwikkeling": "/v1/distributiemonitor/ontwikkeling",
      "geografie": "/v1/distributiemonitor/geografie",
      "consolidatie": "/v1/distributiemonitor/consolidatie",
      "kwaliteit": "/v1/distributiemonitor/kwaliteit",
      "nowcast": "/v1/distributiemonitor/nowcast",
      "scenario": "/v1/distributiemonitor/scenario",
      "digitalisering": "/v1/distributiemonitor/digitalisering",
      "groei": "/v1/distributiemonitor/groei",
      "marktdekking": "/v1/distributiemonitor/marktdekking",
      "segmenten_v2": "/v1/distributiemonitor/segmenten_v2",
      "radar": "/v1/distributiemonitor/radar",
      "benchmark": "/v1/distributiemonitor/benchmark",
      "kansmodel": "/v1/distributiemonitor/kansmodel",
      "hypotheek": "/v1/distributiemonitor/hypotheek"
    }
  }
}