SkillAtlasSkill 详情

itr-wala

tests skills.sh installs

审核状态:已审核Quality 80Security 80

复制安装命令

用 Codex 或 Claude 安装复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它先审查 Skill 页面再帮你安装。

复制前请先查看来源、License 和安全提示。

项目 README

来源文件:README.md

抓取于 2026年8月23日

itr-wala

tests skills.sh installs

File your Indian income tax return from your terminal. No CA, no ₹3,000 fee, no 3 hours on the portal. Every rupee of tax math computed by tested code, not by an LLM.

⏳ AY 2026-27 deadlines: ITR-1/2 → 31 July 2026 · ITR-3/4 (non-audit) → 31 August 2026.

# Review-first (recommended): clone, read it, install the bytes you just read
git clone https://github.com/karanb192/itr-wala.git
cd itr-wala && ./install.sh          # also: codex, gemini, all

# Or scope it to just the folder your tax documents live in
cd ~/tax-2026 && ~/itr-wala/install.sh --here

# Claude Code plugin (name whichever repo you trust)
/plugin marketplace add karanb192/itr-wala
/plugin install itr-wala@itr-wala

# Or the skills.sh one-liner (fetches the default branch head; pick your agent when prompted)
npx skills add karanb192/itr-wala

Run from a checkout, install.sh never touches the network - it copies the files you just read. See Install from a branch you reviewed for why that matters when the tool handles your salary and bank data.

itr-wala demo: golden tests pass, income validates against document totals, both regimes computed - ₹42,811 found

Then open your agent and say "file my ITR". Hand it your Form 16 and AIS. It does the rest - except the three things only you should ever do: pay, submit, e-verify.

Why this exists

Every AI-tax demo you saw this season had the same silent flaw: the model was doing the arithmetic. LLMs are magnificent at reading a Form 16 and terrible at applying s.87A marginal relief. One transposed digit and your "free filing" costs you a tax notice.

itr-wala splits the work the way it should be split:

The AI doesDeterministic Python does
Reads your Form 16, AIS, broker P&LEvery slab, rebate, surcharge, cess calculation
Interviews you for missed deductionsOld vs new regime comparison
Explains every number in plain language87A marginal relief, 111A/112A/VDA special rates
Walks you through the portal234A/B/C interest, 234F late fee
Schema validation that rejects typo'd inputs
Cross-checks your TDS against 26AS/AIS totals

The math is defended in three layers, all shipped in the repo and run in CI on every commit:

  1. 47 golden tests - every expected value hand-derived from the statute first: the 87A rebate cliff and its marginal relief, capital-gains exemption ordering, s.71 loss set-off, the surcharge tiers (including the exclusive-income tests for the 25%/37% slabs and the 15% ceiling on capital-gains tax), and 234A/B/C/F interest down to the month-counting and challan-date edge cases.
  2. A 104-test suite for the input validator - the gate that rejects malformed, mistyped, or PAN-bearing inputs before they can reach the engine.
  3. A property-based fuzzer (scripts/fuzz_engine.py) - generates thousands of randomized, boundary-biased returns and asserts invariants the law implies: more income can never mean less tax in the new regime, cess is exactly 4%, rounding follows s.288A/288B, recommendations match the cheaper legal option. Seeded and deterministic; CI replays 3,000 cases on every commit, and 350,000+ were swept before release.

The skill runs the golden suite in front of you before touching your return:

$ python3 skills/itr-wala/scripts/test_tax_engine.py
...............................................
Ran 47 tests in 0.002s
OK

