Skip to content
HNROS Help Center
English
Start free
Contents1. What is this window for, who needs it?2. Getting to know the screen: nine tabs3. The parameter rule and the CONFIRM badge4. Contributions tab — social security5. Tax tab — the bracket table comes first6. Bonus (THR) — the date depends on religion7. Exit entitlement — the contract type changes everything8. PKWT tab — the silent legal risk9. Family members — they feed two calculations10. WLKP and OHS reports — numbers, not an official file11. Regional minimum wage12. Authorisation: who sees, who writes?13. Common situations14. Official exports — SIPP, Edabu, e-Bupot, 1721-A1

Help › Payroll Legislation

Payroll Legislation — A Guide from Scratch

The Personnel window holds the person and the gross figure. This window sits on top of it and performs the calculations your country's legislation asks for: social security contributions, income tax, the mandatory religious-holiday bonus, exit entitlements, contract registration, regional minimum wage and the official reports. One rule governs everything: no rate, cap or bracket is written into the code. Every number is a parameter, and the screen shows the parameter's name and confirmation status right next to the calculation.

1. What is this window for, who needs it?

The difference between two countries is not in the numbers but in the concepts. Turkey has one social security institution; Indonesia has two institutions and five separate programmes. Turkey has no mandatory bonus; Indonesia has a bonus that must be paid before a religious holiday, and the date depends on the employee's religion. In Turkey the minimum wage is a single national figure; in Indonesia every district sets its own. This window carries those concepts.

THE MOST IMPORTANT RULE — this window does NOT write deductions into payroll. Contribution and tax calculations are for information: to reconcile with your official payroll, to check a figure and to report. They are not a payment instruction. Every screen shows a scope note written by the server; read that note.

2. Getting to know the screen: nine tabs

The tabs, briefly: Contributions (social security) · Tax (income-tax report + bracket table) · Bonus (THR) · Exit entitlement (kompensasi / pesangon) · PKWT (registration and expiry warnings) · Family members · WLKP (annual employment report) · OHS (P2K3 semi-annual report) · Parameters.

The top row shows the country code and the currency. Two badges may appear next to them: "n parameters missing" (a figure the calculation needs is empty) and "Tax bracket table is empty". Calculations still run while a badge is showing, but the missing item comes out as 0 and the screen tells you so — there is no silent zero.

3. The parameter rule and the CONFIRM badge

Under every calculation there is a "Parameters used" row; click it to expand. It lists the key, the value and the source of every number that went into the calculation. If the source says CONFIRM, that value came from research and must be verified by your local accountant. To correct values use the Personnel window → Legislation tab; the calculation here reads the new value on its next run, no release is needed.

4. Contributions tab — social security

Type the period (YYYY-MM) and press Calculate. For each person the five programmes (JKK work accident, JKM death, JHT old-age savings, JP pension, JKP unemployment) and the health contribution are listed separately, with employer and employee shares apart. Two fine points: the JP base is limited by a wage cap (if the "JP base" column shows a "cap" badge, the cap applied to that person), and the health contribution is per household: if the employee plus the insured family members exceed a certain count, an extra per-person contribution is calculated for every additional member.

5. Tax tab — the bracket table comes first

This tab is born with an empty table, and that is deliberate: the official monthly withholding tables (TER A/B/C) are long and can change every year; the program does not invent them. Pick the category in the table below and enter the rows from the official annex, or load the list your accountant gave you. For the annual progressive brackets the Suggest template button brings a proposal — a proposal enters no calculation until you approve it.

The monthly calculation is simple: the person's tax category (derived from family status) is found and the rate of the bracket the gross falls into is applied. In the balancing month (December by default) the calculation changes: from the annual gross the occupational-expense deduction, the employee contribution shares and the family-status allowance are subtracted, the progressive brackets are applied to what remains, and the amounts withheld during the year are offset. The table shows two extra columns that month.

6. Bonus (THR) — the date depends on religion

Type the year and press Calculate. Someone who has worked less than a year is also entitled: the amount is in proportion months ÷ 12. The payment deadline is found by counting back from the holiday that matches the person's religion. If the date has passed, the row is flagged with a red "overdue" badge and the number of days. No late penalty is calculated — the penalty is an official sanction and this program does not invent its amount.

A calendar is required. Holiday dates come from Personnel → holiday calendar and their type must be "religious". If the calendar is empty the calculation still runs but no deadline appears; the screen shows the "TAKVIM_YOK" (no calendar) warning.

7. Exit entitlement — the contract type changes everything

Type the personnel number, pick the contract type if needed, press Calculate. On a fixed-term (PKWT) contract, uang kompensasi arises at the end: min(1, months ÷ 12) × monthly wage. The critical point here: this entitlement also arises below one year of service. The old calculation zeroed anything under 12 months; the minimum service period is now a parameter and is 1 month in the Indonesian set. On an indefinite (PKWTT) contract a step table is used: the number of monthly wages for the service year (pesangon) and, where applicable, the service award (UPMK) appear as separate lines. Unused-leave pay (UPH) is added in both cases.

Turkey is unchanged. In the Turkish set the step tables are left empty; when the table is empty the calculation falls back to the old linear path (service years × severance days × daily wage) and reproduces today's figure exactly.

8. PKWT tab — the silent legal risk

A fixed-term contract must be registered with the authority within a set period after signature. An unregistered contract may convert into an indefinite one — and this happens without anyone noticing. This tab produces two warnings: overdue registration and approaching expiry. The "Enter registration" button on the registration row records the number and the date; the record is written to both the contract and the personnel card, and the warning drops off the list.

