Hopshift
Admin Guide

Compliance

Thailand government compliance documents: PND1 withholding tax and SSO 1-10 social security filings

Hopshift automatically generates all required Thailand government compliance documents every time you finalize a payroll run. You do not need to use external software, manually build files, or copy data from spreadsheets.

Compliance document generation is a core part of payroll finalization. If any document fails to generate, the finalization is rolled back entirely and the run remains in DRAFT. All documents must succeed before a run is marked FINALIZED.


Documents Generated on Finalization

Every finalized Thailand payroll run produces six documents:

DocumentFormatSubmitted toDeadline
PND1Pipe-delimited .txtRevenue Department (RD) e-filing portal15th of following month (e-filing)
PND1 PDFPDFKeep for employer recordsn/a
SSO 1-10CSV (UTF-8 BOM)Social Security Office (SSO) portal15th of following month
SSO 1-10 PDFPDFKeep for employer recordsn/a
Payroll CSVCSVInternal usen/a
Payslips ZIPZIPDistribute to employeesn/a

All documents are stored indefinitely against the run and can be re-downloaded at any time from the run detail page.


Employee Compliance Requirements

Why These Fields Are Mandatory

Thai law requires that PND1 and SSO 1-10 filings include the employee's national ID number, gender, and date of birth on every detail row. Without these fields, Hopshift cannot generate valid government files.

Required FieldUsed inWhere to set it
National ID number (13 digits)PND1, SSO 1-10Employee profile → Personal information
GenderPND1 (title field: นาย / นาง / นางสาว)Employee profile → Personal information
Date of birthPND1Employee profile → Personal information

How the Compliance Gate Works

The compliance check runs at two points:

  1. Payroll wizard preview: Before a run is created, Hopshift checks every selected employee. Any employee missing one or more required fields shows a red Missing compliance data badge. The Create Run button is disabled until all employees pass.

  2. Finalization: A second check runs when you click Finalize Payroll. If any employee in the run is still missing data (for example, if data was deleted after the run was created), finalization is blocked with a specific error identifying the affected employees.

How to Fix Missing Compliance Data

  1. In the payroll wizard (or from the employee list), click the flagged employee's name to open their profile.
  2. Navigate to Personal information.
  3. Enter the missing fields: National ID, Gender, Date of birth.
  4. Save the profile.
  5. Return to the payroll wizard: the compliance check re-runs automatically and the badge should clear.

Updating an employee profile after a run has been finalized does not automatically update the compliance documents. You must use the Regenerate Documents function on the run detail page to rebuild the files with the corrected data.


PND1: Monthly Withholding Tax Return

What is PND1?

PND1 (ภ.ง.ด.1: Por Ngor Dor 1) is the monthly withholding tax return that employers must file with the Revenue Department (กรมสรรพากร) for all employment income payments. It covers income under Section 40(1) (regular salary and wages) and Section 40(2) (bonus and other employment benefits).

Every month you pay employees, you must:

  1. Withhold income tax from each employee's pay
  2. File the PND1 return declaring the amounts withheld
  3. Remit the withheld tax to the Revenue Department

Hopshift calculates the withholding amounts and generates the filing: you only need to download it and upload it to the RD portal.

Filing Deadlines

MethodDeadline
Paper filing (in person)7th of the following month
E-filing via RD portal15th of the following month

E-filing gives you an extra 8 days compared to paper filing. Hopshift generates the PND1 in the exact format required for e-filing, so there is no reason to file on paper.

The PND1 e-Filing Format

The PND1 file Hopshift generates is a pipe-delimited (|) UTF-8 text file with no BOM. It follows the Revenue Department's specified format exactly.

File structure:

HEADER_LINE
DETAIL_LINE_1
DETAIL_LINE_2
...
DETAIL_LINE_N

Header row fields (pipe-separated, in this order):

PositionFieldExampleDescription
1Employer tax ID123456789012313-digit employer tax ID
2Branch code0000006-digit branch code; 000000 = head office
3Filing sequence00 = normal; 1 = amended
4Tax month02Zero-padded month number
5Tax year (BE)2569Buddhist Era year (Gregorian + 543)
6Tax section50(1)Income section code
7Total records12Count of employee detail rows
8Total income480000.00Sum of all income amounts
9Total WHT18500.00Sum of all withholding tax amounts

Detail row fields (one row per employee):

