Registry entry

Thailand Non-Immigrant Visa (B) Application — For Employment

The Ministry of Foreign Affairs' (MFA) two-page visa application specimen served under its Non-Immigrant Visa (B) for Employment publishing path, opening Thailand's Visa vertical (2 of 6; Taxes opened via th/rd/pit-90-personal-income-tax-return). Page 1 is a non-fillable checklist naming the required supporting documents for this visa category and purpose (modelled as documents[] below, not fields[]); page 2 is the MFA's own generic 'APPLICATION FOR VISA' AcroForm (footer-stamped 'mfavisaform 10 09 2007'), used across all MFA/Royal Thai Embassy and Consulate-General visa categories, with a 'Please Indicate Type of Visa Requested' selector rather than a form dedicated solely to Non-Immigrant Visa (B). This v1.0.0 models every applicant-facing field on page 2's live AcroForm: the visa-type-requested and title selectors, full identity/travel-document/occupation/address fields, the local-guarantor and guarantor-in-Thailand blocks, the minor-children-if-accompanying block, travel/entry details, and the purpose-of-visit selector, plus the date fields accompanying the form's two printed declarations. Two of the 58 AcroForm widgets (Text4, Text13) are excluded as non-visible, near-zero-dimension artifact fields with no corresponding printed label — disclosed in VERIFICATION.md. The lower 'FOR OFFICIAL USE' block (Application/Reference No., Visa No., consulate-assigned Type of Visa/Category/Entries/Fee/dates, Documents Submitted) carries no AcroForm widgets at all and is out of scope, consistent with this registry's convention for consulate/caseworker-only sections. GovSchema is independent and is not affiliated with, endorsed by, or operated by the Government of Thailand or the Ministry of Foreign Affairs.

Registry entry

th/mfa/non-immigrant-visa-b-application-for-employment

Jurisdiction
Thailand · national
Version
1.0.0
Verification
draft

Authoritative source NON-IMMIGRANT VISA (B) FOR EMPLOYMENT — checklist + APPLICATION FOR VISA (page 2 footer-stamped "mfavisaform 10 09 2007")

Machine access

Registry catalog
registry/index.jsonone record per schema id

Field reference

57 fields, read from the published schema.json, with names, types, requiredness, and validation as the document states them. The live government form remains the authoritative source.

