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
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- Verification record
registry/kh/gdt/tax-on-salary-return/1.0.0/VERIFICATION.mdtext/markdown- 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
-
periodFromDatedate requiredFirst day of the period covered by this return.
-
periodToDatedate requiredLast day of the period covered by this return.
-
taxIdentificationNumberstring requiredThe enterprise's 9-digit Tax Identification Number.
patternclassification: sensitive-pii -
enterpriseNamestring requiredThe registered name of the enterprise filing this return.
length: 1–300 -
businessActivitiesstring requiredDescription of the enterprise's business activities.
length: 1–300 -
addressHouseNumberstring requiredHouse or building number of the enterprise's address.
length: 1–100 -
addressStreetstring requiredStreet of the enterprise's address.
length: 1–200 -
addressGroupstring requiredGroup (Krom) of the enterprise's address.
length: 1–100 -
addressVillagestring requiredVillage of the enterprise's address.
length: 1–100 -
addressSangkatstring requiredSangkat (commune) of the enterprise's address.
length: 1–100 -
addressDistrictstring requiredDistrict (Khan) of the enterprise's address.
length: 1–100 -
addressMunicipalitystring requiredMunicipality/province of the enterprise's address.
length: 1–100 -
faxOrPhonestring requiredFax or telephone number for the enterprise.
length: 1–30classification: pii -
emailstring requiredEmail address for the enterprise.
patternlength: 0–200classification: pii -
residentEmployeesCountRate0Pctinteger optionalNumber of resident employees whose salary falls in the 0% tax bracket (taxed at the fixed 0% bracket rate).
range: 0–∞ -
residentSalaryPaidRate0Pctnumber optionalTotal salary paid to resident employees in the 0% bracket, in Cambodian riel (KHR).
range: 0–∞ -
residentSpouseCountRate0Pctinteger optionalNumber of dependent spouses declared by resident employees in the 0% bracket.
range: 0–∞ -
residentMinorChildrenCountRate0Pctinteger optionalNumber of dependent minor children declared by resident employees in the 0% bracket.
range: 0–∞ -
residentTaxCalculationBaseRate0Pctnumber optionalTax 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–∞ -
residentTaxOnSalaryRate0Pctnumber optionalTax on salary due for resident employees in the 0% bracket, in Cambodian riel (KHR).
range: 0–∞ -
residentEmployeesCountRate5Pctinteger optionalNumber of resident employees whose salary falls in the 5% tax bracket (taxed at the fixed 5% bracket rate).
range: 0–∞ -
residentSalaryPaidRate5Pctnumber optionalTotal salary paid to resident employees in the 5% bracket, in Cambodian riel (KHR).
range: 0–∞ -
residentSpouseCountRate5Pctinteger optionalNumber of dependent spouses declared by resident employees in the 5% bracket.
range: 0–∞ -
residentMinorChildrenCountRate5Pctinteger optionalNumber of dependent minor children declared by resident employees in the 5% bracket.
range: 0–∞ -
residentTaxCalculationBaseRate5Pctnumber optionalTax 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–∞ -
residentTaxOnSalaryRate5Pctnumber optionalTax on salary due for resident employees in the 5% bracket, in Cambodian riel (KHR).
range: 0–∞ -
residentEmployeesCountRate10Pctinteger optionalNumber of resident employees whose salary falls in the 10% tax bracket (taxed at the fixed 10% bracket rate).
range: 0–∞ -
residentSalaryPaidRate10Pctnumber optionalTotal salary paid to resident employees in the 10% bracket, in Cambodian riel (KHR).
range: 0–∞ -
residentSpouseCountRate10Pctinteger optionalNumber of dependent spouses declared by resident employees in the 10% bracket.
range: 0–∞ -
residentMinorChildrenCountRate10Pctinteger optionalNumber of dependent minor children declared by resident employees in the 10% bracket.
range: 0–∞ -
residentTaxCalculationBaseRate10Pctnumber optionalTax 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–∞ -
residentTaxOnSalaryRate10Pctnumber optionalTax on salary due for resident employees in the 10% bracket, in Cambodian riel (KHR).
range: 0–∞ -
residentEmployeesCountRate15Pctinteger optionalNumber of resident employees whose salary falls in the 15% tax bracket (taxed at the fixed 15% bracket rate).
range: 0–∞ -
residentSalaryPaidRate15Pctnumber optionalTotal salary paid to resident employees in the 15% bracket, in Cambodian riel (KHR).
range: 0–∞ -
residentSpouseCountRate15Pctinteger optionalNumber of dependent spouses declared by resident employees in the 15% bracket.
range: 0–∞ -
residentMinorChildrenCountRate15Pctinteger optionalNumber of dependent minor children declared by resident employees in the 15% bracket.
range: 0–∞ -
residentTaxCalculationBaseRate15Pctnumber optionalTax 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–∞ -
residentTaxOnSalaryRate15Pctnumber optionalTax on salary due for resident employees in the 15% bracket, in Cambodian riel (KHR).
range: 0–∞ -
residentEmployeesCountRate20Pctinteger optionalNumber of resident employees whose salary falls in the 20% tax bracket (taxed at the fixed 20% bracket rate).
range: 0–∞ -
residentSalaryPaidRate20Pctnumber optionalTotal salary paid to resident employees in the 20% bracket, in Cambodian riel (KHR).
range: 0–∞ -
residentSpouseCountRate20Pctinteger optionalNumber of dependent spouses declared by resident employees in the 20% bracket.
range: 0–∞ -
residentMinorChildrenCountRate20Pctinteger optionalNumber of dependent minor children declared by resident employees in the 20% bracket.
range: 0–∞ -
residentTaxCalculationBaseRate20Pctnumber optionalTax 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–∞ -
residentTaxOnSalaryRate20Pctnumber optionalTax on salary due for resident employees in the 20% bracket, in Cambodian riel (KHR).
range: 0–∞ -
residentEmployeesCountTotalinteger optionalNumber of resident employees whose salary falls in the Total tax bracket (the summed total across all five bracket rows above).
range: 0–∞ -
residentSalaryPaidTotalnumber optionalTotal salary paid to resident employees in the Total bracket, in Cambodian riel (KHR).
range: 0–∞ -
residentSpouseCountTotalinteger optionalNumber of dependent spouses declared by resident employees in the Total bracket.
range: 0–∞ -
residentMinorChildrenCountTotalinteger optionalNumber of dependent minor children declared by resident employees in the Total bracket.
range: 0–∞ -
residentTaxCalculationBaseTotalnumber optionalTax 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–∞ -
residentTaxOnSalaryTotalnumber optionalTax on salary due for resident employees in the Total bracket, in Cambodian riel (KHR).
range: 0–∞ -
nonResidentEmployeesCountinteger optionalNumber of non-resident employees.
range: 0–∞ -
nonResidentSalaryPaidnumber optionalTotal salary paid to non-resident employees, in Cambodian riel (KHR). Taxed at the fixed 20% rate (D = B x C).
range: 0–∞ -
nonResidentTaxOnSalarynumber optionalTax on salary due for non-resident employees, at the fixed 20% rate.
range: 0–∞ -
fringeBenefitEmployeesCountinteger optionalNumber of employees receiving a taxable fringe benefit.
range: 0–∞ -
fringeBenefitAmountnumber optionalTotal fringe benefit amount, in Cambodian riel (KHR). Taxed at the fixed 20% rate (D = B x C).
range: 0–∞ -
fringeBenefitTaxOnSalarynumber optionalTax on salary due on fringe benefits, at the fixed 20% rate.
range: 0–∞ -
totalTaxDuenumber requiredTotal tax due on this return: the sum of the Tax on Salary amounts across Tables I, II, and III.
range: 0–∞ -
filedAtPlacestring requiredPlace where this return is filed.
length: 1–200 -
filedDatedate requiredDate 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-publishedkh/gdt/monthly-vat-returnandkh/gdt/monthly-tax-declarationsiblings, 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.6header), 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 withpage.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'slabelin 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/gdtsiblings: every one of the 292 extracted widgets hasfieldType: "Tx"(plain text). Unlikekh/gdt/patent-tax- return(Check Box5-9) orkh/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_YYYY1→periodFromDate;002_DD1/002_MM1/002_YYYY1→periodToDate; the 9 single-digitTIN_01-TIN_09comb boxes →taxIdentificationNumber(maxLen: 1confirmed on each viapage.getAnnotations()'s ownmaxLenproperty); and the 8 single-digitD_12/D_13/M_12/M_13/Y_12-Y_15comb 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 thekh/gdtfamily, per this registry's "convention over configuration" practice.
- Listing page (directly retrieved, HTTP 200, plain unauthenticated curl with a standard desktop User-Agent):
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 andkh/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) andtotalTaxDue(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 reasoningkh/gdt/monthly-vat-returnapplied 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 siblingkh/gdt/monthly-vat-returnschema 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.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 General Department of Taxation of Cambodia or any government. The authoritative source is always the live government form and its official instructions.