Payroll
Run monthly payroll, manage earnings and deductions, generate payslips and compliance documents
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 and SSO 1-10) are created automatically when you finalize a run; there is nothing to manually build or export.
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.
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 compliance fields) |
| Throughout month | Employees clock in/out; shifts are assigned |
| End of month | Create a new payroll run via the Run Payroll wizard |
| After creation | Review and edit the payroll spreadsheet |
| When ready | Finalize the run: 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 three fields on their profile before the run can be created or finalized:
| Required Field | Where to set it |
|---|---|
| National ID number | Employee profile → Personal information |
| Gender | Employee profile → Personal information |
| Date of birth | Employee profile → Personal information |
These fields are mandatory because they are included verbatim in the PND1 and SSO 1-10 government filings. An employee without all three fields will show a red Missing compliance data badge in the payroll wizard preview, and the Create Run button will be disabled until every included employee passes the check.
Do not skip or defer entering compliance data. If an employee is missing these fields when you try to run payroll, you must update their profile and return to the wizard before you can proceed. There is no way to bypass this requirement.
Running Payroll: Step by Step
Step 1: Open the Payroll Wizard
Navigate to Payroll in the left sidebar and click Run Payroll. This opens the three-step wizard.
Step 2: Select the Pay Period
On the first screen, configure the run:
| Field | Description |
|---|---|
| Pay period | The month and year being paid (e.g., February 2026) |
| Hours source | Choose Clocked timesheets (actual clock-in/clock-out data) or Scheduled shifts (planned shift hours) |
| Employees | Select which employees to include: defaults to all active employees |
Click Next to proceed to the preview.
Step 3: Review the Compliance Preview
Before Hopshift creates the run, it shows a preview of every included employee and their compliance status:
- A green checkmark means the employee is ready.
- A red Missing compliance data badge means the employee is missing National ID, gender, or date of birth. The employee's name links directly to their profile so you can fix the data without leaving the wizard.
The Create Run button remains disabled as long as any employee has a missing_compliance error. Fix all flagged employees, then return to this screen.
Step 4: Create the Run
Once all employees pass the compliance check, click Create Run. Hopshift creates the payroll run in DRAFT status and opens the payroll spreadsheet.
The Payroll Spreadsheet
The spreadsheet is where you review and adjust each 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). Editable in DRAFT. |
| 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 OT hours and the applicable OT rate |
| Deductions | Tax withholding (WHT) and any other configured deductions |
| Net Pay | Final take-home amount: Base Pay + Allowances + Overtime − Deductions |
Cells with a white background are editable. Click any editable cell to type a new value. Changes auto-save.
Validation Indicators
The spreadsheet highlights rows that need attention:
| Indicator | Meaning | Blocks finalization? |
|---|---|---|
| Red row: Negative net pay | Deductions exceed gross earnings | Yes |
| Red row: Zero deductions (TH) | Thai employee has positive earnings but zero withholding tax calculated | Yes |
| Amber row: Zero earnings | No earnings recorded this period (e.g., commission-only employee) | No (warning only) |
Resolve all red rows before attempting to finalize.
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 | Role-based supplement (e.g., supervisory pay) |
Allowances are configured per employee on their profile and carried into each payroll run automatically. You can adjust individual allowance amounts in the spreadsheet for a specific run.
Overtime
Overtime hours are drawn from the clocked timesheet data (or manual entry). The overtime rate is configured in your company's payroll settings. 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 | Any custom deductions configured on the employee profile (e.g., loan repayments, equipment rental) |
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 – 150,000 | 0% (exempt) |
| 150,001 – 300,000 | 5% |
| 300,001 – 500,000 | 10% |
| 500,001 – 750,000 | 15% |
| 750,001 – 1,000,000 | 20% |
| 1,000,001 – 2,000,000 | 25% |
| 2,000,001 – 5,000,000 | 30% |
| Over 5,000,000 | 35% |
The calculated WHT appears in the Deductions column of the payroll spreadsheet. For Thai employees, if WHT calculates as zero despite positive earnings, the spreadsheet flags the row in red and blocks finalization. This is a safety check to ensure no employee is accidentally filed with zero tax.
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.
Finalizing a Run
When the spreadsheet looks correct and all validation errors are resolved, click Finalize Payroll.
Pre-Finalization Check
A summary dialog appears listing:
- Errors (shown in red): Must be resolved before proceeding. These include negative net pay, zero WHT on Thai employees, or any employee still missing compliance data.
- Warnings (shown in amber): Informational only. You can finalize with warnings present.
Review the summary carefully. When you are satisfied, click Confirm & Finalize.
What Happens on Finalization
Finalizing a run triggers the following sequence:
- The run status changes from
DRAFTtoFINALIZED. - The spreadsheet becomes 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 |
| SSO 1-10 PDF | Human-readable SSO 1-10 form | |
| 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 six documents fails to generate, the entire finalization is rolled back and the run remains in DRAFT. An error message will identify which document failed. Fix the underlying issue and attempt finalization again.
Downloading Documents
After finalization, a Documents section appears at the top of the run detail page. Click any item to download it immediately.
| Download Button | What You Get |
|---|---|
| PND1 (e-filing) | .txt file for upload to the RD e-filing portal |
| PND1 PDF | Printable PND1 form |
| SSO 1-10 CSV | .csv file for upload to the SSO portal |
| SSO 1-10 PDF | Printable SSO 1-10 form |
| Payroll CSV | Full payroll data in spreadsheet-compatible format |
| Payslips ZIP | ZIP archive containing one PDF payslip per employee |
All documents are stored indefinitely against the run and can be re-downloaded at any time from the run history.
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 can log in to the Hopshift employee portal and navigate to My Pay to view and download their payslips for any finalized pay period. Payslips are available to employees as soon as the run is finalized: no additional distribution step is required.
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 Finalization
While a run is in DRAFT status, all editable cells in the spreadsheet can be modified freely. Changes take effect immediately. There is no save button: edits are auto-saved.
After Finalization: Regenerating Documents
A finalized run's figures cannot be changed. If you discover a data entry error after finalization (for example, an incorrect allowance amount or a missing employee), you have two options:
Option A: Correct employee data and regenerate documents
If the underlying payroll figures are correct but an employee's profile data (such as name or address) was wrong when the run was finalized:
- Go to the employee's profile and correct the data.
- Return to the payroll run detail page.
- Click Regenerate Documents.
- Hopshift re-runs all six document generators using the current employee data and overwrites the stored files.
Option B: Create a new run
If the payroll figures themselves are incorrect, you will need to create a supplementary or corrective run for the affected period. Contact your payroll administrator to determine the appropriate adjustment approach.
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.
Payroll History
All finalized payroll runs are listed on the Payroll dashboard, ordered by date descending. For each run you can see:
- Pay period
- Total employees
- Total gross pay
- Total net pay
- Status (
DRAFTorFINALIZED) - Finalized date
Click any run to open its detail page with the full spreadsheet, all documents, and the audit trail of who created and finalized the run.
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 header, 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. When creating the run, you can adjust which employees are included. For employees who joined or left mid-month, you can manually adjust their base salary in the spreadsheet to reflect the correct pro-rated amount.
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 spreadsheet will flag this row in amber as a warning.
Can I add an employee to a run after it's created?
No. The employee list is locked when the run is created. If you need to add an employee, you will need to create a separate run for that employee or delete the current DRAFT run and create a new one with the correct employee list.
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 personal exemption threshold (THB 150,000 net of standard deductions), their WHT will be zero. However, Hopshift still blocks finalization if a Thai employee shows zero WHT with positive earnings: this prevents accidental non-filing. If you believe zero WHT is correct for an employee, verify their income level and allowances, and contact support if the block persists unexpectedly.