Statutory Configuration
Payroll → Statutory (/statutory) — PF, ESI, Professional Tax, TDS and scheme rules. Requires payroll:read to view, payroll:master to create/edit. Six tabs via UrlTabs (?tab= deep links).


Tabs
Tab (?tab=) | What it holds | Key fields |
|---|---|---|
| PF | PF configs (usePfConfigs) | basis (RESTRICT_TO_CEILING vs ACTUAL_PF_WAGE, employee vs employer), epfNumber (mono), rates from RateConfigTab |
| ESI | ESI configs (useEsiConfigs) | esiNumber, includeEmployerContributionInCtc (Yes/No) |
| Professional Tax | PT slabs (PtSlabsTab) | State-wise slabs (min/max gross → tax) |
| TDS / Tax Regimes | TDS regimes (TaxRegimesTab) | Regime code/name, slabs, old vs new |
| Schemes | Scheme rules (SchemeRulesTab) | Fixed set edited in place — no row to create; SchemeRuleFormPage (/statutory/schemes/:scheme/edit) |
| Wage Definition | Wage map (WageDefinitionTab) | Which payComponentCode contributes to PF wage / ESI wage etc. |
Each of PF/ESI shares the RateConfigTab pattern: extraColumns plus common columns (effective date, rates). Delete via useDeletePfConfig / useDeleteEsiConfig with confirm modal.
PF (?tab=pf)


Provident Fund configs with the wage basis beside the rates — a rate means nothing without the wage it runs on, so the basis column (RESTRICT_TO_CEILING / ACTUAL_PF_WAGE) shows Employee / Employer when they differ. epfNumber identifies the establishment.
ESI (?tab=esi)


Employee State Insurance configs: esiNumber plus whether the employer contribution counts In CTC (includeEmployerContributionInCtc, Yes/No) — this decides whether the CTC costing in Salary Structures includes it.
Professional Tax (?tab=pt)


State-wise Professional Tax slabs mapping gross ranges to tax amounts. New slabs via /statutory/pt/new; edits at /statutory/pt/:id/edit (PtSlabFormPage).
TDS / Tax Regimes (?tab=tds)


TDS regimes (TaxRegimesTab) with regime code/name and slabs for old vs new regime. The employee's choice lives on their declaration; these configs decide what each choice taxes at.
Schemes (?tab=schemes)


Scheme rules are a fixed set edited in place — no row to create. Each scheme opens /statutory/schemes/:scheme/edit (SchemeRuleFormPage).
Wage Definition (?tab=wages)


The wage map: which payComponentCode contributes to the PF wage, ESI wage and other statutory wages. Get this wrong and every computed contribution is wrong — review it after adding a new Pay Component.
Actions
- New X Config (top right,
payroll:master) — routes:
| Tab | Routes |
|---|---|
pf | /statutory/pf/new, /statutory/pf/:id/edit (PfConfigFormPage) |
esi | /statutory/esi/new, /statutory/esi/:id/edit (RateConfigFormPage) |
pt | /statutory/pt/new, /statutory/pt/:id/edit (PtSlabFormPage) |
tds | /statutory/tds/new, /statutory/tds/:id/edit (TaxRegimeFormPage) |
schemes | /statutory/schemes/:scheme/edit |
- PF/ESI wage basis sits beside rates in the table — a rate means nothing without the wage it runs on, so the basis column (
RESTRICT_TO_CEILING/ACTUAL_PF_WAGE) is shown asEmployee / Employerwhen they differ.
:::note Where calculators read from
Pay Components with calculationType=CALCULATOR and a calculatorKey (e.g. PF, ESI, PT, TDS) read their rates/slabs from these configs at compute time. Changing a rate here does not rewrite old runs — it affects the next Sync & Compute.
:::