ZuloOne
English
Sign in
Menu

🛡️ Social insurance

Updated

Social insurance calculates employee and employer contributions from payroll, withholds the employee part, creates the fund liability and pays it with a separate document. Statutory social insurance is set up once in HR settings; any further payroll contribution — health insurance, union dues, a voluntary fund — is a card in the Contribution types dictionary and keeps its own rates, its own ceiling and its own fund balance.

← Business process wiki

How the process works#

Social insurance is optional in the core HR contour: when rates are zero or absent, payroll can still run without a contribution document.

The flow is:

  1. Payroll accrual passes employee gross amounts to ISocialInsuranceService.
  2. The service reads HRSettings and every active contribution type, applies each one's own wage ceiling and the nationality rule, and creates a posted SocialInsuranceAccrual when at least one line has a non-zero contribution.
  3. One accrual carries all contributions from that pay: one line for statutory social insurance, plus one line per active contribution type. The statutory line is the one with an empty Contribution type.
  4. SocialInsuranceAccrual writes SocialInsurance separately per contribution type, and reduces PayrollLiability by the sum of all employee contributions.
  5. SocialInsurancePayment pays a fund and reduces SocialInsurance — only in the slice of the contribution type named on the line.
  6. GL integration posts employee withholding, employer expense, fund payable, and fund payment when accounts are configured. A contribution type with its own expense and payable accounts is posted to those; otherwise it joins the statutory accounts.

Payment is a separate document. Do not move the accrual into a paid state: that would remove the posted withholding and employer liability.

Settings#

HR settings#

Open Ribbon → HR → Settings → HR settings.

Field Values and behaviour
Home country Optional country of the employer. Empty means every employee is treated as local for social insurance. Filled value is compared with Nationality on the employee.
Social insurance rate, employee Decimal fraction for local employees. 0.0975 means 9.75%. Empty or 0 means no employee-side contribution.
Social insurance rate, employer Decimal fraction for local employees. 0.1175 means 11.75%. Empty or 0 means no employer-side contribution for local employees.
Social insurance rate, employer (foreign staff) Decimal fraction for employees whose Nationality differs from Home country. Employee contribution is zero for foreign staff.
Contributory wage ceiling Money amount. Empty or 0 means no ceiling. A positive value caps the base before rates are applied.

The service treats an employee with empty Nationality as local. This avoids silently removing contributions just because the employee card is incomplete.

Contribution types#

Open Ribbon → HR → Dictionaries → Contribution types. One card per payroll contribution beyond statutory social insurance: health insurance, union dues, a voluntary pension fund. Statutory social insurance itself is not a card here — it stays in HR settings, and on an accrual line it is the line whose Contribution type is empty.

Rates live on the card and not in HR settings because there can be many types, each with its own rates, its own ceiling and its own ledger account.

Field Values and behaviour
Name Required. Shown in lists and on accrual and payment lines.
Code Required, unique, up to 20 characters. Short code for filing layouts and reports.
Rate, employee Decimal fraction withheld from local employees. 0.0125 means 1.25%. Empty or 0 means nothing is withheld for this contribution.
Rate, employer Decimal fraction paid by the employer for local employees. Empty or 0 means no employer side.
Rate, employee (foreign staff) Decimal fraction withheld from employees whose Nationality differs from Home country. This is a separate field, not a reuse of the local rate: 0 here means foreign staff are not withheld for this contribution at all.
Rate, employer (foreign staff) Decimal fraction paid by the employer for foreign staff.
Contributory wage ceiling Money amount, this type's own ceiling. Empty or 0 means no ceiling, not a zero base. It is independent of the social insurance ceiling in HR settings.
Active Required. Only active types are accrued. A new card opens with the box ticked. Unticking stops future accruals; already posted contributions and their fund balance are untouched.
Expense account Optional account code the employer share is charged to. Empty falls back to Social insurance expense account in accounting settings.
Payable account Optional account code the debt to the fund is credited to. Empty falls back to Social insurance payable account.

Deactivating a type is the way to stop it. Deleting the card would orphan the fund balance already posted against it.

Employee data#

Open Ribbon → HR → Dictionaries → Employees. The social insurance calculation reads Nationality. Payroll still needs the usual payroll fields such as Position, Division, Hire date, and Active; those are described on the payroll page.

GL account profile#

Open Ribbon → Accounting → Settings → Accounting settings.

