Registry entry

Cambodia Return for Tax on Salary (Form TOS 01)

File Cambodia's monthly Tax on Salary return with the General Department of Taxation (GDT), per Form TOS 01 ("Return for Tax on Salary", update 17/01/2018). Tax on Salary is Cambodia's payroll withholding tax, assessed monthly by every registered enterprise on salary paid to its employees; this return declares the enterprise's tax base and computes the tax due separately for resident employees (progressive brackets: 0%, 5%, 10%, 15%, 20%), non-resident employees (flat 20%), and taxable fringe benefits (flat 20%). It is a companion sibling to the already-published kh/gdt/monthly-vat-return, kh/gdt/monthly-tax-declaration, and kh/gdt/patent-tax-return schemas, all on the same unauthenticated tax.gov.kh channel and sharing the same taxpayer-identification header layout as kh/gdt/monthly-vat-return. This schema models the return's own page 1 in full: the filing period, taxpayer identification and address, the resident-employee bracket computation table (Table I, five rate rows plus their total), the non-resident-employee computation (Table II), the fringe-benefit computation (Table III), the resulting total tax due, and the filing declaration (place, date). Out of scope, and disclosed rather than silently omitted: the form's own page 2, a per-employee "Details" schedule (name, nationality, function, salary, dependents, and tax computation for individual resident and non-resident/fringe-benefit employees) that the form's own instruction says to continue onto separate sheets when space is insufficient — a supporting annex to, not a required part of, the page-1 return this schema models, the same treatment this registry gave kh/gdt/monthly-vat-return's own page-2 invoice-level annex and kh/gdt/patent-tax-return's page-3 continuation annex. GovSchema is independent and is not affiliated with, endorsed by, or operated by the Kingdom of Cambodia or the General Department of Taxation.

Registry entry

kh/gdt/tax-on-salary-return

Jurisdiction
Cambodia · national
Version
1.0.0
Verification
draft

Authoritative source Form TOS 01 — Return for Tax on Salary (update 17/01/2018)

Machine access

Schema document
registry/kh/gdt/tax-on-salary-return/1.0.0/schema.jsonapplication/schema+json
Registry catalog
registry/index.jsonone record per schema id

Field reference

59 fields, 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.

