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

Jurisdiction
Lesotho · national
Version
1.0.0
Verification
draft

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
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

  • substitutedAccountingDate date optional

    Only completed by a company with RSL-approved substituted accounting date (an accounting year-end other than 31 March).

  • companyResidencyStatus enum required

    The 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
  • finalReturn boolean optional

    Ticked when this is the company's final return because it has ceased business. Independent of companyResidencyStatus — the source form allows ticking multiple boxes.

  • companyName string required

    Name of company

    length: 1–300
  • tin string required

    The company's Taxpayer Identification Number, printed as a comb-box field.

    length: 1–20classification: sensitive-pii
  • phone string optional

    Contact telephone number

    length: 1–60
  • email string optional

    Email address

    patternlength: 0–200
  • natureOfBusiness string optional

    Nature of business

    length: 1–300
  • nominatedOfficerNameAndDesignation string required

    The 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

  • manufacturingIncome number optional

    Sales/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–∞
  • manufacturingExpenses number optional

    2. Total Expenses — Manufacturing Income (a)

    range: 0–∞
  • manufacturingNetProfitOrLoss number optional

    3. Current year net profit or loss (line 1-2) — Manufacturing Income (a)

  • farmingIncomeLesotho number optional

    Lesotho-source commercial farming income, including net income from partnerships, trusts, and estates (attach schedule).

    range: 0–∞
  • farmingExpensesLesotho number optional

    2. Total Expenses — Commercial Farming Income (b)

    range: 0–∞
  • farmingNetProfitOrLossLesotho number optional

    3. Current year net profit or loss (line 1-2) — Commercial Farming Income (b)

  • otherBusinessIncomeLesotho number optional

    Lesotho-source business income other than manufacturing or commercial farming, including net business income from partnerships, trusts, and estates (attach schedule).

    range: 0–∞
  • otherBusinessExpensesLesotho number optional

    2. Total Expenses — Other Business Income (c)

    range: 0–∞
  • otherBusinessNetProfitOrLossLesotho number optional

    3. Current year net profit or loss (line 1-2) — Other Business Income (c)

