Registry entry

Application for a Republic of Ghana Passport

The Ministry of Foreign Affairs and Regional Integration (MFA) Passport Office's standard manual application form for a Ghanaian passport, citing the Passport and Travel Certificate Decree (NLCD. 155, 1967). Distributed as a free downloadable PDF from the MFA's own "Passport Manual Forms" page (mfa.gov.gh/index.php/passport/), which documents the full manual workflow: download the form, pay the processing fee online ("PAY PROCESSING FEE"), receive the resulting Paid Voucher Code by SMS, write that code on the printed form, and submit the completed form in person at one of ten listed Passport Application Centers (PACs). Opens Ghana's Passport vertical (3 of 6, alongside National ID & Civic Documents and Visa). A genuinely flat print form: pdfjs-dist confirms 0 AcroForm/Widget annotations across all 4 pages but a real, fully extractable text layer (not a scanned image), so every field below is read via coordinate/text-layout correlation rather than an embedded field name. 30 numbered items span the applicant's name and any former name, date of birth and gender, place of birth, height/eye colour/hair colour/visible peculiarities, nationality, marital status (printed as a bare blank with no enumerated options, matching this registry's gh/gis precedent for the same jurisdiction), profession, three optional government ID numbers (National ID, Social Security, Voter's ID), a full residence address including a GhanaPost GPS Digital Address Code, contact details, educational institution and attendance period, a three-generation evidence-of-citizenship block (father, mother, and one grandparent, each with nationality, living status, addresses, and contact details), a dual-citizenship declaration, a document-holdings checklist plus a single attached-document detail block, two guarantors, the applicant's own declaration (including a conditional prior-passport disclosure), a parent/legal guardian consent block for applicants under 18, a translator block for applicants who cannot read or write English, and a formal witness section (mandatory per the form's own instruction 3, which lists the professional categories a witness must belong to). Unlike gh/gis's Re-Entry Visa/Permit specimen, this form contains no printed photograph-attachment instruction anywhere across all 4 pages (confirmed both in the extracted text and by visual inspection of all 4 rendered pages) — no `documents[]` photograph entry is modelled here, since none is printed on this specimen. GovSchema is independent and is not affiliated with, endorsed by, or operated by the Government of Ghana or the Ministry of Foreign Affairs and Regional Integration.

Registry entry

gh/mfa/application-for-a-republic-of-ghana-passport

Jurisdiction
Ghana · national
Version
1.0.0
Verification
draft

Authoritative source "Application for a Republic of Ghana Passport" (Passport and Travel Certificate Decree, NLCD. 155, 1967)

Machine access

Registry catalog
registry/index.jsonone record per schema id

Field reference