Fields

  • periodFromDate date required

    First day of the period covered by this return.

  • periodToDate date required

    Last day of the period covered by this return.

  • taxIdentificationNumber string required

    The enterprise's 9-digit Tax Identification Number.

    patternclassification: sensitive-pii
  • enterpriseName string required

    The registered name of the enterprise filing this return.

    length: 1–300
  • businessActivities string required

    Description of the enterprise's business activities.

    length: 1–300
  • addressHouseNumber string required

    House or building number of the enterprise's address.

    length: 1–100
  • addressStreet string required

    Street of the enterprise's address.

    length: 1–200
  • addressGroup string required

    Group (Krom) of the enterprise's address.

    length: 1–100
  • addressVillage string required

    Village of the enterprise's address.

    length: 1–100
  • addressSangkat string required

    Sangkat (commune) of the enterprise's address.

    length: 1–100
  • addressDistrict string required

    District (Khan) of the enterprise's address.

    length: 1–100
  • addressMunicipality string required

    Municipality/province of the enterprise's address.

    length: 1–100
  • faxOrPhone string required

    Fax or telephone number for the enterprise.

    length: 1–30classification: pii
  • email string required

    Email address for the enterprise.

    patternlength: 0–200classification: pii
  • residentEmployeesCountRate0Pct integer optional

    Number of resident employees whose salary falls in the 0% tax bracket (taxed at the fixed 0% bracket rate).

    range: 0–∞
  • residentSalaryPaidRate0Pct number optional

    Total salary paid to resident employees in the 0% bracket, in Cambodian riel (KHR).

    range: 0–∞
  • residentSpouseCountRate0Pct integer optional

    Number of dependent spouses declared by resident employees in the 0% bracket.

    range: 0–∞
  • residentMinorChildrenCountRate0Pct integer optional

    Number of dependent minor children declared by resident employees in the 0% bracket.

    range: 0–∞
  • residentTaxCalculationBaseRate0Pct number optional

    Tax on salary calculation base for the 0% bracket, per the form's own formula E = B – [(C + D) x 150,000]: salary to be paid, minus the combined spouse/minor-children count times 150,000 riel each.

    range: 0–∞
  • residentTaxOnSalaryRate0Pct number optional

    Tax on salary due for resident employees in the 0% bracket, in Cambodian riel (KHR).

    range: 0–∞
  • residentEmployeesCountRate5Pct integer optional

    Number of resident employees whose salary falls in the 5% tax bracket (taxed at the fixed 5% bracket rate).

    range: 0–∞
  • residentSalaryPaidRate5Pct number optional

    Total salary paid to resident employees in the 5% bracket, in Cambodian riel (KHR).

    range: 0–∞
  • residentSpouseCountRate5Pct integer optional

    Number of dependent spouses declared by resident employees in the 5% bracket.

    range: 0–∞
  • residentMinorChildrenCountRate5Pct integer optional

    Number of dependent minor children declared by resident employees in the 5% bracket.

    range: 0–∞
  • residentTaxCalculationBaseRate5Pct number optional

    Tax on salary calculation base for the 5% bracket, per the form's own formula E = B – [(C + D) x 150,000]: salary to be paid, minus the combined spouse/minor-children count times 150,000 riel each.

    range: 0–∞
  • residentTaxOnSalaryRate5Pct number optional

    Tax on salary due for resident employees in the 5% bracket, in Cambodian riel (KHR).

    range: 0–∞
  • residentEmployeesCountRate10Pct integer optional

    Number of resident employees whose salary falls in the 10% tax bracket (taxed at the fixed 10% bracket rate).

    range: 0–∞
  • residentSalaryPaidRate10Pct number optional

    Total salary paid to resident employees in the 10% bracket, in Cambodian riel (KHR).

    range: 0–∞
  • residentSpouseCountRate10Pct integer optional

    Number of dependent spouses declared by resident employees in the 10% bracket.

    range: 0–∞
  • residentMinorChildrenCountRate10Pct integer optional

    Number of dependent minor children declared by resident employees in the 10% bracket.

    range: 0–∞
  • residentTaxCalculationBaseRate10Pct number optional

    Tax on salary calculation base for the 10% bracket, per the form's own formula E = B – [(C + D) x 150,000]: salary to be paid, minus the combined spouse/minor-children count times 150,000 riel each.

    range: 0–∞
  • residentTaxOnSalaryRate10Pct number optional

    Tax on salary due for resident employees in the 10% bracket, in Cambodian riel (KHR).

    range: 0–∞
  • residentEmployeesCountRate15Pct integer optional

    Number of resident employees whose salary falls in the 15% tax bracket (taxed at the fixed 15% bracket rate).

    range: 0–∞
  • residentSalaryPaidRate15Pct number optional

    Total salary paid to resident employees in the 15% bracket, in Cambodian riel (KHR).

    range: 0–∞
  • residentSpouseCountRate15Pct integer optional

    Number of dependent spouses declared by resident employees in the 15% bracket.

    range: 0–∞
  • residentMinorChildrenCountRate15Pct integer optional

    Number of dependent minor children declared by resident employees in the 15% bracket.

    range: 0–∞
  • residentTaxCalculationBaseRate15Pct number optional

    Tax on salary calculation base for the 15% bracket, per the form's own formula E = B – [(C + D) x 150,000]: salary to be paid, minus the combined spouse/minor-children count times 150,000 riel each.

    range: 0–∞
  • residentTaxOnSalaryRate15Pct number optional

    Tax on salary due for resident employees in the 15% bracket, in Cambodian riel (KHR).

    range: 0–∞
  • residentEmployeesCountRate20Pct integer optional

    Number of resident employees whose salary falls in the 20% tax bracket (taxed at the fixed 20% bracket rate).

    range: 0–∞
  • residentSalaryPaidRate20Pct number optional

    Total salary paid to resident employees in the 20% bracket, in Cambodian riel (KHR).

    range: 0–∞
  • residentSpouseCountRate20Pct integer optional

    Number of dependent spouses declared by resident employees in the 20% bracket.

    range: 0–∞
  • residentMinorChildrenCountRate20Pct integer optional

    Number of dependent minor children declared by resident employees in the 20% bracket.

    range: 0–∞
  • residentTaxCalculationBaseRate20Pct number optional

    Tax on salary calculation base for the 20% bracket, per the form's own formula E = B – [(C + D) x 150,000]: salary to be paid, minus the combined spouse/minor-children count times 150,000 riel each.

    range: 0–∞
  • residentTaxOnSalaryRate20Pct number optional

    Tax on salary due for resident employees in the 20% bracket, in Cambodian riel (KHR).

    range: 0–∞
  • residentEmployeesCountTotal integer optional

    Number of resident employees whose salary falls in the Total tax bracket (the summed total across all five bracket rows above).

    range: 0–∞
  • residentSalaryPaidTotal number optional

    Total salary paid to resident employees in the Total bracket, in Cambodian riel (KHR).

    range: 0–∞
  • residentSpouseCountTotal integer optional

    Number of dependent spouses declared by resident employees in the Total bracket.

    range: 0–∞
  • residentMinorChildrenCountTotal integer optional

    Number of dependent minor children declared by resident employees in the Total bracket.

    range: 0–∞
  • residentTaxCalculationBaseTotal number optional

    Tax on salary calculation base for the Total bracket, per the form's own formula E = B – [(C + D) x 150,000]: salary to be paid, minus the combined spouse/minor-children count times 150,000 riel each.

    range: 0–∞
  • residentTaxOnSalaryTotal number optional

    Tax on salary due for resident employees in the Total bracket, in Cambodian riel (KHR).

    range: 0–∞
  • nonResidentEmployeesCount integer optional

    Number of non-resident employees.

    range: 0–∞
  • nonResidentSalaryPaid number optional

    Total salary paid to non-resident employees, in Cambodian riel (KHR). Taxed at the fixed 20% rate (D = B x C).

    range: 0–∞
  • nonResidentTaxOnSalary number optional

    Tax on salary due for non-resident employees, at the fixed 20% rate.

    range: 0–∞
  • fringeBenefitEmployeesCount integer optional

    Number of employees receiving a taxable fringe benefit.

    range: 0–∞
  • fringeBenefitAmount number optional

    Total fringe benefit amount, in Cambodian riel (KHR). Taxed at the fixed 20% rate (D = B x C).

    range: 0–∞
  • fringeBenefitTaxOnSalary number optional

    Tax on salary due on fringe benefits, at the fixed 20% rate.

    range: 0–∞
  • totalTaxDue number required

    Total tax due on this return: the sum of the Tax on Salary amounts across Tables I, II, and III.

    range: 0–∞
  • filedAtPlace string required

    Place where this return is filed.

    length: 1–200
  • filedDate date required

    Date this return is filed and signed by the Director/Manager/Owner of the enterprise.

