Registry entry

South Africa Application for Visa to Temporarily Sojourn in the Republic (DHA-1738/Form 8)

Apply for a South African temporary-residence visa through the Department of Home Affairs' (DHA) standard "Application for Visa to Temporarily Sojourn in the Republic" (DHA-1738, published as Form 8 under Regulation 9(1) of the Immigration Regulations, Section 10(2)(c) to (k) of the Immigration Act), opening South Africa's Visa vertical (6 of 6, closing South Africa's final open vertical alongside Passport, DMV, Business Formation, Taxes, and National ID). This schema models the form's common 10-section applicant declaration (Sections 1-10, pages 1-7 of the specimen), which every one of the form's 11 visa categories (Visitor's, Exchange, Study, Business, Treaty, Work: Critical Skills, Relative's, Work: General, Medical Treatment, Work: Intra-company transfer, Retired Person's) shares, plus the common supporting-document checklist printed on page 8 ("in respect of all temporary residence visa applications, except medical treatment visas"). It deliberately does NOT model the twelve category-specific additional-document checklists printed on pages 9-20 (covering Study, Treaty, Business x2, Medical Treatment, Relative's, Work: General, Work: Critical Skills, Work: Intra-company transfer, Retired Person's, and Exchange x2 visas) -- each is disclosed as an out-of-scope companion-schema candidate for a future version, since each is a substantial, independently-structured checklist in its own right. GovSchema is independent and is not affiliated with, endorsed by, or operated by the Government of South Africa or the Department of Home Affairs.

Registry entry

za/dha/application-for-visa-temporary-sojourn

Jurisdiction
South Africa · national
Version
1.0.0
Verification
draft

Authoritative source DHA-1738 / Form 8 -- "Application for Visa to Temporarily Sojourn in the Republic", as published in the Government Gazette (Staatskoerant), Vol. 587, No. 37679, 22 May 2014, and re-distributed unauthenticated by South Africa's Department of International Relations and Cooperation (DIRCO) via its Paris mission's own website.

Machine access

Registry catalog
registry/index.jsonone record per schema id

Field reference

