Hopshift
Payroll

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:

WhenWhat you do
Start of monthEnsure all employee profiles are complete (especially National ID and gender)
Throughout monthEmployees clock in/out; shifts are assigned; leave and OT requests are approved
End of monthDraft payslips are created for every company on Group Payroll
After creationClear pending approvals, upload the month's pay amounts, review the payslips
When readyPublish each company: documents are generated automatically
By 7th of next monthSubmit PND1 to the Revenue Department
By 15th of next monthSubmit 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 FieldWhere to set it
National ID numberEmployee profile, Personal page (Personal Information section)
GenderEmployee 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:

FieldDescription
Pay Period, Period Start, Period End, Pay DateThe month being paid; the dates come from your Payroll Settings and can be adjusted
Hours SourceImport 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

ColumnDescription
EmployeeEmployee name and ID
Pay TypeSALARY (fixed monthly) or HOURLY (rate × hours), taken from the employee's profile
Planned HoursHours from the employee's assigned shifts for the period
Clocked HoursActual hours clocked, shown as Xh + Yh OT (regular + overtime)
Hourly RatePer-hour rate used for calculations. Defaults to the employee's configured rate. Editable in DRAFT.
Base PayCalculated base salary or hourly earnings for the period
AllowancesAny configured earning categories (housing, transport, meals, etc.)
OvertimeOvertime pay, calculated from approved OT hours and the applicable OT rate
DeductionsTax withholding (WHT), SSO and any other configured deductions
Net PayFinal 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:

IndicatorMeaningBlocks publishing?
Red: negative net payDeductions exceed gross earningsYes
Red: not calculatedThe employee has gross pay but tax and SSO have not been calculated yet. Click Recalculate compliance.Yes, until recalculated
Amber: no earnings enteredNo 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 TypeExample
Housing allowanceFixed monthly supplement for accommodation
Transport allowanceFlat or per-day transport reimbursement
Meal allowanceDaily or monthly meal subsidy
Position allowanceSupplement 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

DeductionHow 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 deductionsDeduction 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:

  1. Annualizing the employee's monthly income (multiplying by 12)
  2. Deducting the standard employment expense deduction (50% of income, capped at THB 100,000)
  3. Deducting the personal allowance (THB 60,000) and any other applicable allowances
  4. Applying Thailand's progressive tax rates to the net taxable income
  5. 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,0000% (exempt)
150,001 to 300,0005%
300,001 to 500,00010%
500,001 to 750,00015%
750,001 to 1,000,00020%
1,000,001 to 2,000,00025%
2,000,001 to 5,000,00030%
Over 5,000,00035%

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 TypeCodeCovers
Salary, wages, regular pay40(1)Regular monthly salary, allowances
Bonus, other employment income40(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:

Parameter2026 and laterBefore 2026
Rate (each side)5%5%
Monthly wage ceilingTHB 17,500THB 15,000
Monthly wage floorTHB 1,650THB 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 WageContribution Base (2026)Employee ContribEmployer Contrib
THB 10,000THB 10,000THB 500.00THB 500.00
THB 20,000THB 17,500 (capped)THB 875.00THB 875.00
THB 1,200THB 1,650 (floored)THB 82.50THB 82.50
THB 17,500THB 17,500THB 875.00THB 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

  1. The company shows Publishing… while documents generate on the server, then moves to Finalized.
  2. The payslips become read-only (no further edits).
  3. The following documents are generated and stored against the run:
DocumentFormatPurpose
PND1Pipe-delimited .txtRevenue Department e-filing: monthly WHT for Section 40(1)/(2) employment income
PND1 PDFPDFHuman-readable PND1 form for employer records
SSO 1-10 CSVCSV (UTF-8 BOM)Social Security Office monthly contribution schedule, for your records and Excel
SSO 1-10 PDFPDFHuman-readable SSO 1-10 form
SSO e-Service Upload FileFixed-width .txtThe file you upload to the SSO e-Service portal
Payroll CSVCSVFull payroll data export (all employees)
Payslips ZIPZIPIndividual 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.

RowWhat 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 CSVFull 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:

  1. Go to the employee's profile and correct the data.
  2. Return to the payroll run detail page.
  3. In the Generated Documents panel, click Regenerate.
  4. 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.

  1. Open a DRAFT payroll run.
  2. Click Add Former Employee in the toolbar above the payslip table.
  3. Search for the terminated employee by name.
  4. Select the employee and click Add to Payroll Run.

The employee is added with a Lag pay badge and all amounts set to zero.

  1. Click the row to open the edit panel and enter the amounts for each outstanding payment item.
  2. 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:

GregorianBuddhist Era
20252568
20262569
20272570

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.

On this page