> ## Documentation Index
> Fetch the complete documentation index at: https://docs.ontime.hosai.app/llms.txt
> Use this file to discover all available pages before exploring further.

# Statutory tables

> Maintain the professional-tax bands, income-tax bands and regime settings the payroll engine prices PT and TDS from.

export const PermissionNote = ({perm}) => <Info>
    Requires the <code>{perm}</code> permission. Ask your administrator if an
    action described here is missing from your screen — see
    [Roles & permissions](/help/concepts/roles-and-permissions).
  </Info>;

<PermissionNote perm="payroll:write" />

Professional tax and TDS are not fixed amounts on a component — they are looked up in **statutory tables** every time a cycle calculates. This page is where those tables live.

**Settings → Statutory tables.** Viewing needs `payroll:read`; editing needs `payroll:write`.

<Note>
  These tables belong to **your organization**. Editing them changes your payroll and nobody else's, and another organization's changes never reach yours.
</Note>

## Why you would come here

When a payroll run cannot find a row covering an employee, the review screen flags that line rather than quietly charging zero:

| Flag                   | What it means                                                                                               |
| ---------------------- | ----------------------------------------------------------------------------------------------------------- |
| **Missing PT slab**    | No professional-tax band covers this employee's state and monthly gross.                                    |
| **Missing tax config** | The employee's tax regime and financial year have no income-tax bands, no regime configuration, or neither. |

Both flags point here. Add the missing row, recalculate the cycle, and the flag clears.

<Warning>
  A flag means *no row was found* — it is not the same as a row that charges nothing. A band that genuinely covers an employee and prices to ₹0 (Maharashtra's lowest professional-tax band, for instance) is correct and is **not** flagged. That distinction is deliberate: on a payslip, a silent ₹0 reads as "no tax was due".
</Warning>

## Professional tax

One row per band, per state. An employee is matched on their **state** and their **monthly gross**.

| Field                          | Meaning                                                                                     |
| ------------------------------ | ------------------------------------------------------------------------------------------- |
| **State**                      | Matched against the employee's state exactly.                                               |
| **Monthly gross from / up to** | The band's window. **Both ends are inclusive.** Leave the upper end unset for the top band. |
| **Monthly PT**                 | What this band charges each month.                                                          |
| **February extra**             | Added in February only. Maharashtra adds ₹100.                                              |

Bands for a state should cover it end to end with no gaps — an employee falling in a gap is flagged as missing.

<Warning>
  **Bands may not overlap.** Two bands covering the same monthly gross would leave the tax charged depending on which one the system found first, so a band that overlaps an existing one for the same state is refused. Widening a band into its neighbour is refused for the same reason.
</Warning>

## Income-tax bands

One row per band, per **regime** and **financial year**. `2026` means FY 2026–27.

| Field                   | Meaning                                                                                                    |
| ----------------------- | ---------------------------------------------------------------------------------------------------------- |
| **Annual income from**  | Inclusive lower bound.                                                                                     |
| **Annual income below** | **Exclusive** upper bound — income at or above it is taxed by the next band. Leave unset for the top band. |
| **Rate**                | The marginal rate applied to the portion of income inside this band.                                       |

Bands for a regime and year may not overlap — overlapping bands would tax the shared income twice. Bands that **meet exactly**, one ending where the next begins, are correct and expected: because the upper bound is exclusive, `up to ₹4,00,000` and `from ₹4,00,000` do not overlap.

<Note>
  The two tables use different conventions on purpose, because the underlying rules do: a professional-tax upper bound is inclusive, an income-tax upper bound is exclusive. The form labels say which is which.
</Note>

## Regime configuration

The settings applied *around* the income-tax bands, per regime and financial year: **standard deduction**, the **section 87A rebate** (the taxable ceiling it applies below, and the most tax it can rebate), and **cess**.

<Warning>
  Bands alone are not enough. A regime and year with income-tax bands but **no configuration row here** still prices as *Missing tax config* — the page marks that combination so you can see it before a payroll run does.
</Warning>

## Starting point, not a promise

New organizations begin with a set of India defaults covering a few states and the current new-regime structure. They are a starting point for you to check and correct — **verify them against current law before your first live run**, and extend them for every state you employ people in.

## After you edit

Statutory changes affect a cycle only when it is **recalculated**. If a cycle has already been calculated, recalculate it to pick up the new rows. Every change here is recorded in the audit log under **Payroll**.