123 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

  • visaCategory enum required

    Category of permit being applied for

    enum: 11 values
  • biometricEnrollmentRequired boolean optional

    Printed as a twelfth checkbox alongside the 11 visa-category options, immediately followed by "(Attach Fingerprint Form, with Photograph)". Modelled as a separate gate rather than a 12th category value, since its own parenthetical describes an attachment action rather than a permit type; a future schema version should revisit this if a clearer source specimen surfaces.

  • title enum required

    Title

    enum: mr | ms | other
  • otherTitle string optional

    Title (if Other)

    length: 0–50
  • surname string required

    Surname/Family name

    length: 0–150classification: pii
  • givenNames string required

    Given names

    length: 0–150classification: pii
  • maidenName string optional

    Maiden name

    length: 0–150classification: pii
  • stageName string optional

    Stage name

    length: 0–150classification: pii
  • previousOrAlternativeNames string optional

    Previous/alternative name(s)/aliases, including details

    length: 0–500classification: pii
  • dateOfBirth date required

    Date of birth

    classification: pii
  • placeOfBirthTown string required

    Place of birth (Town/City)

    length: 0–150classification: pii
  • placeOfBirthCountry string required

    Place of birth (Country)

    length: 0–100classification: pii
  • maritalStatus enum required

    Marital status

    enum: 7 valuesclassification: pii
  • separationDetails string optional

    If separated, state whether divorce proceedings have been instituted and when final decree is expected

    length: 0–500
  • dateOfDivorce date optional

    The specimen also states a divorce order must be attached — modelled as the divorceDecree document entry.

  • presentCountryOfCitizenship string required

    Present country of citizenship

    length: 0–100classification: pii
  • citizenshipAcquisitionDetails string optional

    If acquired other than by birth, date and conditions under which acquired

    length: 0–500
  • holdsOtherCitizenship boolean required

    Do you hold any other citizenship?

  • otherCitizenshipDetails string optional

    If so, of which country, plus details

    length: 0–300
  • passportNumber string required

    Passport number

    length: 0–50classification: pii
  • passportCountryOfIssue string required

    Country of issue

    length: 0–100
  • passportDateOfIssue date required

    Date of issue

  • passportExpiryDate date required

    Expiry date

  • otherDocumentType string optional

    Type of document (any other document required by your government)

    length: 0–150
  • otherDocumentNumber string optional

    Number (other document)

    length: 0–50
  • otherDocumentExpiryDate date optional

    Expiry date (other document)

  • residentialAddress string required

    Residential address

    length: 0–300classification: pii
  • residentialPostalCode string required

    Postal code (residential address)

    length: 0–20
  • postalAddress string required

    Postal address

    length: 0–300classification: pii
  • postalAddressPostalCode string required

    Postal code (postal address)

    length: 0–20
  • countryOfUsualResidence string optional

    Country of usual residence, if other than country of origin or above address

    length: 0–100
  • telephoneWork string optional

    Telephone No.: Work (incl. area code)

    length: 0–30
  • telephoneHome string optional

    Telephone No.: Home (incl. area code)

    length: 0–30
  • otherAddress1Address string optional

    Other address 1 where you have lived during the last ten years

    length: 0–300
  • otherAddress1Period string optional

    Other address 1: period

    length: 0–100
  • otherAddress1Country string optional

    Other address 1: country

    length: 0–100
  • otherAddress2Address string optional

    Other address 2 where you have lived during the last ten years

    length: 0–300
  • otherAddress2Period string optional

    Other address 2: period

    length: 0–100
  • otherAddress2Country string optional

    Other address 2: country

    length: 0–100
  • otherAddress3Address string optional

    Other address 3 where you have lived during the last ten years

    length: 0–300
  • otherAddress3Period string optional

    Other address 3: period

    length: 0–100
  • otherAddress3Country string optional

    Other address 3: country

    length: 0–100
  • rightOfReEntry boolean required

    Do you hold the right of re-entry into your country of origin and/or country of residence if this differs?

  • rightOfReEntryDetails string optional

    If no, specify period and present status

    length: 0–300
  • everAppliedAsylumOrRefugeeStatus boolean required

    Have you ever applied for asylum or refugee status in SA or any other country?

  • asylumCountryDetails string optional

    If yes, specify the country

    length: 0–100
  • contactPersonRelationship enum optional

    Contact person: relationship

    enum: friend | business-associate | relative | other
  • contactPersonOtherRelationship string optional

    Contact person: relationship (if Other)

    length: 0–100
  • contactPersonName string optional

    Contact person: name

    length: 0–150classification: pii
  • contactPersonAddress string optional

    Contact person: address

    length: 0–300
  • contactPersonTelephoneWork string optional

    Contact person: telephone (Work, incl. area code)

    length: 0–30
  • contactPersonTelephoneHome string optional

    Contact person: telephone (Home, incl. area code)

    length: 0–30
  • relativeOrFriend1Name string optional

    Relative/friend 1 in the Republic: name

    length: 0–150classification: pii
  • relativeOrFriend1Address string optional

    Relative/friend 1 in the Republic: address

    length: 0–300
  • relativeOrFriend1Relationship string optional

    Relative/friend 1 in the Republic: relationship

    length: 0–100
  • relativeOrFriend1IdentityNo string optional

    Relative/friend 1 in the Republic: identity no.

    length: 0–50
  • relativeOrFriend2Name string optional

    Relative/friend 2 in the Republic: name

    length: 0–150classification: pii
  • relativeOrFriend2Address string optional

    Relative/friend 2 in the Republic: address

    length: 0–300
  • relativeOrFriend2Relationship string optional

    Relative/friend 2 in the Republic: relationship

    length: 0–100
  • relativeOrFriend2IdentityNo string optional

    Relative/friend 2 in the Republic: identity no.

    length: 0–50
  • relativeOrFriend3Name string optional

    Relative/friend 3 in the Republic: name

    length: 0–150classification: pii
  • relativeOrFriend3Address string optional

    Relative/friend 3 in the Republic: address

    length: 0–300
  • relativeOrFriend3Relationship string optional

    Relative/friend 3 in the Republic: relationship

    length: 0–100
  • relativeOrFriend3IdentityNo string optional

    Relative/friend 3 in the Republic: identity no.

    length: 0–50
  • proposedDepartureDate date required

    Proposed date of departure for the Republic

  • proposedDeparturePlace string required

    Proposed place of departure for the Republic

    length: 0–150
  • anticipatedArrivalDate date required

    Anticipated date of arrival in the Republic

  • anticipatedArrivalPlace string required

    Anticipated place of arrival in the Republic

    length: 0–150
  • travellingBy enum required

    Travelling by

    enum: air | road | rail | sea
  • carrier string optional

    Carrier

    length: 0–150
  • intendedDurationValue integer required

    Intended duration of stay in the Republic (numeric value)

    range: 1–∞
  • intendedDurationUnit enum required

    Intended duration of stay in the Republic (unit)

    enum: days | weeks | months | years
  • intendedDepartureDate date required

    Intended date of departure

  • proposedActivities string required

    Outline your proposed activities whilst in the Republic

    length: 0–1000
  • maintenanceArrangements string required

    State what funds you have available for maintenance during your stay in the Republic and whether you have a return ticket or other arrangements made for maintenance and return passage

    length: 0–1000
  • availableFundsType string optional

    Available funds (foreign currency): type

    length: 0–50
  • availableFundsAmount number optional

    Available funds (foreign currency): amount

    range: 0–∞
  • southAfricanRandEquivalent number optional

    The specimen instructs a bank statement to be attached as proof of funds held — modelled as the proofOfFundsBankStatement document entry.

    range: 0–∞
  • returnTicketNumber string optional

    Valid return or onward ticket no.

    length: 0–50
  • returnTicketExpiryDate date optional

    Return/onward ticket expiry date

  • maintenanceOther string optional

    Other (maintenance/deportation)

    length: 0–500
  • dependant1FullNames string optional

    Dependant 1: full names

    length: 0–150classification: pii
  • dependant1DateOfBirth date optional

    Dependant 1: date of birth

    classification: pii
  • dependant1Relationship string optional

    Dependant 1: relationship

    length: 0–100
  • dependant1PassportNo string optional

    Dependant 1: passport no.

    length: 0–50
  • dependant1PassportExpiryDate date optional

    Dependant 1: passport expiry date

  • dependant1Nationality string optional

    Dependant 1: nationality

    length: 0–100
  • dependant1Occupation string optional

    Dependant 1: occupation

    length: 0–150
  • dependant2FullNames string optional

    Dependant 2: full names

    length: 0–150classification: pii
  • dependant2DateOfBirth date optional

    Dependant 2: date of birth

    classification: pii
  • dependant2Relationship string optional

    Dependant 2: relationship

    length: 0–100
  • dependant2PassportNo string optional

    Dependant 2: passport no.

    length: 0–50
  • dependant2PassportExpiryDate date optional

    Dependant 2: passport expiry date

  • dependant2Nationality string optional

    Dependant 2: nationality

    length: 0–100
  • dependant2Occupation string optional

    Dependant 2: occupation

    length: 0–150
  • dependant3FullNames string optional

    Dependant 3: full names

    length: 0–150classification: pii
  • dependant3DateOfBirth date optional

    Dependant 3: date of birth

    classification: pii
  • dependant3Relationship string optional

    Dependant 3: relationship

    length: 0–100
  • dependant3PassportNo string optional

    Dependant 3: passport no.

    length: 0–50
  • dependant3PassportExpiryDate date optional

    Dependant 3: passport expiry date

  • dependant3Nationality string optional

    Dependant 3: nationality

    length: 0–100
  • dependant3Occupation string optional

    Dependant 3: occupation

    length: 0–150
  • dependant4FullNames string optional

    Dependant 4: full names

    length: 0–150classification: pii
  • dependant4DateOfBirth date optional

    Dependant 4: date of birth

    classification: pii
  • dependant4Relationship string optional

    Dependant 4: relationship

    length: 0–100
  • dependant4PassportNo string optional

    Dependant 4: passport no.

    length: 0–50
  • dependant4PassportExpiryDate date optional

    Dependant 4: passport expiry date

  • dependant4Nationality string optional

    Dependant 4: nationality

    length: 0–100
  • dependant4Occupation string optional

    Dependant 4: occupation

    length: 0–150
  • dependantsNotAccompanyingIntendLaterEntry boolean optional

    If your spouse and/or other dependants are not accompanying you, do they intend to enter the country at a later stage?

  • dependantsLaterEntryDate date optional

    On (date)

  • dependantsLaterEntryDetails string optional

    Details/reason(s)

    length: 0–500
  • everRefusedEntryOrDeported boolean required

    Have you ever been refused entry into or deported from the Republic?

  • refusedEntryOrDeportedDetails string optional

    If so, please provide details

    length: 0–500
  • everConvictedOfCrime boolean required

    Have you or any of your dependants accompanying you ever been convicted of any crime in any country?

  • criminalOrCivilCasePending boolean required

    Is a criminal/civil case pending against you or any of your dependants accompanying you in any country?

  • sufferingFromDiseaseOrDeficiency boolean required

    Are you or any of your dependants suffering from tuberculosis, any other infectious or contagious disease or any mental or physical deficiency?

  • unrehabilitatedInsolvent boolean required

    Are you an unrehabilitated insolvent?

  • judiciallyDeclaredIncompetent boolean required

    Have you ever been judicially declared incompetent?

  • memberOfViolenceOrHatredOrganisation boolean required

    Are you a member of or adherent to an association or organisation advocating the practice of social violence, or racial hatred?

  • securityHealthQuestionnaireDetails string optional

    Furnish full particulars if the reply to any of these questions is in the affirmative

    length: 0–1000
  • additionalInformation string optional

    Any additional information you wish to bring to the department's attention

    length: 0–1000
  • declarationDate date required

    Date (declaration by applicant)

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-14
  • maturity.level: structural-reference

