Databron

Alle gegevens komen rechtstreeks uit het Open Data Portaal van de Tweede Kamer (het “gegevensmagazijn”), via de publieke OData v4 API. Er is geen API-sleutel nodig en er wordt niets handmatig ingevoerd: wat u ziet is wat de Kamer zelf publiceert.

Gebruikte gegevenssoorten (entiteiten):

EntiteitWat het isGebruikt voor
FractiePartijen/fracties met zetelaantalZetelverdeling, kleuren, matrix
BesluitBesluiten van de Kamer, incl. stemuitslagRecente stemmingen, matrix, thema’s
StemmingPer besluit: wie stemde voor/tegenVoor/tegen-balken, overeenstemming
ZaakDe motie/het wetsvoorstel achter een besluitTitels, dossiers, thema-indeling
PersoonKamerleden met geboortedatum, geslacht, woonplaatsKamerleden-pagina
FractieZetelPersoonActuele koppeling lid ↔ fractiezetelFractie per Kamerlid
ZaakActorIndieners van een zaakMeest actieve motie-indieners
DocumentHet officiële Kamerstuk achter een zaakLinks naar de volledige motie of het volledige voorstel
PersoonGeschenk, PersoonReis, PersoonNevenfunctieOpenbare belangenregistersGeschenken, reizen en bijbanen in persoons- en fractiedossiers

De server haalt alle stemmingsbesluiten en moties sinds 12 november 2025 op — de installatie van de huidige Tweede Kamer na de verkiezingen. Zo beslaan alle analyses de volledige zittingsperiode in plaats van een rollend venster. Deze historische data wordt een uur gecachet (pasfoto’s een dag), zodat de API van de Kamer niet onnodig wordt belast; de eerste keer laden na een serverstart kan daarom even duren.

Berekeningen

Overeenstemmingsmatrix (“Wie stemt met wie?”)

Voor elk paar fracties tellen we de stemmingen waarin beide fracties voor of tegen stemden. Het percentage is het aandeel daarvan waarin ze hetzelfde stemden. Paren met minder dan 10 gedeelde stemmingen tonen geen waarde; de bondgenoten/tegenpolen-inzichten vereisen minstens 25 gedeelde stemmingen.

Voor/tegen-balken

Zetelaantallen per stemming komen uit FractieGrootte. Bij hoofdelijke stemmingen (per Kamerlid) telt elk lid als 1 en aggregeren we per fractie. Het streepje in de balk markeert 76 zetels: de kleinste meerderheid.

Thema-indeling

De indeling op de Onderwerpen-pagina is een eenvoudige, transparante trefwoordenclassificatie op de titel en het onderwerp van de zaak (bijv. “stikstof” → Klimaat & energie). Het eerste thema met een treffer wint; zonder treffer valt een stemming onder “Overig”. Dit is bewust simpel gehouden — het is indicatief, geen officiële indeling van de Kamer.

Verdeeldheid

De verdeeldheid van een stemming is 1 − |voor − tegen| / (voor + tegen): 0 bij unanimiteit, 1 bij een perfecte fifty-fifty. “Meest verdeeld thema” is het gemiddelde hiervan over alle stemmingen binnen een thema (minimaal 10 stemmingen).

Leeftijden en moties per lid

Leeftijden worden berekend uit de geboortedatum in het gegevensmagazijn. Het motie-aantal bij een Kamerlid telt iedere motie waarbij dat lid als indiener staat geregistreerd, dus ook gezamenlijke moties. Onder Alle leden opent ieder lid als een deelbaar persoonsdossier met motiefilters, thema’s, vergelijking met de mediaan, geregistreerde uitslagen, afwijkend stemgedrag, geschenken, reizen en nevenfuncties.

De besluittekst bevat soms alleen het woord “Aangenomen” of “Verworpen”. Dat is een uitslag, geen inhoudelijke uitleg. In dat geval toont de site de officiële zaak- of documentomschrijving en biedt zij een link naar het volledige document uit het gegevensmagazijn.

Motie-succes per fractie

Van elke motie waarover gestemd is, kijken we naar de fractie van de eerste indiener en of de motie werd aangenomen. Fracties met minder dan 5 in stemming gebrachte moties blijven buiten beeld.

Fractiedossiers

Per actieve fractie tellen we geregistreerde voor- en tegenstemmen, moties met een indiener uit die fractie, actuele leden en openbare registervermeldingen. Bondgenoten en tegenpolen gebruiken dezelfde overeenstemmingsberekening als de matrix. Een hoog aandeel voorstemmen is geen inhoudelijk rapportcijfer: de betekenis hangt af van het voorstel.