Fields

  • visaTypeDiplomatic boolean optional

    One of six mutually-exclusive 'Type of Visa Requested' options printed at the top of the application (see exclusivityGroups). This document is served under the MFA's Non-Immigrant Visa (B) for Employment publishing path, so an applicant using this specimen for that purpose is expected to select visaTypeNonImmigrant rather than this option; the field itself is modelled as printed since the underlying AcroForm is the MFA's shared, all-purpose visa application (not a Non-Immigrant-B-only form) and imposes no such constraint mechanically.

  • visaTypeOfficial boolean optional

    See visaTypeDiplomatic for the mutual-exclusivity and shared-form disclosure.

  • visaTypeCourtesy boolean optional

    See visaTypeDiplomatic for the mutual-exclusivity and shared-form disclosure.

  • visaTypeNonImmigrant boolean optional

    The option expected to be checked for this document's Non-Immigrant Visa (B) for Employment purpose. See visaTypeDiplomatic for the mutual-exclusivity and shared-form disclosure.

  • visaTypeTourist boolean optional

    See visaTypeDiplomatic for the mutual-exclusivity and shared-form disclosure.

  • visaTypeTransit boolean optional

    See visaTypeDiplomatic for the mutual-exclusivity and shared-form disclosure.

  • numberOfEntriesRequested string optional

    A handwritten blank ('Number of Entries Requested _____') printed beside the visa-type selector, with no corresponding AcroForm widget in the source PDF — modelled here for completeness of the printed form's data points, but not backed by a fillable field; disclosed in VERIFICATION.md.

  • titleMr boolean optional

    One of three mutually-exclusive title checkboxes preceding the applicant's name (see exclusivityGroups).

  • titleMrs boolean optional

    See titleMr for the mutual-exclusivity note.

  • titleMiss boolean optional

    See titleMr for the mutual-exclusivity note.

  • fullName string required

    The applicant's full name in block letters, e.g. "SOMCHAI MANEE JAIDEE".

    length: 1–∞classification: pii
  • formerName string optional

    A prior legal name the applicant has held, if any.

    classification: pii
  • nationality string required

    The applicant's current nationality, e.g. "Malaysian".

    length: 1–∞classification: pii
  • nationalityAtBirth string required

    The nationality the applicant held at birth, if different from the current nationality (printed as its own blank distinct from nationality above).

    length: 1–∞classification: pii
  • countriesTravelDocumentValid string required

    The countries/territories the applicant's travel document is valid for, e.g. "All countries".

    length: 1–∞
  • birthPlace string required

    The applicant's city/country of birth, e.g. "Kuala Lumpur, Malaysia".

    length: 1–∞classification: pii
  • maritalStatus string required

    The applicant's marital status as a free-text blank, e.g. "Single" — printed as a blank line, not as selectable checkboxes.

    length: 1–∞classification: pii
  • proposedAddressInThailandLine1 string required

    The address the applicant intends to reside at in Thailand (line 1 of 3 blank lines provided).

    length: 1–∞classification: pii
  • proposedAddressInThailandLine2 string optional

    Second of 3 blank lines for the proposed address in Thailand.

    classification: pii
  • proposedAddressInThailandLine3 string optional

    Third of 3 blank lines for the proposed address in Thailand.

    classification: pii
  • dateOfBirth date required

    The applicant's date of birth.

    classification: pii
  • localGuarantorNameAddressLine1 string required

    The name and address of the applicant's local (home-country) guarantor (line 1 of 2 blank lines provided).

    length: 1–∞classification: pii
  • localGuarantorNameAddressLine2 string optional

    Second of 2 blank lines for the local guarantor's name and address.

    classification: pii
  • localGuarantorTel string optional

    The local guarantor's telephone/fax number.

    classification: pii
  • travelDocumentType string required

    The type of travel document presented, e.g. "Ordinary Passport".

    length: 1–∞
  • guarantorInThailandNameAddressLine1 string required

    The name and address of the applicant's guarantor in Thailand — for this visa's Employment purpose, typically the sponsoring employer (line 1 of 2 blank lines provided).

    length: 1–∞classification: pii
  • guarantorInThailandNameAddressLine2 string optional

    Second of 2 blank lines for the name and address of the guarantor in Thailand.

    classification: pii
  • guarantorInThailandTel string optional

    The Thailand-based guarantor's telephone/fax number.

    classification: pii
  • travelDocumentNo string required

    The travel document's number.

    length: 1–∞classification: sensitive-pii
  • travelDocumentIssuedAt string required

    The place the travel document was issued.

    length: 1–∞
  • travelDocumentDateOfIssue date required

    The travel document's date of issue.

  • travelDocumentExpiryDate date required

    The travel document's expiry date.

  • occupationPosition string required

    The applicant's present position/job title, per the label's instruction to "specify present position and name of employer" across the 2 blank lines provided (line 1).

    length: 1–∞
  • occupationEmployer string required

    The applicant's employer, per the label's instruction to "specify present position and name of employer" across the 2 blank lines provided (line 2).

    length: 1–∞
  • currentAddressLine1 string required

    The applicant's current address (line 1 of 2 blank lines provided).

    length: 1–∞classification: pii
  • currentAddressLine2 string optional

    Second of 2 blank lines for the applicant's current address.

    classification: pii
  • currentAddressTel string required

    A contact telephone number for the applicant's current address.

    length: 1–∞classification: pii
  • currentAddressEmail string optional

    An e-mail address for the applicant.

    classification: pii
  • permanentAddressLine1 string optional

    The applicant's permanent address, only if different from the current address above (line 1 of 3 blank lines provided). No selector field distinguishes whether this block applies; left fully optional, per this registry's established convention for the same class of printed 'if different/if applicable' block with no dedicated gating widget.

    classification: pii
  • permanentAddressLine2 string optional

    Second of 3 blank lines for the permanent address.

    classification: pii
  • permanentAddressLine3 string optional

    Third of 3 blank lines for the permanent address.

    classification: pii
  • permanentAddressTel string optional

    A contact telephone number for the applicant's permanent address, if provided.

    classification: pii
  • minorChildrenInfoLine1 string optional

    Names, dates, and places of birth of any minor children accompanying the applicant (line 1 of 2 blank lines provided). Optional: only applies when minor children are accompanying.

    classification: pii
  • minorChildrenInfoLine2 string optional

    Second of 2 blank lines for accompanying minor children's information.

    classification: pii
  • dateOfArrivalInThailand date required

    The applicant's planned date of arrival in Thailand.

  • travelingBy string required

    The applicant's mode of travel into Thailand, e.g. "Air".

    length: 1–∞
  • flightOrVesselName string required

    The flight number or vessel name the applicant will arrive on.

    length: 1–∞
  • durationOfProposedStay string required

    The applicant's proposed duration of stay in Thailand, e.g. "90 days".

    length: 1–∞
  • dateOfPreviousVisitToThailand date optional

    The date of the applicant's most recent previous visit to Thailand, if any.

  • purposeOfVisitTourism boolean optional

    One of five mutually-exclusive 'Purpose of Visit' options (see exclusivityGroups). None of the five printed options is literally worded 'Employment'; for this visa's Employment purpose, purposeOfVisitBusiness is the closest applicable printed option, disclosed here rather than asserted as canonical.

  • purposeOfVisitTransit boolean optional

    See purposeOfVisitTourism for the mutual-exclusivity and Employment-purpose disclosure.

  • purposeOfVisitBusiness boolean optional

    The closest printed option to this document's Employment purpose (see purposeOfVisitTourism). See purposeOfVisitTourism for the mutual-exclusivity note.

  • purposeOfVisitDiplomaticOfficial boolean optional

    See purposeOfVisitTourism for the mutual-exclusivity and Employment-purpose disclosure.

  • purposeOfVisitOther boolean optional

    See purposeOfVisitTourism for the mutual-exclusivity note. When selected, purposeOfVisitOtherDescription should be completed.

  • purposeOfVisitOtherDescription string optional

    Free-text description of the visit's purpose, required only when purposeOfVisitOther is checked.

  • refundDeclarationDate date required

    The date accompanying the applicant's signature on the printed declaration "I hereby declare that I will not request any refund from my paid visa fee even if my application has been declined." (No separate fillable Signature widget exists in the source; the signature itself is a wet-ink line with no AcroForm mechanism, consistent with this registry's convention for such lines.)

  • touristTransitDeclarationDate date optional

    The date accompanying the applicant's signature on the printed declaration under "Attention for Tourist and Transit Visas Applicants" ("I hereby declare that the purpose of my visit to Thailand is for pleasure or transit only..."). Required only for Tourist/Transit applicants; left optional here since this document's Employment purpose does not fall under that attention block. No separate fillable Signature widget exists, consistent with refundDeclarationDate.