This is GovSchema Standard Research cycle GOV-2976. South Africa was one vertical short of full 6/6 coverage (Passport, DMV, Business Formation, Taxes, and National ID were all already modelled; only Visa was open). This schema closes that gap, making South Africa the registry's 6th jurisdiction to reach full coverage (after Colombia, Bulgaria, Romania, North Macedonia, and Ghana).

Duplicate-concurrent-run check

Checked git branch -a | grep -i "za-dha\|za/dha\|south-africa" and gh pr list --state all --search "za/dha visa" before starting — neither found an existing branch or PR for this deliverable, so no reconciliation was needed this cycle.

Scouting record

This cycle dispatched three parallel scouting agents: one re-checking Slovakia's disclosed Taxes backlog (GOV-2969's DPFOAv25/financnasprava.sk outage), one re-checking Lithuania's GPM311C companion-schedule candidate, and one screening four near-complete jurisdictions' single remaining vertical gap (Nigeria/DMV, Thailand/National ID, Vietnam/National ID, South Africa/Visa). All four came back with strong, independently-verified candidates:

  • South Africa (DHA) — Visa: the richest and cleanest source found — authored this cycle, see below.
  • Vietnam (MPS/C06) — National ID: dichvucong.bocongan.gov.vn's own CC01 "Tờ khai Căn cước công dân" (Citizen ID Declaration), a genuine, directly-downloadable legacy .doc specimen (~11 numbered fields), unauthenticated. Vietnam's own dichvucong.gov.vn national portal is WAF-blocked; the ministry-specific bocongan.gov.vn domain is not. Delegated as a child issue rather than authored this cycle (this cycle authored South Africa instead) — see the GOV-2976 comment thread for the delegated issue.
  • Slovakia — Taxes: financnasprava.sk's outage (first observed GOV-2969) is still live as of this cycle (every path, including the dedicated pfseform.financnasprava.sk forms subdomain, still 302-redirects to servis.financnasprava.sk/odstavka). A May 21, 2026 Wayback Machine capture of DPFOAv25 (the individual income tax return) was independently retrieved and gives a rich, ~89-numbered-line field list across 9 sections — strong enough to author from the snapshot directly rather than wait indefinitely for the live outage to clear. Delegated as a child issue (opens Slovakia as a new jurisdiction) — see the GOV-2976 comment thread.
  • Lithuania — GPM311C companion schedule: confirmed genuine (page 3 of the same 9-page annex PDF GOV-2969's GPM311 schema already cites — no re-fetch needed) and a strong, ready-to-author bounded-repeating-row candidate (6 income rows / 5 expense rows). Delegated as a child issue (deepens Lithuania's sole vertical, does not add a new vertical count) — see the GOV-2976 comment thread.
  • Nigeria (FRSC) — DMV: a genuine live multi-step e-form (nigeriadriverslicence.frsc.gov.ng) was found, not a dead end, but only its first step's field names were captured before a captcha gate — not ready to author this cycle, left as disclosed backlog for a future cycle to walk the flow further.
  • Thailand (DOPA) — National ID: confirmed dead end this cycle. No unauthenticated ID-card application form is published anywhere on bora.dopa.go.th (7 download-category pages checked); the genuine self-service channels (thportal.bora.dopa.go.th, eservices.bora.dopa.go.th) are both gated behind ThaID app login. Card issuance itself is in-person/biometric. Not worth re-attempting without a genuinely new source.

