Payroll
How Hopshift calculates Thai payroll, what it generates when a run is published, and the per-company fallback flow
Hopshift Payroll handles your full monthly payroll cycle: from calculating earnings and deductions to generating government compliance documents and individual payslips. All Thailand compliance filings (PND1, SSO 1-10 and the SSO e-Service upload file) are created automatically when a run is published; there is nothing to build or export by hand.
Payroll is currently available for Thailand only. All monetary amounts are in Thai Baht (THB). Buddhist Era (BE) dates are used in all government filings.
This page is the reference for how payroll is calculated and what a finished run contains. The month-to-month routine (approvals, pay amounts, Publish) lives on Running Payroll Each Month; that group page is where HR does the work each month.
The Payroll Cycle
Hopshift payroll runs on a monthly cycle. A typical month looks like this:
| When | What you do |
|---|---|
| Start of month | Ensure all employee profiles are complete (especially National ID and gender) |
| Throughout month | Employees clock in/out; shifts are assigned; leave and OT requests are approved |
| End of month | Draft payslips are created for every company on Group Payroll |
| After creation | Clear pending approvals, upload the month's pay amounts, review the payslips |
| When ready | Publish each company: documents are generated automatically |
| By 7th of next month | Submit PND1 to the Revenue Department |
| By 15th of next month | Submit SSO 1-10 to the Social Security Office |
Before You Start: Compliance Requirements
For Thailand payroll, every employee included in a run must have two fields on their profile before the run can be published:
| Required Field | Where to set it |
|---|---|
| National ID number | Employee profile, Personal page (Personal Information section) |
| Gender | Employee profile, Personal page (Personal Information section) |
These fields are written verbatim into the PND1 and SSO 1-10 filings. Date of birth is not written to either form and is not required. In the company Run Payroll wizard, an employee without a National ID produces a red Missing compliance warning in the preview, and the Create Payroll Run button stays disabled until it is fixed.
Every Thai employee in the run must have a National ID number and gender before the run can be published. Date of birth is not required for PND1 or SSO 1-10. There is no way to bypass this check.
Two company-level fields are checked as well: the PND1 Tax ID and the SSO Registration Number on the company's Payroll > Settings page. A run cannot be published while either is empty.
Where Payroll Runs Are Created
There are two ways to create a run:
- Group Payroll (group sidebar, Payroll section). Drafts are created for every company at once, usually overnight; if one is missing, click Start payroll. Publish, Reopen and the monthly import all live here. This is the flow described on Running Payroll Each Month.
- Company Payroll (company sidebar, Payroll). Click Run Payroll to open a wizard for that one company. Use this as a fallback when you need to create or inspect a single company's run outside the group workbook.
The company Run Payroll wizard
The wizard has three steps: Select period, Review, and Creating (a progress screen).
Select period asks for:
| Field | Description |
|---|---|
| Pay Period, Period Start, Period End, Pay Date | The month being paid; the dates come from your Payroll Settings and can be adjusted |
| Hours Source | Import from clock records (recommended), Use existing timesheets, or Manual entry |
All active employees are included; the step shows the count. There is no employee picker.
Review shows a preview of every employee with any warnings. A red Missing compliance warning names how many employees are missing a National ID; the Create Payroll Run button stays disabled until it is cleared. Fix the profiles, come back, and click Create Payroll Run. The run is created in DRAFT status and the run detail page opens.
The Run Detail Page
The run detail page lists every employee's pay for the period. Each row is one employee. The run stays editable as long as it is in DRAFT status.
Column Reference
| Column | Description |
|---|---|
| Employee | Employee name and ID |
| Pay Type | SALARY (fixed monthly) or HOURLY (rate × hours), taken from the employee's profile |
| Planned Hours | Hours from the employee's assigned shifts for the period |
| Clocked Hours | Actual hours clocked, shown as Xh + Yh OT (regular + overtime) |
| Hourly Rate | Per-hour rate used for calculations. Defaults to the employee's configured rate. Editable in DRAFT. |
| Base Pay | Calculated base salary or hourly earnings for the period |
| Allowances | Any configured earning categories (housing, transport, meals, etc.) |
| Overtime | Overtime pay, calculated from approved OT hours and the applicable OT rate |
| Deductions | Tax withholding (WHT), SSO and any other configured deductions |
| Net Pay | Final take-home amount: Base Pay + Allowances + Overtime minus Deductions |
Cells with a white background are editable. Click any editable cell to type a new value. Changes auto-save.
Validation Indicators
Rows that need attention are highlighted:
| Indicator | Meaning | Blocks publishing? |
|---|---|---|
| Red: negative net pay | Deductions exceed gross earnings | Yes |
| Red: not calculated | The employee has gross pay but tax and SSO have not been calculated yet. Click Recalculate compliance. | Yes, until recalculated |
| Amber: no earnings entered | No earnings recorded this period (e.g., commission-only employee) | No (warning only) |
Resolve all red rows before attempting to publish. The full list of things that block publishing is: missing National ID or gender, missing company PND1 Tax ID, missing company SSO Registration Number, negative net pay, and a recalculation still pending.
Payroll Items: Earnings and Deductions
Base Salary
For salaried employees (SALARY pay type), base pay equals the employee's monthly salary configured on their profile. For hourly employees (HOURLY), it is Hourly Rate × Regular Hours.
Allowances
Allowances are additional earnings added on top of base pay. Common examples:
| Allowance Type | Example |
|---|---|
| Housing allowance | Fixed monthly supplement for accommodation |
| Transport allowance | Flat or per-day transport reimbursement |
| Meal allowance | Daily or monthly meal subsidy |
| Position allowance | Supplement tied to the position (e.g., supervisory pay) |
Allowances are pay items. They are created and configured for the whole group on the Pay items page, attached to employees there or on the employee profile, and carried into each payroll run automatically. You can adjust individual amounts in the run for a specific month, unless the item is marked Lock value in payroll, in which case the amount is changed only on the employee's Compensation page.
Overtime
Overtime hours come from approved OT requests and the timesheet for the period. The multipliers come from the group's OT policy (typically 1.5× the hourly rate on a working day); see Overtime Policy. Thai labor law requires overtime pay at a minimum of 1.5× the regular hourly rate for working beyond 8 hours/day or 48 hours/week.
Deductions
| Deduction | How it is calculated |
|---|---|
| Withholding Tax (WHT) | Calculated per Thailand progressive tax rates on employment income (Section 40(1)/(2)): see Tax Calculation below |
| Social Security (SSO) | Employee's 5% SSO contribution: see SSO Calculation below |
| Other deductions | Deduction pay items (e.g., loan repayments, uniform recovery), set up on the Pay items page and scheduled per employee and month |
Tax Calculation (Thailand)
Thai income tax on employment income is withheld monthly under Section 40(1) and 40(2) of the Revenue Code and reported on the PND1 form.
How Monthly WHT is Calculated
The withholding tax for each employee is calculated by:
- Annualizing the employee's monthly income (multiplying by 12)
- Deducting the standard employment expense deduction (50% of income, capped at THB 100,000)
- Deducting the personal allowance (THB 60,000) and any other applicable allowances
- Applying Thailand's progressive tax rates to the net taxable income
- Dividing the annual tax by 12 to get the monthly withholding amount
Progressive Tax Rate Table
| Net Taxable Income (Annual, THB) | Tax Rate |
|---|---|
| 0 to 150,000 | 0% (exempt) |
| 150,001 to 300,000 | 5% |
| 300,001 to 500,000 | 10% |
| 500,001 to 750,000 | 15% |
| 750,001 to 1,000,000 | 20% |
| 1,000,001 to 2,000,000 | 25% |
| 2,000,001 to 5,000,000 | 30% |
| Over 5,000,000 | 35% |
The calculated WHT appears in the Deductions column. Zero WHT is normal for employees whose projected annual income falls below the taxable threshold; it does not block publishing.
Income Types
| Income Type | Code | Covers |
|---|---|---|
| Salary, wages, regular pay | 40(1) | Regular monthly salary, allowances |
| Bonus, other employment income | 40(2) | Annual bonuses, special payments |
SSO (Social Security) Calculation
Thailand's Social Security contributions are governed by the Social Security Act and reported monthly on the SSO 1-10 form.
Contribution Rules
Both the employee and employer contribute 5% of the employee's gross wage each month, subject to a ceiling and floor:
| Parameter | 2026 and later | Before 2026 |
|---|---|---|
| Rate (each side) | 5% | 5% |
| Monthly wage ceiling | THB 17,500 | THB 15,000 |
| Monthly wage floor | THB 1,650 | THB 1,650 |
The contribution base is the employee's actual gross wage, clamped to the floor and ceiling:
contribution_base = clamp(actual_wage, 1,650, 17,500) // for 2026+
employee_contrib = contribution_base × 5%
employer_contrib = contribution_base × 5%Examples
| Actual Monthly Wage | Contribution Base (2026) | Employee Contrib | Employer Contrib |
|---|---|---|---|
| THB 10,000 | THB 10,000 | THB 500.00 | THB 500.00 |
| THB 20,000 | THB 17,500 (capped) | THB 875.00 | THB 875.00 |
| THB 1,200 | THB 1,650 (floored) | THB 82.50 | THB 82.50 |
| THB 17,500 | THB 17,500 | THB 875.00 | THB 875.00 |
The employee SSO contribution is deducted from the employee's pay and appears in the Deductions column. The employer's matching contribution is a separate cost to your business and is shown in the SSO 1-10 report but does not reduce the employee's net pay.
Publishing a Run
On Group Payroll, open the company's tab and click Publish…. The dialog runs the pre-flight checks and, once they pass, Confirm & publish starts the work. On the company run detail page the same thing is done in two steps: 1. Hours, earnings, and leave, then Review & submit summary opens 2. Review and submit (titled "Review Payroll Run", listing the documents to be generated), and Finalize completes it.
What Happens on Publish
- The company shows Publishing… while documents generate on the server, then moves to Finalized.
- The payslips become read-only (no further edits).
- The following documents are generated and stored against the run:
| Document | Format | Purpose |
|---|---|---|
| PND1 | Pipe-delimited .txt | Revenue Department e-filing: monthly WHT for Section 40(1)/(2) employment income |
| PND1 PDF | Human-readable PND1 form for employer records | |
| SSO 1-10 CSV | CSV (UTF-8 BOM) | Social Security Office monthly contribution schedule, for your records and Excel |
| SSO 1-10 PDF | Human-readable SSO 1-10 form | |
| SSO e-Service Upload File | Fixed-width .txt | The file you upload to the SSO e-Service portal |
| Payroll CSV | CSV | Full payroll data export (all employees) |
| Payslips ZIP | ZIP | Individual payslip PDF for each employee |
Document generation is all-or-nothing. If any of the documents fails to generate, the whole publish is rolled back and the run remains in DRAFT. The company drops back to Draft and shows a red banner naming the document that failed. Fix the underlying issue and publish again.
Downloading Documents
After publishing, a Generated Documents panel appears at the bottom of the company run detail page, below the payslip table (on Group Payroll it sits under the payslip list). Each row has a Download button.
| Row | What You Get |
|---|---|
| PND1: Withholding Tax Return (TXT) | .txt file for upload to the RD e-filing portal |
| PND1: Withholding Tax Return (PDF) | Printable PND1 form |
| SSO 1-10: Contribution Report (CSV) | .csv file for your records |
| SSO 1-10: Contribution Report (PDF) | Printable SSO 1-10 form |
| SSO e-Service Upload File | .txt file for upload to the SSO portal |
| Payroll CSV | Full payroll data in spreadsheet-compatible format |
| Payslips (ZIP) | ZIP archive containing one PDF payslip per employee |
Documents are stored against the run and can be re-downloaded at any time from the run history. The Summary tab on Group Payroll also has a Download menu with a consolidated Excel and ZIPs across companies.
Employee Payslips
What's on a Payslip
Each employee's payslip PDF contains:
- Company name and logo
- Pay period
- Employee name, ID, and position
- Earnings breakdown (base salary, allowances, overtime)
- Deductions breakdown (withholding tax, SSO contribution)
- Net pay
How Employees View Their Payslips
Employees open Pay Slips in the Hopshift app to view and download their payslips for any published pay period.
Employees see a payslip under Pay Slips in the app the moment the run is published; no separate distribution step is needed.
As an admin, you can also download the full Payslips ZIP from the run detail page and distribute the PDFs manually if needed.
Editing and Correcting Payroll
Editing Before Publishing
While a run is in DRAFT status, all editable cells can be modified freely. Changes take effect immediately. There is no save button: edits are auto-saved.
After Publishing
Option A: Correct employee data and regenerate documents
If the payroll figures are correct but an employee's profile data (such as name or address) was wrong when the run was published:
- Go to the employee's profile and correct the data.
- Return to the payroll run detail page.
- In the Generated Documents panel, click Regenerate.
- Hopshift re-runs every document generator using the current employee data and overwrites the stored files.
Option B: Reopen the run
If the payroll figures themselves are wrong, reopen the company on Group Payroll: open the More actions (…) menu on the company tab, choose Reopen run…, give a reason, and click Reopen to draft. The payslips go back to draft, you fix them, and publish again. The reason is kept in the audit trail.
Regenerating documents overwrites all previously stored files for that run. The previous versions are not recoverable. Download and archive any documents you need to keep before regenerating.
Lag Payments for Former Employees
Some pay items are earned in one month but paid in the following month, for example meal allowances or performance incentives that are calculated after the period closes. If an employee resigned before the next payroll cycle, they will no longer appear in the standard employee list. This feature lets you add them back to a single DRAFT run for those outstanding payments.
When to Use This
Use lag payments when:
- An employee resigned mid-month and their final salary was paid in the current cycle
- They earned allowances or incentives this month that are paid next cycle (e.g., meal allowances paid a month in arrears)
- You need to process a one-off payment for a former employee without affecting your regular payroll
How to Add a Former Employee
This is done on the company run detail page (Company > Payroll > open the run), not on the Group Payroll workbook.
- Open a DRAFT payroll run.
- Click Add Former Employee in the toolbar above the payslip table.
- Search for the terminated employee by name.
- Select the employee and click Add to Payroll Run.
The employee is added with a Lag pay badge and all amounts set to zero.
- Click the row to open the edit panel and enter the amounts for each outstanding payment item.
- Save the row and continue editing or publish the run as normal.
Lag pay rows are excluded from compliance documents. The former employee will not appear on the PND1 or SSO 1-10 filings generated when you publish the run. They will still receive a payslip. This is correct: SSO contributions for terminated employees are handled separately via form SSO 6-09 (if applicable); PND1 for their final payment was already filed in their last active payroll month.
Compliance Note
Because lag pay rows are excluded from PND1 and SSO, the compliance gate that normally blocks publishing for employees missing a National ID or gender does not apply to these rows. You can publish even if the former employee's profile is incomplete.
Payroll History
All payroll runs are listed on the company Payroll page, ordered by date descending, and per company on the Group Payroll Summary tab. For each run you can see:
- Pay period
- Total employees
- Total gross pay
- Total net pay
- Status (Draft, Publishing, Finalized)
- Finalized date
Click any run to open its detail page with the full payslip table and all documents.
Buddhist Era Dates
All Thai government documents use Buddhist Era (BE) years. The BE year is the Gregorian year plus 543:
| Gregorian | Buddhist Era |
|---|---|
| 2025 | 2568 |
| 2026 | 2569 |
| 2027 | 2570 |
Hopshift handles this conversion automatically. You will see BE years in the PND1 file, SSO 1-10 headers, and on payslip dates for Thai payrolls. You do not need to convert dates yourself.
Frequently Asked Questions
Can I run payroll for a partial month?
Yes. For employees who joined or left mid-month, base salary is prorated automatically, and you can adjust the amount in the run if needed.
What if an employee has no hours clocked?
Salaried employees are paid their full monthly salary regardless of hours clocked (unless you manually adjust their base pay). Hourly employees will show zero base pay if no hours are recorded: the row is flagged in amber as a warning.
Can I add an employee to a run after it's created?
In general, no: the employee list is locked when the run is created. There is one exception: you can add a terminated employee to a DRAFT run using the Add Former Employee button on the company run detail page to process outstanding lag payments. See Lag Payments for Former Employees for details. For active employees, discard the current draft and create a new one.
What is the e-filing deadline for PND1?
The standard filing deadline is the 7th of the following month for paper filing, and the 15th of the following month for e-filing via the RD portal. For example, January 2026 payroll: PND1 due by 7 February (paper) or 15 February (e-filing).
What is the deadline for SSO 1-10?
The SSO 1-10 monthly contribution schedule is due by the 15th of the following month.
Why is my employee's WHT zero?
If an employee's annual projected income falls below the taxable threshold (THB 150,000 net of standard deductions), their WHT will be zero. That is correct and does not block publishing. If you expected tax to be withheld, check the employee's salary and tax declaration.