{
  "$schema": "https://govschema.org/spec/v0.3/govschema.schema.json",
  "govschemaVersion": "0.3.0",
  "id": "ng/nis/application-for-visa-entry-permit",
  "version": "1.0.0",
  "title": "Nigeria Application Form for Visa/Entry Permit (Form Imm. 22)",
  "description": "Apply for a Nigerian visa/entry permit through the Nigeria Immigration Service (NIS)'s standard \"Form Imm. 22 — Application Form for Visa/Entry Permit\", scoped to embassy/consular use abroad, opening Nigeria's Visa vertical (3 of 6, alongside Business Formation and Taxes; continuing the Nigeria research thread from GOV-2551/GOV-2553). This specimen is confirmed live at three independently operated mirrors as of 2026-07-12, two of them directly re-fetched this cycle: the Embassy of Nigeria in Vietnam's own government domain (nigeriaembassy.org.vn, HTTP 200, application/pdf, 373,872 bytes, matching the issue's own citation exactly) — a simplified 2-page, 25-numbered-question edition, used as this schema's primary citable `source` since it is the only own-government-domain copy — and a Nigerian-Embassy-Washington-DC-letterheaded copy hosted on a third-party visa-services domain (samspassport.com, HTTP 200, application/pdf, 43,156 bytes), a fuller 3-page, 31-numbered-question edition that itself prints the form's official designation \"Form Imm. 22\" and is used here as the base for field coverage per this cycle's scope. A third cited mirror (nigerianvisaservices.com) was also directly re-fetched this cycle and returned a live `application/pdf` response (88,509 bytes) on every attempt; it is not byte-identical to the DC/Washington copy (a separately re-typeset rendering, sha256 differs), but independent text extraction confirms it carries the same \"Form Imm. 22\" content and item numbering, corroborating the DC/Washington edition as NIS's stable standard distributed across missions rather than a single embassy's one-off variant. Both directly-verified editions are flat, print-and-hand-fill specimens (0 AcroForm widgets), completed by hand and mailed to a Nigerian diplomatic mission together with supporting documents and a money-order processing fee. Independent extraction of both editions' full printed text found the two are NOT a strict superset/subset pair as initially characterized: the fuller DC/Imm.22 edition indeed adds substantial content the simplified Vietnam edition omits (number-of-entries, funds available, employment/spouse-in-Nigeria particulars, prior Nigerian-visa history, immigration/criminal/health-history screening, countries lived-in/visited in the last 5 years and 12 months, and the fee/attachments schedule), but the Vietnam edition also independently asks 6 items the DC edition omits entirely (e-mail address, complexion, academic qualifications, source of sponsorship, and a mission-localized \"reference in [country]\" name/address/telephone). This schema models the union: the DC/Imm.22 edition's 31 numbered items supply the base structure (86 of this schema's 93 `fields[]` entries, including three bounded repeating tables — a 3-slot prior-Nigeria-visit table and two 4-slot countries-lived-in/visited tables, per this registry's established bounded-repeating-group convention), plus the Vietnam edition's 6 edition-unique items (modelled as independently optional fields, since a specimen's omission of a question this registry has directly verified another edition asks is not evidence the question is inapplicable). 9 `documents[]` entries capture the photograph requirement (printed on both editions), the DC edition's page-3 attachments-and-fee schedule (original passport, letter of invitation, prepaid return mailer, an online visa-fee payment, a $20 money-order processing fee, an optional $65 expedited-service fee), its under-16 accompanying-child document bundle, and its wet-ink certification statement. GovSchema is independent and is not affiliated with, endorsed by, or operated by the Government of Nigeria, the Nigeria Immigration Service, or any Nigerian diplomatic mission.",
  "status": "draft",
  "jurisdiction": {
    "country": "NG",
    "level": "national"
  },
  "authority": {
    "name": "Nigeria Immigration Service",
    "abbreviation": "NIS",
    "url": "https://immigration.gov.ng"
  },
  "process": {
    "type": "application",
    "language": "en"
  },
  "source": {
    "url": "https://nigeriaembassy.org.vn/wp-content/uploads/2020/11/VISA_FORM-1.pdf",
    "retrievedAt": "2026-07-12",
    "documentRef": "Form Imm. 22 — \"Application Form for Visa/Entry Permit\" (Nigeria Immigration Service), 2-page flat (0 AcroForm widgets) PDF as distributed by the Embassy of the Federal Republic of Nigeria in Vietnam, cross-referenced against a fuller 3-page edition distributed by the Embassy of the Federal Republic of Nigeria in Washington, DC for field-coverage completeness (see `verification.notes` and VERIFICATION.md)."
  },
  "verification": {
    "method": "manual-source-review-v1",
    "lastVerifiedAt": "2026-07-12",
    "verifiedBy": "GovSchema Engineering (Standards Engineer)",
    "nextReviewBy": "2027-01-12",
    "notes": "GovSchema Standard Research cycle GOV-2561, continuing Nigeria's research thread from GOV-2551 (parent research issue) and GOV-2553 (Taxes, 2/6). Independently re-fetched both citable mirrors directly: nigeriaembassy.org.vn (HTTP 200, application/pdf, 373,872 bytes, Last-Modified Sat 21 Nov 2020, matching the issue's own citation exactly) and samspassport.com (HTTP 200, application/pdf, 43,156 bytes, Last-Modified Tue 29 Oct 2019, 3 pages, 31 numbered questions matching the issue's description, and printing the form's own designation \"Form Imm. 22\" at its header). The third cited mirror (nigerianvisaservices.com) was independently re-fetched on a later pass this same cycle (both with and without a browser-like User-Agent) and returned a live `application/pdf` response (88,509 bytes, sha256 8b60aceaaa963eb8ad9690e74613b5cf9118baf6a94af60eb4989b127a2ba544, Last-Modified Sat 30 Sep 2017) each time — the earlier Cloudflare-challenge observation is disclosed in VERIFICATION.md as a transient failure, not a genuine access gate. Its content is not byte-identical to the DC/Washington copy (a separately re-typeset rendering with different character spacing, consistent with OCR/re-layout rather than a raw file copy), but a fresh pdfjs-dist text extraction confirms it carries the same \"Form Imm. 22\" title, item numbering, and full item text as the DC/Washington copy, corroborating it as a third independent distribution of the same underlying NIS form rather than an unrelated document. pdfjs-dist (legacy build, v3) getAnnotations() confirms 0 Widget annotations across both directly-verified editions' pages — flat, print-and-hand-fill forms, consistent with this registry's rw/dgie/visa-application precedent. getTextContent() (position-sorted by transform x/y) was used to read each edition's full printed text directly. Independent side-by-side comparison of the two editions' numbered items found the issue's characterization of the DC edition as a strict superset of the Vietnam edition does not hold exactly: while the DC edition (31 items) does add substantial content the Vietnam edition (25 items) omits, the Vietnam edition also independently asks 6 items the DC edition omits entirely (e-mail address, complexion, academic qualifications, source of sponsorship, and a mission-localized reference-in-country name/address/telephone) — corrected and disclosed in VERIFICATION.md rather than silently adopting the issue's framing. This schema models the union, using the DC edition's 31-item structure (which prints the form's own \"Form Imm. 22\" designation) as the base for 86 of 93 fields[] entries, plus the Vietnam edition's 6 edition-unique items as independently optional fields. Conformance run: 2 valid mock scenarios (0 errors each) and 5 mutation-control fixtures (exactly 1 error each) using a disposable validate_instance.mjs script (not committed) implementing this schema's own required/requiredWhen grammar plus ajv for the static JSON Schema subset — see VERIFICATION.md for the full write-up."
  },
  "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-12"
  },
  "license": "CC-BY-4.0",
  "fields": [
    {
      "name": "surname",
      "label": "Surname (MR/MRS/MISS)",
      "type": "string",
      "required": true,
      "classification": "pii",
      "sourceRef": "DC/Imm.22 item 1: \"Surname (MR/MRS/MISS)\"; Vietnam edition item 1: \"SURNAME\"",
      "validation": { "maxLength": 150 }
    },
    {
      "name": "otherNames",
      "label": "Other Names",
      "type": "string",
      "required": true,
      "classification": "pii",
      "description": "Given/first name(s), as distinguished from the surname on the same numbered row.",
      "sourceRef": "DC/Imm.22 item 1: \"Other Names\"; Vietnam edition item 1: \"FIRST NAME\"",
      "validation": { "maxLength": 150 }
    },
    {
      "name": "formerName",
      "label": "Former name (if any)",
      "type": "string",
      "required": false,
      "classification": "pii",
      "description": "Vietnam-edition-only field, not printed on the DC/Imm.22 edition. Not required: an applicant with no former name has nothing to declare and neither edition provides a separate \"none\" checkbox.",
      "sourceRef": "Vietnam edition item 1 continuation: \"FORMER NAME (if any)\"",
      "validation": { "maxLength": 200 }
    },
    {
      "name": "sex",
      "label": "Sex",
      "type": "enum",
      "required": true,
      "classification": "pii",
      "description": "Neither edition prints more than the binary Male/Female option anywhere on the specimen.",
      "sourceRef": "DC/Imm.22 item 2: \"Sex\"; Vietnam edition item 2: \"SEX\"",
      "validation": { "enum": ["male", "female"] }
    },
    {
      "name": "maritalStatus",
      "label": "Marital Status",
      "type": "enum",
      "required": true,
      "classification": "pii",
      "description": "The DC edition prints only the label \"Marital Status\" with a blank; the enum boundary is taken from the Vietnam edition's more explicit instruction, which spells out the same question's options.",
      "sourceRef": "DC/Imm.22 item 2: \"Marital Status\"; Vietnam edition item 5: \"MARITIAL STATUS (Single, Married, Widowed, Divorced)\"",
      "validation": { "enum": ["single", "married", "widowed", "divorced"] }
    },
    {
      "name": "presentNationality",
      "label": "Present Nationality",
      "type": "string",
      "required": true,
      "classification": "pii",
      "sourceRef": "DC/Imm.22 item 3a: \"Present Nationality\"",
      "validation": { "maxLength": 100 }
    },
    {
      "name": "previousNationality",
      "label": "Previous Nationality",
      "type": "string",
      "required": false,
      "classification": "pii",
      "description": "Not required: an applicant with no former nationality has nothing to declare here.",
      "sourceRef": "DC/Imm.22 item 3b: \"Previous Nationality\"",
      "validation": { "maxLength": 100 }
    },
    {
      "name": "dateOfBirth",
      "label": "Date of Birth",
      "type": "date",
      "required": true,
      "classification": "sensitive-pii",
      "sourceRef": "DC/Imm.22 item 4a: \"Date of Birth (day/month/year)\""
    },
    {
      "name": "placeOfBirth",
      "label": "Place of Birth",
      "type": "string",
      "required": true,
      "classification": "pii",
      "sourceRef": "DC/Imm.22 item 4b: \"Place of Birth\"",
      "validation": { "maxLength": 150 }
    },
    {
      "name": "residentialAddress",
      "label": "Residential Address",
      "type": "string",
      "required": true,
      "classification": "pii",
      "description": "Printed as a two-line blank on the source; modelled as a single free-text field.",
      "sourceRef": "DC/Imm.22 item 5: \"Residential Address\"",
      "validation": { "maxLength": 300 }
    },
    {
      "name": "residentialTelephone",
      "label": "Residential telephone number",
      "type": "string",
      "required": true,
      "classification": "pii",
      "sourceRef": "DC/Imm.22 item 5 continuation: \"Telephone No.\"",
      "validation": { "maxLength": 30 }
    },
    {
      "name": "officeAddress",
      "label": "Office Address",
      "type": "string",
      "required": false,
      "description": "Not required: an applicant without an office (e.g. unemployed, student, retired) has nothing to declare here.",
      "sourceRef": "DC/Imm.22 item 6: \"Office Address\"",
      "validation": { "maxLength": 300 }
    },
    {
      "name": "officeTelephone",
      "label": "Office telephone number",
      "type": "string",
      "required": false,
      "sourceRef": "DC/Imm.22 item 6 continuation: \"Telephone No.\"",
      "validation": { "maxLength": 30 }
    },
    {
      "name": "profession",
      "label": "Profession",
      "type": "string",
      "required": true,
      "sourceRef": "DC/Imm.22 item 7: \"Profession\"",
      "validation": { "maxLength": 150 }
    },
    {
      "name": "armedForcesService",
      "label": "Branches of the Armed Forces served or serving in",
      "type": "string",
      "required": false,
      "description": "Not required: an applicant with no military service has nothing to declare here.",
      "sourceRef": "DC/Imm.22 item 8: \"State what branches of the Armed Forces of your country you have served or are serving in\"",
      "validation": { "maxLength": 200 }
    },
    {
      "name": "armedForcesFrom",
      "label": "Armed Forces service: From",
      "type": "string",
      "required": false,
      "description": "Not machine-gated on armedForcesService since that sibling field is itself optional and genuinely absent for a non-applicable applicant.",
      "sourceRef": "DC/Imm.22 item 8 continuation: \"From\"",
      "validation": { "maxLength": 50 }
    },
    {
      "name": "armedForcesTo",
      "label": "Armed Forces service: to",
      "type": "string",
      "required": false,
      "sourceRef": "DC/Imm.22 item 8 continuation: \"to\"",
      "validation": { "maxLength": 50 }
    },
    {
      "name": "hairColour",
      "label": "Colour of Hair",
      "type": "string",
      "required": true,
      "classification": "pii",
      "sourceRef": "DC/Imm.22 item 9: \"Colour of Hair\"",
      "validation": { "maxLength": 50 }
    },
    {
      "name": "eyeColour",
      "label": "Colour of eyes",
      "type": "string",
      "required": true,
      "classification": "pii",
      "sourceRef": "DC/Imm.22 item 9 continuation: \"Colour of eyes\"",
      "validation": { "maxLength": 50 }
    },
    {
      "name": "height",
      "label": "Height",
      "type": "string",
      "required": true,
      "classification": "pii",
      "sourceRef": "DC/Imm.22 item 9 continuation: \"Height\"",
      "validation": { "maxLength": 30 }
    },
    {
      "name": "complexion",
      "label": "Complexion",
      "type": "string",
      "required": false,
      "classification": "pii",
      "description": "Vietnam-edition-only field, not printed on the DC/Imm.22 edition's equivalent item 9 row.",
      "sourceRef": "Vietnam edition item 10: \"COMPLEXION\"",
      "validation": { "maxLength": 50 }
    },
    {
      "name": "visibleIdentificationMarks",
      "label": "Visible Identification marks",
      "type": "string",
      "required": false,
      "description": "Not required: an applicant with none has nothing to declare and neither edition provides a separate \"none\" checkbox.",
      "sourceRef": "DC/Imm.22 item 10: \"Visible Identification marks\"",
      "validation": { "maxLength": 200 }
    },
    {
      "name": "passportNumber",
      "label": "Passport No.",
      "type": "string",
      "required": true,
      "classification": "sensitive-pii",
      "sourceRef": "DC/Imm.22 item 11: \"Passport No\"",
      "validation": { "maxLength": 30 }
    },
    {
      "name": "passportIssueDate",
      "label": "Date of issue",
      "type": "date",
      "required": true,
      "classification": "sensitive-pii",
      "sourceRef": "DC/Imm.22 item 11 continuation: \"Date of issue\""
    },
    {
      "name": "passportExpiryDate",
      "label": "Date of expiry",
      "type": "date",
      "required": true,
      "classification": "sensitive-pii",
      "sourceRef": "DC/Imm.22 item 11 continuation: \"Date of expiry\""
    },
    {
      "name": "passportPlaceOfIssue",
      "label": "Place of issue",
      "type": "string",
      "required": true,
      "classification": "sensitive-pii",
      "sourceRef": "DC/Imm.22 item 11 continuation: \"Place of issue\"",
      "validation": { "maxLength": 100 }
    },
    {
      "name": "passportIssuingGovernment",
      "label": "Issuing Government",
      "type": "string",
      "required": true,
      "sourceRef": "DC/Imm.22 item 11 continuation: \"issuing Government\"",
      "validation": { "maxLength": 100 }
    },
    {
      "name": "purposeOfJourney",
      "label": "Purpose of journey",
      "type": "string",
      "required": true,
      "description": "The source asks for \"full details\".",
      "sourceRef": "DC/Imm.22 item 12: \"Purpose of journey (please give full details)\"",
      "validation": { "maxLength": 500 }
    },
    {
      "name": "numberOfEntriesRequired",
      "label": "Number of entries required",
      "type": "enum",
      "required": true,
      "sourceRef": "DC/Imm.22 item 13: \"Number of entries required\" — \"A. Single\" / \"B. Multiple\"",
      "validation": { "enum": ["single", "multiple"] }
    },
    {
      "name": "intendedDurationOfStay",
      "label": "Intended duration of stay",
      "type": "string",
      "required": true,
      "sourceRef": "DC/Imm.22 item 14: \"Intended duration of stay\"",
      "validation": { "maxLength": 50 }
    },
    {
      "name": "proposedDateOfTravel",
      "label": "Proposed date of travel",
      "type": "date",
      "required": true,
      "sourceRef": "DC/Imm.22 item 15a: \"Proposed date of travel (day/month/year)\""
    },
    {
      "name": "modeOfTravelToNigeria",
      "label": "Mode of travel to Nigeria",
      "type": "string",
      "required": true,
      "sourceRef": "DC/Imm.22 item 15b: \"Mode of travel to Nigeria\"",
      "validation": { "maxLength": 100 }
    },
    {
      "name": "fundsAvailableForTrip",
      "label": "Funds available for the trip",
      "type": "string",
      "required": true,
      "classification": "financial",
      "description": "Modelled as free text since the source prints no currency instruction beyond \"how much money\".",
      "sourceRef": "DC/Imm.22 item 16: \"Indicate how much money is available for your trip\"",
      "validation": { "maxLength": 100 }
    },
    {
      "name": "employmentEmployerName",
      "label": "Employment reason: Name of Employer(s)",
      "type": "string",
      "required": false,
      "description": "Applicable only if the reason for journey (item 12) is employment; not machine-gated since purposeOfJourney is free text with no reliable machine match against \"employment\".",
      "sourceRef": "DC/Imm.22 item 17a: \"Name of Employers\"",
      "validation": { "maxLength": 200 }
    },
    {
      "name": "employmentPostToBeOccupied",
      "label": "Employment reason: Post to be occupied",
      "type": "string",
      "required": false,
      "sourceRef": "DC/Imm.22 item 17b: \"Post to be occupied\"",
      "validation": { "maxLength": 150 }
    },
    {
      "name": "employmentJobDescription",
      "label": "Employment reason: Description of job",
      "type": "string",
      "required": false,
      "sourceRef": "DC/Imm.22 item 17c: \"Give a full description of job\"",
      "validation": { "maxLength": 400 }
    },
    {
      "name": "spouseParentsEmploymentParticulars",
      "label": "Employment of spouse/parents in Nigeria",
      "type": "string",
      "required": false,
      "description": "Applicable only if joining a spouse, parents, or relatives; not machine-gated (no dedicated eligibility field for this pathway on either edition).",
      "sourceRef": "DC/Imm.22 item 18: \"Persons joining spouses, parents or relatives, should give full particulars of the employment of parents or spouse in Nigeria including the address where they reside\"",
      "validation": { "maxLength": 400 }
    },
    {
      "name": "spouseParentsDurationInNigeria",
      "label": "How long has/have your spouse/parents been in Nigeria",
      "type": "string",
      "required": false,
      "sourceRef": "DC/Imm.22 item 19: \"How long has/have your spouse/parents been in Nigeria\"",
      "validation": { "maxLength": 100 }
    },
    {
      "name": "intendedAddressInNigeria",
      "label": "Intended address in Nigeria",
      "type": "string",
      "required": true,
      "classification": "pii",
      "description": "The source explicitly excludes a P.O. Box.",
      "sourceRef": "DC/Imm.22 item 20: \"Your intended address in Nigeria (NOT P.O. BOX)\"",
      "validation": { "maxLength": 300 }
    },
    {
      "name": "previousNigerianVisaApplied",
      "label": "Have you ever applied for a Nigerian visa before?",
      "type": "enum",
      "required": true,
      "sourceRef": "DC/Imm.22 item 21: \"Have you ever applied for a Nigerian visa before? Yes/No\"",
      "validation": { "enum": ["yes", "no"] }
    },
    {
      "name": "previousVisaApplicationLocation",
      "label": "Where did you apply for the visa?",
      "type": "string",
      "required": false,
      "description": "Safe to gate on previousNigerianVisaApplied since that field is itself always required/present.",
      "sourceRef": "DC/Imm.22 item 22: \"Where did you apply for the visa?\"",
      "requiredWhen": { "field": "previousNigerianVisaApplied", "equals": "yes" },
      "validation": { "maxLength": 150 }
    },
    {
      "name": "previousVisaOutcome",
      "label": "Was the visa granted or rejected?",
      "type": "enum",
      "required": false,
      "sourceRef": "DC/Imm.22 item 23: \"Indicate whether visa was granted or rejected\"",
      "requiredWhen": { "field": "previousNigerianVisaApplied", "equals": "yes" },
      "validation": { "enum": ["granted", "rejected"] }
    },
    {
      "name": "previousVisaRejectionReason",
      "label": "Reason if visa was rejected",
      "type": "string",
      "required": false,
      "description": "Gated on previousVisaOutcome equalling 'rejected'; the equals comparison naturally evaluates false (not required) when previousVisaOutcome is itself absent, so this is safe even though the gating field is optional.",
      "sourceRef": "DC/Imm.22 item 24: \"Give reason if visa was rejected\"",
      "requiredWhen": { "field": "previousVisaOutcome", "equals": "rejected" },
      "validation": { "maxLength": 300 }
    },
    {
      "name": "previouslyVisitedNigeria",
      "label": "Have you ever visited Nigeria?",
      "type": "enum",
      "required": true,
      "sourceRef": "DC/Imm.22 item 25: \"Have you ever visited Nigeria? Yes/No\"",
      "validation": { "enum": ["yes", "no"] }
    },
    {
      "name": "purposeOfPreviousVisit",
      "label": "Purpose of previous visit",
      "type": "enum",
      "required": false,
      "sourceRef": "DC/Imm.22 item 26: \"If yes, was it for:\" — \"i. Tourism/Visit\" / \"ii. Business\" / \"iii. Temporary Employment\" / \"iv. Residency\" / \"v. Transit\"",
      "requiredWhen": { "field": "previouslyVisitedNigeria", "equals": "yes" },
      "validation": { "enum": ["tourism_visit", "business", "temporary_employment", "residency", "transit"] }
    },
    {
      "name": "previousVisit1From",
      "label": "Previous visit 1: From",
      "type": "string",
      "required": false,
      "description": "DC/Imm.22 item 27 prints a bounded 3-row table (rows i-iii), not an open-ended list; flattened here to previousVisit1..3, matching this registry's bounded-repeating-group convention.",
      "sourceRef": "DC/Imm.22 item 27, row i: \"From\"",
      "validation": { "maxLength": 50 }
    },
    {
      "name": "previousVisit1To",
      "label": "Previous visit 1: To",
      "type": "string",
      "required": false,
      "sourceRef": "DC/Imm.22 item 27, row i: \"To\"",
      "validation": { "maxLength": 50 }
    },
    {
      "name": "previousVisit1Address",
      "label": "Previous visit 1: Address stayed",
      "type": "string",
      "required": false,
      "classification": "pii",
      "sourceRef": "DC/Imm.22 item 27, row i: \"Address\"",
      "validation": { "maxLength": 200 }
    },
    {
      "name": "previousVisit2From",
      "label": "Previous visit 2: From",
      "type": "string",
      "required": false,
      "sourceRef": "DC/Imm.22 item 27, row ii: \"From\"",
      "validation": { "maxLength": 50 }
    },
    {
      "name": "previousVisit2To",
      "label": "Previous visit 2: To",
      "type": "string",
      "required": false,
      "sourceRef": "DC/Imm.22 item 27, row ii: \"To\"",
      "validation": { "maxLength": 50 }
    },
    {
      "name": "previousVisit2Address",
      "label": "Previous visit 2: Address stayed",
      "type": "string",
      "required": false,
      "classification": "pii",
      "sourceRef": "DC/Imm.22 item 27, row ii: \"Address\"",
      "validation": { "maxLength": 200 }
    },
    {
      "name": "previousVisit3From",
      "label": "Previous visit 3: From",
      "type": "string",
      "required": false,
      "sourceRef": "DC/Imm.22 item 27, row iii: \"From\"",
      "validation": { "maxLength": 50 }
    },
    {
      "name": "previousVisit3To",
      "label": "Previous visit 3: To",
      "type": "string",
      "required": false,
      "sourceRef": "DC/Imm.22 item 27, row iii: \"To\"",
      "validation": { "maxLength": 50 }
    },
    {
      "name": "previousVisit3Address",
      "label": "Previous visit 3: Address stayed",
      "type": "string",
      "required": false,
      "classification": "pii",
      "sourceRef": "DC/Imm.22 item 27, row iii: \"Address\"",
      "validation": { "maxLength": 200 }
    },
    {
      "name": "yearsLivedInApplyingCountry",
      "label": "How long have you lived in the country where you are applying?",
      "type": "string",
      "required": true,
      "sourceRef": "DC/Imm.22 item 28: \"How long have you lived in the country where you are applying for visa/entry permit?\"",
      "validation": { "maxLength": 100 }
    },
    {
      "name": "everInfectedContagiousDiseaseOrMentalIllness",
      "label": "Ever infected by a contagious disease or suffered serious mental illness?",
      "type": "enum",
      "required": true,
      "classification": "health",
      "sourceRef": "DC/Imm.22 item 29a: \"Been infected by any contagious disease (e.g. Tuberculosis) or suffered serious mental illness? Yes/No\"",
      "validation": { "enum": ["yes", "no"] }
    },
    {
      "name": "everArrestedOrConvicted",
      "label": "Ever arrested or convicted for any offence or crime?",
      "type": "enum",
      "required": true,
      "sourceRef": "DC/Imm.22 item 29b: \"Been arrested or convicted for any offence or crime even though subject of pardon, arrested or other such legal action? Yes/No\"",
      "validation": { "enum": ["yes", "no"] }
    },
    {
      "name": "everInvolvedNarcoticActivities",
      "label": "Ever involved in narcotic activities?",
      "type": "enum",
      "required": true,
      "sourceRef": "DC/Imm.22 item 29c: \"Been involved in narcotic activities? Yes/No\"",
      "validation": { "enum": ["yes", "no"] }
    },
    {
      "name": "everDeported",
      "label": "Ever deported?",
      "type": "enum",
      "required": true,
      "sourceRef": "DC/Imm.22 item 29d: \"Been deported? Yes/No\"",
      "validation": { "enum": ["yes", "no"] }
    },
    {
      "name": "deportedFromCountry",
      "label": "Deported from which country?",
      "type": "string",
      "required": false,
      "sourceRef": "DC/Imm.22 item 29d continuation: \"if so, from which country?\"",
      "requiredWhen": { "field": "everDeported", "equals": "yes" },
      "validation": { "maxLength": 100 }
    },
    {
      "name": "everSoughtVisaByMisrepresentationOrFraud",
      "label": "Ever sought to obtain a visa by misrepresentation or fraud?",
      "type": "enum",
      "required": true,
      "sourceRef": "DC/Imm.22 item 29e: \"Sought to obtain a visa by misrepresentation or fraud? Yes/No\"",
      "validation": { "enum": ["yes", "no"] }
    },
    {
      "name": "everTestedPositiveHivAids",
      "label": "Ever tested positive for HIV/AIDS?",
      "type": "enum",
      "required": true,
      "classification": "health",
      "description": "Faithfully modelled from the source's own printed question per this standard's source-of-truth-fidelity principle, not a GovSchema-invented field.",
      "sourceRef": "DC/Imm.22 item 29f: \"Tested positive for HIV/AIDS? If yes, please state status\"",
      "validation": { "enum": ["yes", "no"] }
    },
    {
      "name": "hivStatusDetails",
      "label": "HIV/AIDS status details",
      "type": "string",
      "required": false,
      "classification": "health",
      "sourceRef": "DC/Imm.22 item 29f continuation: \"please state status\"",
      "requiredWhen": { "field": "everTestedPositiveHivAids", "equals": "yes" },
      "validation": { "maxLength": 200 }
    },
    {
      "name": "countryLived1Country",
      "label": "Country lived in (last 5 years), row 1: Country",
      "type": "string",
      "required": false,
      "description": "DC/Imm.22 item 30 prints a bounded 4-row table, not an open-ended list; flattened here to countryLived1..4, matching this registry's bounded-repeating-group convention. Not required: an applicant who has lived in fewer than 4 countries in the last 5 years leaves the remaining rows blank.",
      "sourceRef": "DC/Imm.22 item 30, row 1: \"Country\"",
      "validation": { "maxLength": 100 }
    },
    {
      "name": "countryLived1City",
      "label": "Country lived in (last 5 years), row 1: City",
      "type": "string",
      "required": false,
      "sourceRef": "DC/Imm.22 item 30, row 1: \"City\"",
      "validation": { "maxLength": 100 }
    },
    {
      "name": "countryLived1Date",
      "label": "Country lived in (last 5 years), row 1: Date",
      "type": "string",
      "required": false,
      "sourceRef": "DC/Imm.22 item 30, row 1: \"Date\"",
      "validation": { "maxLength": 50 }
    },
    {
      "name": "countryLived2Country",
      "label": "Country lived in (last 5 years), row 2: Country",
      "type": "string",
      "required": false,
      "sourceRef": "DC/Imm.22 item 30, row 2: \"Country\"",
      "validation": { "maxLength": 100 }
    },
    {
      "name": "countryLived2City",
      "label": "Country lived in (last 5 years), row 2: City",
      "type": "string",
      "required": false,
      "sourceRef": "DC/Imm.22 item 30, row 2: \"City\"",
      "validation": { "maxLength": 100 }
    },
    {
      "name": "countryLived2Date",
      "label": "Country lived in (last 5 years), row 2: Date",
      "type": "string",
      "required": false,
      "sourceRef": "DC/Imm.22 item 30, row 2: \"Date\"",
      "validation": { "maxLength": 50 }
    },
    {
      "name": "countryLived3Country",
      "label": "Country lived in (last 5 years), row 3: Country",
      "type": "string",
      "required": false,
      "sourceRef": "DC/Imm.22 item 30, row 3: \"Country\"",
      "validation": { "maxLength": 100 }
    },
    {
      "name": "countryLived3City",
      "label": "Country lived in (last 5 years), row 3: City",
      "type": "string",
      "required": false,
      "sourceRef": "DC/Imm.22 item 30, row 3: \"City\"",
      "validation": { "maxLength": 100 }
    },
    {
      "name": "countryLived3Date",
      "label": "Country lived in (last 5 years), row 3: Date",
      "type": "string",
      "required": false,
      "sourceRef": "DC/Imm.22 item 30, row 3: \"Date\"",
      "validation": { "maxLength": 50 }
    },
    {
      "name": "countryLived4Country",
      "label": "Country lived in (last 5 years), row 4: Country",
      "type": "string",
      "required": false,
      "sourceRef": "DC/Imm.22 item 30, row 4: \"Country\"",
      "validation": { "maxLength": 100 }
    },
    {
      "name": "countryLived4City",
      "label": "Country lived in (last 5 years), row 4: City",
      "type": "string",
      "required": false,
      "sourceRef": "DC/Imm.22 item 30, row 4: \"City\"",
      "validation": { "maxLength": 100 }
    },
    {
      "name": "countryLived4Date",
      "label": "Country lived in (last 5 years), row 4: Date",
      "type": "string",
      "required": false,
      "sourceRef": "DC/Imm.22 item 30, row 4: \"Date\"",
      "validation": { "maxLength": 50 }
    },
    {
      "name": "countryVisited1Country",
      "label": "Country visited (last 12 months), row 1: Country",
      "type": "string",
      "required": false,
      "description": "DC/Imm.22 item 31 prints a second bounded 4-row table, flattened here to countryVisited1..4, matching this registry's bounded-repeating-group convention.",
      "sourceRef": "DC/Imm.22 item 31, row 1: \"Country\"",
      "validation": { "maxLength": 100 }
    },
    {
      "name": "countryVisited1City",
      "label": "Country visited (last 12 months), row 1: City",
      "type": "string",
      "required": false,
      "sourceRef": "DC/Imm.22 item 31, row 1: \"City\"",
      "validation": { "maxLength": 100 }
    },
    {
      "name": "countryVisited1Date",
      "label": "Country visited (last 12 months), row 1: Date",
      "type": "string",
      "required": false,
      "sourceRef": "DC/Imm.22 item 31, row 1: \"Date\"",
      "validation": { "maxLength": 50 }
    },
    {
      "name": "countryVisited2Country",
      "label": "Country visited (last 12 months), row 2: Country",
      "type": "string",
      "required": false,
      "sourceRef": "DC/Imm.22 item 31, row 2: \"Country\"",
      "validation": { "maxLength": 100 }
    },
    {
      "name": "countryVisited2City",
      "label": "Country visited (last 12 months), row 2: City",
      "type": "string",
      "required": false,
      "sourceRef": "DC/Imm.22 item 31, row 2: \"City\"",
      "validation": { "maxLength": 100 }
    },
    {
      "name": "countryVisited2Date",
      "label": "Country visited (last 12 months), row 2: Date",
      "type": "string",
      "required": false,
      "sourceRef": "DC/Imm.22 item 31, row 2: \"Date\"",
      "validation": { "maxLength": 50 }
    },
    {
      "name": "countryVisited3Country",
      "label": "Country visited (last 12 months), row 3: Country",
      "type": "string",
      "required": false,
      "sourceRef": "DC/Imm.22 item 31, row 3: \"Country\"",
      "validation": { "maxLength": 100 }
    },
    {
      "name": "countryVisited3City",
      "label": "Country visited (last 12 months), row 3: City",
      "type": "string",
      "required": false,
      "sourceRef": "DC/Imm.22 item 31, row 3: \"City\"",
      "validation": { "maxLength": 100 }
    },
    {
      "name": "countryVisited3Date",
      "label": "Country visited (last 12 months), row 3: Date",
      "type": "string",
      "required": false,
      "sourceRef": "DC/Imm.22 item 31, row 3: \"Date\"",
      "validation": { "maxLength": 50 }
    },
    {
      "name": "countryVisited4Country",
      "label": "Country visited (last 12 months), row 4: Country",
      "type": "string",
      "required": false,
      "sourceRef": "DC/Imm.22 item 31, row 4: \"Country\"",
      "validation": { "maxLength": 100 }
    },
    {
      "name": "countryVisited4City",
      "label": "Country visited (last 12 months), row 4: City",
      "type": "string",
      "required": false,
      "sourceRef": "DC/Imm.22 item 31, row 4: \"City\"",
      "validation": { "maxLength": 100 }
    },
    {
      "name": "countryVisited4Date",
      "label": "Country visited (last 12 months), row 4: Date",
      "type": "string",
      "required": false,
      "sourceRef": "DC/Imm.22 item 31, row 4: \"Date\"",
      "validation": { "maxLength": 50 }
    },
    {
      "name": "emailAddress",
      "label": "E-mail address",
      "type": "string",
      "required": false,
      "classification": "pii",
      "description": "Vietnam-edition-only field, not printed on the DC/Imm.22 edition.",
      "sourceRef": "Vietnam edition item 4: \"EMAIL ADDRESS\"",
      "validation": { "pattern": "^[^@\\s]+@[^@\\s]+\\.[^@\\s]+$", "maxLength": 150 }
    },
    {
      "name": "academicQualifications",
      "label": "Academic qualifications",
      "type": "string",
      "required": false,
      "description": "Vietnam-edition-only field, not printed on the DC/Imm.22 edition.",
      "sourceRef": "Vietnam edition item 21: \"ACADEMIC QUALIFICATIONS\"",
      "validation": { "maxLength": 200 }
    },
    {
      "name": "sourceOfSponsorship",
      "label": "Source of sponsorship for proposed visit",
      "type": "string",
      "required": false,
      "classification": "financial",
      "description": "Vietnam-edition-only field, not printed on the DC/Imm.22 edition.",
      "sourceRef": "Vietnam edition item 25: \"SOURCE OF SPONSORSHIP FOR PROPOSED VISIT TO NIGERIA\"",
      "validation": { "maxLength": 200 }
    },
    {
      "name": "missionCountryReferenceNameAddress",
      "label": "Reference in country of application: Name and Address",
      "type": "string",
      "required": false,
      "classification": "pii",
      "description": "Vietnam-edition-only field, mission-localized: the Vietnam specimen prints \"REFERENCE IN VIETNAM\", naming the mission's own host country; other missions' editions of this same item would substitute their own country name. Not printed on the DC/Imm.22 edition.",
      "sourceRef": "Vietnam edition item 24: \"REFERENCE IN VIETNAM (Name and Address of people who maybe be contacted when necessary)\"",
      "validation": { "maxLength": 300 }
    },
    {
      "name": "missionCountryReferenceTelephone",
      "label": "Reference in country of application: Telephone No.",
      "type": "string",
      "required": false,
      "sourceRef": "Vietnam edition item 24 continuation: \"TELEPHONE NO\"",
      "validation": { "maxLength": 30 }
    },
    {
      "name": "signatureDate",
      "label": "Signature date",
      "type": "date",
      "required": true,
      "sourceRef": "DC/Imm.22, page 3: \"Date\" beside the (unwidgeted) signature line; Vietnam edition, page 2: \"DATE\" beside the signature line"
    }
  ],
  "documents": [
    {
      "id": "applicantPhoto",
      "label": "Photograph",
      "category": "supporting-evidence",
      "required": true,
      "belongsTo": "applicant",
      "constraints": {
        "mediaTypes": ["image/jpeg", "image/png"]
      },
      "sourceRef": "Both editions, page 1, right margin: \"PHOTOGRAPH\"; DC/Imm.22 page 3 attachments list specifies \"colored passport photo showing full face on white background\""
    },
    {
      "id": "originalPassport",
      "label": "Original passport",
      "category": "identity-document",
      "required": true,
      "belongsTo": "applicant",
      "sourceRef": "DC/Imm.22, page 3: \"Please attach original passport\""
    },
    {
      "id": "letterOfInvitationFromNigeria",
      "label": "Letter of invitation from Nigeria",
      "category": "supporting-evidence",
      "required": true,
      "belongsTo": "applicant",
      "sourceRef": "DC/Imm.22, page 3: \"letter of invitation from Nigeria\""
    },
    {
      "id": "returnPrepaidMailer",
      "label": "Return prepaid mailer (Fedex, DHL, UPS, or Express mail)",
      "category": "supporting-evidence",
      "required": true,
      "belongsTo": "applicant",
      "handling": "do-not-attach-envelope-and-stamp",
      "sourceRef": "DC/Imm.22, page 3: \"return prepaid Fedex, DHL, UPS, or Express mail, if applying by mail, DO NOT ATTACH ENVELOPE AND STAMP\""
    },
    {
      "id": "childUnder16Requirements",
      "label": "Requirements for children under sixteen (birth certificate, 1 passport photograph, signed parental consent letter, copies of parents' passports/valid ID)",
      "category": "supporting-evidence",
      "required": false,
      "belongsTo": "dependent",
      "sourceRef": "DC/Imm.22, page 3: \"REQUIREMENTS FOR CHILDREN UNDER SIXTEEN: Copy of birth certificate of child, 1 passport photograph, signed letter of consent by both parents and copies of the parents' passports (bio-data page) or valid ID MUST accompany the application.\" Applicable only when the applicant is under 16; not machine-gated (this schema has no dedicated applicant-is-a-minor eligibility field)."
    },
    {
      "id": "onlineVisaFeePayment",
      "label": "Online visa fee payment",
      "category": "payment",
      "required": true,
      "belongsTo": "applicant",
      "methods": ["online-portal"],
      "sourceRef": "DC/Imm.22, page 3: \"VISA Fees are to be paid through the Nigeria immigration Website at WWW.immigration.gov.ng.\""
    },
    {
      "id": "processingFeeMoneyOrder",
      "label": "Processing fee (money order)",
      "category": "payment",
      "required": true,
      "belongsTo": "applicant",
      "amount": { "currency": "USD", "value": 20 },
      "methods": ["money-order"],
      "sourceRef": "DC/Imm.22, page 3: \"Once paid, print out the form and mail to the Embassy with a PROCESSING FEE of $20.00 in money order made out to the Embassy of Nigeria.\""
    },
    {
      "id": "expeditedProcessingFeeMoneyOrder",
      "label": "Expedited service fee (money order)",
      "category": "payment",
      "required": false,
      "belongsTo": "applicant",
      "amount": { "currency": "USD", "value": 65 },
      "methods": ["money-order"],
      "sourceRef": "DC/Imm.22, page 3: \"If expedited service is required, an additional fee of $65.00 in money order made out to the Nigerian Embassy should be attached.\""
    },
    {
      "id": "applicationCertification",
      "label": "Certification of compliance with immigration laws",
      "category": "attestation",
      "required": true,
      "belongsTo": "applicant",
      "statement": "I understand that I will be required to comply with the Immigration/Alien and other laws governing entry of Immigration into the country for which I now apply for Visa/Entry Permit.",
      "sourceRef": "DC/Imm.22, page 3, beside the (unwidgeted) signature line. The Vietnam edition prints an equivalent but differently worded statement: \"I hereby undertake to comply with the immigration and other laws governing the entry of immigrants into Nigeria to which I now apply for entry visa / permit.\""
    }
  ]
}