Verification record

This file is the source-review record for this document version, per the manual-source-review-v1 practice.

Current claim

  • status: draft
  • verification.method: manual-source-review-v1
  • verification.lastVerifiedAt: 2026-07-12
  • maturity.level: structural-reference

This is GovSchema Standard Research cycle GOV-2602, a child of the standing research routine (GOV-2599) and a pre-scouted, ready-to-author candidate identified in GOV-2593's prior cycle (see that cycle's own CATALOG.md Executive Summary update and its own memory record). It opens Thailand's Visa vertical (2 of 6), via the Ministry of Foreign Affairs' (MFA) Non-Immigrant Visa (B) for Employment publishing path. Taxes is already open (th/rd/pit-90-personal-income-tax-return, GOV-2593); Business Formation is being authored concurrently by a sibling child issue (GOV-2601) of the same parent cycle — no file overlap is expected beyond CATALOG.md and tools/govschema-client/registry-index.json, both re-diffed against main immediately before opening this PR.

Source verification (independently re-derived, not copied from the task)

  • URL: https://image.mfa.go.th/mfa/0/3fsjzRYZ2e/VISA_FORM/NON-IMMIGRANT_VISA_(B)_FOR_EMPLOYMENT_-_To_be_employed_in_Thailand-new.pdf
  • The task's own description names only a widget count (58 AcroForm fields) and the general topic (MFA Non-Immigrant Visa B/Employment) — no specific URL. This URL was independently located this cycle via a fresh web search restricted to mfa.go.th, then confirmed as the correct specimen by independently re-deriving its AcroForm widget count with pdfjs-dist and finding it matches the task's cited figure exactly (below); two sibling candidates found in the same search (a bare "APPLICATION FOR VISA" PDF with 0 widgets — non-fillable — and a different visa-application PDF with 103 widgets) were fetched and screened first and ruled out precisely because their widget counts did not match.
  • Fetched independently via curl:
    • HTTP 200, Content-Type: application/pdf, Content-Length: 270415 bytes.
    • sha256: 8e61fcc80bd6260f83f86b01d5443f54a75eda4ef915c3c5449e498b8b2600d4 (computed via sha256sum on the freshly-downloaded file).
    • Note: the CDN's Last-Modified response header reflects the fetch time (a cloudflare-fronted image.mfa.go.th asset host, not an origin file-mtime signal) and is not treated as evidence of the document's edition/vintage; the document's own footer text (page 2: mfavisaform 10 09 2007) is the only in-document dating signal and is quoted verbatim in this schema's own field-level sourceRefs.
  • Parsed with pdfjs-dist@3 (legacy build, getAnnotations({intent:'display'}), filtered to subtype === 'Widget'), installed in a scratch directory (not a repo dependency), following this registry's established PDF-extraction practice:
    • 2 pages, 58 AcroForm widgets total0 on page 1, 58 on page 2 — matching the task's cited widget count exactly.
  • Every widget's fieldName/fieldType/rect/checkBox/exportValue was dumped and correlated against getTextContent()'s position-sorted text items (sorted by rounded y descending, then x ascending) to read every printed label and confirm each widget's meaning before modeling it — not assumed from field names alone (the source's own field names are the generic auto-numbered Text1...Text51/Check Box2...Check Box16, with no self-documenting names to lean on).