Field Used for
Payroll liability account Debit for the employee part withheld from payroll liability.
Social insurance payable account Credit on accrual, debit on fund payment.
Social insurance expense account Debit for the employer contribution.
Cash account Credit for the fund payment.

Empty account references skip the GL leg; the HR register movements still post.

Example with numbers#

Settings:

Setting Value
Employee rate 9.75% (0.0975)
Employer rate 11.75% (0.1175)
Foreign employer rate 2.00% (0.02)
Wage ceiling 45,000.00

Two employees are accrued:

Employee Gross wage Nationality result Contributory base Employee contribution Employer contribution
Local employee 50,000.00 Local 45,000.00 4,387.50 5,287.50
Foreign employee 50,000.00 Foreign 45,000.00 0.00 900.00

The payroll liability to the local employee is reduced by 4,387.50. The social insurance fund liability is 4,387.50 + 5,287.50 + 900.00 = 10,575.00. A SocialInsurancePayment for those three amounts clears the fund register slice.

Example with extra contribution types#

Same HR settings. Two contribution types are added:

Contribution type Rate, employee Rate, employer Rate, employee (foreign) Rate, employer (foreign) Ceiling
Health insurance 1.25% 2.50% 0.00% 4.00% 20,000.00
Union dues 0.50% 0.00% 0.00% 0.00% —

A local employee is accrued a gross wage of 30,000.00. One SocialInsuranceAccrual appears, with three lines:

Contribution type Contributory base Employee contribution Employer contribution
(empty — statutory) 30,000.00 2,925.00 3,525.00
Health insurance 20,000.00 250.00 500.00
Union dues 30,000.00 150.00 0.00

Each type uses its own ceiling. The 20,000.00 health insurance ceiling cuts only the health insurance base; statutory social insurance still takes the full 30,000.00, because its own ceiling is 45,000.00. Union dues have no ceiling at all.

The employee's net pay is 30,000.00 − 2,925.00 − 250.00 − 150.00 = 26,675.00. All three withholdings reduce PayrollLiability.

The fund balance is kept apart per type: 2,925.00 + 3,525.00 due on statutory social insurance, 250.00 + 500.00 due on health insurance, 150.00 due on union dues. A SocialInsurancePayment line that names Health insurance and pays 250.00 + 500.00 closes the health insurance debt and leaves the other two untouched.

For a foreign employee on the same 30,000.00, health insurance is 0.00 employee / 800.00 employer (4.00% of the 20,000.00 capped base), and union dues are nothing at all, because both foreign rates on that card are zero.

Boundaries and edge cases#

  • Empty or zero rates mean the contribution contour is off and no social insurance accrual is created.
  • The ceiling caps only the contribution base. It does not cap unrelated payroll taxes added by country packages.
  • Every contribution type has its own ceiling, independent of the social insurance ceiling and of other types.
  • Foreign staff use only Social insurance rate, employer (foreign staff) and no employee contribution. Contribution types have their own pair of foreign rates and may withhold from foreign staff.
  • A contribution type that is inactive, or that was deleted, produces nothing. It is never silently accrued at the statutory rates.
  • A payment can be more than the current fund balance; the register allows negative balance for fund top-ups and revised calculations.
  • Voiding must run in safe order: void the fund payment before voiding the social insurance accrual.

What is posted#

Document and transition Register and GL effect
SocialInsuranceAccrual → Posted SocialInsurance increases by employee and employer contribution by employee, division and contribution type. PayrollLiability decreases by the employee contribution of every line. GL posts Dr payroll liability / Cr fund payable for employee withholding and Dr contribution expense / Cr fund payable for employer cost. Lines are grouped by the resolved account pair, so a contribution type with its own accounts gets its own ledger entries, and a type that leaves them empty merges with the statutory lines.
SocialInsurancePayment → Paid SocialInsurance decreases by both contribution shares by employee, division and contribution type: a payment only reduces the fund it names. It does not touch PayrollLiability, because withholding already happened at accrual. GL posts Dr social insurance payable / Cr cash for the total.

The delivered totals view Social insurance by employee groups by employee and shows opening, income, outcome and closing values for employee and employer contribution resources.

What's not there yet#

  • Contribution types have no period of validity: a rate change is edited on the card and applies to every accrual made after the edit. Past accruals keep the amounts they were posted with.
  • Country payroll taxes are not part of this page. Ukraine adds personal income tax and military levy in its localization package; Saudi GOSI uses these HR rates and has no separate Saudi object.
  • There is no bank or cash reconciliation for the fund payment.

Same topic for other readers: User

Where next#

Was this page helpful?