(Installed as a plugin and can't find the path? Just ask the agent to "run the itr-wala self-test".)

If your CA can show you their test suite, hire them.

These layers exist because they catch real bugs. Hand-deriving every scenario caught an early build that denied surcharge marginal relief on capital-gains-heavy incomes, and the fuzzer caught a one-in-350,000 floating-point rounding edge where ₹52,880 more salary computed ₹10 less tax. Both are fixed and pinned as regression tests. That find-fix-pin loop is the thing a prompt-only tax tool cannot run.

What a session looks like

  1. Self-test - the engine proves its math before you trust it.
  2. Documents - drop Form 16 + AIS (JSON) into a folder; it tells you exactly where to download each one.
  3. Extract & validate - every number transcribed verbatim into income.json, then a strict validator cross-checks totals against your documents. Unknown key? Rejected. TDS doesn't match 26AS? Flagged.
  4. Deduction hunt - a proactive interview (80C, 80D, NPS, HRA, home loan…), because the portal will never ask you.
  5. Both regimes, computed - a comparison table with the exact rupee savings. The regime gap is routinely five figures; this table is where it shows up.
  6. Filing pack - every portal field mapped to its value, in order, plus the final payable/refund figure the portal must match to the rupee.
  7. The portal, together - it narrates each schedule; you type. It never sees your password or OTP. You alone click Pay, Submit, and e-Verify.

The artifact you actually share

Real output, reproducible from the bundled (fictional) example - python3 skills/itr-wala/scripts/tax_engine.py skills/itr-wala/assets/example-income.json:

Income-tax computation - FY 2025-26 (AY 2026-27)
================================================================
[NEW REGIME]
  Gross total income               26,06,700
  Total income                     25,06,700
  TOTAL TAX                         3,00,350
  NET PAYABLE (-ve=refund)               720

[OLD REGIME]
  Gross total income               22,09,300
  Total income                     18,74,300
  TOTAL TAX                         3,39,730
  NET PAYABLE (-ve=refund)            43,530

================================================================
  RECOMMENDED: NEW regime (saves Rs. 42,811)

Privacy, honestly

  • The Python scripts run entirely on your machine. Tax math never leaves.
  • Documents you ask the AI to read are processed by the model - that part does leave your machine, like anything you paste into an AI tool. The skill tells you this up front and invites you to redact PAN/Aadhaar/account numbers first: they're not needed for computation, and that's enforced as a mechanism, not a plea - the validator rejects any input file containing a PAN-shaped or Aadhaar-shaped string.
  • A generated .gitignore keeps tax documents out of your repos.
  • Built by someone who files his own taxes with it - and who happens to do security for a living (DEFCON/OWASP speaker, Head of AI at an application-security company).

What it covers (and refuses)

In scope (AY 2026-27, resident individuals): salary (multiple employers, retirement exemptions like gratuity and leave encashment in both regimes), house property including s.71 loss set-off, equity/MF capital gains (111A/112A/112, grandfathering-aware exemption ordering), debt MF, crypto/VDA, lottery and online-game winnings (115BB/115BBJ), interest & dividends, family pension with the s.57(iia) deduction, s.89 arrears relief, presumptive income (44AD/ADA basics), all Chapter VI-A deductions, both regimes, surcharge with marginal relief, advance-tax interest computed to actual challan dates, late fees, belated returns (including the s.115BAC(6) rule that locks belated filers out of the old regime - it will tell you, not let you find out from a notice), ITR-1/2/3/4 form selection.

Out of scope - it will say so and point you to a CA rather than guess: non-residents/RNOR, F&O and intraday, audit cases, foreign tax credit (Form 67/DTAA), ESOP deferral, the property indexation option, buyback capital-loss entries, agricultural income above ₹5,000. Partial coverage is computed honestly; the rest is never silently approximated.

Hard boundaries, always: never your password or OTP, never clicks Pay/Submit/e-Verify, never fabricates a deduction. Lowest legal tax.

FAQ

Can I trust an LLM with my taxes? No - that's the point. You're trusting a tested Python engine with the math and an LLM with reading PDFs and explaining things, which are the two things each is actually good at. Run the test suite yourself.

But the LLM still reads the documents - what if it misreads a number? True, and worth being precise about: transcription is the one step the model touches, so a misread digit is the residual risk. That's why every figure is cross-checked against independent documents (Form 16 vs 26AS vs AIS - a single-document misread fails validation), recorded next to its source citation, and shown to you in the filing pack before anything is filed. If the model misreads and every cross-check misses it, you'll see the wrong number with its citation - not a hidden one.

Why not just use ClearTax/Quicko/a CA? Use whatever you trust. This is for people who'd rather review every number themselves than pay ₹3,000+ to hope someone else did. The filing pack it generates is also a great ₹0 first draft to hand a CA for a cheap review.

Is this allowed? Yes. You prepare your own return and file it yourself on the government portal - same as using the portal's own forms, just with better preparation. This tool never submits anything on your behalf.

What happens next year? Rates live in one constants block, pinned to AY 2026-27, with the test suite enforcing them. The skill refuses to compute other years rather than silently using stale slabs. New Finance Act → one PR → tests updated.

Windows? WSL works today; native Windows paths are on the roadmap. macOS and Linux are first-class.

Install options

Clone first, then run ./install.sh from inside the checkout - it copies the files in front of you and makes no network calls at all.

Which agent - the positional argument:

ToolHow
Claude Code (plain skill)./install.sh
OpenAI Codex CLI./install.sh codex (invoke with $itr-wala)
Gemini CLI./install.sh gemini
Everything./install.sh all
Claude Code plugin (updates with /plugin marketplace update itr-wala)/plugin marketplace add karanb192/itr-wala → /plugin install itr-wala@itr-wala
skills.sh CLI, any supported agentnpx skills add karanb192/itr-wala (fetches the default branch head; built-in agent picker)

Global or project-local - the scope flag:

ScopeCommandLands in
Global (default)./install.sh all~/.claude/skills/, ~/.agents/skills/, ~/.codex/skills/, ~/.gemini/skills/
Project-localcd ~/tax-2026 && /path/to/itr-wala/install.sh --here all~/tax-2026/.claude/skills/, .agents/skills/, .gemini/skills/
Project-local, named./install.sh --project ~/tax-2026 allthe same, without the cd

Project-local is usually the better fit for tax work. The skill lives beside the return it prepared, so next year's copy cannot quietly follow you into unrelated projects, and deleting the folder removes it completely - which matters for a tool whose whole value is that you know exactly what version ran against your Form 16. Start your CLI from that directory (or below it) for the skill to be found.

Project-scoped discovery is well established for Claude Code (.claude/skills/) and for Codex via the cross-agent .agents/skills/; the per-project path is less settled for other CLIs, so if yours doesn't pick the skill up, check its docs for project-scoped skill locations and fall back to a global install. (~/.codex/skills is a global-only location - a project-local install skips it deliberately.)

Requirements: python3 3.9+ (stdlib only - zero pip installs), git only if you let the installer fetch rather than running it from a checkout.

Install from a branch you reviewed

This tool reads your Form 16, AIS, bank interest and capital gains. For something in that position, "I read the code once" only means something if the code you read is the code that runs. A curl … | bash one-liner cannot give you that - it installs whatever is on main at the moment you run it, from a repo you do not control, and re-decides that question on every update. That is true of this repo as much as any other.

So the installer is built for a fork-review-pin workflow instead:

1. Fork it. Your fork is a snapshot you control. Nobody can change it under you.

2. Read it. The whole thing is ~4,200 lines with zero third-party dependencies, which is what makes a real review tractable in an evening. Worth confirming for yourself: no import requests/urllib/socket anywhere; tax_engine.py and validate_income.py read one JSON file and write only to stdout; no eval/exec/base64; the CI workflow uploads nothing. Check .gitignore covers the document names you actually use.

3. Point the installer at your fork - one line, near the top of install.sh:

DEFAULT_REPO="https://github.com/karanb192/itr-wala.git"   # point this at YOUR repo

It must name the repo the script lives in. An installer defaulting to a repo its operator does not control re-introduces the exact problem this avoids.

4. Pin what you reviewed, if you install somewhere other than the checkout:

VariableEffect
ITR_WALA_REF=<sha|tag|branch>Fetch exactly this commit. Pin the SHA you reviewed and updates stop being silent
ITR_WALA_NO_FETCH=1Refuse to reach the network at all; install only from a real checkout
ITR_WALA_REPO=<url>Pull from a different repo - e.g. https://github.com/karanb192/itr-wala.git for the original. Explicit opt-in, never the default

Worked example - install a specific reviewed commit on a second machine:

ITR_WALA_REF=05c88d0 ./install.sh all
#   fetched commit 05c88d0cf13f45528039b77c3e61542a15783b51

The installer prints the resolved commit hash on every fetch, so an unattended run stays auditable after the fact.

What this does not fix. Reviewing the code does not change the tool's central privacy tradeoff: the Python runs locally, but the documents you hand the AI are read by the model, and that leaves your machine. See Privacy, honestly. Pinning also cannot vouch for a document you were sent - the model reads whatever text a PDF contains.

Everything above except the DEFAULT_REPO value is generic - it works unchanged in this repo, in the original, and in any fork of either, because the repo a copy lives in is the only thing that distinguishes them. Patches welcome in any direction.

Roadmap

  • Generate the offline-utility upload JSON against the official published schema (upload one file instead of typing 20 schedules). The format's empirical traps (schema-valid files that import blank, the camelCase-prefill trap) are documented by CivicTaxes (MIT, community-maintained)
  • RSU/ESPP + Schedule FA depth (the most underserved, highest-anxiety segment). For bulk FA entry, CivicTaxes' CSV upload doc records what the utility's parser actually accepts
  • Revised-return (s.139(5)) workflow through 31 Mar 2027 - belated returns already work, so this repo doesn't expire on Aug 1
  • Native Windows installer · one-click .skill bundle for Claude desktop

Contributing

This is meant to be a community tool. Rates change every Finance Act, portal notes rot mid-season, and edge cases surface all year. PRs and issues are welcome - see CONTRIBUTING.md. The one hard rule: any change to a tax figure ships with a hand-derived test and its statutory source.

Found a bug?

It's filing season - bug reports get priority, wrong-rate reports get top priority.

  • Computation bug: open an issue with a minimal income.json that reproduces it. Start from skills/itr-wala/assets/example-income.json and change only what's needed. Never paste your real numbers, documents, PAN, or portal screenshots with identifiers. The validator refuses PAN-shaped strings for exactly this reason.
  • Doc/portal-flow bug: quote the reference file and line; the portal changes often and field notes rot fastest.

Credits

  • shivprime94/file-itr (MIT) - the first Indian ITR skill; its hard-won portal field notes and AIS SFT-code research informed our reference docs. This project's thesis is different (deterministic engine + validators + tests vs. pure prompting), but they walked first.
  • robbalian/claude-tax-filing - proved the scripts-not-vibes pattern for US returns.
  • anthropics/skills - the skill-structure conventions this follows.

License

MIT - see LICENSE. Reference material adapted from the MIT-licensed file-itr.

Disclaimer

itr-wala is open-source software, not a chartered accountant, and nothing here is professional tax advice. It computes with tested code and shows you everything, but you review, you file, and responsibility for your return stays with you. When in doubt, hand the generated filing pack to a CA - it's built for exactly that.


Found it useful? Send it to the friend who still hasn't filed. ⭐

其他

中风险

  • 来源需自行核对维护者身份。
  • 包含脚本或命令调用,安装前请复核。
  • 未检测到明显外部权限要求。
  • 未检测到高风险命令。
  • 扫描发现:1 条。

Codex — Git Clone 安装

  1. 安装前请先查看来源仓库和风险报告。
  2. 克隆仓库:git clone https://github.com/karanb192/itr-wala.git
  3. 将 "skills/itr-wala" 文件夹复制到 Codex 的 skills 目录中。
  4. 重启 Codex 让新的 skill 生效。

Codex — 手动复制安装

  1. 安装前请先查看来源仓库和风险报告。
  2. 从源仓库下载 SKILL.md 及相关文件。
  3. 在 Codex 的 skills 目录中创建新文件夹。
  4. 将所有 skill 文件复制到新文件夹中。
  5. 重启 Codex 让新的 skill 生效。

Claude Code — Git Clone 安装

  1. 安装前请先查看来源仓库和风险报告。
  2. 克隆仓库:git clone https://github.com/karanb192/itr-wala.git
  3. 将 "skills/itr-wala" 文件夹复制到 Claude Code 的 skills 目录中。
  4. 重启 Claude Code 让新的 skill 生效。

Claude Code — 手动复制安装

  1. 安装前请先查看来源仓库和风险报告。
  2. 从源仓库下载 SKILL.md 及相关文件。
  3. 在 Claude Code 的 skills 目录中创建新文件夹。
  4. 将所有 skill 文件复制到新文件夹中。
  5. 重启 Claude Code 让新的 skill 生效。

Cursor — Git Clone 安装

  1. 安装前请先查看来源仓库和风险报告。
  2. 克隆仓库:git clone https://github.com/karanb192/itr-wala.git
  3. 将 "skills/itr-wala" 文件夹复制到 Cursor 的 skills 目录中。
  4. 重启 Cursor 让新的 skill 生效。

Cursor — 手动复制安装

  1. 安装前请先查看来源仓库和风险报告。
  2. 从源仓库下载 SKILL.md 及相关文件。
  3. 在 Cursor 的 skills 目录中创建新文件夹。
  4. 将所有 skill 文件复制到新文件夹中。
  5. 重启 Cursor 让新的 skill 生效。

GitHub Copilot — Git Clone 安装

  1. 安装前请先查看来源仓库和风险报告。
  2. 克隆仓库:git clone https://github.com/karanb192/itr-wala.git
  3. 将 "skills/itr-wala" 文件夹复制到 GitHub Copilot 的 skills 目录中。
  4. 重启 GitHub Copilot 让新的 skill 生效。

GitHub Copilot — 手动复制安装

  1. 安装前请先查看来源仓库和风险报告。
  2. 从源仓库下载 SKILL.md 及相关文件。
  3. 在 GitHub Copilot 的 skills 目录中创建新文件夹。
  4. 将所有 skill 文件复制到新文件夹中。
  5. 重启 GitHub Copilot 让新的 skill 生效。

Windsurf — Git Clone 安装

  1. 安装前请先查看来源仓库和风险报告。
  2. 克隆仓库:git clone https://github.com/karanb192/itr-wala.git
  3. 将 "skills/itr-wala" 文件夹复制到 Windsurf 的 skills 目录中。
  4. 重启 Windsurf 让新的 skill 生效。

Windsurf — 手动复制安装

  1. 安装前请先查看来源仓库和风险报告。
  2. 从源仓库下载 SKILL.md 及相关文件。
  3. 在 Windsurf 的 skills 目录中创建新文件夹。
  4. 将所有 skill 文件复制到新文件夹中。
  5. 重启 Windsurf 让新的 skill 生效。
查看 SKILL.md 原文
name: itr-wala
description: >-
  File Indian income tax returns (ITR) for FY 2025-26 / AY 2026-27. Use when
  the user wants to file their ITR, compute or verify Indian income tax,
  compare the old vs new tax regime, read a Form 16, AIS, TIS or Form 26AS,
  reconcile TDS, handle capital gains from Zerodha/Groww/Upstox statements,
  check their tax refund, or asks about ITR-1/ITR-2/ITR-3/ITR-4, sections
  80C/80D/87A/111A/112A, crypto tax, advance tax, or the income-tax e-filing
  portal - even if they just say "help me with my taxes" in an Indian context.
license: MIT
metadata:
  author: karanb192
  assessment-year: "2026-27"

itr-wala - Indian ITR filing, deterministically

You are helping a resident individual prepare and file their Indian Income Tax Return for FY 2025-26 (AY 2026-27). You orchestrate; Python computes. The user files. Work through the numbered workflow below, keeping work/progress.md updated so an interrupted session can resume.

All scripts live in scripts/ and all reference docs in references/, relative to this SKILL.md. Resolve the skill directory once at the start (e.g. from the path this file was loaded from) and use absolute paths.

Iron rules (non-negotiable)

  1. Never do tax arithmetic yourself. Every rupee of tax, interest, fee, rebate, or regime comparison comes from scripts/tax_engine.py output. You do not add, subtract, or estimate tax figures - not even "obvious" ones, not even to sanity-check. If you need a number, put the inputs in income.json and run the engine. When presenting results, paste or restate figures directly from engine output.
  2. Every extracted number is a verbatim transcription from a document the user provided, with its source recorded (document + field/page) in work/extraction-notes.md. Fill source_totals so the validator can cross-check. Never write a derived or guessed number into income.json.
  3. scripts/validate_income.py must pass (exit 0) before the engine runs. Fix every error; show every warning to the user.
  4. Credentials are untouchable. Never ask for, read, store, or type the user's portal password, OTP, PAN-linked logins, or bank details. If a browser is involved, the user logs in themselves.
  5. The user performs the three final acts: Pay, Submit, e-Verify. You prepare everything and tell them exactly what to click and what amount to expect - you never trigger any of the three, even with a browser tool.
  6. Lowest legal tax, never fabricated. Surface every deduction the user is plausibly entitled to (ask - don't wait), but only proofs-in-hand figures go into the return. Never inflate, estimate, or invent. Income visible in AIS gets declared even if the user would rather forget it.
  7. AY guard. This skill is pinned to AY 2026-27. If the user needs a different year (belated AY 2025-26, ITR-U, etc.), say the rates here do not apply and stop rather than improvise.
  8. Scope guard. Resident individuals only. If you detect: non-resident / RNOR status, F&O or intraday trading, audit cases, foreign tax credit (Form 67/DTAA), ESOP perquisite deferral, buyback capital-loss twin entries, property sale with the indexation option, agricultural income above 5,000 (partial integration is not modeled), or AY ≠ 2026-27 - tell the user which part is out of scope and recommend a CA for that part. Compute what is safely computable; never quietly approximate the rest.
  9. Privacy first. Before reading any document, tell the user: documents you read are processed by the AI model (they leave the machine); the Python scripts run locally. PAN, Aadhaar, and account numbers are NOT needed for computation - invite the user to redact them. Never echo PAN, Aadhaar, or full account numbers into chat, notes, or output files. Where a document is structured (AIS JSON, TIS, 26AS text), prefer blind extraction: read the schema - column names, key paths - to build a per-column whitelist, emit only approved columns, and replace identity columns with stable pseudonyms. You then work with amounts and categories while payer names, account numbers and PAN stay out of your context (best-effort for free-text lines - structured columns are airtight). See references/blind-extraction.md; scripts/redact_ais.py, scripts/parse_26as.py and scripts/extract_tis.py do this already. Be honest about the limit: identifiers can stay hidden permanently, but any figure feeding the return appears in the engine output the user must review - an unverified tax figure is worse than a seen one.

Workflow

0. Session start

  • Greet briefly. State: what you can do, the privacy note from rule 9, and that nothing is ever submitted without the user doing it themselves.
  • Self-test the engine so the user can trust the math: python3 <skill>/scripts/test_tax_engine.py - expect OK from the golden test suite. If it fails, stop; the install is broken.
  • Confirm: filing for themselves? resident? age bracket (<60 / 60-79 / 80+)? Income sources this year (salary / house property / equity or MF sales / crypto / interest & dividends / freelance-presumptive / anything else)?
  • Check references/rates-fy2025-26.md for the current due dates and tell the user theirs (it depends on the ITR form - step 7).

1. Workspace

Create in the current directory:

itr-wala-workspace/
  docs/        # user drops documents here
  work/        # income.json, extraction-notes.md, progress.md
  output/      # filing-pack.md, computation.txt, computation.json
  .gitignore   # blocks tax documents from ever being committed

Write a .gitignore containing at minimum: docs/, work/, output/, *AIS*, *TIS*, *26AS*, *Form16*, *form16*, *ITR*json, *ACK*, *Challan*. (Pattern idea credited to the MIT-licensed file-itr project.)

2. Gather documents

Walk through references/documents-guide.md with the user. Minimum viable set for a salaried filer: Form 16 + AIS (JSON preferred). Better: add Form 26AS, bank interest certificates, broker Tax P&L, deduction proofs. Ask the user to drop files into docs/ and tell you. Prefer AIS JSON export over PDF (OCR-hostile) - but the JSON download is encrypted, so decrypt it with scripts/decrypt_ais.py before anything can read it. Ask for TIS as well: it is the only document that settles AIS double-reporting (documents-guide rule 10). If the AIS was downloaded weeks ago, ask for a fresh one - it fills in over the season.

3. Extract

Read each document and build work/income.json following references/input-schema.md exactly (key names matter - the validator rejects unknown keys precisely because a typo would silently lose money).

  • Transcribe verbatim; record source (doc, part, field) per figure in work/extraction-notes.md.
  • Fill source_totals with the document-level totals (Form 16 gross & TDS, 26AS TDS total, AIS interest/dividend totals) exactly as printed.
  • Capital gains: classify equity vs non-equity per references/capital-gains.md (AIS SFT codes are authoritative). The 1,25,000 LTCG exemption is aggregate across brokers - enter raw totals; the engine applies the exemption.
  • Anything ambiguous or illegible: ask the user; never guess.

4. Validate

python3 <skill>/scripts/validate_income.py work/income.json

Loop until exit 0 - mismatches against AIS/26AS totals are hard errors that block computation, not advisories. Then relay the remaining warnings in plain language and ask about each (e.g. "TDS in Form 16 is ₹15,000 less than 26AS - did a bank also deduct TDS?", or "no bank interest at all - really?").

5. Hunt deductions

Run the interview in references/deductions-checklist.md. Add proofs-in-hand items to income.json (re-validate after edits). For "probably eligible but no proof yet" items, you may quantify the stake by running the engine twice (with and without) - label it clearly as conditional on the proof.

6. Compute - both regimes

python3 <skill>/scripts/tax_engine.py work/income.json > output/computation.txt
python3 <skill>/scripts/tax_engine.py work/income.json --json > output/computation.json

Present to the user:

  • The engine's regime comparison table (verbatim - this is the artifact the user's decision rests on).
  • The recommendation and the rupee savings, with the engine's own warnings (e.g. "old regime needs proofs for every deduction claimed").
  • Explanations of why (use references/rates-fy2025-26.md to narrate - never to recompute).

7. Pick the form & set dates

Use the decision procedure in references/form-selector.md. Then set due_date in income.json to that form's due date and filing_date to today (or the user's planned date) and re-run step 6 - late-filing interest/fees may change the numbers. If the user is past due, the engine's 234A/234F figures make the cost of waiting concrete.