Verification record

Why this candidate

The GOV-3417 cycle (2026-07-16), while opening Cambodia's Taxes vertical via kh/gdt/monthly-vat-return, re-screened tax.gov.kh's full public document-form library and explicitly sized/screened three further standalone tax-return candidates as ready-to-scope backlog but left all three unauthored: "Return for Withholding Tax- Form WT 03" (327 widgets, 2 pages), "Return for Tax on Salary- Form TOS 01" (292 widgets, 2 pages), and "Return for Patent Tax- Form PR 008" (80 widgets, 3 pages). GOV-3426 (2026-07-16) authored the smallest of the three, Form PR 008. This cycle (GOV-3433, "GovSchema Standard Research") re-scanned CATALOG.md's live backlog fresh per the standing routine and picked the next of the two remaining candidates: Form TOS 01, the middle-sized of the two (292 widgets, versus WT 03's 327), Cambodia's monthly payroll withholding tax return. Cambodia's other four verticals (DMV, Passport, Visa, National ID) were re-confirmed weak/dead in the GOV-3410 cycle; not re-screened this cycle, consistent with this registry's practice of not re-litigating a recently-confirmed dead end without a new source.

Sources examined

Primary source
  • Authority: General Department of Taxation of Cambodia (GDT), https://www.tax.gov.kh/.
  • Document — Form TOS 01, "Return for Tax on Salary" (update 17/01/2018).
    • Listing page (directly retrieved, HTTP 200, plain unauthenticated curl with a standard desktop User-Agent): https://www.tax.gov.kh/en/document-form/page/3, under the entry "Return for Tax on Salary- Form TOS 01- update 17/01/2018", category "MONTHLY TAX RETURN FORM" — the same category as the already-published kh/gdt/monthly-vat-return and kh/gdt/monthly-tax-declaration siblings, and the same listing page as GOV-3417's own Withholding Tax (WT 03) sighting.
    • Extraction technique reused from GOV-3417/GOV-3426: the listing page renders each document's title inside a <script type="application/ld+json"> block immediately preceding that document's own table row and download link; searching forward from each title's position (not backward) finds that same row's own <a href>, avoiding the off-by-one bug GOV-3417 first caught.
    • URL (directly retrieved, HTTP 200, plain unauthenticated curl): https://www.tax.gov.kh/u6rhf7ogbi6/gdtstream/a2d7cf62-6179-4de3-b75e-5aff8f4a1da3
    • File identity: genuine AcroForm PDF (%PDF-1.6 header), 1,701,093 bytes, sha256:f77fc22c9c9c2eb7eda9e62dfed6658fad96cd75d3c4dff08a03cea480496a46.
    • Extraction method: pdfjs-dist@3 (installed standalone in a scratch directory for extraction only, not added as a repository dependency). page.getAnnotations() merged by per-page x/y position with page.getTextContent()'s bilingual Khmer/English text layer, since the source form is genuinely bilingual (a clean parallel English caption sits beside every Khmer label) and every field's label in this schema uses that English caption.
    • Widget count confirmed: 78 widgets on page 1, 214 on page 2 — 292 total, matching the GOV-3417 scouting figure exactly.
    • No checkbox/radio widgets anywhere in this form, disclosed as a contrast with its kh/gdt siblings: every one of the 292 extracted widgets has fieldType: "Tx" (plain text). Unlike kh/gdt/patent-tax- return (Check Box5-9) or kh/gdt/monthly-tax-declaration (Check Box33), this form has no fillable checkbox at all — including for its own printed "Method of Payment" line (Cash / Bank Transfer / Deduction at source), which carries no backing widget and is therefore not modelled as a field (a paper-only tick option, not an AcroForm input).
    • No shared/reused field-name collisions on page 1: every one of page 1's 78 widget names is unique, confirmed by grouping the extracted widget list by name. Every field below maps to exactly one widget, or (for the header period/TIN/declaration-date blocks) to a small group of same-purpose widgets collapsed into one logical field — the same per-character-comb-field collapsing precedent this registry applied in mn/atunt/vehicle-plate-number-reservation: 001_DD1/001_MM1/ 001_YYYY1periodFromDate; 002_DD1/002_MM1/002_YYYY1periodToDate; the 9 single-digit TIN_01-TIN_09 comb boxes → taxIdentificationNumber (maxLen: 1 confirmed on each via page.getAnnotations()'s own maxLen property); and the 8 single-digit D_12/D_13/M_12/M_13/Y_12-Y_15 comb boxes → filedDate.
    • Shared header layout with kh/gdt/monthly-vat-return: the period/ TIN/enterprise-name/business-activities/address/fax-phone/email header block is structurally identical to VAT 200's own header (same field order, same address subdivision granularity: House No./Street/Group/ Village/Sangkat/District/Municipality). This schema reuses that sibling's exact field names (periodFromDate, addressSangkat, etc.) for consistency across the kh/gdt family, per this registry's "convention over configuration" practice.

