Concepts & Data Model
Every screen in Interwise is a view onto a small set of objects. Once you know what a Tenant, a Company, and an Employee actually are — and what’s attached to each — the rest of the product reads as configuration of those things, not new concepts. This page is the map. Roles & Access covers who can see and change these objects; this page covers what they are.
Tenant, Company, Employee
Tenant is one paying customer — one Interwise account. Company is a legal entity that lives under a tenant; a single tenant can hold several companies at once, which is how a holding group runs multiple legal entities from one account instead of juggling separate logins per entity. Employee belongs to exactly one company. A person who works at two companies in the same group is two separate employee records, one per company, because payroll, tax, and BPJS are all calculated per company.
Everything below Employee — periods, compensation, tax — is scoped to one employee. Nothing here is shared across employees or companies; a holding group’s five companies each carry their own complete set of these records, kept apart by the same tenant isolation that separates one customer’s data from another’s.
Employment Periods
An employee isn’t one continuous fact, they’re a sequence of stints. Every employee has one or more employment periods — one row per continuous stretch of employment, each with a start date, an optional end date, and a reason (hired, resigned, terminated, rehired, contract end). A period with no end date is the active one; an employee can only have one open period at a time.
This matters at payroll time. Each run prorates an employee against whichever period actually overlaps that run’s month, not against their original hire date. So when someone resigns in March and is rehired in September, the September-onward payroll runs prorate from the rejoin date, not from the year they first joined. The same mechanism means a resignation mid-month closes out that employee’s last active period, and the run picks up the tail end correctly instead of assuming they worked the full month. A run also treats a month as an employee’s last month whenever their active period ends inside it, which changes how their year-end tax settlement is computed (see Tax Configuration below).
Compensation Items
An employee’s pay isn’t a single number, it’s a list of recurring earnings and deductions — basic salary, allowances, fixed benefits, statutory deductions — each one a compensation item. One item is always the basic salary; that figure is what the overtime calculation divides by 173 to get an hourly rate. Items marked as attendance-based are prorated by the employee’s working ratio (actual hours worked over expected hours) before they hit the payslip, so a new joiner’s first partial month or an employee on unpaid leave doesn’t get paid as if they worked the full period. Items also flag whether they count toward the BPJS Kesehatan or BPJS Ketenagakerjaan contribution base, since not every earning is BPJS-eligible.
Tax Configuration
Each employee carries one tax configuration: a NIK (national ID, which doubles as the tax ID since PMK 112/2022 — there’s no separate NPWP field), a PTKP code with its corresponding rupiah amount, and a tax mode. The 20% no-tax-ID surcharge applies whenever the NIK is missing.
The tax mode decides who actually bears the tax cost:
- GROSS — the employee bears it. Tax is deducted from pay, so take-home pay is lower than gross.
- NETT — the company bears it. No deduction from the employee; the cost shows up as a company expense instead.
- GROSS_UP — the company adds a tax allowance to the employee’s earnings so that, after tax is deducted, take-home pay comes out whole. This is computed iteratively until it converges.
The Period Model
Payroll doesn’t run once, it runs every period, per company. A payroll run covers one company and one calendar month, and there’s a regular run for ordinary pay plus separate run types for THR, bonuses, service charges, and corrections to a prior run. Every regular run reads the same underlying records — employment periods, compensation items, tax configuration — as of that month, which is why “correct once” was never the goal: the same calculation has to hold up automatically, month after month, as employees join, leave, and rejoin.
Glossary
Indonesian compliance terms you’ll see throughout the product and the rest of these docs.
| Term | Meaning |
|---|---|
| PPh 21 | Indonesia’s income tax withheld on employment income — the tax Interwise calculates every run. |
| PTKP | Non-taxable income threshold, set by marital/dependent status (e.g. TK/0, K/1) — subtracted before tax applies. |
| TER / IdTer | The monthly effective-rate tax table (PMK 168/2023) used for every month except the year’s last month, which settles on the full bracket-progressive calculation instead. |
| BPJS Kesehatan | Indonesia’s mandatory health insurance contribution, split between employee and employer. |
| BPJS Ketenagakerjaan | Indonesia’s mandatory employment insurance, covering four components: JKK (workplace accident), JKM (death), JHT (old-age savings), and JP (pension). |
| THP | Take-home pay — total earnings minus total deductions, what actually lands in the employee’s account. |
| NIK | National ID number — the tax ID used for payroll. |
Where to Go Next
- Roles & Access — the full role model,
from platform-level
SUPERADMINdown to self-serviceEMPLOYEE, and how tenant isolation keeps every customer’s data separate.
A deep dive into the payroll engine — the exact order BPJS, overtime, and tax are calculated in — is on the way.