Blog
How a Jakarta SME Cut Payroll Processing Time with Odoo Payroll
A Jakarta SME turned a three-day manual payroll into a half-day routine with Odoo Payroll, after careful BPJS and PPh 21 setup and a parallel run. The story.
- narrative
- odoo
A mid-sized SME in Jakarta — around 70 employees across office and field roles — dreaded the end of every month. Payroll was a three-day manual ordeal: one finance staffer worked through a vast spreadsheet, calculating each person’s BPJS contributions, PPh 21 withholding, allowances, and deductions by hand, then producing payslips and posting the whole thing to the accounts manually. It was slow, stressful, and every month carried the quiet fear of an arithmetic error on someone’s pay.
The manual grind
The spreadsheet had grown into a monster of formulas that only one person fully understood — which was itself a risk. Each month, attendance and leave data had to be gathered from another source and keyed in. BPJS and PPh 21 were calculated with formulas that had to be checked against the rules. Payslips were generated and emailed one by one. Then the salary expense, the BPJS liabilities, and the PPh 21 payable were entered into the accounting system as manual journal entries.
Three days, every month, for something that should have been routine. And because it was manual and concentrated in one person, it was both slow and fragile — if she was unwell at month-end, payroll was in trouble.
What changed
Because the company already ran Odoo for HR and accounting, they configured Odoo Payroll — with care given to the part that mattered most.
Careful BPJS and PPh 21 setup. The salary rules for BPJS Kesehatan, the Ketenagakerjaan programmes, and PPh 21 (with correct PTKP handling per employee) were configured deliberately by someone who understood both Odoo and Indonesian payroll. This was the real work.
A parallel run before trusting it. Crucially, they ran Odoo payroll alongside the old spreadsheet for a full month and compared every figure — BPJS, PPh 21, net pay — employee by employee. The parallel run surfaced a couple of configuration tweaks, which were fixed while the old process was still the source of truth. Only when a full cycle matched exactly did they switch over.
Automated the routine. Attendance and leave fed in from the same Odoo system. Payslip batches generated the whole company’s payslips at once. Employees accessed payslips through self-service. And the payroll posted to accounting automatically, ending the manual journal entries.
The result
The monthly payroll run went from three days to roughly half a day. The calculation that had consumed most of the time was now automatic; the finance staffer’s job became reviewing the batch and handling exceptions rather than computing every figure by hand. The fragile dependency on one person’s spreadsheet expertise eased, because the rules lived in the system, not in her head.
Just as valuable was the reduction in anxiety. Once the configuration was validated and a parallel cycle confirmed it, the monthly fear of a pay error faded. The numbers were computed consistently by rules that had been checked, not reconstructed by hand under time pressure.
Why it worked
Two things made this a success rather than a cautionary tale. First, they respected how sensitive payroll is and invested in getting BPJS and PPh 21 configured correctly, by someone who knew the rules. Second, they did not trust it until a full parallel run proved it matched. Payroll is exactly the wrong place to “go live and see” — and they did not.
It is worth being honest that the upfront setup was real work. The time savings came after the careful configuration and validation, not instead of them. Businesses that skip that rigour with payroll usually regret it.
If your payroll is a multi-day manual grind concentrated in one person and one spreadsheet, automating it in Odoo can give that time back — provided the Indonesian rules are configured and validated properly. We are happy to assess what your payroll would take, in a free one-hour conversation.