PositionFieldExampleDescription
1Sequence1Row number starting from 1
2Employee tax ID1100600123456Employee's 13-digit national ID
3Title (Thai)นายนาย (Mr) / นาง (Mrs) / นางสาว (Miss)
4First nameสมชายThai first name
5Last nameใจดีThai last name
6Address123 ถนนสุขุมวิทEmployee address
7Payment date (Thai)28022569Date income was paid in DDMMYYYY BE format
8Income type40(1)40(1) salary or 40(2) bonus
9Income amount40000.00Gross income for the period
10WHT amount1541.67Withholding tax deducted
11WHT condition1Condition code (default: 1)

Example file excerpt:

1234567890123|000000|0|02|2569|50(1)|3|120000.00|4625.01
1|1100600123456|นาย|สมชาย|ใจดี|123 ถนนสุขุมวิท แขวงคลองเตย|28022569|40(1)|40000.00|1541.67|1
2|1100600654321|นาง|สมหญิง|รักงาน|456 ถนนพระราม 9|28022569|40(1)|45000.00|1833.33|1
3|1100600789012|นางสาว|มาลี|สวยงาม|789 ถนนรัชดา|28022569|40(1)|35000.00|1250.01|1

Filename pattern:

PND1_{TaxID13}_{Branch6}_{YearBE4}_{Month2}_{FormType2}_{Seq2}.txt

Example: PND1_1234567890123_000000_2569_02_01_01.txt

How to Download and Submit PND1

  1. Open the finalized payroll run from Payroll → run detail page.
  2. In the Documents section, click PND1 (e-filing).
  3. Save the .txt file to your computer.
  4. Log in to the Revenue Department e-filing portal at efiling.rd.go.th.
  5. Navigate to ภ.ง.ด.1 and use the upload/import function.
  6. Upload the .txt file. The portal will validate and confirm acceptance.
  7. Remit the total WHT amount by the deadline.

You can also download PND1 PDF for a printable, human-readable version of the same data: useful for internal records or accountant review.


SSO 1-10: Monthly Social Security Contributions

What is SSO 1-10?

SSO 1-10 (แบบ สปส. 1-10) is the monthly contribution schedule filed with the Social Security Office (สำนักงานประกันสังคม). It declares each insured employee's wages and the corresponding contribution amounts for both the employee and employer.

Both the employee and employer contribute 5% of the employee's gross wage each month, subject to a ceiling and floor. Hopshift deducts the employee's share from their pay and calculates the employer's matching contribution separately.

Filing Deadline

SSO 1-10 is due by the 15th of the following month. Late filing may result in a surcharge on top of the contribution amount.

Contribution Rates and Limits

RateWage Ceiling (2026+)Wage Ceiling (before 2026)Wage Floor
Employee contribution5%THB 17,500/monthTHB 15,000/monthTHB 1,650/month
Employer contribution5%THB 17,500/monthTHB 15,000/monthTHB 1,650/month

Calculation logic:

contribution_base = max(actual_wage, 1,650)       // apply floor
contribution_base = min(contribution_base, 17,500) // apply ceiling (2026+)

employee_contribution = contribution_base × 5%
employer_contribution = contribution_base × 5%

Examples for 2026:

Monthly Gross WageContribution BaseEmployee (5%)Employer (5%)Combined
THB 9,000THB 9,000THB 450.00THB 450.00THB 900.00
THB 17,500THB 17,500THB 875.00THB 875.00THB 1,750.00
THB 25,000THB 17,500 (capped)THB 875.00THB 875.00THB 1,750.00
THB 1,200THB 1,650 (floored)THB 82.50THB 82.50THB 165.00

The ceiling increased from THB 15,000 to THB 17,500 effective 2026. Hopshift automatically applies the correct ceiling based on the payroll run year: you do not need to update any settings.

The SSO 1-10 CSV Format

The SSO 1-10 file Hopshift generates is a CSV with a UTF-8 BOM prefix (\uFEFF). The BOM is required so that the file opens correctly in Thai-language Excel installations without garbling Thai characters.

Summary (header) block fields:

FieldExampleDescription
Employer SSO account number123456789010-digit SSO account
Branch code00Branch identifier
Company nameบริษัท ตัวอย่าง จำกัดRegistered company name
Contribution period02/2569Month/BE year
Insured person count12Number of employee rows
Total wages480000.00Sum of all actual wages
Total employee contributions10500.00Sum of employee 5% shares
Total employer contributions10500.00Sum of employer 5% shares
Grand total21000.00Employee + employer + surcharge
Surcharge0.00Late-payment surcharge (0 if filed on time)

Employee detail row fields:

