{
  "$schema": "https://govschema.org/spec/v0.3/govschema.schema.json",
  "govschemaVersion": "0.3.0",
  "id": "fi/migri/residence-permit-employed-person",
  "version": "1.0.0",
  "title": "Finland Residence Permit Application for an Employed Person (Työntekijän oleskelulupahakemus, OLE_TY1 / 'TTOL')",
  "description": "Maahanmuuttovirasto's (the Finnish Immigration Service, Migri) form OLE_TY1, the residence permit application for an employed person ('TTOL'), used by a non-EU/EEA national coming to Finland to work for a Finnish (or Finland-operating) employer under a signed employment contract or accepted binding job offer, subject to labour market testing (the employer must first check whether suitable labour is available within the EU/EEA). A single bounded 10-page English-language fillable AcroForm PDF covering: the applicant's own personal details, passport, and digital-passport-photo details (sections 1-3); home-country and Finland contact information (section 4); intended residence in Finland, applicable only to first-time applicants (section 5); the applicant's spouse and up to 3 children under 18 (section 6); the sponsoring employer's own details (section 7); the terms of employment — occupation, working time, grounds for pay, and up to 3 taxable fringe-benefit rows — required only when the employer lacks Migri's own employer certification (section 8); criminal history and entry-ban questions covering conduct outside Finland only, since Migri obtains Finland-internal records itself (section 9); free-text additional information (section 10); a supporting-attachments checklist with up to 4 free-form 'other attachment' rows (section 11); informational text on personal-data processing with no fillable fields (section 12); and the final date/place/signature/declaration block (section 13). Opens Finland as GovSchema's 34th jurisdiction, via one of GovSchema's weakest-covered verticals (Visa). This document describes the form only; it does not submit anything, and does not imply Finnish government endorsement.",
  "status": "draft",
  "jurisdiction": {
    "country": "FI",
    "level": "national"
  },
  "authority": {
    "name": "Maahanmuuttovirasto (Finnish Immigration Service)",
    "abbreviation": "Migri",
    "url": "https://migri.fi"
  },
  "process": {
    "type": "application",
    "language": "en"
  },
  "source": {
    "url": "https://migri.fi/documents/5202425/5790178/Ty%C3%B6ntekij%C3%A4n+oleskelulupahakemus+(TTOL),+OLE_TY1+(en)/24dfac76-fe3e-43ab-b61d-94be6f1c6f76/Ty%C3%B6ntekij%C3%A4n+oleskelulupahakemus+(TTOL),+OLE_TY1+(en).pdf",
    "retrievedAt": "2026-07-11",
    "documentRef": "OLE_TY1, 'Residence permit application for an employed person (\\'TTOL\\')', Migri's own English-language fillable AcroForm PDF"
  },
  "verification": {
    "method": "manual-source-review-v1",
    "lastVerifiedAt": "2026-07-11",
    "verifiedBy": "GovSchema Engineering (Standards Engineer)",
    "nextReviewBy": "2027-01-11",
    "notes": "GOV-2276 'GovSchema Standard Research' cycle. Opens Finland as GovSchema's 34th jurisdiction via its Visa vertical, one of GovSchema's weakest-covered verticals globally. A prior scouting pass had estimated ~205 fields across 14 pages from a rough count; this cycle independently re-derived the field structure from scratch rather than trusting that estimate. The originally-scouted URL (a shorter, un-suffixed migri.fi/documents/... path) returned HTTP 404; the correct, currently-live URL (with the document's full CDN UUID suffix, found via web search against migri.fi's own site) was fetched fresh with a plain HTTP GET: HTTP 200, 477,135 bytes, confirmed a genuine PDF (%PDF-1.6 header) — matching the scouting report's ~477KB estimate even though the page/field counts differ. A from-scratch pdfjs-dist (v4, legacy build) extraction found exactly 10 pages (not 14) and exactly 194 distinct AcroForm /Widget annotations (131 Tx text fields, 63 Btn checkboxes, 0 Ch choice fields, 0 genuine radio-button groups — every checkbox is an independent Btn widget, confirmed via annotation.radioButton/.checkBox flags), not ~205 — the scouting estimate came from an earlier, less precise count and was superseded by this independent re-derivation, not reconciled to it. Every widget's rect was cross-referenced against page.getTextContent() text clustered into visual lines by y-coordinate, and matched to the nearest printed label by x/y proximity (the same position-aware technique this registry's is/utl and dk/skattestyrelsen cycles established), rather than trusting the Finnish-language internal field names (e.g. 'Sukunimi_1_1', 'Etunimet_1_1') as English labels — the form's own visible text is entirely in English (this is Migri's English-language edition of OLE_TY1) even though the underlying AcroForm field keys are Finnish. The 194 widgets were consolidated into 134 fields[] entries by combining (a) 14 printed day/month/year date splits (dd.mm.yyyy across 3 separate text widgets each, e.g. dateOfBirth, passportDateOfIssue/Expiry, intendedMoveToFinlandDate, arrivalInFinlandDate, spouseDateOfBirth, child1-3DateOfBirth, payPeriodFrom/To, crimeDate, suspectedCrimeDate, signatureDate — 42 widgets total) into single ISO 'date'-typed fields, per this registry's dk/cpr/notification-of-entry and is/utl precedent for split date widgets, and (b) 15 mutually-exclusive independent-checkbox groups (applicationType's 2 checkboxes, gender's 2, maritalStatus's 6, preferredContactLanguage's 3, passportType's 6, hasDigitalPassportPhoto's 2, spouseGender/child1Gender/child2Gender/child3Gender's 2 each [4 groups], workingTimeBasis's 4, paymentBasis's 3, convictedOfCrimeAbroad/suspectedOfCrimeAbroad/hasOrHadEntryBan's 2 each [3 groups] — 42 widgets total) into single 'enum' or 'boolean'-typed fields, since pdfjs-dist confirmed none of these share a PDF radio-group parent field (each checkbox is independently named and independently checkable; mutual exclusivity is a form-design convention only, matching this registry's existing treatment of similar independent-checkbox groups in at/bmeia and se/migrationsverket). Every widget name was accounted for exactly once (0 leftover, 0 double-counted) via a disposable reconciliation script (/tmp/fi-migri-extract/reconcile.mjs, not committed) checked against the full 194-widget list extracted directly from the PDF. 5 further checklist checkbox widgets (section 11.1's fixed attachment list) were modelled as documents[] entries instead of fields[], per this registry's established convention for supporting-document checklists (matching is/utl/other-residence-permit-application), plus one additional attestation documents[] entry (applicantSignatureDeclaration, quoting the section 13 declaration paragraph verbatim) with no corresponding AcroForm widget of its own (the physical signature line is not a fillable text field on this specimen). Total: 134 fields[] + 6 documents[] entries. Section 6.2 (children) and the section-11.1 'other attachments' list are each disclosed, bounded repeating groups (3 rows and 4 rows respectively, matching the source's own printed row counts exactly), flattened to numbered slots (child1.../child3..., otherAttachment1.../otherAttachment4...) per this registry's established repeating-group convention rather than modelled as a JSON array (GovSchema's flat field model, SPEC.md §6.1, has no array/nested-object field type). Section 8's own instruction ('Fill in section 8 only if your employer has no employer certification') and section 5's own instruction ('Fill in this section only if you are applying for a first residence permit') are both disclosed in field descriptions/sourceRef; section 5's gating is additionally expressed structurally via visibleWhen/requiredWhen against applicationType, since that field exists on this form, while section 8 has no corresponding 'is my employer certified' field on the form itself to gate against, so it remains descriptive only (all section-8 fields modelled as required, consistent with the more common first-time-applicant scenario). Two mock conformance scenarios (a Finnish IT company sponsoring a foreign software engineer on hourly pay with no dependents, and a maximal-coverage scenario with a spouse, 2 children, fringe benefits, and a criminal-history disclosure) plus a disposable mutation-control script (not committed) were run against this schema's own required/requiredWhen/visibleWhen/validation/crossFieldValidation grammar; see this document's own VERIFICATION.md for the full run record. Validated clean with node tools/validate.mjs and node tools/validate-ajv.mjs, individually and as part of the full registry run."
  },
  "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-11"
  },
  "license": "CC-BY-4.0",
  "fields": [
    {
      "name": "applicationType",
      "label": "I am applying for",
      "type": "enum",
      "required": true,
      "description": "The form's own two mutually-exclusive cover-page checkboxes ('a first residence permit' / 'an extended permit'), implemented on the source PDF as two independent checkbox widgets (Haen_ensimmaista_oleskelulupaa / Haen_jatkolupaa), not a shared radio group.",
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 1/10 (cover): 'I am applying for ☐ a first residence permit ☐ an extended permit'",
      "validation": {
        "enum": [
          "first_permit",
          "extended_permit"
        ]
      }
    },
    {
      "name": "lastName",
      "label": "Last name",
      "type": "string",
      "required": true,
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 1/10, section 1.1 'Applicant's personal details'",
      "validation": {
        "minLength": 1,
        "maxLength": 200
      },
      "classification": "pii"
    },
    {
      "name": "firstNames",
      "label": "First names",
      "type": "string",
      "required": true,
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 1/10, section 1.1 'Applicant's personal details'",
      "validation": {
        "minLength": 1,
        "maxLength": 200
      },
      "classification": "pii"
    },
    {
      "name": "formerLastNames",
      "label": "Former last names (if any)",
      "type": "string",
      "required": false,
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 2/10, section 1.1",
      "validation": {
        "maxLength": 300
      },
      "classification": "pii"
    },
    {
      "name": "formerFirstNames",
      "label": "Former first names (if any)",
      "type": "string",
      "required": false,
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 2/10, section 1.1",
      "validation": {
        "maxLength": 300
      },
      "classification": "pii"
    },
    {
      "name": "gender",
      "label": "Gender",
      "type": "enum",
      "required": true,
      "description": "The form's own two-option 'Gender' checkbox pair (no third option is printed on this form).",
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 2/10, section 1.1: 'Gender ☐ Female ☐ Male'",
      "validation": {
        "enum": [
          "female",
          "male"
        ]
      },
      "classification": "sensitive-pii"
    },
    {
      "name": "dateOfBirth",
      "label": "Date of birth",
      "type": "date",
      "required": true,
      "description": "The source PDF splits this date across three separate day/month/year text-field widgets (dd.mm.yyyy); combined here into a single ISO date field, per this registry's established convention for split date widgets.",
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 2/10, section 1.1: 'Date of birth (dd.mm.yyyy)'",
      "classification": "sensitive-pii"
    },
    {
      "name": "finnishPersonalIdentityCode",
      "label": "Finnish personal identity code (if applicable)",
      "type": "string",
      "required": false,
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 2/10, section 1.1: 'Finnish personal identity code (if applicable)'",
      "validation": {
        "maxLength": 20
      },
      "classification": "sensitive-pii"
    },
    {
      "name": "countryOfBirth",
      "label": "Country of birth",
      "type": "string",
      "required": true,
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 2/10, section 1.1 'Country of birth'",
      "validation": {
        "minLength": 1,
        "maxLength": 100
      },
      "classification": "pii"
    },
    {
      "name": "placeOfBirth",
      "label": "Place of birth",
      "type": "string",
      "required": true,
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 2/10, section 1.1 'Place of birth'",
      "validation": {
        "minLength": 1,
        "maxLength": 200
      },
      "classification": "pii"
    },
    {
      "name": "currentCitizenship",
      "label": "Current citizenship(s)",
      "type": "string",
      "required": true,
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 2/10, section 1.2 'Current citizenship(s)'",
      "validation": {
        "minLength": 1,
        "maxLength": 200
      },
      "classification": "pii"
    },
    {
      "name": "formerCitizenship",
      "label": "Former citizenship(s) (if any)",
      "type": "string",
      "required": false,
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 2/10, section 1.2",
      "validation": {
        "maxLength": 200
      },
      "classification": "pii"
    },
    {
      "name": "maritalStatus",
      "label": "Marital status",
      "type": "enum",
      "required": true,
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 2/10, section 1.3: 'Unmarried / Married / Cohabiting / Divorced / Widowed / In a registered partnership'",
      "validation": {
        "enum": [
          "unmarried",
          "married",
          "cohabiting",
          "divorced",
          "widowed",
          "registered_partnership"
        ]
      }
    },
    {
      "name": "currentOccupation",
      "label": "Current occupation",
      "type": "string",
      "required": false,
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 2/10, section 1.4 'Current occupation'",
      "validation": {
        "maxLength": 200
      }
    },
    {
      "name": "educationLevel",
      "label": "Education",
      "type": "string",
      "required": false,
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 2/10, section 1.4 'Education'",
      "validation": {
        "maxLength": 200
      }
    },
    {
      "name": "nativeLanguage",
      "label": "Native language",
      "type": "string",
      "required": true,
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 2/10, section 1.4 'Native language'",
      "validation": {
        "minLength": 1,
        "maxLength": 100
      }
    },
    {
      "name": "preferredContactLanguage",
      "label": "Language you wish to use",
      "type": "enum",
      "required": true,
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 2/10, section 1.4: 'Language you wish to use ☐ Finnish ☐ Swedish ☐ English'",
      "validation": {
        "enum": [
          "finnish",
          "swedish",
          "english"
        ]
      }
    },
    {
      "name": "passportNumber",
      "label": "Passport number",
      "type": "string",
      "required": true,
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 2/10, section 2.1 'Passport number'",
      "validation": {
        "minLength": 1,
        "maxLength": 50
      },
      "classification": "sensitive-pii"
    },
    {
      "name": "passportType",
      "label": "Passport type",
      "type": "enum",
      "required": true,
      "description": "The form's own 6 mutually-exclusive passport-type checkboxes, including 'I do not have a passport' as one of the options.",
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 2/10, section 2.1: 'Ordinary passport / Official or diplomatic passport / Refugee travel document / Alien's passport / Other, please specify / I do not have a passport'",
      "validation": {
        "enum": [
          "ordinary",
          "official_diplomatic",
          "refugee_travel_document",
          "aliens_passport",
          "other",
          "no_passport"
        ]
      }
    },
    {
      "name": "passportTypeOtherDescription",
      "label": "Passport type — other, please specify",
      "type": "string",
      "required": false,
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 2/10, section 2.1: 'Other, please specify'",
      "validation": {
        "maxLength": 200
      },
      "requiredWhen": {
        "field": "passportType",
        "equals": "other"
      }
    },
    {
      "name": "noPassportExplanation",
      "label": "I do not have a passport. Explain why not",
      "type": "string",
      "required": false,
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 2/10, section 2.1: 'I do not have a passport. Explain why not:'",
      "validation": {
        "maxLength": 500
      },
      "requiredWhen": {
        "field": "passportType",
        "equals": "no_passport"
      }
    },
    {
      "name": "passportCountryOfIssue",
      "label": "Country of issue",
      "type": "string",
      "required": false,
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 3/10, section 2.2 'Country of issue'",
      "validation": {
        "maxLength": 100
      },
      "requiredWhen": {
        "field": "passportType",
        "notEquals": "no_passport"
      },
      "classification": "pii"
    },
    {
      "name": "passportIssuingAuthority",
      "label": "Issuing authority",
      "type": "string",
      "required": false,
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 3/10, section 2.2 'Issuing authority'",
      "validation": {
        "maxLength": 200
      },
      "requiredWhen": {
        "field": "passportType",
        "notEquals": "no_passport"
      }
    },
    {
      "name": "passportDateOfIssue",
      "label": "Date of issue",
      "type": "date",
      "required": false,
      "description": "The source PDF splits this date across three separate day/month/year text-field widgets (dd.mm.yyyy); combined here into a single ISO date field.",
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 3/10, section 2.2: 'Date of issue (dd.mm.yyyy)'",
      "requiredWhen": {
        "field": "passportType",
        "notEquals": "no_passport"
      }
    },
    {
      "name": "passportDateOfExpiry",
      "label": "Date of expiry",
      "type": "date",
      "required": false,
      "description": "The source PDF splits this date across three separate day/month/year text-field widgets (dd.mm.yyyy); combined here into a single ISO date field.",
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 3/10, section 2.2: 'Date of expiry (dd.mm.yyyy)'",
      "requiredWhen": {
        "field": "passportType",
        "notEquals": "no_passport"
      }
    },
    {
      "name": "hasDigitalPassportPhoto",
      "label": "Do you have a digital passport photo?",
      "type": "boolean",
      "required": true,
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 3/10, section 3.1: 'Do you have a digital passport photo? ☐ Yes ☐ No'"
    },
    {
      "name": "digitalPassportPhotoRetrievalCode",
      "label": "Retrieval code for your digital passport photo",
      "type": "string",
      "required": false,
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 3/10, section 3.1 'Retrieval code for your digital passport photo:'",
      "validation": {
        "maxLength": 50
      },
      "requiredWhen": {
        "field": "hasDigitalPassportPhoto",
        "equals": true
      }
    },
    {
      "name": "homeStreetAddress",
      "label": "Street address (in place of residence)",
      "type": "string",
      "required": true,
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 3/10, section 4.1 'Street address'",
      "validation": {
        "minLength": 1,
        "maxLength": 300
      },
      "classification": "pii"
    },
    {
      "name": "homePostalCode",
      "label": "Postal code (in place of residence)",
      "type": "string",
      "required": true,
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 3/10, section 4.1 'Postal code'",
      "validation": {
        "minLength": 1,
        "maxLength": 50
      },
      "classification": "pii"
    },
    {
      "name": "homeCity",
      "label": "City/town (in place of residence)",
      "type": "string",
      "required": true,
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 3/10, section 4.1 'City/town'",
      "validation": {
        "minLength": 1,
        "maxLength": 150
      },
      "classification": "pii"
    },
    {
      "name": "homeCountry",
      "label": "Country (in place of residence)",
      "type": "string",
      "required": true,
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 3/10, section 4.1 'Country'",
      "validation": {
        "minLength": 1,
        "maxLength": 100
      },
      "classification": "pii"
    },
    {
      "name": "homeTelephone",
      "label": "Telephone number (in place of residence)",
      "type": "string",
      "required": true,
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 3/10, section 4.1 'Telephone number'",
      "validation": {
        "minLength": 1,
        "maxLength": 50
      },
      "classification": "pii"
    },
    {
      "name": "homeEmail",
      "label": "Email address (in place of residence)",
      "type": "string",
      "required": true,
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 3/10, section 4.1 'Email address'",
      "validation": {
        "minLength": 1,
        "maxLength": 200
      },
      "classification": "pii"
    },
    {
      "name": "finlandStreetAddress",
      "label": "Street address in Finland (if different from above)",
      "type": "string",
      "required": false,
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 3/10, section 4.2 'Street address'",
      "validation": {
        "maxLength": 300
      },
      "classification": "pii"
    },
    {
      "name": "finlandPostalCode",
      "label": "Postal code in Finland (if different from above)",
      "type": "string",
      "required": false,
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 3/10, section 4.2 'Postal code'",
      "validation": {
        "maxLength": 50
      },
      "classification": "pii"
    },
    {
      "name": "finlandCity",
      "label": "City/town in Finland (if different from above)",
      "type": "string",
      "required": false,
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 3/10, section 4.2 'City/town'",
      "validation": {
        "maxLength": 150
      },
      "classification": "pii"
    },
    {
      "name": "finlandTelephone",
      "label": "Telephone number in Finland (if different from above)",
      "type": "string",
      "required": false,
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 3/10, section 4.2 'Telephone number'",
      "validation": {
        "maxLength": 50
      },
      "classification": "pii"
    },
    {
      "name": "finlandEmail",
      "label": "Email address in Finland (if different from above)",
      "type": "string",
      "required": false,
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 3/10, section 4.2 'Email address'",
      "validation": {
        "maxLength": 200
      },
      "classification": "pii"
    },
    {
      "name": "intendedMoveToFinlandDate",
      "label": "When do you intend to move to Finland?",
      "type": "date",
      "required": false,
      "description": "The source form instructs: 'Fill in this section only if you are applying for a first residence permit.' The source PDF splits this date across three separate day/month/year widgets; combined here into a single ISO date field.",
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 4/10, section 5.1: 'When do you intend to move to Finland? (dd.mm.yyyy)'",
      "visibleWhen": {
        "field": "applicationType",
        "equals": "first_permit"
      },
      "requiredWhen": {
        "field": "applicationType",
        "equals": "first_permit"
      }
    },
    {
      "name": "arrivalInFinlandDate",
      "label": "If you already are in Finland and apply for a first residence permit, when did you arrive in Finland?",
      "type": "date",
      "required": false,
      "description": "Only applicable if the applicant is already physically in Finland while applying for a first residence permit. The source PDF splits this date across three separate day/month/year widgets; combined here into a single ISO date field.",
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 4/10, section 5.1",
      "visibleWhen": {
        "field": "applicationType",
        "equals": "first_permit"
      }
    },
    {
      "name": "intendedLengthOfStay",
      "label": "How long do you intend to stay in Finland?",
      "type": "string",
      "required": false,
      "description": "The source form instructs: 'Fill in this section only if you are applying for a first residence permit.'",
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 4/10, section 5.1 'How long do you intend to stay in Finland?'",
      "validation": {
        "maxLength": 300
      },
      "visibleWhen": {
        "field": "applicationType",
        "equals": "first_permit"
      },
      "requiredWhen": {
        "field": "applicationType",
        "equals": "first_permit"
      }
    },
    {
      "name": "noSpouse",
      "label": "No spouse",
      "type": "boolean",
      "required": false,
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 4/10, section 6.1: 'No spouse — If you do not have a spouse, please move to section 6.2.'"
    },
    {
      "name": "spouseLastName",
      "label": "Spouse: last name",
      "type": "string",
      "required": false,
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 4/10, section 6.1",
      "validation": {
        "maxLength": 200
      },
      "classification": "pii",
      "requiredWhen": {
        "field": "noSpouse",
        "equals": false
      }
    },
    {
      "name": "spouseFirstNames",
      "label": "Spouse: first names",
      "type": "string",
      "required": false,
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 4/10, section 6.1",
      "validation": {
        "maxLength": 200
      },
      "classification": "pii",
      "requiredWhen": {
        "field": "noSpouse",
        "equals": false
      }
    },
    {
      "name": "spouseFormerLastNames",
      "label": "Spouse: former last names (if any)",
      "type": "string",
      "required": false,
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 4/10, section 6.1",
      "validation": {
        "maxLength": 300
      },
      "classification": "pii"
    },
    {
      "name": "spouseFormerFirstNames",
      "label": "Spouse: former first names (if any)",
      "type": "string",
      "required": false,
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 4/10, section 6.1",
      "validation": {
        "maxLength": 300
      },
      "classification": "pii"
    },
    {
      "name": "spouseGender",
      "label": "Spouse: gender",
      "type": "enum",
      "required": false,
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 4/10, section 6.1: 'Gender ☐ Female ☐ Male'",
      "validation": {
        "enum": [
          "female",
          "male"
        ]
      },
      "classification": "sensitive-pii",
      "requiredWhen": {
        "field": "noSpouse",
        "equals": false
      }
    },
    {
      "name": "spouseDateOfBirth",
      "label": "Spouse: date of birth",
      "type": "date",
      "required": false,
      "description": "The source PDF splits this date across three separate day/month/year widgets; combined here into a single ISO date field.",
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 4/10, section 6.1: 'Date of birth (dd.mm.yyyy)'",
      "classification": "sensitive-pii",
      "requiredWhen": {
        "field": "noSpouse",
        "equals": false
      }
    },
    {
      "name": "spouseFinnishPersonalIdentityCode",
      "label": "Spouse: Finnish personal identity code (if applicable)",
      "type": "string",
      "required": false,
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 4/10, section 6.1",
      "validation": {
        "maxLength": 20
      },
      "classification": "sensitive-pii"
    },
    {
      "name": "spouseCountryOfBirth",
      "label": "Spouse: country of birth",
      "type": "string",
      "required": false,
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 4/10, section 6.1 'Country of birth'",
      "validation": {
        "maxLength": 100
      },
      "classification": "pii",
      "requiredWhen": {
        "field": "noSpouse",
        "equals": false
      }
    },
    {
      "name": "spousePlaceOfBirth",
      "label": "Spouse: place of birth",
      "type": "string",
      "required": false,
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 4/10, section 6.1 'Place of birth'",
      "validation": {
        "maxLength": 200
      },
      "classification": "pii",
      "requiredWhen": {
        "field": "noSpouse",
        "equals": false
      }
    },
    {
      "name": "spouseCurrentCitizenship",
      "label": "Spouse: current citizenship(s)",
      "type": "string",
      "required": false,
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 4/10, section 6.1 'Current citizenship(s)'",
      "validation": {
        "maxLength": 200
      },
      "classification": "pii",
      "requiredWhen": {
        "field": "noSpouse",
        "equals": false
      }
    },
    {
      "name": "spouseApplyingSimultaneously",
      "label": "My spouse and I are applying for a residence permit simultaneously",
      "type": "boolean",
      "required": false,
      "description": "The spouse must fill in a separate application form, per the source form's own note.",
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 4/10, section 6.1: 'My spouse and I are applying for a residence permit simultaneously.'"
    },
    {
      "name": "noChildrenUnder18",
      "label": "No children",
      "type": "boolean",
      "required": false,
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 4/10, section 6.2: 'No children — If you selected this, please move to section 7.'"
    },
    {
      "name": "child1LastName",
      "label": "Child 1: last name",
      "type": "string",
      "required": false,
      "description": "The form provides 3 rows for children under 18 ('If you have more than three children, give the same details of your other children as a separate attachment.'); bounded to 3 rows here, matching the source's own printed row count.",
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 5/10, section 6.2, row 1",
      "validation": {
        "maxLength": 200
      },
      "classification": "pii"
    },
    {
      "name": "child1FirstNames",
      "label": "Child 1: first names",
      "type": "string",
      "required": false,
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 5/10, section 6.2, row 1",
      "validation": {
        "maxLength": 200
      },
      "classification": "pii"
    },
    {
      "name": "child1Gender",
      "label": "Child 1: gender",
      "type": "enum",
      "required": false,
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 5/10, section 6.2, row 1: 'Gender ☐ Female ☐ Male'",
      "validation": {
        "enum": [
          "female",
          "male"
        ]
      }
    },
    {
      "name": "child1DateOfBirth",
      "label": "Child 1: date of birth",
      "type": "date",
      "required": false,
      "description": "The source PDF splits this date across three separate day/month/year widgets; combined here into a single ISO date field.",
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 5/10, section 6.2, row 1: 'Date of birth (dd.mm.yyyy)'",
      "classification": "sensitive-pii"
    },
    {
      "name": "child1ApplyingSimultaneously",
      "label": "Child 1: is applying for a residence permit simultaneously with me",
      "type": "boolean",
      "required": false,
      "description": "A separate application form must be filled in for the child, per the source form's own note.",
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 5/10, section 6.2, row 1: 'The child is applying for a residence permit simultaneously with me.'"
    },
    {
      "name": "child2LastName",
      "label": "Child 2: last name",
      "type": "string",
      "required": false,
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 5/10, section 6.2, row 2",
      "validation": {
        "maxLength": 200
      },
      "classification": "pii"
    },
    {
      "name": "child2FirstNames",
      "label": "Child 2: first names",
      "type": "string",
      "required": false,
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 5/10, section 6.2, row 2",
      "validation": {
        "maxLength": 200
      },
      "classification": "pii"
    },
    {
      "name": "child2Gender",
      "label": "Child 2: gender",
      "type": "enum",
      "required": false,
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 5/10, section 6.2, row 2: 'Gender ☐ Female ☐ Male'",
      "validation": {
        "enum": [
          "female",
          "male"
        ]
      }
    },
    {
      "name": "child2DateOfBirth",
      "label": "Child 2: date of birth",
      "type": "date",
      "required": false,
      "description": "The source PDF splits this date across three separate day/month/year widgets; combined here into a single ISO date field.",
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 5/10, section 6.2, row 2: 'Date of birth (dd.mm.yyyy)'",
      "classification": "sensitive-pii"
    },
    {
      "name": "child2ApplyingSimultaneously",
      "label": "Child 2: is applying for a residence permit simultaneously with me",
      "type": "boolean",
      "required": false,
      "description": "A separate application form must be filled in for the child, per the source form's own note.",
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 5/10, section 6.2, row 2: 'The child is applying for a residence permit simultaneously with me.'"
    },
    {
      "name": "child3LastName",
      "label": "Child 3: last name",
      "type": "string",
      "required": false,
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 5/10, section 6.2, row 3",
      "validation": {
        "maxLength": 200
      },
      "classification": "pii"
    },
    {
      "name": "child3FirstNames",
      "label": "Child 3: first names",
      "type": "string",
      "required": false,
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 5/10, section 6.2, row 3",
      "validation": {
        "maxLength": 200
      },
      "classification": "pii"
    },
    {
      "name": "child3Gender",
      "label": "Child 3: gender",
      "type": "enum",
      "required": false,
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 5/10, section 6.2, row 3: 'Gender ☐ Female ☐ Male'",
      "validation": {
        "enum": [
          "female",
          "male"
        ]
      }
    },
    {
      "name": "child3DateOfBirth",
      "label": "Child 3: date of birth",
      "type": "date",
      "required": false,
      "description": "The source PDF splits this date across three separate day/month/year widgets; combined here into a single ISO date field.",
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 5/10, section 6.2, row 3: 'Date of birth (dd.mm.yyyy)'",
      "classification": "sensitive-pii"
    },
    {
      "name": "child3ApplyingSimultaneously",
      "label": "Child 3: is applying for a residence permit simultaneously with me",
      "type": "boolean",
      "required": false,
      "description": "A separate application form must be filled in for the child, per the source form's own note.",
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 5/10, section 6.2, row 3: 'The child is applying for a residence permit simultaneously with me.'"
    },
    {
      "name": "employerName",
      "label": "Name of company",
      "type": "string",
      "required": true,
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 5/10, section 7.1 'Name of company'",
      "validation": {
        "minLength": 1,
        "maxLength": 300
      }
    },
    {
      "name": "employerBusinessId",
      "label": "Business ID",
      "type": "string",
      "required": true,
      "description": "Instead of a Business ID, the form permits stating the personal identity code of a private individual who is the applicant's employer.",
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 5/10, section 7.1 'Business ID'",
      "validation": {
        "minLength": 1,
        "maxLength": 50
      }
    },
    {
      "name": "employerStreetAddress",
      "label": "Employer: street address",
      "type": "string",
      "required": true,
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 5/10, section 7.1 'Street address'",
      "validation": {
        "minLength": 1,
        "maxLength": 300
      }
    },
    {
      "name": "employerPostalCode",
      "label": "Employer: postal code",
      "type": "string",
      "required": true,
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 5/10, section 7.1 'Postal code'",
      "validation": {
        "minLength": 1,
        "maxLength": 50
      }
    },
    {
      "name": "employerCity",
      "label": "Employer: city/town",
      "type": "string",
      "required": true,
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 5/10, section 7.1 'City/town'",
      "validation": {
        "minLength": 1,
        "maxLength": 150
      }
    },
    {
      "name": "employerCountry",
      "label": "Employer: country",
      "type": "string",
      "required": true,
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 5/10, section 7.1 'Country'",
      "validation": {
        "minLength": 1,
        "maxLength": 100
      }
    },
    {
      "name": "employerContactName",
      "label": "Name of contact person",
      "type": "string",
      "required": false,
      "description": "The person who will give additional information on behalf of the employer if needed.",
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 5/10, section 7.1 'Name of contact person'",
      "validation": {
        "maxLength": 200
      },
      "classification": "pii"
    },
    {
      "name": "employerContactTelephone",
      "label": "Telephone number of contact person",
      "type": "string",
      "required": false,
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 5/10, section 7.1 'Telephone number of contact person'",
      "validation": {
        "maxLength": 50
      }
    },
    {
      "name": "employerContactEmail",
      "label": "Email address of contact person",
      "type": "string",
      "required": false,
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 5/10, section 7.1 'Email address of contact person'",
      "validation": {
        "maxLength": 200
      }
    },
    {
      "name": "jobOccupation",
      "label": "Occupation",
      "type": "string",
      "required": true,
      "description": "The source form instructs: 'Fill in section 8 only if your employer has no employer certification.' A certified employer instead attaches its own certification in lieu of section 8; this schema still models every section-8 field for the (more common, for a first-time applicant's employer) uncertified case.",
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 6/10, section 8 'Occupation'",
      "validation": {
        "minLength": 1,
        "maxLength": 200
      }
    },
    {
      "name": "mainDuties",
      "label": "Main duties",
      "type": "string",
      "required": true,
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 6/10, section 8 'Main duties'",
      "validation": {
        "minLength": 1,
        "maxLength": 1000
      }
    },
    {
      "name": "workingTimeBasis",
      "label": "Working time",
      "type": "enum",
      "required": true,
      "description": "The form's own 'Choose one' instruction over 4 mutually-exclusive working-time bases.",
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 6/10, section 8 'Working time — Choose one.'",
      "validation": {
        "enum": [
          "per_week",
          "over_three_weeks",
          "per_month",
          "other"
        ]
      }
    },
    {
      "name": "workingTimeHoursPerWeek",
      "label": "Working time: hours per week",
      "type": "number",
      "required": false,
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 6/10, section 8: 'Per week ________ hours'",
      "validation": {
        "minimum": 0
      },
      "requiredWhen": {
        "field": "workingTimeBasis",
        "equals": "per_week"
      }
    },
    {
      "name": "workingTimeHoursPerThreeWeeks",
      "label": "Working time: hours over three weeks",
      "type": "number",
      "required": false,
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 6/10, section 8: 'Over three weeks ________ hours'",
      "validation": {
        "minimum": 0
      },
      "requiredWhen": {
        "field": "workingTimeBasis",
        "equals": "over_three_weeks"
      }
    },
    {
      "name": "workingTimeHoursPerMonth",
      "label": "Working time: hours per month",
      "type": "number",
      "required": false,
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 6/10, section 8: 'Per month ________ hours'",
      "validation": {
        "minimum": 0
      },
      "requiredWhen": {
        "field": "workingTimeBasis",
        "equals": "per_month"
      }
    },
    {
      "name": "workingTimeOtherDescription",
      "label": "Working time: other, please specify",
      "type": "string",
      "required": false,
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 6/10, section 8: 'Other, please specify'",
      "validation": {
        "maxLength": 300
      },
      "requiredWhen": {
        "field": "workingTimeBasis",
        "equals": "other"
      }
    },
    {
      "name": "workingTimeOtherHours",
      "label": "Working time: other — hours",
      "type": "number",
      "required": false,
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 6/10, section 8: 'Other, please specify ________ hours'",
      "validation": {
        "minimum": 0
      },
      "requiredWhen": {
        "field": "workingTimeBasis",
        "equals": "other"
      }
    },
    {
      "name": "paymentBasis",
      "label": "Grounds for pay",
      "type": "enum",
      "required": true,
      "description": "The form's own 'Choose one' instruction over 3 mutually-exclusive grounds for pay.",
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 6/10, section 8 'Grounds for pay — Choose one.'",
      "validation": {
        "enum": [
          "hourly",
          "monthly",
          "seasonal_piece_project"
        ]
      }
    },
    {
      "name": "hourlyPayRate",
      "label": "Hourly pay (EUR per hour)",
      "type": "number",
      "required": false,
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 6/10, section 8: 'Hourly pay EUR ________ per hour'",
      "validation": {
        "minimum": 0
      },
      "requiredWhen": {
        "field": "paymentBasis",
        "equals": "hourly"
      },
      "classification": "financial"
    },
    {
      "name": "monthlyPayRate",
      "label": "Monthly pay (EUR per month)",
      "type": "number",
      "required": false,
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 6/10, section 8: 'Monthly pay EUR ________ per month'",
      "validation": {
        "minimum": 0
      },
      "requiredWhen": {
        "field": "paymentBasis",
        "equals": "monthly"
      },
      "classification": "financial"
    },
    {
      "name": "seasonalPieceProjectPayRate",
      "label": "Seasonal, piece-rate, or per-project pay (EUR)",
      "type": "number",
      "required": false,
      "description": "Choose this option if paid a lump sum for work done during a certain period (e.g. the entire employment relationship), or per task, piece, season, or project.",
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 6/10, section 8: 'Seasonal or piece-rate pay or payment by project EUR ________ per season, task, piece or project'",
      "validation": {
        "minimum": 0
      },
      "requiredWhen": {
        "field": "paymentBasis",
        "equals": "seasonal_piece_project"
      },
      "classification": "financial"
    },
    {
      "name": "payPeriodFrom",
      "label": "Pay period: from",
      "type": "date",
      "required": false,
      "description": "The time period for which wages will be paid, when paid a lump sum by season/task/piece/project. The source PDF splits each of the two dates across three separate day/month/year widgets; combined here into single ISO date fields.",
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 6/10, section 8: 'Pay period: dd.mm.yyyy – dd.mm.yyyy'",
      "requiredWhen": {
        "field": "paymentBasis",
        "equals": "seasonal_piece_project"
      }
    },
    {
      "name": "payPeriodTo",
      "label": "Pay period: to",
      "type": "date",
      "required": false,
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 6/10, section 8: 'Pay period: dd.mm.yyyy – dd.mm.yyyy'",
      "requiredWhen": {
        "field": "paymentBasis",
        "equals": "seasonal_piece_project"
      }
    },
    {
      "name": "benefit1Name",
      "label": "Taxable fringe benefit 1",
      "type": "string",
      "required": false,
      "description": "The form provides 3 rows to list taxable fringe benefits provided by the employer (such as accommodation benefit, meal allowance, full room and board, commuter tickets, company car, or telephone benefit); bounded to 3 rows here, matching the source's own printed row count.",
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 7/10, 'Taxable fringe benefits provided by the employer', Benefit 1",
      "validation": {
        "maxLength": 300
      }
    },
    {
      "name": "benefit1PartOfSalary",
      "label": "Taxable fringe benefit 1: as part of the salary",
      "type": "boolean",
      "required": false,
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 7/10, Benefit 1: 'As part of the salary, taxable value EUR ________ per month'"
    },
    {
      "name": "benefit1PartOfSalaryValue",
      "label": "Taxable fringe benefit 1: taxable value as part of salary (EUR per month)",
      "type": "number",
      "required": false,
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 7/10, Benefit 1: 'As part of the salary, taxable value EUR ________ per month'",
      "validation": {
        "minimum": 0
      },
      "requiredWhen": {
        "field": "benefit1PartOfSalary",
        "equals": true
      },
      "classification": "financial"
    },
    {
      "name": "benefit1InAdditionToSalary",
      "label": "Taxable fringe benefit 1: in addition to the salary",
      "type": "boolean",
      "required": false,
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 7/10, Benefit 1: 'In addition to the salary, taxable value EUR ________ per month'"
    },
    {
      "name": "benefit1InAdditionToSalaryValue",
      "label": "Taxable fringe benefit 1: taxable value in addition to salary (EUR per month)",
      "type": "number",
      "required": false,
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 7/10, Benefit 1: 'In addition to the salary, taxable value EUR ________ per month'",
      "validation": {
        "minimum": 0
      },
      "requiredWhen": {
        "field": "benefit1InAdditionToSalary",
        "equals": true
      },
      "classification": "financial"
    },
    {
      "name": "benefit1Description",
      "label": "Taxable fringe benefit 1: description",
      "type": "string",
      "required": false,
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 7/10, Benefit 1: 'Description of the benefit:'",
      "validation": {
        "maxLength": 300
      }
    },
    {
      "name": "benefit2Name",
      "label": "Taxable fringe benefit 2",
      "type": "string",
      "required": false,
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 7/10, 'Taxable fringe benefits provided by the employer', Benefit 2",
      "validation": {
        "maxLength": 300
      }
    },
    {
      "name": "benefit2PartOfSalary",
      "label": "Taxable fringe benefit 2: as part of the salary",
      "type": "boolean",
      "required": false,
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 7/10, Benefit 2: 'As part of the salary, taxable value EUR ________ per month'"
    },
    {
      "name": "benefit2PartOfSalaryValue",
      "label": "Taxable fringe benefit 2: taxable value as part of salary (EUR per month)",
      "type": "number",
      "required": false,
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 7/10, Benefit 2: 'As part of the salary, taxable value EUR ________ per month'",
      "validation": {
        "minimum": 0
      },
      "requiredWhen": {
        "field": "benefit2PartOfSalary",
        "equals": true
      },
      "classification": "financial"
    },
    {
      "name": "benefit2InAdditionToSalary",
      "label": "Taxable fringe benefit 2: in addition to the salary",
      "type": "boolean",
      "required": false,
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 7/10, Benefit 2: 'In addition to the salary, taxable value EUR ________ per month'"
    },
    {
      "name": "benefit2InAdditionToSalaryValue",
      "label": "Taxable fringe benefit 2: taxable value in addition to salary (EUR per month)",
      "type": "number",
      "required": false,
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 7/10, Benefit 2: 'In addition to the salary, taxable value EUR ________ per month'",
      "validation": {
        "minimum": 0
      },
      "requiredWhen": {
        "field": "benefit2InAdditionToSalary",
        "equals": true
      },
      "classification": "financial"
    },
    {
      "name": "benefit2Description",
      "label": "Taxable fringe benefit 2: description",
      "type": "string",
      "required": false,
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 7/10, Benefit 2: 'Description of the benefit:'",
      "validation": {
        "maxLength": 300
      }
    },
    {
      "name": "benefit3Name",
      "label": "Taxable fringe benefit 3",
      "type": "string",
      "required": false,
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 7/10, 'Taxable fringe benefits provided by the employer', Benefit 3",
      "validation": {
        "maxLength": 300
      }
    },
    {
      "name": "benefit3PartOfSalary",
      "label": "Taxable fringe benefit 3: as part of the salary",
      "type": "boolean",
      "required": false,
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 7/10, Benefit 3: 'As part of the salary, taxable value EUR ________ per month'"
    },
    {
      "name": "benefit3PartOfSalaryValue",
      "label": "Taxable fringe benefit 3: taxable value as part of salary (EUR per month)",
      "type": "number",
      "required": false,
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 7/10, Benefit 3: 'As part of the salary, taxable value EUR ________ per month'",
      "validation": {
        "minimum": 0
      },
      "requiredWhen": {
        "field": "benefit3PartOfSalary",
        "equals": true
      },
      "classification": "financial"
    },
    {
      "name": "benefit3InAdditionToSalary",
      "label": "Taxable fringe benefit 3: in addition to the salary",
      "type": "boolean",
      "required": false,
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 7/10, Benefit 3: 'In addition to the salary, taxable value EUR ________ per month'"
    },
    {
      "name": "benefit3InAdditionToSalaryValue",
      "label": "Taxable fringe benefit 3: taxable value in addition to salary (EUR per month)",
      "type": "number",
      "required": false,
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 7/10, Benefit 3: 'In addition to the salary, taxable value EUR ________ per month'",
      "validation": {
        "minimum": 0
      },
      "requiredWhen": {
        "field": "benefit3InAdditionToSalary",
        "equals": true
      },
      "classification": "financial"
    },
    {
      "name": "benefit3Description",
      "label": "Taxable fringe benefit 3: description",
      "type": "string",
      "required": false,
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 7/10, Benefit 3: 'Description of the benefit:'",
      "validation": {
        "maxLength": 300
      }
    },
    {
      "name": "convictedOfCrimeAbroad",
      "label": "Have you been convicted of a crime in countries other than Finland?",
      "type": "boolean",
      "required": true,
      "description": "The Finnish Immigration Service obtains information on crimes and suspected crimes committed in Finland itself from official registers; this question and section 9.2 concern only crimes/suspected crimes in other countries.",
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 7/10, section 9.1: 'Have you been convicted of a crime in countries other than Finland? ☐ No ☐ Yes'"
    },
    {
      "name": "crimeDescription",
      "label": "Crime",
      "type": "string",
      "required": false,
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 7/10, section 9.1 'Crime:'",
      "validation": {
        "maxLength": 500
      },
      "requiredWhen": {
        "field": "convictedOfCrimeAbroad",
        "equals": true
      },
      "classification": "sensitive-pii"
    },
    {
      "name": "crimeCountry",
      "label": "Country where the crime took place",
      "type": "string",
      "required": false,
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 7/10, section 9.1 'Country where the crime took place:'",
      "validation": {
        "maxLength": 100
      },
      "requiredWhen": {
        "field": "convictedOfCrimeAbroad",
        "equals": true
      },
      "classification": "sensitive-pii"
    },
    {
      "name": "crimeDate",
      "label": "Time when the crime took place",
      "type": "date",
      "required": false,
      "description": "The source PDF splits this date across three separate day/month/year widgets; combined here into a single ISO date field.",
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 7/10, section 9.1: 'Time when the crime took place (dd.mm.yyyy)'",
      "requiredWhen": {
        "field": "convictedOfCrimeAbroad",
        "equals": true
      },
      "classification": "sensitive-pii"
    },
    {
      "name": "crimePunishment",
      "label": "Punishment sentenced for the crime",
      "type": "string",
      "required": false,
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 7/10, section 9.1 'Punishment sentenced for the crime:'",
      "validation": {
        "maxLength": 500
      },
      "requiredWhen": {
        "field": "convictedOfCrimeAbroad",
        "equals": true
      },
      "classification": "sensitive-pii"
    },
    {
      "name": "suspectedOfCrimeAbroad",
      "label": "Are you suspected of committing a crime in countries other than Finland?",
      "type": "boolean",
      "required": true,
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 8/10, section 9.2: 'Are you suspected of committing a crime in countries other than Finland? ☐ No ☐ Yes'"
    },
    {
      "name": "suspectedCrimeDescription",
      "label": "Crime that you are suspected of",
      "type": "string",
      "required": false,
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 8/10, section 9.2 'Crime that you are suspected of:'",
      "validation": {
        "maxLength": 500
      },
      "requiredWhen": {
        "field": "suspectedOfCrimeAbroad",
        "equals": true
      },
      "classification": "sensitive-pii"
    },
    {
      "name": "suspectedCrimeCountry",
      "label": "Country where the suspected crime took place",
      "type": "string",
      "required": false,
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 8/10, section 9.2 'Country where the suspected crime took place:'",
      "validation": {
        "maxLength": 100
      },
      "requiredWhen": {
        "field": "suspectedOfCrimeAbroad",
        "equals": true
      },
      "classification": "sensitive-pii"
    },
    {
      "name": "suspectedCrimeDate",
      "label": "Time when the suspected crime took place",
      "type": "date",
      "required": false,
      "description": "The source PDF splits this date across three separate day/month/year widgets; combined here into a single ISO date field.",
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 8/10, section 9.2: 'Time when the suspected crime took place (dd.mm.yyyy)'",
      "requiredWhen": {
        "field": "suspectedOfCrimeAbroad",
        "equals": true
      },
      "classification": "sensitive-pii"
    },
    {
      "name": "hasOrHadEntryBan",
      "label": "I have or have had an entry ban",
      "type": "boolean",
      "required": true,
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 8/10, section 9.3: 'I have or have had an entry ban. ☐ No ☐ Yes'"
    },
    {
      "name": "entryBanCountry",
      "label": "Country imposing the entry ban",
      "type": "string",
      "required": false,
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 8/10, section 9.3 'Country imposing the entry ban:'",
      "validation": {
        "maxLength": 100
      },
      "requiredWhen": {
        "field": "hasOrHadEntryBan",
        "equals": true
      },
      "classification": "sensitive-pii"
    },
    {
      "name": "entryBanValidPeriod",
      "label": "During which time was/is the entry ban valid?",
      "type": "string",
      "required": false,
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 8/10, section 9.3 'During which time was/is the entry ban valid?'",
      "validation": {
        "maxLength": 300
      },
      "requiredWhen": {
        "field": "hasOrHadEntryBan",
        "equals": true
      },
      "classification": "sensitive-pii"
    },
    {
      "name": "additionalInformation",
      "label": "Additional information for the application",
      "type": "string",
      "required": false,
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 8/10, section 10.1",
      "validation": {
        "maxLength": 2000
      }
    },
    {
      "name": "otherAttachment1Included",
      "label": "Other attachment 1 included",
      "type": "boolean",
      "required": false,
      "description": "The form provides 4 blank rows for any other attachments the applicant wants to name, each with its own checkbox and free-text name field; bounded to 4 rows here, matching the source's own printed row count.",
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 9/10, section 11.1: 'If you have any other attachments, tick the box and name the document:', row 1"
    },
    {
      "name": "otherAttachment1Description",
      "label": "Other attachment 1: name of document",
      "type": "string",
      "required": false,
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 9/10, section 11.1, row 1",
      "validation": {
        "maxLength": 200
      },
      "requiredWhen": {
        "field": "otherAttachment1Included",
        "equals": true
      }
    },
    {
      "name": "otherAttachment2Included",
      "label": "Other attachment 2 included",
      "type": "boolean",
      "required": false,
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 9/10, section 11.1: 'If you have any other attachments, tick the box and name the document:', row 2"
    },
    {
      "name": "otherAttachment2Description",
      "label": "Other attachment 2: name of document",
      "type": "string",
      "required": false,
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 9/10, section 11.1, row 2",
      "validation": {
        "maxLength": 200
      },
      "requiredWhen": {
        "field": "otherAttachment2Included",
        "equals": true
      }
    },
    {
      "name": "otherAttachment3Included",
      "label": "Other attachment 3 included",
      "type": "boolean",
      "required": false,
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 9/10, section 11.1: 'If you have any other attachments, tick the box and name the document:', row 3"
    },
    {
      "name": "otherAttachment3Description",
      "label": "Other attachment 3: name of document",
      "type": "string",
      "required": false,
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 9/10, section 11.1, row 3",
      "validation": {
        "maxLength": 200
      },
      "requiredWhen": {
        "field": "otherAttachment3Included",
        "equals": true
      }
    },
    {
      "name": "otherAttachment4Included",
      "label": "Other attachment 4 included",
      "type": "boolean",
      "required": false,
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 9/10, section 11.1: 'If you have any other attachments, tick the box and name the document:', row 4"
    },
    {
      "name": "otherAttachment4Description",
      "label": "Other attachment 4: name of document",
      "type": "string",
      "required": false,
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 9/10, section 11.1, row 4",
      "validation": {
        "maxLength": 200
      },
      "requiredWhen": {
        "field": "otherAttachment4Included",
        "equals": true
      }
    },
    {
      "name": "signatureDate",
      "label": "Date",
      "type": "date",
      "required": true,
      "description": "The source PDF splits this date across three separate day/month/year widgets; combined here into a single ISO date field.",
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 10/10, section 13 'Date and place'"
    },
    {
      "name": "signaturePlace",
      "label": "Place",
      "type": "string",
      "required": true,
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 10/10, section 13 'Date and place'",
      "validation": {
        "minLength": 1,
        "maxLength": 150
      }
    },
    {
      "name": "signatureNameInBlockLetters",
      "label": "Name in block letters",
      "type": "string",
      "required": true,
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 10/10, section 13 'Name in block letters'",
      "validation": {
        "minLength": 1,
        "maxLength": 200
      },
      "classification": "pii"
    }
  ],
  "documents": [
    {
      "id": "colorCopyOfPassportPages",
      "label": "Colour copies of the passport page containing your personal data and of all passport pages containing markings",
      "category": "identity-document",
      "required": true,
      "belongsTo": "applicant",
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 9/10, section 11.1 checklist"
    },
    {
      "id": "passportPhotoOrRetrievalCode",
      "label": "A passport photo, or a photograph retrieval code, complying with the photo guidelines issued by the police",
      "category": "identity-document",
      "required": true,
      "belongsTo": "applicant",
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 9/10, section 11.1 checklist; see poliisi.fi/en"
    },
    {
      "id": "proofOfLegalStayInCountryOfApplication",
      "label": "A document showing that you are legally staying in the country where you submit your application",
      "category": "supporting-evidence",
      "required": true,
      "belongsTo": "applicant",
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 9/10, section 11.1 checklist; see migri.fi/handling-your-matters-at-a-finnish-mission"
    },
    {
      "id": "formMP1",
      "label": "The form MP 1 (response to possible denial of admittance or stay)",
      "category": "supporting-evidence",
      "required": false,
      "belongsTo": "applicant",
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 9/10, section 11.1 checklist: 'Attach this form only if you already are in Finland and apply for a first residence permit.' See also page 4/10, section 5.1."
    },
    {
      "id": "termsOfEmploymentForm",
      "label": "The form 'Terms of employment', filled in by the employer",
      "category": "supporting-evidence",
      "required": true,
      "belongsTo": "responsible-party",
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 9/10, section 11.1 checklist: 'Your employer must fill in the form \\'Terms of employment\\' to list the terms and conditions of your employment relationship and to confirm that labour market testing has been done.' Not required when the employer holds employer certification (migri.fi/certified-employers), per section 8's own instruction."
    },
    {
      "id": "applicantSignatureDeclaration",
      "label": "Applicant's signature and declaration",
      "category": "attestation",
      "required": true,
      "belongsTo": "applicant",
      "statement": "I am applying for a residence permit in Finland, and I hereby confirm with my signature that the details I have provided on this form and in the attachments are correct. I am aware that providing false personal information or false written documentation to the authorities is a punishable act under law in Finland. Providing false information may result in rejection of the application or withdrawal of an existing permit, removal from the country and an entry ban into the Schengen area.",
      "sourceRef": "OLE_TY1, \"Residence permit application for an employed person ('TTOL')\" — page 10/10, section 13 'Date and signature', declaration paragraph"
    }
  ],
  "crossFieldValidation": [
    {
      "id": "payPeriodToNotBeforePayPeriodFrom",
      "compare": {
        "field": "payPeriodTo",
        "operator": "greaterThanOrEqual",
        "compareTo": "payPeriodFrom"
      }
    }
  ]
}
