How figures are verified

Most calculators on the internet will give you a number for anything you ask. This one will refuse. That refusal is the feature, and this page explains the machinery behind it so you can judge it rather than take it on trust.

Every figure has a source and a date, in one file

There is no figure anywhere in a SimpleDoc calculator that is typed into the code. Every rate, threshold and ceiling lives in a single file, data/rates.json, grouped by subject, and each group carries the official page it came from and the date a person last checked that page.

This is the current state of that file, generated when this page was built rather than written by hand:

Rates Covers Last checked Calculators
incomeTax Income tax slabs, rebate, surcharge and cess 26 July 2026 2
hra The three-part HRA exemption test 26 July 2026 1
epf EPF and EPS contribution rates and the wage ceiling 26 July 2026 4
gratuity Gratuity formula, qualifying period and ceiling 7 August 2026 1
rtoFees Central RTO registration and licence fees 7 August 2026 1
professionalTax State professional tax 6 states verified 1
roadTax State road tax 4 states verified 1

7 of 7 rate groups have real verification behind them. Two of those, road tax and professional tax, are verified per state rather than as a whole group, which is why they show a state count above instead of a single date, 36 jurisdictions is too many to check as one unit and too many to leave fully unverified.

The build refuses to ship a calculator on an unverified rate

A promise is only as good as what happens when somebody forgets it. So the rule is a test that runs on every commit, and the site does not build if it fails:

test('no shipped calculator depends on an unverified rate group', () => {
  const verified = new Set(
    Object.entries(rates)
      .filter(([k, g]) => !k.startsWith('_') && typeof g === 'object' && g.verifiedOn)
      .map(([k]) => k),
  );
  for (const dep of ['epf', 'incomeTax', 'hra', 'gratuity', 'rtoFees']) {
    assert.ok(verified.has(dep), `a calculator depends on "${dep}", which is not verified`);
  }
  assert.ok(!verified.has('roadTax'), 'roadTax has no group-level verifiedOn by design');
  assert.ok(!verified.has('professionalTax'), 'same reason, verified per state instead');
});

A second test enforces the per-state version of the same promise: every entry in roadTax.states and professionalTax.states has to carry its own sourceUrl and a valid verifiedOn date, or the build fails. A state missing either has no business being offered in a calculator's dropdown.

Every calculator also has reference cases worked by hand from the rule itself, not read off the implementation. An earlier version of that test file reimplemented each formula inside the test, which meant it checked its own arithmetic and nothing else. It passed seventeen of seventeen while the live tax calculator was silently ignoring the deductions people typed in.

Why an official source is not always enough

The gratuity calculator is the clearest example. Section 4(3) of the Payment of Gratuity Act 1972 states the maximum gratuity payable. Read the Act, which is the official source, and it says ten lakh rupees.

That figure has been wrong since 2018. The ceiling was raised to twenty lakh by notification, not by amending the printed text most copies of the Act still carry. A verification process that stopped at "we read the Act" would have shipped a calculator understating what people are owed by half.

So the gratuity group in data/rates.json cites the notification and the press release alongside the Act, and says in a note why the Act text disagrees. Checking the source means understanding whether the source is current, which is the part that cannot be automated.

What we publish carefully, one state at a time

Road tax and professional tax are both set by each state separately, 28 states and 8 union territories, each under its own act, varying by price, engine capacity, income band, fuel and buyer type. Several publish only as scanned documents. That is why there is no calculator covering all of them, and there never will be one that guesses at the rest to look complete.

Every road tax calculator you will find elsewhere handles the states it hasn't checked by averaging, or by quietly using one state's rates for the whole country. Neither is disclosed to you, and the error runs to tens of thousands of rupees on a car.

We were once offered a complete, official Tamil Nadu schedule and did not use it, because checking it against current rates showed the two-wheeler threshold and the electric vehicle rates had both moved since it was published. It was a genuine government document and it was out of date, which is the failure mode that matters: not a fake source, a real one that has been superseded. Tamil Nadu's road tax is on this site now, verified separately and directly against the Comptroller and Auditor General's own hosting of the current Act, not from that offered schedule.

Road tax currently covers Maharashtra, Karnataka, Tamil Nadu and Uttar Pradesh, inside the RTO fee calculator. Professional tax covers Maharashtra, Karnataka, West Bengal, Telangana, Delhi and Chennai specifically, inside the take-home salary calculator, Tamil Nadu professional tax generally is not covered, since it is set per local body there rather than statewide, and Chennai's figures would be wrong for the rest of the state. Every dropdown only ever offers states that have actually been checked. One verified state is worth more than thirty-six guessed ones.

What this does not protect you from

Being straight about the limits is part of the same discipline:

If you find something wrong

Send it to hello@simpledoc.in with the page, the figure you expected, and the official source that supports it. That last part is what lets a correction happen the same day rather than after a round of research.

Corrections are the most valuable thing anyone sends this site. See what the calculators actually cover, or read who runs this and how it is funded.

Type to search. Try "PF withdrawal" or "HRA".

More