Document structure

Page 1 is a non-fillable checklist ("Checklist — Please complete and submit together with the application form — Application with incomplete documents cannot be accepted"), titled "NON-IMMIGRANT VISA (B) FOR EMPLOYMENT — Purpose of visit: To be employed in Thailand", naming 10 required-document line items (with sub-items 5.1-5.3 and 6.1-6.5) plus a visa-fee note and a set of numbered applicant-declaration bullets. It carries zero AcroForm widgets — confirmed via pdfjs-dist — and is modeled entirely as documents[] (10 entries), not fields[].

Page 2 is the MFA's own generic "APPLICATION FOR VISA" AcroForm (footer-stamped mfavisaform 10 09 2007), used across the Ministry's/Royal Thai Consulate-General's full range of visa categories — the page itself prints a "Please Indicate Type of Visa Requested" selector spanning Diplomatic/Official/Courtesy/Non-Immigrant/Tourist/Transit, not a form dedicated solely to Non-Immigrant Visa (B). Because this specimen is served under the MFA's Non-Immigrant Visa (B) for Employment publishing path (distinguishing it from the sibling "FOR BUSINESS PURPOSE" and "FOR EMPLOYMENT AS TEACHER" specimens found during sourcing, which share the same underlying page-2 AcroForm), this v1.0.0 discloses (rather than silently resolves) that the AcroForm itself does not encode Non-Immigrant-B/Employment specificity — see the visaTypeNonImmigrant and purposeOfVisitBusiness field descriptions below.

All 58 page-2 widgets were mapped to a printed label via rect/text-row correlation. 2 widgets are excluded from fields[] as non-substantive artifacts:

  • Text4rect: [94, 593, 95, 598], a 1pt-wide, 5pt-tall degenerate widget sitting between the "Former Name (if any)" row (Text2, y≈603-617) and the "Nationality" row (Text3, y≈580-593), with no adjacent printed label of its own.
  • Text13rect: [226, 479, 226, 484], a genuinely zero-width widget sitting between the "Issued at" row (Text12, y≈466-480) and the "Date of Issue" row (Text15, y≈443-458), likewise with no adjacent printed label.

