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
Authoritative source "Application for a Republic of Ghana Passport" (Passport and Travel Certificate Decree, NLCD. 155, 1967)
Machine access
- Schema document
registry/gh/mfa/application-for-a-republic-of-ghana-passport/1.0.0/schema.jsonapplication/schema+json- Verification record
registry/gh/mfa/application-for-a-republic-of-ghana-passport/1.0.0/VERIFICATION.mdtext/markdown- 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
-
taxIdentificationNumberstring optionalThe 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 -
paidVoucherCodestring requiredThe 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.
-
applicantFullNameSummarystring requiredA 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 -
surnamestring required(a) Surname
length: 0–50classification: pii -
firstNamestring required(b) First Name
length: 0–50classification: pii -
otherNamesstring optional(c) Other Names
length: 0–50classification: pii -
maidenNamestring optionalThe applicant's maiden name(s), where applicable.
length: 0–50classification: pii -
previousNamestring optionalThe applicant's previous name, where the name has been changed by Affidavit or Gazette Publication.
length: 0–100classification: pii -
dateOfBirthdate requiredPrinted 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 -
genderenum requiredThe applicant circles whichever of the two printed options applies.
enum: Male | Femaleclassification: pii -
cityOrTownOfBirthstring requiredCity or Town of Birth
length: 0–100 -
countryOfBirthstring requiredCountry of Birth
length: 0–60 -
heightMetersinteger requiredWhole-metres component of the applicant's height, printed as a blank immediately before the literal "m" label.
range: 0–2 -
heightCentimetersinteger requiredAdditional-centimetres component of the applicant's height, printed as a blank immediately before the literal "cm" label.
range: 0–99 -
colourOfEyesstring required(b) Colour of eyes
length: 0–30 -
colourOfHairstring required(c) Colour of Hair
length: 0–30 -
visiblePeculiaritiesstring optionalAny visible distinguishing marks, where applicable.
length: 0–200 -
nationalitystring requiredNationality
length: 0–60classification: pii -
maritalStatusstring requiredModelled 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 -
professionstring required(a) Profession
length: 0–100 -
previousProfessionstring optional(b) Previous Profession
length: 0–100 -
nationalIdCardNumberstring optionalNational ID Card No.
length: 0–20classification: sensitive-pii -
socialSecurityNumberstring optionalSocial Security Number
length: 0–20classification: sensitive-pii -
votersIdCardNumberstring optionalVoter's ID Card No.
length: 0–20classification: sensitive-pii -
countryOfResidencestring requiredCountry of Residence
length: 0–60 -
zipOrPostCodestring optionalZip / Post Code
length: 0–20 -
cityOrTownOfResidencestring requiredCity or Town of Residence
length: 0–100 -
suburbstring optionalSuburb
length: 0–100 -
houseNumberAndStreetstring required(a) House Number and Street
length: 0–150 -
digitalAddressCodestring optionalThe applicant's GhanaPost GPS digital address code, where one has been obtained.
length: 0–18classification: pii -
postalAddressstring requiredPostal Address
length: 0–150 -
telephoneNostring requiredTelephone No.
length: 0–20 -
emailstring optionalE-mail
patternlength: 0–100 -
institutionAttendedstring requiredThe applicant's current or last educational institution attended.
length: 0–150 -
institutionAddressstring optional(b) Address
length: 0–150 -
institutionPeriodFromstring optionalMonth/Year the applicant began attending, printed as separate Month and Year in full blanks and collapsed here into one MM/YYYY value.
pattern -
institutionPeriodTostring optionalMonth/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 -
fatherNamestring requireda. Name of Father
length: 0–100classification: pii -
fatherNationalitystring requiredNationality
length: 0–60 -
fatherLivingboolean requiredWhether this relative is living, circled Yes/No on the specimen.
-
fatherPostalAddressstring optionalPostal Address
length: 0–150 -
fatherResidentialAddressstring optionalResidential Address
length: 0–150 -
fatherLastKnownAddressstring optionalOnly meaningful when this relative is no longer living.
length: 0–150 -
fatherHomeTownstring optionalHome Town
length: 0–100 -
fatherPhoneNumberstring optionalPhone Number
length: 0–20 -
fatherEmailstring optionalE-mail
length: 0–100 -
motherNamestring requiredb. Name of Mother
length: 0–100classification: pii -
motherNationalitystring requiredNationality
length: 0–60 -
motherLivingboolean requiredWhether this relative is living, circled Yes/No on the specimen.
-
motherPostalAddressstring optionalPostal Address
length: 0–150 -
motherResidentialAddressstring optionalResidential Address
length: 0–150 -
motherLastKnownAddressstring optionalOnly meaningful when this relative is no longer living.
length: 0–150 -
motherHomeTownstring optionalHome Town
length: 0–100 -
motherPhoneNumberstring optionalPhone Number
length: 0–20 -
motherEmailstring optionalE-mail
length: 0–100 -
grandParentNamestring optionalc. Name of one Grand Parent
length: 0–100classification: pii -
grandParentNationalitystring optionalNationality
length: 0–60 -
grandParentLivingboolean requiredWhether this relative is living, circled Yes/No on the specimen.
-
grandParentPostalAddressstring optionalPostal Address
length: 0–150 -
grandParentResidentialAddressstring optionalResidential Address
length: 0–150 -
grandParentLastKnownAddressstring optionalOnly meaningful when this relative is no longer living.
length: 0–150 -
grandParentHomeTownstring optionalHome Town
length: 0–100 -
grandParentPhoneNumberstring optionalPhone Number
length: 0–20 -
grandParentEmailstring optionalE-mail
length: 0–100 -
hasDualCitizenshipboolean requiredDo you have dual citizenship?
-
dualCitizenshipOtherCountrystring optionalIf yes state other country
length: 0–60 -
documentsHeldBirthCertificateboolean optionalWhether the applicant holds this document, one of 7 independent "circle all that apply" options.
-
documentsHeldNationalIdCardboolean optionalWhether the applicant holds this document, one of 7 independent "circle all that apply" options.
-
documentsHeldOldPassportboolean optionalWhether the applicant holds this document, one of 7 independent "circle all that apply" options.
-
documentsHeldVoterIdCardboolean optionalWhether the applicant holds this document, one of 7 independent "circle all that apply" options.
-
documentsHeldDualCitizenshipCardboolean optionalWhether the applicant holds this document, one of 7 independent "circle all that apply" options.
-
documentsHeldNaturalizationCardboolean optionalWhether the applicant holds this document, one of 7 independent "circle all that apply" options.
-
documentsHeldRegistrationCardboolean optionalWhether the applicant holds this document, one of 7 independent "circle all that apply" options.
-
attachingDocumentTypeenum requiredWhich 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 -
attachingDocumentNumberstring requiredNumber
length: 0–30classification: sensitive-pii -
attachingDocumentDateOfIssuedate optionalPrinted as separate Day/Month/Year in full blanks, collapsed here into a single date value.
-
attachingDocumentPlaceOfIssuestring optionalPlace of Issue
length: 0–100 -
guarantorAFullNamestring requiredFull Name
length: 0–100classification: pii -
guarantorAResidentialAddressstring requiredResidential Address
length: 0–150 -
guarantorAPostalAddressstring optionalPostal Address
length: 0–150 -
guarantorATelephoneNostring requiredTelephone No.
length: 0–20 -
guarantorAOccupationstring requiredOccupation
length: 0–100 -
guarantorAEmailstring optionalE-mail
length: 0–100 -
guarantorASignatureDatedate requiredPrinted 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.
-
guarantorBFullNamestring requiredFull Name
length: 0–100classification: pii -
guarantorBResidentialAddressstring requiredResidential Address
length: 0–150 -
guarantorBPostalAddressstring optionalPostal Address
length: 0–150 -
guarantorBTelephoneNostring requiredTelephone No.
length: 0–20 -
guarantorBOccupationstring requiredOccupation
length: 0–100 -
guarantorBEmailstring optionalE-mail
length: 0–100 -
guarantorBSignatureDatedate requiredPrinted 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.
-
declarationFullNamestring requiredThe applicant's full name filled into the declaration's own "I ___ hereby apply for a Ghanaian Passport and declare" blank.
length: 0–100classification: pii -
firstTimeApplicantboolean requiredWhether 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).
-
previousPassportNumberstring optionalThe applicant's previous passport number, only applicable when statement (a) is cancelled.
length: 0–20classification: sensitive-pii -
previousPassportStatusenum optionalWhether the previous passport is attached to this application or has been lost, only applicable when statement (a) is cancelled.
enum: attached | lost -
declarationSignatureDatedate requiredPrinted as separate Day/Month/Year in full blanks beside the applicant's Signature, collapsed here into a single date value.
-
guardianRelationshipToApplicantstring optionalThe 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 -
guardianFullNamestring optionalOnly applicable when the applicant is under 18 years of age.
length: 0–100classification: pii -
guardianAddressstring optionalOnly applicable when the applicant is under 18 years of age.
length: 0–150 -
guardianTelephoneNostring optionalOnly applicable when the applicant is under 18 years of age.
length: 0–20 -
guardianSignatureDatedate optionalPrinted 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.
-
translatorLanguagestring optionalOnly applicable when the applicant cannot read or write English and the declaration was interpreted for them.
length: 0–60 -
translatorFullNamestring optionalOnly applicable when the applicant cannot read or write English.
length: 0–100classification: pii -
translatorAddressstring optionalOnly applicable when the applicant cannot read or write English.
length: 0–150 -
translatorTelephoneNostring optionalOnly applicable when the applicant cannot read or write English.
length: 0–20 -
translatorSignatureDatedate optionalPrinted 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.
-
witnessFullNamestring requiredA 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 -
witnessOccupationstring optionalOccupation
length: 0–100 -
witnessPositionstring optionalPosition
length: 0–100 -
witnessBusinessAddressstring optionalBusiness Address
length: 0–150 -
witnessBusinessPhoneNostring optionalBusiness Phone No.
length: 0–20 -
witnessResidentialAddressstring optionalResidential Address
length: 0–150 -
witnessResidentialPhoneNostring optionalResidential Phone No.
length: 0–20 -
witnessSignatureDatedate requiredPrinted 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:draftverification.method:manual-source-review-v1verification.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 ownattachingDocumentTypeselection, per instruction 1's "evidence of citizenship and... evidence of identity."missingPassportPoliceReport—requiredWhen previousPassportStatus equals "lost", per instruction 2: "Police Report and affidavit are to be attached for missing passports."passportProcessingFeePayment— sourced from the livemfa.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
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.maritalStatusis modelled as free text, not an enum, matching this registry'sgh/gisprecedent 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).- Item 7(a) Height is modelled as two integer fields (
heightMeters/heightCentimeters), reflecting the printed___m ___cmlayout (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. - Item 23's evidence-of-citizenship block genuinely supports a
requiredWhengate, unlikegh/gis's ungatedmaritalStatusprecedent: each relative's "Living? Yes/No" is a real printed boolean choice, so eachLastKnownAddressfield ("If deceased provide last known address") isrequiredWhenits ownLivingfield equalsfalse— a genuine conditional-requiredness rule, not a disclosed-only convention, because this form actually provides the field to key off. - 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"), withpreviousPassportNumber/previousPassportStatuseachrequiredWhen firstTimeApplicant equals false— mirroring the form's own "Cancel if not applicable" mutual exclusivity between statements (a) and (b). - 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*Livingfields), 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 ungatedmaritalStatus-conditionalspouseName/spouseNationality). Each field'sdescriptiondocuments the real-world condition instead. - No photograph
documents[]entry is modelled, a deliberate departure fromgh/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. passportProcessingFeePayment(adocuments[]entry) is sourced from the livemfa.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 intopaidVoucherCode), so there is no PDFsourceRefto cite for it; itssourceRefinstead quotes the live page directly. No fee amount is asserted, since none is published on either the form or the workflow page.- 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.0draftlatestthis pagehas verification recordschema.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.