8. Reconcile

Confirm with the user, line by line:

  • TDS claimed = 26AS total (the validator enforces this; explain any delta).
  • Every AIS line item is either in the return or has an explanation.
  • Regime choice is final (old regime + business income needs Form 10-IEA before filing - flag it).

9. Filing pack, then the portal

Generate output/filing-pack.md:

  • header: name (no PAN), AY, chosen form, chosen regime, due date;
  • the full computation table from the engine;
  • a portal field map: every schedule of the chosen form → the exact value to enter, in portal order;
  • TDS/prepaid credits table;
  • final payable/refund figure the portal must match (±10 under s.288B rounding);
  • document trail summary from extraction-notes.

Then walk the user through filing with references/portal-walkthrough.md (online route by default; offline-utility route if they prefer). Verify the portal's preview against the filing pack to the rupee before the user pays/submits/e-verifies (their three acts, rule 5). If the portal disagrees with the engine, stop and reconcile - do not shrug and accept either number.

10. Post-filing

  • Remind: e-verify within 30 days or the return is invalid.
  • Save the ACK number into work/progress.md (never the JSON with PAN into chat).
  • Set expectations: 143(1) intimation usually within weeks; what a mismatch there would mean.
  • If AIS had wrong entries, point the user to the AIS feedback mechanism.