Both are consistent with leftover/duplicated artifact fields from the source's own PDF authoring tool rather than data-entry points a filer could plausibly use; excluding them follows this registry's convention of only modeling substantively fillable widgets (cf. se/skatteverket's precedent of excluding read-only signature-line placeholders for a different reason — non-fillability rather than non-existent screen real estate).

The remaining 56 widgets collapse into 57 fields[] entries: 42 single-widget fields, 3 multi-widget checkbox groups collapsed into 3 exclusivityGroups entries (6 + 3 + 5 = 14 widgets, expressed as 14 independent boolean fields per this registry's established convention — see e.g. gh/nia, dk/um, ng/cac precedents — since the source's checkboxes are independently-clickable Btn widgets, not a single shared-name radio group), plus numberOfEntriesRequested, a printed blank ("Number of Entries Requested _____") with no corresponding AcroForm widget at all — modeled for completeness of the printed form's data points and disclosed as unbacked by a fillable field, consistent with this registry's precedent for the same class of gap (e.g. se/skatteverket's documents[]-only gating disclosures).

Field-by-field inventory and disclosed judgment calls

  • Checkbox groups modeled as independent booleans + exclusivityGroups: visa_type_requested (visaTypeDiplomatic/visaTypeOfficial/ visaTypeCourtesy/visaTypeNonImmigrant/visaTypeTourist/ visaTypeTransit, Check Box3/6/5/4/7/2 respectively), title (titleMr/titleMrs/titleMiss, Check Box14/15/16), and purpose_of_visit (purposeOfVisitTourism/purposeOfVisitTransit/ purposeOfVisitBusiness/purposeOfVisitDiplomaticOfficial/ purposeOfVisitOther, Check Box8/9/11/10/13). All three groups are confirmed via getAnnotations() to be checkBox:true/radioButton:false independent widgets (no shared field name), so — per this registry's established convention — they are modeled as independent optional booleans with an exclusivityGroups entry expressing "at most one", rather than a single enum field.
  • Disclosed judgment call — no printed option says "Employment": none of the 6 "Type of Visa Requested" options or the 5 "Purpose of Visit" options is literally worded "Employment". visaTypeNonImmigrant and purposeOfVisitBusiness are each disclosed in their own field description as the closest applicable printed option for this document's stated Employment purpose — not asserted as a canonical mapping, since the source itself provides none.
  • occupationPosition/occupationEmployer (Text17/Text18): the printed label reads "Occupation (specify present position and name of employer)" over two consecutive full-width blank lines with no further sub-labels distinguishing them. Modeled as two required fields (position, then employer), matching the label's own two-part instruction in printed order — a disclosed interpretation, since the PDF itself does not separately caption the two lines.
  • Multi-line address/name blocks (currentAddressLine1/2, permanentAddressLine1/2/3, proposedAddressInThailandLine1/2/3, localGuarantorNameAddressLine1/2, guarantorInThailandNameAddressLine1/2, minorChildrenInfoLine1/2): each source label sits above 2-3 consecutive full/near-full-width blank lines with no distinguishing sub-labels between them; modeled as sequentially-numbered line fields (first line required where the base label carries no "if applicable/if different" qualifier, continuation lines optional), consistent with this registry's convention for the same "one printed label, several blank writing lines" pattern (cf. th/rd/pit-90's multi-line address handling).
  • proposedAddressInThailandLine1 (Text36) vs. Line2 (Text37) vs. Line3 (Text38): Text36's rect (y≈564-579) straddles the "Proposed Address in Thailand" label's own baseline (y≈567) and is narrower (x≈452-576) than the two widgets below it (Text37 x≈325-576, Text38 x≈324-577) — read as a short first-line blank positioned inline with the label itself, followed by two full-width continuation lines. Disclosed here since this inline-with-label placement differs from every other multi-line block on this page (which all place their first blank line entirely below the label).
  • **permanentAddress* fields left fully optional, no requiredWhen:** the printed label reads "Permanent Address (if different from above)" but the source provides no discrete boolean/selector widget to key a requiredWhen condition on — consistent with this registry's established convention (and the notEquals-against-an-optional-field pitfall documented in this registry's own operating practice) of not inventing a synthetic gating field where the source has none; see se/skatteverket/samordningsnummer-ansokan's identical disclosed reasoning for its own contact-address block.
  • purposeOfVisitOtherDescription (Text34) is the one field in this schema with a real requiredWhen (gated on purposeOfVisitOther equals true), since the source's own printed instruction ("Other (please specify)") explicitly ties the blank to that specific checkbox.
  • refundDeclarationDate/touristTransitDeclarationDate (Text50/ Text51): each sits beside a printed "Signature ___ Date ___" line under one of the form's two printed declarations. Only the Date half of each line has a fillable widget — no Signature widget exists in the source for either line, consistent with a wet-ink signature mark having no AcroForm mechanism (the same pattern as se/skatteverket's excluded read-only Underskrift placeholders, except here there is no widget at all, substantive or read-only, standing in for the signature). refundDeclarationDate is modeled as required (the refund-non-request declaration applies to every applicant regardless of visa type, per its own printed text); touristTransitDeclarationDate is modeled as optional, since its declaration is explicitly captioned "Attention for Tourist and Transit Visas Applicants" and this document's Employment purpose falls outside that caption.
  • The "FOR OFFICIAL USE" block (page 2, lower third: Application/ Reference No., Visa No., a second "Type of Visa:" row, "Category of Visa:", "Number of Entries:" with Single/Double/Multiple Entries options, Date of Issue/Fee/Expiry Date, "Documents Submitted", "Authorized Signature and Seal") is confirmed via pdfjs-dist to carry no AcroForm widgets whatsoever in this range — every one of the 58 total widgets maps to the applicant-facing rows above this block. Out of scope, consistent with this registry's convention for consulate/caseworker-only sections with no fillable mechanism (contrast se/skatteverket's page 2, which is caseworker-only but does carry widgets and is disclosed as out of scope for that reason instead).

