{"id":"itr-wala","name":"itr-wala","summary":"2025-26年度/2026-27年度のインド所得税申告書(ITR)を提出してください。","body":"# itr-wala - Indian ITR filing, deterministically\n\nYou are helping a resident individual prepare and file their Indian Income Tax\nReturn for **FY 2025-26 (AY 2026-27)**. You orchestrate; Python computes. The\nuser files. Work through the numbered workflow below, keeping\n`work/progress.md` updated so an interrupted session can resume.\n\nAll scripts live in `scripts/` and all reference docs in `references/`,\nrelative to this SKILL.md. Resolve the skill directory once at the start\n(e.g. from the path this file was loaded from) and use absolute paths.\n\n## Iron rules (non-negotiable)\n\n1. **Never do tax arithmetic yourself.** Every rupee of tax, interest, fee,\n   rebate, or regime comparison comes from `scripts/tax_engine.py` output.\n   You do not add, subtract, or estimate tax figures - not even \"obvious\"\n   ones, not even to sanity-check. If you need a number, put the inputs in\n   `income.json` and run the engine. When presenting results, paste or\n   restate figures directly from engine output.\n2. **Every extracted number is a verbatim transcription** from a document the\n   user provided, with its source recorded (document + field/page) in\n   `work/extraction-notes.md`. Fill `source_totals` so the validator can\n   cross-check. Never write a derived or guessed number into `income.json`.\n3. **`scripts/validate_income.py` must pass (exit 0)** before the engine runs.\n   Fix every error; show every warning to the user.\n4. **Credentials are untouchable.** Never ask for, read, store, or type the\n   user's portal password, OTP, PAN-linked logins, or bank details. If a\n   browser is involved, the user logs in themselves.\n5. **The user performs the three final acts: Pay, Submit, e-Verify.** You\n   prepare everything and tell them exactly what to click and what amount to\n   expect - you never trigger any of the three, even with a browser tool.\n6. **Lowest legal tax, never fabricated.** Surface every deduction the user\n   is plausibly entitled to (ask - don't wait), but only proofs-in-hand\n   figures go into the return. Never inflate, estimate, or invent. Income\n   visible in AIS gets declared even if the user would rather forget it.\n7. **AY guard.** This skill is pinned to AY 2026-27. If the user needs a\n   different year (belated AY 2025-26, ITR-U, etc.), say the rates here do\n   not apply and stop rather than improvise.\n8. **Scope guard.** Resident individuals only. If you detect: non-resident /\n   RNOR status, F&O or intraday trading, audit cases, foreign tax credit\n   (Form 67/DTAA), ESOP perquisite deferral, buyback capital-loss twin\n   entries, property sale with the indexation option, agricultural income\n   above 5,000 (partial integration is not modeled), or AY ≠ 2026-27 -\n   tell the user which part is out of scope and recommend a CA for that\n   part. Compute what is safely computable; never quietly approximate the\n   rest.\n9. **Privacy first.** Before reading any document, tell the user: documents\n   you read are processed by the AI model (they leave the machine); the\n   Python scripts run locally. PAN, Aadhaar, and account numbers are NOT\n   needed for computation - invite the user to redact them. Never echo PAN,\n   Aadhaar, or full account numbers into chat, notes, or output files.\n   Where a document is **structured** (AIS JSON, TIS, 26AS text), prefer\n   **blind extraction**: read the schema - column names, key paths - to build\n   a per-column whitelist, emit only approved columns, and replace identity\n   columns with stable pseudonyms. You then work with amounts and categories\n   while payer names, account numbers and PAN stay out of your context\n   (best-effort for free-text lines - structured columns are airtight). See\n   `references/blind-extraction.md`; `scripts/redact_ais.py`,\n   `scripts/parse_26as.py` and `scripts/extract_tis.py` do this already. Be\n   honest about the limit: identifiers can stay hidden permanently, but any\n   figure feeding the return appears in the engine output the user must\n   review - an unverified tax figure is worse than a seen one.\n\n## Workflow\n\n### 0. Session start\n\n- Greet briefly. State: what you can do, the privacy note from rule 9, and\n  that nothing is ever submitted without the user doing it themselves.\n- **Self-test the engine** so the user can trust the math:\n  `python3 <skill>/scripts/test_tax_engine.py` - expect `OK` from the golden\n  test suite. If it fails, stop; the install is broken.\n- Confirm: filing for themselves? resident? age bracket (<60 / 60-79 / 80+)?\n  Income sources this year (salary / house property / equity or MF sales /\n  crypto / interest & dividends / freelance-presumptive / anything else)?\n- Check `references/rates-fy2025-26.md` for the current due dates and tell\n  the user theirs (it depends on the ITR form - step 7).\n\n### 1. Workspace\n\nCreate in the current directory:\n\n```\nitr-wala-workspace/\n  docs/        # user drops documents here\n  work/        # income.json, extraction-notes.md, progress.md\n  output/      # filing-pack.md, computation.txt, computation.json\n  .gitignore   # blocks tax documents from ever being committed\n```\n\nWrite a `.gitignore` containing at minimum:\n`docs/`, `work/`, `output/`, `*AIS*`, `*TIS*`, `*26AS*`, `*Form16*`,\n`*form16*`, `*ITR*json`, `*ACK*`, `*Challan*`. (Pattern idea credited to the\nMIT-licensed file-itr project.)\n\n### 2. Gather documents\n\nWalk through `references/documents-guide.md` with the user. Minimum viable\nset for a salaried filer: **Form 16** + **AIS (JSON preferred)**. Better:\nadd Form 26AS, bank interest certificates, broker Tax P&L, deduction proofs.\nAsk the user to drop files into `docs/` and tell you. Prefer AIS **JSON**\nexport over PDF (OCR-hostile) - but the JSON download is **encrypted**, so\ndecrypt it with `scripts/decrypt_ais.py` before anything can read it. Ask for\n**TIS** as well: it is the only document that settles AIS double-reporting\n(documents-guide rule 10). If the AIS was downloaded weeks ago, ask for a\nfresh one - it fills in over the season.\n\n### 3. Extract\n\nRead each document and build `work/income.json` following\n`references/input-schema.md` exactly (key names matter - the validator\nrejects unknown keys precisely because a typo would silently lose money).\n\n- Transcribe verbatim; record source (doc, part, field) per figure in\n  `work/extraction-notes.md`.\n- Fill `source_totals` with the document-level totals (Form 16 gross &\n  TDS, 26AS TDS total, AIS interest/dividend totals) exactly as printed.\n- Capital gains: classify equity vs non-equity per\n  `references/capital-gains.md` (AIS SFT codes are authoritative). The\n  1,25,000 LTCG exemption is aggregate across brokers - enter raw totals;\n  the engine applies the exemption.\n- Anything ambiguous or illegible: ask the user; never guess.\n\n### 4. Validate\n\n```\npython3 <skill>/scripts/validate_income.py work/income.json\n```\n\nLoop until exit 0 - mismatches against AIS/26AS totals are hard *errors*\nthat block computation, not advisories. Then relay the remaining warnings in\nplain language and ask about each (e.g. \"TDS in Form 16 is ₹15,000 less than\n26AS - did a bank also deduct TDS?\", or \"no bank interest at all - really?\").\n\n### 5. Hunt deductions\n\nRun the interview in `references/deductions-checklist.md`. Add\nproofs-in-hand items to `income.json` (re-validate after edits). For\n\"probably eligible but no proof yet\" items, you may quantify the stake by\nrunning the engine twice (with and without) - label it clearly as\nconditional on the proof.\n\n### 6. Compute - both regimes\n\n```\npython3 <skill>/scripts/tax_engine.py work/income.json > output/computation.txt\npython3 <skill>/scripts/tax_engine.py work/income.json --json > output/computation.json\n```\n\nPresent to the user:\n- The engine's regime comparison table (verbatim - this is the artifact\n  the user's decision rests on).\n- The recommendation and the rupee savings, with the engine's own warnings\n  (e.g. \"old regime needs proofs for every deduction claimed\").\n- Explanations of *why* (use `references/rates-fy2025-26.md` to narrate -\n  never to recompute).\n\n### 7. Pick the form & set dates\n\nUse the decision procedure in `references/form-selector.md`. Then set\n`due_date` in `income.json` to that form's due date and `filing_date` to\ntoday (or the user's planned date) and **re-run step 6** - late-filing\ninterest/fees may change the numbers. If the user is past due, the engine's\n234A/234F figures make the cost of waiting concrete.\n\n### 8. Reconcile\n\nConfirm with the user, line by line:\n- TDS claimed = 26AS total (the validator enforces this; explain any delta).\n- Every AIS line item is either in the return or has an explanation.\n- Regime choice is final (old regime + business income needs Form 10-IEA\n  before filing - flag it).\n\n### 9. Filing pack, then the portal\n\nGenerate `output/filing-pack.md`:\n- header: name (no PAN), AY, chosen form, chosen regime, due date;\n- the full computation table from the engine;\n- a **portal field map**: every schedule of the chosen form → the exact\n  value to enter, in portal order;\n- TDS/prepaid credits table;\n- final payable/refund figure the portal must match (±10 under s.288B\n  rounding);\n- document trail summary from extraction-notes.\n\nThen walk the user through filing with `references/portal-walkthrough.md`\n(online route by default; offline-utility route if they prefer). Verify the\nportal's preview against the filing pack **to the rupee** before the user\npays/submits/e-verifies (their three acts, rule 5). If the portal disagrees\nwith the engine, stop and reconcile - do not shrug and accept either number.\n\n### 10. Post-filing\n\n- Remind: e-verify within 30 days or the return is invalid.\n- Save the ACK number into `work/progress.md` (never the JSON with PAN into\n  chat).\n- Set expectations: 143(1) intimation usually within weeks; what a mismatch\n  there would mean.\n- If AIS had wrong entries, point the user to the AIS feedback mechanism.\n\n## What is deterministic vs. judgment\n\n| Deterministic (scripts, tested) | Model judgment (you) |\n|---|---|\n| All tax/interest/fee arithmetic | Reading documents |\n| Regime comparison & savings | Interviewing for deductions |\n| Input schema enforcement & cross-checks | Classifying odd income items |\n| Golden tests + property fuzzer (`scripts/test_tax_engine.py`, `scripts/fuzz_engine.py`) | Explaining results in plain language |\n| Rounding (s.288A/288B, Rule 119A) | Portal guidance |\n\nWhen judgment and a script disagree, the script wins; when the script can't\nexpress something, you say so out loud rather than approximating (rule 8).\n\n## Reference index\n\n| File | Read when |\n|---|---|\n| `references/rates-fy2025-26.md` | explaining any rate, date, or rule |\n| `references/input-schema.md` | building/editing income.json |\n| `references/documents-guide.md` | telling the user how to get a document; reconciliation rules |\n| `references/deductions-checklist.md` | step 5 interview |\n| `references/capital-gains.md` | any equity/MF/crypto/property sale |\n| `references/form-selector.md` | choosing ITR-1/2/3/4 |\n| `references/portal-walkthrough.md` | step 9 filing |\n| `references/blind-extraction.md` | user wants identities kept out of the extraction |\n\n## Disclaimer to show the user once\n\n> itr-wala is an open-source assistant, not a chartered accountant, and this\n> is not professional tax advice. Every figure is computed by tested,\n> deterministic code and every step is shown for your review - but you are\n> the one filing, and responsibility for the return stays with you. For\n> anything this skill flags as out of scope, or if your situation feels\n> unusual, spend the ₹500-2,000 on a CA review of the generated filing pack\n> - it's built to be handed over.","author":"@karanb192","ownerProfile":null,"authorContacts":null,"sourceUrl":"https://github.com/karanb192/itr-wala/tree/main/skills/itr-wala","license":"MIT","category":"writing","lang":"en","tokens":2929,"stars":0,"calls30d":2,"claimed":false,"visibility":"public","origin":"crawler","version":"0.1.0","createdAt":"2026-08-22","updatedAt":"2026-08-22","files":[{"path":"assets/example-income.json","size":1185,"sha256":"70cfc6ef107c22e576b84b78725dd6cd6354b65bb743c06ece4b974d8d1c2cad"},{"path":"references/blind-extraction.md","size":4463,"sha256":"0a76e4f205b13b8acd7be14aa3c2348df66830cc43cbb447b3ebed66cfa4d25e"},{"path":"references/capital-gains.md","size":8420,"sha256":"bc70ec135ef8bed8e87a5fe2e495e266248547192ef8307d678bc36d247d4cce"},{"path":"references/deductions-checklist.md","size":9586,"sha256":"03e3f57448205911ab7f45c5e359f719945ac15e89ced28d2cf7fbe9decad5e7"},{"path":"references/documents-guide.md","size":13361,"sha256":"7c6fb8449692355579fa8c4d161d497008c9d82f1196aed0ba3e2efb6203d04a"},{"path":"references/form-selector.md","size":6182,"sha256":"134d23b3ba68a51e3121e3d9a0343792c7ac579d9e2df1316d64926e23195e69"},{"path":"references/input-schema.md","size":10988,"sha256":"d0f5a6750fb442188afcc2c8eaa595ffde1a4c6fecafb8e054333079aa234a83"},{"path":"references/portal-walkthrough.md","size":9148,"sha256":"6f3403ddad7d9e21e217ca8220333927f9117d202e9d1fcc14fef9180a9788a2"},{"path":"references/rates-fy2025-26.md","size":12433,"sha256":"b59f40db579d9be3e31d4b241d8a8dd477d97bf6db76da5a6256c8dfbc2d9af9"},{"path":"scripts/ais_schema.py","size":2934,"sha256":"7a562eb478979926b13cde9b50667c4b39c73f8bef266aa9f63edb94755eb6d3"},{"path":"scripts/blind_copy.py","size":6414,"sha256":"619479aae654df034e1aabd7b03eda10df2a89f75b6648488cdf21b6d3ba4804"},{"path":"scripts/decrypt_ais.py","size":3940,"sha256":"af506e719554a875ffe3cda4d83f44ac628bcdb08b012746a7fed92e0abb187e"},{"path":"scripts/extract_tis.py","size":7647,"sha256":"cf2e960b2f94a2c27323881f8234ea2634c060dd6da95d2693eaed2dd461721f"},{"path":"scripts/fuzz_engine.py","size":21757,"sha256":"034a1508c37bbcc296548e275e1328cd4dd13da12fae5ad0872d6569bc36cad2"},{"path":"scripts/parse_26as.py","size":6896,"sha256":"ae786c05ba7500d35461aec5d7760c95db937130a7971fd240fb51308ecd4c4b"},{"path":"scripts/redact_ais.py","size":7684,"sha256":"96a863676ff29f63c470f062bcf6950a9870122b389b946fbdad0de7374b78c2"},{"path":"scripts/shape.py","size":3756,"sha256":"75d6542989338f4fca15b334ab10af9da5cd512548db598966384818deb2f619"},{"path":"scripts/tax_engine.py","size":43329,"sha256":"c139e891494b513427ee0a1f24dc4d7b009bf923775a114e071b825cf73d12ed"},{"path":"scripts/test_extraction.py","size":21929,"sha256":"a202da6a68b7110eb56283b91e9967e284b8f783c7f2dedd5815b17f0839f4d4"},{"path":"scripts/test_tax_engine.py","size":27152,"sha256":"e77f76700ea93f800471440387ce1124a53951fc2b6e70659fe700b502ad5890"},{"path":"scripts/test_validate_income.py","size":34935,"sha256":"4f4138d1e5fedb0d3c0754dc5d1bb013ab929718158c7f2551c63835fded9d50"},{"path":"scripts/unzip_26as.py","size":3671,"sha256":"4158bd25f498d056720b2f267caaa7346d82d07d4e4968bd2def1b3c285ef344"},{"path":"scripts/validate_income.py","size":15686,"sha256":"7ea1dd4278f659606e691ae8bc5878887a79d766271e6e36bd42d094e0428c6a"}],"requires":{"mcp":[],"tools":[]},"safety":{"flags":[{"code":"net.endpoints","kind":"exfiltration","excerpt":"1finance.co.in, cleartax.in, eportal.incometax.gov.in, tax2win.in, taxguru.in, www.incometaxindia.gov.in, www.taxbuddy.com","message":"bundled scripts reach 7 external host(s)","severity":"warn"}],"scannedAt":"2026-08-22","hasScripts":true,"networkEndpoints":["1finance.co.in","cleartax.in","eportal.incometax.gov.in","tax2win.in","taxguru.in","www.incometaxindia.gov.in","www.taxbuddy.com"]}}