Source verification

  • PDF source: https://dirco.gov.za/paris/wp-content/uploads/sites/6/2024/12/LONG-STAY-VISA-APPLICATION-FORM.pdf — independently re-fetched via curl: HTTP 200, application/pdf, 599,736 bytes, sha256 8d967ccbd2e6e3f3f1f565a342508f6224e5c5330814d3174a6f4c8dddddd960. Hosted on South Africa's Department of International Relations and Cooperation's (DIRCO) own Paris-mission domain, a first-party, unauthenticated, no-login/CAPTCHA/WAF-gated government source, though not DHA's own domain directly (the Department of Home Affairs' main site hosts no downloadable specimen of this form; DIRCO's mission sites re-publish DHA's official gazetted forms for use by South African missions abroad and applicants filing through them).
  • Independently re-extracted via pdfjs-dist (legacy Node build, run from an isolated /tmp scratch directory) directly from the raw PDF bytes: 20 pages, 0 Widget annotations on every page — a flat, print-and-hand-fill Government Gazette specimen, not an AcroForm. getTextContent() returned a full, clean, unbroken text layer on every page (no OCR/scan artifacts). The document's own printed heading confirms its identity and provenance: "(DHA-1738) Form 8 ... APPLICATION FOR VISA TO TEMPORARILY SOJOURN IN THE REPUBLIC [Section 10(2)(c) to (k); Regulation 9(1)]", and every page footer prints "STAATSKOERANT, 22 MEI 2014 No. 37679" / "GOVERNMENT GAZETTE, 22 MAY 2014" confirming this is the form as published in South Africa's Government Gazette, Vol. 587, No. 37679.