What is deterministic vs. judgment

Deterministic (scripts, tested)Model judgment (you)
All tax/interest/fee arithmeticReading documents
Regime comparison & savingsInterviewing for deductions
Input schema enforcement & cross-checksClassifying odd income items
Golden tests + property fuzzer (scripts/test_tax_engine.py, scripts/fuzz_engine.py)Explaining results in plain language
Rounding (s.288A/288B, Rule 119A)Portal guidance

When judgment and a script disagree, the script wins; when the script can't express something, you say so out loud rather than approximating (rule 8).

Reference index

FileRead when
references/rates-fy2025-26.mdexplaining any rate, date, or rule
references/input-schema.mdbuilding/editing income.json
references/documents-guide.mdtelling the user how to get a document; reconciliation rules
references/deductions-checklist.mdstep 5 interview
references/capital-gains.mdany equity/MF/crypto/property sale
references/form-selector.mdchoosing ITR-1/2/3/4
references/portal-walkthrough.mdstep 9 filing
references/blind-extraction.mduser wants identities kept out of the extraction

Disclaimer to show the user once

itr-wala is an open-source assistant, not a chartered accountant, and this is not professional tax advice. Every figure is computed by tested, deterministic code and every step is shown for your review - but you are the one filing, and responsibility for the return stays with you. For anything this skill flags as out of scope, or if your situation feels unusual, spend the ₹500-2,000 on a CA review of the generated filing pack

  • it's built to be handed over.

发现问题?提交给管理员复核

评分:

评论 (0)

暂无评论,成为第一个评论者吧!