Skip to content

Releases: anivar/india-tax-guru

v0.2.1

Choose a tag to compare

@anivar anivar released this 01 Aug 12:39

Documentation, packaging and agent-experience hardening after an independent cold-review of the skill; first PyPI release.

  • CLI refusals (unsupported assessee, illegal HUF inputs, unknown assessment year) print as one-line errors with exit code 1 instead of tracebacks — the refusal is the answer, and it should arrive as a message.
  • Capital-gain lots silently reclassified by the engine (dates contradicting is_long_term, or s.50AA deeming) are now reported in notes.
  • Fixed: ISO date strings on capital-gain lots crashed the CLI JSON path.
  • Docs: the foreign-stock boundary is drawn explicitly (sale gain modelled; vesting-stage perquisite, Schedule FA and foreign tax credit not); profile_schema.md documents assessee_type, business_income, foreign_equity, lot dates and months_elapsed_for_234b; SKILL.md carries the ordered GST-then-presumptive pipeline with a runnable snippet; an HUF example profile is included.
  • Packaging: PyPI metadata and a Trusted Publishing workflow; install via skills.sh, uv tool install india-tax-guru[cli], or pip install india-tax-guru.

247 tests passing, all figures hand-derived and asserted.

Verify before you file. Treat the output as a well-tested second opinion, not as authority.

v0.2.0

Choose a tag to compare

@anivar anivar released this 01 Aug 12:21

Extends the engine beyond the salaried individual: presumptive business income, foreign-listed equity, HUF assessees, and GST reconciliation — plus two classes of correctness fixes, each of the silently-wrong kind this project exists to refuse.

New

  • Presumptive taxation under s.44AD and s.44ADA, wired into the computation as business income. Models the split rate (6% only on the digitally-received slice of turnover, 8% on the rest), the receipt deadline running to the s.139(1) due date, non-account-payee instruments deemed cash for the enhanced ₹3 crore / ₹75 lakh cap test, the turnover cap sitting inside the eligible-business definition (breach removes the section, not just the relief), the s.44AD(4) lock-in, and the single 15 March advance-tax instalment under s.211(1)(b).
  • Foreign-listed equity as its own asset class. A US-listed RSU is not a s.112A asset: no STT, not a recognised Indian exchange — so no ₹1,25,000 exemption, no concessional rate, and a 24-month long-term threshold. Holding period is derived from acquisition and transfer dates where both are given, rather than trusting the caller's flag.
  • HUF assessees supported. The individual machinery minus the individual-only reliefs: no s.87A rebate (including its new-regime marginal relief), no age-based basic exemption, no salary heads, no 80CCD(1B) or 80E. What remains applies unchanged: slabs, surcharge, cess, 80C, 80D, 80TTA at its ₹10,000 cap, 80DDB, 80G, s.44AD, and the s.115BAC regime choice with Form 10-IEA. Illegal HUF inputs are rejected at construction rather than silently taxed.
  • GST-turnover reconciliation for presumptive filers. Classifies the ITR-vs-GSTR relationship the way the AIS cross-match does: matched (with declared exempt/non-GST/pre-registration receipts), GST-inclusive turnover (the copy-the-invoice-total error — overstates presumptive income by the tax collected, yet produces a clean AIS match), under-reported (the e-verification pattern), or unexplained excess.

Fixed

  • Residency-conditioned reliefs were granted to non-residents. The s.87A rebate and the raised basic exemption at 60 and 80 are resident-only; the engine was wiping out real non-resident liabilities on age or income alone. An external golden corpus of hand-verified scenarios now pins these.
  • s.44ADA wrongly admitted an HUF. Finance Act 2021 confined s.44ADA to a resident individual or partnership firm (not an LLP) from AY 2021-22 — an HUF-run profession would have been granted the 50% presumptive rate it lost.

244 tests passing, all figures hand-derived and asserted.

Verify before you file. Treat the output as a well-tested second opinion, not as authority.

v0.1.0

Choose a tag to compare

@anivar anivar released this 01 Aug 06:31

Deterministic India income-tax engine for individuals filing ITR-1 or ITR-2,
with per-assessment-year rule modules, a CLI, and an agent skill manifest.
Supports AY 2025-26 and AY 2026-27.

npx skills add anivar/india-tax-guru

Computation

  • Regime comparison under both the old regime and s.115BAC, always both.
  • Age-aware old-regime slabs — basic exemption ₹2.5L, ₹3L at 60, ₹5L at 80,
    with super-seniors losing the 5% bracket entirely.
  • Salary: s.16 standard deduction and professional tax, s.10(14) allowances,
    and period-wise HRA that handles a mid-year rent or city change.
  • Capital gains: s.111A and s.112A rates, the ₹1,25,000 equity exemption,
    s.50AA specified mutual funds, s.70/74 set-off ordering, and the resident
    basic-exemption set-off against gains.
  • House property: s.24(b) and s.71(3A) limits applied in aggregate across
    properties, not per property.
  • Surcharge: the clause structure as the statute actually writes it — the 10%
    and 15% clauses test total income including capital gains and dividends, the
    25% and 37% clauses test it excluding them, and a residual clause pins the
    rest at 15%. Plus the 15% cap on surcharge attributable to those incomes, and
    marginal relief computed against tax recomputed at the threshold.
  • Deductions: 80C, 80CCD(1B), 80CCD(2), 80D, 80TTA/80TTB, 80DDB, 80E, 80G —
    capped, regime-gated, bounded by gross total income.
  • Settlement: TDS, advance tax and self-assessment tax netted to a refund or
    balance-payable figure, with s.234B/234C interest.

Advice and compliance

  • Salary-structure advisory where every saving is measured by running the
    counterfactual through the same engine, never estimated from a marginal rate.
  • Form 10-IEA surfaced only where business or professional income makes it
    necessary. A salaried ITR-1/ITR-2 filer must not file it; what they get is the
    deadline that actually binds them — the old regime exists only in a return
    furnished under s.139(1), so a belated return forfeits it.

Document import

There are no document parsers, deliberately. ITD publishes no schema for the
prefill or AIS JSON, and Form 16 Part B renders differently per payroll vendor,
so a hardcoded parser works for one and fails silently for the rest. Instead an
agent does the extraction and the engine does the arithmetic — see
docs/importing.md for per-document guidance and the reconciliation checks that
catch extraction errors before they reach the engine.

Verification

169 tests. Eight canonical scenarios were each computed three times
independently of this codebase, from the statute, by different approaches; a
figure was accepted only on majority agreement. All eight agreed, seven
unanimously, and the engine reproduces all sixteen figures exactly.

Scope

Individuals only — HUF, AOP/BOI, firm, LLP and company raise
UnsupportedAssesseeError rather than being computed on the individual's rules,
since that wrong answer would look entirely ordinary. ITR-1 and ITR-2 only: no
business income, no presumptive taxation under s.44AD/44ADA, no foreign assets,
no cross-year loss carry-forward, no e-filing automation.

Verify figures against the ITD utility or a CA before filing. MIT licensed.