Scope and disclosed boundaries

This schema models Form TOS 01's page 1 in full: the filing period, taxpayer identification and address, Table I — Tax on Salary on Resident Employees (five progressive bracket rows at 0%/5%/10%/15%/20%, each with its own employee count, salary paid, spouse count, minor-children count, tax calculation base, and tax on salary, plus their own Total row — 36 fields), Table II — Tax on Salary on Non-Resident Employees (a single row at the fixed 20% rate), Table III — Tax on Salary on Fringe Benefit (a single row, also at the fixed 20% rate), the resulting Total Tax Due, and the filing declaration (place, date).

Each bracket row's own tax-rate percentage (0%/5%/10%/15%/20%, or the fixed 20% on Tables II/III) is a static printed label in the source PDF with no backing widget — documented in each affected field's own description rather than modelled as a separate input field. Table I's tax-calculation- base formula, per the form's own printed header (E = B – [(C + D) x 150,000]), is likewise documented in each residentTaxCalculationBase* field's description rather than computed by this schema (GovSchema fields describe source-form inputs, not derived-value computation).

Explicitly out of scope, and disclosed rather than silently omitted:

  • Page 2, "Details on the Tax on Salary on Resident Employees" and "...on Non-Resident Employees and Tax on Salary on Fringe Benefit" (214 widgets) — a per-employee breakdown schedule: one template row per side (Name, Nationality, Function, Salary/Fringe-Benefit Amount, Spouse, Minor Children, Allowance, Tax Calculation Base, Tax Rate, Tax on Salary, Remarks), each column itself split into a further 8-12 single-character comb boxes. The form's own printed instruction, "Please use separate sheets if the space is insufficient," confirms this is a supporting per-employee annex attached as needed, not a fixed part of the core return modelled here. Left unmodelled as disclosed future-companion backlog, the same treatment this registry gave kh/gdt/monthly-vat- return's own page-2 invoice-level annex and kh/gdt/patent-tax-return's page-3 continuation annex.
  • Withholding Tax (Form WT 03) — the one remaining sibling candidate GOV-3417 sized and screened but did not author (327 widgets); left as ready-to-scope backlog for a future cycle.
  • Cambodia's other four verticals (DMV, Passport, Visa, National ID) — re-confirmed weak/dead in the GOV-3410 cycle; not re-screened this cycle.
