Registry entry
Lesotho — Individual Income Tax Return (Form S128-I)
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.
Registry entry
ls/rsl/individual-income-tax-return
Authoritative source FORM S128-I — Individual Income Tax Return, Year Ended 31 March 2023
Machine access
- Schema document
registry/ls/rsl/individual-income-tax-return/1.0.0/schema.jsonapplication/schema+json- Verification record
registry/ls/rsl/individual-income-tax-return/1.0.0/VERIFICATION.mdtext/markdown- Registry catalog
registry/index.jsonone record per schema id
Field reference
88 fields across 5 steps, read from the published schema.json, with names, types, requiredness, and validation as the document states them. The live government form remains the authoritative source.
Your Details
-
residencyStatusenum requiredThe taxpayer's residency status for the tax year. "Part-year resident" requires entering the number of days the taxpayer was a resident.
enum: resident | non-resident | part-year-resident -
partYearResidentDaysinteger optionalNumber of days during the tax year the taxpayer was resident in Lesotho. Only entered when Part-year resident is ticked.
range: 0–366 -
fullNamestring requiredYour surname, forenames, and maiden name
length: 1–300classification: pii -
tinstring requiredThe taxpayer's Taxpayer Identification Number, printed as a comb-box field.
length: 1–20classification: sensitive-pii -
phonestring optionalContact telephone number
length: 1–60classification: pii -
emailstring optionalEmail address
patternlength: 0–200classification: pii
Part A - Employment Income & Expenses
-
employer1Namestring optionalRow (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.
length: 1–300 -
employer1Tinstring optionalEmployer TIN(s) (a)
length: 1–20 -
employer1EmployedFromdate optionalEmployed from (in the year 2022/23) (a)
-
employer1EmployedUntildate optionalEmployed until (in the year 2022/23) (a)
-
employer1GrossIncomenumber optionalGross employment income (a)
range: 0–∞ -
employer2Namestring optionalRow (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.
length: 1–300 -
employer2Tinstring optionalEmployer TIN(s) (b)
length: 1–20 -
employer2EmployedFromdate optionalEmployed from (in the year 2022/23) (b)
-
employer2EmployedUntildate optionalEmployed until (in the year 2022/23) (b)
-
employer2GrossIncomenumber optionalGross employment income (b)
range: 0–∞ -
employer3Namestring optionalRow (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.
length: 1–300 -
employer3Tinstring optionalEmployer TIN(s) (c)
length: 1–20 -
employer3EmployedFromdate optionalEmployed from (in the year 2022/23) (c)
-
employer3EmployedUntildate optionalEmployed until (in the year 2022/23) (c)
-
employer3GrossIncomenumber optionalGross employment income (c)
range: 0–∞ -
unemploymentPeriod1Fromdate optionalOne 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.
-
unemploymentPeriod1Untildate optionalPeriod during the Tax Year when the Taxpayer was unemployed – period 1 end
-
unemploymentPeriod2Fromdate optionalOne 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.
-
unemploymentPeriod2Untildate optionalPeriod during the Tax Year when the Taxpayer was unemployed – period 2 end
-
unemploymentPeriod3Fromdate optionalOne 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.
-
unemploymentPeriod3Untildate optionalPeriod during the Tax Year when the Taxpayer was unemployed – period 3 end
-
totalGrossEmploymentIncomenumber optional1d. Total gross employment income (1a+1b+1c)
range: 0–∞ -
employmentExpenseTravelnumber optionalDeductible 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.
range: 0–∞ -
employmentExpenseEducationnumber optionalDeductible 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.
range: 0–∞ -
employmentExpenseTechnicalBooksnumber optionalDeductible 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.
range: 0–∞ -
employmentExpenseMotorVehiclenumber optionalDeductible 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.
range: 0–∞ -
employmentExpenseHomeOfficenumber optionalDeductible 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.
range: 0–∞ -
employmentExpenseSuperannuationnumber optionalDeductible 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.
range: 0–∞ -
employmentExpenseDonationsnumber optionalDeductible 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.
range: 0–∞ -
totalEmploymentExpensesAndDonationsnumber optional2h. Total unreimbursed employment-related expenses and donations (2a+2b+2c+2d+2e+2f+2g)
range: 0–∞ -
chargeableEmploymentIncomenumber optional3. Chargeable employment income (1d-2h)
Part B - Pension Income
-
pensionPayer1Namestring optionalRow (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.
length: 1–300 -
pensionPayer1Tinstring optionalEmployer(s) TIN(s) (a)
length: 1–20 -
pensionPayer1StartDatedate optionalPension start date (in the year 2022/23) (a)
-
pensionPayer1EndDatedate optionalPension end date (in the year 2022/23) (a)
-
pensionPayer1GrossIncomenumber optionalGross pension income (a)
range: 0–∞ -
pensionPayer2Namestring optionalRow (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.
length: 1–300 -
pensionPayer2Tinstring optionalEmployer(s) TIN(s) (b)
length: 1–20 -
pensionPayer2StartDatedate optionalPension start date (in the year 2022/23) (b)
-
pensionPayer2EndDatedate optionalPension end date (in the year 2022/23) (b)
-
pensionPayer2GrossIncomenumber optionalGross pension income (b)
range: 0–∞ -
totalGrossPensionIncomenumber optional1.c. Total gross pension income (1a+1b)
range: 0–∞ -
pensionDonationsnumber optionalDo not include amounts already deducted on line 2g in Part A.
range: 0–∞ -
chargeablePensionIncomenumber optional3. Chargeable pension income (1c-2)
Part H - Tax Computation
-
taxComputationChargeableEmploymentIncomenumber optional1a. Enter chargeable employment income from Part A, line 3
-
taxComputationChargeablePensionIncomenumber optional1b. Enter chargeable pension income from Part B, line 3
-
taxComputationChargeableBusinessIncomenumber optionalCorresponds 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.
-
taxComputationChargeableFarmingIncomenumber optionalCorresponds 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.
-
taxComputationChargeablePropertyIncomenumber optionalCorresponds 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.
-
taxComputationChargeableOtherIncomenumber optionalCorresponds 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.
-
totalChargeableIncomenumber optional2. Total chargeable income. Add 1a+1b+1c+1d+1e+1f
-
taxBracket10PercentChargeableIncomenumber optionalRow 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.
-
taxBracket10PercentTaxnumber optional3a, col. (c). Multiply (a) * (b)
-
taxBracket20PercentChargeableIncomenumber optionalFor 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).
-
taxBracket20PercentTaxnumber optional3b, col. (c). Multiply (a) * (b)
-
taxBracket30PercentChargeableIncomenumber optionalFor 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).
-
taxBracket30PercentTaxnumber optional3c, col. (c). Multiply (a) * (b)
-
taxBracket4PercentChargeableIncomenumber optionalA 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.
-
taxBracket4PercentTaxnumber optional3d, col. (c). Multiply (a) * (b)
-
totalTaxBeforeCreditsnumber optional4. Total tax before credits (Add 3a+3b+3c+3d in col. (c))
range: 0–∞ -
personalTaxCreditnumber optionalFor 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.
range: 0–∞ -
creditForForeignTaxPaidnumber optionalCorresponds 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.
range: 0–∞ -
totalNonRefundableCreditsnumber optional6. Total non refundable credits (5a+5b)
range: 0–∞ -
totalTaxAfterCreditsnumber optionalPrinted 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).
-
payeDeductednumber optional8a. Income tax deducted from employment and pension income - PAYE (as shown on Form P.16)
range: 0–∞ -
incomeTaxWhtPaidnumber optional8b. Income Tax (WHT) paid
range: 0–∞ -
advanceInstallmentsPaidnumber optional8c. Advance installments of income tax paid
range: 0–∞ -
totalPaymentsnumber optional9. Total payments. Add 8a+8b+8c
range: 0–∞ -
taxDuenumber optional10. Tax due. Line 7 minus line 9. Enter nil if less than -0-
range: 0–∞ -
taxOverpaidnumber optional11. Tax overpaid. Line 9 minus line 7. Enter nil if less than -0-
range: 0–∞ -
claimingRepaymentOfOverpaidTaxboolean optionalWhen ticked, proof of banking details from the taxpayer's bank must be attached.
Declarations
-
paidPreparerNamestring optionalDeclaration of Paid Preparer (external tax consultant/accountant/auditor, etc.). Skip this section if there is no paid preparer.
length: 1–300classification: pii -
paidPreparerDatedate optionalDate (day, month, year) [paid preparer]
-
paidPreparerTinstring optionalTIN of paid preparer
length: 1–20classification: sensitive-pii -
paidPreparerFirmNamestring optionalFirm's name
length: 1–300 -
paidPreparerFirmTinstring optionalFirm's TIN
length: 1–20 -
paidPreparerFirmAddressstring optionalFirm's physical address
length: 1–300 -
paidPreparerPhonestring optionalContact telephone number [paid preparer]
length: 1–60classification: pii -
paidPreparerEmailstring optionalEmail address [paid preparer]
patternlength: 0–200classification: pii -
declarationDatedate requiredThe 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.
-
representativeFullNamestring optionalIf you are signing this form on behalf of a legally incapacitated person, print your full name
length: 1–300classification: pii -
representativePhonestring optionalOnly 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.
length: 1–60classification: pii
Verification record
GOV-4755 ("GovSchema Standard Research"). Per the prior cycle's own recommendation ([[gov4748-ls-obfc-opens-98th-backlog-exhausted]]), this cycle deepened Lesotho's remaining verticals rather than scouting yet another new jurisdiction, since the GOV-4748 cycle found the registry's other recently-banked backlog candidates (Hungary Business Formation, Tunisia DMV, Morocco's four remaining verticals, North Macedonia Visa, Georgia's own disclosed backlog) all re-confirmed dead or weak on independent re-check.
Screened Lesotho's Ministry of Home Affairs channels first: passport issuance (homeaffairs.gov.ls/passports/) is confirmed in-person/biometric-only with no downloadable application form (matching this registry's own established in-person-only pattern, e.g. Czechia/Georgia); the National ID (NICR) department publishes no downloadable form either; the ministry's own e-VISA service is stated as "currently suspended" on its own FAQ page. All three left as soft dead ends for a future cycle, not hard-confirmed (a genuine live-form re-check would need a different search angle or real-browser confirmation). Pivoted to Revenue Services Lesotho (RSL, the tax authority, formerly the Lesotho Revenue Authority), which publishes a large, unauthenticated "Forms & Instructions" library directly on its own domain.
Reaching the live source
Fetched directly: https://www.rsl.org.ls/sites/default/files/2024-07/Individual%20Income%20Tax%20Return%202023%20%281%29.pdf, HTTP 200, Content-Type: application/pdf, Content-Length: 373694 (byte-identical to the downloaded file), Last-Modified: Mon, 22 Jul 2024 10:36:15 GMT, sha256 ed5366829b61bbbc0f8ff757be43155f03daa7c04b1ec3ed92b140140e28ea3a, no login/CAPTCHA/WAF gate — linked directly from https://www.rsl.org.ls/forms-and-instructions under "Income Tax Forms", alongside the same-family Company Income Tax Return, FBT Return, and Trusts/Estates return (each a separate future-cycle candidate). Form S128-I is the individual (not company) return, corroborated independently by a public search result citing the same form number and confirming it is available "through the Interim E-filing Solution in E-Services" as well as this direct download.
Extraction method
pdfjs-dist (/tmp/node_modules/pdfjs-dist/build/pdf.js, non-legacy CJS build). getDocument().promise reports 8 pages; getAnnotations() returns zero annotations on every page, confirming a flat, non-fillable PDF with no AcroForm/XFA fields (this registry's established flat-PDF pattern). getTextContent()'s raw item stream was not trusted on its own this cycle: page 1's text layer, read literally, listed nine items under "2. Unreimbursed employment-related expenses and donations" (a, b, b, c, d, c, d, f, g) where the printed form has exactly seven (a-g), including a spurious extra line ("d. Other unreimbursed work expenses") not present anywhere in the rendered page and a genuinely present line ("e. Home office expenses") entirely absent from the text-item stream. This is a new, sixth distinct PDF-extraction failure mode for this registry (see gov-form-pdf-extraction): duplicated/extraneous ghost text co-resident with the real content in the same text layer, rather than merely out-of-order or checkbox-only scrambling. Resolved by rendering every page used in this schema (node-canvas at 2.5x scale) and reading the visual layout directly, cross-checking every field against the rendered image rather than the text layer alone.
Scoping decision
The source form is a genuinely large 8-page return covering six income categories (employment, pension, business, commercial farming, property, other) plus a foreign-tax-credit schedule. Following this registry's established main-form-now/companion-schedules-later precedent (e.g. kz/* Form 220.0X/250.0X series, tn/dgi/irpp-declaration), this v1.0.0 schema is scoped to the core declaration that a typical employee/pensioner taxpayer completes in full:
- Your Details (residency status, identity, contact).
- Part A — Employment Income & Expenses (up to 3 employers, up to 3 unemployment periods, the 7-item unreimbursed-expense schedule, chargeable employment income).
- Part B — Pension Income (up to 2 pension payers, chargeable pension income).
- Part H — Tax Computation (the chargeable-income summary grid, the four tax-bracket rows, credits, payments, and the resulting tax due/overpaid).
- Declaration of Paid Preparer and Declaration of Taxpayer or Representative.
Parts C (Business Income & Expenses), D (Commercial Farming Income & Expenses), E (Property Income & Expenses), F (Other Income & Expenses), and G (Credit for Foreign Tax Paid) are out of scope for this version. Each is a structurally self-contained parallel schedule (Lesotho-source / foreign-source / chargeable columns, its own net-profit-or-loss and loss-carryforward computation) affecting a minority of individual filers; modeling all five in full would roughly double this schema's field count for comparatively rare use. Part H's own summary lines referencing these parts (1c-1f, 5b) are still modeled as pass-through optional numeric fields — a taxpayer with such income can still record the schedule's final total even though this schema does not yet walk through how that total is derived — each field's own description discloses which deferred part it corresponds to. This mirrors this registry's Tunisia IRPP precedent of keeping the summary/computation grid while deferring the detailed per-category build-up schedules.
Disclosed findings and interpretation choices
- Item 2's correct a-g ordering was recovered by visual rendering, not the text layer — see "Extraction method" above. The rendered image confirms: a. Travel; b. Education; c. Technical/trade books and subscriptions; d. Motor vehicle; e. Home office; f. Superannuation contributions; g. Donations to the Lesotho Sports and Recreation Commission — matching the printed "2h... (2a+2b+2c+2d+2e+2f+2g)" seven-term total formula exactly.
- Part B precedes Part C in the printed layout, even though a naive linear read of page 2's raw text item stream (without position-sorting) surfaces Part C's content before Part B's — confirmed from the rendered page image, where Part B (Pension Income) is the first block and Part C (Business Income & Expenses, out of scope) begins roughly halfway down the same page.
- Employer/pension-payer slots are bounded to the form's own printed capacity (3 employer rows in Part A, 2 pension-payer rows in Part B, 3 unemployment-period rows in Part A), matching this registry's established bounded-slot convention; each section's own printed instruction ("if more than three employers, attach a list with the additional information", "if more than two pension payers, attach a list with additional information", "if more than threesuch periods, attach list with the additional information") is modeled as a corresponding optional
documents[]entry rather than a synthetic overflow field. residencyStatusis modeled as a required enum (resident/non-resident/part-year-resident) from the form's own single "Tick applicable box" instruction with three named options;partYearResidentDaysisrequiredWhen residencyStatus equals "part-year-resident", matching the form's own "enter number of days you were a resident" instruction printed directly beside that option only.- Line 7 ("7. Total tax after") is transcribed verbatim from the source, which prints this label with no further qualifier (the phrase "Total tax after" is not completed with "credits" or similar in the published PDF) — likely a publishing truncation in RSL's own document, not a rendering artifact on this schema's part (confirmed present identically in both the text layer and the rendered image). The field's own description clarifies the value is total tax after non-refundable credits (line 4 minus line 6), inferred from the surrounding arithmetic (line 6 "Total non refundable credits" immediately precedes it, and line 8 "Payments" immediately follows, consistent with a "tax after credits, before payments" position in the return's own flow), while disclosing the verbatim label as printed per this registry's source-fidelity convention.
- Row 3a's flat 10% bracket applies specifically to chargeable commercial farming income (Part H's own "line 1d on this part"), a genuine Lesotho tax-policy fact (a concessional flat rate for farming income ahead of the progressive brackets applied to the rest of chargeable income in rows 3b-3d) rather than an extraction ambiguity — each tax-bracket row's field description transcribes the form's own conditional branching (by residency status and, for the 20%/30% brackets, taxpayer age) verbatim, but this schema does not attempt to encode that branching as executable
crossFieldValidation, matching this registry's established practice of deferring a source's own complex conditional tax-law computation to prose description rather than modeled logic (see the Tunisia IRPP precedent's own deferred minimum-tax-floor computation). - Signature fields are not modeled (only
paidPreparerDate/declarationDate, the accompanying dates), consistent with this registry's standing convention that a physical/wet signature is not a machine-fillable data field. representativePhoneis left unconditionally optional, notrequiredWhen-gated onrepresentativeFullName— the source has no separate yes/no checkbox for "signing on behalf of a legally incapacitated person," so gatingrepresentativePhone's requiredness on another optional string field being non-empty would reproduce this registry's own documentednotEquals-empty-string-against-an-absent-field anti-pattern (notequals-empty-string-absent-field-bug); disclosed in the field's own description instead.- Two
crossFieldValidationrules assert Part H's own copied-forward totals equal their Part A/Part B source values (taxComputationChargeableEmploymentIncome=chargeableEmploymentIncome;taxComputationChargeablePensionIncome=chargeablePensionIncome), reflecting the form's own internal consistency requirement (the filer transcribes the same number into a second box) — Part H's remaining summary lines referencing deferred Parts C/D/E/F/G (1c/1d/1e/1f/5b) have no such cross-check since this schema does not model those parts' own totals.
Conformance
6 mock scenarios exercised against an ephemeral, from-scratch conformance checker (deriving required/requiredWhen/crossFieldValidation rules directly from this schema's own fields[] and crossFieldValidation[], discarded after use, not committed): (1) a full-time resident employee with a single employer, 0 errors; (2) the same taxpayer as a part-year resident with partYearResidentDays supplied, 0 errors; (3) the same part-year-resident scenario with partYearResidentDays omitted, correctly raising exactly 1 requiredWhen error; (4) an employer record with employer1EmployedUntil before employer1EmployedFrom, correctly raising exactly 1 crossFieldValidation error; (5) a Part H taxComputationChargeableEmploymentIncome value deliberately mismatched against Part A's own chargeableEmploymentIncome, correctly raising exactly 1 crossFieldValidation error; (6) a pensioner-only scenario (no employment income), 0 errors.
Validated clean with node tools/validate.mjs and node tools/validate-ajv.mjs (ajv 2020-12, v0.3 meta-schema), individually and as part of the full registry run. registry-index.json regenerated via npm run build-index in tools/govschema-client/.
View the raw record (VERIFICATION.md)
Version history
-
1.0.0draftlatestthis pagehas verification recordschema.json
Independent and non-affiliated
GovSchema is an independent, open-source project. This reference is not produced, reviewed, or endorsed by Revenue Services Lesotho or any government. The authoritative source is always the live government form and its official instructions.