{
  "$schema": "https://govschema.org/spec/v0.3/govschema.schema.json",
  "govschemaVersion": "0.3.0",
  "id": "us/uscis/permanent-resident-card-replacement-i90",
  "version": "1.2.0",
  "title": "United States Permanent Resident Card (Green Card) Renewal/Replacement (Form I-90)",
  "description": "Renew or replace a lawful permanent resident's Permanent Resident Card (\"Green Card\") using Form I-90 (Application to Replace Permanent Resident Card): expired or expiring, lost/stolen/destroyed, never received, mutilated, incorrect due to USCIS error, or after a legal name/biographic change. Distinct from us/uscis/naturalization-n400, which addresses citizenship eligibility, not card renewal for an existing permanent resident. It does not submit the application; the live U.S. Citizenship and Immigration Services (USCIS) source is always authoritative (see VERIFICATION.md).",
  "status": "draft",
  "jurisdiction": { "country": "US", "level": "national" },
  "authority": {
    "name": "U.S. Citizenship and Immigration Services",
    "abbreviation": "USCIS",
    "url": "https://www.uscis.gov/i-90"
  },
  "process": { "type": "renewal", "language": "en-US" },
  "source": {
    "url": "https://www.uscis.gov/i-90",
    "retrievedAt": "2026-07-01",
    "documentRef": "Form I-90 (Edition 01/20/25)"
  },
  "verification": {
    "method": "manual-source-review-v1",
    "lastVerifiedAt": "2026-07-01",
    "verifiedBy": "GovSchema Engineering",
    "nextReviewBy": "2027-01-01",
    "notes": "Source-derived reference schema transcribed field-by-field from the live Form I-90 PDF at uscis.gov (fetched directly, no access block). All 7 pages extracted as clean, legible text and transcribed field-by-field from that output. Not a time-versioned/edition form: a Green Card replacement is a one-time filing per triggering event (expiry, loss, name change, etc.), not filed 'for' a recurring period, so it is authored at the plain (non-edition) registry path per the GSP-0005 §2 coexistence test. The item-number sequence in Part 3 (height/weight, items 6-9) could not be unambiguously reconstructed from the extracted PDF text layout; see VERIFICATION.md. Status remains 'draft' pending independent field-by-field source review by a second reviewer."
  },
  "license": "CC-BY-4.0",
  "fields": [
    {
      "name": "alienRegistrationNumber",
      "label": "Alien Registration Number (A-Number)",
      "type": "string",
      "classification": "sensitive-pii",
      "required": false,
      "description": "Personal identifier; handle as sensitive data. Digits only (the form prefixes a printed \"A-\"); leave blank if none has been assigned.",
      "sourceRef": "Form I-90 Part 1, item 1",
      "validation": { "pattern": "^[0-9]{7,9}$" }
    },
    {
      "name": "uscisOnlineAccountNumber",
      "label": "USCIS Online Account Number (if any)",
      "type": "string",
      "required": false,
      "description": "Personal identifier; handle as sensitive data.",
      "sourceRef": "Form I-90 Part 1, item 2",
      "validation": { "maxLength": 20 }
    },
    {
      "name": "currentFamilyName",
      "label": "Your full name — family name (last name)",
      "type": "string",
      "required": true,
      "description": "Personal identifier; handle as sensitive data. The replacement card will be issued in this name.",
      "sourceRef": "Form I-90 Part 1, item 3.a",
      "validation": { "minLength": 1, "maxLength": 100 }
    },
    {
      "name": "currentGivenName",
      "label": "Your full name — given name (first name)",
      "type": "string",
      "required": true,
      "description": "Personal identifier; handle as sensitive data.",
      "sourceRef": "Form I-90 Part 1, item 3.b",
      "validation": { "minLength": 1, "maxLength": 100 }
    },
    {
      "name": "currentMiddleName",
      "label": "Your full name — middle name",
      "type": "string",
      "required": false,
      "description": "Personal identifier; handle as sensitive data.",
      "sourceRef": "Form I-90 Part 1, item 3.c",
      "validation": { "maxLength": 100 }
    },
    {
      "name": "nameLegallyChanged",
      "label": "Has your name legally changed since the issuance of your Permanent Resident Card?",
      "type": "enum",
      "required": true,
      "description": "If yes, give the name exactly as printed on the existing card (previousFamilyName/previousGivenName/previousMiddleName) and attach evidence of the legal name change. \"N/A\" applies if the previous card was never received.",
      "sourceRef": "Form I-90 Part 1, item 4",
      "validation": { "enum": ["yes", "no", "not_applicable_never_received_previous_card"] }
    },
    {
      "name": "previousFamilyName",
      "label": "Name as printed on your current Permanent Resident Card — family name (last name)",
      "type": "string",
      "required": false,
      "description": "Personal identifier; handle as sensitive data. Required when nameLegallyChanged is 'yes'. Attach evidence of the legal name change with the application.",
      "sourceRef": "Form I-90 Part 1, item 5.a",
      "validation": { "maxLength": 100 }
    },
    {
      "name": "previousGivenName",
      "label": "Name as printed on your current Permanent Resident Card — given name (first name)",
      "type": "string",
      "required": false,
      "description": "Personal identifier; handle as sensitive data. Required when nameLegallyChanged is 'yes'.",
      "sourceRef": "Form I-90 Part 1, item 5.b",
      "validation": { "maxLength": 100 }
    },
    {
      "name": "previousMiddleName",
      "label": "Name as printed on your current Permanent Resident Card — middle name",
      "type": "string",
      "required": false,
      "description": "Personal identifier; handle as sensitive data.",
      "sourceRef": "Form I-90 Part 1, item 5.c",
      "validation": { "maxLength": 100 }
    },
    {
      "name": "mailingAddressInCareOfName",
      "label": "Mailing address — in care of name",
      "type": "string",
      "required": false,
      "description": "If applicable.",
      "sourceRef": "Form I-90 Part 1, item 6.a",
      "validation": { "maxLength": 100 }
    },
    {
      "name": "mailingAddressLine1",
      "label": "Mailing address — street number and name",
      "type": "string",
      "required": true,
      "description": "Address where USCIS will send correspondence and the replacement card.",
      "sourceRef": "Form I-90 Part 1, item 6.b",
      "validation": { "minLength": 1, "maxLength": 120 }
    },
    {
      "name": "mailingAddressApt",
      "label": "Mailing address — apartment/floor/suite",
      "type": "string",
      "required": false,
      "description": "If applicable.",
      "sourceRef": "Form I-90 Part 1, item 6.c",
      "validation": { "maxLength": 20 }
    },
    {
      "name": "mailingAddressCity",
      "label": "Mailing address — city or town",
      "type": "string",
      "required": true,
      "description": "City component of the address.",
      "sourceRef": "Form I-90 Part 1, item 6.d",
      "validation": { "minLength": 1, "maxLength": 80 }
    },
    {
      "name": "mailingAddressState",
      "label": "Mailing address — state",
      "type": "string",
      "required": false,
      "description": "Required for a U.S. mailing address; leave blank for a foreign address (use mailingAddressProvince instead).",
      "sourceRef": "Form I-90 Part 1, item 6.e",
      "validation": { "maxLength": 60 }
    },
    {
      "name": "mailingAddressZipCode",
      "label": "Mailing address — ZIP code",
      "type": "string",
      "required": false,
      "description": "Required for a U.S. mailing address.",
      "sourceRef": "Form I-90 Part 1, item 6.f",
      "validation": { "maxLength": 15 }
    },
    {
      "name": "mailingAddressProvince",
      "label": "Mailing address — province",
      "type": "string",
      "required": false,
      "description": "For a foreign mailing address.",
      "sourceRef": "Form I-90 Part 1, item 6.g",
      "validation": { "maxLength": 60 }
    },
    {
      "name": "mailingAddressPostalCode",
      "label": "Mailing address — postal code",
      "type": "string",
      "required": false,
      "description": "For a foreign mailing address.",
      "sourceRef": "Form I-90 Part 1, item 6.h",
      "validation": { "maxLength": 15 }
    },
    {
      "name": "mailingAddressCountry",
      "label": "Mailing address — country",
      "type": "string",
      "required": true,
      "description": "Country component of the mailing address.",
      "sourceRef": "Form I-90 Part 1, item 6.i",
      "validation": { "minLength": 1, "maxLength": 60 }
    },
    {
      "name": "physicalAddressDiffersFromMailing",
      "label": "Is your physical address different from your mailing address?",
      "type": "boolean",
      "required": false,
      "description": "If true, give the physicalAddress* fields. Not itself a numbered form item; inferred from the form's \"provide this information only if different than mailing address\" instruction.",
      "sourceRef": "Form I-90 Part 1, item 7 preamble"
    },
    {
      "name": "physicalAddressLine1",
      "label": "Physical address — street number and name",
      "type": "string",
      "required": false,
      "description": "Required when physicalAddressDiffersFromMailing is true.",
      "sourceRef": "Form I-90 Part 1, item 7.a",
      "validation": { "maxLength": 120 }
    },
    {
      "name": "physicalAddressApt",
      "label": "Physical address — apartment/floor/suite",
      "type": "string",
      "required": false,
      "description": "If applicable.",
      "sourceRef": "Form I-90 Part 1, item 7.b",
      "validation": { "maxLength": 20 }
    },
    {
      "name": "physicalAddressCity",
      "label": "Physical address — city or town",
      "type": "string",
      "required": false,
      "description": "Required when physicalAddressDiffersFromMailing is true.",
      "sourceRef": "Form I-90 Part 1, item 7.c",
      "validation": { "maxLength": 80 }
    },
    {
      "name": "physicalAddressState",
      "label": "Physical address — state",
      "type": "string",
      "required": false,
      "description": "For a U.S. physical address.",
      "sourceRef": "Form I-90 Part 1, item 7.d",
      "validation": { "maxLength": 60 }
    },
    {
      "name": "physicalAddressZipCode",
      "label": "Physical address — ZIP code",
      "type": "string",
      "required": false,
      "description": "For a U.S. physical address.",
      "sourceRef": "Form I-90 Part 1, item 7.e",
      "validation": { "maxLength": 15 }
    },
    {
      "name": "physicalAddressProvince",
      "label": "Physical address — province",
      "type": "string",
      "required": false,
      "description": "For a foreign physical address.",
      "sourceRef": "Form I-90 Part 1, item 7.f",
      "validation": { "maxLength": 60 }
    },
    {
      "name": "physicalAddressPostalCode",
      "label": "Physical address — postal code",
      "type": "string",
      "required": false,
      "description": "For a foreign physical address.",
      "sourceRef": "Form I-90 Part 1, item 7.g",
      "validation": { "maxLength": 15 }
    },
    {
      "name": "physicalAddressCountry",
      "label": "Physical address — country",
      "type": "string",
      "required": false,
      "description": "Required when physicalAddressDiffersFromMailing is true.",
      "sourceRef": "Form I-90 Part 1, item 7.h",
      "validation": { "maxLength": 60 }
    },
    {
      "name": "dateOfBirth",
      "label": "Date of birth",
      "type": "date",
      "classification": "sensitive-pii",
      "required": true,
      "description": "Personal identifier; handle as sensitive data. YYYY-MM-DD.",
      "sourceRef": "Form I-90 Part 1, item 8"
    },
    {
      "name": "placeOfBirthCity",
      "label": "City/town/village of birth",
      "type": "string",
      "required": true,
      "description": "Personal identifier; handle as sensitive data.",
      "sourceRef": "Form I-90 Part 1, item 9",
      "validation": { "minLength": 1, "maxLength": 80 }
    },
    {
      "name": "countryOfBirth",
      "label": "Country of birth",
      "type": "string",
      "required": true,
      "description": "Personal identifier; handle as sensitive data.",
      "sourceRef": "Form I-90 Part 1, item 10",
      "validation": { "minLength": 1, "maxLength": 60 }
    },
    {
      "name": "mothersGivenName",
      "label": "Mother's given name (first name)",
      "type": "string",
      "required": false,
      "description": "Personal identifier; handle as sensitive data.",
      "sourceRef": "Form I-90 Part 1, item 11",
      "validation": { "maxLength": 100 }
    },
    {
      "name": "fathersGivenName",
      "label": "Father's given name (first name)",
      "type": "string",
      "required": false,
      "description": "Personal identifier; handle as sensitive data.",
      "sourceRef": "Form I-90 Part 1, item 12",
      "validation": { "maxLength": 100 }
    },
    {
      "name": "classOfAdmission",
      "label": "Class of admission",
      "type": "string",
      "required": true,
      "description": "The immigration classification under which permanent residence was granted (e.g. \"IR1\", \"CR1\", \"F2A\").",
      "sourceRef": "Form I-90 Part 1, item 13",
      "validation": { "minLength": 1, "maxLength": 20 }
    },
    {
      "name": "dateOfAdmission",
      "label": "Date of admission",
      "type": "date",
      "required": true,
      "description": "YYYY-MM-DD. The date permanent resident status was granted or admission occurred.",
      "sourceRef": "Form I-90 Part 1, item 14"
    },
    {
      "name": "socialSecurityNumber",
      "label": "U.S. Social Security Number (if any)",
      "type": "string",
      "classification": "sensitive-pii",
      "required": false,
      "description": "Personal identifier; handle as sensitive data.",
      "sourceRef": "Form I-90 Part 1, item 15",
      "validation": { "pattern": "^[0-9]{3}-?[0-9]{2}-?[0-9]{4}$" }
    },
    {
      "name": "sex",
      "label": "Sex",
      "type": "enum",
      "required": true,
      "description": "Personal identifier; handle as sensitive data.",
      "sourceRef": "Form I-90 Part 1, item 16",
      "validation": { "enum": ["male", "female"] }
    },
    {
      "name": "permanentResidentStatus",
      "label": "Your status is",
      "type": "enum",
      "required": true,
      "description": "Lawful permanent resident and permanent resident (commuter status) both proceed to Section A reasons (reasonForApplicationSectionA); conditional permanent resident proceeds to Section B reasons (reasonForApplicationSectionB).",
      "sourceRef": "Form I-90 Part 2, item 1",
      "validation": {
        "enum": ["lawful_permanent_resident", "permanent_resident_commuter_status", "conditional_permanent_resident"]
      }
    },
    {
      "name": "reasonForApplicationSectionA",
      "label": "Reason for application — Section A (lawful permanent resident or permanent resident in commuter status)",
      "type": "enum",
      "required": false,
      "description": "Required when permanentResidentStatus is 'lawful_permanent_resident' or 'permanent_resident_commuter_status'. Select only one. When the reason is entering/leaving commuter status (the two 'h' options), also give portOfEntry.",
      "sourceRef": "Form I-90 Part 2, Section A, items 2.a-2.j",
      "validation": {
        "enum": [
          "lost_stolen_or_destroyed",
          "issued_but_never_received",
          "mutilated",
          "incorrect_data_dhs_error",
          "name_or_biographic_info_legally_changed",
          "expired_or_expiring_within_six_months",
          "turning_14_card_expires_after_16th_birthday",
          "turning_14_card_expires_before_16th_birthday",
          "taking_up_commuter_status",
          "commuter_taking_up_actual_residence",
          "automatically_converted_to_lawful_permanent_resident",
          "prior_edition_card_or_other_reason"
        ]
      }
    },
    {
      "name": "reasonForApplicationSectionB",
      "label": "Reason for application — Section B (conditional permanent resident)",
      "type": "enum",
      "required": false,
      "description": "Required when permanentResidentStatus is 'conditional_permanent_resident'. Select only one. Do not file if conditional status expires within the next 90 days.",
      "sourceRef": "Form I-90 Part 2, Section B, items 3.a-3.e",
      "validation": {
        "enum": [
          "lost_stolen_or_destroyed",
          "issued_but_never_received",
          "mutilated",
          "incorrect_data_dhs_error",
          "name_or_biographic_info_legally_changed"
        ]
      }
    },
    {
      "name": "portOfEntry",
      "label": "Port-of-Entry (POE) into the United States (city or town and state)",
      "type": "string",
      "required": false,
      "description": "Required when reasonForApplicationSectionA is 'taking_up_commuter_status'.",
      "sourceRef": "Form I-90 Part 2, item 2.h.1.a",
      "validation": { "maxLength": 100 }
    },
    {
      "name": "locationAppliedForImmigrantVisaOrAdjustment",
      "label": "Location where you applied for an immigrant visa or adjustment of status",
      "type": "string",
      "required": true,
      "description": "City/town and state, or foreign post.",
      "sourceRef": "Form I-90 Part 3, item 1",
      "validation": { "minLength": 1, "maxLength": 100 }
    },
    {
      "name": "locationVisaIssuedOrAdjustmentGranted",
      "label": "Location where your immigrant visa was issued, or USCIS office where you were granted adjustment of status",
      "type": "string",
      "required": true,
      "description": "City/town and state, foreign post, or USCIS field office name.",
      "sourceRef": "Form I-90 Part 3, item 2",
      "validation": { "minLength": 1, "maxLength": 100 }
    },
    {
      "name": "enteredWithImmigrantVisa",
      "label": "Did you enter the United States with an immigrant visa?",
      "type": "boolean",
      "required": true,
      "description": "If true, give destinationAtAdmission and portOfEntryAtAdmission. If false (i.e. status was via adjustment of status), those are not applicable. Inferred from the form's routing instruction rather than a separately numbered yes/no item.",
      "sourceRef": "Form I-90 Part 3, items 3.a/3.a.1 preamble"
    },
    {
      "name": "destinationAtAdmission",
      "label": "Destination in the United States at time of admission (city or town and state)",
      "type": "string",
      "required": false,
      "description": "Required when enteredWithImmigrantVisa is true.",
      "sourceRef": "Form I-90 Part 3, item 3.a",
      "validation": { "maxLength": 100 }
    },
    {
      "name": "portOfEntryAtAdmission",
      "label": "Port-of-Entry where admitted to the United States",
      "type": "string",
      "required": false,
      "description": "Required when enteredWithImmigrantVisa is true.",
      "sourceRef": "Form I-90 Part 3, item 3.a.1",
      "validation": { "maxLength": 100 }
    },
    {
      "name": "everInRemovalProceedings",
      "label": "Have you ever been in exclusion, deportation, or removal proceedings or ordered removed from the United States?",
      "type": "boolean",
      "required": true,
      "description": "If true, provide a detailed explanation using additionalInformationEntries.",
      "sourceRef": "Form I-90 Part 3, item 4"
    },
    {
      "name": "everFiledI407OrAbandonedStatus",
      "label": "Since you were granted permanent residence, have you ever filed Form I-407 (Abandonment by Alien of Status as Lawful Permanent Resident) or otherwise been determined to have abandoned your status?",
      "type": "boolean",
      "required": true,
      "description": "If true, provide a detailed explanation using additionalInformationEntries.",
      "sourceRef": "Form I-90 Part 3, item 5"
    },
    {
      "name": "heightFeet",
      "label": "Height — feet",
      "type": "integer",
      "required": true,
      "description": "The extracted PDF text interleaves the Height/Weight item numbers (6-9) with the surrounding Section B reason checkboxes, so the exact item-number-to-field mapping is not fully unambiguous from text extraction alone; see VERIFICATION.md.",
      "sourceRef": "Form I-90 Part 3 (height, feet component)",
      "validation": { "minimum": 0, "maximum": 8 }
    },
    {
      "name": "heightInches",
      "label": "Height — inches",
      "type": "integer",
      "required": true,
      "description": "See heightFeet for the item-number caveat.",
      "sourceRef": "Form I-90 Part 3 (height, inches component)",
      "validation": { "minimum": 0, "maximum": 11 }
    },
    {
      "name": "weightPounds",
      "label": "Weight — pounds",
      "type": "integer",
      "required": true,
      "description": "See heightFeet for the item-number caveat.",
      "sourceRef": "Form I-90 Part 3 (weight)",
      "validation": { "minimum": 1, "maximum": 999 }
    },
    {
      "name": "ethnicity",
      "label": "Ethnicity",
      "type": "enum",
      "required": true,
      "description": "Select only one box.",
      "sourceRef": "Form I-90 Part 3, item 10 preamble (Biographic Information)",
      "validation": { "enum": ["hispanic_or_latino", "not_hispanic_or_latino"] }
    },
    {
      "name": "race",
      "label": "Race",
      "type": "string",
      "required": true,
      "description": "Select all applicable boxes. Modeled as a comma-separated list of: american_indian_or_alaska_native, asian, black_or_african_american, native_hawaiian_or_other_pacific_islander, white.",
      "sourceRef": "Form I-90 Part 3, item 10 preamble (Biographic Information)",
      "validation": { "minLength": 1, "maxLength": 200 }
    },
    {
      "name": "eyeColor",
      "label": "Eye color",
      "type": "enum",
      "required": true,
      "description": "Select only one box.",
      "sourceRef": "Form I-90 Part 3, item 10",
      "validation": { "enum": ["black", "blue", "brown", "gray", "green", "hazel", "maroon", "pink", "unknown_other"] }
    },
    {
      "name": "hairColor",
      "label": "Hair color",
      "type": "enum",
      "required": true,
      "description": "Select only one box.",
      "sourceRef": "Form I-90 Part 3, item 11",
      "validation": { "enum": ["bald_no_hair", "black", "blond", "brown", "gray", "red", "sandy", "white", "unknown_other"] }
    },
    {
      "name": "requestingDisabilityAccommodation",
      "label": "Are you requesting an accommodation because of your disabilities and/or impairments?",
      "type": "boolean",
      "required": true,
      "description": "If true, select at least one of deafOrHardOfHearingAccommodation, blindOrLowVisionAccommodation, or otherDisabilityAccommodation.",
      "sourceRef": "Form I-90 Part 4, item 1"
    },
    {
      "name": "deafOrHardOfHearingAccommodation",
      "label": "I am deaf or hard of hearing and request the following accommodation",
      "type": "string",
      "required": false,
      "description": "Personal identifier; handle as sensitive data. E.g. a requested sign-language interpreter and which language.",
      "sourceRef": "Form I-90 Part 4, item 1.a",
      "validation": { "maxLength": 500 }
    },
    {
      "name": "blindOrLowVisionAccommodation",
      "label": "I am blind or have low vision and request the following accommodation",
      "type": "string",
      "required": false,
      "description": "Personal identifier; handle as sensitive data.",
      "sourceRef": "Form I-90 Part 4, item 1.b",
      "validation": { "maxLength": 500 }
    },
    {
      "name": "otherDisabilityAccommodation",
      "label": "I have another type of disability and/or impairment — describe the nature and the accommodation you are requesting",
      "type": "string",
      "required": false,
      "description": "Personal identifier; handle as sensitive data.",
      "sourceRef": "Form I-90 Part 4, item 1.c",
      "validation": { "maxLength": 500 }
    },
    {
      "name": "applicantCanReadEnglish",
      "label": "I can read and understand English, and I have read and understand every question and instruction on this application and my answer to every question",
      "type": "boolean",
      "required": true,
      "description": "Select the box for either this or usedInterpreter (mutually exclusive). If neither applies literally, the form still requires selecting one.",
      "sourceRef": "Form I-90 Part 5, item 1.a"
    },
    {
      "name": "usedInterpreter",
      "label": "The interpreter named in Part 6 read to me every question and instruction on this application, and my answer to every question, in a language in which I am fluent",
      "type": "boolean",
      "required": true,
      "description": "Mutually exclusive with applicantCanReadEnglish. If true, complete the interpreter* fields and give interpreterLanguage.",
      "sourceRef": "Form I-90 Part 5, item 1.b"
    },
    {
      "name": "interpreterLanguage",
      "label": "Language in which the interpreter is fluent and communicated with the applicant",
      "type": "string",
      "required": false,
      "description": "Required when usedInterpreter is true.",
      "sourceRef": "Form I-90 Part 5, item 1.b (language blank)",
      "validation": { "maxLength": 60 }
    },
    {
      "name": "usedPreparer",
      "label": "At my request, the preparer named in Part 7 prepared this application for me based only upon information I provided or authorized",
      "type": "boolean",
      "required": false,
      "description": "If true, complete the preparer* fields.",
      "sourceRef": "Form I-90 Part 5, item 2"
    },
    {
      "name": "applicantDaytimePhoneNumber",
      "label": "Applicant's daytime telephone number",
      "type": "string",
      "required": true,
      "description": "Personal identifier; handle as sensitive data. In international E.164 format.",
      "sourceRef": "Form I-90 Part 5, item 3",
      "validation": { "pattern": "^\\+[1-9][0-9]{1,14}$" }
    },
    {
      "name": "applicantMobilePhoneNumber",
      "label": "Applicant's mobile telephone number (if any)",
      "type": "string",
      "required": false,
      "description": "Personal identifier; handle as sensitive data. In international E.164 format.",
      "sourceRef": "Form I-90 Part 5, item 4",
      "validation": { "pattern": "^\\+[1-9][0-9]{1,14}$" }
    },
    {
      "name": "applicantEmail",
      "label": "Applicant's email address (if any)",
      "type": "string",
      "required": false,
      "description": "Personal identifier; handle as sensitive data.",
      "sourceRef": "Form I-90 Part 5, item 5",
      "validation": { "maxLength": 160 }
    },
    {
      "name": "applicantSignatureDate",
      "label": "Date of applicant's signature",
      "type": "date",
      "required": true,
      "description": "YYYY-MM-DD. By signing, the applicant certifies under penalty of perjury that all information provided is complete, true, and correct, and acknowledges the required biometrics appointment.",
      "sourceRef": "Form I-90 Part 5, item 6.a/6.b"
    },
    {
      "name": "interpreterFamilyName",
      "label": "Interpreter's family name (last name)",
      "type": "string",
      "required": false,
      "description": "Personal identifier; handle as sensitive data. Required when usedInterpreter is true.",
      "sourceRef": "Form I-90 Part 6, item 1.a",
      "validation": { "maxLength": 100 }
    },
    {
      "name": "interpreterGivenName",
      "label": "Interpreter's given name (first name)",
      "type": "string",
      "required": false,
      "description": "Personal identifier; handle as sensitive data. Required when usedInterpreter is true.",
      "sourceRef": "Form I-90 Part 6, item 1.b",
      "validation": { "maxLength": 100 }
    },
    {
      "name": "interpreterBusinessOrOrganizationName",
      "label": "Interpreter's business or organization name (if any)",
      "type": "string",
      "required": false,
      "description": "If applicable.",
      "sourceRef": "Form I-90 Part 6, item 2",
      "validation": { "maxLength": 160 }
    },
    {
      "name": "interpreterAddressLine1",
      "label": "Interpreter's mailing address — street number and name",
      "type": "string",
      "required": false,
      "description": "Personal identifier; handle as sensitive data. Required when usedInterpreter is true.",
      "sourceRef": "Form I-90 Part 6, item 3.a",
      "validation": { "maxLength": 120 }
    },
    {
      "name": "interpreterAddressApt",
      "label": "Interpreter's mailing address — apartment/floor/suite",
      "type": "string",
      "required": false,
      "description": "If applicable.",
      "sourceRef": "Form I-90 Part 6, item 3.b",
      "validation": { "maxLength": 20 }
    },
    {
      "name": "interpreterAddressCity",
      "label": "Interpreter's mailing address — city or town",
      "type": "string",
      "required": false,
      "description": "Personal identifier; handle as sensitive data. Required when usedInterpreter is true.",
      "sourceRef": "Form I-90 Part 6, item 3.c",
      "validation": { "maxLength": 80 }
    },
    {
      "name": "interpreterAddressState",
      "label": "Interpreter's mailing address — state",
      "type": "string",
      "required": false,
      "description": "Required for a U.S. mailing address; leave blank for a foreign address (use interpreterAddressProvince instead).",
      "sourceRef": "Form I-90 Part 6, item 3.d",
      "validation": { "maxLength": 60 }
    },
    {
      "name": "interpreterAddressZipCode",
      "label": "Interpreter's mailing address — ZIP code",
      "type": "string",
      "required": false,
      "description": "Required for a U.S. mailing address.",
      "sourceRef": "Form I-90 Part 6, item 3.e",
      "validation": { "maxLength": 15 }
    },
    {
      "name": "interpreterAddressProvince",
      "label": "Interpreter's mailing address — province",
      "type": "string",
      "required": false,
      "description": "For a foreign mailing address.",
      "sourceRef": "Form I-90 Part 6, item 3.f",
      "validation": { "maxLength": 60 }
    },
    {
      "name": "interpreterAddressPostalCode",
      "label": "Interpreter's mailing address — postal code",
      "type": "string",
      "required": false,
      "description": "For a foreign mailing address.",
      "sourceRef": "Form I-90 Part 6, item 3.g",
      "validation": { "maxLength": 15 }
    },
    {
      "name": "interpreterAddressCountry",
      "label": "Interpreter's mailing address — country",
      "type": "string",
      "required": false,
      "description": "Personal identifier; handle as sensitive data. Required when usedInterpreter is true.",
      "sourceRef": "Form I-90 Part 6, item 3.h",
      "validation": { "maxLength": 60 }
    },
    {
      "name": "interpreterDaytimePhoneNumber",
      "label": "Interpreter's daytime telephone number",
      "type": "string",
      "required": false,
      "description": "Personal identifier; handle as sensitive data. Required when usedInterpreter is true. In international E.164 format.",
      "sourceRef": "Form I-90 Part 6, item 4",
      "validation": { "pattern": "^\\+[1-9][0-9]{1,14}$" }
    },
    {
      "name": "interpreterMobilePhoneNumber",
      "label": "Interpreter's mobile telephone number (if any)",
      "type": "string",
      "required": false,
      "description": "Personal identifier; handle as sensitive data. In international E.164 format.",
      "sourceRef": "Form I-90 Part 6, item 5",
      "validation": { "pattern": "^\\+[1-9][0-9]{1,14}$" }
    },
    {
      "name": "interpreterEmail",
      "label": "Interpreter's email address (if any)",
      "type": "string",
      "required": false,
      "description": "Personal identifier; handle as sensitive data.",
      "sourceRef": "Form I-90 Part 6, item 6",
      "validation": { "maxLength": 160 }
    },
    {
      "name": "interpreterSignatureDate",
      "label": "Date of interpreter's signature",
      "type": "date",
      "required": false,
      "description": "YYYY-MM-DD. Required when usedInterpreter is true.",
      "sourceRef": "Form I-90 Part 6, item 7.a/7.b"
    },
    {
      "name": "preparerFamilyName",
      "label": "Preparer's family name (last name)",
      "type": "string",
      "required": false,
      "description": "Personal identifier; handle as sensitive data. Required when usedPreparer is true.",
      "sourceRef": "Form I-90 Part 7, item 1.a",
      "validation": { "maxLength": 100 }
    },
    {
      "name": "preparerGivenName",
      "label": "Preparer's given name (first name)",
      "type": "string",
      "required": false,
      "description": "Personal identifier; handle as sensitive data. Required when usedPreparer is true.",
      "sourceRef": "Form I-90 Part 7, item 1.b",
      "validation": { "maxLength": 100 }
    },
    {
      "name": "preparerBusinessOrOrganizationName",
      "label": "Preparer's business or organization name (if any)",
      "type": "string",
      "required": false,
      "description": "If applicable.",
      "sourceRef": "Form I-90 Part 7, item 2",
      "validation": { "maxLength": 160 }
    },
    {
      "name": "preparerAddressLine1",
      "label": "Preparer's mailing address — street number and name",
      "type": "string",
      "required": false,
      "description": "Personal identifier; handle as sensitive data. Required when usedPreparer is true.",
      "sourceRef": "Form I-90 Part 7, item 3.a",
      "validation": { "maxLength": 120 }
    },
    {
      "name": "preparerAddressApt",
      "label": "Preparer's mailing address — apartment/floor/suite",
      "type": "string",
      "required": false,
      "description": "If applicable.",
      "sourceRef": "Form I-90 Part 7, item 3.b",
      "validation": { "maxLength": 20 }
    },
    {
      "name": "preparerAddressCity",
      "label": "Preparer's mailing address — city or town",
      "type": "string",
      "required": false,
      "description": "Personal identifier; handle as sensitive data. Required when usedPreparer is true.",
      "sourceRef": "Form I-90 Part 7, item 3.c",
      "validation": { "maxLength": 80 }
    },
    {
      "name": "preparerAddressState",
      "label": "Preparer's mailing address — state",
      "type": "string",
      "required": false,
      "description": "Required for a U.S. mailing address; leave blank for a foreign address (use preparerAddressProvince instead).",
      "sourceRef": "Form I-90 Part 7, item 3.d",
      "validation": { "maxLength": 60 }
    },
    {
      "name": "preparerAddressZipCode",
      "label": "Preparer's mailing address — ZIP code",
      "type": "string",
      "required": false,
      "description": "Required for a U.S. mailing address.",
      "sourceRef": "Form I-90 Part 7, item 3.e",
      "validation": { "maxLength": 15 }
    },
    {
      "name": "preparerAddressProvince",
      "label": "Preparer's mailing address — province",
      "type": "string",
      "required": false,
      "description": "For a foreign mailing address.",
      "sourceRef": "Form I-90 Part 7, item 3.f",
      "validation": { "maxLength": 60 }
    },
    {
      "name": "preparerAddressPostalCode",
      "label": "Preparer's mailing address — postal code",
      "type": "string",
      "required": false,
      "description": "For a foreign mailing address.",
      "sourceRef": "Form I-90 Part 7, item 3.g",
      "validation": { "maxLength": 15 }
    },
    {
      "name": "preparerAddressCountry",
      "label": "Preparer's mailing address — country",
      "type": "string",
      "required": false,
      "description": "Personal identifier; handle as sensitive data. Required when usedPreparer is true.",
      "sourceRef": "Form I-90 Part 7, item 3.h",
      "validation": { "maxLength": 60 }
    },
    {
      "name": "preparerDaytimePhoneNumber",
      "label": "Preparer's daytime telephone number",
      "type": "string",
      "required": false,
      "description": "Personal identifier; handle as sensitive data. Required when usedPreparer is true. In international E.164 format.",
      "sourceRef": "Form I-90 Part 7, item 4",
      "validation": { "pattern": "^\\+[1-9][0-9]{1,14}$" }
    },
    {
      "name": "preparerMobilePhoneNumber",
      "label": "Preparer's mobile telephone number (if any)",
      "type": "string",
      "required": false,
      "description": "Personal identifier; handle as sensitive data. In international E.164 format.",
      "sourceRef": "Form I-90 Part 7, item 5",
      "validation": { "pattern": "^\\+[1-9][0-9]{1,14}$" }
    },
    {
      "name": "preparerEmail",
      "label": "Preparer's email address (if any)",
      "type": "string",
      "required": false,
      "description": "Personal identifier; handle as sensitive data.",
      "sourceRef": "Form I-90 Part 7, item 6",
      "validation": { "maxLength": 160 }
    },
    {
      "name": "preparerIsAttorneyOrAccreditedRepresentative",
      "label": "Is the preparer an attorney or accredited representative?",
      "type": "boolean",
      "required": false,
      "description": "Required when usedPreparer is true. If true, also give preparerRepresentationExtendsBeyondPreparation; if the representation extends beyond preparing this application, Form G-28 may also be required (out of scope here).",
      "sourceRef": "Form I-90 Part 7, items 7.a/7.b"
    },
    {
      "name": "preparerRepresentationExtendsBeyondPreparation",
      "label": "Does the preparer's representation of the applicant extend beyond preparation of this application?",
      "type": "boolean",
      "required": false,
      "description": "Required when preparerIsAttorneyOrAccreditedRepresentative is true.",
      "sourceRef": "Form I-90 Part 7, item 7.b"
    },
    {
      "name": "preparerSignatureDate",
      "label": "Date of preparer's signature",
      "type": "date",
      "required": false,
      "description": "YYYY-MM-DD. Required when usedPreparer is true.",
      "sourceRef": "Form I-90 Part 7, item 8.a/8.b"
    }
  ],
  "steps": [
    {
      "id": "identity_and_addresses",
      "title": "Information about you",
      "fields": ["alienRegistrationNumber", "uscisOnlineAccountNumber", "currentFamilyName", "currentGivenName", "currentMiddleName", "nameLegallyChanged", "previousFamilyName", "previousGivenName", "previousMiddleName", "mailingAddressInCareOfName", "mailingAddressLine1", "mailingAddressApt", "mailingAddressCity", "mailingAddressState", "mailingAddressZipCode", "mailingAddressProvince", "mailingAddressPostalCode", "mailingAddressCountry", "physicalAddressDiffersFromMailing", "physicalAddressLine1", "physicalAddressApt", "physicalAddressCity", "physicalAddressState", "physicalAddressZipCode", "physicalAddressProvince", "physicalAddressPostalCode", "physicalAddressCountry", "dateOfBirth", "placeOfBirthCity", "countryOfBirth", "mothersGivenName", "fathersGivenName", "classOfAdmission", "dateOfAdmission", "socialSecurityNumber", "sex"],
      "next": "application_type"
    },
    {
      "id": "application_type",
      "title": "Application type and reason",
      "fields": ["permanentResidentStatus", "reasonForApplicationSectionA", "reasonForApplicationSectionB", "portOfEntry"],
      "next": "processing_information"
    },
    {
      "id": "processing_information",
      "title": "Processing information and biographic details",
      "fields": ["locationAppliedForImmigrantVisaOrAdjustment", "locationVisaIssuedOrAdjustmentGranted", "enteredWithImmigrantVisa", "destinationAtAdmission", "portOfEntryAtAdmission", "everInRemovalProceedings", "everFiledI407OrAbandonedStatus", "heightFeet", "heightInches", "weightPounds", "ethnicity", "race", "eyeColor", "hairColor"],
      "next": "accommodations"
    },
    {
      "id": "accommodations",
      "title": "Accommodations for individuals with disabilities and/or impairments",
      "fields": ["requestingDisabilityAccommodation", "deafOrHardOfHearingAccommodation", "blindOrLowVisionAccommodation", "otherDisabilityAccommodation"],
      "next": "applicant_statement"
    },
    {
      "id": "applicant_statement",
      "title": "Applicant's statement, contact information, certification, and signature",
      "fields": ["applicantCanReadEnglish", "usedInterpreter", "interpreterLanguage", "usedPreparer", "applicantDaytimePhoneNumber", "applicantMobilePhoneNumber", "applicantEmail", "applicantSignatureDate"],
      "next": "interpreter"
    },
    {
      "id": "interpreter",
      "title": "Interpreter's contact information, certification, and signature",
      "fields": ["interpreterFamilyName", "interpreterGivenName", "interpreterBusinessOrOrganizationName", "interpreterAddressLine1", "interpreterAddressApt", "interpreterAddressCity", "interpreterAddressState", "interpreterAddressZipCode", "interpreterAddressProvince", "interpreterAddressPostalCode", "interpreterAddressCountry", "interpreterDaytimePhoneNumber", "interpreterMobilePhoneNumber", "interpreterEmail", "interpreterSignatureDate"],
      "next": "preparer"
    },
    {
      "id": "preparer",
      "title": "Preparer's contact information, declaration, and signature",
      "fields": ["preparerFamilyName", "preparerGivenName", "preparerBusinessOrOrganizationName", "preparerAddressLine1", "preparerAddressApt", "preparerAddressCity", "preparerAddressState", "preparerAddressZipCode", "preparerAddressProvince", "preparerAddressPostalCode", "preparerAddressCountry", "preparerDaytimePhoneNumber", "preparerMobilePhoneNumber", "preparerEmail", "preparerIsAttorneyOrAccreditedRepresentative", "preparerRepresentationExtendsBeyondPreparation", "preparerSignatureDate"]
    }
  ]
}
