← systeric.com Interwise / Docs
Open App →

Gross to Net

You already know that 2 + 3 × 4 is 14 and not 20. Both are arithmetic. Both look like answers. Only one is right, and the wrong one does not look wrong, which is why we were taught the order rather than left to work it out each time.

Gross to net is that problem with more steps and real money. It is the sequence that turns what someone is contractually owed into what arrives in their bank account, and the sequence is load-bearing: each step’s output is the next step’s input, and each step is calculated on a different base.

Why a base is the thing to understand#

The mistake people bring to payroll is imagining one number, the salary, with several percentages taken off it. That is not what happens.

A base is the specific amount a particular calculation is allowed to run on, and every deduction has its own. An allowance can be taxable but not subject to BPJS. Overtime is taxable but is not part of the BPJS wage base in most configurations. Employer BPJS contributions are a company cost, yet some of them are taxable income to the employee. A ceiling caps one base and not another.

So “twelve million rupiah” is never one number in a payroll calculation. It is the starting point from which four or five different bases are derived, each slightly different, each feeding a different deduction.

everything the employee is paid taxable base BPJS wage base capped at a ceiling prorated by attendance
One salary, four different bases. Nothing here is a percentage of the top bar, which is the single most common misunderstanding about how a payslip is produced.

The sequence#

This is the order our engine runs, and the reason for each position.

1. Working ratio. Actual hours over expected hours, capped at 1. This has to come first because it prorates everything downstream that is attendance-linked. A mid-month joiner is not paid a full salary minus something, they are paid a proportion from the start.

2. Compensation items. Base salary and allowances, each prorated by the ratio if it is attendance-linked, each flagged for which bases it belongs to. This is also where basic salary is identified, because later steps need it specifically rather than needing total pay.

3. Overtime. Grouped by ISO week, because the Indonesian multipliers are per week, not per month. The hourly rate is basic salary divided by 173. It has to come after basic salary is known and before tax, because it is taxable.

4. BPJS. Kesehatan and Ketenagakerjaan, each on its own wage base with its own ceiling and its own employer and employee split. It must precede tax, because employee contributions affect taxable income and some employer contributions are themselves taxable to the employee.

5. Accumulated history. Everything paid earlier in the same year. Nothing about annual tax can be settled without it.

6. Tax. Either the monthly TER rate or, in December or a final month, the full bracket-progressive settlement of the year. See Compliance for the values.

7. Tax mode. Whether the employee bears the tax (gross), the company pays it without deducting (nett), or the company adds an allowance to cover it (gross-up, which iterates because the allowance is itself taxable).

8. Take-home pay. Total earnings minus total deductions.

Why the order cannot be rearranged#

Take one example that is easy to get wrong. Overtime is taxable, so it must be computed before tax. But overtime’s hourly rate derives from basic salary, so basic salary has to be established before overtime. And basic salary is prorated by the working ratio, so the ratio must come before that. Three steps whose order is fixed by dependency, not by preference.

Now swap tax and BPJS. The number still comes out. It is still in rupiah, still roughly the size a payslip should be, and it is wrong by an amount too small to notice on one payslip and large enough to matter across a year and a workforce.

overtime BPJS tax one order overtime tax BPJS two steps swapped both produce a payslip
Same employee, same inputs, two orderings, two different amounts in the bank. Neither output announces which one it is, and that is the entire reason the sequence is written down and tested rather than remembered.

The parts that surprise people#

  • December is a different calculation, not a bigger one. Eleven months use a flat effective rate applied to that month’s income. December recomputes the whole year properly and settles the difference, which can be a refund. An employee’s final month does the same thing early.
  • Gross-up iterates. The tax allowance is itself taxable, so covering the tax creates more tax. It converges, but it is a loop rather than a formula.
  • Employer cost is not the same as gross pay. Employer BPJS contributions never appear in take-home but are entirely real money. “What will this hire cost me” and “what will they take home” are two different questions with two different answers, and most tools only answer the second.
  • Proration is not a discount. A person who joins on the 15th is not on a reduced salary. They are on a full salary for a fraction of the period, and every attendance-linked item scales with it while the fixed ones may not.

Why this matters to our strategy#

Our bet is that this market is won by being trusted enough not to be re-checked, and that trust is not won by producing a correct total. It is won by being able to answer, in plain Bahasa, why is my take-home different this month.

That question can only be answered by a system that knows its own sequence. If the calculation is a single opaque step that emits a number, the only available answer is “the system calculated it”, which is precisely the answer that sends someone back to a spreadsheet. If each step is named, attributable, and shows the base it ran on, the answer becomes “you had two days of unpaid leave, which lowered the prorated portion, which lowered the taxable base, which moved you to a lower effective rate”, and that is an answer a person can take to their employee.

The same structure answers the other half of our positioning, what will this hire actually cost me, because employer contributions are already separated from employee deductions in the sequence rather than blended into one figure.

What this means for what we build#

  • Every payslip line must carry its base and its step. Not just an amount. The explanation is only possible if the calculation records how it got there rather than only what it produced.
  • The sequence is a tested contract. It is not an implementation detail free to be reordered for convenience. A change to the order is a change to everyone’s pay.
  • Show employer cost alongside employee deductions, on the same screen, because the buyer’s question and the employee’s question are different and both are ours to answer.
  • Explain in the order the reader experiences it, which is not always the order it is computed in. Compute in dependency order, present in the order that answers the question they asked.