By KYN AI Advisory Team — AI implementation specialists, Singapore
A spreadsheet can hold payroll for three countries, but it cannot hold three sets of statutory rules without someone remembering which tab uses which. The fix is a system with one employee record, one rule table per country and one approval step before any payment file leaves. This article describes that design for a Singapore company with staff in Hong Kong and Indonesia. It is a scenario built from how we run payroll for KYN itself, not a report on a named client.
Why does one payroll sheet fail across three countries?
A sheet fails for three reasons, and none of them is arithmetic.
- Rules live in people's heads. The Singapore tab applies CPF. The Hong Kong tab applies MPF. The Indonesia tab applies BPJS. Whoever built each tab knows the ceilings and the exceptions. When they leave or go on leave, the rule goes with them.
- Rates change on a fixed date. Singapore's CPF rates changed on 1 January 2026. A sheet has no way to say "use the old rate for December and the new rate for January". Someone edits a cell, and last month's recalculation silently changes.
- Nothing records who changed what. A payroll error found in month four needs a trail. A sheet gives you version history, with no reason attached to each change.
The cost is rarely a headline error. It is a slow leak: a contribution paid on the wrong base, a late payment, an hour per pay run spent re-checking numbers that should not need checking.
What does each country require?
Each country has a statutory retirement or social security scheme. They differ in who pays, on what base and by when. Here is what the official sources state.
| | Singapore | Hong Kong | Indonesia | |---|---|---|---| | Scheme | CPF | MPF | BPJS Ketenagakerjaan | | Employer share | 17% of wages for citizens and SPRs aged 55 and below with wages above S$750 | 5% of relevant income | Varies by programme | | Employee share | 20% of wages, same group | 5%, with a floor and a cap | Varies by programme | | Base limits | Separate ceilings for ordinary and additional wages | Monthly minimum HK$7,100, maximum HK$30,000 | Per programme | | Payment timing | Set by CPF Board | Generally the 10th of the following month | Per programme |
Sources: the CPF Board's contribution page for the 2026 Singapore rates, the MPFA's mandatory contributions page for the Hong Kong rates, limits and deadline, and BPJS Ketenagakerjaan, which lists five programmes for wage earners: old-age savings (JHT), work accident (JKK), death (JKM), pension (JP) and job loss (JKP).
Two points to read from the table. First, the rates apply to defined groups. The Singapore figures above cover citizens and third-year-onward SPRs aged 55 and below, so foreign staff and older staff need different rows. Second, the Indonesian side is a set of programmes, each with its own rate and base. A payroll system has to model them separately, not as one percentage.
This article states the figures the sources give and no others. Your adviser or the agency confirms the rate for each employee.
What does a single payroll system look like?
Five parts, each small.
- One employee record. Legal name, country of employment, employment type, citizenship or residency status, start date, pay currency and bank details. Status matters because it selects the rule row.
- A rule table per country, with effective dates. Each row holds a rate, a base, a ceiling and a date range. A pay run for December reads the rows valid in December. A rate change adds a new row. It never overwrites an old one.
- A pay run that reads only the tables. Gross pay in, statutory deductions out, net pay and employer cost per person. No formula lives in a cell someone can edit by accident.
- Output files per country. A bank payment file in the local format, a statutory contribution file or schedule, and a payslip in the employee's language.
- A journal for the books. One entry per pay run, per entity, posted to the accounting ledger. KYN's own payroll posts as a manual journal to Xero, because the payroll lives in our system and the ledger lives in Xero.
The design choice that matters most is the second. Effective-dated rules turn "we changed a cell" into "we added a row on a date, and the old runs still reproduce".
How do you handle currency and cut-off dates?
Pay each person in the currency of their contract. Report group cost in one currency, usually the head office's.
- Store the rate used for each pay run, with its source and date. Do not recalculate a past run at today's rate.
- Keep one calendar per country. Singapore, Hong Kong and Indonesia have different public holidays, and a payment date that falls on one needs a rule: pay the working day before, or the working day after.
- Show the cut-off for changes, such as new joiners, leavers and claims, on the pay run screen. A change after cut-off rolls to the next run unless a named person overrides it.
Hong Kong's contribution deadline, for example, moves to the next working day when the 10th falls on a Saturday or public holiday, per the MPFA. A calendar per country encodes that once.
Which steps should wait for a person?
Payroll moves money, so approval is not optional.
- Approve the pay run. A named person sees totals by country, the change against last month and every line that moved by more than a threshold you set.
- Release the payment file. The system produces the file. A person uploads it to the bank or approves it in the bank's own portal.
- Change a rule row. A rate change needs a second person to confirm the source.
- Edit a past run. Closed runs are locked. A correction is a new adjustment line in the next run, with a reason.
Everything else can run unattended: reading timesheets, calculating, drafting payslips, building the files, flagging differences.
What does it cost to run?
We do not publish a price list. Pricing is a one-off build fee, then a monthly retainer of at least twelve months, quoted after the first 14 days of review. The running cost of the calculation itself is small, because payroll is arithmetic and rules, not model inference. Models help at the edges: reading a pay change request from an email, or drafting a payslip note. Those tasks cost cents per document.
Where KYN fits
We built payroll for KYN's own books on 2026 CPF rules: a CPF engine, payslips, bank and CPF files, and a manual journal to Xero. Access is limited to named users on an allowlist, every action is logged with the actor, and the database uses row-level security so a user sees only what their role allows. The system runs in a cloud account in your name.
For a three-country team, the first 14 days are a review of the current sheets and interviews with whoever runs payroll today. A full build ships in under 90 days. Rights in the custom code and configuration pass to you on full payment. See finance systems and security, and the related guide to custom expense tracking in Singapore.
Frequently asked questions
Can one system hold different statutory rules for each country?
Yes. Each country gets its own rule table with effective dates, and each employee record points to the right rows through country and residency status. A pay run reads the rows valid for its period.
Does this replace a payroll provider?
It can, where the rules are well defined and a person approves each run. Some companies keep a local provider in a country where filings are complex, and use one system for the group view and the journal. That is a valid design.
Who files and pays the contributions?
A named person does. The system prepares the amounts and files, and the person submits them to CPF, the MPF platform or BPJS. Filings and payments wait for that person.
Checked 30 October 2026.
Curious whether Marketing agents fits your business? Talk to KYN on WhatsApp — no forms, just a conversation.