{
  "$schema": "https://govschema.org/spec/v0.3/govschema.schema.json",
  "govschemaVersion": "0.3.0",
  "id": "ee/vm/long-stay-visa-application",
  "version": "1.0.0",
  "title": "Estonia Long-Stay (National, Category D) Visa Application",
  "description": "Give the details for an Estonian long-stay (national, category D) visa application: the visa a non-EU/EEA/Swiss national needs before travelling to Estonia for a stay exceeding the 90-day Schengen short-stay limit (up to 365 days within 12 consecutive months), submitted at an Estonian foreign representation or a Police and Border Guard Board (PBGB) service point. This document models the Ministry of Foreign Affairs' (Valisministeerium, VM) own 13-page online pre-application wizard (eelviisataotlus.vm.ee), which the applicant fills in, then prints, signs, and submits with supporting documents; the wizard itself does not accept the final submission online. Although this form's early identity/travel-document items follow the same Schengen-harmonized structure as other EU member states' national long-stay visa forms already in this registry, it diverges sharply after that: an EU/EEA/Swiss-citizen-or-UK-Withdrawal-Agreement-beneficiary close-relative section (with the relative's own passport/ID and date-of-birth details) that Germany's and the Czech Republic's own forms have no counterpart for; a mandatory current-or-previous employment-or-education history block with a full structured employer/school address (street/house/apartment/postal code/city/county); a two-column (applicant vs. sponsor) means-of-support checkbox matrix (cash, credit card, accommodation provided/prepaid, transport prepaid, salary, other) distinct from both Germany's free-text subsistence field and the Czech Republic's single-column funding checkboxes; a host organization/person section with its own registration code and a named contact person; and a distinct 8-category purpose-of-journey taxonomy (business, medical reasons, study, short-term employment in Estonia, visiting family or friends, remote working, startup entrepreneurship, other) with no counterpart in Germany's 6-category or the Czech Republic's 11-category lists. It does not model the Schengen (short-stay) visa form, which this registry already covers via fr/france-visas/schengen-visa-application. It does not submit the application or generate the printable PDF; the live wizard is always authoritative. See VERIFICATION.md for the full field-by-field duplicate-vs-distinct comparison against the German template and every disclosed scope decision.",
  "status": "draft",
  "jurisdiction": {
    "country": "EE",
    "level": "national"
  },
  "authority": {
    "name": "Valisministeerium (Ministry of Foreign Affairs)",
    "abbreviation": "VM",
    "url": "https://vm.ee"
  },
  "process": {
    "type": "application",
    "language": "en"
  },
  "source": {
    "url": "https://eelviisataotlus.vm.ee/d/",
    "retrievedAt": "2026-07-09",
    "documentRef": "Long-stay visa application — Valisministeerium's 13-page online pre-application wizard (eelviisataotlus.vm.ee/d/), cross-referenced with the Ministry's own overview page (vm.ee/en/consular-visa-and-travel-information/visa-information/application-long-stay-d-visa) for the required-documents checklist and the purpose-of-stay financial-means table"
  },
  "verification": {
    "method": "manual-source-review-v1",
    "lastVerifiedAt": "2026-07-09",
    "verifiedBy": "GovSchema Engineering (Standards Engineer)",
    "nextReviewBy": "2027-01-09",
    "notes": "GOV-1970: GovSchema Standard Research cycle, closing Estonia's Visa vertical gap (its last remaining of 6; Passport/DMV/Business Formation/Taxes/National ID were already closed). vm.ee's own overview page was fetched live (HTTP 200, no gate) and confirms the application is generated via the eelviisataotlus.vm.ee/d/ online wizard, not a static PDF. Page 1/13 (email + CAPTCHA image) is a genuine bot-mitigation gate reachable by plain curl but not completable computationally; this cycle used the agent-browser skill (a real headless-browser session via Playwright, reading the CAPTCHA image directly) to solve the CAPTCHA and independently walk the entire wizard live, page by page, with mock data, capturing the real field names, labels, enum option text, and cross-field validation error messages for all 13 pages (not just page 1) — a stronger sourcing basis than this registry's usual single-fetch PDF pattern. A secondary source (movemytalent.com, a relocation firm's field-by-field guide covering the same 13 pages for a Wise Payments employment-purpose applicant) was also fetched and cross-checked; its wording for the two purpose-of-journey options it covers ('Short-term employment' / 'Visiting family or friends') and its page-by-page structure matched the live wizard, corroborating it as reliable for the purpose-conditional host-person branch (page 9) that this cycle's own live walkthrough exercised only via the alternate host-company branch (having selected the 'Business' purpose). Compared field-by-field against de/auswaertiges-amt/national-visa-application (the EU-harmonized template Poland's, Portugal's, and Switzerland's own national visa forms were found to duplicate): Estonia's form shares only the early identity/travel-document item shape with Germany's, then diverges with an EU/EEA/Swiss/UK-Withdrawal-Agreement close-relative section, a mandatory employment/education-history block with a full structured employer address, a two-column applicant/sponsor means-of-support checkbox matrix, a host organization/person section with its own registration code and contact person, and its own 8-category purpose-of-journey taxonomy sharing no labels with Germany's 6 categories or the Czech Republic's 11 — genuinely distinct, not a duplicate; authored as its own schema. Modelled 98 fields (10 documents[] entries) across 11 steps — the address/contact blocks are broken into several structured sub-fields (country/street/house number/apartment number/postal code/city/county-region) each, mirroring the wizard's own structured address inputs, which is why the field count is higher than this registry's usual single-free-text-line address treatment. Every repeating-row/multi-select narrowing (other citizenships, previous Schengen visas/residence permits) and every purpose-conditional scope decision (host company vs. host person; the blog-only, not independently field-name-verified, insurance-end-date field omitted) is disclosed in VERIFICATION.md, along with the exact live-walkthrough method (a persistent headless Chrome reached via `--remote-debugging-port` and Playwright's `connectOverCDP`, since the wizard's session state does not survive a client disconnect through Playwright's own multiplexed `launchServer`/`connect` protocol)."
  },
  "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-09"
  },
  "license": "CC-BY-4.0",
  "fields": [
    {
      "name": "surname",
      "label": "Surname(s) (family name(s))",
      "type": "string",
      "required": true,
      "classification": "pii",
      "sourceRef": "Long-stay visa application wizard — page 2/13",
      "validation": { "maxLength": 100 }
    },
    {
      "name": "surnameAbsentInTravelDocument",
      "label": "Surname is absent in travel document",
      "type": "boolean",
      "required": false,
      "sourceRef": "Long-stay visa application wizard — page 2/13"
    },
    {
      "name": "formerNames",
      "label": "Former names",
      "type": "string",
      "required": true,
      "classification": "pii",
      "description": "Observed live as a required field (no 'not applicable' option is offered alongside it, unlike the surname/first-name 'absent in travel document' checkboxes); an applicant with no former names may need to enter a placeholder such as a dash. See VERIFICATION.md.",
      "sourceRef": "Long-stay visa application wizard — page 2/13",
      "validation": { "maxLength": 200 }
    },
    {
      "name": "firstNames",
      "label": "First names (given names)",
      "type": "string",
      "required": true,
      "classification": "pii",
      "sourceRef": "Long-stay visa application wizard — page 2/13",
      "validation": { "maxLength": 100 }
    },
    {
      "name": "firstNameAbsentInTravelDocument",
      "label": "First name is absent in travel document",
      "type": "boolean",
      "required": false,
      "sourceRef": "Long-stay visa application wizard — page 2/13"
    },
    {
      "name": "patronym",
      "label": "Patronym (if it appears on the travel document)",
      "type": "string",
      "required": false,
      "classification": "pii",
      "sourceRef": "Long-stay visa application wizard — page 2/13",
      "validation": { "maxLength": 100 }
    },
    {
      "name": "dateOfBirth",
      "label": "Date of birth",
      "type": "date",
      "required": true,
      "classification": "sensitive-pii",
      "sourceRef": "Long-stay visa application wizard — page 2/13"
    },
    {
      "name": "countryOfBirth",
      "label": "Country of birth",
      "type": "string",
      "required": true,
      "description": "Selected from the wizard's own alphabetical country list (e.g. AFGHANISTAN, ALBANIA, ALGERIA ... AUSTRIA); modelled as free text since the full list was not exhaustively enumerated. See VERIFICATION.md.",
      "sourceRef": "Long-stay visa application wizard — page 2/13",
      "validation": { "maxLength": 100 }
    },
    {
      "name": "cityOfBirth",
      "label": "City of birth",
      "type": "string",
      "required": true,
      "sourceRef": "Long-stay visa application wizard — page 2/13",
      "validation": { "maxLength": 200 }
    },
    {
      "name": "nationality",
      "label": "Nationality",
      "type": "string",
      "required": true,
      "sourceRef": "Long-stay visa application wizard — page 3/13",
      "validation": { "maxLength": 100 }
    },
    {
      "name": "nationalityAtBirth",
      "label": "Nationality at birth, if different",
      "type": "string",
      "required": false,
      "sourceRef": "Long-stay visa application wizard — page 3/13",
      "validation": { "maxLength": 100 }
    },
    {
      "name": "otherCitizenships",
      "label": "Other citizenships",
      "type": "string",
      "required": false,
      "description": "The live wizard offers a multi-select list of all countries; per GSP-0009 (no array/repeating-field type in GovSchema v0.3), this is collapsed into a single free-text field (comma-separated if more than one applies). See VERIFICATION.md.",
      "sourceRef": "Long-stay visa application wizard — page 3/13",
      "validation": { "maxLength": 300 }
    },
    {
      "name": "sex",
      "label": "Sex",
      "type": "enum",
      "required": true,
      "validation": { "enum": ["male", "female"] },
      "sourceRef": "Long-stay visa application wizard — page 3/13"
    },
    {
      "name": "maritalStatus",
      "label": "Marital status",
      "type": "enum",
      "required": true,
      "validation": {
        "enum": ["married", "single", "divorced", "widowed", "separated", "registered-partnership", "other"]
      },
      "description": "The wizard's own radio list: Married, Single, Divorced, Widow(er), Separated, Registered Partnership, Other (please specify).",
      "sourceRef": "Long-stay visa application wizard — page 3/13"
    },
    {
      "name": "maritalStatusOtherDetails",
      "label": "Marital status — other (please specify)",
      "type": "string",
      "required": false,
      "requiredWhen": { "field": "maritalStatus", "equals": "other" },
      "sourceRef": "Long-stay visa application wizard — page 3/13",
      "validation": { "maxLength": 300 }
    },
    {
      "name": "travelDocumentType",
      "label": "Type of travel document",
      "type": "enum",
      "required": true,
      "validation": {
        "enum": ["ordinary-passport", "diplomatic-passport", "service-passport", "official-passport", "special-passport", "other"]
      },
      "description": "The wizard's own radio list: Ordinary passport, Diplomatic passport, Service passport, Official passport, Special passport, Other travel document (please specify).",
      "sourceRef": "Long-stay visa application wizard — page 4/13"
    },
    {
      "name": "travelDocumentOtherDetails",
      "label": "Other travel document (please specify)",
      "type": "string",
      "required": false,
      "requiredWhen": { "field": "travelDocumentType", "equals": "other" },
      "sourceRef": "Long-stay visa application wizard — page 4/13",
      "validation": { "maxLength": 300 }
    },
    {
      "name": "travelDocumentNumber",
      "label": "Number of travel document",
      "type": "string",
      "required": true,
      "classification": "sensitive-pii",
      "sourceRef": "Long-stay visa application wizard — page 4/13",
      "validation": { "maxLength": 30 }
    },
    {
      "name": "travelDocumentIssuedByCountry",
      "label": "Issued by — country",
      "type": "string",
      "required": true,
      "sourceRef": "Long-stay visa application wizard — page 4/13",
      "validation": { "maxLength": 100 }
    },
    {
      "name": "travelDocumentIssuedByAuthority",
      "label": "Issued by — authority",
      "type": "string",
      "required": true,
      "sourceRef": "Long-stay visa application wizard — page 4/13",
      "validation": { "maxLength": 200 }
    },
    {
      "name": "travelDocumentDateOfIssue",
      "label": "Date of issue",
      "type": "date",
      "required": true,
      "sourceRef": "Long-stay visa application wizard — page 4/13"
    },
    {
      "name": "travelDocumentValidUntil",
      "label": "Valid until",
      "type": "date",
      "required": true,
      "sourceRef": "Long-stay visa application wizard — page 4/13"
    },
    {
      "name": "euRelativeAccompanying",
      "label": "Do you join or travel with your family member who is an EU (Estonia excluded), EEA or Swiss Confederation citizen or a UK national who is a beneficiary of the EU-UK Withdrawal Agreement?",
      "type": "boolean",
      "required": true,
      "description": "A family member of a citizen of the EU is defined per Estonia's own Citizen of European Union Act; that Act does not apply to family members of Estonian citizens. This section has no counterpart in de/auswaertiges-amt/national-visa-application or cz/mzv/zadost-o-udeleni-dlouhodobeho-viza.",
      "sourceRef": "Long-stay visa application wizard — page 5/13"
    },
    {
      "name": "euRelativeRelationship",
      "label": "I am EU, EEA, CH, UK citizen's:",
      "type": "enum",
      "required": false,
      "requiredWhen": { "field": "euRelativeAccompanying", "equals": true },
      "validation": {
        "enum": ["spouse", "child", "dependent-ascendant", "grandchild", "registered-partner"]
      },
      "sourceRef": "Long-stay visa application wizard — page 5/13"
    },
    {
      "name": "euRelativeFamilyName",
      "label": "Personal data of the EU (Estonia excluded), EEA or UK citizen — family name",
      "type": "string",
      "required": false,
      "classification": "pii",
      "requiredWhen": { "field": "euRelativeAccompanying", "equals": true },
      "sourceRef": "Long-stay visa application wizard — page 5/13",
      "validation": { "maxLength": 100 }
    },
    {
      "name": "euRelativeFirstName",
      "label": "Personal data of the EU (Estonia excluded), EEA or UK citizen — first name",
      "type": "string",
      "required": false,
      "classification": "pii",
      "requiredWhen": { "field": "euRelativeAccompanying", "equals": true },
      "sourceRef": "Long-stay visa application wizard — page 5/13",
      "validation": { "maxLength": 100 }
    },
    {
      "name": "euRelativeDateOfBirth",
      "label": "Personal data of the EU (Estonia excluded), EEA or UK citizen — date of birth",
      "type": "date",
      "required": false,
      "classification": "sensitive-pii",
      "requiredWhen": { "field": "euRelativeAccompanying", "equals": true },
      "sourceRef": "Long-stay visa application wizard — page 5/13"
    },
    {
      "name": "euRelativeNationality",
      "label": "Personal data of the EU (Estonia excluded), EEA or UK citizen — nationality",
      "type": "string",
      "required": false,
      "classification": "pii",
      "requiredWhen": { "field": "euRelativeAccompanying", "equals": true },
      "sourceRef": "Long-stay visa application wizard — page 5/13",
      "validation": { "maxLength": 100 }
    },
    {
      "name": "euRelativeTravelDocumentNumber",
      "label": "Personal data of the EU (Estonia excluded), EEA or UK citizen — number of travel document or ID-card",
      "type": "string",
      "required": false,
      "classification": "sensitive-pii",
      "requiredWhen": { "field": "euRelativeAccompanying", "equals": true },
      "sourceRef": "Long-stay visa application wizard — page 5/13",
      "validation": { "maxLength": 30 }
    },
    {
      "name": "profession",
      "label": "Profession",
      "type": "string",
      "required": true,
      "description": "Selected from the wizard's own standard occupation list (sample confirmed live: Administrative/technical/service staff, Architect, Artist, Banker, Businessperson/salesman, Chemist/chemical engineer, Civil Servant, Clergyman/religious figure, Company executive, Diplomat, Diplomat's domestic staff, Driver/lorry driver, Educational personnel, Electronics expert, and others); modelled as free text since the full list was not exhaustively enumerated. See VERIFICATION.md.",
      "sourceRef": "Long-stay visa application wizard — page 6/13",
      "validation": { "maxLength": 200 }
    },
    {
      "name": "currentOccupationInResidenceCountry",
      "label": "Current occupation in residence country",
      "type": "string",
      "required": true,
      "description": "Covers current or, if not currently employed, the applicant's most recent previous employment or education.",
      "sourceRef": "Long-stay visa application wizard — page 6/13",
      "validation": { "maxLength": 300 }
    },
    {
      "name": "employerOrSchoolName",
      "label": "Employer or school",
      "type": "string",
      "required": true,
      "sourceRef": "Long-stay visa application wizard — page 6/13",
      "validation": { "maxLength": 300 }
    },
    {
      "name": "employerOrSchoolCountry",
      "label": "Employer's or school's address — country",
      "type": "string",
      "required": true,
      "sourceRef": "Long-stay visa application wizard — page 6/13",
      "validation": { "maxLength": 100 }
    },
    {
      "name": "employerOrSchoolStreet",
      "label": "Employer's or school's address — street",
      "type": "string",
      "required": true,
      "sourceRef": "Long-stay visa application wizard — page 6/13",
      "validation": { "maxLength": 200 }
    },
    {
      "name": "employerOrSchoolHouseNumber",
      "label": "Employer's or school's address — house number",
      "type": "string",
      "required": true,
      "sourceRef": "Long-stay visa application wizard — page 6/13",
      "validation": { "maxLength": 20 }
    },
    {
      "name": "employerOrSchoolApartmentNumber",
      "label": "Employer's or school's address — apartment number",
      "type": "string",
      "required": false,
      "sourceRef": "Long-stay visa application wizard — page 6/13",
      "validation": { "maxLength": 20 }
    },
    {
      "name": "employerOrSchoolPostalCode",
      "label": "Employer's or school's address — postal code",
      "type": "string",
      "required": true,
      "sourceRef": "Long-stay visa application wizard — page 6/13",
      "validation": { "maxLength": 20 }
    },
    {
      "name": "employerOrSchoolCity",
      "label": "Employer's or school's address — city",
      "type": "string",
      "required": true,
      "sourceRef": "Long-stay visa application wizard — page 6/13",
      "validation": { "maxLength": 200 }
    },
    {
      "name": "employerOrSchoolCountyRegion",
      "label": "Employer's or school's address — county/region",
      "type": "string",
      "required": true,
      "sourceRef": "Long-stay visa application wizard — page 6/13",
      "validation": { "maxLength": 200 }
    },
    {
      "name": "employerOrSchoolPhone",
      "label": "Employer's or school's telephone number",
      "type": "string",
      "required": true,
      "description": "The live wizard rejected a '+' prefix on this field ('Forbidden symbols in text fields'); digits only.",
      "sourceRef": "Long-stay visa application wizard — page 6/13",
      "validation": { "maxLength": 30 }
    },
    {
      "name": "intendedStayDurationDays",
      "label": "Duration of the intended stay (number of days)",
      "type": "integer",
      "required": true,
      "validation": { "minimum": 1, "maximum": 365 },
      "sourceRef": "Long-stay visa application wizard — page 7/13"
    },
    {
      "name": "visaStartDate",
      "label": "Desirable initial date of a visa",
      "type": "date",
      "required": true,
      "sourceRef": "Long-stay visa application wizard — page 7/13"
    },
    {
      "name": "visaEndDate",
      "label": "Expiry date of a visa",
      "type": "date",
      "required": true,
      "description": "The live wizard rejects a value more than 12 months (1 year) after visaStartDate: 'The period of validity of a D-visa cannot exceed 12 months (1 year).' Not separately modelled as crossFieldValidation since GovSchema v0.3's comparison operators do not express a bounded-interval (date-plus-duration) check; see VERIFICATION.md.",
      "sourceRef": "Long-stay visa application wizard — page 7/13"
    },
    {
      "name": "purposeOfJourney",
      "label": "Purpose of the journey",
      "type": "enum",
      "required": true,
      "validation": {
        "enum": ["business", "medical-reasons", "study", "short-term-employment-in-estonia", "visiting-family-or-friends", "remote-working", "startup-entrepreneurship", "other"]
      },
      "description": "The wizard's own radio list, confirmed live: Business, Medical reasons, Study, Short term employment in Estonia, Visiting family or friends, Remote working, Startup enterpreneurship [sic, source's own spelling], Other (please specify). Shares no labels with de/auswaertiges-amt/national-visa-application's 6-category list (Employment/Study/Au pair/Language course/Family reunion/Other) or cz/mzv/zadost-o-udeleni-dlouhodobeho-viza's 11-category list.",
      "sourceRef": "Long-stay visa application wizard — page 8/13"
    },
    {
      "name": "purposeOfJourneyOtherDetails",
      "label": "Purpose of the journey — other (please specify)",
      "type": "string",
      "required": false,
      "requiredWhen": { "field": "purposeOfJourney", "equals": "other" },
      "sourceRef": "Long-stay visa application wizard — page 8/13",
      "validation": { "maxLength": 500 }
    },
    {
      "name": "hostName",
      "label": "Name and address of host company/organization — name (names)",
      "type": "string",
      "required": true,
      "description": "Modelled from the host-company/organization variant of page 9, exercised live by selecting the 'Business' purpose. Per the secondary guide, other purposes (e.g. 'Visiting family or friends') instead show a host natural-person variant (the person's full name and address, with a written and signed confirmation from the host required as a supporting document); that variant's exact field names were not independently verified live this cycle. See VERIFICATION.md.",
      "sourceRef": "Long-stay visa application wizard — page 9/13",
      "validation": { "maxLength": 300 }
    },
    {
      "name": "hostRegistrationCode",
      "label": "Name and address of host company/organization — registration code",
      "type": "string",
      "required": false,
      "sourceRef": "Long-stay visa application wizard — page 9/13",
      "validation": { "maxLength": 50 }
    },
    {
      "name": "hostAddressCountry",
      "label": "Name and address of host company/organization — full address — country",
      "type": "string",
      "required": true,
      "sourceRef": "Long-stay visa application wizard — page 9/13",
      "validation": { "maxLength": 100 }
    },
    {
      "name": "hostAddressStreet",
      "label": "Name and address of host company/organization — full address — street",
      "type": "string",
      "required": true,
      "sourceRef": "Long-stay visa application wizard — page 9/13",
      "validation": { "maxLength": 200 }
    },
    {
      "name": "hostAddressHouseNumber",
      "label": "Name and address of host company/organization — full address — house number",
      "type": "string",
      "required": true,
      "sourceRef": "Long-stay visa application wizard — page 9/13",
      "validation": { "maxLength": 20 }
    },
    {
      "name": "hostAddressApartmentNumber",
      "label": "Name and address of host company/organization — full address — apartment number",
      "type": "string",
      "required": false,
      "sourceRef": "Long-stay visa application wizard — page 9/13",
      "validation": { "maxLength": 20 }
    },
    {
      "name": "hostAddressPostalCode",
      "label": "Name and address of host company/organization — full address — postal code",
      "type": "string",
      "required": true,
      "sourceRef": "Long-stay visa application wizard — page 9/13",
      "validation": { "maxLength": 20 }
    },
    {
      "name": "hostAddressCity",
      "label": "Name and address of host company/organization — full address — city",
      "type": "string",
      "required": true,
      "sourceRef": "Long-stay visa application wizard — page 9/13",
      "validation": { "maxLength": 200 }
    },
    {
      "name": "hostAddressCountyRegion",
      "label": "Name and address of host company/organization — full address — county/region",
      "type": "string",
      "required": true,
      "sourceRef": "Long-stay visa application wizard — page 9/13",
      "validation": { "maxLength": 200 }
    },
    {
      "name": "hostPhone",
      "label": "Telephone of company/organization",
      "type": "string",
      "required": true,
      "sourceRef": "Long-stay visa application wizard — page 9/13",
      "validation": { "maxLength": 30 }
    },
    {
      "name": "hostEmail",
      "label": "E-mail of company/organization",
      "type": "string",
      "required": true,
      "sourceRef": "Long-stay visa application wizard — page 9/13",
      "validation": { "maxLength": 200 }
    },
    {
      "name": "hostContactFirstName",
      "label": "Contact person in company/organization — first name",
      "type": "string",
      "required": true,
      "classification": "pii",
      "sourceRef": "Long-stay visa application wizard — page 9/13",
      "validation": { "maxLength": 100 }
    },
    {
      "name": "hostContactFamilyName",
      "label": "Contact person in company/organization — family name",
      "type": "string",
      "required": true,
      "classification": "pii",
      "sourceRef": "Long-stay visa application wizard — page 9/13",
      "validation": { "maxLength": 100 }
    },
    {
      "name": "hostContactEmail",
      "label": "Contact person in company/organization — e-mail address",
      "type": "string",
      "required": true,
      "classification": "pii",
      "sourceRef": "Long-stay visa application wizard — page 9/13",
      "validation": { "maxLength": 200 }
    },
    {
      "name": "hostContactPhone",
      "label": "Contact person in company/organization — phone",
      "type": "string",
      "required": true,
      "classification": "pii",
      "sourceRef": "Long-stay visa application wizard — page 9/13",
      "validation": { "maxLength": 30 }
    },
    {
      "name": "placeOfStayType",
      "label": "Place of stay",
      "type": "enum",
      "required": true,
      "validation": {
        "enum": ["with-private-person", "hotel-or-accommodation-establishment", "other"]
      },
      "description": "The wizard's own dropdown: With a private person, In a hotel or an accommodation establishment, Other place of stay (indicate). Independent of purposeOfJourney.",
      "sourceRef": "Long-stay visa application wizard — page 9/13"
    },
    {
      "name": "accommodationName",
      "label": "Name of the hotel/accommodation establishment",
      "type": "string",
      "required": false,
      "requiredWhen": { "field": "placeOfStayType", "equals": "hotel-or-accommodation-establishment" },
      "sourceRef": "Long-stay visa application wizard — page 9/13",
      "validation": { "maxLength": 300 }
    },
    {
      "name": "placeOfStayAddressCountry",
      "label": "Place of stay in Estonia — full address — country",
      "type": "string",
      "required": true,
      "sourceRef": "Long-stay visa application wizard — page 9/13",
      "validation": { "maxLength": 100 }
    },
    {
      "name": "placeOfStayAddressStreet",
      "label": "Place of stay in Estonia — full address — street",
      "type": "string",
      "required": true,
      "classification": "pii",
      "sourceRef": "Long-stay visa application wizard — page 9/13",
      "validation": { "maxLength": 200 }
    },
    {
      "name": "placeOfStayAddressHouseNumber",
      "label": "Place of stay in Estonia — full address — house number",
      "type": "string",
      "required": true,
      "classification": "pii",
      "sourceRef": "Long-stay visa application wizard — page 9/13",
      "validation": { "maxLength": 20 }
    },
    {
      "name": "placeOfStayAddressPostalCode",
      "label": "Place of stay in Estonia — full address — postal code",
      "type": "string",
      "required": true,
      "classification": "pii",
      "sourceRef": "Long-stay visa application wizard — page 9/13",
      "validation": { "maxLength": 20 }
    },
    {
      "name": "placeOfStayAddressCity",
      "label": "Place of stay in Estonia — full address — city",
      "type": "string",
      "required": true,
      "classification": "pii",
      "sourceRef": "Long-stay visa application wizard — page 9/13",
      "validation": { "maxLength": 200 }
    },
    {
      "name": "placeOfStayEmail",
      "label": "Place of stay in Estonia — e-mail address",
      "type": "string",
      "required": true,
      "sourceRef": "Long-stay visa application wizard — page 9/13",
      "validation": { "maxLength": 200 }
    },
    {
      "name": "placeOfStayPhone",
      "label": "Place of stay in Estonia — phone",
      "type": "string",
      "required": true,
      "sourceRef": "Long-stay visa application wizard — page 9/13",
      "validation": { "maxLength": 30 }
    },
    {
      "name": "fundedByApplicant",
      "label": "Who is paying for your cost of travelling and for your cost of living during your stay? — by the applicant himself/herself",
      "type": "boolean",
      "required": false,
      "description": "Independently-named checkbox, not mutually exclusive with fundedBySponsor (an applicant may check both, confirmed live).",
      "sourceRef": "Long-stay visa application wizard — page 10/13"
    },
    {
      "name": "fundedBySponsor",
      "label": "Who is paying for your cost of travelling and for your cost of living during your stay? — by another sponsor (host, company, organization)",
      "type": "boolean",
      "required": false,
      "sourceRef": "Long-stay visa application wizard — page 10/13"
    },
    {
      "name": "sponsorDetails",
      "label": "State who and how, and present corresponding documentation",
      "type": "string",
      "required": false,
      "classification": "pii",
      "requiredWhen": { "field": "fundedBySponsor", "equals": true },
      "sourceRef": "Long-stay visa application wizard — page 10/13",
      "validation": { "maxLength": 1000 }
    },
    {
      "name": "hasCashApplicant",
      "label": "Means of support during your stay (applicant) — cash",
      "type": "boolean",
      "required": false,
      "sourceRef": "Long-stay visa application wizard — page 10/13"
    },
    {
      "name": "hasCreditCardApplicant",
      "label": "Means of support during your stay (applicant) — credit card",
      "type": "boolean",
      "required": false,
      "sourceRef": "Long-stay visa application wizard — page 10/13"
    },
    {
      "name": "hasAccommodationProvidedApplicant",
      "label": "Means of support during your stay (applicant) — accommodation provided or prepaid",
      "type": "boolean",
      "required": false,
      "sourceRef": "Long-stay visa application wizard — page 10/13"
    },
    {
      "name": "hasTransportPrepaidApplicant",
      "label": "Means of support during your stay (applicant) — transport prepaid",
      "type": "boolean",
      "required": false,
      "sourceRef": "Long-stay visa application wizard — page 10/13"
    },
    {
      "name": "hasSalaryApplicant",
      "label": "Means of support during your stay (applicant) — salary",
      "type": "boolean",
      "required": false,
      "sourceRef": "Long-stay visa application wizard — page 10/13"
    },
    {
      "name": "hasOtherApplicant",
      "label": "Means of support during your stay (applicant) — other",
      "type": "boolean",
      "required": false,
      "sourceRef": "Long-stay visa application wizard — page 10/13"
    },
    {
      "name": "otherApplicantMeansDetails",
      "label": "Means of support during your stay (applicant) — other (specify)",
      "type": "string",
      "required": false,
      "requiredWhen": { "field": "hasOtherApplicant", "equals": true },
      "sourceRef": "Long-stay visa application wizard — page 10/13",
      "validation": { "maxLength": 300 }
    },
    {
      "name": "hasCashSponsor",
      "label": "Means of support during your stay (sponsor) — cash",
      "type": "boolean",
      "required": false,
      "sourceRef": "Long-stay visa application wizard — page 10/13"
    },
    {
      "name": "hasCreditCardSponsor",
      "label": "Means of support during your stay (sponsor) — credit card",
      "type": "boolean",
      "required": false,
      "sourceRef": "Long-stay visa application wizard — page 10/13"
    },
    {
      "name": "hasAccommodationProvidedSponsor",
      "label": "Means of support during your stay (sponsor) — accommodation provided or prepaid",
      "type": "boolean",
      "required": false,
      "sourceRef": "Long-stay visa application wizard — page 10/13"
    },
    {
      "name": "hasTransportPrepaidSponsor",
      "label": "Means of support during your stay (sponsor) — transport prepaid",
      "type": "boolean",
      "required": false,
      "sourceRef": "Long-stay visa application wizard — page 10/13"
    },
    {
      "name": "hasSalarySponsor",
      "label": "Means of support during your stay (sponsor) — salary",
      "type": "boolean",
      "required": false,
      "sourceRef": "Long-stay visa application wizard — page 10/13"
    },
    {
      "name": "hasOtherSponsor",
      "label": "Means of support during your stay (sponsor) — other",
      "type": "boolean",
      "required": false,
      "sourceRef": "Long-stay visa application wizard — page 10/13"
    },
    {
      "name": "otherSponsorMeansDetails",
      "label": "Means of support during your stay (sponsor) — other (specify)",
      "type": "string",
      "required": false,
      "requiredWhen": { "field": "hasOtherSponsor", "equals": true },
      "sourceRef": "Long-stay visa application wizard — page 10/13",
      "validation": { "maxLength": 300 }
    },
    {
      "name": "issuedSchengenVisaOrPermitPastFiveYears",
      "label": "Have you been issued a visa or a residence permit by European Union country or Schengen member state (except Estonia) in the past five years?",
      "type": "boolean",
      "required": true,
      "sourceRef": "Long-stay visa application wizard — page 11/13"
    },
    {
      "name": "schengenVisaOrPermitDetails",
      "label": "Visas and residence permits issued by European Union country or Schengen member state (except Estonia) during the past five years and their period of validity",
      "type": "string",
      "required": false,
      "requiredWhen": { "field": "issuedSchengenVisaOrPermitPastFiveYears", "equals": true },
      "description": "The live wizard provides a repeating add-row table (type of permit, issuer country, valid from, valid until, with an 'Add' button per entry); per GSP-0009 (no array/repeating-field type in GovSchema v0.3), collapsed into one free-text field, the treatment this registry uses elsewhere for small repeating tables. See VERIFICATION.md.",
      "sourceRef": "Long-stay visa application wizard — page 11/13",
      "validation": { "maxLength": 1000 }
    },
    {
      "name": "fingerprintsCollectedPast59Months",
      "label": "Have your fingerprints been previously collected for the purpose of applying for an Estonian or a Schengen visa during the past 59 months?",
      "type": "boolean",
      "required": true,
      "sourceRef": "Long-stay visa application wizard — page 11/13"
    },
    {
      "name": "homeAddressCountry",
      "label": "Applicant's home address — country",
      "type": "string",
      "required": true,
      "classification": "pii",
      "sourceRef": "Long-stay visa application wizard — page 12/13",
      "validation": { "maxLength": 100 }
    },
    {
      "name": "homeAddressStreet",
      "label": "Applicant's home address — street",
      "type": "string",
      "required": true,
      "classification": "pii",
      "sourceRef": "Long-stay visa application wizard — page 12/13",
      "validation": { "maxLength": 200 }
    },
    {
      "name": "homeAddressHouseNumber",
      "label": "Applicant's home address — house number",
      "type": "string",
      "required": true,
      "classification": "pii",
      "sourceRef": "Long-stay visa application wizard — page 12/13",
      "validation": { "maxLength": 20 }
    },
    {
      "name": "homeAddressApartmentNumber",
      "label": "Applicant's home address — apartment number",
      "type": "string",
      "required": false,
      "classification": "pii",
      "sourceRef": "Long-stay visa application wizard — page 12/13",
      "validation": { "maxLength": 20 }
    },
    {
      "name": "homeAddressPostalCode",
      "label": "Applicant's home address — postal code",
      "type": "string",
      "required": true,
      "classification": "pii",
      "sourceRef": "Long-stay visa application wizard — page 12/13",
      "validation": { "maxLength": 20 }
    },
    {
      "name": "homeAddressCity",
      "label": "Applicant's home address — city",
      "type": "string",
      "required": true,
      "classification": "pii",
      "sourceRef": "Long-stay visa application wizard — page 12/13",
      "validation": { "maxLength": 200 }
    },
    {
      "name": "homeAddressCountyRegion",
      "label": "Applicant's home address — county/region",
      "type": "string",
      "required": true,
      "classification": "pii",
      "sourceRef": "Long-stay visa application wizard — page 12/13",
      "validation": { "maxLength": 200 }
    },
    {
      "name": "applicantPhone",
      "label": "Applicant's phone number",
      "type": "string",
      "required": true,
      "classification": "pii",
      "sourceRef": "Long-stay visa application wizard — page 12/13",
      "validation": { "maxLength": 30 }
    },
    {
      "name": "contactEmail",
      "label": "E-mail address of the applicant or their contact person for forwarding notifications regarding the application",
      "type": "string",
      "required": true,
      "classification": "pii",
      "sourceRef": "Long-stay visa application wizard — page 12/13",
      "validation": { "maxLength": 200 }
    }
  ],
  "crossFieldValidation": [
    {
      "id": "travelDocumentValidAfterIssue",
      "compare": {
        "field": "travelDocumentValidUntil",
        "operator": "greaterThan",
        "compareTo": "travelDocumentDateOfIssue"
      }
    },
    {
      "id": "visaEndAfterStart",
      "compare": {
        "field": "visaEndDate",
        "operator": "greaterThanOrEqual",
        "compareTo": "visaStartDate"
      }
    }
  ],
  "documents": [
    {
      "id": "applicantPhoto",
      "label": "One color photo (35 x 45 mm, ICAO-compliant, not older than six months)",
      "category": "supporting-evidence",
      "required": true,
      "belongsTo": "applicant",
      "sourceRef": "vm.ee — 'Documents to be submitted upon application for a long-stay visa'"
    },
    {
      "id": "travelDocumentCopy",
      "label": "Travel document issued within the previous 10 years, with at least two blank visa pages, valid at least 3 months after the visa's expiry",
      "category": "identity-document",
      "required": true,
      "belongsTo": "applicant",
      "sourceRef": "vm.ee — 'Documents to be submitted upon application for a long-stay visa'"
    },
    {
      "id": "printedSignedApplicationForm",
      "label": "Printed and signed copy of this completed online application form",
      "category": "identity-document",
      "required": true,
      "belongsTo": "applicant",
      "sourceRef": "Long-stay visa application wizard — page 1/13 instructions"
    },
    {
      "id": "travelMedicalInsurance",
      "label": "Travel medical insurance covering the requested visa period (or, if covered by Estonian health insurance after arrival, the period until it becomes valid)",
      "category": "supporting-evidence",
      "required": true,
      "belongsTo": "applicant",
      "sourceRef": "vm.ee — 'Documents to be submitted upon application for a long-stay visa'"
    },
    {
      "id": "proofOfFinancialMeans",
      "label": "Proof of financial means, including evidence of income for the three months immediately preceding the application, showing amount, regularity, and source",
      "category": "supporting-evidence",
      "required": true,
      "belongsTo": "applicant",
      "sourceRef": "vm.ee — 'Documents to be submitted upon application for a long-stay visa'"
    },
    {
      "id": "dataConcerningCloseRelativesForm",
      "label": "Data concerning close relatives and family members (Ministry-issued form)",
      "category": "supporting-evidence",
      "required": true,
      "belongsTo": "applicant",
      "sourceRef": "vm.ee — related documents: 'data concerning close relatives and family members.pdf'"
    },
    {
      "id": "biographicalDataForm",
      "label": "Biographical data (Ministry-issued form)",
      "category": "supporting-evidence",
      "required": true,
      "belongsTo": "applicant",
      "sourceRef": "vm.ee — related documents: 'biographical data.pdf'"
    },
    {
      "id": "additionalApplicationForm1",
      "label": "Additional application form 1 (citizens of NATO member states are exempted)",
      "category": "supporting-evidence",
      "required": false,
      "belongsTo": "applicant",
      "sourceRef": "vm.ee — related documents: 'additional application form 1.pdf'"
    },
    {
      "id": "purposeOfJourneyEvidence",
      "label": "Documents indicating the purpose of the journey (e.g. confirmation letter from the host, employer confirmation, or proof of study place)",
      "category": "supporting-evidence",
      "required": true,
      "belongsTo": "applicant",
      "sourceRef": "vm.ee — 'Documents to be submitted upon application for a long-stay visa'"
    },
    {
      "id": "travelTicketBookingConfirmation",
      "label": "Travel ticket booking confirmation to Estonia (or proof of another mode of transport)",
      "category": "supporting-evidence",
      "required": true,
      "belongsTo": "applicant",
      "sourceRef": "vm.ee — 'Documents to be submitted upon application for a long-stay visa'"
    }
  ],
  "steps": [
    {
      "id": "applicant_identity",
      "title": "Information on the applicant — identity",
      "fields": [
        "surname", "surnameAbsentInTravelDocument", "formerNames", "firstNames",
        "firstNameAbsentInTravelDocument", "patronym", "dateOfBirth", "countryOfBirth", "cityOfBirth"
      ],
      "next": "nationality_and_status"
    },
    {
      "id": "nationality_and_status",
      "title": "Nationality, sex, and marital status",
      "fields": [
        "nationality", "nationalityAtBirth", "otherCitizenships", "sex", "maritalStatus", "maritalStatusOtherDetails"
      ],
      "next": "travel_document"
    },
    {
      "id": "travel_document",
      "title": "Travel document",
      "fields": [
        "travelDocumentType", "travelDocumentOtherDetails", "travelDocumentNumber",
        "travelDocumentIssuedByCountry", "travelDocumentIssuedByAuthority",
        "travelDocumentDateOfIssue", "travelDocumentValidUntil"
      ],
      "next": "eu_relative"
    },
    {
      "id": "eu_relative",
      "title": "Close relatives who are EU/EEA/Swiss/UK citizens",
      "fields": [
        "euRelativeAccompanying", "euRelativeRelationship", "euRelativeFamilyName", "euRelativeFirstName",
        "euRelativeDateOfBirth", "euRelativeNationality", "euRelativeTravelDocumentNumber"
      ],
      "next": "occupation"
    },
    {
      "id": "occupation",
      "title": "Current or previous employment or education",
      "fields": [
        "profession", "currentOccupationInResidenceCountry", "employerOrSchoolName",
        "employerOrSchoolCountry", "employerOrSchoolStreet", "employerOrSchoolHouseNumber",
        "employerOrSchoolApartmentNumber", "employerOrSchoolPostalCode", "employerOrSchoolCity",
        "employerOrSchoolCountyRegion", "employerOrSchoolPhone"
      ],
      "next": "travel_plan"
    },
    {
      "id": "travel_plan",
      "title": "Duration and dates of the intended stay",
      "fields": ["intendedStayDurationDays", "visaStartDate", "visaEndDate"],
      "next": "purpose_of_journey"
    },
    {
      "id": "purpose_of_journey",
      "title": "Purpose of the journey",
      "fields": ["purposeOfJourney", "purposeOfJourneyOtherDetails"],
      "next": "host_and_accommodation"
    },
    {
      "id": "host_and_accommodation",
      "title": "Host organization/person and place of stay in Estonia",
      "fields": [
        "hostName", "hostRegistrationCode", "hostAddressCountry", "hostAddressStreet",
        "hostAddressHouseNumber", "hostAddressApartmentNumber", "hostAddressPostalCode",
        "hostAddressCity", "hostAddressCountyRegion", "hostPhone", "hostEmail",
        "hostContactFirstName", "hostContactFamilyName", "hostContactEmail", "hostContactPhone",
        "placeOfStayType", "accommodationName", "placeOfStayAddressCountry", "placeOfStayAddressStreet",
        "placeOfStayAddressHouseNumber", "placeOfStayAddressPostalCode", "placeOfStayAddressCity",
        "placeOfStayEmail", "placeOfStayPhone"
      ],
      "next": "financial_means"
    },
    {
      "id": "financial_means",
      "title": "Financial means",
      "fields": [
        "fundedByApplicant", "fundedBySponsor", "sponsorDetails",
        "hasCashApplicant", "hasCreditCardApplicant", "hasAccommodationProvidedApplicant",
        "hasTransportPrepaidApplicant", "hasSalaryApplicant", "hasOtherApplicant", "otherApplicantMeansDetails",
        "hasCashSponsor", "hasCreditCardSponsor", "hasAccommodationProvidedSponsor",
        "hasTransportPrepaidSponsor", "hasSalarySponsor", "hasOtherSponsor", "otherSponsorMeansDetails"
      ],
      "next": "schengen_history"
    },
    {
      "id": "schengen_history",
      "title": "Previous Schengen visas, residence permits, and fingerprinting history",
      "fields": [
        "issuedSchengenVisaOrPermitPastFiveYears", "schengenVisaOrPermitDetails", "fingerprintsCollectedPast59Months"
      ],
      "next": "applicant_contact"
    },
    {
      "id": "applicant_contact",
      "title": "Applicant's home address and contact details",
      "fields": [
        "homeAddressCountry", "homeAddressStreet", "homeAddressHouseNumber", "homeAddressApartmentNumber",
        "homeAddressPostalCode", "homeAddressCity", "homeAddressCountyRegion", "applicantPhone", "contactEmail"
      ]
    }
  ]
}