9. Family members — they feed two calculations

Type the personnel number, press Fetch, then use Add member to record a spouse, child or parent. This list is used in two places: the household head-count in the health contribution and the allowance category in income tax (is there a spouse, how many dependants). In a company with no member records the health contribution comes out short and the tax category comes out with the lowest allowance.

10. WLKP and OHS reports — numbers, not an official file

The WLKP tab produces the annual employment table: gender, education, contract type, employment type, department and age breakdowns; the list of foreign workers; the disability-quota check; the OHS committee members (based on the certificate pattern you define). The OHS tab lets you pick a period (half-year by default, or a quarter) and gives accident / near-miss counts, lost work days, frequency and severity rates, a summary of medical checks and exposures, and the number of expiring certificates / PPE.

The P2K3 report is now semi-annual (Permenaker 13/2025). The period picker on the OHS tab therefore opens on Half-year (6 months) by default and shows the current half-year: 1st half-year January–June, 2nd half-year July–December. Quarter (3 months) can still be chosen for internal monitoring; but when a quarter is chosen, a warning at the top of the screen says that this output is quarterly and that Half-year must be chosen for the official report.

No official file is produced. Official formats such as SIPP, Edabu, e-Bupot XML, 1721-A1 and the registration file are NOT produced here — guessing a schema is more dangerous than producing no file. What is produced is data and CSV; you enter the figures into the official portal by hand or import them into your accounting software.

11. Regional minimum wage

A single national figure is not enough. The program looks first at the employee's district, then at the province, and finally at the company default. The key pattern is asgari.brut.<DISTRICT CODE> → asgari.brut.<PROVINCE CODE> → asgari.brut. The code is written in ASCII and UPPER CASE: "Bekasi" → BEKASI, "Şanlıurfa" → SANLIURFA. Which key was used is shown row by row in the contributions table, so a person who fell to the wrong region is spotted immediately.

12. Authorisation: who sees, who writes?

To open the window you need the Personnel/HR module permission. Write operations (adding a family member, entering a tax bracket, recording registration, setting education) require the HR Manager role. Without it the window opens read-only and says so in the top row; buttons stay disabled. The decision is made on the server — disabling a button in the browser is not security, only courtesy.

13. Common situations

What you see Cause and remedy
All contribution amounts are 0 If the person has no contract in force the gross is 0. Enter the wage from Personnel → Contract; the row shows the "no gross wage on the contract" warning.
The JKK line is always 0 The work-accident rate depends on the company's risk class; because there is no single correct figure it is born empty. Enter your own class's rate into the sosyal.jkk_oran parameter.
"VERGI_DILIM_YOK" The bracket table is empty. Pick the category in the table at the bottom of the Tax tab and enter the rows; for the annual brackets "Suggest template" offers a starting point.
The regional minimum wage is not applied The key code does not match the district name exactly. Look at the "source" text in the contributions table: it tells you which key was used. The code is ASCII and upper case (Bekasi → BEKASI).
The exit entitlement came out as 0 Service is below the tazminat.asgari_kidem_ay parameter, or there is no gross wage. The note on the line tells you which.
Frequency/severity rate not calculated The rates are divided by working hours; if there are no timesheet hours in the period the division cannot be done. Enter the timesheet or check the multiplier parameters.

14. Official exports — SIPP, Edabu, e-Bupot, 1721-A1

The Official export tab maps the rows produced by the contribution and tax calculations onto the column layout each portal wants. There are four outputs: SIPP (BPJS Ketenagakerjaan), Edabu (BPJS Kesehatan, household based — the employee plus insured dependants), e-Bupot 21/26 (monthly) and Formulir 1721-A1 (annual).

Column names are not invented. The SIPP and Edabu templates live behind a portal login, and e-Bupot moved to Coretax XML in January 2025 with no published machine-readable schema. So HNR does not make up a column list: you define the headers of the template you downloaded from the portal as a Declaration schema, and the output follows it. If you export CSV without a schema, the headers are HNR's own field names and the file ends with a line saying so.

e-Bupot's three rules are hard-coded because they are not a schema but published DJP constraints: the file name starts with the 15-digit NPWP, the file holds at most 10,000 rows and stays under 2 MB. The employer NPWP comes from the vergi.npwp_isveren parameter; if it is not 15 digits the export stops. If the row or size limit is exceeded you are asked to split the file.

1721-A1 is a DRAFT only. The annual withholding certificate wants the amount actually withheld during the year; in HNR, PPh 21 is a report and writes no deduction onto the payroll — i.e. there is no real withholding ledger. Every record therefore carries the taslak (draft) flag and the document is headed "produced from computed TER values; do not file before reconciling with the official withholding records". For the same reason, while the TER bracket table is empty the tax outputs are not produced at all: HNR does not invent the official table.

Two gates. Settings › Safety gates › vergi.resmi_disa_aktarim is off by default; while off, these four endpoints are refused and the existing contribution/tax reports are untouched. The second gate is the country: unless the active regulation set is Indonesia (ID), the endpoints stop with "these exports are for the Indonesian regulation set". Nothing changes for a company running the Turkish set.

Why Excel is produced in the browser. Adding a new server-side library is forbidden in this project, and the spreadsheet writer already exists in the browser. So the server hands you the rows and column names, and the "Download Excel" button writes the file on your own machine. CSV and (when a schema is defined) XML come from the server.

Related guides: Human Resources · Settings · Security.