Skip to content
Ritesh FirodiyaGet in touch

Work / Chitragupt / Wiki / Decisions

2026-07-12-real-80g-donee-category-math

Decisioncanonicalverified 2026-07-12

DECISION.2026-07-12.REAL-80G-DONEE-CATEGORY-MATH

Decision

§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 legacy section_80g_donation entry type still works and lands in section_80g_paise (treated conservatively as 50%-with-limit).
  • chapterVIABreakdown in income-summary.ts applies:
    • §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é