Een open specificatie voor de toestand van de meterkast, vastgelegd in een QR-code die bij de kast blijft.
De meterkast is het hart van de woning geworden: zonnepanelen, laadpaal, warmtepomp en thuisbatterij komen er allemaal samen. Tegelijk neemt het aantal meterkast-incidenten toe en pleiten deskundigen voor een "APK van de meterkast". Het probleem van elke keuring is echter dat het rapport in een la verdwijnt — terwijl de kennis nodig is bij de kast, op het moment dat de volgende monteur er iets aan wijzigt.
Het meterkastpaspoort (MKP) draait dat om: de actuele toestand van de kast — aansluiting, capaciteit, aangesloten verbruikers en opwekkers, begrenzingsinstellingen en de wijzigingshistorie — wordt vastgelegd in een QR-code op een sticker aan de binnenzijde van de kastdeur. Elke monteur die de kast opent, scant en weet wat er hangt. Elke monteur die iets wijzigt, schrijft het paspoort bij en plakt een nieuwe sticker.
#). Fragmenten worden door browsers nooit naar een server verzonden; het paspoort verlaat de meterkast dus alleen als iemand die er fysiek staat het scant.Een MKP-QR-code codeert een URL van de vorm:
https://meterkastpaspoort.nl/p#<data>
waarin <data> het paspoort is: een JSON-object, gecomprimeerd met deflate-raw en gecodeerd als base64url. Het domein leidt door naar een referentie-implementatie; omdat de data in het fragment zit, reist zij automatisch mee met de doorverwijzing en bereikt zij nooit de server. Elke andere implementatie kan dezelfde payload lezen door het fragment te decoderen.
Richtwaarde: een gevuld paspoort comprimeert tot ± 200–400 bytes en past daarmee ruim in een QR-code die op een sticker van 40–50 mm scherp afdrukbaar is.
v: 2Veldnamen zijn kort gehouden om de QR-code compact te houden. Alle velden zijn optioneel tenzij anders vermeld; lezers negeren onbekende velden.
| Veld | Type | Betekenis |
|---|---|---|
v | getal | Verplicht. Specificatieversie: 2 voor dit document, 1 voor paspoorten volgens v0.1. Een lezer die 1 aantreft hanteert de oude uitleg van f (zie 4.4). |
d | tekst | Datum laatste bijwerking, JJJJ-MM-DD. |
pc, nr | tekst | Postcode en huisnummer(-toevoeging) van het adres. |
ean | tekst | EAN-code van de elektriciteitsaansluiting (18 cijfers, NL begint met 87; laatste cijfer is GS1 modulo-10-controlecijfer). Vindbaar via eancodeboek.nl. |
ean2 | tekst | EAN van een eventueel secundair allocatiepunt (bijv. apart bemeten laadpaal). |
bj | tekst | Bouwjaar of aanlegperiode van de kast, desnoods geschat ("1998", "±1990"). Relevant voor het normregime van aanleg (rechtens verkregen niveau). |
ha | object | Hoofdaansluiting — zie 4.2. |
kam | object | Ontwerpstroom verdeler — zie 4.3. |
grp | lijst | Afgaande en voedende groepen — zie 4.4. |
mat | lijst | Materiaal in de kast — zie 4.5. Nieuw in v0.2. |
lb | object | Load balancing / vermogenssturing — zie 4.6. |
chk | object | Laatste belastingcheck — zie 4.7. |
log | lijst | Installateurs-logboek — zie 4.8. |
ha| Veld | Type | Betekenis |
|---|---|---|
f | getal | Aantal fasen: 1 of 3. |
a | getal | Waarde hoofdzekering in ampère per fase (bijv. 25, 35). |
hs | getal | Nominale stroom hoofdschakelaar in ampère, indien afwijkend of bekend. |
kam| Veld | Type | Betekenis |
|---|---|---|
mm2 | getal | Doorsnede kam/rail in mm² (praktijk: 10 ≈ max 40 A, 16 ≈ max 63 A). |
a | getal | Maximale stroom van de kam in ampère. Onbekend? Conservatief 40 A aanhouden. |
Toetsregel: de som van de voedende groepen, op het deel van de kam waar hun stromen kunnen cumuleren, mag de kamcapaciteit niet overschrijden. Advies: voedende groepen zo dicht mogelijk bij het voedingspunt plaatsen.
grp[]| Veld | Type | Betekenis |
|---|---|---|
t | tekst | Type: alg (algemene groep), kook, wp (warmtepomp), lp (laadpaal), pv (PV-omvormer), bat (thuisbatterij), ov (overig). |
rol | tekst | af = afgaande groep (neemt stroom af), voed = voedende groep (levert stroom aan de kam: PV, ontladende batterij). Een batterij kan beide rollen hebben; noteer de rol met de hoogste stroom of twee regels. |
kw | getal | Vermogen in kW (bij voed: maximale teruglever-/ontlaadstroom omgerekend). |
f | getal | Aantal fasen: 1 of 3. Gewijzigd in v0.2: in v0.1 kon dit veld ook een fasenummer bevatten, wat tot verwarring leidde. |
fn | lijst | Fasenummer(s) waarop de groep is aangesloten: [1], [2], [3] of [1,2,3]. Onmisbaar om de belasting per fase te kunnen bepalen; laat weg als onbekend. |
mat | getal | Verwijzing naar i in mat[]: het beveiligingstoestel dat deze groep beveiligt. Nieuw in v0.2. |
n | tekst | Vrije korte omschrijving (bijv. "zolder PV 12 panelen"). |
mat[] nieuw in v0.2De beveiligingstoestellen en andere componenten in de kast. Deze lijst maakt twee dingen mogelijk die met alleen groepsgegevens niet kunnen: terugvinden wélk toestel een groep beveiligt, en een veldnotitie van een fabrikant vergelijken met wat er werkelijk hangt.
Neem op wat ertoe doet — beveiligingstoestellen, de hoofdschakelaar, de kam — en niet elk klemmetje. Elke regel vergroot de QR-code.
| Veld | Type | Betekenis |
|---|---|---|
i | getal | Volgnummer binnen dit paspoort, waarnaar grp[].mat verwijst. |
s | tekst | Soort: hs (hoofdschakelaar), als (aardlekschakelaar), ala (aardlekautomaat), aut (installatieautomaat), kam (kamrail), tr (transformator), ov (overig). |
fab | tekst | Fabrikant, zoals op het toestel vermeld. |
typ | tekst | Typeaanduiding, letterlijk overgenomen. |
art | tekst | Artikel- of bestelnummer. Optioneel, maar het sterkste aanknopingspunt bij een veldnotitie. |
sn | tekst | Serienummer. Optioneel. |
pd | tekst | Productie- of datumcode, letterlijk zoals op het toestel. Vrije tekst, want fabrikanten gebruiken hiervoor geen gemeenschappelijk formaat. Optioneel. |
pos | tekst | Plaats in de kast, bijvoorbeeld "R1-5" voor rij 1, modulepositie 5. Helpt het toestel terugvinden zonder te zoeken. |
lb| Veld | Type | Betekenis |
|---|---|---|
aan | ja/nee | Is er vermogenssturing actief? |
typ | tekst | stat (statisch: vaste begrenzing) of dyn (dynamisch: meet en regelt live, bijv. via P1). |
max | getal | Ingestelde grenswaarde in ampère (statisch) of maximaal toegestane huisstroom (dynamisch). |
reg | tekst | Regisseur: welk systeem stuurt (bijv. "evcc", "HEMS fabrikant X", "laadpaal intern"). Meerdere onafhankelijke begrenzers zonder gezamenlijke regisseur verdienen een waarschuwing in de lezende applicatie. |
Let op: load balancing is een software-instelling, geen veiligheidsmaatregel. De installatie behoort ook bij falende of opgeheven begrenzing veilig te zijn. Zonder aantoonbare gezamenlijke begrenzer is een gelijktijdigheidsfactor van 0,6 over de grote verbruikers een bruikbare conservatieve rekenbasis (richtlijn ontleend aan de belastingsfactoren uit de NEN-EN-IEC 61439-serie).
chk| Veld | Type | Betekenis |
|---|---|---|
r | tekst | Uitkomst: groen, oranje (begrenzing vereist en vastgelegd) of rood (verzwaring geadviseerd). |
d | tekst | Datum van de check, JJJJ-MM-DD. |
log[]De laatste 5–10 wijzigingen, nieuwste eerst. Oudere regels vervallen om de QR-code compact te houden.
| Veld | Type | Betekenis |
|---|---|---|
d | tekst | Datum, JJJJ-MM-DD. |
b | tekst | Bedrijfsnaam van de installateur. |
w | tekst | Korte omschrijving van de wijziging. |
erk | tekst | Erkenning of certificaat van het uitvoerende bedrijf, genoteerd als uitgever:nummer — bijvoorbeeld "installq:14718" (erkenning) of "kiwa:K0213477" (CO-certificaat van de certificerende instelling). De uitgever is wie het nummer afgeeft — niet wie een register bijhoudt. Nieuw in v0.2. Het paspoort verifieert niets; het maakt de erkenning controleerbaar in het openbare register van die uitgever. |
c | tekst | Optioneel contactgegeven (telefoon/e-mail), uitsluitend met instemming van de betreffende installateur. |
zeg | lijst | Zegelnummers die bij deze handeling zijn geplaatst, bijvoorbeeld ["IQ-14718-004217"]. Optioneel, nieuw in v0.2. Zie hoofdstuk 9. |
sid | tekst | Sleutel-identificatie van de ondertekenaar, op te zoeken in de index. Optioneel, nieuw in v0.2. |
sig | tekst | Ed25519-handtekening over deze regel, base64url. Optioneel, nieuw in v0.2. Zie 8.4: per toevoeging ondertekenen levert een keten op waarin niemand met terugwerkende kracht een eerdere regel kan wijzigen — ook niet als dat bedrijf niet meer bestaat. Kosten: circa 110 tekens per regel, wat de QR-code merkbaar vergroot. Weeg dat af tegen het aantal logboekregels. |
Zelf bekijken: de paspoortlezer is de referentie-implementatie van deze versie. Plak er een QR-URL in — of scan een sticker — en hij toont alle velden, inclusief mat[], fn, erk en de status van de handtekeningen. Alles gebeurt in de browser; de paspoortdata verlaat het toestel niet.
{
"v": 2,
"d": "2026-09-11",
"pc": "2801AB",
"nr": "12",
"ean": "871685900012345678",
"bj": "±1995",
"ha": {
"f": 3,
"a": 25
},
"kam": {
"mm2": 10,
"a": 40
},
"grp": [
{
"t": "pv",
"rol": "voed",
"kw": 4.2,
"f": 1,
"fn": [
1
],
"n": "12 panelen zuid",
"mat": 1
},
{
"t": "lp",
"rol": "af",
"kw": 11,
"f": 3,
"fn": [
1,
2,
3
],
"mat": 2
},
{
"t": "wp",
"rol": "af",
"kw": 3.5,
"f": 1,
"fn": [
2
],
"mat": 3
}
],
"mat": [
{
"i": 1,
"s": "ala",
"fab": "Voorbeeld Elektro",
"typ": "VBE-ALS-2P-40-30",
"art": "1234567",
"pd": "@29-1524-07",
"pos": "R1-5"
},
{
"i": 2,
"s": "aut",
"fab": "ABB",
"typ": "S203-C16",
"pos": "R1-9"
},
{
"i": 3,
"s": "aut",
"fab": "ABB",
"typ": "S201-B16",
"pos": "R1-12"
}
],
"lb": {
"aan": true,
"typ": "dyn",
"max": 25,
"reg": "HEMS"
},
"chk": {
"r": "oranje",
"d": "2026-08-06"
},
"log": [
{
"d": "2026-09-11",
"b": "Installatiebedrijf Jansen",
"w": "Laadpaal 11 kW + belastingcheck",
"erk": "installq:14718",
"zeg": [
"IQ-14718-004217"
]
},
{
"d": "2024-03-11",
"b": "PV Totaal",
"w": "PV 12 panelen, groep 7",
"erk": "installq:20551"
}
]
}
Dit object wordt gecomprimeerd (deflate-raw), gecodeerd als base64url en achter https://meterkastpaspoort.nl/p# geplaatst; van die URL wordt de QR-code gegenereerd. Bovenstaand voorbeeld levert een URL van circa 670 tekens op en past in een QR-code van versie 21 bij foutcorrectieniveau M.
Let op de omvang. Elke regel in mat[] maakt de code dichter. Blijft de QR onder de 50 mm slecht leesbaar, neem dan minder materiaal op of verklein het logboek — de leesbaarheid van de sticker gaat vóór de volledigheid van de lijst.
Een paspoort met een materiaallijst wordt groter dan een paspoort zonder. De begrenzing zit niet in de QR-code zelf maar in de sticker: hoe meer modules, hoe kleiner elk blokje. Op een sticker van 50 mm met 2 mm marge is 46 mm bedrukbaar; bij 203 dpi (8 punten per millimeter) wordt een module onder ongeveer 3,5 punten onbetrouwbaar om te scannen.
Gemeten waarden, met per groep één toestel en een logboek van één regel. De JSON groeit stevig, maar comprimeert goed doordat een materiaallijst zeer repetitief is:
| Groepen met materiaal | JSON | Na compressie | Modules | Punten per module | |
|---|---|---|---|---|---|
| 3 | 810 B | 364 B | 89 | 4,13 | ruim |
| 6 | 1278 B | 404 B | 93 | 3,96 | ruim |
| 12 | 2223 B | 479 B | 101 | 3,64 | ruim |
| 16 | 2859 B | 525 B | 105 | 3,50 | krap |
| 24 | 4131 B | 620 B | 113 | 3,26 | te dicht |
Richtlijn: houd een sticker van 50 mm onder de 105 modules. Tot ongeveer twaalf groepen met volledige materiaalgegevens is dat ruim haalbaar.
Twee maatregelen leveren elk ongeveer even veel op, en ze zijn te combineren:
art en pd weg bij standaardautomaten en volsta met fab, typ en pos; twintig toestellen passen dan op 101 modules bij niveau M. Een veldnotitie gaat vrijwel altijd over een specifieke serie — een aardlekschakelaar, een klemblok — en zelden over de standaardautomaat waarvan er tien in de kast zitten. Neem de volledige gegevens dus op waar ze ertoe doen en houd het elders kort.Moet een schrijvende toepassing toch inkorten, dan doet zij dat in deze volgorde, zodat overal dezelfde gegevens als eerste sneuvelen:
log[], van onderen af;art, sn en pd van toestellen die geen art hebben — die matchen toch niet betrouwbaar;mat[], te beginnen bij toestellen zonder art en zonder sn;n) inkorten.Nooit afkappen op grond van “dit veld ken ik niet”. Een toepassing die inkort meldt aan de gebruiker welke gegevens niet zijn meegenomen, zodat die het volledige overzicht in het opleverdocument kan opzoeken.
Een sticker kan verloren gaan — beschadiging, vervanging van de kastdeur, of brand. Het paspoort is daartegen bestand door gedistribueerde opslag zonder register: dezelfde QR-code staat als uitknippagina in elk opleverdocument, en dat document is bij oplevering aan de bewoner verstrekt (en berust in de administratie van de installateur). Herstel bestaat uit het scannen van de QR uit het meest recente opleverdocument en het printen van een nieuwe sticker. Omdat iedere klus een nieuw document met de actuele paspoortstand oplevert, bestaan er evenveel reservekopieën als er ingrepen zijn geweest — verspreid over bewoner en betrokken installateurs. Een centraal register is daarmee bewust géén onderdeel van deze specificatie: het zou een doorzoekbare koppeling tussen adres en installatiegegevens introduceren (privacy- en inbraakrisico) zonder wezenlijke toevoeging aan de hersteldekking.
Een fabrikant die een probleem ontdekt in een serie aardlekschakelaars of automaten heeft vandaag geen weg naar de kasten waarin dat materiaal hangt. De groothandel weet wie het kocht, niet waar het terechtkwam; de installateur is misschien gestopt of overgenomen. Wat er gebeurt is een persbericht en hopen.
Het meterkastpaspoort kan dat gat overbruggen — en juist doordat er geen centrale database is. De QR zit op de kastdeur en overleeft de installateur.
Elke uitgever publiceert een eigen, ondertekend bestand onder zijn eigen domein. Een lezende toepassing haalt dat op en vergelijkt het op het toestel van de gebruiker met mat[] uit de paspoorten die hij heeft. Er verlaat geen enkel gegeven het toestel: de vergelijking gaat naar de data, niet de data naar de vergelijking. De fabrikant komt dus nooit te weten waar zijn product hangt.
{
"standaard": "meterkastpaspoort-veldnotitie/1.0",
"uitgever": { "naam": "Voorbeeld Elektro B.V.",
"domein": "voorbeeldelektro.nl",
"sleutel_id": "vbe-2026-01" },
"bijgewerkt": "2026-09-11",
"notities": [{
"id": "vbe-2026-003",
"gepubliceerd": "2026-09-01",
"status": "actueel",
"ernst": "actie_vereist",
"producten": [{
"fabrikant": "Voorbeeld Elektro",
"type": "VBE-ALS-2P-40-30",
"artikelnummer": "1234567",
"identificatie": {
"waar": "Datumcode op het typeplaatje aan de rechterzijde en op de doos.",
"formaat": "@29-WWJJ-DD — week 09 t/m 32 van 2024 is geraakt.",
"toelichting": "Staat de code er niet, dan valt het exemplaar buiten deze melding."
}
}],
"titel": "Aardlekschakelaar kan traag uitschakelen bij lage temperatuur",
"tekst": "Letterlijke tekst van de fabrikant.",
"handeling": "Vervangen. Neem contact op via … voor kosteloze omruil.",
"bron_url": "https://voorbeeldelektro.nl/veldnotities/vbe-2026-003"
}],
"handtekening": "…"
}
ernst kent drie waarden: informatie, actie_gewenst, actie_vereist. status kan naar ingetrokken; de notitie blijft dan in het bestand staan zodat een gecachte toepassing hem ook echt kan intrekken. tekst en handeling worden letterlijk getoond.
Een echte terugroepactie identificeert zelden op een schone reeks. Een gedocumenteerd voorbeeld: in 2020 werd een serie metersokkels teruggeroepen wegens brandgevaar, herkenbaar aan een datumcode op drie plekken in het formaat @29-WWJJ-DD, waarbij een bereik van weken geraakt was. Dat past in geen enkel gestructureerd veld — en het is precies wat de monteur nodig heeft, want hij staat voor één kast met één exemplaar.
Daarom bestaat identificatie uit drie vrije regels: waar de code staat, hoe je hem leest, en een toelichting voor het randgeval. Die tekst wordt nooit machinaal vergeleken en altijd woordelijk getoond. Een treffer op type is een aanwijzing; de identificatie maakt er een vaststelling van — door de monteur, niet door de software.
Drie lagen, drie vragen: de feed wordt ondertekend door de fabrikant (komt deze melding echt van dit merk?), het paspoort door de installateur (is deze data sinds het maken ongewijzigd?), en de index van uitgevers en sleutels door de beheerder van de standaard (is dit werkelijk de officiële lijst?). Die derde wordt vaak vergeten en is onmisbaar: wie de index kan vervangen, voegt een valse uitgever toe en kan daarna elke melding faken.
De handtekening is asymmetrisch — Ed25519, circa 110 tekens base64 — en nadrukkelijk geen HMAC: wie met een gedeeld geheim kan controleren, kan er ook mee vervalsen, terwijl hier een consument of inspecteur het moet kunnen nakijken.
Een handtekening bewijst dat de gegevens onveranderd zijn en van de houder van die sleutel komen. Niet dat de installatie deugt en niet dat de sticker op de juiste kast zit. Lezende toepassingen tonen daarom drie toestanden, feitelijk gesteld: ondertekend en geverifieerd, ondertekend maar nog niet te verifiëren, niet ondertekend — nooit “ongeldig” of “goedgekeurd”.
Om het kanaal zonder centrale regie te laten werken staan feed en index op vaste, voorspelbare plekken:
| Wat | Waar |
|---|---|
| Feed van een uitgever | https://<domein>/.well-known/meterkastpaspoort-veldnotities.json |
| Index van uitgevers en sleutels | https://meterkastpaspoort.nl/veldnotities/index.json |
{
"standaard": "meterkastpaspoort-veldnotitie-index/1.0",
"bijgewerkt": "2026-09-11",
"uitgevers": [
{ "naam": "Voorbeeld Elektro B.V.",
"domein": "voorbeeldelektro.nl",
"feed": "https://voorbeeldelektro.nl/.well-known/meterkastpaspoort-veldnotities.json",
"sleutel_id": "vbe-2026-01",
"publieke_sleutel": "…" }
],
"handtekening": "…"
}
Een lezende toepassing haalt de feeds bij voorkeur op via een eigen tussenstap in plaats van rechtstreeks. Dat is geen technische luxe: bij rechtstreeks ophalen ziet de fabrikant de IP-adressen van installateurs en kan hij dus tellen wie er kijkt. De feeds worden gecacht zodat de controle ook zonder netwerk werkt — een meterkast is vaak een kelder.
Dit kanaal is voor een fabrikant alleen waardevol als het neutraal is; een kanaal dat te koop is, is voor een veiligheidsmelding waardeloos. Daarom horen deze regels bij de standaard:
Het uitvoeren of administreren van een terugroepactie valt buiten deze standaard. Wij maken vindbaar, meer niet.
De vergelijking gebeurt op het toestel van de gebruiker, in deze volgorde:
art (artikelnummer) wanneer beide kanten dat hebben — het sterkste aanknopingspunt.fab + typ.sn of pd wanneer de notitie een bereik noemt én het paspoort de waarde draagt.De uitkomst is per notitie treffer (product en bereik komen overeen), mogelijk van toepassing (type komt overeen, bereik onbekend of alleen met de hand vast te stellen), of niets. Bij mogelijk van toepassing is de tekst uit identificatie het enige wat de monteur verder helpt; die hoort daarom prominent in beeld.
Sinds 1 mei 2026 kent Nederland een landelijk zegelrecht: erkende installatiebedrijven mogen verzegelingen in de meterkast zelfstandig verbreken en opnieuw aanbrengen. Aan een erkenning hangt daarmee een reeks zegelnummers. Hoe het gebruik van die zegels wordt vastgelegd was bij het opstellen van deze versie nog een open vraag.
Het paspoort is er de natuurlijke drager voor, om één reden: het zegel en de vastlegging zitten op dezelfde plek. Wie het zegel ziet, ziet de registratie ernaast — zonder register, zonder verbinding.
Een geplaatst zegel hoort bij de handeling die eraan voorafging en wordt dus genoteerd in de logboekregel van die handeling, in het veld zeg. Datum en uitvoerend bedrijf staan al in dezelfde regel; is die regel ondertekend (zie 8.4), dan is de zegelregistratie automatisch onvervalsbaar en herleidbaar tot een sleutel.
Aanbevolen opbouw: uitgever-erkenning-volgnummer, bijvoorbeeld IQ-14718-004217.
Door het erkenningsnummer ín het zegelnummer op te nemen draagt het zegel zijn herkomst met zich mee. Wie het aantreft — de volgende monteur, een netbeheerder, een inspecteur — ziet welk erkend bedrijf het heeft geplaatst, zonder iets op te zoeken. Het zegel wordt daarmee zelf een stuk bewijs in plaats van alleen een afsluiting.
De uitgever wil weten hoeveel zegels er in omloop zijn, welke, en door wie ze zijn gebruikt. Dat kan grotendeels zonder ook maar één melding, en het is de moeite waard te onderscheiden wat waarvoor nodig is:
| Vraag | Antwoord |
|---|---|
| Welke nummers zijn uitgegeven, en aan wie? | Bekend bij de uitgever zelf — dat is administratie, geen monitoring. Hiermee is elk nummer buiten alle uitgegeven reeksen per definitie vals, en elk nummer uit de reeks van een ander bedrijf onterecht geplaatst. |
| Wordt er gefraudeerd met zegels? | Zichtbaar in het veld. Iedereen die een meterkast opent kan het nummer lezen en het naast de ondertekende erkenningsverklaring van het bedrijf leggen. Eén melding volstaat; registratie van elk zegel is er niet voor nodig. Zo worden bankbiljetten ook gecontroleerd: niet door elk biljet te registreren, maar doordat vervalsen opvalt zodra iemand kijkt. |
| Hoeveel zegels verbruikt een bedrijf? | Een periodieke teller volstaat: het aantal verbruikte zegels uit de reeks, zonder nummers en zonder adressen. Een verbruik dat niet strookt met de omvang van het bedrijf, of een nieuwe reeks terwijl de vorige nauwelijks is gebruikt, is dan alsnog een signaal — toezicht op patroon in plaats van op handelingen. |
Het per zegel melden van nummer én adres aan een centrale partij. Dat levert een landelijk bestand op van wie er wanneer in welke meterkast is geweest. Dat is een ander soort gegevensverzameling dan waar deze standaard voor is gemaakt, en het zou het uitgangspunt uit hoofdstuk 2 ondergraven: de gegevens blijven bij de kast en bij de eigenaar.
De verleiding is reëel, want zonder adres kan een uitgever niet vaststellen of hetzelfde zegelnummer op twee plaatsen is gebruikt. Dat is een aanvaardbare beperking: dubbelgebruik komt aan het licht op het moment dat iemand de kast opent, en dat is precies het moment waarop het ertoe doet.
Het veld erk in het logboek noteert de erkenning van de installateur, maar bewijst niets — het is tekst die hij zelf invult. Dat volstond zolang het probleem was dat erkenningen werden verzonnen. Inmiddels is het probleem verschoven: malafide bedrijven gebruiken de naam, en soms het nummer, van een bedrijf dat wél erkend is. Een register dat alleen op naam en adres doorzoekbaar is, bevestigt dan de leugen.
Dit hoofdstuk beschrijft hoe een uitgever — de erkennende instantie of een certificerende instelling — die erkenning ondertekend kan afgeven, zodat iedereen haar kan controleren zonder register en zonder verbinding.
Een opleverdocument ontstaat ná de klus. Dan is er betaald en is de schade geleden. De verklaring hangt daarom aan het bedrijf en niet aan een klus: ze kan mee op de offerte, op het bedrijfsbusje en op de website, en reist daarnaast mee in het paspoort. De controle verschuift zo naar het moment waarop de opdrachtgever nog nee kan zeggen.
Anders dan het paspoort wordt de verklaring niet gecomprimeerd. De gegevens moeten met het blote oog te lezen zijn, ook door iemand die alleen de URL in zijn adresbalk ziet staan:
https://<uitgever>/v?u=demo&kvk=30269985&b=Installatiebedrijf%20Jansen%20B.V.
&erk=14718&vg=elektrotechniek,zonnestroom&bv=zegelrecht:IQ-14718-004000-004999
&tot=2027-01-01&sid=demo-2026-01&sig=IwC7BsALphvgokU4rQIW6f…
| Veld | Betekenis |
|---|---|
u | Identificatie van de uitgever, op te zoeken in de index (zie 8.5). |
kvk | KVK-nummer. Het anker van de verklaring: een bedrijfsnaam kan iedereen roepen, een KVK-nummer niet. |
b | Bedrijfsnaam zoals ingeschreven. |
erk | Erkenningsnummer bij deze uitgever. |
vg | Vakgebieden waarvoor erkend, komma-gescheiden. |
bv | Bevoegdheden, als soort:waarde — zie 10.3. |
tot | Geldig tot. Lost intrekken op zonder dat iemand online hoeft te zijn: een ingetrokken erkenning krijgt geen nieuwe verklaring en verloopt vanzelf. |
sid | Sleutel-identificatie van de uitgever. |
sig | Ed25519-handtekening over alle voorgaande parameters in de getoonde volgorde, base64url. |
Het zegelrecht is niet de enige bevoegdheid die aan een erkenning hangt, en het geldt maar voor één vakgebied. Twee andere zijn zelfs zwaarder, want wettelijk in plaats van privaatrechtelijk:
| Vakgebied | Bevoegdheid | Aard |
|---|---|---|
| Elektrotechniek | zegelrecht:<reeks> — verzegelingen verbreken en aanbrengen, met toegewezen nummerreeks | privaatrechtelijk |
| Gastechnische installaties | co:<nummer> — CO-certificaat (BRL 6000-25) | wettelijk |
| Warmtepomp, koeling | fgas:<nummer> — F-gassencertificaat | wettelijk |
| Zonnestroom, laadpunten, energieopslag | geen wettelijke bevoegdheid | — |
Die laatste regel verdient aandacht. Juist bij de vakgebieden waar de energietransitie het hardst groeit — en waar de meeste meldingen over malafide bedrijven vandaan komen — is de erkenning het enige signaal dat er is. Er is geen wettelijk register dat de opdrachtgever kan raadplegen. Een verifieerbare erkenning is daar dus niet nuttig maar noodzakelijk.
Een uitgever kan alleen ondertekenen wat zij zelf afgeeft. Erkenningen komen van de erkennende instantie; het CO-certificaat en het F-gassencertificaat komen van certificerende instellingen. Een installateur draagt daarom mogelijk meerdere verklaringen, elk met de sleutel van hun eigen uitgever ondertekend en elk terug te vinden in de index. Dat sluit aan op de notatie uitgever:nummer die erk in het logboek al gebruikt.
Wel: dat deze erkenning door deze uitgever is afgegeven aan het bedrijf met dit KVK-nummer, en dat er sindsdien niets aan is gewijzigd. Wie één letter verandert, breekt de handtekening.
Niet: dat degene die voor u staat dat bedrijf ís. Een verklaring is een bestand en kan gekopieerd worden. De controle die daarop volgt is menselijk en eenvoudig: komt de bedrijfsnaam en het KVK-nummer in de verklaring overeen met de offerte? Zo niet, dan draagt iemand andermans papieren. Lezende toepassingen tonen die vergelijking daarom expliciet in plaats van alleen een vinkje.
Deze standaard beschrijft het formaat. Zij verifieert geen erkenningen en geeft er geen af; zij maakt controleerbaar wat de uitgever verklaart.
Deze specificatie kent twee nummers die niet gelijk oplopen, en dat is opzet:
| Wat | Nu | Wanneer hoger |
|---|---|---|
| Documentversie — deze tekst | 0.3 | bij elke inhoudelijke uitbreiding, ook als het datamodel gelijk blijft |
Datamodelversie — het veld v in een paspoort | 2 | uitsluitend bij een wijziging die oudere lezers zou breken |
Een paspoort met v: 2 kan dus velden bevatten die in documentversie 0.2 nog niet beschreven waren, zoals zeg. Dat is geen probleem: alle toevoegingen zijn optioneel en een lezer negeert wat hij niet kent. Wie zekerheid wil over welke velden hij kan verwachten, kijkt naar de documentversie; wie wil weten of hij het paspoort überhaupt kan lezen, kijkt naar v.
Wijzigingsvoorstellen op deze concept-specificatie zijn welkom; het veld v wordt verhoogd bij niet-neerwaarts-compatibele wijzigingen. Lezers behoren paspoorten met een hogere versie zo goed mogelijk weer te geven en onbekende velden te negeren. De referentie-implementatie van deze specificatie is YourWkb.
| Wat | Waarom |
|---|---|
Nieuw: log[].zeg en hoofdstuk 9, zegels | Het landelijk zegelrecht hangt aan de erkenning. Het paspoort legt het zegelnummer vast op dezelfde plek als het zegel zelf, zodat toezicht mogelijk is zonder centraal register van meterkasten. |
| Nieuw: hoofdstuk 10, erkenningsverklaring | Het veld erk noteert een erkenning maar bewijst haar niet. Een ondertekende verklaring maakt dat wél mogelijk — en al bij de offerte, dus vóórdat de opdracht is gegeven. Met de bevoegdheden per vakgebied, die per discipline verschillen en soms ontbreken. |
| Nieuw: hoofdstuk 6, omvang van de QR-code | Met een materiaallijst wordt de code groter. Vaste grenswaarden en één afkapvolgorde houden implementaties onderling vergelijkbaar. |
| Verduidelijkt: twee versienummers (11.1) | Documentversie en datamodelversie liepen door elkaar. |
| Wat | Waarom |
|---|---|
Nieuw: mat[] met fab, typ, art, sn, pd, pos | Zonder materiaallijst is een veldnotitie van een fabrikant nergens mee te vergelijken. Dit is de drager van het terugroepkanaal. |
Nieuw: grp[].fn (fasenummer) en f beperkt tot het aantal fasen | In v0.1 kon f beide betekenen, waardoor de belasting per fase niet te bepalen was. Fasecompensatie is boekhouding, stroom is fysiek — de hoofdzekering zit vóór de saldering, dus per fase rekenen vereist een eenduidig fasenummer. |
Nieuw: grp[].mat | Koppelt een groep aan het toestel dat hem beveiligt. |
Nieuw: log[].erk als uitgever:nummer | Maakt de erkenning van de uitvoerende installateur controleerbaar in het openbare register van de uitgever. Het paspoort verifieert niets; het maakt controleerbaar. |
Nieuw: log[].sid en log[].sig | Ondertekening per logboekregel in plaats van over het geheel: dan kan niemand met terugwerkende kracht een eerdere regel wijzigen, en blijft de regel van een installateur verifieerbaar ook als dat bedrijf niet meer bestaat. |
| Nieuw: hoofdstuk 6, omvang van de QR-code | Met een materiaallijst wordt de code groter. Vaste grenswaarden en één afkapvolgorde houden implementaties onderling vergelijkbaar. |
| Nieuw: hoofdstuk 8, veldnotities | Het formaatdeel van het terugroepkanaal hoort in de open standaard, niet in één applicatie. Inclusief vaste vindplaatsen voor feed en index, de ondertekening in drie lagen, en de neutraliteitsregels. |
Neerwaartse compatibiliteit. Alle toevoegingen zijn optioneel. Een paspoort van v0.1 blijft geldig en leesbaar; alleen f is van betekenis verscherpt, waarbij een lezer bij v: 1 de oude uitleg moet blijven hanteren.