Registry entry
Lesotho — Company Income Tax Return (Form S128-C)
Revenue Services Lesotho's (RSL) Form S128-C, "Company Income Tax Return for Year Ended 31 March 2023" — a companion to ls/rsl/individual-income-tax-return within Lesotho's Taxes vertical (already open, 2 of 6). Resident companies, non-resident companies, and Lesotho branches of non-resident companies use this annual return to reconcile chargeable income (manufacturing, commercial farming, and other business income, plus property, investment, and foreign-source income) and compute tax due or overpaid for the year. This v1.0.0 schema is scoped to the core declaration a Lesotho-resident company with only Lesotho-source business income completes: Details of Company, Part A (Lesotho-Source Business Income & Expenses), Part D (Chargeable Income, Lesotho-source lines only), Part F (Tax Computation), and the Declaration of Paid Preparer / Declaration of Nominated Officer sections. Part B (Foreign-Source Business Income & Expenses), Part C (Property & Other Income and Expenses), Part E (Credit for Foreign Tax Paid), and Part G (Related Parties Transactions Reporting) are out of scope for this version and deferred to a future minor version. 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/company-income-tax-return
Authoritative source FORM S128-C — Company Income Tax Return, Year Ended 31 March 2023
Machine access
- Schema document
registry/ls/rsl/company-income-tax-return/1.0.0/schema.jsonapplication/schema+json- Verification record
registry/ls/rsl/company-income-tax-return/1.0.0/VERIFICATION.mdtext/markdown- Registry catalog
registry/index.jsonone record per schema id
Field reference
62 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.
Details of Company
-
substitutedAccountingDatedate optionalOnly completed by a company with RSL-approved substituted accounting date (an accounting year-end other than 31 March).
-
companyResidencyStatusenum requiredThe company's residency classification for the tax year. Mutually exclusive with the "Lesotho branch of non-resident company" case treated as its own option (a branch is not itself a resident or a standalone non-resident company).
enum: resident | non-resident | lesotho-branch-of-non-resident -
finalReturnboolean optionalTicked when this is the company's final return because it has ceased business. Independent of companyResidencyStatus — the source form allows ticking multiple boxes.
-
companyNamestring requiredName of company
length: 1–300 -
tinstring requiredThe company's Taxpayer Identification Number, printed as a comb-box field.
length: 1–20classification: sensitive-pii -
phonestring optionalContact telephone number
length: 1–60 -
emailstring optionalEmail address
patternlength: 0–200 -
natureOfBusinessstring optionalNature of business
length: 1–300 -
nominatedOfficerNameAndDesignationstring requiredThe individual the company has nominated as responsible officer for this return; this same person signs the Declaration of Nominated Officer.
length: 1–300classification: pii
Part A - Lesotho-Source Business Income & Expenses
-
manufacturingIncomenumber optionalSales/turnover, investments, interest, premiums, gains from business assets, etc., including net business income from partnerships, trusts, and estates (attach schedule). Applicable only to resident companies; non-resident companies and Lesotho branches leave this column blank.
range: 0–∞ -
manufacturingExpensesnumber optional2. Total Expenses — Manufacturing Income (a)
range: 0–∞ -
manufacturingNetProfitOrLossnumber optional3. Current year net profit or loss (line 1-2) — Manufacturing Income (a)
-
farmingIncomeLesothonumber optionalLesotho-source commercial farming income, including net income from partnerships, trusts, and estates (attach schedule).
range: 0–∞ -
farmingExpensesLesothonumber optional2. Total Expenses — Commercial Farming Income (b)
range: 0–∞ -
farmingNetProfitOrLossLesothonumber optional3. Current year net profit or loss (line 1-2) — Commercial Farming Income (b)
-
otherBusinessIncomeLesothonumber optionalLesotho-source business income other than manufacturing or commercial farming, including net business income from partnerships, trusts, and estates (attach schedule).
range: 0–∞ -
otherBusinessExpensesLesothonumber optional2. Total Expenses — Other Business Income (c)
range: 0–∞ -
otherBusinessNetProfitOrLossLesothonumber optional3. Current year net profit or loss (line 1-2) — Other Business Income (c)
Part D - Chargeable Income (Lesotho-Source)
-
manufacturingIncomeOrLossPartDnumber optional1(a). Enter manufacturing income or loss from Part A, line 3, col. (a)
-
manufacturingLossesBroughtForwardnumber optional1(b). Enter manufacturing losses brought forward from prior years
range: 0–∞ -
chargeableManufacturingIncomenumber optional1(c). Chargeable manufacturing income (1a-1b). If zero or less, enter nil
-
farmingIncomeOrLossLesothoPartDnumber optional2(a). Enter Lesotho-source commercial farming income or loss from Part A, line 3, col. (b)
-
farmingLossesBroughtForwardLesothonumber optional2(b). Enter Lesotho-source commercial farming losses from prior years
range: 0–∞ -
chargeableFarmingIncomeLesothonumber optional2(c). Chargeable commercial farming income (2a-2b). If zero or less, enter nil
-
otherBusinessIncomeOrLossLesothoPartDnumber optional3(a). Enter other Lesotho-source business income or loss from Part A, line 3, col. (c)
-
propertyOtherIncomeOrLossLesothoPartDnumber optionalPass-through total from Part C (Property & Other Income and Expenses), which is out of scope for this schema version. A company with such income can still record Part C's own final total here; the detailed schedule build-up is deferred to a future minor version.
-
businessPropertyOtherIncomeSumLesothonumber optional3(c). Add lines 3a and 3b
-
businessPropertyOtherLossesBroughtForwardLesothonumber optional3(d). Enter Lesotho-source, business, property, and other losses from prior years
range: 0–∞ -
chargeableBusinessPropertyOtherIncomeLesothonumber optional3(e). Chargeable Lesotho-source business, property and other income. Subtract line (d) from line (c). If zero or less, enter nil
Part F - Tax Computation
-
taxComputationManufacturingIncomenumber optional1(a). Enter in col. (a) manufacturing income from Part D, line 1c
-
taxComputationManufacturingTaxnumber optional1(a). Tax (column (a) * 10%)
range: 0–∞ -
taxComputationFarmingIncomeLesothonumber optional1(b). Enter in col. (a) Lesotho-source commercial farming income from Part D, line 2c
-
taxComputationFarmingTaxLesothonumber optional1(b). Tax (column (a) * 10%)
range: 0–∞ -
resident109Electionboolean optionalWhen true, the 40% rate (rather than the standard 25%) applies to taxComputationOtherTaxLesotho. Only relevant to non-resident companies.
-
taxComputationOtherIncomeLesothonumber optional1(c). Enter in col. (a) Lesotho-source business, property and other income from Part D, line 3e
-
taxComputationOtherTaxLesothonumber optional1(c). Tax (column (a) * 25% or, under section 109 election, 40%)
range: 0–∞ -
totalTaxBeforeCreditsIncomenumber optionalThis schema models only the Lesotho-source rows (1a-1c); the foreign-source rows (1d-1e) are out of scope (see Part B/Part D section 4 deferral) and assumed nil for a company with no foreign-source income.
-
totalTaxBeforeCreditsTaxnumber optional2. Total tax before credits — column (c): add 1b+1c+1d+1e+1f
range: 0–∞ -
creditForForeignTaxPaidnumber optionalPass-through total from Part E (Credit for Foreign Tax Paid), which is out of scope for this schema version and assumed nil for a company with no foreign-source income.
range: 0–∞ -
incomeTaxWhtPaidnumber optional3(b). Income tax (WHT) paid
range: 0–∞ -
advanceInstallmentIncomeTaxPaidnumber optional3(c). Advance installment of income tax paid
range: 0–∞ -
advanceCorporationTaxPaymentsnumber optional3(d). Advance corporation tax payments
range: 0–∞ -
totalTaxPaidnumber optional4. Total tax paid. Add 3a+3b+3c+3d
range: 0–∞ -
taxDuenumber optional5. Tax due. Line 2 minus line 4. Enter nil if less than -0-
range: 0–∞ -
taxOverpaidnumber optional6. Tax overpaid. Line 4 minus line 2. Enter nil if less than -0-
range: 0–∞ -
claimingRepaymentOfOverpaidTaxboolean optionalWhen ticked, proof of banking details from the company's bank must be attached.
Declarations
-
paidPreparerNamestring optionalDeclaration of Paid Preparer (external tax consultant/accountant/auditor). 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–60 -
paidPreparerEmailstring optionalEmail address [paid preparer]
patternlength: 0–200classification: pii -
officerTinstring requiredThe nominated officer's own Taxpayer Identification Number, distinct from the company's TIN entered in Details of Company.
length: 1–20classification: sensitive-pii -
declarationDatedate requiredThe date the nominated officer signs the declaration that the return is correct and complete, and (if applicable) confirms having ticked the repayment box on Part F, line 6.
-
officerPostalAddressstring requiredPostal address of officer (P/Bag or P.O Box)
length: 1–300classification: pii -
officerPostalCodestring optionalPostal code
length: 1–20 -
officerPhonestring optionalContact telephone number [nominated officer]
length: 1–60classification: pii -
officerEmailstring optionalEmail address [nominated officer]
patternlength: 0–200classification: pii -
previousOfficerChangeDatedate optionalOnly completed when the company changed its nominated officer during the year of assessment. The source form has no separate yes/no checkbox for this scenario, so it is not requiredWhen-gated on previousOfficerName — see this registry's own notEquals-empty-string-absent-field anti-pattern notes.
-
previousOfficerNamestring optionalName of previous nominated officer
length: 1–300classification: pii
Verification record
GOV-4762 ("GovSchema Standard Research"). Per the prior cycle's own recommendation ([[gov4755-ls-rsl-tax-opens-2-6-ghost-text-extraction]]), Lesotho's DMV vertical was screened first this cycle. The Ministry of Public Works and Transport's own site (mopwt.gov.ls) publishes only building/electrical contractor-categorization and roads-policy documents under its "Downloads" section — no driving-licence, vehicle-registration, or Traffic and Transport Department form. gov.ls's own driving-licence e-service page lists requirements/fees/timeline only, with no downloadable application form (matching this registry's Form T.C. 28/T.C. 14, described by third-party sources as "available in the office of Public Works and Transport," i.e. issued in person, not published online). Left as soft backlog, not a hard-confirmed dead end — a future cycle with real browser automation against the Traffic and Transport Department specifically (phone-only contact found this cycle: 22313739) may still turn up an online channel. Pivoted instead to RSL's own disclosed Taxes-vertical backlog (Company Income Tax Return, FBT Return, Income Tax Return for Trusts and Estates), already independently confirmed reachable during the prior cycle's ls/rsl/individual-income-tax-return authoring.
Reaching the live source
Fetched directly: https://www.rsl.org.ls/sites/default/files/2024-07/Company%20Income%20Tax%20Return%202023%20%282%29.pdf, HTTP 200, Content-Type: application/pdf, Content-Length: 317637 (byte-identical to the downloaded file), Last-Modified: Mon, 22 Jul 2024 10:42:43 GMT, sha256 28953225051c61749a395001faba1ae1e96c4dbd58b4dbe21314abf25327cc53, no login/CAPTCHA/WAF gate — linked directly from https://www.rsl.org.ls/forms-and-instructions under "Income Tax Forms", alongside three older editions of the same form (2021 x2, 2022) superseded by this 2023 edition, the FBT Return, and two editions of the Income Tax Return for Trusts and Estates (each a separate future-cycle candidate).
Extraction method
pdfjs-dist (/tmp/node_modules/pdfjs-dist/legacy/build/pdf.js) reports 6 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, matching the individual return's own S128-I). Unlike the individual return's own ghost-text finding (a duplicated/extraneous line in the raw text layer), this specimen's getTextContent() item stream was found consistent with the visual layout on every page used in this schema. All four pages actually modeled (1, 2, 3, 4, and 6) were nonetheless rendered with node-canvas at 2.5x scale and visually cross-checked against the text-derived field list before authoring, per this registry's standing practice of never trusting a flat PDF's text layer alone.
Scoping decision
The source form (FORM S128-C) mirrors the individual return's own structure but for companies: Details of Company, Part A (Lesotho-Source Business Income & Expenses), Part B (Foreign-Source Business Income & Expenses), Part C (Property & Other Income and Expenses), Part D (Chargeable Income, combining A/B/C), Part E (Credit for Foreign Tax Paid, resident companies only), Part F (Tax Computation), Part G (Related Parties Transactions Reporting), and the Declaration of Paid Preparer / Declaration of Nominated Officer sections. Following this registry's established main-form-now/companion-schedules-later precedent, this v1.0.0 schema is scoped to the core declaration a Lesotho-resident company with only Lesotho-source business income completes:
- Details of Company (residency status, final-return flag, identity, contact, nominated officer).
- Part A — Lesotho-Source Business Income & Expenses (manufacturing, commercial farming, other business income, each with expenses and net profit/loss).
- Part D — Chargeable Income, Lesotho-source lines only (1a-3e); the foreign-source lines (section 4, 4a-4h) are excluded.
- Part F — Tax Computation, the six income-source rows collapsed to the three Lesotho-source rows (1a-1c) plus credits/payments/tax due-overpaid.
- Declaration of Paid Preparer and Declaration of Nominated Officer.
Part B (Foreign-Source Business Income & Expenses), Part C (Property & Other Income and Expenses), Part E (Credit for Foreign Tax Paid), and Part G (Related Parties Transactions Reporting) are out of scope for this version. Each is a structurally self-contained parallel schedule affecting only companies with foreign-source income, property/investment income, or related-party dealings — a minority of filers, and each roughly doubling this schema's field count if modeled in full this cycle. Part D's and Part F's own summary lines referencing these deferred parts (Part D line 3b, Part F line 3a) are still modeled as pass-through optional numeric fields with descriptions disclosing which deferred part they correspond to, mirroring the individual return's own treatment of its deferred Parts C-G.
Disclosed findings and interpretation choices
companyResidencyStatusis modeled as a required enum (resident/non-resident/lesotho-branch-of-non-resident) from the form's own "Tick/circle applicable box(es)" instruction;finalReturnis modeled as a separate, independent boolean rather than a fourth enum value, since the form's own plural "box(es)" phrasing and layout (a company can be, e.g., both "Resident company" and "Final return (out of business)" simultaneously) indicate it is not mutually exclusive with residency status, unlike the three residency options themselves.- Manufacturing income (Part A, col. (a)) is restricted to resident companies per the form's own column header ("Manufacturing Income (Resident Companies only)"); this is disclosed in the field's own description rather than modeled as a
requiredWhen/exclusion rule, since the form itself does not prevent a non-resident company from leaving the column blank (there is no error condition to encode, only a scope note). - **The
40%non-resident section-109 election* (Part F, item 1c) is modeled as a separate boolean field (resident109Election) rather than folded intocompanyResidencyStatus, since it is an annual election available only to non-resident companies already captured by that field, not a distinct residency category. - Six
crossFieldValidationrules assert each transcribed total matches its source line: three for Part A's own net-profit-or-loss lines carried into Part D (manufacturingIncomeOrLossPartD,farmingIncomeOrLossLesothoPartD,otherBusinessIncomeOrLossLesothoPartD), and three for Part D's own chargeable-income lines carried into Part F (taxComputationManufacturingIncome,taxComputationFarmingIncomeLesotho,taxComputationOtherIncomeLesotho), reflecting the form's own internal consistency requirement (the filer transcribes the same number into a second, then a third, box). Deferred fields (Part D line 3b, Part F line 3a, and the foreign-source totals) have no such cross-check since this schema does not model the parts that produce those values. officerTinis modeled as a distinct field fromtin(the company's own TIN, entered in Details of Company) — the Declaration of Nominated Officer's own "TIN" box is the individual officer's personal Taxpayer Identification Number, a different identifier class from the company's, confirmed from the rendered image showing both boxes as separate comb-fields in different sections.previousOfficerChangeDate/previousOfficerNameare left unconditionally optional, notrequiredWhen-gated on each other — the source has no separate yes/no checkbox for "nominated officer changed during the year," so gating one optional field's requiredness on another optional 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 inpreviousOfficerChangeDate's own description instead.- Signature fields are not modeled (only the accompanying dates), consistent with this registry's standing convention that a physical/wet signature is not a machine-fillable data field.
- Net profit/loss lines (Part A, line 3, all three columns) carry no
minimumconstraint, since a business can genuinely report a loss for the year; only the underlying income/expense entry lines (Part A lines 1-2) and the "if zero or less, enter nil" chargeable-income lines (Part D, Part F) are constrained or left unconstrained per this registry's existing convention for the individual return's analogous fields.
Conformance
6 mock scenarios exercised against an ephemeral, from-scratch conformance checker (deriving required/requiredWhen/crossFieldValidation rules directly from this schema's own fields[], documents[], and crossFieldValidation[], discarded after use, not committed): (1) a resident manufacturing company with matching Part A → Part D → Part F transcriptions and no overpayment claim, 0 errors; (2) the same company additionally claiming repayment of overpaid tax with proofOfBankingDetails attached, 0 errors; (3) the same claim scenario with proofOfBankingDetails omitted, correctly raising exactly 1 requiredWhen error; (4) a deliberate mismatch between manufacturingIncomeOrLossPartD and manufacturingNetProfitOrLoss, correctly raising exactly 1 crossFieldValidation error; (5) a deliberate mismatch between taxComputationFarmingIncomeLesotho and chargeableFarmingIncomeLesotho, correctly raising exactly 1 crossFieldValidation error; (6) a non-resident company (no manufacturingIncome, companyResidencyStatus = non-resident, resident109Election = true) with only commercial-farming and other-business 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.