Payroll Entry refuses to post a component without an account for its company. Link every Thai company on every Salary Component: on Salary Component.validate (covers the components HRMS seeds with the first company and the ones users add) and on Company.on_update, with the install hooks, the daily scheduler and a patch for existing sites. Earnings expense to "Salary" (Standard chart, Indirect Expenses). The income tax component is tax withheld from employees, remitted on P.N.D.1; Thai books carry it as ภาษีหัก ณ ที่จ่ายค้างจ่าย, split by return form when split at all, so it gets "Withholding Tax Payable (P.N.D.1)" beside the P.N.D.3/53 account the Tax Withholding Categories post to. Other deductions are held in "Salary Deductions" (Current Liabilities) until remitted. Statistical components never post and get none.
Default Thai Company
Default Company Settings
Installation
You can install this app using the bench CLI:
cd $PATH_TO_YOUR_BENCH
bench get-app $URL_OF_THIS_REPO --branch develop
bench install-app default_thai_company
Thai language
Every string the app adds (custom field labels, messages, print format and letter head
text, Tax Withholding Category names) is translated in translations/th.csv; the same
file overrides the upstream Thai for the standard labels the print formats show. The
print formats embed Sarabun (public/fonts, OFL) so PDFs render Thai on servers
without a Thai system font. Switch a user or the print language to th to use it.
Addresses in more than one language
Address lines, city, county and state are translatable: the Address form shows a translate
button next to each, which stores the other language in a Translation record. The Thailand
Address Template renders those fields through _(), so the print formats and letter head
show the company's and the party's address in the document's print language (the company
address is re-rendered at print time; party addresses are re-rendered from the linked
Address instead of printing the stored address_display). The withholding tax certificate
always takes the Thai translation. Translations are keyed on the exact text, so one
translation of a city or province serves every address that uses it. The same goes for
the bank details on the Sales Invoice: Account Name on the Bank Account and Bank Name
on the Bank are translatable.
Withholding tax certificate
A paid Purchase Invoice with Apply Tax Withholding Amount gets a Withholding Tax Certificate
button that downloads the Revenue Department's Sec. 50 bis form (หนังสือรับรองการหักภาษี ณ ที่จ่าย,
two copies) as a PDF: the Withholding Tax Certificate print format lays the invoice's data
over the official form (public/images). The row the payment is reported on comes from
Type of Income Paid on the Tax Withholding Category (set for the shipped categories; pick it
for your own), and the ภ.ง.ด. return is ticked from the Supplier's type: ภ.ง.ด.53 for juristic
payees, ภ.ง.ด.1ก / 2 / 3 by income type for individuals. เล่มที่ / เลขที่ (certificate book
numbers) and ลำดับที่ (the line in the return) are left for the accountant.
Contributing
This app uses pre-commit for code formatting and linting. Please install pre-commit and enable it for this repository:
cd apps/default_thai_company
pre-commit install
Pre-commit is configured to use the following tools for checking and formatting your code:
- ruff
- eslint
- prettier
- pyupgrade
License
gpl-3.0