# Verification record — ls/rsl/company-income-tax-return@1.0.0

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/`.