Modelling decisions worth disclosing
  • All Table I/II/III numeric fields are optional (required: false). Unlike the header identity fields (always required) and totalTaxDue (always required, since a return with zero tax due still states that total), an enterprise's actual employee population may fall entirely within one bracket, or have no non-resident/fringe-benefit employees at all — leaving the other rows genuinely blank on a valid filing, the same reasoning kh/gdt/monthly-vat-return applied to its own per-rate-box fields.
  • Header fields (address, fax/phone, email) are modelled as required: true, matching the equivalent header fields in the sibling kh/gdt/monthly-vat-return schema exactly, since both forms share the same taxpayer-identification header layout and neither carries any visible conditional gate on that block.

Conformance fixtures

Fixtures are committed under conformance/kh/gdt/tax-on-salary-return/1.0.0/: two valid submissions (a minimal filing with only resident employees in the 5% bracket and zero non-resident/fringe-benefit activity; a fuller filing with resident employees spanning three brackets, non-resident employees, and a fringe benefit) plus mutation-control fixtures, one per required/validation rule exercised (invalid TIN pattern, invalid email pattern, negative totalTaxDue, and missing-required-field cases spanning the header and totalTaxDue). All fixtures were checked with a from-scratch, throwaway Node mock validator implementing this schema's own required/validation rules (not committed — consistent with this registry's established per-cycle practice of writing an independent validator rather than reusing the authoring script). Both tools/validate.mjs and tools/validate- ajv.mjs pass across the full registry with this schema added.

Known gaps

  • Page 2's per-employee "Details" schedule and the WT 03 sibling return form remain disclosed, ready-to-scope backlog for future companion schemas/versions — see "Scope and disclosed boundaries" above.
  • Cambodia's DMV, Passport, Visa, and National ID verticals remain open backlog, previously screened weak/dead in GOV-3410.

Verification method assessment

manual-source-review-v1 — a human/agent read the primary source directly and transcribed its fields. No automated re-verification tooling exists yet for this schema; nextReviewBy is set 6 months out per the practice's default cadence.

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 General Department of Taxation of Cambodia or any government. The authoritative source is always the live government form and its official instructions.