# Itr 112a CSV

> Generate the Schedule 112A scrip-wise CSV (per-ISIN LTCG rows for STT-paid equity shares & equity MF units) from AIS depository detail and CAMS/KFin/PMS statements, verified against the 112A bucket total, plus the portal-format upload file. Use when preparing Schedule 112A for ITR filing or when the itr-file skill requests it.

- Skill: `ankitkr/itr-112a-csv` (Agent Skill)
- Install (CLI): `npx skillmds@latest add ankitkr/itr-112a-csv`
- Raw SKILL.md: https://api.skillmd.com/api/skills/ankitkr/itr-112a-csv/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Data & Analytics
- Author: ankitkr (https://skillmd.com/u/ankitkr)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/ankitkr/itr-112a-csv

---


# Schedule 112A scrip-wise CSV

Produce `Schedule112A_FY<year>.csv` in the tax-year folder with one row per **long-term, STT-paid** sale of listed equity shares / equity-oriented MF units. Only LTCG rows — STCG is reported in aggregate, not scrip-wise.

**ITR-2+ only.** ITR-1 (which allows 112A LTCG ≤ ₹1.25L from AY 2025-26) takes one aggregate block — consideration, cost, LTCG — with no scrip-wise CSV; this file is still a good audit record of the lots behind those numbers.

## Columns (working/audit record)
`ISIN, Name of Share/Unit, No. of Shares/Units, Sale price per Share/Unit, Full Value of Consideration, Cost of Acquisition (without indexation), FMV per share as on 31-Jan-2018, Total FMV, Expenditure in connection with transfer, LTCG` (+ optional Source, Sale date for audit).
- Acquired **after 31-Jan-2018** → FMV columns 0/blank; cost = actual.
- Acquired **on/before 31-Jan-2018** → grandfathering: cost = higher of actual and min(FMV 31-1-18, sale price). AIS carries a "Price on 31-Jan-18" column for such rows.

## Data sources (priority order)
1. **AIS PDF depository sections** — "Sale of listed equity share (Depository)" and "Sale of unit of equity oriented mutual fund (Depository)": date, ISIN, quantity, sale price, consideration, cost, LT/ST flag. Take **Long term + Active** rows only (skip Inactive duplicates). ⚠️ AIS costs for demat shares are the depository's records — verify against the PMS/broker statements; where they differ, the audited statement governs (AIS marks off-market/demerger credits as ST with zero cost — the statements' holding periods govern).
2. **CAMS / KFin RTA statements** — direct-MF LT lots (scheme, ISIN, units, redemption, cost).
3. **PMS capital-gain statements** — per-scrip lots; cost-authoritative.

## Method
1. Extract AIS depository LT rows; if the AIS PDF is unavailable, build entirely from RTA + PMS statements.
2. Extract RTA LT lots AND PMS audit-statement lots.
3. **DEDUPE ACROSS STATEMENTS before summing — the #1 trap.** An RTA PnL can contain the *same lots* as a PMS audit statement (the PMS holds direct-MF folios under the client's PAN; both report identical units/dates/amounts). Match on (scheme, purchase date, units to 3 dp, redemption date); where duplicated keep the PMS version, drop the RTA copy. Do NOT assume "RTA = personal, PMS = separate schemes".
4. **Classify ST/LT from lot-level days-held, never from summary-line positions.** Scrambled PDF text can transpose ST↔LT summary labels. Rebuild both totals from lots and require: every lot satisfies *sale − cost = ST + LT*, per-scrip sums = statement totals, quarterly sums = the statement's printed quarterly summary.
5. Aggregate per ISIN per sale event (keeps qty × price = consideration exact; multiple rows per ISIN are fine). Loss scrips stay in (negative LTCG nets inside the schedule).
6. **Verify: Σ LTCG rows = the verified 112A bucket** from the reconciliation, and print a per-source subtotal table. Misses usually mean duplicate RTA/PMS lots, ST rows leaked in, or a summary transposition.

## ⚠️ Portal upload format — the AE-consolidated rule (hard-won)
The scrip-wise CSV above is the **working/audit record**. The e-filing portal's 112A **"Upload CSV" uses a different template — ALWAYS download the current-year `_template.csv` from the portal, never reuse a prior year's layout** (the historical 14 columns gained a **transfer-date column 1b** from AY 2025-26 when the 23-Jul-2024 rate split arrived; a file matching an old layout fails structurally). Hard rules:
- **Column 1a takes a CODE: `AE`** (acquired after 31-Jan-2018) or `BE` (on/before) — a phrase like "After 31st January 2018" gets every row skipped.
- **Column 1b (present since AY 2025-26) takes the transfer-date code** — transfer before vs on/after 23-Jul-2024. For FY 2025-26 every transfer is the on/after code, but the column must still be filled; confirm the codes on the current template's instructions sheet *(portal-observed: `BE` = before 23-Jul-2024, `AE` = on/after — the same letters as 1a with a DIFFERENT meaning, an easy transposition trap)*.
- **For `AE` holdings the portal does NOT accept scrip-wise rows — it mandates ONE CONSOLIDATED row:** ISIN = `INNOTREQUIRD`, name = `CONSOLIDATED`, units/sale-price/FMV columns **blank**, consideration = total, cost = total, balance = net LTCG (losses netted in). Scrip-wise `AE` rows fail with `common.errors.csv_row_skip`.
- **No special characters** (`- , / ( ) & @ ' " ; : _ \`) anywhere in data; no commas in numbers; ISIN exactly 12 chars; no blank rows; header byte-identical to the template (keep its trailing comma).
- **`BE` (pre-2018) lots ARE listed scrip-wise** with FMV/grandfathering columns.
- **Simplest when all lots are AE:** skip the CSV — enter ONE consolidated row manually via Schedule 112A "Add" (acquired After → total consideration + total cost; the ₹1.25L exemption applies automatically in Schedule SI). Or write a one-line `_PORTAL.csv`.
- Official rules: `static.incometax.gov.in/iec/foservices/assets/itr-shared/documents/112A_115AD_CSV_Instructions.pdf` (also linked in the portal's Upload-CSV dialog) — ⚠️ this PDF can LAG the live template (as of Jul-2026 it still shows the pre-1b layout); where they differ, the downloaded current-year template governs.