FieldExampleDescription
Sequence1Row number starting from 1
Citizen ID110060012345613-digit national ID
Title (Thai)นายนาย / นาง / นางสาว
Full nameสมชาย ใจดีEmployee full name
Actual wage40000.00Gross wage for the period
Contribution base17500.00Wage after applying floor/ceiling
Employee contribution875.00Employee's 5% share
Employer contribution875.00Employer's 5% share
Remarks``Optional: e.g., ลาออก for resigned employees

How to Download and Submit SSO 1-10

  1. Open the finalized payroll run from Payroll → run detail page.
  2. In the Documents section, click SSO 1-10 CSV.
  3. Save the .csv file to your computer.
  4. Log in to the Social Security Office portal at www.sso.go.th or ssoinscl.sso.go.th.
  5. Navigate to the monthly contribution upload section.
  6. Upload the .csv file. The portal will validate and confirm the import.
  7. Pay the total contribution amount (employee + employer) by the 15th.

You can also download SSO 1-10 PDF for a human-readable version suitable for accountant review or physical records.


Buddhist Era Year Conversion

All Thai government documents use Buddhist Era (BE) years. The BE year is calculated by adding 543 to the Gregorian year. Hopshift handles this conversion automatically: you will see BE years in document headers and filenames.

Gregorian YearBuddhist Era Year
20242567
20252568
20262569
20272570
20282571

Dates in the PND1 file are formatted as DDMMYYYY using the BE year. For example, 28 February 2026 (Gregorian) becomes 28022569 in the PND1 file.


Regenerating Documents

If you need to regenerate compliance documents after a run has been finalized (for example, because you corrected an employee's name, address, or national ID), use the Regenerate Documents function.

When to Regenerate

  • An employee's name was misspelled on their profile when the run was finalized
  • An employee's national ID was entered incorrectly
  • An employee's address was incomplete or wrong
  • A technical error occurred during the original generation

How to Regenerate

  1. Navigate to Payroll and open the finalized run.
  2. On the run detail page, click Regenerate Documents.
  3. Confirm the action in the dialog that appears.
  4. Hopshift re-runs all six document generators using the current state of all employee profiles.
  5. The new documents overwrite the previously stored versions.
  6. A confirmation message appears when generation is complete.

Regenerating documents permanently overwrites the previously stored files. If you need the original versions, download them before regenerating. Previous document versions are not recoverable.

Regeneration does not change any payroll figures (salary amounts, WHT amounts, SSO contributions). It only rebuilds the document files. If you need to correct a payroll amount, you cannot regenerate: the run is locked after finalization and a corrective run is required.

Regeneration Checklist

Before regenerating, verify:

  • You have downloaded and archived any documents you may need to reference later
  • The employee profile data is now correct (name, national ID, gender, date of birth, address)
  • You understand that all six documents will be rebuilt simultaneously

Upcoming Compliance Documents

The following documents are planned for future releases:

DocumentDescriptionStatus
PND1aAnnual withholding tax summary (year-end)Coming soon
50 Tawi (ใบ 50 ทวิ)Annual tax withholding certificate issued to each employeeComing soon

Audit Trail

All compliance-related actions are recorded in the audit log:

ActionLogged Information
Payroll finalizedAdmin name, timestamp, run ID
Document downloadedAdmin name, document type, timestamp
Documents regeneratedAdmin name, timestamp, reason (if provided)

The audit log is accessible from the run detail page under Activity. This log is useful for demonstrating to auditors that filings were generated and downloaded in a timely manner.


Common Issues

"Missing compliance data" blocking finalization

Cause: One or more employees in the run are missing National ID, gender, or date of birth on their profile.

Fix: Click the employee's name in the error message to go directly to their profile. Fill in all three fields and save. Return to the payroll run and attempt finalization again.

PND1 file rejected by the RD portal

Possible causes:

  • The employer tax ID or branch code in your company settings is incorrect
  • The file was modified after download (do not open or edit the .txt file)
  • The portal is experiencing issues

Fix: Check your company's tax ID and branch code in Settings → Company. Download a fresh copy of the PND1 file (do not use a previously opened version) and re-upload.

SSO CSV shows garbled characters in Excel

Cause: The file was opened without recognizing the UTF-8 BOM, or Excel did not detect the encoding correctly on your machine.

Fix: The file has a UTF-8 BOM prefix which should cause Excel to open it correctly. If characters still appear garbled, use the Excel "Get Data from Text/CSV" import wizard and explicitly select UTF-8 encoding. For portal upload, the encoding is handled automatically and this is not an issue.

Documents generated with old employee data

Cause: Employee profile data was updated after the run was finalized.

Fix: Use Regenerate Documents on the run detail page to rebuild all documents with the current profile data.

On this page