{
  "$schema": "https://govschema.org/spec/v0.3/govschema.schema.json",
  "govschemaVersion": "0.3.0",
  "id": "zw/zimra/itf1-employment-income-return",
  "version": "1.0.0",
  "title": "Zimbabwe ITF 1 — Return of Employment Income by an Individual",
  "description": "The Zimbabwe Revenue Authority's (ZIMRA) Form ITF 1, \"Return of employment income by an individual for the year ended 31st December\" — the annual return an individual employee files to declare employment income, deductions, other income, P.A.Y.E. already deducted, and credits/rebates claimed (medical, blind-person, disabled-person). Opens Zimbabwe as the registry's 87th jurisdiction (GOV-4470, child of GOV-4468 \"GovSchema Standard Research\", following GOV-4458's Bolivia cycle, which banked Zimbabwe's ZIMRA ITF 1 as a pre-scouted STRONG backup candidate). This schema models the form's own pages 1-6 (header/identity, employment particulars, earnings, deductions claimed, other income, P.A.Y.E. deducted, credits claimed, bank/savings account details, rent paid, other information, remarks, and the signed declaration); page 7 and the closing portion of page 6 are a purely informational directory of ZIMRA regional tax office addresses and are excluded from `fields[]`, along with the office-assigned issuance box (\"For official use only\" — Taxpayers Identity Number, \"Issued by\", \"To…\") on page 1 and every printed \"Office use only\" annotation column throughout, none of which is applicant-supplied data. Every printed line labelled \"Total…\" or \"Net earnings\" is likewise excluded as a same-form computed sum, per this registry's standing closed decision to defer calculated/derived fields (GSP-0013 §7, founder-confirmed on GOV-302) — see this document's own VERIFICATION.md for the full scope record, including a disclosed correction of the delegating issue's own paraphrase, which omitted the form's \"Spouse's address\"/\"Name and address of spouse's employer\" fields and its \"C. Blind person's credit\" subsection. This schema does not file the return itself; the live source is always authoritative. GovSchema is independent and is not affiliated with, endorsed by, or operated by the Government of Zimbabwe or the Zimbabwe Revenue Authority.",
  "status": "draft",
  "jurisdiction": {
    "country": "ZW",
    "level": "national"
  },
  "authority": {
    "name": "Zimbabwe Revenue Authority",
    "abbreviation": "ZIMRA",
    "url": "https://www.zimra.co.zw"
  },
  "process": {
    "type": "filing",
    "language": "en"
  },
  "source": {
    "url": "https://www.zimra.co.zw/downloads/category/9-domestic-taxes?download=385%3Aitf-1-return-of-employment-income-by-an-individual",
    "retrievedAt": "2026-07-23",
    "documentRef": "Form ITF 1, \"Return of employment income by an individual for the year ended 31st December\" (DTF: 84, Issue No: 1, Version No: 1, Date of Issue: 26/10/2015)"
  },
  "verification": {
    "method": "manual-source-review-v1",
    "lastVerifiedAt": "2026-07-23",
    "verifiedBy": "GovSchema Engineering (Standards Engineer)",
    "nextReviewBy": "2027-01-23",
    "notes": "GOV-4470 (\"GovSchema Standard Research\", child of GOV-4468). Zimbabwe's ZIMRA ITF 1 was banked as a pre-scouted STRONG backup candidate during the prior GOV-4458 cycle (which instead authored Bolivia's Formulario 200 IVA). This cycle independently re-verified the candidate fresh rather than trusting the delegating issue's own paraphrase — the issue's own description mis-scoped two sections (see Disclosed findings, below).\n\n## Reaching the live source\n\nIndependently re-fetched and re-hashed:\n\n- `https://www.zimra.co.zw/downloads/category/9-domestic-taxes?download=385%3Aitf-1-return-of-employment-income-by-an-individual`\n- HTTP 200, `Content-Type: application/pdf`, `Content-Length: 425,835` bytes — byte-for-byte matching the delegating issue's own disclosed size.\n- sha256 `a75fb0ae96c51ca7dbde0ec13cc8093666e458e46313430cfa8c5d8e7b78fcca`.\n- No login, CAPTCHA, or WAF gate — a plain unauthenticated `curl` request with no session/cookie state reached it cleanly.\n- 7 physical pages. Document-control footer stamps `DTF: 84 DOMESTIC TAXES ISSUE NO: 1 VERSION NO: 1 DATE OF ISSUE: 26/10/2015` on every page — a long-standing edition, still the current live download.\n\n## Extraction method\n\nExtracted with `pdfjs-dist` (vendored at `/tmp/node_modules/pdfjs-dist`, legacy CommonJS build). `getAnnotations()` confirmed zero `/Widget` annotations across all 7 pages — a flat (non-AcroForm) specimen, matching this registry's prior Paraguay/Bolivia specimens rather than an interactive form. `getTextContent()` then read every text item's raw string and its `transform` x/y position across all 7 pages, grouped into lines by rounded y-coordinate, to reconstruct the form's own section numbering and column layout.\n\nBecause this specimen's body-text glyphs did not render through `pdfjs-dist`'s canvas backend even after supplying `standardFontDataUrl`/`cMapUrl` (a font-loading limitation of this particular PDF's embedded Times/Helvetica subsets, not a text-layer defect — the text layer itself extracted cleanly), table/row structure was confirmed by rendering each page to a PNG via `pdfjs-dist` + `node-canvas` at 2.5x scale and visually counting the printed table gridlines (which render even where glyph paths do not), cross-referenced against the text layer's own x/y line groupings. This combination independently confirmed: the Employment section's employer/position/period columns sit above one unruled writing block (no fixed row count — modelled as free text, not a bounded table); the P.A.Y.E.-deducted section prints exactly one row of two side-by-side Serial No./Amount column pairs (bounded to 2 slots); the Disabled Person's Credit table prints exactly 3 ruled rows; and both the Bank/Savings Accounts and Rent Paid tables print exactly 4 ruled rows each.\n\n## Document structure\n\nPages 1-6 carry the applicant-facing form; page 7 (and the tail of page 6) is a purely informational, three-column directory of ZIMRA Regional Tax Office and border-post addresses, correctly excluded per the delegating issue's own scoping instruction. The form's own numbered sections: header/identity (T.I.N., date of birth, name, addresses); Employment; Details of earnings; Deductions claimed; §2-4 Other income; §5 P.A.Y.E. deducted; §6 Credits claimed (A. Medical expenses, B. Medical aid contributions, C. Blind person's credit, D. Disabled person's credit); §7 Details of bank or savings accounts; §8 Rent paid; §9 Other information; §10 Remarks; §11 Declaration; §12 Regional Tax Offices (excluded, office directory).\n\n## Scope: office-only / computed fields excluded\n\n- **The page-1 \"For official use only\" box** (Taxpayers Identity Number, \"Issued by\", \"To…\" address lines) is excluded in its entirety as ZIMRA's own pre-issuance office box, not applicant-supplied — the same class of exclusion this registry draws around Bolivia's FOLIO/NÚMERO DE ORDEN (`bo/sin/formulario-200-iva`) and Paraguay's own office-assigned tracking numbers. This is distinct from the applicant's own later T.I.N./Date of birth entry (page 1, below the instructions), which is included.\n- **Every printed \"Office use only\" annotation column** running down the right edge of the Earnings, Credits Claimed, Bank Accounts, and Rent Paid tables is excluded as ZIMRA staff annotation space, not applicant data.\n- **Total from employment, Total deductions claimed, Net earnings, Total income, and Total medical expenses** are each excluded as same-form computed sums (arithmetic combinations of other same-form lines, with explicit \"=\" arithmetic marks printed beside several of them), per this registry's standing GSP-0013 §7 exclusion for calculated/derived fields.\n- **Section 12 (Regional Tax Offices) and the closing portion of page 6** are excluded as a third-party office directory, not applicant data, consistent with the delegating issue's own scoping instruction to exclude page 7.\n\n## Disclosed findings\n\n1. **The delegating issue's own paraphrase omitted two genuine sections, both caught by this cycle's independent re-extraction rather than trusting the issue text at face value.** (a) Page 1 prints \"Spouse's address\" and \"Name and address of spouse's employer\" as two further header fields (continuing onto page 2), absent from the issue's own header-field list — included here as `spouseAddress`/`spouseEmployerNameAddress`, both optional since the form prints no separate marital-status indicator to gate them on. (b) Section 6 prints a \"C. Blind person's credit\" subsection (\"Claim relates to … Self … Spouse\") between the issue's listed (A) and (B) items and its (D) Disabled person's credit — included here as `blindPersonCreditClaimRelatesTo`.\n2. **The Employment section's employer/position/period-of-employment columns are modelled as free-text fields, not a bounded row-repeating table**, since the source prints one unruled writing block beneath the three column headers rather than the ruled sub-rows this registry's bounded-slot precedent (e.g. `zm/pacra/company-incorporation`'s director1/director2) requires before slotting. GSP-0009 (composite & repeating values / arrays) remains an unaccepted spec proposal, so an unbounded list has no structural representation available regardless; this is the same \"flatten when the composite is unruled free text\" posture this registry's Remarks/Other-earnings/Benefits fields already take elsewhere on this same form.\n3. **P.A.Y.E.-deducted, Disabled Person's Credit, Bank/Savings Accounts, and Rent Paid are each modelled as bounded numbered slots** (2, 3, 4, and 4 respectively), matching the exact number of ruled rows each table prints — confirmed via the rendered-page gridline count, not merely inferred from column headers — mirroring this registry's `zm/pacra/company-incorporation` bounded-slot precedent. Unlike that Zambian precedent, this form prints no companion \"how many\" count field, so slots beyond the first carry no `requiredWhen` gate of their own; only the first Rent Paid slot (and `boardType`) is gated `requiredWhen ownHome equals false`, mirroring the source's own explicit \"If 'NO' give the following details\" instruction.\n4. **\"Other earnings (specify)\" and \"Benefits (please specify type of benefits and state amount)\" are each split into a description field plus an amount field**, even though the source prints one combined blank line per item, for cleaner machine-readable amounts; both halves carry an identical `sourceRef` pointing at the same printed blank.\n5. **`title` is modelled `type: string`, not `enum`**, since the source prints \"Mr., Mrs., etc.\" as illustrative examples, not a closed option list — the same reasoning this registry's `zm/pacra/company-incorporation` applies to its own ungated `Gender` field.\n6. **All monetary fields are modelled `type: integer` with `validation.minimum: 0`.** The source gives no explicit currency-precision instruction (unlike Bolivia's \"EN BOLIVIANOS SIN CENTAVOS\"), but every printed amount blank is a plain `$` figure with no decimal ruling visible in either the text layer or the rendered page images, and no line's own text admits a negative value.\n7. **No field on this form carries a visible mandatory-field asterisk or equivalent marker anywhere in the extracted text or the rendered pages.** Per this registry's own precedent for un-asterisked sources (e.g. Bolivia's Formulario 200, Zambia's ITF 46_1), only the header identity block (tax year, T.I.N., date of birth, surname, first names, residential address), the Employment section's employer name(s)/address(es) field (a return cannot report employment income without at least one employer), and the closing declaration's signature date are modelled `required: true`, on the basis that a return cannot be meaningfully filed or processed without them; every other field is `required: false`, gated `requiredWhen` where the source's own branching text (first-return Yes/No; own-home Yes/No) makes the conditional relationship explicit.\n8. **The physical signature mark itself is not separately modelled as data** — it is captured by the `declarationAttestation` document's own `required: true`, consistent with this registry's `bo/sin/formulario-200-iva` precedent for signature blocks; the accompanying `signatureDate` is modelled as an ordinary required field since it is typed/written data distinct from the signature act.\n\n## Conformance\n\n3 valid mock scenarios — `valid-single-employer-paye-return` (a straightforward single-employer filing with salary income, PAYE already deducted, and a medical-aid credit); `valid-multiple-employers-and-rent-paid` (an employee who changed employers mid-year, exercising two P.A.Y.E. certificate slots and two Rent Paid landlord slots on a rented home); and `valid-first-return-with-disability-credits` (a first-time Zimbabwe filer exercising the first-return explanation branch, all three Disabled Person's Credit slots, and multiple bank accounts) — plus 8 mutation-control fixtures (one missing statically-required field from each of `taxYear`, `tin`, `dateOfBirth`, `surname`, `firstNames`, `residentialAddress`, `employersNamesAddresses`, `signatureDate` — one per required field) and one unknown-field-rejected fixture, committed under `conformance/zw/zimra/itf1-employment-income-return/1.0.0/`.\n\nAn ephemeral, from-scratch conformance checker (deriving required/requiredWhen rules directly from this schema's own `fields[]`, discarded after use, not committed) ran all fixtures: all 3 valid scenarios at 0 errors, all mutation controls each raising exactly 1 error, and the unknown-field fixture correctly rejected. 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/`."
  },
  "maturity": {
    "level": "structural-reference",
    "criteria": {
      "structuralReference": true,
      "verifiedSchema": false,
      "agentReadySchema": false,
      "executionTestedSchema": false
    },
    "method": "maturity-self-assessment-v1",
    "assertedBy": "GovSchema Engineering (Standards Engineer)",
    "assertedAt": "2026-07-23"
  },
  "license": "CC-BY-4.0",
  "steps": [
    {
      "id": "header_identity",
      "title": "Header and identity",
      "fields": [
        "taxYear",
        "tin",
        "dateOfBirth",
        "surname",
        "firstNames",
        "title",
        "residentialAddress",
        "postalAddress",
        "daytimePhoneNumber",
        "spouseAddress",
        "spouseEmployerNameAddress"
      ],
      "next": "employment_particulars"
    },
    {
      "id": "employment_particulars",
      "title": "Employment",
      "fields": [
        "employersNamesAddresses",
        "positionsHeld",
        "periodsOfEmployment"
      ],
      "next": "earnings"
    },
    {
      "id": "earnings",
      "title": "Details of earnings",
      "fields": [
        "salariesWagesOvertime",
        "bonus",
        "feesCommission",
        "cashInLieuOfLeave",
        "gratuityOrCompensationOnCessation",
        "commutationOfContractAmount",
        "lumpSumPensionBenefitOrUnapprovedFundPayment",
        "otherEarningsDescription",
        "otherEarningsAmount",
        "benefitsDescription",
        "benefitsAmount"
      ],
      "next": "deductions_claimed"
    },
    {
      "id": "deductions_claimed",
      "title": "Deductions claimed",
      "fields": [
        "tradeProfessionalSubscriptionAmount",
        "tradeProfessionalAssociationName",
        "toolsRenewedReplacedAmount",
        "pensionRetirementAnnuityContributionAmount",
        "pensionRetirementAnnuityFundNames",
        "charitableTrustDonationAmount"
      ],
      "next": "other_income"
    },
    {
      "id": "other_income",
      "title": "Other income",
      "fields": [
        "pensionsAndAnnuitiesIncome",
        "minorChildrenIncome",
        "otherIncomeAmount"
      ],
      "next": "paye_deducted"
    },
    {
      "id": "paye_deducted",
      "title": "P.A.Y.E. deducted",
      "fields": [
        "payeCertificate1SerialNo",
        "payeCertificate1Amount",
        "payeCertificate2SerialNo",
        "payeCertificate2Amount"
      ],
      "next": "credits_claimed"
    },
    {
      "id": "credits_claimed",
      "title": "Credits claimed",
      "fields": [
        "medicinesPrescriptionsHospitalFeesAmount",
        "medicalAppliancesPurchasesAmount",
        "medicalPaymentsFromOtherSourceAmount",
        "medicalAidPersonCoveredName",
        "medicalAidSocietyName",
        "medicalAidContributionAmount",
        "blindPersonCreditClaimRelatesTo",
        "disabledPerson1NameOrRelation",
        "disabledPerson1NatureOfDisability",
        "disabledPerson2NameOrRelation",
        "disabledPerson2NatureOfDisability",
        "disabledPerson3NameOrRelation",
        "disabledPerson3NatureOfDisability"
      ],
      "next": "bank_accounts"
    },
    {
      "id": "bank_accounts",
      "title": "Details of bank or savings accounts",
      "fields": [
        "bankAccount1BankerName",
        "bankAccount1Branch",
        "bankAccount1AccountType",
        "bankAccount1AccountNumber",
        "bankAccount2BankerName",
        "bankAccount2Branch",
        "bankAccount2AccountType",
        "bankAccount2AccountNumber",
        "bankAccount3BankerName",
        "bankAccount3Branch",
        "bankAccount3AccountType",
        "bankAccount3AccountNumber",
        "bankAccount4BankerName",
        "bankAccount4Branch",
        "bankAccount4AccountType",
        "bankAccount4AccountNumber"
      ],
      "next": "rent_paid"
    },
    {
      "id": "rent_paid",
      "title": "Rent paid",
      "fields": [
        "ownHome",
        "rentPayment1LandlordNameAddress",
        "rentPayment1PropertyAddress",
        "rentPayment1PeriodCovered",
        "rentPayment1AmountPaid",
        "rentPayment2LandlordNameAddress",
        "rentPayment2PropertyAddress",
        "rentPayment2PeriodCovered",
        "rentPayment2AmountPaid",
        "rentPayment3LandlordNameAddress",
        "rentPayment3PropertyAddress",
        "rentPayment3PeriodCovered",
        "rentPayment3AmountPaid",
        "rentPayment4LandlordNameAddress",
        "rentPayment4PropertyAddress",
        "rentPayment4PeriodCovered",
        "rentPayment4AmountPaid",
        "boardType"
      ],
      "next": "other_information"
    },
    {
      "id": "other_information",
      "title": "Other information",
      "fields": [
        "isFirstReturnInZimbabwe",
        "firstReturnExplanation",
        "lastReturnTaxYear",
        "lastReturnRegionalOfficeSentTo",
        "previousEmployerNameAddressPeriod",
        "previousCollegeOrUniversityName",
        "arrivalDateIfMovedFromAnotherCountry"
      ],
      "next": "remarks"
    },
    {
      "id": "remarks",
      "title": "Remarks",
      "fields": [
        "remarks"
      ],
      "next": "declaration"
    },
    {
      "id": "declaration",
      "title": "Declaration",
      "fields": [
        "signatureDate"
      ]
    }
  ],
  "fields": [
    {
      "name": "taxYear",
      "label": "Year ended 31 December",
      "type": "string",
      "required": true,
      "description": "The tax year (calendar year ended 31 December) this return covers.",
      "sourceRef": "Page 1 — title, \"Return of employment income by an individual for the year ended 31 December ……………..\"",
      "validation": {
        "pattern": "^[0-9]{4}$"
      }
    },
    {
      "name": "tin",
      "label": "T.I.N",
      "type": "string",
      "required": true,
      "description": "Taxpayer's own Taxpayers Identity Number (T.I.N.), per the form's own instruction to \"ensure that your National Registration Number (T.I.N) is correct.\"",
      "sourceRef": "Page 1 — applicant-supplied \"T.I.N\" box (distinct from the office-issuance \"For official use only\" box above it, excluded — see this schema's own VERIFICATION.md)",
      "classification": "pii"
    },
    {
      "name": "dateOfBirth",
      "label": "Date of birth",
      "type": "date",
      "required": true,
      "sourceRef": "Page 1 — \"T.I.N Date of birth\" row",
      "classification": "pii"
    },
    {
      "name": "surname",
      "label": "Surname",
      "type": "string",
      "required": true,
      "sourceRef": "Page 1 — \"Name (in capital letters) and address\" / \"Surname\"",
      "classification": "pii"
    },
    {
      "name": "firstNames",
      "label": "First names",
      "type": "string",
      "required": true,
      "sourceRef": "Page 1 — \"Name (in capital letters) and address\" / \"First names\"",
      "classification": "pii"
    },
    {
      "name": "title",
      "label": "Title",
      "type": "string",
      "required": false,
      "description": "Printed as open examples (\"Mr., Mrs., etc.\"), not a closed list, so modelled as free text rather than an enum.",
      "sourceRef": "Page 1 — \"Title (Mr., Mrs., etc.)\"",
      "classification": "pii"
    },
    {
      "name": "residentialAddress",
      "label": "Residential address",
      "type": "string",
      "required": true,
      "sourceRef": "Page 1 — \"Residential address\"",
      "classification": "pii"
    },
    {
      "name": "postalAddress",
      "label": "Postal address",
      "type": "string",
      "required": false,
      "sourceRef": "Page 1 — \"Postal address\"",
      "classification": "pii"
    },
    {
      "name": "daytimePhoneNumber",
      "label": "Daytime phone number",
      "type": "string",
      "required": false,
      "description": "Explicitly printed as optional (\"only if convenient\").",
      "sourceRef": "Page 1 — \"Daytime phone number (only if convenient)\"",
      "classification": "pii"
    },
    {
      "name": "spouseAddress",
      "label": "Spouse's address",
      "type": "string",
      "required": false,
      "description": "Applies only if the taxpayer has a spouse; the form prints no separate marital-status indicator, so this field is left optional rather than gated on an invented condition.",
      "sourceRef": "Page 1/2 — \"Spouse's address\" (row continues onto page 2)",
      "classification": "pii"
    },
    {
      "name": "spouseEmployerNameAddress",
      "label": "Name and address of spouse's employer",
      "type": "string",
      "required": false,
      "sourceRef": "Page 1/2 — \"Name and address of spouse's employer\" (row continues onto page 2)",
      "classification": "pii"
    },
    {
      "name": "employersNamesAddresses",
      "label": "Name(s) and address(es) of employer(s)",
      "type": "string",
      "required": true,
      "description": "Free text; the source prints one unruled writing block for this column, covering one or more employers during the tax year, not a fixed-row table.",
      "sourceRef": "Page 2, Section \"Employment\" — \"Name(s) and address(es) of employer(s)\""
    },
    {
      "name": "positionsHeld",
      "label": "Position held",
      "type": "string",
      "required": false,
      "sourceRef": "Page 2, Section \"Employment\" — \"Position held\""
    },
    {
      "name": "periodsOfEmployment",
      "label": "Period(s) of employment",
      "type": "string",
      "required": false,
      "description": "Also used to indicate periods of unemployment during the tax year, per the column's own printed instruction.",
      "sourceRef": "Page 2, Section \"Employment\" — \"Period(s) of employment (indicate periods of unemployment)\""
    },
    {
      "name": "salariesWagesOvertime",
      "label": "Salaries, wages, overtime",
      "type": "integer",
      "required": false,
      "sourceRef": "Page 2, \"Details of earnings\" — \"Salaries, wages, overtime\"",
      "validation": {
        "minimum": 0
      }
    },
    {
      "name": "bonus",
      "label": "Bonus",
      "type": "integer",
      "required": false,
      "sourceRef": "Page 2, \"Details of earnings\" — \"Bonus\"",
      "validation": {
        "minimum": 0
      }
    },
    {
      "name": "feesCommission",
      "label": "Fees, commission",
      "type": "integer",
      "required": false,
      "sourceRef": "Page 2, \"Details of earnings\" — \"Fees, commission\"",
      "validation": {
        "minimum": 0
      }
    },
    {
      "name": "cashInLieuOfLeave",
      "label": "Cash-in-lieu of leave",
      "type": "integer",
      "required": false,
      "sourceRef": "Page 2, \"Details of earnings\" — \"Cash-in-lieu of leave\"",
      "validation": {
        "minimum": 0
      }
    },
    {
      "name": "gratuityOrCompensationOnCessation",
      "label": "Gratuity or compensation on cessation of employment",
      "type": "integer",
      "required": false,
      "sourceRef": "Page 2, \"Details of earnings\" — \"Gratuity or compensation on cessation of employment\"",
      "validation": {
        "minimum": 0
      }
    },
    {
      "name": "commutationOfContractAmount",
      "label": "Commutation of amount due under a contract of employment",
      "type": "integer",
      "required": false,
      "sourceRef": "Page 2, \"Details of earnings\" — \"Commutation of amount due under a contract of employment\"",
      "validation": {
        "minimum": 0
      }
    },
    {
      "name": "lumpSumPensionBenefitOrUnapprovedFundPayment",
      "label": "Lump sum payment from pension, benefit or unapproved fund",
      "type": "integer",
      "required": false,
      "sourceRef": "Page 2, \"Details of earnings\" — \"Lump sum payment from pension, benefit or unapproved fund\"",
      "validation": {
        "minimum": 0
      }
    },
    {
      "name": "otherEarningsDescription",
      "label": "Other earnings (specify)",
      "type": "string",
      "required": false,
      "description": "The source prints one combined blank for both the description and the amount; modelled here as a separate description field alongside otherEarningsAmount for machine-readable consumption.",
      "sourceRef": "Page 2, \"Details of earnings\" — \"Other earnings (specify)\""
    },
    {
      "name": "otherEarningsAmount",
      "label": "Other earnings — amount",
      "type": "integer",
      "required": false,
      "sourceRef": "Page 2, \"Details of earnings\" — \"Other earnings (specify)\"",
      "validation": {
        "minimum": 0
      }
    },
    {
      "name": "benefitsDescription",
      "label": "Benefits (please specify type)",
      "type": "string",
      "required": false,
      "description": "The source prints one combined blank asking to specify the type of benefit and state its amount; split here into a description field alongside benefitsAmount.",
      "sourceRef": "Page 2, \"Details of earnings\" — \"Benefits (please specify type of benefits and state amount)\""
    },
    {
      "name": "benefitsAmount",
      "label": "Benefits — amount",
      "type": "integer",
      "required": false,
      "sourceRef": "Page 2, \"Details of earnings\" — \"Benefits (please specify type of benefits and state amount)\"",
      "validation": {
        "minimum": 0
      }
    },
    {
      "name": "tradeProfessionalSubscriptionAmount",
      "label": "Membership subscriptions to a trade, technical or professional association",
      "type": "integer",
      "required": false,
      "sourceRef": "Page 2/3, \"Deductions claimed\" — \"Membership subscriptions to a trade, technical or professional association\"",
      "validation": {
        "minimum": 0
      }
    },
    {
      "name": "tradeProfessionalAssociationName",
      "label": "State name of association",
      "type": "string",
      "required": false,
      "sourceRef": "Page 3, \"Deductions claimed\" — \"State name of association\""
    },
    {
      "name": "toolsRenewedReplacedAmount",
      "label": "Cost of tools renewed or replaced (artisans and tradesman only)",
      "type": "integer",
      "required": false,
      "sourceRef": "Page 3, \"Deductions claimed\" — \"Cost of tools renewed or replaced (artisans and tradesman only)\"",
      "validation": {
        "minimum": 0
      }
    },
    {
      "name": "pensionRetirementAnnuityContributionAmount",
      "label": "Contributions to registered pension or retirement annuity fund",
      "type": "integer",
      "required": false,
      "sourceRef": "Page 3, \"Deductions claimed\" — \"Contributions to registered pension or retirement annuity fund (attach receipt(s) for the latter contribution(s))\"",
      "validation": {
        "minimum": 0
      }
    },
    {
      "name": "pensionRetirementAnnuityFundNames",
      "label": "State name(s) of fund(s)",
      "type": "string",
      "required": false,
      "sourceRef": "Page 3, \"Deductions claimed\" — \"State name(s) of fund(s)\""
    },
    {
      "name": "charitableTrustDonationAmount",
      "label": "Donations to a charitable trust administered by the Minister responsible for Social Welfare, or Health and Child Welfare",
      "type": "integer",
      "required": false,
      "sourceRef": "Page 3, \"Deductions claimed\" — \"Donations to a charitable trust administered by the Minister responsible for Social Welfare, or Health and Child Welfare\"",
      "validation": {
        "minimum": 0
      }
    },
    {
      "name": "pensionsAndAnnuitiesIncome",
      "label": "Pensions and annuities (Income)",
      "type": "integer",
      "required": false,
      "sourceRef": "Page 3 — \"2. Pensions and annuities (Income)\"",
      "validation": {
        "minimum": 0
      }
    },
    {
      "name": "minorChildrenIncome",
      "label": "Income of minor children",
      "type": "integer",
      "required": false,
      "sourceRef": "Page 3 — \"3. Income of minor children (Please attach Statement)\"",
      "validation": {
        "minimum": 0
      }
    },
    {
      "name": "otherIncomeAmount",
      "label": "Any other income",
      "type": "integer",
      "required": false,
      "sourceRef": "Page 3 — \"4. Any other income (please attach statement)\"",
      "validation": {
        "minimum": 0
      }
    },
    {
      "name": "payeCertificate1SerialNo",
      "label": "P.A.Y.E. deducted — Serial No. (1)",
      "type": "string",
      "required": false,
      "sourceRef": "Page 3 — \"5. P.A.Y.E deducted\" / \"Serial No.\" (printed as two side-by-side Serial No./Amount column pairs, bounded to 2 slots)"
    },
    {
      "name": "payeCertificate1Amount",
      "label": "P.A.Y.E. deducted — Amount (1)",
      "type": "integer",
      "required": false,
      "sourceRef": "Page 3 — \"5. P.A.Y.E deducted\" / \"Amount $\"",
      "validation": {
        "minimum": 0
      }
    },
    {
      "name": "payeCertificate2SerialNo",
      "label": "P.A.Y.E. deducted — Serial No. (2)",
      "type": "string",
      "required": false,
      "sourceRef": "Page 3 — \"5. P.A.Y.E deducted\" / \"Serial No.\" (printed as two side-by-side Serial No./Amount column pairs, bounded to 2 slots)"
    },
    {
      "name": "payeCertificate2Amount",
      "label": "P.A.Y.E. deducted — Amount (2)",
      "type": "integer",
      "required": false,
      "sourceRef": "Page 3 — \"5. P.A.Y.E deducted\" / \"Amount $\"",
      "validation": {
        "minimum": 0
      }
    },
    {
      "name": "medicinesPrescriptionsHospitalFeesAmount",
      "label": "Medicines on prescription and hospital fees",
      "type": "integer",
      "required": false,
      "sourceRef": "Page 4 — \"6. Credits claimed\" / \"A. Medical expenses\" / \"Medicines on prescription and hospital fees $\"",
      "validation": {
        "minimum": 0
      },
      "classification": "financial"
    },
    {
      "name": "medicalAppliancesPurchasesAmount",
      "label": "Purchases on appliances",
      "type": "integer",
      "required": false,
      "sourceRef": "Page 4 — \"6. Credits claimed\" / \"A. Medical expenses\" / \"Purchases on appliances $\"",
      "validation": {
        "minimum": 0
      },
      "classification": "financial"
    },
    {
      "name": "medicalPaymentsFromOtherSourceAmount",
      "label": "Payments from other source",
      "type": "integer",
      "required": false,
      "sourceRef": "Page 4 — \"6. Credits claimed\" / \"A. Medical expenses\" / \"Payments from other source\"",
      "validation": {
        "minimum": 0
      },
      "classification": "financial"
    },
    {
      "name": "medicalAidPersonCoveredName",
      "label": "Name of person covered",
      "type": "string",
      "required": false,
      "sourceRef": "Page 4 — \"6. Credits claimed\" / \"B. Medical aid contributions\" / \"Name of person covered\"",
      "classification": "health"
    },
    {
      "name": "medicalAidSocietyName",
      "label": "Name of society",
      "type": "string",
      "required": false,
      "sourceRef": "Page 4 — \"6. Credits claimed\" / \"B. Medical aid contributions\" / \"Name of society\""
    },
    {
      "name": "medicalAidContributionAmount",
      "label": "Medical aid contribution amount",
      "type": "integer",
      "required": false,
      "sourceRef": "Page 4 — \"6. Credits claimed\" / \"B. Medical aid contributions\" / \"$\"",
      "validation": {
        "minimum": 0
      },
      "classification": "financial"
    },
    {
      "name": "blindPersonCreditClaimRelatesTo",
      "label": "Blind person's credit — claim relates to",
      "type": "enum",
      "required": false,
      "sourceRef": "Page 4 — \"6. Credits claimed\" / \"C. Blind person's credit\" / \"Claim relates to … Self … Spouse\"",
      "validation": {
        "enum": [
          "Self",
          "Spouse"
        ]
      },
      "classification": "health"
    },
    {
      "name": "disabledPerson1NameOrRelation",
      "label": "Disabled person's credit — \"Self\"/\"Spouse\"/child's name (1)",
      "type": "string",
      "required": false,
      "sourceRef": "Page 4 — \"6. Credits claimed\" / \"D. Disabled person's credit\" / \"'Self' or 'Spouse' or name of disabled child\" (3 printed rows)",
      "classification": "health"
    },
    {
      "name": "disabledPerson1NatureOfDisability",
      "label": "Disabled person's credit — nature of disability (1)",
      "type": "string",
      "required": false,
      "sourceRef": "Page 4 — \"6. Credits claimed\" / \"D. Disabled person's credit\" / \"Nature of disability\" (3 printed rows)",
      "classification": "health"
    },
    {
      "name": "disabledPerson2NameOrRelation",
      "label": "Disabled person's credit — \"Self\"/\"Spouse\"/child's name (2)",
      "type": "string",
      "required": false,
      "sourceRef": "Page 4 — \"6. Credits claimed\" / \"D. Disabled person's credit\" / \"'Self' or 'Spouse' or name of disabled child\" (3 printed rows)",
      "classification": "health"
    },
    {
      "name": "disabledPerson2NatureOfDisability",
      "label": "Disabled person's credit — nature of disability (2)",
      "type": "string",
      "required": false,
      "sourceRef": "Page 4 — \"6. Credits claimed\" / \"D. Disabled person's credit\" / \"Nature of disability\" (3 printed rows)",
      "classification": "health"
    },
    {
      "name": "disabledPerson3NameOrRelation",
      "label": "Disabled person's credit — \"Self\"/\"Spouse\"/child's name (3)",
      "type": "string",
      "required": false,
      "sourceRef": "Page 4 — \"6. Credits claimed\" / \"D. Disabled person's credit\" / \"'Self' or 'Spouse' or name of disabled child\" (3 printed rows)",
      "classification": "health"
    },
    {
      "name": "disabledPerson3NatureOfDisability",
      "label": "Disabled person's credit — nature of disability (3)",
      "type": "string",
      "required": false,
      "sourceRef": "Page 4 — \"6. Credits claimed\" / \"D. Disabled person's credit\" / \"Nature of disability\" (3 printed rows)",
      "classification": "health"
    },
    {
      "name": "bankAccount1BankerName",
      "label": "Name of banker (1)",
      "type": "string",
      "required": false,
      "sourceRef": "Page 4 — \"7. Details of bank or savings accounts\" / \"Name of banker\" (4 printed rows)"
    },
    {
      "name": "bankAccount1Branch",
      "label": "Branch (1)",
      "type": "string",
      "required": false,
      "sourceRef": "Page 4 — \"7. Details of bank or savings accounts\" / \"Branch\" (4 printed rows)"
    },
    {
      "name": "bankAccount1AccountType",
      "label": "Type of account (1)",
      "type": "string",
      "required": false,
      "sourceRef": "Page 4 — \"7. Details of bank or savings accounts\" / \"Type of account\" (4 printed rows)"
    },
    {
      "name": "bankAccount1AccountNumber",
      "label": "Account number (1)",
      "type": "string",
      "required": false,
      "sourceRef": "Page 4 — \"7. Details of bank or savings accounts\" / \"Account number\" (4 printed rows)",
      "classification": "financial"
    },
    {
      "name": "bankAccount2BankerName",
      "label": "Name of banker (2)",
      "type": "string",
      "required": false,
      "sourceRef": "Page 4 — \"7. Details of bank or savings accounts\" / \"Name of banker\" (4 printed rows)"
    },
    {
      "name": "bankAccount2Branch",
      "label": "Branch (2)",
      "type": "string",
      "required": false,
      "sourceRef": "Page 4 — \"7. Details of bank or savings accounts\" / \"Branch\" (4 printed rows)"
    },
    {
      "name": "bankAccount2AccountType",
      "label": "Type of account (2)",
      "type": "string",
      "required": false,
      "sourceRef": "Page 4 — \"7. Details of bank or savings accounts\" / \"Type of account\" (4 printed rows)"
    },
    {
      "name": "bankAccount2AccountNumber",
      "label": "Account number (2)",
      "type": "string",
      "required": false,
      "sourceRef": "Page 4 — \"7. Details of bank or savings accounts\" / \"Account number\" (4 printed rows)",
      "classification": "financial"
    },
    {
      "name": "bankAccount3BankerName",
      "label": "Name of banker (3)",
      "type": "string",
      "required": false,
      "sourceRef": "Page 4 — \"7. Details of bank or savings accounts\" / \"Name of banker\" (4 printed rows)"
    },
    {
      "name": "bankAccount3Branch",
      "label": "Branch (3)",
      "type": "string",
      "required": false,
      "sourceRef": "Page 4 — \"7. Details of bank or savings accounts\" / \"Branch\" (4 printed rows)"
    },
    {
      "name": "bankAccount3AccountType",
      "label": "Type of account (3)",
      "type": "string",
      "required": false,
      "sourceRef": "Page 4 — \"7. Details of bank or savings accounts\" / \"Type of account\" (4 printed rows)"
    },
    {
      "name": "bankAccount3AccountNumber",
      "label": "Account number (3)",
      "type": "string",
      "required": false,
      "sourceRef": "Page 4 — \"7. Details of bank or savings accounts\" / \"Account number\" (4 printed rows)",
      "classification": "financial"
    },
    {
      "name": "bankAccount4BankerName",
      "label": "Name of banker (4)",
      "type": "string",
      "required": false,
      "sourceRef": "Page 4 — \"7. Details of bank or savings accounts\" / \"Name of banker\" (4 printed rows)"
    },
    {
      "name": "bankAccount4Branch",
      "label": "Branch (4)",
      "type": "string",
      "required": false,
      "sourceRef": "Page 4 — \"7. Details of bank or savings accounts\" / \"Branch\" (4 printed rows)"
    },
    {
      "name": "bankAccount4AccountType",
      "label": "Type of account (4)",
      "type": "string",
      "required": false,
      "sourceRef": "Page 4 — \"7. Details of bank or savings accounts\" / \"Type of account\" (4 printed rows)"
    },
    {
      "name": "bankAccount4AccountNumber",
      "label": "Account number (4)",
      "type": "string",
      "required": false,
      "sourceRef": "Page 4 — \"7. Details of bank or savings accounts\" / \"Account number\" (4 printed rows)",
      "classification": "financial"
    },
    {
      "name": "ownHome",
      "label": "Do you own the house or flat you live in?",
      "type": "boolean",
      "required": false,
      "sourceRef": "Page 4 — \"8. Rent paid\" / \"Do you own the house or flat you live in? Yes No\""
    },
    {
      "name": "rentPayment1LandlordNameAddress",
      "label": "Name and address of person to whom rent was paid (1)",
      "type": "string",
      "required": false,
      "sourceRef": "Page 4/5 — \"8. Rent paid\", \"If 'NO' give the following details\" / \"Name and address of person to whom rent was paid\" (4 printed rows)",
      "classification": "pii",
      "requiredWhen": {
        "field": "ownHome",
        "equals": false
      }
    },
    {
      "name": "rentPayment1PropertyAddress",
      "label": "Address of property (1)",
      "type": "string",
      "required": false,
      "sourceRef": "Page 4/5 — \"8. Rent paid\" / \"Address of property\" (4 printed rows)",
      "requiredWhen": {
        "field": "ownHome",
        "equals": false
      }
    },
    {
      "name": "rentPayment1PeriodCovered",
      "label": "Period covered (1)",
      "type": "string",
      "required": false,
      "sourceRef": "Page 4/5 — \"8. Rent paid\" / \"Period covered\" (4 printed rows)",
      "requiredWhen": {
        "field": "ownHome",
        "equals": false
      }
    },
    {
      "name": "rentPayment1AmountPaid",
      "label": "Amount paid (1)",
      "type": "integer",
      "required": false,
      "sourceRef": "Page 4/5 — \"8. Rent paid\" / \"Amount paid $\" (4 printed rows)",
      "validation": {
        "minimum": 0
      },
      "classification": "financial",
      "requiredWhen": {
        "field": "ownHome",
        "equals": false
      }
    },
    {
      "name": "rentPayment2LandlordNameAddress",
      "label": "Name and address of person to whom rent was paid (2)",
      "type": "string",
      "required": false,
      "sourceRef": "Page 4/5 — \"8. Rent paid\", \"If 'NO' give the following details\" / \"Name and address of person to whom rent was paid\" (4 printed rows)",
      "classification": "pii"
    },
    {
      "name": "rentPayment2PropertyAddress",
      "label": "Address of property (2)",
      "type": "string",
      "required": false,
      "sourceRef": "Page 4/5 — \"8. Rent paid\" / \"Address of property\" (4 printed rows)"
    },
    {
      "name": "rentPayment2PeriodCovered",
      "label": "Period covered (2)",
      "type": "string",
      "required": false,
      "sourceRef": "Page 4/5 — \"8. Rent paid\" / \"Period covered\" (4 printed rows)"
    },
    {
      "name": "rentPayment2AmountPaid",
      "label": "Amount paid (2)",
      "type": "integer",
      "required": false,
      "sourceRef": "Page 4/5 — \"8. Rent paid\" / \"Amount paid $\" (4 printed rows)",
      "validation": {
        "minimum": 0
      },
      "classification": "financial"
    },
    {
      "name": "rentPayment3LandlordNameAddress",
      "label": "Name and address of person to whom rent was paid (3)",
      "type": "string",
      "required": false,
      "sourceRef": "Page 4/5 — \"8. Rent paid\", \"If 'NO' give the following details\" / \"Name and address of person to whom rent was paid\" (4 printed rows)",
      "classification": "pii"
    },
    {
      "name": "rentPayment3PropertyAddress",
      "label": "Address of property (3)",
      "type": "string",
      "required": false,
      "sourceRef": "Page 4/5 — \"8. Rent paid\" / \"Address of property\" (4 printed rows)"
    },
    {
      "name": "rentPayment3PeriodCovered",
      "label": "Period covered (3)",
      "type": "string",
      "required": false,
      "sourceRef": "Page 4/5 — \"8. Rent paid\" / \"Period covered\" (4 printed rows)"
    },
    {
      "name": "rentPayment3AmountPaid",
      "label": "Amount paid (3)",
      "type": "integer",
      "required": false,
      "sourceRef": "Page 4/5 — \"8. Rent paid\" / \"Amount paid $\" (4 printed rows)",
      "validation": {
        "minimum": 0
      },
      "classification": "financial"
    },
    {
      "name": "rentPayment4LandlordNameAddress",
      "label": "Name and address of person to whom rent was paid (4)",
      "type": "string",
      "required": false,
      "sourceRef": "Page 4/5 — \"8. Rent paid\", \"If 'NO' give the following details\" / \"Name and address of person to whom rent was paid\" (4 printed rows)",
      "classification": "pii"
    },
    {
      "name": "rentPayment4PropertyAddress",
      "label": "Address of property (4)",
      "type": "string",
      "required": false,
      "sourceRef": "Page 4/5 — \"8. Rent paid\" / \"Address of property\" (4 printed rows)"
    },
    {
      "name": "rentPayment4PeriodCovered",
      "label": "Period covered (4)",
      "type": "string",
      "required": false,
      "sourceRef": "Page 4/5 — \"8. Rent paid\" / \"Period covered\" (4 printed rows)"
    },
    {
      "name": "rentPayment4AmountPaid",
      "label": "Amount paid (4)",
      "type": "integer",
      "required": false,
      "sourceRef": "Page 4/5 — \"8. Rent paid\" / \"Amount paid $\" (4 printed rows)",
      "validation": {
        "minimum": 0
      },
      "classification": "financial"
    },
    {
      "name": "boardType",
      "label": "Indicate whether amount paid covers",
      "type": "enum",
      "required": false,
      "sourceRef": "Page 5 — \"8. Rent paid\" / \"Indicate whether amount paid covers Full board Partial board Nil board\"",
      "validation": {
        "enum": [
          "Full board",
          "Partial board",
          "Nil board"
        ]
      },
      "requiredWhen": {
        "field": "ownHome",
        "equals": false
      }
    },
    {
      "name": "isFirstReturnInZimbabwe",
      "label": "Is this return your first return in Zimbabwe?",
      "type": "boolean",
      "required": false,
      "sourceRef": "Page 5 — \"9. Other information\" / \"Is this return your first return … Yes No\""
    },
    {
      "name": "firstReturnExplanation",
      "label": "If 'yes' please explain why this is your first return in Zimbabwe",
      "type": "string",
      "required": false,
      "sourceRef": "Page 5 — \"9. Other information\" / \"If 'yes' please explain why this is your first return in Zimbabwe\"",
      "requiredWhen": {
        "field": "isFirstReturnInZimbabwe",
        "equals": true
      }
    },
    {
      "name": "lastReturnTaxYear",
      "label": "If 'No' state tax year for last return",
      "type": "string",
      "required": false,
      "sourceRef": "Page 5 — \"9. Other information\" / \"If 'No' state tax year for last return\"",
      "requiredWhen": {
        "field": "isFirstReturnInZimbabwe",
        "equals": false
      }
    },
    {
      "name": "lastReturnRegionalOfficeSentTo",
      "label": "Regional office to which you sent it",
      "type": "string",
      "required": false,
      "sourceRef": "Page 5 — \"9. Other information\" / \"Regional office to which you sent it\"",
      "requiredWhen": {
        "field": "isFirstReturnInZimbabwe",
        "equals": false
      }
    },
    {
      "name": "previousEmployerNameAddressPeriod",
      "label": "Name and business address of your previous employer, if any, and period of employment",
      "type": "string",
      "required": false,
      "sourceRef": "Page 5 — \"9. Other information\" / \"Name and business address of your previous employer, if any and period of employment.\""
    },
    {
      "name": "previousCollegeOrUniversityName",
      "label": "Name of college or university (if a student before the year covering this return)",
      "type": "string",
      "required": false,
      "sourceRef": "Page 5 — \"9. Other information\" / \"If you were a student before the year covering this return, please state name of college or university\""
    },
    {
      "name": "arrivalDateIfMovedFromAnotherCountry",
      "label": "Date of arrival in Zimbabwe (if moved from another country)",
      "type": "date",
      "required": false,
      "sourceRef": "Page 5 — \"9. Other information\" / \"If you moved here from another country please state date of arrival in Zimbabwe\""
    },
    {
      "name": "remarks",
      "label": "Remarks",
      "type": "string",
      "required": false,
      "sourceRef": "Page 5/6 — \"10. Remarks\" — \"You can use the space below for any remarks or to state details in support of any item in the return\""
    },
    {
      "name": "signatureDate",
      "label": "Date",
      "type": "date",
      "required": true,
      "sourceRef": "Page 6 — \"11. Declaration\" / \"Signature ……………………… Date ……………………………\""
    }
  ],
  "documents": [
    {
      "id": "declarationAttestation",
      "label": "Declaration of accuracy and completeness",
      "category": "attestation",
      "required": true,
      "statement": "I declare that the information I have given on this form is correct and complete in every particular.",
      "sourceRef": "Page 6 — \"11. Declaration\""
    },
    {
      "id": "employerTaxCertificateP6",
      "label": "Employer's tax certificate (Form P.6)",
      "category": "supporting-evidence",
      "required": false,
      "sourceRef": "Page 3 — \"5. P.A.Y.E deducted – Please attach your employer's tax certificate (Form P.6)\""
    },
    {
      "id": "minorChildrenIncomeStatement",
      "label": "Statement of minor children's income",
      "category": "supporting-evidence",
      "required": false,
      "sourceRef": "Page 3 — \"3. Income of minor children (Please attach Statement)\""
    },
    {
      "id": "otherIncomeStatement",
      "label": "Statement of other income",
      "category": "supporting-evidence",
      "required": false,
      "sourceRef": "Page 3 — \"4. Any other income (please attach statement)\""
    },
    {
      "id": "pensionContributionReceipts",
      "label": "Receipt(s) for pension or retirement annuity fund contributions",
      "category": "supporting-evidence",
      "required": false,
      "sourceRef": "Page 3 — \"Contributions to registered pension or retirement annuity fund (attach receipt(s) for the latter contribution(s))\""
    }
  ]
}