Zoeken

De globale zoekfunctie normaliseert hoofdletters en accenten en doorzoekt namen, woonplaatsen, fracties, motietitels, zaakonderwerpen, besluitteksten en indieners. Thema- en uitslagfilters gebruiken dezelfde definities als de rest van de site.

Dwarsliggers

Alleen bij hoofdelijke stemmingen is per Kamerlid vastgelegd wat er gestemd is. Per fractie bepalen we de meerderheid onder de aanwezige leden; wie daarvan afwijkt telt als afwijkende stem. Bij een gelijk verdeelde fractie is er geen fractielijn en telt niets als afwijkend.

De voorpagina-koppen en het weekjournaal

De koppen op de voorpagina worden automatisch gekozen: de stemming met de kleinste marge in de laatste zeven dagen mét stemmingen (recesbestendig), de dwarsligger met de meeste afwijkende stemmen, het recentste vermeldenswaardige registergeschenk en het grootste stemgedrag-blok. Er komt geen redactie aan te pas — wat opvalt, valt op omdat de cijfers dat zeggen.

Trends per maand

De trendlijnen op de pagina Opvallend tonen per kalendermaand het aandeel gelijk gestemde stemmingen voor een aantal sprekende fractieduo’s (grootste bondgenoten, grootste tegenpolen, de twee grootste fracties) en het gemiddelde binnen het grootste stemgedrag-blok. Maanden met minder dan 15 gedeelde stemmingen tonen geen punt. De formatie-barometer telt daarnaast stemmingen waarvan dossier of onderwerp expliciet aan de kabinetsformatie raakt.

Head-to-head

De vergelijker op de Fracties-pagina gebruikt dezelfde overeenstemmingsberekening als de matrix, uitgesplitst per thema (minimaal 8 gedeelde stemmingen per thema). De “hardste botsingen” zijn stemmingen waarin de twee fracties tegenover elkaar stonden én de uitslag krap was — daar deed hun verschil er het meest toe.

Beperkingen & datakwaliteit

  • Dubbele fractierecords. Sommige fracties staan twee keer in het gegevensmagazijn (50PLUS heeft bijvoorbeeld een record uit 2012–2021 en een nieuw record sinds 2025), en recente stemmingen verwijzen soms naar het oude record. De site koppelt daarom eerst op fractie-ID en valt terug op de fractienaam.
  • Periode. Alle analyses beslaan de huidige zittingsperiode (sinds 12 november 2025). De kabinetsformatie liep bij het bouwen van deze site nog; de installatiedatum van de Kamer is daarom het meest betrouwbare startpunt van “het huidige politieke klimaat”.
  • Inconsistenties. De pagina Datakwaliteit rekent het gegevensmagazijn zelf na: dubbele fractierecords, stemmen op oude records, spookfracties bij indieners, uitslagen die de stemverhouding tegenspreken, officieel geregistreerde vergissingen, en meer. Alles live berekend, niets verzonnen.
  • Thema’s zijn indicatief. De trefwoordenclassificatie kan een stemming in het verkeerde thema plaatsen; de Kamer zelf publiceert geen thema-indeling per stemming.
  • Afsplitsingen. Groepen en eenlingen (zoals “Lid Keijzer”) worden als gewone fracties behandeld, in grijstinten.
  • Stemgedrag ≠ standpunt. Een hoge overeenstemming tussen twee partijen betekent niet dat ze het overal over eens zijn; veel moties worden Kamerbreed gesteund.

Techniek

Node.js + Express serveert de pagina’s en werkt als doorgeefluik (met cache) naar de OData API. De frontend is bewust framework-loos: gewone HTML, CSS en JavaScript, met de hand getekende SVG-visualisaties. Licht- en donkerthema volgen de systeeminstelling.

Handige links voor wie zelf wil bouwen:

  • Officiële API-documentatie — uitleg van alle entiteiten en het informatiemodel
  • $metadata — het volledige OData-schema
  • GET /api/overview, GET /api/topics en GET /api/opvallend — kleine, vooraf berekende paginavullingen
  • GET /api/votes en GET /api/votes/:id — gepagineerde stemmingen en volledige besluitdetails
  • GET /api/leden en GET /api/leden/:id/moties — ledenoverzicht en de uitleg achter ieder motie-aantal
  • GET /api/fracties en GET /api/fracties/:id — fractiekaarten en volledige fractiedossiers
  • GET /api/search — zoeken en filteren over leden, moties en stemmingen
  • GET /api/inconsistenties en GET /api/foto/:persoonId — datakwaliteit en pasfoto’s