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)
- 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).
- CAMS / KFin RTA statements — direct-MF LT lots (scheme, ISIN, units, redemption, cost).
- PMS capital-gain statements — per-scrip lots; cost-authoritative.
Method
- Extract AIS depository LT rows; if the AIS PDF is unavailable, build entirely from RTA + PMS statements.
- Extract RTA LT lots AND PMS audit-statement lots.
- 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".
- 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.
- 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).
- 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.
1---2name: itr-112a-csv3description: 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.4---56# Schedule 112A scrip-wise CSV78Produce `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.910**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.1112## Columns (working/audit record)13`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).14- Acquired **after 31-Jan-2018** → FMV columns 0/blank; cost = actual.15- 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.1617## Data sources (priority order)181. **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).192. **CAMS / KFin RTA statements** — direct-MF LT lots (scheme, ISIN, units, redemption, cost).203. **PMS capital-gain statements** — per-scrip lots; cost-authoritative.2122## Method231. Extract AIS depository LT rows; if the AIS PDF is unavailable, build entirely from RTA + PMS statements.242. Extract RTA LT lots AND PMS audit-statement lots.253. **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".264. **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.275. 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).286. **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.2930## ⚠️ Portal upload format — the AE-consolidated rule (hard-won)31The 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:32- **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.33- **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)*.34- **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`.35- **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).36- **`BE` (pre-2018) lots ARE listed scrip-wise** with FMV/grandfathering columns.37- **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`.38- 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.