114 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

  • taxIdentificationNumber string optional

    The applicant's Ghana Revenue Authority Tax Identification Number, given in a labelled 11-cell comb box at the top of page 1, above the numbered items and the FOR OFFICIAL USE ONLY block.

    length: 0–11classification: sensitive-pii
  • paidVoucherCode string required

    The Paid Voucher Code received by SMS after paying the passport processing fee online, written here per the MFA's own published workflow (mfa.gov.gh/index.php/passport/, "HOW TO APPLY": pay the processing fee, receive an SMS with the code, then "Write the Paid Voucher Code on your Manual Form"). Printed on the form itself only as a blank labelled "TRANSACTION NO:", with no on-form explanation of what belongs there; the live page supplies that context.

  • applicantFullNameSummary string required

    A cover-strip statement of the applicant's full name, printed above the instructions/caution text and the FOR OFFICIAL USE ONLY block, distinct from the structured Surname/First Name/Other Names breakdown captured later in item 1.

    length: 0–100classification: pii
  • surname string required

    (a) Surname

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

    (b) First Name

    length: 0–50classification: pii
  • otherNames string optional

    (c) Other Names

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

    The applicant's maiden name(s), where applicable.

    length: 0–50classification: pii
  • previousName string optional

    The applicant's previous name, where the name has been changed by Affidavit or Gazette Publication.

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

    Printed as separate Day/Month/Year in full blanks, collapsed here into a single date value, consistent with this registry's convention for Day/Month/Year triplets.

    classification: pii
  • gender enum required

    The applicant circles whichever of the two printed options applies.

    enum: Male | Femaleclassification: pii
  • cityOrTownOfBirth string required

    City or Town of Birth

    length: 0–100
  • countryOfBirth string required

    Country of Birth

    length: 0–60
  • heightMeters integer required

    Whole-metres component of the applicant's height, printed as a blank immediately before the literal "m" label.

    range: 0–2
  • heightCentimeters integer required

    Additional-centimetres component of the applicant's height, printed as a blank immediately before the literal "cm" label.

    range: 0–99
  • colourOfEyes string required

    (b) Colour of eyes

    length: 0–30
  • colourOfHair string required

    (c) Colour of Hair

    length: 0–30
  • visiblePeculiarities string optional

    Any visible distinguishing marks, where applicable.

    length: 0–200
  • nationality string required

    Nationality

    length: 0–60classification: pii
  • maritalStatus string required

    Modelled as free text, not an enum: the specimen prints only a bare blank for this item, with no enumerated options printed anywhere across all 4 pages, consistent with this registry's gh/gis precedent (a different form, same jurisdiction) for the same judgment call.

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

    (a) Profession

    length: 0–100
  • previousProfession string optional

    (b) Previous Profession

    length: 0–100
  • nationalIdCardNumber string optional

    National ID Card No.

    length: 0–20classification: sensitive-pii
  • socialSecurityNumber string optional

    Social Security Number

    length: 0–20classification: sensitive-pii
  • votersIdCardNumber string optional

    Voter's ID Card No.

    length: 0–20classification: sensitive-pii
  • countryOfResidence string required

    Country of Residence

    length: 0–60
  • zipOrPostCode string optional

    Zip / Post Code

    length: 0–20
  • cityOrTownOfResidence string required

    City or Town of Residence

    length: 0–100
  • suburb string optional

    Suburb

    length: 0–100
  • houseNumberAndStreet string required

    (a) House Number and Street

    length: 0–150
  • digitalAddressCode string optional

    The applicant's GhanaPost GPS digital address code, where one has been obtained.

    length: 0–18classification: pii
  • postalAddress string required

    Postal Address

    length: 0–150
  • telephoneNo string required

    Telephone No.

    length: 0–20
  • email string optional

    E-mail

    patternlength: 0–100
  • institutionAttended string required

    The applicant's current or last educational institution attended.

    length: 0–150
  • institutionAddress string optional

    (b) Address

    length: 0–150
  • institutionPeriodFrom string optional

    Month/Year the applicant began attending, printed as separate Month and Year in full blanks and collapsed here into one MM/YYYY value.

    pattern
  • institutionPeriodTo string optional

    Month/Year the applicant finished attending (or present), printed as separate Month and Year in full blanks and collapsed here into one MM/YYYY value.

    pattern
  • fatherName string required

    a. Name of Father

    length: 0–100classification: pii
  • fatherNationality string required

    Nationality

    length: 0–60
  • fatherLiving boolean required

    Whether this relative is living, circled Yes/No on the specimen.

  • fatherPostalAddress string optional

    Postal Address

    length: 0–150
  • fatherResidentialAddress string optional

    Residential Address

    length: 0–150
  • fatherLastKnownAddress string optional

    Only meaningful when this relative is no longer living.

    length: 0–150
  • fatherHomeTown string optional

    Home Town

    length: 0–100
  • fatherPhoneNumber string optional

    Phone Number

    length: 0–20
  • fatherEmail string optional

    E-mail

    length: 0–100
  • motherName string required

    b. Name of Mother

    length: 0–100classification: pii
  • motherNationality string required

    Nationality

    length: 0–60
  • motherLiving boolean required

    Whether this relative is living, circled Yes/No on the specimen.

  • motherPostalAddress string optional

    Postal Address

    length: 0–150
  • motherResidentialAddress string optional

    Residential Address

    length: 0–150
  • motherLastKnownAddress string optional

    Only meaningful when this relative is no longer living.

    length: 0–150
  • motherHomeTown string optional

    Home Town

    length: 0–100
  • motherPhoneNumber string optional

    Phone Number

    length: 0–20
  • motherEmail string optional

    E-mail

    length: 0–100
  • grandParentName string optional

    c. Name of one Grand Parent

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

    Nationality

    length: 0–60
  • grandParentLiving boolean required

    Whether this relative is living, circled Yes/No on the specimen.

  • grandParentPostalAddress string optional

    Postal Address

    length: 0–150
  • grandParentResidentialAddress string optional

    Residential Address

    length: 0–150
  • grandParentLastKnownAddress string optional

    Only meaningful when this relative is no longer living.

    length: 0–150
  • grandParentHomeTown string optional

    Home Town

    length: 0–100
  • grandParentPhoneNumber string optional

    Phone Number

    length: 0–20
  • grandParentEmail string optional

    E-mail

    length: 0–100
  • hasDualCitizenship boolean required

    Do you have dual citizenship?

  • dualCitizenshipOtherCountry string optional

    If yes state other country

    length: 0–60
  • documentsHeldBirthCertificate boolean optional

    Whether the applicant holds this document, one of 7 independent "circle all that apply" options.

  • documentsHeldNationalIdCard boolean optional

    Whether the applicant holds this document, one of 7 independent "circle all that apply" options.

  • documentsHeldOldPassport boolean optional

    Whether the applicant holds this document, one of 7 independent "circle all that apply" options.

  • documentsHeldVoterIdCard boolean optional

    Whether the applicant holds this document, one of 7 independent "circle all that apply" options.

  • documentsHeldDualCitizenshipCard boolean optional

    Whether the applicant holds this document, one of 7 independent "circle all that apply" options.

  • documentsHeldNaturalizationCard boolean optional

    Whether the applicant holds this document, one of 7 independent "circle all that apply" options.

  • documentsHeldRegistrationCard boolean optional

    Whether the applicant holds this document, one of 7 independent "circle all that apply" options.

  • attachingDocumentType enum required

    Which single one of the 7 listed document types (A-G) is being attached as evidence of citizenship/identity, per instruction 1 at the top of the form.

    enum: 7 values
  • attachingDocumentNumber string required

    Number

    length: 0–30classification: sensitive-pii
  • attachingDocumentDateOfIssue date optional

    Printed as separate Day/Month/Year in full blanks, collapsed here into a single date value.

  • attachingDocumentPlaceOfIssue string optional

    Place of Issue

    length: 0–100
  • guarantorAFullName string required

    Full Name

    length: 0–100classification: pii
  • guarantorAResidentialAddress string required

    Residential Address

    length: 0–150
  • guarantorAPostalAddress string optional

    Postal Address

    length: 0–150
  • guarantorATelephoneNo string required

    Telephone No.

    length: 0–20
  • guarantorAOccupation string required

    Occupation

    length: 0–100
  • guarantorAEmail string optional

    E-mail

    length: 0–100
  • guarantorASignatureDate date required

    Printed as separate Day/Month/Year in full blanks beside the guarantor's Signature, collapsed here into a single date value; the signature graphic itself is excluded, consistent with this registry's practice of excluding raw signature capture.

  • guarantorBFullName string required

    Full Name

    length: 0–100classification: pii
  • guarantorBResidentialAddress string required

    Residential Address

    length: 0–150
  • guarantorBPostalAddress string optional

    Postal Address

    length: 0–150
  • guarantorBTelephoneNo string required

    Telephone No.

    length: 0–20
  • guarantorBOccupation string required

    Occupation

    length: 0–100
  • guarantorBEmail string optional

    E-mail

    length: 0–100
  • guarantorBSignatureDate date required

    Printed as separate Day/Month/Year in full blanks beside the guarantor's Signature, collapsed here into a single date value; the signature graphic itself is excluded, consistent with this registry's practice of excluding raw signature capture.

  • declarationFullName string required

    The applicant's full name filled into the declaration's own "I ___ hereby apply for a Ghanaian Passport and declare" blank.

    length: 0–100classification: pii
  • firstTimeApplicant boolean required

    Whether statement (a), "that I have not previously held or applied for a passport of any description", stands as printed (true) or is cancelled by the applicant as not applicable (false, meaning the applicant has held/applied for a passport before and statement (b) applies instead).

  • previousPassportNumber string optional

    The applicant's previous passport number, only applicable when statement (a) is cancelled.

    length: 0–20classification: sensitive-pii
  • previousPassportStatus enum optional

    Whether the previous passport is attached to this application or has been lost, only applicable when statement (a) is cancelled.

    enum: attached | lost
  • declarationSignatureDate date required

    Printed as separate Day/Month/Year in full blanks beside the applicant's Signature, collapsed here into a single date value.

  • guardianRelationshipToApplicant string optional

    The parent/legal guardian's stated relationship to the applicant. Only applicable when the applicant is under 18 years of age; not requiredWhen-gated since this form has no dedicated boolean minor-status field to key off, consistent with this registry's established practice of only gating on fields the source itself provides (cf. item 9's free-text maritalStatus).

    length: 0–60classification: pii
  • guardianFullName string optional

    Only applicable when the applicant is under 18 years of age.

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

    Only applicable when the applicant is under 18 years of age.

    length: 0–150
  • guardianTelephoneNo string optional

    Only applicable when the applicant is under 18 years of age.

    length: 0–20
  • guardianSignatureDate date optional

    Printed as separate Day/Month/Year in full blanks beside the guardian's Signature, collapsed here into a single date value. Only applicable when the applicant is under 18 years of age.

  • translatorLanguage string optional

    Only applicable when the applicant cannot read or write English and the declaration was interpreted for them.

    length: 0–60
  • translatorFullName string optional

    Only applicable when the applicant cannot read or write English.

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

    Only applicable when the applicant cannot read or write English.

    length: 0–150
  • translatorTelephoneNo string optional

    Only applicable when the applicant cannot read or write English.

    length: 0–20
  • translatorSignatureDate date optional

    Printed as separate Day/Month/Year in full blanks beside the translator's Signature, collapsed here into a single date value. Only applicable when the applicant cannot read or write English.

  • witnessFullName string required

    A witness from one of the categories listed in the form's own instruction 3 (senior clergy, commissioned officer, senior civil/public servant, registered medical practitioner, solicitor/barrister, head of a recognized educational institution, or another recognized regulated professional) who personally knows the applicant.

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

    Occupation

    length: 0–100
  • witnessPosition string optional

    Position

    length: 0–100
  • witnessBusinessAddress string optional

    Business Address

    length: 0–150
  • witnessBusinessPhoneNo string optional

    Business Phone No.

    length: 0–20
  • witnessResidentialAddress string optional

    Residential Address

    length: 0–150
  • witnessResidentialPhoneNo string optional

    Residential Phone No.

    length: 0–20
  • witnessSignatureDate date required

    Printed as separate Day/Month/Year in full blanks beside the witness's Signature, collapsed here into a single date value. A witness is mandatory per the form's own instruction 3.

Verification record

This file is the source-review record for this document version, per the manual-source-review-v1 practice. It documents the provenance of the published fields and states the current verification claim honestly.

Current claim

  • status: draft
  • verification.method: manual-source-review-v1
  • verification.lastVerifiedAt: 2026-07-13

This is a GovSchema Standard Research cycle (GOV-2703), continuing Ghana's research thread from GOV-2695 (the parent research issue), which scouted all 5 of Ghana's then-remaining open verticals in parallel following GOV-2510's opening of Ghana as the registry's 41st jurisdiction (via National ID & Civic Documents). GOV-2697 (Taxes) and GOV-2698 (Visa) have since closed two of those five verticals; this issue is for the Passport vertical.

Source examined

  • Authority: Ministry of Foreign Affairs and Regional Integration (MFA), Passport Office.
  • Document: "APPLICATION FOR A REPUBLIC OF GHANA PASSPORT", citing the Passport and Travel Certificate Decree (NLCD. 155, 1967).
  • URL (directly retrieved, HTTP 200, no login): https://mfa.gov.gh/wp-content/uploads/2018/10/passport-form.pdf
  • File identity: sha256:e59193adeaf05847042dbd03928f1e7e9bec3b4cf333ee19c048c18e5bb73c9, 248,106 bytes, Content-Type: application/pdf. Byte count and hash match the GOV-2703 issue's own citation exactly.
  • Structure: 4 pages. Page 1 carries a header strip (TIN, a paid-voucher-code blank, a name-summary blank), instructions/caution text, and a "FOR OFFICIAL USE ONLY" block, followed by the start of the numbered items (1-3). Pages 2-4 continue items 4-30.
  • Retrieved / reviewed: 2026-07-13
  • Live workflow page also independently re-fetched: https://mfa.gov.gh/index.php/passport/ (HTTP 200), which the issue cited as describing "the manual-form workflow." Its own text, stripped of markup, confirms verbatim: "Download a form... Pay for the processing of your application ('PAY PROCESSING FEE'). You will receive an SMS on the Mobile Phone number you entered... Write the Paid Voucher Code on your Manual Form. Submit the completed Manual Form to the PAC for further processing," followed by a list of 10 Passport Application Centers (PACs).

Extraction method

pdfjs-dist (v4, legacy build) page.getAnnotations() confirms 0 Widget annotations across all 4 pages, and page.getTextContent() confirms a real, fully extractable text layer (338 / 187 / 168 / 223 text items on pages 1-4 respectively) — a flat print form, a different tier from both this registry's AcroForm specimens and its genuinely scanned specimens (e.g. gh/gis).

With no interactive field metadata to read, each page's text items were grouped by y-coordinate (3pt tolerance) into visual lines and sorted by x-coordinate within each line, reproducing the form's printed reading order. Every numbered item (1-30) was read this way. A custom NodeCanvasFactory (backed by node-canvas, at 2.5x scale) was also used to render all 4 pages to PNG; while the specimen's font glyphs did not render in this environment (a pdfjs-dist/node-canvas standard-font path-generator incompatibility, not a content issue — the text layer itself already fully accounts for every printed word), the rendered comb-box and blank-line geometry was still visible and was used to (a) confirm no isolated, unlabelled box exists anywhere across all 4 pages that might indicate a photograph-affixing area, and (b) resolve the Item 7(a) Height layout (___m ___cm, two separate blanks) from the gaps between text tokens on that line.

Field inventory

114 fields[] entries, referenced by item number. Selected groups:

| Item(s) | Printed content | Schema field(s) | |---|---|---| | Header | TIN; TRANSACTION NO; NAME OF APPLICANT | taxIdentificationNumber, paidVoucherCode, applicantFullNameSummary | | 1 | Surname / First Name / Other Names | surname, firstName, otherNames | | 2-3 | Maiden Name(s); previous name if changed | maidenName, previousName | | 4 | Date of Birth; Gender | dateOfBirth, gender | | 5-6 | City/Town of Birth; Country of Birth | cityOrTownOfBirth, countryOfBirth | | 7 | Height (m/cm); Colour of eyes/hair; Visible peculiarities | heightMeters, heightCentimeters, colourOfEyes, colourOfHair, visiblePeculiarities | | 8-10 | Nationality; Marital Status; Profession/Previous Profession | nationality, maritalStatus, profession, previousProfession | | 11-13 | National ID / SSN / Voter's ID card numbers | nationalIdCardNumber, socialSecurityNumber, votersIdCardNumber | | 14-21 | Residence address, Digital Address Code, contact | countryOfResidence ... email (10 fields) | | 22 | Institution, address, attendance period | institutionAttended, institutionAddress, institutionPeriodFrom, institutionPeriodTo | | 23 | Evidence of citizenship: father / mother / one grandparent | 27 fields (9 each, father*/mother*/grandParent*) | | 24 | Dual citizenship declaration | hasDualCitizenship, dualCitizenshipOtherCountry | | 25 | Documents held (A-G); document being attached | 7 booleans + attachingDocumentType/Number/DateOfIssue/PlaceOfIssue | | 26 | Two guarantors | 14 fields (guarantorA*/guarantorB*) | | 27 | Declaration by applicant | declarationFullName, firstTimeApplicant, previousPassportNumber, previousPassportStatus, declarationSignatureDate | | 28 | Parent/legal guardian consent (under 18) | guardianRelationshipToApplicant ... guardianSignatureDate (5 fields) | | 29 | Translator for illiterate-in-English applicants | translatorLanguage ... translatorSignatureDate (5 fields) | | 30 | Witness | witnessFullName ... witnessSignatureDate (8 fields) |

documents[] (4 entries):

  • citizenshipAndIdentityEvidence — one of the 7 document types listed in item 25 (A-G), matching the applicant's own attachingDocumentType selection, per instruction 1's "evidence of citizenship and... evidence of identity."
  • missingPassportPoliceReportrequiredWhen previousPassportStatus equals "lost", per instruction 2: "Police Report and affidavit are to be attached for missing passports."
  • passportProcessingFeePayment — sourced from the live mfa.gov.gh/index.php/passport/ page, not the PDF itself (see below).
  • applicationDeclaration — item 27's always-applicable "And that all above information is true and correct," quoted verbatim.

The page-1 "FOR OFFICIAL USE ONLY" block (Regional Office, vendor receipt-stamp area, Passport Office stamp, "Please enter application payment PIN") is excluded as staff/vendor-populated, consistent with this registry's established convention (cf. gh/nia's excluded MRW Number/Registration Centre Number/Interviewer NID No. widgets). The pre-printed "SERIAL NO: 18/" blank is excluded as a form-batch identifier, not an applicant-supplied value. No raw signature/thumbprint capture field is modelled anywhere on the form, for the same reason its constituent Signature/Date blanks are split (only the Date half is modelled).