Field derivation and scoping

The extracted text (20 pages) was read in full before modeling any field. Scope:

  • Pages 1-7 (Sections 1-10) — modeled in full: the category-of-permit selector plus a biometric/fingerprint-form checkbox (page 1); Personal Details, Citizenship Details, Passport Details, and Addresses (Sections 1-4, pages 2-4); Intentions/Proposed Duration of Stay and Maintenance/Deportation (Sections 5-6, page 5); Particulars of Family/Dependants Accompanying (Section 7, pages 5-6); the "not accompanying" branch and a refused-entry/deportation question (page 6, between Sections 7 and 8); the Security/Health Questionnaire (Section 8, page 6); Additional Information (Section 9, page 7); and the Declaration by Applicant (Section 10, page 7). These 10 sections are common to every one of the form's 11 visa categories — the single richest, most-reused part of the specimen.
  • Page 8 — modeled as documents[]: the supporting-documents checklist applicable "in respect of all temporary residence visa applications, except medical treatment visas" (13 items: valid passport, yellow fever certificate, medical report, radiological report, marriage certificate/foreign-spousal-recognition, spousal affidavit, divorce decree, court order on parental responsibility, death certificate, parental consent, proof of adoption, legal separation order, police clearance certificates).
  • Pages 9-20 (the twelve category-specific additional-document checklists) — deliberately out of scope, disclosed in the schema's own description: Study (2 pages), Treaty, Business (established vs. establishing, 3 pages combined), Medical Treatment, Relative's, Work: General, Work: Critical Skills, Work: Intra-company transfer, Retired Person's, and Exchange (2 pages) each have their own independently structured document checklist. Modeling all twelve in one v1.0.0 would make this schema unreasonably large and each is a legitimate, separately scoped future companion candidate — this follows the same common-core-first scoping convention already established for e.g. ng/nis/application-for-visa-entry-permit's union-of-editions approach and gh/dvla/a2-vehicle-registration's OWNER-pathway scoping.

