What Finacra ITR checks before download

Every JSON is validated in two passes before the download button fires. Category-A failures block download; B / D failures surface as warnings + advisories so the operator knows what would trigger a defective notice or deduction-disallow at filing.

Pass 1 · Catalogued semantic rules

Hand-curated from CBDT's Validation Rules PDFs for AY 2026-27. Each rule applies to a specific form (or all four). Tap a form below to see which rules run.

ITR-1SAHAJ28 rules — 27 A · 1 B · 0 D
Category A · blocks upload
  • pan_missingPAN required + format AAAAA9999A
  • sec80c_cap_150k80C + 80CCC + 80CCD(1) sum ≤ ₹1,50,000 (Sec 80CCE)
  • sec80tta_cap_10k80TTA ≤ ₹10,000
  • sec80ttb_cap_50k80TTB ≤ ₹50,000 (senior citizens only)
  • sec80ee_cap_50k80EE ≤ ₹50,000
  • sec80eea_cap_150k80EEA ≤ ₹1,50,000
  • sec80eeb_cap_150k80EEB ≤ ₹1,50,000
  • sec80ee_eea_mutexOnly one of 80EE / 80EEA can be claimed
  • itr1_total_income_cap_50LITR-1 total income ≤ ₹50 L (else file ITR-2/3/4)
  • sched_tds1_totalTDS-on-salary total = sum of per-employer rows
  • verification_presentVerification block: AssesseeVerName required
  • hp_self_occupied_interest_cap_2LSelf-occupied HP interest ≤ ₹2,00,000 (Sec 24(b))
  • gross_salary_identityGross salary = Sec 17(1) + 17(2) + 17(3)
  • std_deduction_cap_50k_old_regimeStandard deduction u/s 16(ia) ≤ ₹50,000 (old regime)
  • sec80d_self_family_cap_25k80D Self & Family ≤ ₹25,000 (non-senior)
  • sec80d_self_family_senior_cap_50k80D Self & Family Senior Citizen ≤ ₹50,000
  • sec80d_preventive_health_cap_5k80D preventive health check-up ≤ ₹5,000 combined
  • sec80g_cash_donation_2k_cap80G cash donation to single PAN ≤ ₹2,000 (Sec 80G(5D))
  • hra_80gg_mutexHRA (Sec 10(13A)) + 80GG are mutually exclusive
  • assessment_year_formatAssessmentYear: 4-digit format
  • total_income_identityTotal Income = max(0, Gross Total Income − Total Deductions)
  • agri_exempt_income_5k_capAgricultural exempt income ≤ ₹5,000 on ITR-1/4
  • sec80ccd1b_cap_50k80CCD(1B) NPS additional ≤ ₹50,000
  • sec80gg_cap_60k80GG ≤ ₹60,000 (₹5,000/month × 12)
  • mobile_format_checkmobile format check
  • pin_code_format_checkpin code format check
  • state_code_presentstate code present
Category B · defective-notice risk
  • aadhaar_pan_linkingAadhaar + Aadhaar–PAN linking per Circular 03/2023
ITR-226 rules — 25 A · 1 B · 0 D
Category A · blocks upload
  • pan_missingPAN required + format AAAAA9999A
  • sec80c_cap_150k80C + 80CCC + 80CCD(1) sum ≤ ₹1,50,000 (Sec 80CCE)
  • sec80tta_cap_10k80TTA ≤ ₹10,000
  • sec80ttb_cap_50k80TTB ≤ ₹50,000 (senior citizens only)
  • sec80ee_cap_50k80EE ≤ ₹50,000
  • sec80eea_cap_150k80EEA ≤ ₹1,50,000
  • sec80eeb_cap_150k80EEB ≤ ₹1,50,000
  • sec80ee_eea_mutexOnly one of 80EE / 80EEA can be claimed
  • sched_tds1_totalTDS-on-salary total = sum of per-employer rows
  • verification_presentVerification block: AssesseeVerName required
  • hp_self_occupied_interest_cap_2LSelf-occupied HP interest ≤ ₹2,00,000 (Sec 24(b))
  • gross_salary_identityGross salary = Sec 17(1) + 17(2) + 17(3)
  • std_deduction_cap_50k_old_regimeStandard deduction u/s 16(ia) ≤ ₹50,000 (old regime)
  • sec80d_self_family_cap_25k80D Self & Family ≤ ₹25,000 (non-senior)
  • sec80d_self_family_senior_cap_50k80D Self & Family Senior Citizen ≤ ₹50,000
  • sec80d_preventive_health_cap_5k80D preventive health check-up ≤ ₹5,000 combined
  • sec80g_cash_donation_2k_cap80G cash donation to single PAN ≤ ₹2,000 (Sec 80G(5D))
  • hra_80gg_mutexHRA (Sec 10(13A)) + 80GG are mutually exclusive
  • assessment_year_formatAssessmentYear: 4-digit format
  • total_income_identityTotal Income = max(0, Gross Total Income − Total Deductions)
  • sec80ccd1b_cap_50k80CCD(1B) NPS additional ≤ ₹50,000
  • sec80gg_cap_60k80GG ≤ ₹60,000 (₹5,000/month × 12)
  • mobile_format_checkmobile format check
  • pin_code_format_checkpin code format check
  • state_code_presentstate code present
Category B · defective-notice risk
  • aadhaar_pan_linkingAadhaar + Aadhaar–PAN linking per Circular 03/2023