Part D - Chargeable Income (Lesotho-Source)

  • manufacturingIncomeOrLossPartD number optional

    1(a). Enter manufacturing income or loss from Part A, line 3, col. (a)

  • manufacturingLossesBroughtForward number optional

    1(b). Enter manufacturing losses brought forward from prior years

    range: 0–∞
  • chargeableManufacturingIncome number optional

    1(c). Chargeable manufacturing income (1a-1b). If zero or less, enter nil

  • farmingIncomeOrLossLesothoPartD number optional

    2(a). Enter Lesotho-source commercial farming income or loss from Part A, line 3, col. (b)

  • farmingLossesBroughtForwardLesotho number optional

    2(b). Enter Lesotho-source commercial farming losses from prior years

    range: 0–∞
  • chargeableFarmingIncomeLesotho number optional

    2(c). Chargeable commercial farming income (2a-2b). If zero or less, enter nil

  • otherBusinessIncomeOrLossLesothoPartD number optional

    3(a). Enter other Lesotho-source business income or loss from Part A, line 3, col. (c)

  • propertyOtherIncomeOrLossLesothoPartD number optional

    Pass-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.

  • businessPropertyOtherIncomeSumLesotho number optional

    3(c). Add lines 3a and 3b

  • businessPropertyOtherLossesBroughtForwardLesotho number optional

    3(d). Enter Lesotho-source, business, property, and other losses from prior years

    range: 0–∞
  • chargeableBusinessPropertyOtherIncomeLesotho number optional

    3(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

  • taxComputationManufacturingIncome number optional

    1(a). Enter in col. (a) manufacturing income from Part D, line 1c

  • taxComputationManufacturingTax number optional

    1(a). Tax (column (a) * 10%)

    range: 0–∞
  • taxComputationFarmingIncomeLesotho number optional

    1(b). Enter in col. (a) Lesotho-source commercial farming income from Part D, line 2c

  • taxComputationFarmingTaxLesotho number optional

    1(b). Tax (column (a) * 10%)

    range: 0–∞
  • resident109Election boolean optional

    When true, the 40% rate (rather than the standard 25%) applies to taxComputationOtherTaxLesotho. Only relevant to non-resident companies.

  • taxComputationOtherIncomeLesotho number optional

    1(c). Enter in col. (a) Lesotho-source business, property and other income from Part D, line 3e

  • taxComputationOtherTaxLesotho number optional

    1(c). Tax (column (a) * 25% or, under section 109 election, 40%)

    range: 0–∞
  • totalTaxBeforeCreditsIncome number optional

    This 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.

  • totalTaxBeforeCreditsTax number optional

    2. Total tax before credits — column (c): add 1b+1c+1d+1e+1f

    range: 0–∞
  • creditForForeignTaxPaid number optional

    Pass-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–∞
  • incomeTaxWhtPaid number optional

    3(b). Income tax (WHT) paid

    range: 0–∞
  • advanceInstallmentIncomeTaxPaid number optional

    3(c). Advance installment of income tax paid

    range: 0–∞
  • advanceCorporationTaxPayments number optional

    3(d). Advance corporation tax payments

    range: 0–∞
  • totalTaxPaid number optional

    4. Total tax paid. Add 3a+3b+3c+3d

    range: 0–∞
  • taxDue number optional

    5. Tax due. Line 2 minus line 4. Enter nil if less than -0-

    range: 0–∞
  • taxOverpaid number optional

    6. Tax overpaid. Line 4 minus line 2. Enter nil if less than -0-

    range: 0–∞
  • claimingRepaymentOfOverpaidTax boolean optional

    When ticked, proof of banking details from the company's bank must be attached.

Declarations

  • paidPreparerName string optional

    Declaration of Paid Preparer (external tax consultant/accountant/auditor). Skip this section if there is no paid preparer.

    length: 1–300classification: pii
  • paidPreparerDate date optional

    Date (day, month, year) [paid preparer]

  • paidPreparerTin string optional

    TIN of paid preparer

    length: 1–20classification: sensitive-pii
  • paidPreparerFirmName string optional

    Firm's name

    length: 1–300
  • paidPreparerFirmTin string optional

    Firm's TIN

    length: 1–20
  • paidPreparerFirmAddress string optional

    Firm's physical address

    length: 1–300
  • paidPreparerPhone string optional

    Contact telephone number [paid preparer]

    length: 1–60
  • paidPreparerEmail string optional

    Email address [paid preparer]

    patternlength: 0–200classification: pii
  • officerTin string required

    The nominated officer's own Taxpayer Identification Number, distinct from the company's TIN entered in Details of Company.

    length: 1–20classification: sensitive-pii
  • declarationDate date required

    The 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.

  • officerPostalAddress string required

    Postal address of officer (P/Bag or P.O Box)

    length: 1–300classification: pii
  • officerPostalCode string optional

    Postal code

    length: 1–20
  • officerPhone string optional

    Contact telephone number [nominated officer]

    length: 1–60classification: pii
  • officerEmail string optional

    Email address [nominated officer]

    patternlength: 0–200classification: pii
  • previousOfficerChangeDate date optional

    Only 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.

  • previousOfficerName string optional

    Name 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

  1. companyResidencyStatus is modeled as a required enum (resident/non-resident/lesotho-branch-of-non-resident) from the form's own "Tick/circle applicable box(es)" instruction; finalReturn is 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.
  2. 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).
  3. **The 40% non-resident section-109 election* (Part F, item 1c) is modeled as a separate boolean field (resident109Election) rather than folded into companyResidencyStatus, since it is an annual election available only to non-resident companies already captured by that field, not a distinct residency category.
  4. Six crossFieldValidation rules 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.
  5. officerTin is modeled as a distinct field from tin (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.
  6. previousOfficerChangeDate/previousOfficerName are left unconditionally optional, not requiredWhen-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 documented notEquals-empty-string-against-an-absent-field anti-pattern (notequals-empty-string-absent-field-bug); disclosed in previousOfficerChangeDate's own description instead.
  7. 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.
  8. Net profit/loss lines (Part A, line 3, all three columns) carry no minimum constraint, 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.0 draft latest this page has verification record schema.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.