{
  "$schema": "https://govschema.org/spec/v0.3/govschema.schema.json",
  "govschemaVersion": "0.3.0",
  "id": "sz/ers/return-of-income-individual",
  "version": "1.0.0",
  "title": "Eswatini — Return of Income - Individual (Form IT 12)",
  "description": "The Eswatini Revenue Service's (ERS) Form IT 12, \"Return of Income - Individual\" (Domestic Taxes Department, Version 2-2022) — opens Eswatini's Taxes vertical (2 of 6: National ID & Civic Documents). Filed under Section 33 of the Income Tax Order, 1975, every individual with income from any source must return that income to the Commissioner General within 120 days of the end of the tax year. This v1.0.0 schema is scoped to the core declaration a typical single/few-source-of-income employee or pensioner taxpayer completes: PART A (Taxpayer Particulars, including bank details for any refund), PART D (Income from Employment — a term the form's own guidelines define to include salary, wages, pension, superannuation allowance, retiring allowance, and similar payments, so this section doubles as the pension-income section), PART E (Benefits from Employment), PART F (Allowable Deductions), PART G (Net Income from Employment), PART N (Tax Computation) together with the \"Less Tax Already Paid\" block and the resulting Tax Due/Refund Due, and the Declaration/Signature. PART B and PART C (the Statement of Local and Foreign Assets and Liabilities, a net-worth disclosure unrelated to the taxable-income computation), PART H (Other Receipts and Accruals — directors' fees, deemed foreign income, royalties, income received on behalf of minor children), PART I through PART L (the multi-column Local Farming, Business, Trade and Professional Income schedule together with its Adjustments and Determination-of-Profit/Loss companions), PART M (Amounts Considered Non-Taxable), and PART O (Income Already Taxed/Non-Taxable Income — lump sums, dividends, interest, exempt and foreign-source income) are out of scope for this version and deferred to a future minor version, consistent with this registry's established main-form-now/companion-schedules-later precedent. PART N's own summary lines that reference PART H (line 99) and the aggregate of PART I-L (line 100) are still modeled as pass-through optional numeric fields, since a taxpayer with such income can record the schedule's own final total even though this schema does not yet walk through how that total is derived. GovSchema is an independent, non-profit standards body and is not affiliated with, endorsed by, or operated by the Kingdom of Eswatini or the Eswatini Revenue Service.",
  "status": "draft",
  "jurisdiction": {
    "country": "SZ",
    "level": "national"
  },
  "authority": {
    "name": "Eswatini Revenue Service",
    "abbreviation": "ERS",
    "url": "https://www.ers.org.sz"
  },
  "process": {
    "type": "filing",
    "language": "en"
  },
  "source": {
    "url": "https://www.ers.org.sz:8000/form-files/1713854893090-Individual_Income_Tax_Return_Editable_2022.pdf",
    "retrievedAt": "2026-07-25",
    "documentRef": "Form IT 12 — Return of Income - Individual, Domestic Taxes Department, Eswatini Revenue Service (Version 2-2022)"
  },
  "verification": {
    "method": "manual-source-review-v1",
    "lastVerifiedAt": "2026-07-25",
    "verifiedBy": "GovSchema Engineering (Standards Engineer)",
    "nextReviewBy": "2027-01-25",
    "notes": "GOV-4790 (\"GovSchema Standard Research\"). Opens Eswatini's Taxes vertical (2 of 6), following GOV-4783's own scouting of the Eswatini Revenue Service's forms library. The PDF was fetched live and unauthenticated from ers.org.sz:8000 (8,230,988 bytes, sha256 e4a72dec8907da44956ff527b61fef645efae3b45ad1fa55659fa35719c88b24), linked from the site's own \"IncomeForms\" page (a Next.js app whose form table only renders after JS hydration) with a working DOWNLOAD button and no login/CAPTCHA gate. The form is a genuine 11-page AcroForm PDF (446 raw field objects via pdfjs-dist's getFieldObjects()), but almost every field name is a meaningless auto-generated one (Text2, Text7.15, Group5, etc., no /TU tooltips) — this registry's now-familiar all-raw-field-names-meaningless pattern (cf. GOV-4727). Every field used in this schema was recovered by rendering each page with node-canvas (2.2x scale) and correlating each field's own rect/page to the printed label at that position, then inventing semantic field names; the PDF's own internal names are never used as this schema's field ids. See this document's own VERIFICATION.md for the full sourcing record, page-by-page field map, scoping rationale, and disclosed interpretation choices."
  },
  "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-25"
  },
  "license": "CC-BY-4.0",
  "steps": [
    {
      "id": "taxpayer_particulars",
      "title": "Part A - Taxpayer Particulars",
      "fields": [
        "tin",
        "taxYear",
        "surname",
        "givenNames",
        "gradedTaxNumber",
        "personalIdNumber",
        "residentialAddress",
        "postalAddress",
        "emailAddress",
        "contactWork",
        "contactCell",
        "contactHome",
        "contactFax",
        "bankName",
        "bankNameLine2",
        "bankBranch",
        "bankBranchCode",
        "accountHolderName",
        "accountHolderNameLine2",
        "accountType",
        "accountNumber",
        "detailsChangedSinceLastReturn"
      ],
      "next": "income_from_employment"
    },
    {
      "id": "income_from_employment",
      "title": "Part D - Income from Employment",
      "fields": [
        "employer1Name",
        "employer1Tin",
        "employer1GrossIncome",
        "employer1TaxDeducted",
        "employer2Name",
        "employer2Tin",
        "employer2GrossIncome",
        "employer2TaxDeducted",
        "employer3Name",
        "employer3Tin",
        "employer3GrossIncome",
        "employer3TaxDeducted",
        "employer4Name",
        "employer4Tin",
        "employer4GrossIncome",
        "employer4TaxDeducted",
        "employer5Name",
        "employer5Tin",
        "employer5GrossIncome",
        "employer5TaxDeducted",
        "employer6Name",
        "employer6Tin",
        "employer6GrossIncome",
        "employer6TaxDeducted",
        "employer7Name",
        "employer7Tin",
        "employer7GrossIncome",
        "employer7TaxDeducted",
        "totalEmploymentGrossIncome",
        "totalEmploymentTaxDeducted"
      ],
      "next": "benefits_from_employment"
    },
    {
      "id": "benefits_from_employment",
      "title": "Part E - Benefits from Employment",
      "fields": [
        "freeOrSubsidizedHousingBenefit",
        "privateUseOfMotorVehicleBenefit",
        "provisionOfUtilitiesBenefit",
        "educationalBenefit",
        "otherBenefits",
        "totalBenefits",
        "totalEmploymentIncomeIncludingBenefits"
      ],
      "next": "allowable_deductions"
    },
    {
      "id": "allowable_deductions",
      "title": "Part F - Allowable Deductions",
      "fields": [
        "pensionFundContributions",
        "snpfContributions",
        "retirementAnnuityFundContributions",
        "alimonyOrMaintenancePaid",
        "otherDeductions",
        "totalDeductions"
      ],
      "next": "net_income_from_employment"
    },
    {
      "id": "net_income_from_employment",
      "title": "Part G - Net Income from Employment",
      "fields": [
        "netEmploymentIncome"
      ],
      "next": "tax_computation"
    },
    {
      "id": "tax_computation",
      "title": "Part N - Tax Computation and Payments",
      "fields": [
        "netEmploymentIncomeForTaxComputation",
        "otherReceiptsAndAccruals",
        "businessIncomeAggregate",
        "taxableIncomeForYear",
        "taxOnFirstThreshold",
        "taxOnFirstAmount",
        "taxOnBalanceOfAmount",
        "taxOnBalanceRate",
        "taxOnBalanceAmount",
        "totalTaxAssessed",
        "primaryRebate",
        "secondaryRebate",
        "mortgageInterestCredit",
        "lifeInsuranceCredit",
        "totalTaxCredits",
        "taxPayable",
        "payePaid",
        "foreignTaxCredits",
        "provisionalTaxPaid",
        "taxWithheld",
        "totalTaxAlreadyPaid",
        "taxDueOrRefundDue"
      ],
      "next": "declaration"
    },
    {
      "id": "declaration",
      "title": "Declaration",
      "fields": [
        "signature",
        "declarationDate"
      ]
    }
  ],
  "fields": [
    {
      "name": "tin",
      "label": "TIN",
      "type": "string",
      "required": true,
      "classification": "sensitive-pii",
      "description": "The taxpayer's Taxpayer Identification Number.",
      "sourceRef": "Page 1, PART A - Taxpayer Particulars",
      "validation": { "minLength": 1, "maxLength": 20 }
    },
    {
      "name": "taxYear",
      "label": "Tax Year",
      "type": "string",
      "required": true,
      "description": "The year of assessment this return covers.",
      "sourceRef": "Page 1, PART A - Taxpayer Particulars",
      "validation": { "minLength": 1, "maxLength": 20 }
    },
    {
      "name": "surname",
      "label": "Surname",
      "type": "string",
      "required": true,
      "classification": "pii",
      "sourceRef": "Page 1, PART A - Taxpayer Particulars",
      "validation": { "minLength": 1, "maxLength": 150 }
    },
    {
      "name": "givenNames",
      "label": "Name",
      "type": "string",
      "required": true,
      "classification": "pii",
      "description": "The taxpayer's given name(s), printed as \"Name\" beneath \"Surname\" on the source form.",
      "sourceRef": "Page 1, PART A - Taxpayer Particulars",
      "validation": { "minLength": 1, "maxLength": 150 }
    },
    {
      "name": "gradedTaxNumber",
      "label": "Graded Tax Number",
      "type": "string",
      "required": false,
      "description": "The taxpayer's Graded Tax reference number, where applicable.",
      "sourceRef": "Page 1, PART A - Taxpayer Particulars",
      "validation": { "minLength": 1, "maxLength": 30 }
    },
    {
      "name": "personalIdNumber",
      "label": "Personal ID Number",
      "type": "string",
      "required": true,
      "classification": "sensitive-pii",
      "description": "The taxpayer's national identity document number.",
      "sourceRef": "Page 1, PART A - Taxpayer Particulars",
      "validation": { "minLength": 1, "maxLength": 30 }
    },
    {
      "name": "residentialAddress",
      "label": "Residential Address",
      "type": "string",
      "required": true,
      "classification": "pii",
      "sourceRef": "Page 1, PART A - Taxpayer Particulars",
      "validation": { "minLength": 1, "maxLength": 400 }
    },
    {
      "name": "postalAddress",
      "label": "Postal Address",
      "type": "string",
      "required": false,
      "classification": "pii",
      "sourceRef": "Page 1, PART A - Taxpayer Particulars",
      "validation": { "minLength": 1, "maxLength": 400 }
    },
    {
      "name": "emailAddress",
      "label": "Email Address",
      "type": "string",
      "required": false,
      "classification": "pii",
      "sourceRef": "Page 1, PART A - Taxpayer Particulars",
      "validation": { "pattern": "^[^@\\s]+@[^@\\s]+\\.[^@\\s]+$", "maxLength": 200 }
    },
    {
      "name": "contactWork",
      "label": "Contacts: Work",
      "type": "string",
      "required": false,
      "classification": "pii",
      "sourceRef": "Page 1, PART A - Taxpayer Particulars, \"Contacts\"",
      "validation": { "minLength": 1, "maxLength": 60 }
    },
    {
      "name": "contactCell",
      "label": "Cell",
      "type": "string",
      "required": false,
      "classification": "pii",
      "sourceRef": "Page 1, PART A - Taxpayer Particulars, \"Contacts\"",
      "validation": { "minLength": 1, "maxLength": 60 }
    },
    {
      "name": "contactHome",
      "label": "Contacts: Home",
      "type": "string",
      "required": false,
      "classification": "pii",
      "sourceRef": "Page 1, PART A - Taxpayer Particulars, \"Contacts\"",
      "validation": { "minLength": 1, "maxLength": 60 }
    },
    {
      "name": "contactFax",
      "label": "Fax",
      "type": "string",
      "required": false,
      "classification": "pii",
      "sourceRef": "Page 1, PART A - Taxpayer Particulars, \"Contacts\"",
      "validation": { "minLength": 1, "maxLength": 60 }
    },
    {
      "name": "bankName",
      "label": "Bank Details: Name of Bank",
      "type": "string",
      "required": false,
      "description": "For receipt of any refund due. The source prints two blank lines under \"Name of Bank\"; this is the first.",
      "sourceRef": "Page 1, Bank Details",
      "validation": { "minLength": 1, "maxLength": 200 }
    },
    {
      "name": "bankNameLine2",
      "label": "Bank Details: Name of Bank (continued)",
      "type": "string",
      "required": false,
      "description": "The second of two blank lines the source prints under \"Name of Bank\".",
      "sourceRef": "Page 1, Bank Details",
      "validation": { "minLength": 1, "maxLength": 200 }
    },
    {
      "name": "bankBranch",
      "label": "Bank Details: Branch",
      "type": "string",
      "required": false,
      "sourceRef": "Page 1, Bank Details",
      "validation": { "minLength": 1, "maxLength": 200 }
    },
    {
      "name": "bankBranchCode",
      "label": "Bank Details: Branch Code",
      "type": "string",
      "required": false,
      "sourceRef": "Page 1, Bank Details",
      "validation": { "minLength": 1, "maxLength": 30 }
    },
    {
      "name": "accountHolderName",
      "label": "Bank Details: Account Holder",
      "type": "string",
      "required": false,
      "classification": "pii",
      "description": "The source prints two blank lines under \"Account Holder\"; this is the first.",
      "sourceRef": "Page 1, Bank Details",
      "validation": { "minLength": 1, "maxLength": 200 }
    },
    {
      "name": "accountHolderNameLine2",
      "label": "Bank Details: Account Holder (continued)",
      "type": "string",
      "required": false,
      "classification": "pii",
      "description": "The second of two blank lines the source prints under \"Account Holder\".",
      "sourceRef": "Page 1, Bank Details",
      "validation": { "minLength": 1, "maxLength": 200 }
    },
    {
      "name": "accountType",
      "label": "Bank Details: Account Type",
      "type": "string",
      "required": false,
      "sourceRef": "Page 1, Bank Details",
      "validation": { "minLength": 1, "maxLength": 60 }
    },
    {
      "name": "accountNumber",
      "label": "Bank Details: Account Number",
      "type": "string",
      "required": false,
      "classification": "sensitive-pii",
      "sourceRef": "Page 1, Bank Details",
      "validation": { "minLength": 1, "maxLength": 40 }
    },
    {
      "name": "detailsChangedSinceLastReturn",
      "label": "Have the above mentioned changed since your last return?",
      "type": "boolean",
      "required": false,
      "description": "True if any of the Taxpayer Particulars or Bank Details above have changed since the taxpayer's last return. The source PDF's own radio-button export values are the generic \"Choice1\"/\"Choice2\" rather than semantic Yes/No strings; boolean true is mapped to the YES option (printed first/left of the two), per this schema's own visual-position reading of the source.",
      "sourceRef": "Page 1, \"Have the above mentioned changed since your last return?\""
    },
    {
      "name": "employer1Name",
      "label": "Name of Employer (row 1)",
      "type": "string",
      "required": false,
      "description": "Row 1 of up to 7 printed rows (lines 24-30) in the Income from Employment table. The source form's own guidelines define \"employment income\" broadly to include salary, wages, overtime, leave pay, bonus, gratuity, commission, fee, emolument, pension, superannuation allowance, honorarium, retiring allowance, and stipend — so this table also captures pension income, which this form does not break out into a separate part. Refer to Form PAYE 05/IRP5 for supporting detail.",
      "sourceRef": "Page 2, PART D - Income from Employment, line 24",
      "validation": { "minLength": 1, "maxLength": 300 }
    },
    {
      "name": "employer1Tin",
      "label": "Employer's TIN Number (row 1)",
      "type": "string",
      "required": false,
      "sourceRef": "Page 2, PART D - Income from Employment, line 24",
      "validation": { "minLength": 1, "maxLength": 20 }
    },
    {
      "name": "employer1GrossIncome",
      "label": "Gross Amount (row 1)",
      "type": "number",
      "required": false,
      "description": "Emalangeni only, no cents.",
      "sourceRef": "Page 2, PART D - Income from Employment, line 24",
      "validation": { "minimum": 0 }
    },
    {
      "name": "employer1TaxDeducted",
      "label": "Tax Deducted (row 1)",
      "type": "number",
      "required": false,
      "description": "Emalangeni only, no cents.",
      "sourceRef": "Page 2, PART D - Income from Employment, line 24",
      "validation": { "minimum": 0 }
    },
    {
      "name": "employer2Name",
      "label": "Name of Employer (row 2)",
      "type": "string",
      "required": false,
      "sourceRef": "Page 2, PART D - Income from Employment, line 25",
      "validation": { "minLength": 1, "maxLength": 300 }
    },
    {
      "name": "employer2Tin",
      "label": "Employer's TIN Number (row 2)",
      "type": "string",
      "required": false,
      "sourceRef": "Page 2, PART D - Income from Employment, line 25",
      "validation": { "minLength": 1, "maxLength": 20 }
    },
    {
      "name": "employer2GrossIncome",
      "label": "Gross Amount (row 2)",
      "type": "number",
      "required": false,
      "sourceRef": "Page 2, PART D - Income from Employment, line 25",
      "validation": { "minimum": 0 }
    },
    {
      "name": "employer2TaxDeducted",
      "label": "Tax Deducted (row 2)",
      "type": "number",
      "required": false,
      "sourceRef": "Page 2, PART D - Income from Employment, line 25",
      "validation": { "minimum": 0 }
    },
    {
      "name": "employer3Name",
      "label": "Name of Employer (row 3)",
      "type": "string",
      "required": false,
      "sourceRef": "Page 2, PART D - Income from Employment, line 26",
      "validation": { "minLength": 1, "maxLength": 300 }
    },
    {
      "name": "employer3Tin",
      "label": "Employer's TIN Number (row 3)",
      "type": "string",
      "required": false,
      "sourceRef": "Page 2, PART D - Income from Employment, line 26",
      "validation": { "minLength": 1, "maxLength": 20 }
    },
    {
      "name": "employer3GrossIncome",
      "label": "Gross Amount (row 3)",
      "type": "number",
      "required": false,
      "sourceRef": "Page 2, PART D - Income from Employment, line 26",
      "validation": { "minimum": 0 }
    },
    {
      "name": "employer3TaxDeducted",
      "label": "Tax Deducted (row 3)",
      "type": "number",
      "required": false,
      "sourceRef": "Page 2, PART D - Income from Employment, line 26",
      "validation": { "minimum": 0 }
    },
    {
      "name": "employer4Name",
      "label": "Name of Employer (row 4)",
      "type": "string",
      "required": false,
      "sourceRef": "Page 2, PART D - Income from Employment, line 27",
      "validation": { "minLength": 1, "maxLength": 300 }
    },
    {
      "name": "employer4Tin",
      "label": "Employer's TIN Number (row 4)",
      "type": "string",
      "required": false,
      "sourceRef": "Page 2, PART D - Income from Employment, line 27",
      "validation": { "minLength": 1, "maxLength": 20 }
    },
    {
      "name": "employer4GrossIncome",
      "label": "Gross Amount (row 4)",
      "type": "number",
      "required": false,
      "sourceRef": "Page 2, PART D - Income from Employment, line 27",
      "validation": { "minimum": 0 }
    },
    {
      "name": "employer4TaxDeducted",
      "label": "Tax Deducted (row 4)",
      "type": "number",
      "required": false,
      "sourceRef": "Page 2, PART D - Income from Employment, line 27",
      "validation": { "minimum": 0 }
    },
    {
      "name": "employer5Name",
      "label": "Name of Employer (row 5)",
      "type": "string",
      "required": false,
      "sourceRef": "Page 2, PART D - Income from Employment, line 28",
      "validation": { "minLength": 1, "maxLength": 300 }
    },
    {
      "name": "employer5Tin",
      "label": "Employer's TIN Number (row 5)",
      "type": "string",
      "required": false,
      "sourceRef": "Page 2, PART D - Income from Employment, line 28",
      "validation": { "minLength": 1, "maxLength": 20 }
    },
    {
      "name": "employer5GrossIncome",
      "label": "Gross Amount (row 5)",
      "type": "number",
      "required": false,
      "sourceRef": "Page 2, PART D - Income from Employment, line 28",
      "validation": { "minimum": 0 }
    },
    {
      "name": "employer5TaxDeducted",
      "label": "Tax Deducted (row 5)",
      "type": "number",
      "required": false,
      "sourceRef": "Page 2, PART D - Income from Employment, line 28",
      "validation": { "minimum": 0 }
    },
    {
      "name": "employer6Name",
      "label": "Name of Employer (row 6)",
      "type": "string",
      "required": false,
      "sourceRef": "Page 2, PART D - Income from Employment, line 29",
      "validation": { "minLength": 1, "maxLength": 300 }
    },
    {
      "name": "employer6Tin",
      "label": "Employer's TIN Number (row 6)",
      "type": "string",
      "required": false,
      "sourceRef": "Page 2, PART D - Income from Employment, line 29",
      "validation": { "minLength": 1, "maxLength": 20 }
    },
    {
      "name": "employer6GrossIncome",
      "label": "Gross Amount (row 6)",
      "type": "number",
      "required": false,
      "sourceRef": "Page 2, PART D - Income from Employment, line 29",
      "validation": { "minimum": 0 }
    },
    {
      "name": "employer6TaxDeducted",
      "label": "Tax Deducted (row 6)",
      "type": "number",
      "required": false,
      "sourceRef": "Page 2, PART D - Income from Employment, line 29",
      "validation": { "minimum": 0 }
    },
    {
      "name": "employer7Name",
      "label": "Name of Employer (row 7)",
      "type": "string",
      "required": false,
      "sourceRef": "Page 2, PART D - Income from Employment, line 30",
      "validation": { "minLength": 1, "maxLength": 300 }
    },
    {
      "name": "employer7Tin",
      "label": "Employer's TIN Number (row 7)",
      "type": "string",
      "required": false,
      "sourceRef": "Page 2, PART D - Income from Employment, line 30",
      "validation": { "minLength": 1, "maxLength": 20 }
    },
    {
      "name": "employer7GrossIncome",
      "label": "Gross Amount (row 7)",
      "type": "number",
      "required": false,
      "sourceRef": "Page 2, PART D - Income from Employment, line 30",
      "validation": { "minimum": 0 }
    },
    {
      "name": "employer7TaxDeducted",
      "label": "Tax Deducted (row 7)",
      "type": "number",
      "required": false,
      "sourceRef": "Page 2, PART D - Income from Employment, line 30",
      "validation": { "minimum": 0 }
    },
    {
      "name": "totalEmploymentGrossIncome",
      "label": "31. Total Employment Income/PAYE — Gross Amount (Sum of lines 24 to 30)",
      "type": "number",
      "required": false,
      "sourceRef": "Page 2, PART D - Income from Employment, line 31",
      "validation": { "minimum": 0 }
    },
    {
      "name": "totalEmploymentTaxDeducted",
      "label": "31. Total Employment Income/PAYE — Tax Deducted (Sum of lines 24 to 30)",
      "type": "number",
      "required": false,
      "sourceRef": "Page 2, PART D - Income from Employment, line 31",
      "validation": { "minimum": 0 }
    },
    {
      "name": "freeOrSubsidizedHousingBenefit",
      "label": "32. Free or subsidized housing",
      "type": "number",
      "required": false,
      "sourceRef": "Page 3, PART E - Benefits from Employment, line 32",
      "validation": { "minimum": 0 }
    },
    {
      "name": "privateUseOfMotorVehicleBenefit",
      "label": "33. Private use of motor vehicle / motor vehicle allowance",
      "type": "number",
      "required": false,
      "sourceRef": "Page 3, PART E - Benefits from Employment, line 33",
      "validation": { "minimum": 0 }
    },
    {
      "name": "provisionOfUtilitiesBenefit",
      "label": "34. Provision of utilities",
      "type": "number",
      "required": false,
      "sourceRef": "Page 3, PART E - Benefits from Employment, line 34",
      "validation": { "minimum": 0 }
    },
    {
      "name": "educationalBenefit",
      "label": "35. Educational benefit",
      "type": "number",
      "required": false,
      "sourceRef": "Page 3, PART E - Benefits from Employment, line 35",
      "validation": { "minimum": 0 }
    },
    {
      "name": "otherBenefits",
      "label": "36. Other (attach schedule)",
      "type": "number",
      "required": false,
      "sourceRef": "Page 3, PART E - Benefits from Employment, line 36",
      "validation": { "minimum": 0 }
    },
    {
      "name": "totalBenefits",
      "label": "37. Total Benefits (Sum of lines 32 to 36)",
      "type": "number",
      "required": false,
      "sourceRef": "Page 3, PART E - Benefits from Employment, line 37",
      "validation": { "minimum": 0 }
    },
    {
      "name": "totalEmploymentIncomeIncludingBenefits",
      "label": "38. Total Employment Income Including Benefits (Line 31 + 37)",
      "type": "number",
      "required": false,
      "sourceRef": "Page 3, PART E - Benefits from Employment, line 38",
      "validation": { "minimum": 0 }
    },
    {
      "name": "pensionFundContributions",
      "label": "39. Pension Fund Contributions",
      "type": "number",
      "required": false,
      "description": "For employees, an amount not exceeding 10% of the pensionable salary (15% for Members of Parliament and Designated Office Bearers), per the source form's own guidelines.",
      "sourceRef": "Page 3, PART F - Allowable Deductions, line 39",
      "validation": { "minimum": 0 }
    },
    {
      "name": "snpfContributions",
      "label": "40. S.N.P.F.",
      "type": "number",
      "required": false,
      "description": "Eswatini National Provident Fund contributions; only statutory contributions as prescribed by the Fund are allowed, per the source form's own guidelines.",
      "sourceRef": "Page 3, PART F - Allowable Deductions, line 40",
      "validation": { "minimum": 0 }
    },
    {
      "name": "retirementAnnuityFundContributions",
      "label": "41. Retirement Annuity Fund Contributions",
      "type": "number",
      "required": false,
      "description": "Total allowable contribution shall not exceed 15% of taxable income, reduced by any pension fund contributions, per the source form's own guidelines.",
      "sourceRef": "Page 3, PART F - Allowable Deductions, line 41",
      "validation": { "minimum": 0 }
    },
    {
      "name": "alimonyOrMaintenancePaid",
      "label": "42. Alimony or maintenance (attach a certified copy of Court Order)",
      "type": "number",
      "required": false,
      "sourceRef": "Page 3, PART F - Allowable Deductions, line 42",
      "validation": { "minimum": 0 }
    },
    {
      "name": "otherDeductions",
      "label": "43. Other (Furnish particulars)",
      "type": "number",
      "required": false,
      "sourceRef": "Page 3, PART F - Allowable Deductions, line 43",
      "validation": { "minimum": 0 }
    },
    {
      "name": "totalDeductions",
      "label": "44. Total Deductions (Sum of lines 39 to 43)",
      "type": "number",
      "required": false,
      "sourceRef": "Page 3, PART F - Allowable Deductions, line 44",
      "validation": { "minimum": 0 }
    },
    {
      "name": "netEmploymentIncome",
      "label": "45. Net Employment Income (Line 38 - 44)",
      "type": "number",
      "required": false,
      "sourceRef": "Page 3, PART G - Net Income from Employment, line 45",
      "validation": {}
    },
    {
      "name": "netEmploymentIncomeForTaxComputation",
      "label": "98. Net employment income (Line 45)",
      "type": "number",
      "required": false,
      "description": "Copied forward from Part G, line 45, into the Tax Computation.",
      "sourceRef": "Page 5, PART N - Tax Computation, line 98",
      "validation": {}
    },
    {
      "name": "otherReceiptsAndAccruals",
      "label": "99. Other Receipts and Accruals (Line 51)",
      "type": "number",
      "required": false,
      "description": "Corresponds to Part H (Other Receipts and Accruals — directors' fees, deemed foreign income, royalties, income received on behalf of minor children), which is out of scope for this v1.0.0 schema and deferred to a future minor version. Enter 0 or leave blank if the taxpayer has no such income.",
      "sourceRef": "Page 5, PART N - Tax Computation, line 99",
      "validation": { "minimum": 0 }
    },
    {
      "name": "businessIncomeAggregate",
      "label": "100. Business Income (Line 92) (Aggregate of business activities with taxable profits; business activities which incurred losses should be excluded)",
      "type": "number",
      "required": false,
      "description": "Corresponds to Part I through Part L (Local Farming, Business, Trade and Professional Income and its Adjustments/Determination-of-Profit-or-Loss companions), which is out of scope for this v1.0.0 schema and deferred to a future minor version. Enter 0 or leave blank if the taxpayer has no such income.",
      "sourceRef": "Page 5, PART N - Tax Computation, line 100",
      "validation": { "minimum": 0 }
    },
    {
      "name": "taxableIncomeForYear",
      "label": "101. Taxable Income for the Year (Sum of Lines 98 to 100)",
      "type": "number",
      "required": false,
      "sourceRef": "Page 5, PART N - Tax Computation, line 101",
      "validation": { "minimum": 0 }
    },
    {
      "name": "taxOnFirstThreshold",
      "label": "102. Tax on the first ___",
      "type": "number",
      "required": false,
      "description": "The upper bound (in Emalangeni) of the lowest tax bracket applied in this computation; printed on the source form with a default of \"0\", consistent with the current Rates of Normal Tax table, whose first bracket (E0 - E100,000) is taxed at a flat 20% with no fixed base amount.",
      "sourceRef": "Page 5, PART N - Tax Computation, line 102",
      "validation": { "minimum": 0 }
    },
    {
      "name": "taxOnFirstAmount",
      "label": "102. Tax on the first ___ — Amount",
      "type": "number",
      "required": false,
      "sourceRef": "Page 5, PART N - Tax Computation, line 102",
      "validation": { "minimum": 0 }
    },
    {
      "name": "taxOnBalanceOfAmount",
      "label": "103. Tax on the balance of ___",
      "type": "number",
      "required": false,
      "description": "The portion of taxable income above taxOnFirstThreshold, taxed at the applicable marginal rate from the Rates of Normal Tax table.",
      "sourceRef": "Page 5, PART N - Tax Computation, line 103",
      "validation": { "minimum": 0 }
    },
    {
      "name": "taxOnBalanceRate",
      "label": "103. Tax on the balance of ___ at ___%",
      "type": "number",
      "required": false,
      "description": "The marginal tax rate (percent) applied to taxOnBalanceOfAmount; printed on the source form with a default of 20, the rate applicable to the current first bracket (E0 - E100,000).",
      "sourceRef": "Page 5, PART N - Tax Computation, line 103",
      "validation": { "minimum": 0, "maximum": 100 }
    },
    {
      "name": "taxOnBalanceAmount",
      "label": "103. Tax on the balance of ___ at ___% — Amount",
      "type": "number",
      "required": false,
      "sourceRef": "Page 5, PART N - Tax Computation, line 103",
      "validation": { "minimum": 0 }
    },
    {
      "name": "totalTaxAssessed",
      "label": "104. Total Tax Assessed (Line 102 + 103)",
      "type": "number",
      "required": false,
      "sourceRef": "Page 5, PART N - Tax Computation, line 104",
      "validation": { "minimum": 0 }
    },
    {
      "name": "primaryRebate",
      "label": "104A. Less Tax Credit: Primary Rebate (E683.33 per month and E8,200.00 per year)",
      "type": "number",
      "required": false,
      "description": "Applicable to all natural persons, per the source form's own \"Rebates\" guidance (rebate 1). The source PDF's own field carries a default value of 8,200.00.",
      "sourceRef": "Page 5, PART N - Tax Computation, line 104A",
      "validation": { "minimum": 0 }
    },
    {
      "name": "secondaryRebate",
      "label": "104A. Less Tax Credit: Secondary Rebate (E225.00 per month and E2,700.00 per year)",
      "type": "number",
      "required": false,
      "description": "Applicable only to persons aged 60 years and above, per the source form's own \"Rebates\" guidance (rebate 2).",
      "sourceRef": "Page 5, PART N - Tax Computation, line 104A",
      "validation": { "minimum": 0 }
    },
    {
      "name": "mortgageInterestCredit",
      "label": "104A. Less Tax Credit: Mortgage Interest (10% of interest paid, limited to E2,400.00)",
      "type": "number",
      "required": false,
      "description": "Claimable only for the principal private residence of the taxpayer, per the source form's own \"Rebates\" guidance (rebate 3). Requires an attached bank statement and proof of residence.",
      "sourceRef": "Page 5, PART N - Tax Computation, line 104A",
      "validation": { "minimum": 0, "maximum": 2400 }
    },
    {
      "name": "lifeInsuranceCredit",
      "label": "104A. Less Tax Credit: Life Accident Insurance Premiums / Approved Provident Fund / Unemployment Insurance (limited to E360.00)",
      "type": "number",
      "required": false,
      "description": "10% of Life Accident Insurance Premiums paid, 10% of Approved Provident Fund (excluding S.N.P.F.) or Benefit Fund contributions, and 10% of unemployment insurance, combined and limited to E360.00.",
      "sourceRef": "Page 5, PART N - Tax Computation, line 104A",
      "validation": { "minimum": 0, "maximum": 360 }
    },
    {
      "name": "totalTaxCredits",
      "label": "105. Total Tax Credits (Sum of Line 104A)",
      "type": "number",
      "required": false,
      "sourceRef": "Page 5, PART N - Tax Computation, line 105",
      "validation": { "minimum": 0 }
    },
    {
      "name": "taxPayable",
      "label": "106. Tax Payable (Line 104 - 105)",
      "type": "number",
      "required": false,
      "sourceRef": "Page 5, PART N - Tax Computation, line 106",
      "validation": { "minimum": 0 }
    },
    {
      "name": "payePaid",
      "label": "107. P.A.Y.E (Line 31)",
      "type": "number",
      "required": false,
      "description": "Copied forward from Part D, line 31 (totalEmploymentTaxDeducted).",
      "sourceRef": "Page 6, Less Tax Already Paid, line 107",
      "validation": { "minimum": 0 }
    },
    {
      "name": "foreignTaxCredits",
      "label": "108. Foreign Tax Credits (certificate & attach proof of payment)",
      "type": "number",
      "required": false,
      "sourceRef": "Page 6, Less Tax Already Paid, line 108",
      "validation": { "minimum": 0 }
    },
    {
      "name": "provisionalTaxPaid",
      "label": "109. Provisional Tax Paid",
      "type": "number",
      "required": false,
      "sourceRef": "Page 6, Less Tax Already Paid, line 109",
      "validation": { "minimum": 0 }
    },
    {
      "name": "taxWithheld",
      "label": "110. Tax Withheld (i.e. on rental income/construction contracts. Attach certificate)",
      "type": "number",
      "required": false,
      "sourceRef": "Page 6, Less Tax Already Paid, line 110",
      "validation": { "minimum": 0 }
    },
    {
      "name": "totalTaxAlreadyPaid",
      "label": "111. Total tax already paid (Sum of lines 107 to 110)",
      "type": "number",
      "required": false,
      "sourceRef": "Page 6, Less Tax Already Paid, line 111",
      "validation": { "minimum": 0 }
    },
    {
      "name": "taxDueOrRefundDue",
      "label": "112. Tax Due/Refund Due (Line 106 - 111)",
      "type": "number",
      "required": false,
      "description": "Positive when tax is due; negative when a refund is due to the taxpayer.",
      "sourceRef": "Page 6, Less Tax Already Paid, line 112",
      "validation": {}
    },
    {
      "name": "signature",
      "label": "Signature",
      "type": "string",
      "required": true,
      "classification": "pii",
      "description": "The taxpayer's own signature, attesting to the Declaration that the information furnished in this return is true and correct, that all income has been disclosed in full, and that supporting receipts and records are retained and available for inspection.",
      "sourceRef": "Page 6, Declaration"
    },
    {
      "name": "declarationDate",
      "label": "Date",
      "type": "date",
      "required": true,
      "sourceRef": "Page 6, Declaration",
      "validation": {}
    }
  ],
  "documents": [
    {
      "id": "employerTaxCertificates",
      "label": "Tax certificate(s) issued by employer(s) (Form PAYE 05/IRP5)",
      "category": "supporting-evidence",
      "required": false,
      "belongsTo": "applicant",
      "sourceRef": "Page 2, PART D - Income from Employment — \"(Please refer to form PAYE 05 / IRP5)\""
    },
    {
      "id": "otherBenefitsSchedule",
      "label": "Schedule of other employment benefits",
      "category": "supporting-evidence",
      "required": false,
      "requiredWhen": { "field": "otherBenefits", "greaterThan": 0 },
      "belongsTo": "applicant",
      "sourceRef": "Page 3, PART E - Benefits from Employment, line 36 — \"Other (attach schedule)\""
    },
    {
      "id": "courtOrderForAlimony",
      "label": "Certified copy of Court Order for alimony or maintenance",
      "category": "supporting-evidence",
      "required": false,
      "requiredWhen": { "field": "alimonyOrMaintenancePaid", "greaterThan": 0 },
      "belongsTo": "applicant",
      "sourceRef": "Page 3, PART F - Allowable Deductions, line 42 — \"Alimony or maintenance (attach a certified copy of Court Order)\""
    },
    {
      "id": "mortgageInterestSupport",
      "label": "Bank statement and proof of residence supporting the mortgage interest credit",
      "category": "supporting-evidence",
      "required": false,
      "requiredWhen": { "field": "mortgageInterestCredit", "greaterThan": 0 },
      "belongsTo": "applicant",
      "sourceRef": "Page 5, PART N - Tax Computation, line 104A — \"Mortgage Interest ... (attach bank statement and proof of residence)\""
    },
    {
      "id": "foreignTaxCreditCertificate",
      "label": "Certificate and proof of payment of foreign tax",
      "category": "supporting-evidence",
      "required": false,
      "requiredWhen": { "field": "foreignTaxCredits", "greaterThan": 0 },
      "belongsTo": "applicant",
      "sourceRef": "Page 6, Less Tax Already Paid, line 108 — \"Foreign Tax Credits (certificate & attach proof of payment)\""
    },
    {
      "id": "taxWithheldCertificate",
      "label": "Certificate of tax withheld",
      "category": "supporting-evidence",
      "required": false,
      "requiredWhen": { "field": "taxWithheld", "greaterThan": 0 },
      "belongsTo": "applicant",
      "sourceRef": "Page 6, Less Tax Already Paid, line 110 — \"Tax Withheld (i.e. on rental income/construction contracts. Attach certificate)\""
    }
  ],
  "crossFieldValidation": [
    {
      "id": "taxComputationNetEmploymentIncomeMatchesPartG",
      "compare": {
        "field": "netEmploymentIncomeForTaxComputation",
        "operator": "equals",
        "compareTo": "netEmploymentIncome"
      }
    },
    {
      "id": "payePaidMatchesPartDTaxDeducted",
      "compare": {
        "field": "payePaid",
        "operator": "equals",
        "compareTo": "totalEmploymentTaxDeducted"
      }
    }
  ]
}