Access notes and judgment calls

  1. paidVoucherCode (the printed "TRANSACTION NO:" blank) is interpreted using the live workflow page, not the PDF alone. The specimen prints "TRANSACTION NO:" with no on-form explanation of what value belongs there. mfa.gov.gh/index.php/passport/'s own "HOW TO APPLY" steps make the intended content unambiguous: pay the processing fee online, receive an SMS with a "Paid Voucher Code," and "Write the Paid Voucher Code on your Manual Form" — there being no other blank on the specimen this instruction could refer to. Disclosed here rather than silently guessed at from the PDF alone.
  2. maritalStatus is modelled as free text, not an enum, matching this registry's gh/gis precedent for the same jurisdiction: the specimen prints only a bare blank for item 9, with no enumerated options anywhere across all 4 pages (confirmed via the extracted text and a full render).
  3. Item 7(a) Height is modelled as two integer fields (heightMeters/heightCentimeters), reflecting the printed ___m ___cm layout (two separate blanks, one before each unit literal), rather than a single decimal field — read directly from the x-coordinate gaps between the "Height", "m", and "cm" text tokens on that line.
  4. Item 23's evidence-of-citizenship block genuinely supports a requiredWhen gate, unlike gh/gis's ungated maritalStatus precedent: each relative's "Living? Yes/No" is a real printed boolean choice, so each LastKnownAddress field ("If deceased provide last known address") is requiredWhen its own Living field equals false — a genuine conditional-requiredness rule, not a disclosed-only convention, because this form actually provides the field to key off.
  5. Item 27's declaration is modelled around firstTimeApplicant, the printed statement (a) verbatim ("that I have not previously held or applied for a passport of any description"), with previousPassportNumber/previousPassportStatus each requiredWhen firstTimeApplicant equals false — mirroring the form's own "Cancel if not applicable" mutual exclusivity between statements (a) and (b).
  6. Items 28 (parent/legal guardian consent, applicants under 18) and 29 (translator for applicants who cannot read or write English) are not requiredWhen-gated, even though both are conditional in the real world. This specimen provides no dedicated boolean minor-status or literacy-status field to key off (unlike item 23's *Living fields), so gating would require inventing a field this form does not print — consistent with this registry's established practice of only gating conditionals on fields the source itself provides (cf. gh/gis's ungated maritalStatus-conditional spouseName/spouseNationality). Each field's description documents the real-world condition instead.
  7. No photograph documents[] entry is modelled, a deliberate departure from gh/gis (a different Ghanaian form). Neither the extracted text nor a full-page render of all 4 pages turns up any photograph-attachment instruction or unlabelled photo-affixing box anywhere on this specimen — disclosed as an absence rather than assumed by analogy to other passport forms in this registry.
  8. passportProcessingFeePayment (a documents[] entry) is sourced from the live mfa.gov.gh/index.php/passport/ page, not the PDF. The fee-payment step precedes and is external to the printed form (it produces the Paid Voucher Code written into paidVoucherCode), so there is no PDF sourceRef to cite for it; its sourceRef instead quotes the live page directly. No fee amount is asserted, since none is published on either the form or the workflow page.
  9. Scoping: this schema covers only the manual, paper-form pathway. passport.mfa.gov.gh (an online portal referenced by the issue) is login-gated for appointment booking and was not screened as an alternative submission channel this cycle; the manual form itself (this schema's subject) is confirmed unauthenticated and unaffected by that gate.

Test run (Phase 4)

No live submission was attempted: Ghana's passport application is a printed, hand-completed form submitted in person at a Passport Application Center together with photographs, evidence of citizenship/identity, and guarantor/witness signatures — not a portal accepting programmatic submissions — and submitting fabricated identity data against a foreign government's passport-issuing process is not a safe or reversible action, the same reasoning already documented for this registry's other passport/immigration schemas (e.g. gh/gis, rw/dgie, bd/dip).

Instead, two independent worked mock records were built from this document's own field inventory and checked with a purpose-written script (validate_instance.mjs, mirroring the approach used by gh/gis and rw/dgie): compiles schema.json's fields[] into a JSON Schema document checked with ajv (+ajv-formats for date), plus a from-scratch evaluator for requiredWhen/documents[] conditional requiredness (a shared-Condition-grammar subset: equals/notEquals/in, all/any/ not).

``` $ node validate_instance.mjs registry/gh/mfa/application-for-a-republic-of-ghana-passport/1.0.0/schema.json \ conformance/gh/mfa/application-for-a-republic-of-ghana-passport/1.0.0/first-time-applicant-married-both-parents-living.json Static (required/type/pattern/enum) validation: PASS requiredWhen/documents[] conditional validation: PASS OVERALL: PASS

$ node validate_instance.mjs registry/gh/mfa/application-for-a-republic-of-ghana-passport/1.0.0/schema.json \ conformance/gh/mfa/application-for-a-republic-of-ghana-passport/1.0.0/previous-passport-lost-dual-citizenship-deceased-father.json Static (required/type/pattern/enum) validation: PASS requiredWhen/documents[] conditional validation: PASS OVERALL: PASS ```

The second fixture exercises three conditionals at once: firstTimeApplicant: false (requiring previousPassportNumber/previousPassportStatus: "lost", which in turn requires the missingPassportPoliceReport document), hasDualCitizenship: true (requiring dualCitizenshipOtherCountry), and fatherLiving: false (requiring fatherLastKnownAddress).

Mutation controls — six negative fixtures, each targeting a distinct validation rule:

``` $ # mutation-control-missing-required-field.json: 'surname' (required: true) removed Static (required/type/pattern/enum) validation: FAIL - (root) must have required property 'surname' requiredWhen/documents[] conditional validation: PASS OVERALL: FAIL

$ # mutation-control-invalid-date-format.json: 'dateOfBirth' set to 'not-a-date' Static (required/type/pattern/enum) validation: FAIL - /dateOfBirth must match format "date" requiredWhen/documents[] conditional validation: PASS OVERALL: FAIL

$ # mutation-control-invalid-enum-value.json: 'gender' set to 'Other' (not in enum) Static (required/type/pattern/enum) validation: FAIL - /gender must be equal to one of the allowed values requiredWhen/documents[] conditional validation: PASS OVERALL: FAIL

$ # mutation-control-maxlength-violation.json: 'surname' set to 60 characters (maxLength: 50) Static (required/type/pattern/enum) validation: FAIL - /surname must NOT have more than 50 characters requiredWhen/documents[] conditional validation: PASS OVERALL: FAIL

$ # mutation-control-requiredwhen-violation.json: 'previousPassportNumber'/'previousPassportStatus' removed while firstTimeApplicant: false Static (required/type/pattern/enum) validation: PASS requiredWhen/documents[] conditional validation: FAIL - field 'previousPassportNumber' is required by requiredWhen but missing - field 'previousPassportStatus' is required by requiredWhen but missing OVERALL: FAIL

$ # mutation-control-missing-required-document.json: 'applicationDeclaration' removed from documents[] Static (required/type/pattern/enum) validation: PASS requiredWhen/documents[] conditional validation: FAIL - document 'applicationDeclaration' is required but not marked provided OVERALL: FAIL ```

Both meta-schema validators were run against the finished document and pass clean:

``` $ node tools/validate.mjs registry/gh/mfa/application-for-a-republic-of-ghana-passport/1.0.0/schema.json ok registry/gh/mfa/application-for-a-republic-of-ghana-passport/1.0.0/schema.json

1/1 document(s) passed.

$ node tools/validate-ajv.mjs registry/gh/mfa/application-for-a-republic-of-ghana-passport/1.0.0/schema.json ok registry/gh/mfa/application-for-a-republic-of-ghana-passport/1.0.0/schema.json [v0.3]

1/1 document(s) validated against the meta-schema (ajv 2020-12). ```

A full-registry run of both validators was also run after adding this document (406/406 passed) and tools/govschema-client/registry-index.json was regenerated via npm run build-index (in tools/govschema-client/, after npm ci --include=dev since a plain npm ci under a local NODE_ENV=production skips ajv's devDependency install) to include this document's entry.

Ghana's other open verticals

Ghana now stands at 4 of 6 verticals (National ID & Civic Documents, Taxes, Visa, Passport). DMV and Business Formation remain open backlog for future cycles.

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