Registry entry

Uganda First-Time Registration and National Identification Card Application (Form 3, NIRA)

The National Identification and Registration Authority's (NIRA) "Form 3" — "Application for Registration and National Identification Card" under the Registration of Persons Act, 2015 — used for a person's first-time registration into Uganda's National Identification Register, for either a child or an adult (a single combined form, gated by a CHILD/ADULT tickbox at the top). This schema models the applicant-facing sections only: the registration-type tickbox; PART A's Personal Information, Place of Residence, Place of Birth, and Place of Origin (including citizenship type, dual citizenship, and passport particulars); PART B's Voter Information, Marital Status, and Spouse Details (printed applicable to adult registrations only); PART C's Father's Details, Mother's Details, and a conditional Grandparent(s)/Introducer block (applicable only when a citizenship-by-birth applicant's information for both parents is unavailable, per the form's own printed note) and the Particulars of Applicant's Children table; and PART E's Declaration. It excludes PART A's own Registration Location Code and Application ID (the form's own page-4 filling guide assigns both to "REGN OFFICER" / "to be generated by the Application"), PART D ("Form Section to be retained by the Registration Officer", a condensed duplicate of Parts A/B for officer records), and PART F ("FOR OFFICIAL USE ONLY" — citizenship assessment, documentary-proof ticks, and the registration officer's own signature) — none of this is applicant-supplied data. GovSchema is independent and is not affiliated with, endorsed by, or operated by the Republic of Uganda or the National Identification and Registration Authority.

Registry entry

ug/nira/first-time-registration-application

Jurisdiction
Uganda · national
Version
1.0.0
Verification
draft

Authoritative source Form 3 — "Application for Registration and National Identification Card", Registration of Persons Act, 2015

Machine access

Registry catalog
registry/index.jsonone record per schema id

Field reference

166 fields across 11 steps, 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.

Registration Type

  • registrationType enum required

    Whether this is a first-time registration application for a child (under 18) or an adult. Determines whether PART B (Voter Information, Marital Status, and Spouse Details) applies, per the form's own printed instruction "PART B. (to be filled for Adult registration only)".

    enum: CHILD | ADULT

Personal Information

  • surname string required

    Surname

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

    Given Name

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

    Other Names

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

    Maiden Name

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

    The applicant's own name(s) previously used, if ever changed. The source prints only the single word "Previous" for this field's label (not "Previous Names") in this section, unlike the fuller "Previous Names" label this same form uses in its Father's/Mother's/Spouse's Details blocks — disclosed here rather than silently normalized.

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

    Sex

    enum: MALE | FEMALEclassification: pii
  • dateOfBirth date required

    Date of Birth

    classification: sensitive-pii
  • dateOfBirthEstimated boolean optional

    Ticked when the date of birth above is an estimate rather than a documented date.

  • email string optional

    Email

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

    Home Phone No.

    length: 0–20classification: pii
  • mobilePhoneNumber string optional

    The source prints "(For Extra, Fill additional Form)" beside this field, instructing an applicant with more than one mobile number to record additional numbers on a separate continuation form; this schema models a single mobile number per the one printed blank.

    length: 0–20classification: pii
  • highestLevelOfEducation string optional

    Highest Level of Education

    length: 0–100
  • profession string optional

    Profession

    length: 0–100
  • occupation string optional

    Occupation

    length: 0–100
  • religion string optional

    Religion

    length: 0–100
  • disabilityBlind boolean optional

    Ticked when the applicant has a blind disability.

    classification: health
  • disabilityDeaf boolean optional

    Ticked when the applicant has a deaf disability.

    classification: health
  • disabilityPhysical boolean optional

    Ticked when the applicant has a physical disability.

    classification: health
  • disabilityMental boolean optional

    Ticked when the applicant has a mental disability.

    classification: health
  • disabilityDumb boolean optional

    Ticked when the applicant is unable to speak. Modelled with the source form's own printed checkbox label ("Dumb") verbatim, per this registry's source-fidelity practice, though the term is dated; a consuming application MAY present a more contemporary label (e.g. "non-verbal") to the human end user.

    classification: health

Place of Residence

  • residenceLocalOrForeign enum required

    Place of Residence (Tick Appropriate)

    enum: LOCAL | FOREIGN
  • residenceCountry string required

    Country

    length: 0–60
  • residenceDistrict string optional

    Uganda administrative-unit field, applicable when the applicant's residence is Local (in Uganda).

    length: 0–60
  • residenceCounty string optional

    Uganda administrative-unit field, applicable when the applicant's residence is Local (in Uganda).

    length: 0–60
  • residenceSubCounty string optional

    Uganda administrative-unit field, applicable when the applicant's residence is Local (in Uganda).

    length: 0–60
  • residenceParishWard string optional

    Uganda administrative-unit field, applicable when the applicant's residence is Local (in Uganda).

    length: 0–60
  • residenceVillage string optional

    Uganda administrative-unit field, applicable when the applicant's residence is Local (in Uganda).

    length: 0–60
  • residenceStreet string optional

    Street

    length: 0–100
  • residencePlotHouseNumber string optional

    Plot / House No.

    length: 0–30
  • residenceYearsAtAddress integer optional

    Page 4 filling guide: "Allowed values are 1 to 99".

    range: 1–99
  • residencePreviousDistrict string optional

    District of Previous Place of Residence

    length: 0–60
  • residencePostalAddress string optional

    Postal Address

    length: 0–100

Place of Birth

  • birthCountry string required

    Country

    length: 0–60
  • birthDistrict string optional

    District

    length: 0–60
  • birthCounty string optional

    County

    length: 0–60
  • birthSubCounty string optional

    Sub-County

    length: 0–60
  • birthParishWard string optional

    Parish/Ward

    length: 0–60
  • birthVillage string optional

    Village

    length: 0–60
  • birthCityTown string optional

    City/Town

    length: 0–60
  • birthHealthFacility string optional

    Health Facility

    length: 0–100

Place of Origin and Citizenship

  • originCountry string required

    Country

    length: 0–60
  • originDistrict string optional

    District

    length: 0–60
  • originCounty string optional

    County

    length: 0–60
  • originSubCounty string optional

    Sub-County

    length: 0–60
  • originParishWard string optional

    Parish/Ward

    length: 0–60
  • originVillage string optional

    Village

    length: 0–60
  • indigenousCommunityTribe string optional

    Indigenous Community/Tribe

    length: 0–100
  • clan string optional

    Clan

    length: 0–60
  • citizenshipType enum required

    Citizenship Type

    enum: BY_BIRTH | BY_REGISTRATION | BY_NATURALIZATION
  • dualCitizenship boolean optional

    Dual Citizenship

  • citizenshipArticle9 boolean optional

    Citizenship Acquired Under Article 9 of the 1995 Constitution

  • citizenshipCertificateNumber string optional

    Citizenship Certificate Number

    length: 0–40classification: sensitive-pii
  • otherNationalityIfDual string optional

    Other Nationality

    length: 0–60
  • passportNumber string optional

    Passport Number

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

    Page 4 filling guide gives the expected format as "FA/XXXXXX or IM/XXXXXX"; not enforced as a validation.pattern here since the guide does not fully specify the placeholder alphabet.

    length: 0–20

Voter Information, Marital Status, and Spouse Details (Adult Only)

  • preferredPollingStation enum optional

    Preferred Polling Station

    enum: RESIDENCE | ORIGIN
  • pollingStationName string optional

    Polling Station Name

    length: 0–100
  • maritalStatus enum optional

    Marital Status (Tick Appropriate)

    enum: MARRIED | SINGLE | DIVORCED | WIDOWED | SEPARATED
  • spouseSurname string optional

    Surname

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

    Other Names

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

    Given Names

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

    Previous Names

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

    Maiden Name

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

    Spouse's National ID Number (NIN)

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

    Spouse's Citizenship Type

    enum: BY_BIRTH | BY_REGISTRATION | BY_NATURALIZATION
  • spouseDualCitizenship boolean optional

    Spouse's Dual Citizenship

  • spouseCitizenshipArticle9 boolean optional

    Spouse's Citizenship Acquired Under Article 9 of the 1995 Constitution

  • spouseOtherNationalityIfDual string optional

    Unlike the applicant's own, Father's, and Mother's citizenship blocks, this form's Spouse Details block prints no "Citizenship Certificate Number" line — disclosed as a genuine source asymmetry, not an extraction omission.

    length: 0–60
  • placeOfMarriage string optional

    Place of Marriage

    length: 0–100
  • dateOfMarriage date optional

    Date of Marriage

  • typeOfMarriage enum optional

    Type of Marriage

    enum: CIVIL | RELIGIOUS | CULTURAL | CUSTOMARY
  • marriageCertificateNumber string optional

    Marriage Certificate Number

    length: 0–40
  • hasOtherSpouses boolean optional

    Other Spouses (on separate sheet)

  • numberOfOtherSpouses integer optional

    If yes, Number of other spouses

    range: 1–20

Father's Details

  • fatherSurname string optional

    Surname

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

    Given Names

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

    Other Names

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

    Previous Names

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

    National ID Number (NIN)

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

    ID Document Number

    length: 0–30classification: sensitive-pii
  • fatherCitizenshipType enum optional

    Citizenship Type

    enum: BY_BIRTH | BY_REGISTRATION | BY_NATURALIZATION
  • fatherDualCitizenship boolean optional

    Dual Citizenship

  • fatherCitizenshipArticle9 boolean optional

    Citizenship Acquired Under Article 9 of the 1995 Constitution

  • fatherCitizenshipCertificateNumber string optional

    Citizenship Certificate Number

    length: 0–40classification: sensitive-pii
  • fatherOtherNationalityIfDual string optional

    Other Nationality

    length: 0–60
  • fatherLivingStatus enum optional

    Living Status

    enum: ALIVE | DECEASED | UNKNOWN
  • fatherOccupation string optional

    Occupation

    length: 0–100
  • fatherResidenceCountry string optional

    Country

    length: 0–60
  • fatherResidenceDistrict string optional

    District

    length: 0–60
  • fatherResidenceCounty string optional

    County

    length: 0–60
  • fatherResidenceSubCounty string optional

    Sub-County

    length: 0–60
  • fatherResidenceParishWard string optional

    Parish/Ward

    length: 0–60
  • fatherResidenceVillage string optional

    Village

    length: 0–60
  • fatherResidenceStreet string optional

    Street

    length: 0–100
  • fatherResidenceStreetHouseNumber string optional

    The printed column header for this field reads "Street/House No." — distinct from this form's own applicant Place of Residence section, which prints separate "Street" and "Plot / House No." columns instead. Modelled per the Father's Details block's own printed label rather than normalized to the applicant section's wording.

    length: 0–30
  • fatherOriginCountry string optional

    Country

    length: 0–60
  • fatherOriginDistrict string optional

    District

    length: 0–60
  • fatherOriginCounty string optional

    County

    length: 0–60
  • fatherOriginSubCounty string optional

    Sub-County

    length: 0–60
  • fatherOriginParishWard string optional

    Parish/Ward

    length: 0–60
  • fatherOriginVillage string optional

    Village

    length: 0–60
  • fatherIndigenousCommunityTribe string optional

    Indigenous Community/Tribe

    length: 0–100
  • fatherClan string optional

    Clan

    length: 0–60

Mother's Details

  • motherSurname string optional

    Surname

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

    Given Names

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

    Other Names

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

    Maiden Names

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

    Previous Names

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

    National ID Number (NIN)

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

    ID Document Number

    length: 0–30classification: sensitive-pii
  • motherCitizenshipType enum optional

    Citizenship Type

    enum: BY_BIRTH | BY_REGISTRATION | BY_NATURALIZATION
  • motherDualCitizenship boolean optional

    Dual Citizenship

  • motherCitizenshipArticle9 boolean optional

    Citizenship Acquired Under Article 9 of the 1995 Constitution

  • motherCitizenshipCertificateNumber string optional

    Citizenship Certificate Number

    length: 0–40classification: sensitive-pii
  • motherOtherNationalityIfDual string optional

    Other Nationality

    length: 0–60
  • motherLivingStatus enum optional

    Living Status

    enum: ALIVE | DECEASED | UNKNOWN
  • motherOccupation string optional

    Occupation

    length: 0–100
  • motherResidenceCountry string optional

    Country

    length: 0–60
  • motherResidenceDistrict string optional

    District

    length: 0–60
  • motherResidenceCounty string optional

    County

    length: 0–60
  • motherResidenceSubCounty string optional

    Sub-County

    length: 0–60
  • motherResidenceParishWard string optional

    Parish/Ward

    length: 0–60
  • motherResidenceVillage string optional

    Village

    length: 0–60
  • motherResidenceStreet string optional

    Street

    length: 0–100
  • motherResidenceStreetHouseNumber string optional

    The printed column header for this field reads "Street/House No." — distinct from this form's own applicant Place of Residence section, which prints separate "Street" and "Plot / House No." columns instead. Modelled per the Mother's Details block's own printed label rather than normalized to the applicant section's wording.

    length: 0–30
  • motherOriginCountry string optional

    Country

    length: 0–60
  • motherOriginDistrict string optional

    District

    length: 0–60
  • motherOriginCounty string optional

    County

    length: 0–60
  • motherOriginSubCounty string optional

    Sub-County

    length: 0–60
  • motherOriginParishWard string optional

    Parish/Ward

    length: 0–60
  • motherOriginVillage string optional

    Village

    length: 0–60
  • motherIndigenousCommunityTribe string optional

    Indigenous Community/Tribe

    length: 0–100
  • motherClan string optional

    Clan

    length: 0–60

Grandparent(s)/Introducer Details

  • grandparentSurname string optional

    Surname of the Grandparent or Introducer. Applicable only for an applicant registering under Citizenship by Birth/descent whose information for both parents is not available, per the form's own printed note; the source prints no applicant-fillable gating checkbox for this condition, so this field is modelled optional with the condition recorded here rather than as a fabricated requiredWhen (consistent with this registry's lk/drp precedent for the same pattern).

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

    Given names of the Grandparent or Introducer. Applicable only for an applicant registering under Citizenship by Birth/descent whose information for both parents is not available, per the form's own printed note; the source prints no applicant-fillable gating checkbox for this condition, so this field is modelled optional with the condition recorded here rather than as a fabricated requiredWhen (consistent with this registry's lk/drp precedent for the same pattern).

    length: 0–60classification: pii
  • grandparentDateOfBirth date optional

    Date of birth of the Grandparent or Introducer. Applicable only for an applicant registering under Citizenship by Birth/descent whose information for both parents is not available, per the form's own printed note; the source prints no applicant-fillable gating checkbox for this condition, so this field is modelled optional with the condition recorded here rather than as a fabricated requiredWhen (consistent with this registry's lk/drp precedent for the same pattern).

    classification: sensitive-pii
  • grandparentOtherNames string optional

    Other names of the Grandparent or Introducer. Applicable only for an applicant registering under Citizenship by Birth/descent whose information for both parents is not available, per the form's own printed note; the source prints no applicant-fillable gating checkbox for this condition, so this field is modelled optional with the condition recorded here rather than as a fabricated requiredWhen (consistent with this registry's lk/drp precedent for the same pattern).

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

    National ID number of the Grandparent or Introducer, if available. Applicable only for an applicant registering under Citizenship by Birth/descent whose information for both parents is not available, per the form's own printed note; the source prints no applicant-fillable gating checkbox for this condition, so this field is modelled optional with the condition recorded here rather than as a fabricated requiredWhen (consistent with this registry's lk/drp precedent for the same pattern).

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

    Country of the Grand Parents' Place of Origin. Applicable only for an applicant registering under Citizenship by Birth/descent whose information for both parents is not available, per the form's own printed note; the source prints no applicant-fillable gating checkbox for this condition, so this field is modelled optional with the condition recorded here rather than as a fabricated requiredWhen (consistent with this registry's lk/drp precedent for the same pattern).

    length: 0–60
  • grandparentOriginDistrict string optional

    District of the Grand Parents' Place of Origin. Applicable only for an applicant registering under Citizenship by Birth/descent whose information for both parents is not available, per the form's own printed note; the source prints no applicant-fillable gating checkbox for this condition, so this field is modelled optional with the condition recorded here rather than as a fabricated requiredWhen (consistent with this registry's lk/drp precedent for the same pattern).

    length: 0–60
  • grandparentOriginCounty string optional

    County of the Grand Parents' Place of Origin. Applicable only for an applicant registering under Citizenship by Birth/descent whose information for both parents is not available, per the form's own printed note; the source prints no applicant-fillable gating checkbox for this condition, so this field is modelled optional with the condition recorded here rather than as a fabricated requiredWhen (consistent with this registry's lk/drp precedent for the same pattern).

    length: 0–60
  • grandparentOriginSubCounty string optional

    Sub-County of the Grand Parents' Place of Origin. Applicable only for an applicant registering under Citizenship by Birth/descent whose information for both parents is not available, per the form's own printed note; the source prints no applicant-fillable gating checkbox for this condition, so this field is modelled optional with the condition recorded here rather than as a fabricated requiredWhen (consistent with this registry's lk/drp precedent for the same pattern).

    length: 0–60
  • grandparentOriginParishWard string optional

    Parish/Ward of the Grand Parents' Place of Origin. Applicable only for an applicant registering under Citizenship by Birth/descent whose information for both parents is not available, per the form's own printed note; the source prints no applicant-fillable gating checkbox for this condition, so this field is modelled optional with the condition recorded here rather than as a fabricated requiredWhen (consistent with this registry's lk/drp precedent for the same pattern).

    length: 0–60
  • grandparentOriginVillage string optional

    Village of the Grand Parents' Place of Origin. Applicable only for an applicant registering under Citizenship by Birth/descent whose information for both parents is not available, per the form's own printed note; the source prints no applicant-fillable gating checkbox for this condition, so this field is modelled optional with the condition recorded here rather than as a fabricated requiredWhen (consistent with this registry's lk/drp precedent for the same pattern).

    length: 0–60
  • grandparentIndigenousCommunityTribe string optional

    Indigenous community/tribe of the Grandparent(s)/Introducer. Applicable only for an applicant registering under Citizenship by Birth/descent whose information for both parents is not available, per the form's own printed note; the source prints no applicant-fillable gating checkbox for this condition, so this field is modelled optional with the condition recorded here rather than as a fabricated requiredWhen (consistent with this registry's lk/drp precedent for the same pattern).

    length: 0–100
  • grandparentClan string optional

    Clan of the Grandparent(s)/Introducer. Applicable only for an applicant registering under Citizenship by Birth/descent whose information for both parents is not available, per the form's own printed note; the source prints no applicant-fillable gating checkbox for this condition, so this field is modelled optional with the condition recorded here rather than as a fabricated requiredWhen (consistent with this registry's lk/drp precedent for the same pattern).

    length: 0–60

Particulars of Applicant's Children

  • child1Name string optional

    The specimen prints a bounded 4-row table (no explicit row-count label on the form itself, confirmed by counting this table's own printed horizontal rule lines), not an open-ended list; flattened here to child1..4, matching this registry's bounded-repeating-group convention (e.g. ng/nis/application-for-nigeria-standard-passport). Not required: an applicant with no children, or fewer than 4, leaves the remaining rows blank.

    length: 0–150classification: pii
  • child1Sex enum optional

    Particulars of Applicant's Children, row 1: Sex (M/F)

    enum: MALE | FEMALEclassification: pii
  • child1DateOfBirth date optional

    Particulars of Applicant's Children, row 1: Date of Birth

    classification: sensitive-pii
  • child1NationalIdNumber string optional

    Particulars of Applicant's Children, row 1: National ID Number (if available)

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

    The specimen prints a bounded 4-row table (no explicit row-count label on the form itself, confirmed by counting this table's own printed horizontal rule lines), not an open-ended list; flattened here to child1..4, matching this registry's bounded-repeating-group convention (e.g. ng/nis/application-for-nigeria-standard-passport). Not required: an applicant with no children, or fewer than 4, leaves the remaining rows blank.

    length: 0–150classification: pii
  • child2Sex enum optional

    Particulars of Applicant's Children, row 2: Sex (M/F)

    enum: MALE | FEMALEclassification: pii
  • child2DateOfBirth date optional

    Particulars of Applicant's Children, row 2: Date of Birth

    classification: sensitive-pii
  • child2NationalIdNumber string optional

    Particulars of Applicant's Children, row 2: National ID Number (if available)

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

    The specimen prints a bounded 4-row table (no explicit row-count label on the form itself, confirmed by counting this table's own printed horizontal rule lines), not an open-ended list; flattened here to child1..4, matching this registry's bounded-repeating-group convention (e.g. ng/nis/application-for-nigeria-standard-passport). Not required: an applicant with no children, or fewer than 4, leaves the remaining rows blank.

    length: 0–150classification: pii
  • child3Sex enum optional

    Particulars of Applicant's Children, row 3: Sex (M/F)

    enum: MALE | FEMALEclassification: pii
  • child3DateOfBirth date optional

    Particulars of Applicant's Children, row 3: Date of Birth

    classification: sensitive-pii
  • child3NationalIdNumber string optional

    Particulars of Applicant's Children, row 3: National ID Number (if available)

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

    The specimen prints a bounded 4-row table (no explicit row-count label on the form itself, confirmed by counting this table's own printed horizontal rule lines), not an open-ended list; flattened here to child1..4, matching this registry's bounded-repeating-group convention (e.g. ng/nis/application-for-nigeria-standard-passport). Not required: an applicant with no children, or fewer than 4, leaves the remaining rows blank.

    length: 0–150classification: pii
  • child4Sex enum optional

    Particulars of Applicant's Children, row 4: Sex (M/F)

    enum: MALE | FEMALEclassification: pii
  • child4DateOfBirth date optional

    Particulars of Applicant's Children, row 4: Date of Birth

    classification: sensitive-pii
  • child4NationalIdNumber string optional

    Particulars of Applicant's Children, row 4: National ID Number (if available)

    length: 0–20classification: sensitive-pii

Declaration

  • declarantName string required

    Declarant Name

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

    Signature/Thumbprint of Applicant or Parent/Guardian

    classification: pii
  • declarationDate date required

    Date of Declaration

Verification record

Candidate selection

GOV-4353, a child issue of GOV-4351 ("GovSchema Standard Research"). Closes the last of Uganda's pre-scouted 3-of-6 STRONG backlog first identified in the GOV-4307 cycle (see CATALOG.md's Known Gaps entry 0e): DMV (ug/mowt/driving-licence-application, GOV-4335/GOV-4337) and Business Formation (ug/ursb/business-name-registration-individual, GOV-4343) were already authored; National ID (NIRA Form 3, First-Time Registration) had failed to connect on the two prior re-check cycles (GOV-4335, GOV-4343), both times against the bare nira.go.ug host. Brings Uganda to 3 of 6 verticals (Visa, Passport, and Taxes remain confirmed dead ends per the GOV-4307 cycle's own six-vertical screening pass).

Reaching the live source

Target: https://www.nira.go.ug/media/2025/07/Form-3-NIRA-First-Time-Registration-Form.pdf.

  • The www subdomain is required. The bare nira.go.ug host connection-times-out (curl exit 28) — independently re-confirmed this cycle — which is exactly the blocker that stalled the two prior re-check cycles (GOV-4335, GOV-4343), both of which only tried the bare host. The www subdomain resolves and serves the PDF normally.
  • The TLS certificate chain served by www.nira.go.ug is incomplete, so the fetch requires curl -k (or an equivalent relaxed-verification client); this is a server misconfiguration, not a login/WAF gate.
  • Independently re-fetched and re-hashed rather than trusted from the issue brief alone: HTTP 200, Content-Type: application/pdf, 312,831 bytes, byte-for-byte match with the brief's own reported size.
  • sha256 of the retrieved bytes: 37e7df2b2800bd6e2e210944cd02f1c08ed265c924b2775fedc1b70cb54e4623 — matches the brief exactly.
  • Confirmed mechanically: the retrieved bytes begin %PDF-1.7 and contain zero /AcroForm, /Widget, and /FT occurrences — a flat, print-and-fill specimen (4 pages), not an interactive AcroForm PDF, consistent with the brief's own description.
  • The form's own letterhead and footer print "REPUBLIC OF UGANDA" and "National Identification and Registration Authority" alongside a "My Country, My Identity" tagline; authority names NIRA per the form's own printed letterhead, with authority.url pointing to the authority's own site (https://www.nira.go.ug).

Extraction method

Text extracted via pdfjs-dist's getTextContent() API (vendored at /tmp/node_modules/pdfjs-dist), grouped by y-coordinate (rounded to a small tolerance) and sorted by x-coordinate within each row, across all 4 pages — independently re-derived from the raw PDF rather than trusted from the issue brief's own field list alone, per the task's own instruction.

Attempted visual cross-check by rendering all 4 pages to PNG via pdfjs-dist + node-canvas at 2.5x scale (with the bundled standard_fonts data directory supplied). This specimen's embedded fonts triggered getPathGenerator glyph-resolution warnings for effectively every character on every page, so the rendered PNGs show the form's own grid/table border lines cleanly but render text as blank (a font-embedding issue in the source PDF itself, not an extraction bug — the same getTextContent() API used for the primary extraction is unaffected, since it reads the content stream's text-positioning operators directly rather than rasterizing glyphs). Consequently, ambiguous layout questions were resolved not by reading rendered text but by directly inspecting the PDF content stream's own vector line-drawing operators (page.getOperatorList(), filtering constructPath rectangle fills that render as hairline table/grid rules):

  • "Particulars of Applicant's Children" (Section 10) row count. The table prints no numeric row-count label. Its own printed horizontal rule lines were counted directly from the content stream: 6 lines (at PDF y-coordinates 111.74, 98.28, 82.8, 67.56, 51.48, 35.52), i.e. 1 header row + 4 data rows. Column boundaries at the same y-coordinates (x ≈ 36, 306, 353/354, 414, 573) were cross-checked against the header text's own x-positions ("Names of Child" ~41, "Sex (M/F)" ~306, "Date of Birth" ~359, "National ID Number (if available)" ~432) and matched. Modelled as a bounded 4-row repeating group (child1..child4), this registry's established convention for a printed bounded table with no array/nested field-type primitive available (GSP-0009 still undecided) — see, e.g., ng/nis/application-for-nigeria-standard-passport's own child1..child4 precedent. This is a lower-confidence provenance than an explicitly printed row-count label (disclosed as Finding 6 below).
  • Father's/Mother's "Street"/"Street/House No." column pair (Sections 7/8). Confirmed via x-coordinate clustering (left column "Street" at x≈39, right column "Street/House No." at x≈280-282 on both blocks) that these are two distinct printed columns, not a single wrapped label — see Finding 2.

Models 166 fields[] across 11 steps[] (Registration Type; Personal Information; Place of Residence; Place of Birth; Place of Origin and Citizenship; Voter Information/Marital Status/Spouse Details — Adult Only; Father's Details; Mother's Details; Grandparent(s)/Introducer Details; Particulars of Applicant's Children; Declaration), with a transitions branch out of the place_of_origin step: registrationType == ADULT routes to the voters_and_marital step, everything else falls through directly to father_details — the flow-level expression of PART B's own printed "(to be filled for Adult registration only)" gate, composed with matching field-level visibleWhen/requiredWhen on every PART B field.

Excludes, per the brief and the form's own page-4 filling guide: PART A's Registration Location Code and Application ID (guide: "To be generated by the Application" / "REGN OFFICER"); PART D ("Form Section to be retained by the Registration Officer", a condensed duplicate of Parts A/B for officer records); and PART F ("FOR OFFICIAL USE ONLY" — citizenship assessment, documentary-proof ticks, the registration officer's own signature). None of this is applicant-supplied data.

Disclosed source-fidelity findings

  1. previousNames (Section 1) modelled from a printed label reading only "Previous", not "Previous Names". Confirmed via direct x/y re-extraction around that row: the printed label is the single word "Previous", unlike the fuller "Previous Names" label this same form prints in its Father's, Mother's, and Spouse's Details blocks. Modelled with label: "Previous" verbatim and the discrepancy disclosed in the field's own description, rather than silently normalized to "Previous Names".
  2. Father's/Mother's Place of Residence blocks print "Street" + "Street/House No." as two separate columns, not the "Street" + "Plot / House No." pairing the applicant's own Place of Residence section (Section 2) uses. Modelled per each block's own printed label (fatherResidenceStreetHouseNumber / motherResidenceStreetHouseNumber, both labelled "Street/House No.") rather than normalized to the applicant's own wording.
  3. The Spouse Details block (Section 6, PART B) prints no "Citizenship Certificate Number" line, unlike the applicant's own, Father's, and Mother's citizenship blocks, which all print one. Confirmed by direct row-by-row re-extraction of Section 6's citizenship lines (Citizenship Type → Dual Citizenship → Citizenship acquired under article 9 → If Dual, state Citizenship and other Nationality — no certificate-number line between the last two). Modelled as a genuine, disclosed source asymmetry: spouseOtherNationalityIfDual exists with no sibling spouseCitizenshipCertificateNumber field.
  4. citizenshipType modelled as a 3-value enum (BY_BIRTH, BY_REGISTRATION, BY_NATURALIZATION) plus a separate dualCitizenship boolean, matching the form's own printed layout of three tickboxes plus one additional "Dual Citizenship" tickbox (repeated identically for the applicant, Spouse, Father, and Mother blocks) — even though the page-4 filling guide's own prose summary lists "By Birth, By registration, By Naturalisation, DUAL, Citizen under 95 Constitution" as if these were five coequal options. The printed form itself, not the guide's summary prose, governs this schema's structure.
  5. Grandparent(s)/Introducer block (Section 9) modelled entirely optional, with no requiredWhen gate. The form's own section heading states this block applies "if information of both parents is not available for Applicants under Citizenship by Birth/descent", but prints no applicant-fillable tickbox recording whether that condition holds — there is no boolean field to attach a Condition to. Each field's own description records the applicability condition in prose instead, consistent with this registry's lk/drp/application-for-a-national-identity-card precedent for the same disclose-rather-than-fabricate pattern.
  6. Children table row count (4) derived from counting printed rule lines, not a printed row-count label — see Extraction method above. Disclosed as a lower-confidence provenance than an explicit "1/2/3/4" row label.
  7. Local/Foreign administrative-subdivision conditionality applies only to the Residence block, not Birth or Origin. The applicant's own Place of Residence section (Section 2) prints an explicit "Local Foreign" tickbox gating District/County/Sub-County/Parish/Ward/Village; Place of Birth (Section 3) and Place of Origin (Section 4) print no equivalent gate, so their own District..Village fields are modelled unconditionally optional rather than inventing a matching conditional the source does not print.
  8. disabilityDumb retains the source form's own printed checkbox label ("Dumb") verbatim, per this registry's source-fidelity practice, though the term is dated; the field's own description flags this and suggests a consuming application may present a more contemporary label (e.g. "non-verbal") to a human end user.
  9. registrationType (top-of-form CHILD/ADULT tick) gates PART B only, not PART C. The form applies Father's Details, Mother's Details, the Grandparent(s)/Introducer block, and the Particulars of Applicant's Children table uniformly to both child and adult registrations (no printed "Adult only"/"Child only" qualifier on PART C, unlike PART B's explicit one) — so none of PART C's fields carry a registrationType visibleWhen/requiredWhen gate.

Conformance

2 valid scenarios (a child, citizenship-by-birth registration with a Grandparent/Introducer block populated and a Local Uganda residence; an adult, married, dual-citizen registration with a naturalized father, a dual-citizen mother, other spouses declared, and two of the four children rows populated) plus 23 mutation-control fixtures (each raising exactly 1 error: one missing-required-field case for each of the 13 statically required: true fields, 8 targeted requiredWhen cases spanning the Residence/Citizenship/Marital/Spouse/Father/Mother conditional rules, one invalid enum value, and one unknown top-level field) are committed under conformance/ug/nira/first-time-registration-application/1.0.0/. An ephemeral, from-scratch conformance checker (deriving required/ requiredWhen/visibleWhen/enum/type rules directly from this schema's own fields[], discarded after use, not committed) ran all 25 fixtures: both valid scenarios at 0 errors, all 23 mutation controls each raising exactly 1 error. Validated clean with node tools/validate.mjs and node tools/validate-ajv.mjs, individually and as part of the full registry run. registry-index.json regenerated via npm run build-index in tools/govschema-client/.

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