Work / Chitragupt / Wiki / Decisions
2026-07-12-real-80g-donee-category-math
Decisioncanonicalverified 2026-07-12
DECISION.2026-07-12.REAL-80G-DONEE-CATEGORY-MATHDecision
§80G is category-driven: donations split into four sub-buckets by axes (rate × qualifying-limit). The engine applies the correct rate per bucket and enforces the 10%-of-AGI qualifying-limit on the two "_with_limit" buckets.
Sub-buckets:
section_80g_100pct_no_limit_paise— 100% deduction, no cap.section_80g_50pct_no_limit_paise— 50% deduction, no cap.section_80g_100pct_with_limit_paise— 100% deduction, capped at 10% of AGI (shared with the 50%-with-limit bucket).section_80g_50pct_with_limit_paise— 50% deduction, capped at 10% of AGI (shared with above).
Also: §80C aggregation with §80CCC + §80CCD(1) enforced — the shared ₹1.5L cap applies to the SUM of these three, not each individually.
Why
The audit surfaced that §80G was hardcoded to a flat ₹50k cap in
orchestrator.ts::capsFromTable. Statute has no such cap: the
category-driven math is the actual rule. A user donating ₹2 L to
PM CARES (100% no-limit) was wrongly capped at ₹50k → over-taxed by
₹45k assuming a 30% slab.
Similarly, §80C's ₹1.5L cap is statutorily shared with §80CCC
(pension fund) and §80CCD(1) (NPS employee contribution). Pre-Phase-2
the engine only capped section_80c_paise — a user with ₹1L NPS
Tier-1 employee contribution + ₹1L LIC premium exceeded the shared
cap and got over-deducted.
Impact
- New IncomeSummary buckets for §80G donee-split + §80CCC + §80CCD(1).
- New entry types in user-identity-entry ledger enum:
section_80ccc_pension,section_80ccd_1_nps_employee, and the four §80G sub-buckets. Mappers should emit the split when the donation receipt carries a donee category; the legacysection_80g_donationentry type still works and lands insection_80g_paise(treated conservatively as 50%-with-limit). chapterVIABreakdowninincome-summary.tsapplies:- §80C aggregate = min(sum(80C+80CCC+80CCD(1)), cap).
- §80G total = 100_no_limit + 50%×50_no_limit + qualifying-limit- capped 100_with_limit + 50%×qualifying-limit-capped 50_with_limit.
Status
Active. Landed as part of Phase 2 of the recompute-correctness sweep. The parser splits donation receipts by donee category — V2, when the donor's PAN + donee's PAN + FCRA/12A status can be extracted from the receipt.
Sources
- Phase 2 recompute-correctness commit.
- IT Act 1961 §80G (Schedule VII), §80C, §80CCC, §80CCD(1).
- Related entity: pillar-tax.
Every project of mine is written down like this.
Read the résumé