@php $preview = $statutoryPreview ?? []; $previewGross = (float) ($statutoryPreviewGross ?? 50000); @endphp

How these rates are used

Set once for the organisation. Payroll generation writes NSSF, SHIF, Housing Levy, and PAYE onto each period line. Payslips, disbursement, and GL posting copy those stored figures — they do not recalculate rates.

  1. Gross = basic salary + allowances + incentives on the employee record.
  2. NSSF = employee % of pensionable gross (capped at the upper limit; Tier I up to the lower limit, Tier II above it).
  3. SHIF = employee % of gross, then the monthly minimum if higher.
  4. Housing Levy = employee % of gross.
  5. Taxable pay = gross − NSSF − SHIF − Housing Levy.
  6. PAYE from the bands below, minus personal relief (floored at zero).

HELB, pension, welfare, advances, and other named cuts are not statutory rates. Configure them on Other deductions and the employee salary record. Who appears on a run is Include in HR payroll on the employee.

Worked example

Same calculator as payroll generation. Sample gross KES {{ number_format($previewGross, 0) }} (basic only, no extras).

NSSF
KES {{ number_format((float) ($preview['nssf'] ?? 0), 2) }}
SHIF
KES {{ number_format((float) ($preview['shif'] ?? 0), 2) }}
Housing Levy
KES {{ number_format((float) ($preview['housing_levy'] ?? 0), 2) }}
Taxable pay
KES {{ number_format((float) ($preview['taxable_pay'] ?? 0), 2) }}
PAYE after relief
KES {{ number_format((float) ($preview['paye'] ?? 0), 2) }}
Total statutory
KES {{ number_format((float) ($preview['total_statutory_deductions'] ?? 0), 2) }}