{
  "$schema": "https://govschema.org/spec/v0.3/govschema.schema.json",
  "govschemaVersion": "0.3.0",
  "id": "nl/denhaag/voter-registration-abroad",
  "version": "1.0.0",
  "title": "Netherlands Permanent Registration as a Voter Outside the Netherlands (Permanente Registratie Kiezer Buiten Nederland)",
  "description": "Register a Dutch national who lives outside the Netherlands and is not enrolled at a Dutch municipal address (so is not automatically on the electoral roll) as a permanent overseas voter, using the Municipality of The Hague's (Gemeente Den Haag) online Open Forms wizard at formulieren.denhaag.nl. Den Haag is the single national authority the Kieswet (Elections Act) designates to register every voter resident outside the Netherlands, regardless of which Dutch municipality (if any) the applicant was last registered in. Once registered, the voter automatically receives, by post, every future mailing needed to vote by post (briefstemmen) in Tweede Kamer (House of Representatives) elections, European Parliament elections, and/or elections for the non-resident electoral college (kiescollege niet-ingezetenen) that elects part of the Eerste Kamer (Senate) — whichever the applicant opts into. Models the election types the applicant opts into, personal and foreign-residence contact details, an optional separate correspondence address, the copy of a valid Dutch identity document required as proof of nationality, and the European Parliament non-double-registration declaration required of applicants resident in another EU member state. Does not model: the separate per-election postal-vote proxy (volmacht) process, the underlying briefstemmen (postal voting) mechanics themselves, or the wizard's final Uw stembiljet/Ondertekening/Overzicht (ballot-method/signature/summary) screens, which this authoring cycle reached and confirmed exist but could not capture field-by-field before the live session ended — see VERIFICATION.md. Does not submit the registration; the live formulieren.denhaag.nl service is always authoritative.",
  "status": "draft",
  "jurisdiction": {
    "country": "NL",
    "level": "national"
  },
  "authority": {
    "name": "Gemeente Den Haag (Municipality of The Hague), the single national registration authority for voters resident outside the Netherlands under the Kieswet (Elections Act)",
    "abbreviation": "Gemeente Den Haag",
    "url": "https://www.denhaag.nl/nl/verkiezingen/kiezers-buiten-nederland/"
  },
  "process": {
    "type": "registration",
    "language": "nl-NL"
  },
  "source": {
    "url": "https://formulieren.denhaag.nl/permanente-registratie-kiezer-buiten-nederland",
    "retrievedAt": "2026-07-04",
    "documentRef": "Gemeente Den Haag Open Forms wizard 'Permanente registratie kiezer buiten Nederland' (no form/document number — online-only submission channel)"
  },
  "verification": {
    "method": "manual-source-review-v1",
    "lastVerifiedAt": "2026-07-04",
    "verifiedBy": "GovSchema Engineering (Standards Engineer)",
    "nextReviewBy": "2027-01-01",
    "notes": "Source-derived reference schema authored from a live, screen-by-screen headless-browser walkthrough (Playwright/Chromium) of the actual formulieren.denhaag.nl Open Forms wizard, not a static page fetch — the wizard's steps only render after client-side JavaScript, so a plain fetch shows no fields. Direct DOM capture (field name/id/label/type/required attributes, plus the live client- and server-side validation error text returned by the form's own '_check-logic' backend endpoint) confirmed 3 of 8 wizard steps in full — Verkiezingen (elections), Uw gegevens (personal/address details), Uw nationaliteit (nationality proof) — including a real end-to-end mock submission through those steps: a fabricated applicant packet advanced the wizard from Introductie through Uw nationaliteit with the Volgende button transitioning from disabled to enabled only once the backend's own async validation accepted every value, and the identity-document upload was exercised with a real file via Playwright's filechooser interception. The remaining 3 named steps (Uw stembiljet, Ondertekening, Overzicht) were confirmed to exist (visible in the wizard's own progress rail) but this cycle's session hit intermittent site-side flakiness before their field-level content could be captured; see 'Explicitly out of scope' below. Status remains draft, not verified."
  },
  "maturity": {
    "level": "structural-reference",
    "criteria": {
      "structuralReference": true,
      "verifiedSchema": false,
      "agentReadySchema": false,
      "executionTestedSchema": false
    },
    "method": "maturity-self-assessment-v1",
    "assertedBy": "GovSchema Engineering (Standards Engineer)",
    "assertedAt": "2026-07-04"
  },
  "license": "CC-BY-4.0",
  "fields": [
    {
      "name": "requestTweedeKamerDocuments",
      "label": "I would like to receive the documents needed to vote for: the Tweede Kamer der Staten-Generaal (House of Representatives) elections",
      "type": "boolean",
      "required": false,
      "description": "At least one of requestTweedeKamerDocuments, requestEuropeanParliamentDocuments, and requestKiescollegeDocuments must be selected — the live form enforces this itself ('Het verplichte veld ... is niet ingevuld' when none are checked) — but this document does not encode that as a machine-checkable required/requiredWhen constraint: the leaf-compare grammar has no field-absence operator, and comparing an unchecked, never-submitted checkbox against `equals: false` risks the same absent-field misfire already recorded against this registry's notEquals/equals-against-a-falsy-sentinel bug class (see ie/electoral-commission/voter-registration's ppsn/witness handling for the same precedent).",
      "sourceRef": "formulieren.denhaag.nl wizard, step 'Verkiezingen' — checkbox 'De verkiezingen van de Tweede Kamer der Staten-Generaal', id e4yrw6-TWEEDE_KAMER"
    },
    {
      "name": "requestEuropeanParliamentDocuments",
      "label": "I would like to receive the documents needed to vote for: the European Parliament elections",
      "type": "boolean",
      "required": false,
      "description": "See requestTweedeKamerDocuments for the at-least-one-selected condition. Selecting this triggers europeanParliamentDeclaration.",
      "sourceRef": "formulieren.denhaag.nl wizard, step 'Verkiezingen' — checkbox 'De verkiezingen van het Europees Parlement', id e4yrw6-EUROPEES_PARLEMENT"
    },
    {
      "name": "requestKiescollegeDocuments",
      "label": "I would like to receive the documents needed to vote for: the elections for the non-resident electoral college (kiescollege niet-ingezetenen) for the Eerste Kamer (Senate)",
      "type": "boolean",
      "required": false,
      "description": "See requestTweedeKamerDocuments for the at-least-one-selected condition.",
      "sourceRef": "formulieren.denhaag.nl wizard, step 'Verkiezingen' — checkbox 'De verkiezingen van het kiescollege niet-ingezetenen voor de Eerste Kamer', id e4yrw6-KIESCOLLEGE"
    },
    {
      "name": "firstNames",
      "label": "First given name in full, and any further initials",
      "type": "string",
      "required": true,
      "classification": "pii",
      "description": "Must match the identity document supplied as identityDocumentCopy.",
      "sourceRef": "formulieren.denhaag.nl wizard, step 'Uw gegevens' — 'Eerste voornaam (voluit) en eventuele overige voorletters', field data[Voornamen]",
      "validation": {
        "minLength": 1,
        "maxLength": 200
      }
    },
    {
      "name": "namePrefix",
      "label": "Surname prefix (not required)",
      "type": "string",
      "required": false,
      "classification": "pii",
      "description": "Dutch tussenvoegsel, e.g. 'van der', 'de'. Kept separate from lastName per the source form's own field split.",
      "sourceRef": "formulieren.denhaag.nl wizard, step 'Uw gegevens' — 'Voorvoegsel (niet verplicht)', field data[Voorvoegsel]",
      "validation": {
        "maxLength": 100
      }
    },
    {
      "name": "lastName",
      "label": "Last name",
      "type": "string",
      "required": true,
      "classification": "pii",
      "description": "Must match the identity document supplied as identityDocumentCopy.",
      "sourceRef": "formulieren.denhaag.nl wizard, step 'Uw gegevens' — labelled 'Achternaam', underlying field data[Vooringevuldenaam]",
      "validation": {
        "minLength": 1,
        "maxLength": 200
      }
    },
    {
      "name": "bsn",
      "label": "Burgerservicenummer (BSN) (not required)",
      "type": "string",
      "required": false,
      "classification": "sensitive-pii",
      "description": "Dutch citizen service number, if the applicant has one. Not read verbatim off the form as a fixed digit count; the standard published BSN is 8 or 9 digits, not independently confirmed against form-specific guidance this cycle — flagged for a future reviewer, the same caveat this registry already applies to ie/electoral-commission/voter-registration's ppsn pattern.",
      "sourceRef": "formulieren.denhaag.nl wizard, step 'Uw gegevens' — 'Burgerservicenummer (BSN) (niet verplicht)', field data[BurgerServiceNummer], placeholder '_________'",
      "validation": {
        "pattern": "^[0-9]{8,9}$"
      }
    },
    {
      "name": "dateOfBirth",
      "label": "Date of birth",
      "type": "date",
      "required": true,
      "classification": "sensitive-pii",
      "description": "YYYY-MM-DD. Must match the identity document supplied as identityDocumentCopy.",
      "sourceRef": "formulieren.denhaag.nl wizard, step 'Uw gegevens' — 'Geboortedatum', placeholder 'dd-mm-jjjj'"
    },
    {
      "name": "phoneNumber",
      "label": "Phone number (not required)",
      "type": "string",
      "required": false,
      "classification": "pii",
      "sourceRef": "formulieren.denhaag.nl wizard, step 'Uw gegevens' — 'Telefoonnummer (niet verplicht)', field data[Telefoonnummer]",
      "validation": {
        "maxLength": 40
      }
    },
    {
      "name": "email",
      "label": "Email address",
      "type": "string",
      "required": true,
      "classification": "pii",
      "description": "Used to send urgent information about elections and, where offered, digital copies of voting documents/forms. Distinct from the Open Forms platform's own 'save and resume later' email prompt, which is not part of this registration's own data model.",
      "sourceRef": "formulieren.denhaag.nl wizard, step 'Uw gegevens' — 'E-mailadres', field data[E-mailadres]",
      "validation": {
        "maxLength": 254,
        "pattern": "^[^@\\s]+@[^@\\s]+\\.[^@\\s]+$"
      }
    },
    {
      "name": "residentialAddress",
      "label": "Residential address abroad (Woonadres)",
      "type": "string",
      "required": true,
      "classification": "pii",
      "description": "Free-text first address line (street, house number, and any unit) at the applicant's foreign residence. Some countries (e.g. Germany, France per the form's own guidance) do not deliver mail when the surname on the mailbox does not match the surname on the item — the form's own introduction warns the applicant to account for this when completing the address.",
      "sourceRef": "formulieren.denhaag.nl wizard, step 'Uw gegevens' — 'Woonadres', field data[Straat]",
      "validation": {
        "minLength": 1,
        "maxLength": 250
      }
    },
    {
      "name": "residentialAddressLine2",
      "label": "Residential address line 2 (not required)",
      "type": "string",
      "required": false,
      "classification": "pii",
      "sourceRef": "formulieren.denhaag.nl wizard, step 'Uw gegevens' — 'Adresregel 2 (niet verplicht)', field data[StraatExtraRegel1]",
      "validation": {
        "maxLength": 250
      }
    },
    {
      "name": "residentialAddressLine3",
      "label": "Residential address line 3 (not required)",
      "type": "string",
      "required": false,
      "classification": "pii",
      "sourceRef": "formulieren.denhaag.nl wizard, step 'Uw gegevens' — 'Adresregel 3 (niet verplicht)', field data[StraatExtraRegel2]",
      "validation": {
        "maxLength": 250
      }
    },
    {
      "name": "countryOfResidence",
      "label": "Country of residence abroad (Land buitenland)",
      "type": "enum",
      "required": true,
      "description": "Dutch-language country/territory name, as published in the form's own searchable country picker (247 entries, including several historical/special territories alongside current UN member states).",
      "sourceRef": "formulieren.denhaag.nl wizard, step 'Uw gegevens' — 'Land buitenland', field data[Land] (Choices.js country picker)",
      "validation": {
        "enum": [
          "Afghanistan",
          "Albanië",
          "Algerije",
          "Amerikaanse Maagdeneilanden",
          "Amerikaans-Samoa",
          "Andorra",
          "Angola",
          "Anguilla",
          "Antigua en Barbuda",
          "Argentinië",
          "Armenië",
          "Aruba",
          "Ascension",
          "Australië",
          "Azerbeidzjan",
          "Azoren",
          "Bahama's",
          "Bahrein",
          "Bangladesh",
          "Barbados",
          "Belarus",
          "België",
          "Belize",
          "Benin",
          "Bermuda",
          "Bhutan",
          "Bolivia",
          "Bondsrepubliek Duitsland",
          "Bosnië-Herzegovina",
          "Botswana",
          "Brazilië",
          "Brits Antarctisch Territorium",
          "Brits Indische Oceaanterritorium",
          "Britse Maagdeneilanden",
          "Brunei",
          "Bulgarije",
          "Burkina Faso",
          "Burundi",
          "Cambodja",
          "Canada",
          "Canarische Eilanden",
          "Caymaneilanden",
          "Centraal-Afrikaanse Republiek",
          "Chili",
          "China",
          "Christmaseiland",
          "Cocoseilanden",
          "Colombia",
          "Comoren",
          "Congo",
          "Cookeilanden",
          "Costa Rica",
          "Cuba",
          "Curaçao",
          "Cyprus",
          "Democratische Republiek Congo",
          "Denemarken",
          "Djibouti",
          "Dominica",
          "Dominicaanse Republiek",
          "Ecuador",
          "Egypte",
          "El Salvador",
          "Equatoriaal-Guinea",
          "Eritrea",
          "Estland",
          "Eswatini",
          "Ethiopië",
          "Faeröer",
          "Falklandeilanden",
          "Fiji",
          "Filipijnen",
          "Finland",
          "Frankrijk",
          "Frans-Guyana",
          "Frans-Polynesië",
          "Gabon",
          "Gambia",
          "Gazastrook en Westelijke Jordaanoever",
          "Georgië",
          "Ghana",
          "Gibraltar",
          "Grenada",
          "Griekenland",
          "Groenland",
          "Guadeloupe",
          "Guam",
          "Guatemala",
          "Guinee",
          "Guinee-Bissau",
          "Guyana",
          "Haïti",
          "Honduras",
          "Hongarije",
          "Hongkong",
          "Ierland",
          "IJsland",
          "India",
          "Indonesië",
          "Irak",
          "Iran",
          "Israël",
          "Italië",
          "Ivoorkust",
          "Jamaica",
          "Japan",
          "Jemen",
          "Johnston",
          "Jordanië",
          "Kaapverdië",
          "Kameroen",
          "Kanaaleilanden",
          "Kazachstan",
          "Kenya",
          "Kirgizië",
          "Kiribati",
          "Koeweit",
          "Kosovo",
          "Kroatië",
          "Laos",
          "Lesotho",
          "Letland",
          "Libanon",
          "Liberia",
          "Libië",
          "Liechtenstein",
          "Litouwen",
          "Luxemburg",
          "Macau",
          "Madagaskar",
          "Madeira-eilanden",
          "Malawi",
          "Maldiven",
          "Maleisië",
          "Mali",
          "Malta",
          "Man",
          "Marianen",
          "Marokko",
          "Marshalleilanden",
          "Martinique",
          "Mauritanië",
          "Mauritius",
          "Mayotte",
          "Mexico",
          "Micronesia",
          "Midway",
          "Moldavië",
          "Monaco",
          "Mongolië",
          "Montenegro",
          "Montserrat",
          "Mozambique",
          "Myanmar",
          "Namibië",
          "Nauru",
          "Nepal",
          "Nicaragua",
          "Nieuw-Caledonië",
          "Nieuw-Zeeland",
          "Niger",
          "Nigeria",
          "Niue",
          "Noord-Korea",
          "Noorwegen",
          "Norfolk",
          "Oekraïne",
          "Oezbekistan",
          "Oman",
          "Oostenrijk",
          "Pakistan",
          "Palau",
          "Panama",
          "Papoea-Nieuw-Guinea",
          "Paraguay",
          "Peru",
          "Pitcairneilanden",
          "Polen",
          "Portugal",
          "Puerto Rico",
          "Qatar",
          "Republiek Noord-Macedonië",
          "Réunion",
          "Roemenië",
          "Rusland",
          "Rwanda",
          "Saint Kitts en Nevis",
          "Saint Lucia",
          "Saint Pierre en Miquelon",
          "Saint Vincent en de Grenadines",
          "Salomonseilanden",
          "Samoa",
          "San Marino",
          "São Tomé en Principe",
          "Saoedi-Arabië",
          "Senegal",
          "Servië",
          "Seychellen",
          "Sierra Leone",
          "Singapore",
          "Sint Maarten",
          "Sint-Helena",
          "Slovenië",
          "Slowakije",
          "Soedan",
          "Somalië",
          "Spanje",
          "Sri Lanka",
          "Suriname",
          "Svalbardeilanden",
          "Syrië",
          "Tadzjikistan",
          "Taiwan",
          "Tanzania",
          "Thailand",
          "Timor Leste",
          "Togo",
          "Tokelau",
          "Tonga",
          "Trinidad en Tobago",
          "Tristan Da Cunha",
          "Tsjaad",
          "Tsjechië",
          "Tunesië",
          "Turkije",
          "Turkmenistan",
          "Turks- en Caicoseilanden",
          "Tuvalu",
          "Uganda",
          "Uruguay",
          "Vanuatu",
          "Vaticaanstad",
          "Venezuela",
          "Verenigd Koninkrijk",
          "Verenigde Arabische Emiraten",
          "Verenigde Staten van Amerika",
          "Vietnam",
          "Wake",
          "Wallis en Futuna",
          "Westelijke Sahara",
          "Zambia",
          "Zimbabwe",
          "Zuid-Afrika",
          "Zuid-Korea",
          "Zuid-Soedan",
          "Zweden",
          "Zwitserland"
        ]
      }
    },
    {
      "name": "correspondenceAddress",
      "label": "Correspondence address (not required)",
      "type": "string",
      "required": false,
      "classification": "pii",
      "description": "Complete only to receive election mail (e.g. voting documents) at a different address than residentialAddress.",
      "sourceRef": "formulieren.denhaag.nl wizard, step 'Uw gegevens' — 'Postadres (niet verplicht)... Alleen invullen als u post over de verkiezingen... op een ander adres ontvangen wilt', field data[StraatCorrespondentieAdres]",
      "validation": {
        "maxLength": 250
      }
    },
    {
      "name": "correspondenceAddressLine2",
      "label": "Correspondence address line 2 (not required)",
      "type": "string",
      "required": false,
      "classification": "pii",
      "sourceRef": "formulieren.denhaag.nl wizard, step 'Uw gegevens' — 'Adresregel 2 (niet verplicht)' (correspondence block), field data[StraatExtraRegelCorrespondentieAdres1]",
      "validation": {
        "maxLength": 250
      }
    },
    {
      "name": "correspondenceAddressLine3",
      "label": "Correspondence address line 3 (not required)",
      "type": "string",
      "required": false,
      "classification": "pii",
      "sourceRef": "formulieren.denhaag.nl wizard, step 'Uw gegevens' — 'Adresregel 3 (niet verplicht)' (correspondence block), field data[StraatExtraRegelCorrespondentieAdres2]",
      "validation": {
        "maxLength": 250
      }
    },
    {
      "name": "correspondenceCountry",
      "label": "Correspondence address country (not required)",
      "type": "enum",
      "required": false,
      "sourceRef": "formulieren.denhaag.nl wizard, step 'Uw gegevens' — 'Land (niet verplicht)' (correspondence block), field data[LandCorrespondentieAdres]",
      "validation": {
        "enum": [
          "Afghanistan",
          "Albanië",
          "Algerije",
          "Amerikaanse Maagdeneilanden",
          "Amerikaans-Samoa",
          "Andorra",
          "Angola",
          "Anguilla",
          "Antigua en Barbuda",
          "Argentinië",
          "Armenië",
          "Aruba",
          "Ascension",
          "Australië",
          "Azerbeidzjan",
          "Azoren",
          "Bahama's",
          "Bahrein",
          "Bangladesh",
          "Barbados",
          "Belarus",
          "België",
          "Belize",
          "Benin",
          "Bermuda",
          "Bhutan",
          "Bolivia",
          "Bondsrepubliek Duitsland",
          "Bosnië-Herzegovina",
          "Botswana",
          "Brazilië",
          "Brits Antarctisch Territorium",
          "Brits Indische Oceaanterritorium",
          "Britse Maagdeneilanden",
          "Brunei",
          "Bulgarije",
          "Burkina Faso",
          "Burundi",
          "Cambodja",
          "Canada",
          "Canarische Eilanden",
          "Caymaneilanden",
          "Centraal-Afrikaanse Republiek",
          "Chili",
          "China",
          "Christmaseiland",
          "Cocoseilanden",
          "Colombia",
          "Comoren",
          "Congo",
          "Cookeilanden",
          "Costa Rica",
          "Cuba",
          "Curaçao",
          "Cyprus",
          "Democratische Republiek Congo",
          "Denemarken",
          "Djibouti",
          "Dominica",
          "Dominicaanse Republiek",
          "Ecuador",
          "Egypte",
          "El Salvador",
          "Equatoriaal-Guinea",
          "Eritrea",
          "Estland",
          "Eswatini",
          "Ethiopië",
          "Faeröer",
          "Falklandeilanden",
          "Fiji",
          "Filipijnen",
          "Finland",
          "Frankrijk",
          "Frans-Guyana",
          "Frans-Polynesië",
          "Gabon",
          "Gambia",
          "Gazastrook en Westelijke Jordaanoever",
          "Georgië",
          "Ghana",
          "Gibraltar",
          "Grenada",
          "Griekenland",
          "Groenland",
          "Guadeloupe",
          "Guam",
          "Guatemala",
          "Guinee",
          "Guinee-Bissau",
          "Guyana",
          "Haïti",
          "Honduras",
          "Hongarije",
          "Hongkong",
          "Ierland",
          "IJsland",
          "India",
          "Indonesië",
          "Irak",
          "Iran",
          "Israël",
          "Italië",
          "Ivoorkust",
          "Jamaica",
          "Japan",
          "Jemen",
          "Johnston",
          "Jordanië",
          "Kaapverdië",
          "Kameroen",
          "Kanaaleilanden",
          "Kazachstan",
          "Kenya",
          "Kirgizië",
          "Kiribati",
          "Koeweit",
          "Kosovo",
          "Kroatië",
          "Laos",
          "Lesotho",
          "Letland",
          "Libanon",
          "Liberia",
          "Libië",
          "Liechtenstein",
          "Litouwen",
          "Luxemburg",
          "Macau",
          "Madagaskar",
          "Madeira-eilanden",
          "Malawi",
          "Maldiven",
          "Maleisië",
          "Mali",
          "Malta",
          "Man",
          "Marianen",
          "Marokko",
          "Marshalleilanden",
          "Martinique",
          "Mauritanië",
          "Mauritius",
          "Mayotte",
          "Mexico",
          "Micronesia",
          "Midway",
          "Moldavië",
          "Monaco",
          "Mongolië",
          "Montenegro",
          "Montserrat",
          "Mozambique",
          "Myanmar",
          "Namibië",
          "Nauru",
          "Nepal",
          "Nicaragua",
          "Nieuw-Caledonië",
          "Nieuw-Zeeland",
          "Niger",
          "Nigeria",
          "Niue",
          "Noord-Korea",
          "Noorwegen",
          "Norfolk",
          "Oekraïne",
          "Oezbekistan",
          "Oman",
          "Oostenrijk",
          "Pakistan",
          "Palau",
          "Panama",
          "Papoea-Nieuw-Guinea",
          "Paraguay",
          "Peru",
          "Pitcairneilanden",
          "Polen",
          "Portugal",
          "Puerto Rico",
          "Qatar",
          "Republiek Noord-Macedonië",
          "Réunion",
          "Roemenië",
          "Rusland",
          "Rwanda",
          "Saint Kitts en Nevis",
          "Saint Lucia",
          "Saint Pierre en Miquelon",
          "Saint Vincent en de Grenadines",
          "Salomonseilanden",
          "Samoa",
          "San Marino",
          "São Tomé en Principe",
          "Saoedi-Arabië",
          "Senegal",
          "Servië",
          "Seychellen",
          "Sierra Leone",
          "Singapore",
          "Sint Maarten",
          "Sint-Helena",
          "Slovenië",
          "Slowakije",
          "Soedan",
          "Somalië",
          "Spanje",
          "Sri Lanka",
          "Suriname",
          "Svalbardeilanden",
          "Syrië",
          "Tadzjikistan",
          "Taiwan",
          "Tanzania",
          "Thailand",
          "Timor Leste",
          "Togo",
          "Tokelau",
          "Tonga",
          "Trinidad en Tobago",
          "Tristan Da Cunha",
          "Tsjaad",
          "Tsjechië",
          "Tunesië",
          "Turkije",
          "Turkmenistan",
          "Turks- en Caicoseilanden",
          "Tuvalu",
          "Uganda",
          "Uruguay",
          "Vanuatu",
          "Vaticaanstad",
          "Venezuela",
          "Verenigd Koninkrijk",
          "Verenigde Arabische Emiraten",
          "Verenigde Staten van Amerika",
          "Vietnam",
          "Wake",
          "Wallis en Futuna",
          "Westelijke Sahara",
          "Zambia",
          "Zimbabwe",
          "Zuid-Afrika",
          "Zuid-Korea",
          "Zuid-Soedan",
          "Zweden",
          "Zwitserland"
        ]
      }
    },
    {
      "name": "nationalityProofType",
      "label": "As proof of my Dutch nationality, I am enclosing one of the following documents with my registration request",
      "type": "enum",
      "required": true,
      "description": "Determines which identity document identityDocumentCopy must be a copy of. The document must be valid at the time of the registration request.",
      "sourceRef": "formulieren.denhaag.nl wizard, step 'Uw nationaliteit' — radio group data[vraag][...-e9utlq]",
      "validation": {
        "enum": [
          "KOPIE_NEDERLANDS_ID",
          "KOPIE_ANDER_ID"
        ]
      }
    },
    {
      "name": "europeanParliamentDeclaration",
      "label": "I declare that I live in another European Union member state and that I have not registered as a voter there, and will not take part in the European Parliament election there",
      "type": "boolean",
      "required": false,
      "requiredWhen": {
        "field": "requestEuropeanParliamentDocuments",
        "equals": true
      },
      "fieldRole": "eligibility",
      "eligibleValues": [
        true
      ],
      "description": "Required only when requestEuropeanParliamentDocuments is true and the applicant lives in another EU member state, per this field's own heading ('Verklaring verkiezing Europees Parlement'); a voter may not be registered to vote in the European Parliament election in both the Netherlands and their EU country of residence at once. Confirmed the field becomes mandatory once requestEuropeanParliamentDocuments is checked; the negative case (unchecked, non-EU country of residence) was not independently retested this cycle.",
      "sourceRef": "formulieren.denhaag.nl wizard, step 'Uw nationaliteit' — checkbox data[epverklaring], id egt1cm-epverklaring"
    }
  ],
  "documents": [
    {
      "id": "identityDocumentCopy",
      "label": "Copy of a valid Dutch passport or Dutch identity card (or, per nationalityProofType, a valid BES/Aruba/Curaçao/Sint Maarten identity card showing Dutch nationality) — front and back",
      "category": "identity-document",
      "required": true,
      "belongsTo": "applicant",
      "acceptedTypes": [
        "txt",
        "jpg",
        "pdf",
        "png",
        "doc",
        "docx",
        "odt"
      ],
      "constraints": {
        "maxBytes": 10485760,
        "mediaTypes": [
          "text/plain",
          "image/jpeg",
          "application/pdf",
          "image/png",
          "application/msword",
          "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
          "application/vnd.oasis.opendocument.text"
        ]
      },
      "sourceRef": "formulieren.denhaag.nl wizard, step 'Uw nationaliteit' — 'Upload hier een kopie/scan van uw geldige identiteitsdocument', upload widget id ewmy39l-uploadId; 'De maximale bestandsgrootte is 10MB... U kunt maximaal 20 MB aan bestanden toevoegen. Wij ondersteunen de volgende bestandsformaten: txt, jpg, pdf, png, doc, docx en Open Office'",
      "handling": "Must be valid at the time of the registration request. The form's own upload widget additionally caps the combined size of all files attached to this one upload field at 20MB, on top of the 10MB single-file limit already captured in constraints.maxBytes — GSP-0007's fileValidation shape has no aggregate-across-files concept, so the 20MB total is not separately machine-encoded here."
    }
  ],
  "steps": [
    {
      "id": "elections",
      "title": "Verkiezingen (Elections)",
      "fields": [
        "requestTweedeKamerDocuments",
        "requestEuropeanParliamentDocuments",
        "requestKiescollegeDocuments"
      ],
      "next": "yourDetails"
    },
    {
      "id": "yourDetails",
      "title": "Uw gegevens (Your details)",
      "fields": [
        "firstNames",
        "namePrefix",
        "lastName",
        "bsn",
        "dateOfBirth",
        "phoneNumber",
        "email",
        "residentialAddress",
        "residentialAddressLine2",
        "residentialAddressLine3",
        "countryOfResidence",
        "correspondenceAddress",
        "correspondenceAddressLine2",
        "correspondenceAddressLine3",
        "correspondenceCountry"
      ],
      "next": "yourNationality"
    },
    {
      "id": "yourNationality",
      "title": "Uw nationaliteit (Your nationality)",
      "fields": [
        "nationalityProofType",
        "europeanParliamentDeclaration"
      ]
    }
  ]
}