documents[]

All 10 entries are sourced from page 1's checklist (not from the AcroForm text layer, which carries none of this content):

  1. completedVisaApplicationForm — item 1 (this schema's own fields[], printed and signed).
  2. originalPassport — item 2.
  3. passportCopy — item 3.
  4. passportPhoto — item 4.
  5. workPermitOrApprovalEvidence — item 5's three either/or sub-items (5.1-5.3), modeled as one required document per this registry's convention for disclosed either/or evidence requirements (the source itself introduces them with "Any of the followings", not discrete selectable options).
  6. jobOfferLetter — item 6.1.
  7. companyRegistrationCopy — item 6.2.
  8. shareholderListCopy — item 6.3.
  9. balanceSheetCopy — item 6.4.
  10. vatRegistrationCopy — item 6.5.

Items 6.1-6.5 are tagged belongsTo: "responsible-party" (the sponsoring employer), matching this schema's guarantorInThailandNameAddressLine1 field description tying that guarantor block to the employer for this visa's Employment purpose.

Validation runs

  • node tools/validate.mjs registry/th/mfa/non-immigrant-visa-b-application-for-employment/1.0.0/schema.jsonpasses.
  • node tools/validate-ajv.mjs registry/th/mfa/non-immigrant-visa-b-application-for-employment/1.0.0/schema.jsonpasses (draft 2020-12, spec v0.3 meta-schema).
  • A from-scratch conformance-checker script (scratch, not committed — evaluates required/requiredWhen/validation.minLength/exclusivityGroups against each fixture) found: both valid-*.json scenarios raise 0 errors; each of 5 mutation-control-*.json fixtures raises exactly 1 error. See conformance/th/mfa/non-immigrant-visa-b-application-for-employment/1.0.0/.

Out of scope, disclosed

  • Page 2's "FOR OFFICIAL USE" block (see above) — no AcroForm mechanism exists for it.
  • Text4/Text13 — excluded degenerate/artifact widgets (see above).
  • No canonical mapping is asserted between this document's Employment purpose and the generic form's "Type of Visa Requested"/"Purpose of Visit" printed options, since the source provides none (see above).

View the raw record (VERIFICATION.md)

Version history

  • 1.0.0 draft latest this page has verification record schema.json

Independent and non-affiliated

GovSchema is an independent, open-source project. This reference is not produced, reviewed, or endorsed by Ministry of Foreign Affairs of the Kingdom of Thailand or any government. The authoritative source is always the live government form and its official instructions.