Scoping and modeling judgment calls

  • The page-1 "Biometric (Attach Fingerprint Form, with Photograph)" checkbox is modeled as an independent boolean gate (biometricEnrollmentRequired), not a 12th visaCategory enum value. It is printed immediately after, and visually alongside, the 11 category checkboxes, but its own parenthetical names an attachment action ("Attach Fingerprint Form, with Photograph"), not a permit type — disclosed as an interpretive judgment call; a future cycle with a clearer source (e.g. official DHA guidance explaining this checkbox) should revisit it.
  • Three bounded repeating groups, each modeled via numbered field-name suffixes (this registry's established convention, since the meta-schema field.type enum has no array/list member): a 3-slot "other addresses lived in the last ten years" table (otherAddress1..3), a 3-slot "relatives and/or friends in the Republic" table (relativeOrFriend1..3), and a 4-slot "family/dependants accompanying you" table (dependant1..4). The specimen prints no fixed row count for any of the three — each is modeled with a bounded slot count matching this registry's existing precedent for unbounded prose tables, and every slot's fields are independently optional so a shorter applicant simply leaves the remaining rows blank.
  • otherDocumentNumber/otherDocumentExpiryDate left as plain optional fields, not requiredWhen-gated on otherDocumentType. An earlier draft gated them on otherDocumentType notEquals "", but this registry's own established gotcha (see the notequals-empty-string-absent-field-bug memory record) flags that pattern as broken against an absent/undefined field — a genuinely optional block's sub-fields are left independently optional instead, matching precedent elsewhere in this registry.
  • securityHealthQuestionnaireDetails gated on an any condition across all six Section 8 yes/no questions, mirroring the source's own single shared instruction ("Furnish full particulars if the reply to any of these questions is in the affirmative") rather than inventing six separate detail fields the specimen does not print.
  • dateOfDivorce (Section 1) and the divorceDecree document (page 8) are two independent requiredWhen: maritalStatus equals divorced gates, not a single combined one — the source states the divorce order "must be attached" directly beneath the date-of-divorce field, but the date field and the document are still two structurally distinct things (a data field vs. a documents[] entry) with separate requiredWhen clauses per this registry's field/document-are-separate-arrays convention.
  • Dates printed as separate "Year Month Day" labels (e.g. Section 1's date of birth) are modeled as a single date-typed field, not three separate integer fields — matching this registry's prevailing practice for date-of-birth fields elsewhere (e.g. the Lithuania/Ghana/Bulgaria schemas authored in recent cycles) over a literal three-box transcription.
  • Classification: surname, givenNames, maidenName, stageName, previousOrAlternativeNames, dateOfBirth, placeOfBirthTown, placeOfBirthCountry, maritalStatus, presentCountryOfCitizenship, passportNumber, residentialAddress, postalAddress, contactPersonName, and each dependantN name/date-of-birth field are tagged pii. Plain enumerated/boolean/numeric/logistics fields are left unclassified.

Conformance run

Two hand-authored valid fixtures under conformance/za/dha/application-for-visa-temporary-sojourn/1.0.0/:

  • valid-visitors-visa-first-time.json — a never-married visitor's-visa applicant with a minimal, all-negative security/health questionnaire and no dependants, no other-citizenship, no repeating-group rows — exercises the schema's minimal required-field path.
  • valid-business-visa-divorced-affirmative-security.json — a divorced business-visa applicant with dual citizenship, one prior address, one listed in-Republic relative, one accompanying dependant with a later-entry intention, a prior refused-entry/deportation history, and an affirmative security-questionnaire answer — exercises the schema's requiredWhen gates across marital-status, citizenship, asylum, re-entry, dependants, and security-questionnaire fields together, plus the divorceDecree conditional document.

Five mutation-control fixtures, each isolated to raise exactly one error:

  • mutation-control-missing-required-field.json — drops surname (static required: true).
  • mutation-control-invalid-enum-value.json — sets travellingBy to "spaceship", not one of the enum's 4 values.
  • mutation-control-invalid-date-format.json — sets dateOfBirth to "14/03/1990", not the required YYYY-MM-DD shape.
  • mutation-control-missing-conditional-date-of-divorce.json — sets maritalStatus to "divorced" (with documents_divorceDecree already supplied) without its dateOfDivorce companion.
  • mutation-control-missing-conditional-document.json — takes the divorced business-visa fixture and drops documents_divorceDecree without touching any field, isolating the document-side requiredWhen gate from the field-side one.

All seven fixtures were checked with a from-scratch Node conformance checker (/tmp/validate_instance_za.mjs, not committed — a disposable script, per this registry's own established practice since no committed conformance-fixture validator exists) implementing this schema's own required/requiredWhen/documents[].requiredWhen/enum/date-format grammar directly:

``` $ node /tmp/validate_instance_za.mjs registry/za/dha/application-for-visa-temporary-sojourn/1.0.0/schema.json conformance/za/dha/application-for-visa-temporary-sojourn/1.0.0/valid-visitors-visa-first-time.json .../valid-visitors-visa-first-time.json: OK (0 errors)

$ node /tmp/validate_instance_za.mjs registry/za/dha/application-for-visa-temporary-sojourn/1.0.0/schema.json conformance/za/dha/application-for-visa-temporary-sojourn/1.0.0/valid-business-visa-divorced-affirmative-security.json .../valid-business-visa-divorced-affirmative-security.json: OK (0 errors)

$ for f in conformance/za/dha/application-for-visa-temporary-sojourn/1.0.0/mutation-control-*.json; do node /tmp/validate_instance_za.mjs registry/za/dha/application-for-visa-temporary-sojourn/1.0.0/schema.json "$f"; done mutation-control-invalid-date-format.json: 1 error(s) mutation-control-invalid-enum-value.json: 1 error(s) mutation-control-missing-conditional-date-of-divorce.json: 1 error(s) mutation-control-missing-conditional-document.json: 1 error(s) mutation-control-missing-required-field.json: 1 error(s) ```

Both valid scenarios raised 0 errors; all 5 negative controls raised exactly 1 error each (an initial draft of mutation-control-missing-conditional-date-of-divorce.json raised 2 — documents_divorceDecree was also gated on maritalStatus: divorced — fixed by supplying that document so the fixture isolates the field-side gate alone).

The registry's zero-dependency structural validator and its ajv-based meta-schema validator both pass for this document:

``` $ node tools/validate.mjs registry/za/dha/application-for-visa-temporary-sojourn/1.0.0/schema.json ok registry/za/dha/application-for-visa-temporary-sojourn/1.0.0/schema.json 1/1 document(s) passed.

$ node tools/validate-ajv.mjs registry/za/dha/application-for-visa-temporary-sojourn/1.0.0/schema.json ok registry/za/dha/application-for-visa-temporary-sojourn/1.0.0/schema.json [v0.3] 1/1 document(s) validated against the meta-schema (ajv 2020-12). ```

tools/govschema-client/registry-index.json was regenerated via npm run build-index inside tools/govschema-client/.

Scope and jurisdiction notes

  • Closes South Africa's Visa vertical (6 of 6) — South Africa now joins Colombia, Bulgaria, Romania, North Macedonia, and Ghana as jurisdictions with full coverage.
  • jurisdiction.level is national — DHA is South Africa's national immigration/civic authority.
  • process.type is application.
  • process.language is en (the specimen is English-only; South Africa's other 10 official languages are not represented on this form).
  • authority.url is DHA's own domain (dha.gov.za); source.url is DIRCO's Paris-mission re-publication of the DHA-1738 specimen, since DHA's own domain hosts no direct download of this form — disclosed here rather than silently treating DIRCO as the issuing authority.

Re-verification

Per the practice's cadence, nextReviewBy is set to 2027-01-14 (6 months). A future review should prioritize: (1) authoring one or more of the twelve category-specific additional-document checklists (pages 9-20) as companion schemas, starting with the largest/most commonly used categories (Business, Work: General, Work: Critical Skills); (2) revisiting the biometricEnrollmentRequired judgment call if a clearer DHA source surfaces; (3) picking up this cycle's three delegated child issues (Vietnam National ID, Slovakia Taxes, Lithuania GPM311C companion).

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 Department of Home Affairs or any government. The authoritative source is always the live government form and its official instructions.