·4 min read
Automating Payroll in Indonesia: BPJS, PPh 21 TER and What Your System Must Handle
Payroll in a spreadsheet works until it doesn't. Here is how BPJS contributions and the PPh 21 TER method work, and the features a payroll system needs to get them right every month.
- payroll
- bpjs
- pph 21
- hr
- erp

Payroll is one of the first processes Indonesian companies try to run in a spreadsheet, and one of the first to break as they grow. With ten employees on fixed salaries it is manageable. With fifty people, overtime, allowances, mid-month joiners, THR and the PPh 21 TER method, one wrong formula can underpay staff or misreport tax for months before anyone notices.
This article explains the main moving parts and what a payroll system needs to handle them. Rates and caps below change over time, so treat them as a starting point and confirm the current figures with your tax consultant.
What goes into gross pay
- Basic salary, at or above the regional minimum wage (UMP or UMK), which is updated every year.
- Fixed allowances, such as position or housing allowances, paid regardless of attendance.
- Variable pay, such as overtime, meal or transport allowances based on attendance, commissions and bonuses.
- THR, the religious holiday allowance, generally one month's wages for employees with at least twelve months of service and prorated for shorter service.
The split between fixed and variable pay matters, because BPJS contributions are calculated on basic salary plus fixed allowances.
BPJS contributions
BPJS Kesehatan
Health insurance is 5% of monthly wages: 4% paid by the employer and 1% by the employee, calculated on wages up to a cap of Rp12,000,000 per month. The floor is the regional minimum wage.
BPJS Ketenagakerjaan
- JKK (work accident): 0.24% to 1.74% paid by the employer, depending on the risk level of the work.
- JKM (death benefit): 0.30% paid by the employer.
- JHT (old-age savings): 5.7%, of which 3.7% is paid by the employer and 2% by the employee.
- JP (pension): 3%, of which 2% is paid by the employer and 1% by the employee, calculated on wages up to a cap that is adjusted every year in line with GDP growth. Since March 2026 the cap is Rp11,086,300 per month, up from Rp10,547,400.
PPh 21 with the TER method
Since January 2024, under Government Regulation 58 of 2023, monthly PPh 21 withholding for permanent employees uses effective average rates, known as TER. The basic idea:
- From January to November, tax is gross monthly income multiplied by a TER rate. The rate depends on the income level and the employee's category, A, B or C, which is set by their PTKP status, meaning marital status and number of dependants.
- In December, or in the employee's last month, tax for the whole year is recalculated using the regular progressive rates under Article 17 of the Income Tax Law, after deductions such as occupational costs and the employee's JHT and JP contributions.
- The December withholding is the annual tax minus what was already withheld from January to November. It can be large, and occasionally the result is an overpayment that must be handled.
Withholding is now reported through Coretax. Each month, a withholding slip for every permanent employee (BPMP) is issued in the e-Bupot menu, and those slips flow into the monthly PPh 21/26 return. For the last tax period, the annual slip (BPA1) is issued instead, and it must reach the employee within one month after that period ends. If your other systems are also adjusting to Coretax, see what Coretax means for your business software.
What a payroll system must handle
- Employee master data: PTKP status per tax year, NPWP or NIK, BPJS numbers, bank account and join date.
- Rates as configuration, not code. TER tables, BPJS percentages, caps and minimum wages change. They should be dated settings that HR can update, not formulas buried in a script.
- Attendance and overtime pulled from the attendance system instead of typed in.
- Proration for joiners, leavers and unpaid leave.
- THR and bonuses, including their effect on that month's TER calculation.
- December reconciliation and final settlement for leavers.
- Outputs: payslips, a bank transfer file, BPJS reports, tax reports and journal entries for accounting.
- Strict access and audit logs. Salary and bank data are sensitive personal data under UU PDP, as covered in our UU PDP checklist for business software.
Buy or build?
Several local payroll SaaS products handle BPJS and PPh 21 well, and for a company with standard pay structures they are often the fastest route. A custom or ERP-integrated module makes sense when payroll has to share data with other systems, such as attendance from a factory, commissions from sales, project costing or a single ledger. Our Legacy ERP, for example, runs Finance, HR and Payroll alongside Sales, Inventory and Purchases, so salaries post straight to the same books.
Whichever route you choose, run the new system in parallel with your current spreadsheet for at least one or two payroll cycles, and compare every employee's numbers before switching.
If your payroll spreadsheet has grown more complicated than anyone wants to admit, get in touch with CodeWorks. We can help you decide between a ready-made tool and a module that fits your existing systems.