{
  "$schema": "https://govschema.org/spec/v0.3/govschema.schema.json",
  "govschemaVersion": "0.3.0",
  "id": "ls/rsl/individual-income-tax-return",
  "version": "1.0.0",
  "title": "Lesotho — Individual Income Tax Return (Form S128-I)",
  "description": "Revenue Services Lesotho's (RSL) Form S128-I, \"Individual Income Tax Return, Year Ended 31 March 2023\" — opens Lesotho's Taxes vertical (2 of 6: Business Formation). Resident and non-resident individual taxpayers use this annual return to reconcile chargeable income (employment, pension, business, commercial farming, property, and other income), compute tax before and after credits, and report payments already made (PAYE, withholding tax, advance installments) against tax due or overpaid for the year. This v1.0.0 schema is scoped to the core declaration a typical employee/pensioner taxpayer completes: identification (Your Details), Part A (Employment Income & Expenses), Part B (Pension Income), Part H (Tax Computation, Payments, and the resulting Tax Due/Overpaid), and the Declaration of Paid Preparer / Declaration of Taxpayer or Representative sections. Parts C-G (the detailed Business Income, Commercial Farming Income, Property Income, Other Income, and Credit for Foreign Tax Paid schedules) 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. GovSchema is an independent, non-profit standards body and is not affiliated with, endorsed by, or operated by the Government of Lesotho or Revenue Services Lesotho.",
  "status": "draft",
  "jurisdiction": {
    "country": "LS",
    "level": "national"
  },
  "authority": {
    "name": "Revenue Services Lesotho",
    "abbreviation": "RSL",
    "url": "https://www.rsl.org.ls"
  },
  "process": {
    "type": "filing",
    "language": "en"
  },
  "source": {
    "url": "https://www.rsl.org.ls/sites/default/files/2024-07/Individual%20Income%20Tax%20Return%202023%20%281%29.pdf",
    "retrievedAt": "2026-07-24",
    "documentRef": "FORM S128-I — Individual Income Tax Return, Year Ended 31 March 2023"
  },
  "verification": {
    "method": "manual-source-review-v1",
    "lastVerifiedAt": "2026-07-24",
    "verifiedBy": "GovSchema Engineering (Standards Engineer)",
    "nextReviewBy": "2027-01-24",
    "notes": "GOV-4755 (\"GovSchema Standard Research\"). Opens Lesotho's Taxes vertical (2 of 6). The PDF was fetched live and unauthenticated from rsl.org.ls (373,694 bytes), linked from the site's own \"Forms & Instructions\" page under Income Tax Forms. The form is a flat (non-fillable/non-XFA) 8-page PDF with no AcroForm annotations; all fields were reconstructed from the rendered page images (node-canvas at 2.5x scale), not the raw text layer alone — the text layer for page 1 was found to contain extraneous/duplicated line items (e.g. a spurious 'd. Other unreimbursed work expenses' line, and a genuinely missing 'e. Home office expenses' line) not present in the visual, printed form; every field in this schema was cross-checked against the rendered image. See this document's own VERIFICATION.md for the full sourcing record."
  },
  "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-24"
  },
  "license": "CC-BY-4.0",
  "steps": [
    {
      "id": "your_details",
      "title": "Your Details",
      "fields": [
        "residencyStatus",
        "partYearResidentDays",
        "fullName",
        "tin",
        "phone",
        "email"
      ],
      "next": "employment_income"
    },
    {
      "id": "employment_income",
      "title": "Part A - Employment Income & Expenses",
      "fields": [
        "employer1Name",
        "employer1Tin",
        "employer1EmployedFrom",
        "employer1EmployedUntil",
        "employer1GrossIncome",
        "employer2Name",
        "employer2Tin",
        "employer2EmployedFrom",
        "employer2EmployedUntil",
        "employer2GrossIncome",
        "employer3Name",
        "employer3Tin",
        "employer3EmployedFrom",
        "employer3EmployedUntil",
        "employer3GrossIncome",
        "unemploymentPeriod1From",
        "unemploymentPeriod1Until",
        "unemploymentPeriod2From",
        "unemploymentPeriod2Until",
        "unemploymentPeriod3From",
        "unemploymentPeriod3Until",
        "totalGrossEmploymentIncome",
        "employmentExpenseTravel",
        "employmentExpenseEducation",
        "employmentExpenseTechnicalBooks",
        "employmentExpenseMotorVehicle",
        "employmentExpenseHomeOffice",
        "employmentExpenseSuperannuation",
        "employmentExpenseDonations",
        "totalEmploymentExpensesAndDonations",
        "chargeableEmploymentIncome"
      ],
      "next": "pension_income"
    },
    {
      "id": "pension_income",
      "title": "Part B - Pension Income",
      "fields": [
        "pensionPayer1Name",
        "pensionPayer1Tin",
        "pensionPayer1StartDate",
        "pensionPayer1EndDate",
        "pensionPayer1GrossIncome",
        "pensionPayer2Name",
        "pensionPayer2Tin",
        "pensionPayer2StartDate",
        "pensionPayer2EndDate",
        "pensionPayer2GrossIncome",
        "totalGrossPensionIncome",
        "pensionDonations",
        "chargeablePensionIncome"
      ],
      "next": "tax_computation"
    },
    {
      "id": "tax_computation",
      "title": "Part H - Tax Computation",
      "fields": [
        "taxComputationChargeableEmploymentIncome",
        "taxComputationChargeablePensionIncome",
        "taxComputationChargeableBusinessIncome",
        "taxComputationChargeableFarmingIncome",
        "taxComputationChargeablePropertyIncome",
        "taxComputationChargeableOtherIncome",
        "totalChargeableIncome",
        "taxBracket10PercentChargeableIncome",
        "taxBracket10PercentTax",
        "taxBracket20PercentChargeableIncome",
        "taxBracket20PercentTax",
        "taxBracket30PercentChargeableIncome",
        "taxBracket30PercentTax",
        "taxBracket4PercentChargeableIncome",
        "taxBracket4PercentTax",
        "totalTaxBeforeCredits",
        "personalTaxCredit",
        "creditForForeignTaxPaid",
        "totalNonRefundableCredits",
        "totalTaxAfterCredits",
        "payeDeducted",
        "incomeTaxWhtPaid",
        "advanceInstallmentsPaid",
        "totalPayments",
        "taxDue",
        "taxOverpaid",
        "claimingRepaymentOfOverpaidTax"
      ],
      "next": "declarations"
    },
    {
      "id": "declarations",
      "title": "Declarations",
      "fields": [
        "paidPreparerName",
        "paidPreparerDate",
        "paidPreparerTin",
        "paidPreparerFirmName",
        "paidPreparerFirmTin",
        "paidPreparerFirmAddress",
        "paidPreparerPhone",
        "paidPreparerEmail",
        "declarationDate",
        "representativeFullName",
        "representativePhone"
      ]
    }
  ],
  "fields": [
    {
      "name": "residencyStatus",
      "label": "Tick applicable box ► Resident / Non-resident / Part-year resident",
      "type": "enum",
      "required": true,
      "description": "The taxpayer's residency status for the tax year. \"Part-year resident\" requires entering the number of days the taxpayer was a resident.",
      "sourceRef": "Page 1, YOUR DETAILS, “Tick applicable box”",
      "validation": {
        "enum": [
          "resident",
          "non-resident",
          "part-year-resident"
        ]
      }
    },
    {
      "name": "partYearResidentDays",
      "label": "number of days you were a resident",
      "type": "integer",
      "required": false,
      "requiredWhen": {
        "field": "residencyStatus",
        "equals": "part-year-resident"
      },
      "description": "Number of days during the tax year the taxpayer was resident in Lesotho. Only entered when Part-year resident is ticked.",
      "sourceRef": "Page 1, YOUR DETAILS, “Part-year resident – enter number of days you were a resident►”",
      "validation": {
        "minimum": 0,
        "maximum": 366
      }
    },
    {
      "name": "fullName",
      "label": "Your surname, forenames, and maiden name",
      "type": "string",
      "required": true,
      "classification": "pii",
      "sourceRef": "Page 1, YOUR DETAILS",
      "validation": {
        "minLength": 1,
        "maxLength": 300
      }
    },
    {
      "name": "tin",
      "label": "TIN",
      "type": "string",
      "required": true,
      "classification": "sensitive-pii",
      "description": "The taxpayer's Taxpayer Identification Number, printed as a comb-box field.",
      "sourceRef": "Page 1, YOUR DETAILS",
      "validation": {
        "minLength": 1,
        "maxLength": 20
      }
    },
    {
      "name": "phone",
      "label": "Contact telephone number",
      "type": "string",
      "required": false,
      "classification": "pii",
      "sourceRef": "Page 1, YOUR DETAILS",
      "validation": {
        "minLength": 1,
        "maxLength": 60
      }
    },
    {
      "name": "email",
      "label": "Email address",
      "type": "string",
      "required": false,
      "classification": "pii",
      "sourceRef": "Page 1, YOUR DETAILS",
      "validation": {
        "pattern": "^[^@\\s]+@[^@\\s]+\\.[^@\\s]+$",
        "maxLength": 200
      }
    },
    {
      "name": "employer1Name",
      "label": "Name of employer(s) (a)",
      "type": "string",
      "required": false,
      "description": "Row (a) of the employment-information table. Include fringe benefits not yet taxed; do not include employment income earned and taxed in a foreign country. Attach Form P.16 for each employer; if more than three employers, attach a list with the additional information.",
      "sourceRef": "Page 1, PART A, item 1, row (a)",
      "validation": {
        "minLength": 1,
        "maxLength": 300
      }
    },
    {
      "name": "employer1Tin",
      "label": "Employer TIN(s) (a)",
      "type": "string",
      "required": false,
      "sourceRef": "Page 1, PART A, item 1, row (a)",
      "validation": {
        "minLength": 1,
        "maxLength": 20
      }
    },
    {
      "name": "employer1EmployedFrom",
      "label": "Employed from (in the year 2022/23) (a)",
      "type": "date",
      "required": false,
      "sourceRef": "Page 1, PART A, item 1, row (a), “Employed from”",
      "validation": {}
    },
    {
      "name": "employer1EmployedUntil",
      "label": "Employed until (in the year 2022/23) (a)",
      "type": "date",
      "required": false,
      "sourceRef": "Page 1, PART A, item 1, row (a), “Employed until”",
      "validation": {}
    },
    {
      "name": "employer1GrossIncome",
      "label": "Gross employment income (a)",
      "type": "number",
      "required": false,
      "sourceRef": "Page 1, PART A, item 1, row (a), “Gross employment income”",
      "validation": {
        "minimum": 0
      }
    },
    {
      "name": "employer2Name",
      "label": "Name of employer(s) (b)",
      "type": "string",
      "required": false,
      "description": "Row (b) of the employment-information table. Include fringe benefits not yet taxed; do not include employment income earned and taxed in a foreign country. Attach Form P.16 for each employer; if more than three employers, attach a list with the additional information.",
      "sourceRef": "Page 1, PART A, item 1, row (b)",
      "validation": {
        "minLength": 1,
        "maxLength": 300
      }
    },
    {
      "name": "employer2Tin",
      "label": "Employer TIN(s) (b)",
      "type": "string",
      "required": false,
      "sourceRef": "Page 1, PART A, item 1, row (b)",
      "validation": {
        "minLength": 1,
        "maxLength": 20
      }
    },
    {
      "name": "employer2EmployedFrom",
      "label": "Employed from (in the year 2022/23) (b)",
      "type": "date",
      "required": false,
      "sourceRef": "Page 1, PART A, item 1, row (b), “Employed from”",
      "validation": {}
    },
    {
      "name": "employer2EmployedUntil",
      "label": "Employed until (in the year 2022/23) (b)",
      "type": "date",
      "required": false,
      "sourceRef": "Page 1, PART A, item 1, row (b), “Employed until”",
      "validation": {}
    },
    {
      "name": "employer2GrossIncome",
      "label": "Gross employment income (b)",
      "type": "number",
      "required": false,
      "sourceRef": "Page 1, PART A, item 1, row (b), “Gross employment income”",
      "validation": {
        "minimum": 0
      }
    },
    {
      "name": "employer3Name",
      "label": "Name of employer(s) (c)",
      "type": "string",
      "required": false,
      "description": "Row (c) of the employment-information table. Include fringe benefits not yet taxed; do not include employment income earned and taxed in a foreign country. Attach Form P.16 for each employer; if more than three employers, attach a list with the additional information.",
      "sourceRef": "Page 1, PART A, item 1, row (c)",
      "validation": {
        "minLength": 1,
        "maxLength": 300
      }
    },
    {
      "name": "employer3Tin",
      "label": "Employer TIN(s) (c)",
      "type": "string",
      "required": false,
      "sourceRef": "Page 1, PART A, item 1, row (c)",
      "validation": {
        "minLength": 1,
        "maxLength": 20
      }
    },
    {
      "name": "employer3EmployedFrom",
      "label": "Employed from (in the year 2022/23) (c)",
      "type": "date",
      "required": false,
      "sourceRef": "Page 1, PART A, item 1, row (c), “Employed from”",
      "validation": {}
    },
    {
      "name": "employer3EmployedUntil",
      "label": "Employed until (in the year 2022/23) (c)",
      "type": "date",
      "required": false,
      "sourceRef": "Page 1, PART A, item 1, row (c), “Employed until”",
      "validation": {}
    },
    {
      "name": "employer3GrossIncome",
      "label": "Gross employment income (c)",
      "type": "number",
      "required": false,
      "sourceRef": "Page 1, PART A, item 1, row (c), “Gross employment income”",
      "validation": {
        "minimum": 0
      }
    },
    {
      "name": "unemploymentPeriod1From",
      "label": "Period during the Tax Year when the Taxpayer was unemployed – period 1 start",
      "type": "date",
      "required": false,
      "description": "One of up to three periods during the tax year when the taxpayer was unemployed. If more than three such periods, attach a list with the additional information.",
      "sourceRef": "Page 1, PART A, item 1, “Period during the Tax Year when the Taxpayer was unemployed”",
      "validation": {}
    },
    {
      "name": "unemploymentPeriod1Until",
      "label": "Period during the Tax Year when the Taxpayer was unemployed – period 1 end",
      "type": "date",
      "required": false,
      "sourceRef": "Page 1, PART A, item 1, “Period during the Tax Year when the Taxpayer was unemployed”",
      "validation": {}
    },
    {
      "name": "unemploymentPeriod2From",
      "label": "Period during the Tax Year when the Taxpayer was unemployed – period 2 start",
      "type": "date",
      "required": false,
      "description": "One of up to three periods during the tax year when the taxpayer was unemployed. If more than three such periods, attach a list with the additional information.",
      "sourceRef": "Page 1, PART A, item 1, “Period during the Tax Year when the Taxpayer was unemployed”",
      "validation": {}
    },
    {
      "name": "unemploymentPeriod2Until",
      "label": "Period during the Tax Year when the Taxpayer was unemployed – period 2 end",
      "type": "date",
      "required": false,
      "sourceRef": "Page 1, PART A, item 1, “Period during the Tax Year when the Taxpayer was unemployed”",
      "validation": {}
    },
    {
      "name": "unemploymentPeriod3From",
      "label": "Period during the Tax Year when the Taxpayer was unemployed – period 3 start",
      "type": "date",
      "required": false,
      "description": "One of up to three periods during the tax year when the taxpayer was unemployed. If more than three such periods, attach a list with the additional information.",
      "sourceRef": "Page 1, PART A, item 1, “Period during the Tax Year when the Taxpayer was unemployed”",
      "validation": {}
    },
    {
      "name": "unemploymentPeriod3Until",
      "label": "Period during the Tax Year when the Taxpayer was unemployed – period 3 end",
      "type": "date",
      "required": false,
      "sourceRef": "Page 1, PART A, item 1, “Period during the Tax Year when the Taxpayer was unemployed”",
      "validation": {}
    },
    {
      "name": "totalGrossEmploymentIncome",
      "label": "1d. Total gross employment income (1a+1b+1c)",
      "type": "number",
      "required": false,
      "sourceRef": "Page 1, PART A, item 1d",
      "validation": {
        "minimum": 0
      }
    },
    {
      "name": "employmentExpenseTravel",
      "label": "a. Travel expenses incurred for work",
      "type": "number",
      "required": false,
      "description": "Deductible amount, part of item 2 (Unreimbursed employment-related expenses and donations). This row's visual order was confirmed by rendering the source PDF page, since the underlying text layer contains extraneous/duplicated item text not present in the printed form.",
      "sourceRef": "Page 1, PART A, item 2",
      "validation": {
        "minimum": 0
      }
    },
    {
      "name": "employmentExpenseEducation",
      "label": "b. Education expenses to improve work knowledge and skills",
      "type": "number",
      "required": false,
      "description": "Deductible amount, part of item 2 (Unreimbursed employment-related expenses and donations). This row's visual order was confirmed by rendering the source PDF page, since the underlying text layer contains extraneous/duplicated item text not present in the printed form.",
      "sourceRef": "Page 1, PART A, item 2",
      "validation": {
        "minimum": 0
      }
    },
    {
      "name": "employmentExpenseTechnicalBooks",
      "label": "c. Expenses for technical and trade books and journals and association subscriptions",
      "type": "number",
      "required": false,
      "description": "Deductible amount, part of item 2 (Unreimbursed employment-related expenses and donations). This row's visual order was confirmed by rendering the source PDF page, since the underlying text layer contains extraneous/duplicated item text not present in the printed form.",
      "sourceRef": "Page 1, PART A, item 2",
      "validation": {
        "minimum": 0
      }
    },
    {
      "name": "employmentExpenseMotorVehicle",
      "label": "d. Motor vehicle expenses incurred for work",
      "type": "number",
      "required": false,
      "description": "Deductible amount, part of item 2 (Unreimbursed employment-related expenses and donations). This row's visual order was confirmed by rendering the source PDF page, since the underlying text layer contains extraneous/duplicated item text not present in the printed form.",
      "sourceRef": "Page 1, PART A, item 2",
      "validation": {
        "minimum": 0
      }
    },
    {
      "name": "employmentExpenseHomeOffice",
      "label": "e. Home office expenses",
      "type": "number",
      "required": false,
      "description": "Deductible amount, part of item 2 (Unreimbursed employment-related expenses and donations). This row's visual order was confirmed by rendering the source PDF page, since the underlying text layer contains extraneous/duplicated item text not present in the printed form.",
      "sourceRef": "Page 1, PART A, item 2",
      "validation": {
        "minimum": 0
      }
    },
    {
      "name": "employmentExpenseSuperannuation",
      "label": "f. Contributions you made to a complying superannuation fund",
      "type": "number",
      "required": false,
      "description": "Deductible amount, part of item 2 (Unreimbursed employment-related expenses and donations). This row's visual order was confirmed by rendering the source PDF page, since the underlying text layer contains extraneous/duplicated item text not present in the printed form.",
      "sourceRef": "Page 1, PART A, item 2",
      "validation": {
        "minimum": 0
      }
    },
    {
      "name": "employmentExpenseDonations",
      "label": "g. Donations paid to the Lesotho Sports and Recreation Commission",
      "type": "number",
      "required": false,
      "description": "Deductible amount, part of item 2 (Unreimbursed employment-related expenses and donations). This row's visual order was confirmed by rendering the source PDF page, since the underlying text layer contains extraneous/duplicated item text not present in the printed form.",
      "sourceRef": "Page 1, PART A, item 2",
      "validation": {
        "minimum": 0
      }
    },
    {
      "name": "totalEmploymentExpensesAndDonations",
      "label": "2h. Total unreimbursed employment-related expenses and donations (2a+2b+2c+2d+2e+2f+2g)",
      "type": "number",
      "required": false,
      "sourceRef": "Page 1, PART A, item 2h",
      "validation": {
        "minimum": 0
      }
    },
    {
      "name": "chargeableEmploymentIncome",
      "label": "3. Chargeable employment income (1d-2h)",
      "type": "number",
      "required": false,
      "sourceRef": "Page 1, PART A, item 3",
      "validation": {}
    },
    {
      "name": "pensionPayer1Name",
      "label": "Name of employer(s)/pension payer(s) (a)",
      "type": "string",
      "required": false,
      "description": "Row (a) of the pension-information table. Do not include pension income relating to employment carried on in a foreign country and taxed in that country, or (if the taxpayer retired before 11 March 1993) any war pension or gratuity paid by the Lesotho Government. Attach Form P.16 for each pension payer; if more than two pension payers, attach a list with additional information.",
      "sourceRef": "Page 2, PART B, item 1, row (a)",
      "validation": {
        "minLength": 1,
        "maxLength": 300
      }
    },
    {
      "name": "pensionPayer1Tin",
      "label": "Employer(s) TIN(s) (a)",
      "type": "string",
      "required": false,
      "sourceRef": "Page 2, PART B, item 1, row (a)",
      "validation": {
        "minLength": 1,
        "maxLength": 20
      }
    },
    {
      "name": "pensionPayer1StartDate",
      "label": "Pension start date (in the year 2022/23) (a)",
      "type": "date",
      "required": false,
      "sourceRef": "Page 2, PART B, item 1, row (a)",
      "validation": {}
    },
    {
      "name": "pensionPayer1EndDate",
      "label": "Pension end date (in the year 2022/23) (a)",
      "type": "date",
      "required": false,
      "sourceRef": "Page 2, PART B, item 1, row (a)",
      "validation": {}
    },
    {
      "name": "pensionPayer1GrossIncome",
      "label": "Gross pension income (a)",
      "type": "number",
      "required": false,
      "sourceRef": "Page 2, PART B, item 1, row (a)",
      "validation": {
        "minimum": 0
      }
    },
    {
      "name": "pensionPayer2Name",
      "label": "Name of employer(s)/pension payer(s) (b)",
      "type": "string",
      "required": false,
      "description": "Row (b) of the pension-information table. Do not include pension income relating to employment carried on in a foreign country and taxed in that country, or (if the taxpayer retired before 11 March 1993) any war pension or gratuity paid by the Lesotho Government. Attach Form P.16 for each pension payer; if more than two pension payers, attach a list with additional information.",
      "sourceRef": "Page 2, PART B, item 1, row (b)",
      "validation": {
        "minLength": 1,
        "maxLength": 300
      }
    },
    {
      "name": "pensionPayer2Tin",
      "label": "Employer(s) TIN(s) (b)",
      "type": "string",
      "required": false,
      "sourceRef": "Page 2, PART B, item 1, row (b)",
      "validation": {
        "minLength": 1,
        "maxLength": 20
      }
    },
    {
      "name": "pensionPayer2StartDate",
      "label": "Pension start date (in the year 2022/23) (b)",
      "type": "date",
      "required": false,
      "sourceRef": "Page 2, PART B, item 1, row (b)",
      "validation": {}
    },
    {
      "name": "pensionPayer2EndDate",
      "label": "Pension end date (in the year 2022/23) (b)",
      "type": "date",
      "required": false,
      "sourceRef": "Page 2, PART B, item 1, row (b)",
      "validation": {}
    },
    {
      "name": "pensionPayer2GrossIncome",
      "label": "Gross pension income (b)",
      "type": "number",
      "required": false,
      "sourceRef": "Page 2, PART B, item 1, row (b)",
      "validation": {
        "minimum": 0
      }
    },
    {
      "name": "totalGrossPensionIncome",
      "label": "1.c. Total gross pension income (1a+1b)",
      "type": "number",
      "required": false,
      "sourceRef": "Page 2, PART B, item 1c",
      "validation": {
        "minimum": 0
      }
    },
    {
      "name": "pensionDonations",
      "label": "2. Donations paid to the Lesotho Sports and Recreation Commission",
      "type": "number",
      "required": false,
      "description": "Do not include amounts already deducted on line 2g in Part A.",
      "sourceRef": "Page 2, PART B, item 2",
      "validation": {
        "minimum": 0
      }
    },
    {
      "name": "chargeablePensionIncome",
      "label": "3. Chargeable pension income (1c-2)",
      "type": "number",
      "required": false,
      "sourceRef": "Page 2, PART B, item 3",
      "validation": {}
    },
    {
      "name": "taxComputationChargeableEmploymentIncome",
      "label": "1a. Enter chargeable employment income from Part A, line 3",
      "type": "number",
      "required": false,
      "sourceRef": "Page 6, PART H, item 1a",
      "validation": {}
    },
    {
      "name": "taxComputationChargeablePensionIncome",
      "label": "1b. Enter chargeable pension income from Part B, line 3",
      "type": "number",
      "required": false,
      "sourceRef": "Page 6, PART H, item 1b",
      "validation": {}
    },
    {
      "name": "taxComputationChargeableBusinessIncome",
      "label": "1c. Enter chargeable business income from Part C, line 8, col. (c)",
      "type": "number",
      "required": false,
      "description": "Corresponds to Part C (Business Income & Expenses), 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 business income.",
      "sourceRef": "Page 6, PART H, item 1c",
      "validation": {}
    },
    {
      "name": "taxComputationChargeableFarmingIncome",
      "label": "1d. Enter chargeable commercial farming income from Part D, line 8, col. (c)",
      "type": "number",
      "required": false,
      "description": "Corresponds to Part D (Commercial Farming Income & Expenses), 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 commercial farming income.",
      "sourceRef": "Page 6, PART H, item 1d",
      "validation": {}
    },
    {
      "name": "taxComputationChargeablePropertyIncome",
      "label": "1e. Enter chargeable property income from Part E, line 12, col. (c)",
      "type": "number",
      "required": false,
      "description": "Corresponds to Part E (Property Income & Expenses), 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 property income.",
      "sourceRef": "Page 6, PART H, item 1e",
      "validation": {}
    },
    {
      "name": "taxComputationChargeableOtherIncome",
      "label": "1f. Enter chargeable other income from Part F, line 3, col. (c)",
      "type": "number",
      "required": false,
      "description": "Corresponds to Part F (Other Income & Expenses), 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 other chargeable income.",
      "sourceRef": "Page 6, PART H, item 1f",
      "validation": {}
    },
    {
      "name": "totalChargeableIncome",
      "label": "2. Total chargeable income. Add 1a+1b+1c+1d+1e+1f",
      "type": "number",
      "required": false,
      "sourceRef": "Page 6, PART H, item 2",
      "validation": {}
    },
    {
      "name": "taxBracket10PercentChargeableIncome",
      "label": "3a, col. (a). Amount on line 1d on this part (taxed at the fixed 10% rate)",
      "type": "number",
      "required": false,
      "description": "Row 3a applies a flat 10% rate specifically to chargeable commercial farming income (line 1d on this Part), ahead of the progressive brackets applied to the rest of chargeable income in rows 3b-3d. Column (b), the 10% rate, is pre-printed on the form and not a fillable field.",
      "sourceRef": "Page 6, PART H, item 3a, col. (a)",
      "validation": {}
    },
    {
      "name": "taxBracket10PercentTax",
      "label": "3a, col. (c). Multiply (a) * (b)",
      "type": "number",
      "required": false,
      "sourceRef": "Page 6, PART H, item 3a, col. (c)",
      "validation": {}
    },
    {
      "name": "taxBracket20PercentChargeableIncome",
      "label": "3b, col. (a). Chargeable income taxed at the 20% rate",
      "type": "number",
      "required": false,
      "description": "For a Lesotho resident at least 18 years of age, or a non-resident who lives permanently outside Lesotho but works full time in Lesotho: the smaller of M67,440.00 or (line 2 minus line 1d), apportioned if not engaged in an income-earning activity for the entire year. For a Lesotho resident under 18: the smaller of M67,440.00 or (lines 1a+1b+1c+1f, not less than zero), similarly apportioned. Any other non-resident skips this row (col. (b), the 20% rate, is pre-printed and not a fillable field).",
      "sourceRef": "Page 6, PART H, item 3b, col. (a)",
      "validation": {}
    },
    {
      "name": "taxBracket20PercentTax",
      "label": "3b, col. (c). Multiply (a) * (b)",
      "type": "number",
      "required": false,
      "sourceRef": "Page 6, PART H, item 3b, col. (c)",
      "validation": {}
    },
    {
      "name": "taxBracket30PercentChargeableIncome",
      "label": "3c, col. (a). Chargeable income taxed at the 30% rate",
      "type": "number",
      "required": false,
      "description": "For a Lesotho resident at least 18 years of age, or a qualifying non-resident: line 2 minus (lines 3a+3b in col. (a)). For a Lesotho resident under 18: (lines 1a+1b+1c+1f) minus (lines 3a+3b in col. (a)); for property income of a resident under 18, this row is skipped. Any other non-resident skips this row (col. (b), the 30% rate, is pre-printed and not a fillable field).",
      "sourceRef": "Page 6-7, PART H, item 3c, col. (a)",
      "validation": {}
    },
    {
      "name": "taxBracket30PercentTax",
      "label": "3c, col. (c). Multiply (a) * (b)",
      "type": "number",
      "required": false,
      "sourceRef": "Page 6-7, PART H, item 3c, col. (c)",
      "validation": {}
    },
    {
      "name": "taxBracket4PercentChargeableIncome",
      "label": "3d, col. (a). Chargeable income taxed at the 25% (or 40%) rate",
      "type": "number",
      "required": false,
      "description": "A Lesotho resident at least 18 years of age skips this row. Any other non-resident (other than one who lives permanently outside Lesotho but works full time in Lesotho) or a resident under 18 enters line 1e here. Any other non-resident enters (line 2 minus line 1d) here. Col. (b) is pre-printed as 25% (40% for non-residents electing under section 109 to be taxed by assessment, and for Lesotho residents under the age of 18) and is not a fillable field.",
      "sourceRef": "Page 7, PART H, item 3d, col. (a)",
      "validation": {}
    },
    {
      "name": "taxBracket4PercentTax",
      "label": "3d, col. (c). Multiply (a) * (b)",
      "type": "number",
      "required": false,
      "sourceRef": "Page 7, PART H, item 3d, col. (c)",
      "validation": {}
    },
    {
      "name": "totalTaxBeforeCredits",
      "label": "4. Total tax before credits (Add 3a+3b+3c+3d in col. (c))",
      "type": "number",
      "required": false,
      "sourceRef": "Page 7, PART H, item 4",
      "validation": {
        "minimum": 0
      }
    },
    {
      "name": "personalTaxCredit",
      "label": "5a. Personal tax credit",
      "type": "number",
      "required": false,
      "description": "For a Lesotho resident at least 18 years of age, or a non-resident who lives permanently outside Lesotho but works full time in Lesotho: M10,560.00 if engaged in an income-earning activity for the entire year (apportioned otherwise). For a Lesotho resident under 18: the smaller of line 3d (col. (c)) or M400, plus the smaller of (line 4 minus line 3d in col. (c)) or (M10,560.00 minus the amount just computed), apportioned if a part-year resident or not engaged in an income-earning activity for the entire year. Any other non-resident enters nil.",
      "sourceRef": "Page 7-8, PART H, item 5a",
      "validation": {
        "minimum": 0
      }
    },
    {
      "name": "creditForForeignTaxPaid",
      "label": "5b. Credit for foreign tax paid from Part G, line 2",
      "type": "number",
      "required": false,
      "description": "Corresponds to Part G (Credit for Foreign Tax Paid), 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 paid no foreign tax.",
      "sourceRef": "Page 8, PART H, item 5b",
      "validation": {
        "minimum": 0
      }
    },
    {
      "name": "totalNonRefundableCredits",
      "label": "6. Total non refundable credits (5a+5b)",
      "type": "number",
      "required": false,
      "sourceRef": "Page 8, PART H, item 6",
      "validation": {
        "minimum": 0
      }
    },
    {
      "name": "totalTaxAfterCredits",
      "label": "7. Total tax after",
      "type": "number",
      "required": false,
      "description": "Printed verbatim as “7. Total tax after” on the source form (the label is truncated in the original publication); by construction of the surrounding lines this is the total tax after non-refundable credits (line 4 minus line 6).",
      "sourceRef": "Page 8, PART H, item 7",
      "validation": {}
    },
    {
      "name": "payeDeducted",
      "label": "8a. Income tax deducted from employment and pension income - PAYE (as shown on Form P.16)",
      "type": "number",
      "required": false,
      "sourceRef": "Page 8, PART H, item 8a",
      "validation": {
        "minimum": 0
      }
    },
    {
      "name": "incomeTaxWhtPaid",
      "label": "8b. Income Tax (WHT) paid",
      "type": "number",
      "required": false,
      "sourceRef": "Page 8, PART H, item 8b",
      "validation": {
        "minimum": 0
      }
    },
    {
      "name": "advanceInstallmentsPaid",
      "label": "8c. Advance installments of income tax paid",
      "type": "number",
      "required": false,
      "sourceRef": "Page 8, PART H, item 8c",
      "validation": {
        "minimum": 0
      }
    },
    {
      "name": "totalPayments",
      "label": "9. Total payments. Add 8a+8b+8c",
      "type": "number",
      "required": false,
      "sourceRef": "Page 8, PART H, item 9",
      "validation": {
        "minimum": 0
      }
    },
    {
      "name": "taxDue",
      "label": "10. Tax due. Line 7 minus line 9. Enter nil if less than -0-",
      "type": "number",
      "required": false,
      "sourceRef": "Page 8, PART H, item 10",
      "validation": {
        "minimum": 0
      }
    },
    {
      "name": "taxOverpaid",
      "label": "11. Tax overpaid. Line 9 minus line 7. Enter nil if less than -0-",
      "type": "number",
      "required": false,
      "sourceRef": "Page 8, PART H, item 11",
      "validation": {
        "minimum": 0
      }
    },
    {
      "name": "claimingRepaymentOfOverpaidTax",
      "label": "If you are claiming repayment of the tax overpaid as shown on this line, tick this box",
      "type": "boolean",
      "required": false,
      "description": "When ticked, proof of banking details from the taxpayer's bank must be attached.",
      "sourceRef": "Page 8, PART H, item 11"
    },
    {
      "name": "paidPreparerName",
      "label": "Name of paid preparer",
      "type": "string",
      "required": false,
      "description": "Declaration of Paid Preparer (external tax consultant/accountant/auditor, etc.). Skip this section if there is no paid preparer.",
      "classification": "pii",
      "sourceRef": "Page 8, Declaration of Paid Preparer",
      "validation": {
        "minLength": 1,
        "maxLength": 300
      }
    },
    {
      "name": "paidPreparerDate",
      "label": "Date (day, month, year) [paid preparer]",
      "type": "date",
      "required": false,
      "sourceRef": "Page 8, Declaration of Paid Preparer",
      "validation": {}
    },
    {
      "name": "paidPreparerTin",
      "label": "TIN of paid preparer",
      "type": "string",
      "required": false,
      "classification": "sensitive-pii",
      "sourceRef": "Page 8, Declaration of Paid Preparer",
      "validation": {
        "minLength": 1,
        "maxLength": 20
      }
    },
    {
      "name": "paidPreparerFirmName",
      "label": "Firm's name",
      "type": "string",
      "required": false,
      "sourceRef": "Page 8, Declaration of Paid Preparer",
      "validation": {
        "minLength": 1,
        "maxLength": 300
      }
    },
    {
      "name": "paidPreparerFirmTin",
      "label": "Firm's TIN",
      "type": "string",
      "required": false,
      "sourceRef": "Page 8, Declaration of Paid Preparer",
      "validation": {
        "minLength": 1,
        "maxLength": 20
      }
    },
    {
      "name": "paidPreparerFirmAddress",
      "label": "Firm's physical address",
      "type": "string",
      "required": false,
      "sourceRef": "Page 8, Declaration of Paid Preparer",
      "validation": {
        "minLength": 1,
        "maxLength": 300
      }
    },
    {
      "name": "paidPreparerPhone",
      "label": "Contact telephone number [paid preparer]",
      "type": "string",
      "required": false,
      "classification": "pii",
      "sourceRef": "Page 8, Declaration of Paid Preparer",
      "validation": {
        "minLength": 1,
        "maxLength": 60
      }
    },
    {
      "name": "paidPreparerEmail",
      "label": "Email address [paid preparer]",
      "type": "string",
      "required": false,
      "classification": "pii",
      "sourceRef": "Page 8, Declaration of Paid Preparer",
      "validation": {
        "pattern": "^[^@\\s]+@[^@\\s]+\\.[^@\\s]+$",
        "maxLength": 200
      }
    },
    {
      "name": "declarationDate",
      "label": "Date (day, month, year) [taxpayer or representative]",
      "type": "date",
      "required": true,
      "description": "The date the taxpayer (or representative) signs the declaration that the return is correct and complete, and (if applicable) confirms having ticked the repayment box on line 11.",
      "sourceRef": "Page 8, Declaration of Taxpayer or Representative",
      "validation": {}
    },
    {
      "name": "representativeFullName",
      "label": "If you are signing this form on behalf of a legally incapacitated person, print your full name",
      "type": "string",
      "required": false,
      "classification": "pii",
      "sourceRef": "Page 8, Declaration of Taxpayer or Representative",
      "validation": {
        "minLength": 1,
        "maxLength": 300
      }
    },
    {
      "name": "representativePhone",
      "label": "Contact telephone/cell number of representative",
      "type": "string",
      "required": false,
      "description": "Only applicable when representativeFullName is filled in (the taxpayer is a legally incapacitated person and this form is signed by a representative). The source form has no separate yes/no checkbox for this scenario, so it is not modeled as a requiredWhen gate — see the notEquals-empty-string-absent-field anti-pattern in this registry's own authoring notes.",
      "classification": "pii",
      "sourceRef": "Page 8, Declaration of Taxpayer or Representative",
      "validation": {
        "minLength": 1,
        "maxLength": 60
      }
    }
  ],
  "documents": [
    {
      "id": "formP16Employment",
      "label": "Form P.16 (employer's certificate) for each employer",
      "category": "supporting-evidence",
      "required": false,
      "belongsTo": "applicant",
      "sourceRef": "Page 1, PART A, item 1 — \"Attach Form P.16 for each employer\""
    },
    {
      "id": "formP16Pension",
      "label": "Form P.16 (pension payer's certificate) for each pension payer",
      "category": "supporting-evidence",
      "required": false,
      "belongsTo": "applicant",
      "sourceRef": "Page 2, PART B, item 1 — \"Attach Form P.16 for each pension payer\""
    },
    {
      "id": "additionalEmployerInformationList",
      "label": "List with additional information for more than three employers",
      "category": "supporting-evidence",
      "required": false,
      "belongsTo": "applicant",
      "sourceRef": "Page 1, PART A, item 1 — \"if more than three employers, attach a list with the additional information\""
    },
    {
      "id": "additionalPensionPayerInformationList",
      "label": "List with additional information for more than two pension payers",
      "category": "supporting-evidence",
      "required": false,
      "belongsTo": "applicant",
      "sourceRef": "Page 2, PART B, item 1 — \"if more than two pension payers, attach a list with additional information\""
    },
    {
      "id": "additionalUnemploymentPeriodsList",
      "label": "List with additional information for more than three unemployment periods",
      "category": "supporting-evidence",
      "required": false,
      "belongsTo": "applicant",
      "sourceRef": "Page 1, PART A, item 1 — \"if more than threesuch periods, attach list with the additional information\""
    },
    {
      "id": "proofOfBankingDetails",
      "label": "Proof of banking details from the taxpayer's bank",
      "category": "supporting-evidence",
      "required": false,
      "requiredWhen": {
        "field": "claimingRepaymentOfOverpaidTax",
        "equals": true
      },
      "belongsTo": "applicant",
      "sourceRef": "Page 8, PART H, item 11 — \"and attach proof of banking details from your bank\""
    }
  ],
  "crossFieldValidation": [
    {
      "id": "employer1PeriodOrder",
      "compare": {
        "field": "employer1EmployedUntil",
        "operator": "greaterThanOrEqual",
        "compareTo": "employer1EmployedFrom"
      }
    },
    {
      "id": "employer2PeriodOrder",
      "compare": {
        "field": "employer2EmployedUntil",
        "operator": "greaterThanOrEqual",
        "compareTo": "employer2EmployedFrom"
      }
    },
    {
      "id": "employer3PeriodOrder",
      "compare": {
        "field": "employer3EmployedUntil",
        "operator": "greaterThanOrEqual",
        "compareTo": "employer3EmployedFrom"
      }
    },
    {
      "id": "pensionPayer1PeriodOrder",
      "compare": {
        "field": "pensionPayer1EndDate",
        "operator": "greaterThanOrEqual",
        "compareTo": "pensionPayer1StartDate"
      }
    },
    {
      "id": "pensionPayer2PeriodOrder",
      "compare": {
        "field": "pensionPayer2EndDate",
        "operator": "greaterThanOrEqual",
        "compareTo": "pensionPayer2StartDate"
      }
    },
    {
      "id": "taxComputationEmploymentIncomeMatchesPartA",
      "compare": {
        "field": "taxComputationChargeableEmploymentIncome",
        "operator": "equals",
        "compareTo": "chargeableEmploymentIncome"
      }
    },
    {
      "id": "taxComputationPensionIncomeMatchesPartB",
      "compare": {
        "field": "taxComputationChargeablePensionIncome",
        "operator": "equals",
        "compareTo": "chargeablePensionIncome"
      }
    }
  ]
}
