Registry entry
Eswatini — Return of Income - Individual (Form IT 12)
The Eswatini Revenue Service's (ERS) Form IT 12, "Return of Income - Individual" (Domestic Taxes Department, Version 2-2022) — opens Eswatini's Taxes vertical (2 of 6: National ID & Civic Documents). Filed under Section 33 of the Income Tax Order, 1975, every individual with income from any source must return that income to the Commissioner General within 120 days of the end of the tax year. This v1.0.0 schema is scoped to the core declaration a typical single/few-source-of-income employee or pensioner taxpayer completes: PART A (Taxpayer Particulars, including bank details for any refund), PART D (Income from Employment — a term the form's own guidelines define to include salary, wages, pension, superannuation allowance, retiring allowance, and similar payments, so this section doubles as the pension-income section), PART E (Benefits from Employment), PART F (Allowable Deductions), PART G (Net Income from Employment), PART N (Tax Computation) together with the "Less Tax Already Paid" block and the resulting Tax Due/Refund Due, and the Declaration/Signature. PART B and PART C (the Statement of Local and Foreign Assets and Liabilities, a net-worth disclosure unrelated to the taxable-income computation), PART H (Other Receipts and Accruals — directors' fees, deemed foreign income, royalties, income received on behalf of minor children), PART I through PART L (the multi-column Local Farming, Business, Trade and Professional Income schedule together with its Adjustments and Determination-of-Profit/Loss companions), PART M (Amounts Considered Non-Taxable), and PART O (Income Already Taxed/Non-Taxable Income — lump sums, dividends, interest, exempt and foreign-source income) 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. PART N's own summary lines that reference PART H (line 99) and the aggregate of PART I-L (line 100) are still modeled as pass-through optional numeric fields, since a taxpayer with such income can record the schedule's own final total even though this schema does not yet walk through how that total is derived. GovSchema is an independent, non-profit standards body and is not affiliated with, endorsed by, or operated by the Kingdom of Eswatini or the Eswatini Revenue Service.
Registry entry
sz/ers/return-of-income-individual
Authoritative source Form IT 12 — Return of Income - Individual, Domestic Taxes Department, Eswatini Revenue Service (Version 2-2022)
Machine access
- Schema document
registry/sz/ers/return-of-income-individual/1.0.0/schema.jsonapplication/schema+json- Verification record
registry/sz/ers/return-of-income-individual/1.0.0/VERIFICATION.mdtext/markdown- Registry catalog
registry/index.jsonone record per schema id
Field reference
90 fields across 7 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.
Part A - Taxpayer Particulars
-
tinstring requiredThe taxpayer's Taxpayer Identification Number.
length: 1–20classification: sensitive-pii -
taxYearstring requiredThe year of assessment this return covers.
length: 1–20 -
surnamestring requiredSurname
length: 1–150classification: pii -
givenNamesstring requiredThe taxpayer's given name(s), printed as "Name" beneath "Surname" on the source form.
length: 1–150classification: pii -
gradedTaxNumberstring optionalThe taxpayer's Graded Tax reference number, where applicable.
length: 1–30 -
personalIdNumberstring requiredThe taxpayer's national identity document number.
length: 1–30classification: sensitive-pii -
residentialAddressstring requiredResidential Address
length: 1–400classification: pii -
postalAddressstring optionalPostal Address
length: 1–400classification: pii -
emailAddressstring optionalEmail Address
patternlength: 0–200classification: pii -
contactWorkstring optionalContacts: Work
length: 1–60classification: pii -
contactCellstring optionalCell
length: 1–60classification: pii -
contactHomestring optionalContacts: Home
length: 1–60classification: pii -
contactFaxstring optionalFax
length: 1–60classification: pii -
bankNamestring optionalFor receipt of any refund due. The source prints two blank lines under "Name of Bank"; this is the first.
length: 1–200 -
bankNameLine2string optionalThe second of two blank lines the source prints under "Name of Bank".
length: 1–200 -
bankBranchstring optionalBank Details: Branch
length: 1–200 -
bankBranchCodestring optionalBank Details: Branch Code
length: 1–30 -
accountHolderNamestring optionalThe source prints two blank lines under "Account Holder"; this is the first.
length: 1–200classification: pii -
accountHolderNameLine2string optionalThe second of two blank lines the source prints under "Account Holder".
length: 1–200classification: pii -
accountTypestring optionalBank Details: Account Type
length: 1–60 -
accountNumberstring optionalBank Details: Account Number
length: 1–40classification: sensitive-pii -
detailsChangedSinceLastReturnboolean optionalTrue if any of the Taxpayer Particulars or Bank Details above have changed since the taxpayer's last return. The source PDF's own radio-button export values are the generic "Choice1"/"Choice2" rather than semantic Yes/No strings; boolean true is mapped to the YES option (printed first/left of the two), per this schema's own visual-position reading of the source.
Part D - Income from Employment
-
employer1Namestring optionalRow 1 of up to 7 printed rows (lines 24-30) in the Income from Employment table. The source form's own guidelines define "employment income" broadly to include salary, wages, overtime, leave pay, bonus, gratuity, commission, fee, emolument, pension, superannuation allowance, honorarium, retiring allowance, and stipend — so this table also captures pension income, which this form does not break out into a separate part. Refer to Form PAYE 05/IRP5 for supporting detail.
length: 1–300 -
employer1Tinstring optionalEmployer's TIN Number (row 1)
length: 1–20 -
employer1GrossIncomenumber optionalEmalangeni only, no cents.
range: 0–∞ -
employer1TaxDeductednumber optionalEmalangeni only, no cents.
range: 0–∞ -
employer2Namestring optionalName of Employer (row 2)
length: 1–300 -
employer2Tinstring optionalEmployer's TIN Number (row 2)
length: 1–20 -
employer2GrossIncomenumber optionalGross Amount (row 2)
range: 0–∞ -
employer2TaxDeductednumber optionalTax Deducted (row 2)
range: 0–∞ -
employer3Namestring optionalName of Employer (row 3)
length: 1–300 -
employer3Tinstring optionalEmployer's TIN Number (row 3)
length: 1–20 -
employer3GrossIncomenumber optionalGross Amount (row 3)
range: 0–∞ -
employer3TaxDeductednumber optionalTax Deducted (row 3)
range: 0–∞ -
employer4Namestring optionalName of Employer (row 4)
length: 1–300 -
employer4Tinstring optionalEmployer's TIN Number (row 4)
length: 1–20 -
employer4GrossIncomenumber optionalGross Amount (row 4)
range: 0–∞ -
employer4TaxDeductednumber optionalTax Deducted (row 4)
range: 0–∞ -
employer5Namestring optionalName of Employer (row 5)
length: 1–300 -
employer5Tinstring optionalEmployer's TIN Number (row 5)
length: 1–20 -
employer5GrossIncomenumber optionalGross Amount (row 5)
range: 0–∞ -
employer5TaxDeductednumber optionalTax Deducted (row 5)
range: 0–∞ -
employer6Namestring optionalName of Employer (row 6)
length: 1–300 -
employer6Tinstring optionalEmployer's TIN Number (row 6)
length: 1–20 -
employer6GrossIncomenumber optionalGross Amount (row 6)
range: 0–∞ -
employer6TaxDeductednumber optionalTax Deducted (row 6)
range: 0–∞ -
employer7Namestring optionalName of Employer (row 7)
length: 1–300 -
employer7Tinstring optionalEmployer's TIN Number (row 7)
length: 1–20 -
employer7GrossIncomenumber optionalGross Amount (row 7)
range: 0–∞ -
employer7TaxDeductednumber optionalTax Deducted (row 7)
range: 0–∞ -
totalEmploymentGrossIncomenumber optional31. Total Employment Income/PAYE — Gross Amount (Sum of lines 24 to 30)
range: 0–∞ -
totalEmploymentTaxDeductednumber optional31. Total Employment Income/PAYE — Tax Deducted (Sum of lines 24 to 30)
range: 0–∞
Part E - Benefits from Employment
-
freeOrSubsidizedHousingBenefitnumber optional32. Free or subsidized housing
range: 0–∞ -
privateUseOfMotorVehicleBenefitnumber optional33. Private use of motor vehicle / motor vehicle allowance
range: 0–∞ -
provisionOfUtilitiesBenefitnumber optional34. Provision of utilities
range: 0–∞ -
educationalBenefitnumber optional35. Educational benefit
range: 0–∞ -
otherBenefitsnumber optional36. Other (attach schedule)
range: 0–∞ -
totalBenefitsnumber optional37. Total Benefits (Sum of lines 32 to 36)
range: 0–∞ -
totalEmploymentIncomeIncludingBenefitsnumber optional38. Total Employment Income Including Benefits (Line 31 + 37)
range: 0–∞
Part F - Allowable Deductions
-
pensionFundContributionsnumber optionalFor employees, an amount not exceeding 10% of the pensionable salary (15% for Members of Parliament and Designated Office Bearers), per the source form's own guidelines.
range: 0–∞ -
snpfContributionsnumber optionalEswatini National Provident Fund contributions; only statutory contributions as prescribed by the Fund are allowed, per the source form's own guidelines.
range: 0–∞ -
retirementAnnuityFundContributionsnumber optionalTotal allowable contribution shall not exceed 15% of taxable income, reduced by any pension fund contributions, per the source form's own guidelines.
range: 0–∞ -
alimonyOrMaintenancePaidnumber optional42. Alimony or maintenance (attach a certified copy of Court Order)
range: 0–∞ -
otherDeductionsnumber optional43. Other (Furnish particulars)
range: 0–∞ -
totalDeductionsnumber optional44. Total Deductions (Sum of lines 39 to 43)
range: 0–∞
Part G - Net Income from Employment
-
netEmploymentIncomenumber optional45. Net Employment Income (Line 38 - 44)
Part N - Tax Computation and Payments
-
netEmploymentIncomeForTaxComputationnumber optionalCopied forward from Part G, line 45, into the Tax Computation.
-
otherReceiptsAndAccrualsnumber optionalCorresponds to Part H (Other Receipts and Accruals — directors' fees, deemed foreign income, royalties, income received on behalf of minor children), 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 such income.
range: 0–∞ -
businessIncomeAggregatenumber optionalCorresponds to Part I through Part L (Local Farming, Business, Trade and Professional Income and its Adjustments/Determination-of-Profit-or-Loss companions), 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 such income.
range: 0–∞ -
taxableIncomeForYearnumber optional101. Taxable Income for the Year (Sum of Lines 98 to 100)
range: 0–∞ -
taxOnFirstThresholdnumber optionalThe upper bound (in Emalangeni) of the lowest tax bracket applied in this computation; printed on the source form with a default of "0", consistent with the current Rates of Normal Tax table, whose first bracket (E0 - E100,000) is taxed at a flat 20% with no fixed base amount.
range: 0–∞ -
taxOnFirstAmountnumber optional102. Tax on the first ___ — Amount
range: 0–∞ -
taxOnBalanceOfAmountnumber optionalThe portion of taxable income above taxOnFirstThreshold, taxed at the applicable marginal rate from the Rates of Normal Tax table.
range: 0–∞ -
taxOnBalanceRatenumber optionalThe marginal tax rate (percent) applied to taxOnBalanceOfAmount; printed on the source form with a default of 20, the rate applicable to the current first bracket (E0 - E100,000).
range: 0–100 -
taxOnBalanceAmountnumber optional103. Tax on the balance of ___ at ___% — Amount
range: 0–∞ -
totalTaxAssessednumber optional104. Total Tax Assessed (Line 102 + 103)
range: 0–∞ -
primaryRebatenumber optionalApplicable to all natural persons, per the source form's own "Rebates" guidance (rebate 1). The source PDF's own field carries a default value of 8,200.00.
range: 0–∞ -
secondaryRebatenumber optionalApplicable only to persons aged 60 years and above, per the source form's own "Rebates" guidance (rebate 2).
range: 0–∞ -
mortgageInterestCreditnumber optionalClaimable only for the principal private residence of the taxpayer, per the source form's own "Rebates" guidance (rebate 3). Requires an attached bank statement and proof of residence.
range: 0–2400 -
lifeInsuranceCreditnumber optional10% of Life Accident Insurance Premiums paid, 10% of Approved Provident Fund (excluding S.N.P.F.) or Benefit Fund contributions, and 10% of unemployment insurance, combined and limited to E360.00.
range: 0–360 -
totalTaxCreditsnumber optional105. Total Tax Credits (Sum of Line 104A)
range: 0–∞ -
taxPayablenumber optional106. Tax Payable (Line 104 - 105)
range: 0–∞ -
payePaidnumber optionalCopied forward from Part D, line 31 (totalEmploymentTaxDeducted).
range: 0–∞ -
foreignTaxCreditsnumber optional108. Foreign Tax Credits (certificate & attach proof of payment)
range: 0–∞ -
provisionalTaxPaidnumber optional109. Provisional Tax Paid
range: 0–∞ -
taxWithheldnumber optional110. Tax Withheld (i.e. on rental income/construction contracts. Attach certificate)
range: 0–∞ -
totalTaxAlreadyPaidnumber optional111. Total tax already paid (Sum of lines 107 to 110)
range: 0–∞ -
taxDueOrRefundDuenumber optionalPositive when tax is due; negative when a refund is due to the taxpayer.
Declaration
-
signaturestring requiredThe taxpayer's own signature, attesting to the Declaration that the information furnished in this return is true and correct, that all income has been disclosed in full, and that supporting receipts and records are retained and available for inspection.
classification: pii -
declarationDatedate requiredDate
Verification record
GOV-4790 ("GovSchema Standard Research"). GOV-4783 opened Eswatini as the registry's 99th jurisdiction via the Elections and Boundaries Commission's Special Voting application (National ID & Civic Documents, 1 of 6), and its own notes flagged the Eswatini Revenue Service's forms library as a live, unauthenticated candidate for a future cycle. This cycle followed up on that lead directly rather than re-scouting: ers.org.sz publishes an "IncomeForms" page listing its Domestic Taxes forms; the page is a Next.js app whose form table only renders after JS hydration (plain curl returns an empty shell), but row 23, "Return of Income - Individual" (category "Income Tax", 7.85mb, "Individual income tax return"), links a working DOWNLOAD button straight to a PDF with no login/CAPTCHA gate on the file itself.
Reaching the live source
Fetched directly: https://www.ers.org.sz:8000/form-files/1713854893090-Individual_Income_Tax_Return_Editable_2022.pdf, HTTP 200, Content-Type: application/pdf, Content-Length: 8230988 (byte-identical to the downloaded file), Last-Modified: Mon, 14 Oct 2024 07:35:15 GMT, sha256 e4a72dec8907da44956ff527b61fef645efae3b45ad1fa55659fa35719c88b24. The site's TLS certificate does not validate cleanly (curl -skI / NODE_TLS_REJECT_UNAUTHORIZED=0 is required to reach it) — a genuine certificate misconfiguration on ERS's own port-8000 form-file host, not a bot-block or WAF, and not treated as a reason to distrust the document's own provenance since the URL, content type, and size all corroborate the file linked from the human-facing IncomeForms page.
Extraction method
pdfjs-dist (/tmp/node_modules/pdfjs-dist/legacy/build/pdf.js) reports 11 pages. getFieldObjects() returns 446 raw field objects, confirming a genuine AcroForm PDF (not flat) — but, matching this registry's now-familiar all-raw-field-names-meaningless pattern (first hit on ba/purs/annual-income-tax-return, GOV-4727), almost every field name is a meaningless auto-generated one (Text2, Text7.15, Group5, etc.) with no /TU tooltip text to recover a label from. A handful of fields on the Tax Computation page (BusinessIncome, TaxableIncome, firstBracket, percentage, etc.) do carry semantic names, suggesting this "Editable 2022" edition of the form had that one section's fields manually renamed by ERS at some point — but the overwhelming majority of the 446 fields remain auto-named, so semantic names could not be relied on in general.
Every field used in this schema was resolved by rendering each of the 11 pages with node-canvas (2.2x scale, standardFontDataUrl pointed at pdfjs-dist's own bundled standard_fonts/ directory — omitting it silently produces blank/unrendered glyphs, a distinct node-canvas failure mode from the checkbox-glyph and reading-order issues this registry has hit before), then overlaying each field's own rect/page from getFieldObjects() as a labeled red box on top of the rendered page image and visually reading which printed label each box sits beside. This let every field be identified unambiguously by position rather than by name, including disambiguating rows within repeating tables (e.g. the 7-row employer table on page 2, where the raw names Text8.0, Text9, Text8.1, Text8.2... do not sort in row order and had to be resolved by each widget's own y-coordinate). The PDF's own internal field names are not used anywhere as this schema's field ids.
Document structure
Page 1: header (Eswatini Revenue Service, Domestic Taxes Department letterhead) and form number "IT 12"; PART A - Taxpayer Particulars (TIN, Tax Year, Surname, Name, Graded Tax Number, Personal ID Number, Residential/Postal Address, Email, Contacts: Work/Home/Cell/Fax, Bank Details, a Yes/No "changed since your last return?" toggle, and a Commission/staff-only "FOR OFFICIAL USE: SME/LTU" box). Page 2: PART B - Statement of Local Assets and Liabilities (lines 1-20, a single-column net-worth schedule); PART C - Statement of Foreign Assets and Liabilities (lines 21-23); PART D - Income from Employment (lines 24-31, a 7-row x 4-column table: employer name, employer TIN, gross amount, tax deducted). Page 3: PART E - Benefits from Employment (lines 32-38); PART F - Allowable Deductions (lines 39-44); PART G - Net Income from Employment (line 45); PART H - Other Receipts and Accruals (lines 46-51, including a 5-row Directors' Fees sub-table). Page 4: PART I - Local Farming, Business, Trade and Professional Income (lines 52-76, a 5-column schedule: Partnership / Rental Income / Business 3 / Business 4 / Business 5, each with its own Turnover, Cost of Sales, and an 18-line expenditure breakdown); PART J - Adjustments: Add Back (lines 77-85, same 5 columns). Page 5: PART K - Adjustments: Allowable (lines 86-89, same 5 columns) plus a partnership Yes/No toggle and profit-share percentage; PART L - Determination of Profit/Loss (lines 90-92, same 5 columns); PART M - Amounts Considered Non-Taxable (lines 93-97); PART N - Tax Computation (lines 98-106, including the two-line "Tax on the first ___ / Tax on the balance of ___ at ___%" bracket computation and the 104A Less Tax Credit sub-block: Primary Rebate, Secondary Rebate, Mortgage Interest, Life Accident Insurance/Provident Fund/Unemployment Insurance). Page 6: "Less Tax Already Paid" (lines 107-111: PAYE, Foreign Tax Credits, Provisional Tax Paid, Tax Withheld) and Tax Due/Refund Due (line 112); PART O - Income Already Taxed/Non Taxable Income (lines 113-119: lump sum receipts, dividend income, interest income, exempt income, foreign source income); DECLARATION (attestation prose, Signature, Date). Pages 7-11 are non-fillable prose: "Guidelines for filling in the Income tax Returns (Individuals) - IT12", walking through each Part, followed by Annexure A (Deemed Foreign Income), the current Rates of Normal Tax table and Rebates notes, and Annexure B (Income Already Taxed/Non Taxable Income) — no additional fillable fields appear on these pages, confirmed both from getFieldObjects() (no field rects on pages 7-11) and from rendering them directly.
Scoping decision
The source form is a genuinely large return: 446 raw AcroForm fields across 11 pages, covering a net-worth statement, employment income, a five-column business/farming/rental income schedule with its own add-back and allowable-adjustment companions, a non-taxable-amounts statement, the tax computation itself, and an already-taxed/non-taxable-income disclosure. Following this registry's established main-form-now/companion-schedules-later precedent (e.g. ls/rsl/individual-income-tax-return, tn/dgi/irpp-declaration), this v1.0.0 schema is scoped to the core declaration a typical single/few-source-of-income employee or pensioner taxpayer completes in full:
- PART A — Taxpayer Particulars, including bank details (for any refund) and the "changed since last return" toggle.
- PART D — Income from Employment. The source form's own guidelines (page 8) define "employment income" broadly enough to include "pension, superannuation allowance, ... retiring allowance" — this Eswatini form does not break pension income out into its own Part the way Lesotho's S128-I does, so PART D is modeled as covering both.
- PART E — Benefits from Employment and PART F — Allowable Deductions.
- PART G — Net Income from Employment.
- PART N — Tax Computation, together with the "Less Tax Already Paid" block and the resulting Tax Due/Refund Due, and the Declaration/Signature.
PART B and PART C (the Statement of Local/Foreign Assets and Liabilities) are out of scope: this is a net-worth disclosure that is never referenced anywhere in PART N's own tax computation, so it can be deferred cleanly with no pass-through field needed. PART H (Other Receipts and Accruals — directors' fees, deemed foreign income, royalties, minor-children income) and PART I through PART L (the five-column Local Farming/Business/Trade/Professional Income schedule and its Adjustments/Determination-of-Profit-or-Loss companions) are likewise out of scope, but since PART N's own lines 99 and 100 explicitly copy forward PART H's and PART L's own final totals, this schema keeps otherReceiptsAndAccruals and businessIncomeAggregate as pass-through optional numeric fields — a taxpayer with such income can still record the schedule's own bottom-line total even though this schema does not yet model how that total is derived. PART M (Amounts Considered Non-Taxable) and PART O (Income Already Taxed/Non-Taxable Income) are also out of scope: neither is referenced by PART N's own computation, so both are deferred entirely with no pass-through.
Disclosed findings and interpretation choices
- The 7-row employer table (PART D, lines 24-30) is modeled at its own full printed capacity, not artificially bounded to fewer slots — unlike the Lesotho sibling's 3-employer cap, this Eswatini form itself prints 7 rows with no "if more than N, attach a list" overflow instruction, so this schema follows the form's own printed capacity exactly (this registry's established bounded-slot convention, applied here to a larger bound).
- PART D's raw field names do not sort in row order (
Text8.0,Text9,Text8.1,Text8.2,Text8.3,Text8.4,Text8.5for the 7 "Name of Employer" cells, in that literal naming sequence) — row assignment was recovered strictly from each widget's own y-coordinate via the rendered-page overlay, not from the names themselves. - PART N's two-line bracket computation (lines 102-103, "Tax on the first ___" / "Tax on the balance of ___ at ___%") is modeled as five separate numeric fields (
taxOnFirstThreshold,taxOnFirstAmount,taxOnBalanceOfAmount,taxOnBalanceRate,taxOnBalanceAmount) rather than as an executable multi-bracket formula. The source PDF's own fields default to0/0.00/20, consistent with the current Rates of Normal Tax table (Annexure, page 10) whose first bracket (E0–E100,000) is a flat 20% with no fixed base amount — this schema transcribes the form's own two-line manual-computation design (used by the filer to record whichever bracket boundary and rate actually applies) rather than reimplementing Eswatini's four-bracket schedule ascrossFieldValidation, matching this registry's established practice of deferring a source's own complex conditional tax-law computation to prose description (see the Lesotho sibling's own tax-bracket rows, and the Tunisia IRPP precedent's deferred minimum-tax-floor computation). primaryRebate's source PDF field carries a live default value of8,200.00(visible in the rendered page even before any values are entered), matching the Rebates note that the Primary Rebate applies to all natural persons;secondaryRebate(60+ only),mortgageInterestCredit(limited to E2,400, principal private residence only), andlifeInsuranceCredit(limited to E360) carry no such default and are modeled as ordinary optional numeric fields withmaximumset to each rebate's own printed cap.- Three
requiredWhen greaterThan 0document gates were added for conditional attachments printed directly on the form face:courtOrderForAlimony(PART F line 42, "attach a certified copy of Court Order"),mortgageInterestSupport(PART N line 104A, "attach bank statement and proof of residence"),foreignTaxCreditCertificateandtaxWithheldCertificate(Less Tax Already Paid, lines 108 and 110, each printed with its own "attach ..." instruction) — all using the Condition grammar'sgreaterThanoperator against a numeric field rather than a boolean/enum gate, since none of these lines has its own separate yes/no tick box.otherBenefitsSchedule(PART E line 36, "Other (attach schedule)") is gated the same way; PART F's own line 43 ("Other (Furnish particulars)") uses softer language than "attach schedule" and is not given a document entry, since the form only asks the taxpayer to describe the item, not attach a separate document. employerTaxCertificates(Form PAYE 05/IRP5) is modeled as an unconditionally optional, notrequiredWhen-gated, supporting document, since PART D's own printed instruction ("Please refer to form PAYE 05 / IRP5") is a reference note rather than a conditional "attach" instruction tied to a specific field value.detailsChangedSinceLastReturnis modeled as a boolean. The source PDF's own YES/NO radio-button pair (Group5) carries the generic auto-generated export valuesChoice1/Choice2rather than semantic strings; booleantrueis mapped to the YES option (printed first/left of the two, per the rendered page), consistent with reading widget position rather than trusting an auto-generated export-value string.- The "FOR OFFICIAL USE: SME/LTU" box (page 1) and the PART K "Are you in a partnership?" toggle plus profit-share percentage (page 5) are both out of scope — the first is completed by ERS staff after submission (not an applicant-facing field, matching this registry's standing convention); the second belongs entirely to the deferred PART K business schedule.
- Two
crossFieldValidationrules assert PART N's own copied-forward totals equal their PART D/PART G source values (netEmploymentIncomeForTaxComputation=netEmploymentIncome;payePaid=totalEmploymentTaxDeducted), reflecting the form's own internal consistency requirement that the filer transcribe the same figure into a second box, mirroring the Lesotho sibling's identical pattern. - Signature is modeled as a plain required string field (not a file/image upload), consistent with this registry's standing convention that a physical/wet signature line on a paper-style form is a machine-fillable data field, not a document attachment.
Conformance
23 fixtures 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 full-time single-employer taxpayer with tax due, 0 errors; (2) a 60-and-over pensioner (via PART D, per the form's own broad definition of employment income) claiming the Secondary Rebate with a refund due, 0 errors; (3)/(3b) otherBenefits > 0 without/with the otherBenefitsSchedule document attached, exactly 1 document-required error then 0; (4)/(4b) alimonyOrMaintenancePaid > 0 without/with courtOrderForAlimony, exactly 1 then 0; (5)/(5b) mortgageInterestCredit > 0 without/with mortgageInterestSupport, exactly 1 then 0; (6)/(6b) foreignTaxCredits > 0 without/with foreignTaxCreditCertificate, exactly 1 then 0; (7)/(7b) taxWithheld > 0 without/with taxWithheldCertificate, exactly 1 then 0; (8) netEmploymentIncomeForTaxComputation deliberately mismatched against netEmploymentIncome, exactly 1 cross-field error; (9) payePaid deliberately mismatched against totalEmploymentTaxDeducted, exactly 1 cross-field error; (10) an unknown field, exactly 1 unknown-field error; (11) each of this schema's 8 required: true fields (tin, taxYear, surname, givenNames, personalIdNumber, residentialAddress, signature, declarationDate) individually mutated to absent against scenario (1), each confirmed to raise exactly 1 required error. All 23 fixtures passed.
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 662-document registry run.
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 Eswatini Revenue Service or any government. The authoritative source is always the live government form and its official instructions.