ITR-331 rules — 25 A · 5 B · 1 D
Category A · blocks upload
  • pan_missingPAN required + format AAAAA9999A
  • sec80c_cap_150k80C + 80CCC + 80CCD(1) sum ≤ ₹1,50,000 (Sec 80CCE)
  • sec80tta_cap_10k80TTA ≤ ₹10,000
  • sec80ttb_cap_50k80TTB ≤ ₹50,000 (senior citizens only)
  • sec80ee_cap_50k80EE ≤ ₹50,000
  • sec80eea_cap_150k80EEA ≤ ₹1,50,000
  • sec80eeb_cap_150k80EEB ≤ ₹1,50,000
  • sec80ee_eea_mutexOnly one of 80EE / 80EEA can be claimed
  • sched_tds1_totalTDS-on-salary total = sum of per-employer rows
  • verification_presentVerification block: AssesseeVerName required
  • hp_self_occupied_interest_cap_2LSelf-occupied HP interest ≤ ₹2,00,000 (Sec 24(b))
  • gross_salary_identityGross salary = Sec 17(1) + 17(2) + 17(3)
  • std_deduction_cap_50k_old_regimeStandard deduction u/s 16(ia) ≤ ₹50,000 (old regime)
  • sec80d_self_family_cap_25k80D Self & Family ≤ ₹25,000 (non-senior)
  • sec80d_self_family_senior_cap_50k80D Self & Family Senior Citizen ≤ ₹50,000
  • sec80d_preventive_health_cap_5k80D preventive health check-up ≤ ₹5,000 combined
  • sec80g_cash_donation_2k_cap80G cash donation to single PAN ≤ ₹2,000 (Sec 80G(5D))
  • hra_80gg_mutexHRA (Sec 10(13A)) + 80GG are mutually exclusive
  • assessment_year_formatAssessmentYear: 4-digit format
  • total_income_identityTotal Income = max(0, Gross Total Income − Total Deductions)
  • sec80ccd1b_cap_50k80CCD(1B) NPS additional ≤ ₹50,000
  • sec80gg_cap_60k80GG ≤ ₹60,000 (₹5,000/month × 12)
  • mobile_format_checkmobile format check
  • pin_code_format_checkpin code format check
  • state_code_presentstate code present
Category B · defective-notice risk
  • aadhaar_pan_linkingAadhaar + Aadhaar–PAN linking per Circular 03/2023
  • itr3_audit_threshold_turnoverTurnover > ₹10 cr → Sec 44AB audit (Form 3CA/3CB-3CD)
  • itr3_bs_pl_required_when_booksitr3 bs pl required when books
  • itr3_bs_balance_checkitr3 bs balance check
  • agm_date_within_6mo_of_fy_endagm date within 6mo of fy end
Category D · deduction-disallow risk
  • itr3_presumptive_section_mutexitr3 presumptive section mutex
ITR-4SUGAM29 rules — 28 A · 1 B · 0 D
Category A · blocks upload
  • pan_missingPAN required + format AAAAA9999A
  • sec80c_cap_150k80C + 80CCC + 80CCD(1) sum ≤ ₹1,50,000 (Sec 80CCE)
  • sec80tta_cap_10k80TTA ≤ ₹10,000
  • sec80ttb_cap_50k80TTB ≤ ₹50,000 (senior citizens only)
  • sec80ee_cap_50k80EE ≤ ₹50,000
  • sec80eea_cap_150k80EEA ≤ ₹1,50,000
  • sec80eeb_cap_150k80EEB ≤ ₹1,50,000
  • sec80ee_eea_mutexOnly one of 80EE / 80EEA can be claimed
  • itr4_44ad_turnover_capSec 44AD turnover ≤ ₹3 cr
  • sched_tds1_totalTDS-on-salary total = sum of per-employer rows
  • verification_presentVerification block: AssesseeVerName required
  • hp_self_occupied_interest_cap_2LSelf-occupied HP interest ≤ ₹2,00,000 (Sec 24(b))
  • gross_salary_identityGross salary = Sec 17(1) + 17(2) + 17(3)
  • std_deduction_cap_50k_old_regimeStandard deduction u/s 16(ia) ≤ ₹50,000 (old regime)
  • sec80d_self_family_cap_25k80D Self & Family ≤ ₹25,000 (non-senior)
  • sec80d_self_family_senior_cap_50k80D Self & Family Senior Citizen ≤ ₹50,000
  • sec80d_preventive_health_cap_5k80D preventive health check-up ≤ ₹5,000 combined
  • sec80g_cash_donation_2k_cap80G cash donation to single PAN ≤ ₹2,000 (Sec 80G(5D))
  • hra_80gg_mutexHRA (Sec 10(13A)) + 80GG are mutually exclusive
  • assessment_year_formatAssessmentYear: 4-digit format
  • total_income_identityTotal Income = max(0, Gross Total Income − Total Deductions)
  • agri_exempt_income_5k_capAgricultural exempt income ≤ ₹5,000 on ITR-1/4
  • sec80ccd1b_cap_50k80CCD(1B) NPS additional ≤ ₹50,000
  • sec80gg_cap_60k80GG ≤ ₹60,000 (₹5,000/month × 12)
  • itr4_44ad_44ada_44ae_mutexitr4 44ad 44ada 44ae mutex
  • mobile_format_checkmobile format check
  • pin_code_format_checkpin code format check
  • state_code_presentstate code present
Category B · defective-notice risk
  • aadhaar_pan_linkingAadhaar + Aadhaar–PAN linking per Circular 03/2023

Pass 2 · Full JSON-Schema validation (AJV)

Every field is validated against CBDT's draft-04 JSON Schema V1.0 for AY 2026-27 — type, pattern, enum, required, maxLength, range. Around 100s of constraints per form, treated as Category A (a violation here would fail at upload).

Compiled once per form-slug per process; subsequent downloads reuse the cache.

What we don't check