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 AAAAA9999Asec80c_cap_150k80C + 80CCC + 80CCD(1) sum ≤ ₹1,50,000 (Sec 80CCE)sec80tta_cap_10k80TTA ≤ ₹10,000sec80ttb_cap_50k80TTB ≤ ₹50,000 (senior citizens only)sec80ee_cap_50k80EE ≤ ₹50,000sec80eea_cap_150k80EEA ≤ ₹1,50,000sec80eeb_cap_150k80EEB ≤ ₹1,50,000sec80ee_eea_mutexOnly one of 80EE / 80EEA can be claimeditr1_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 rowsverification_presentVerification block: AssesseeVerName requiredhp_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,000sec80d_preventive_health_cap_5k80D preventive health check-up ≤ ₹5,000 combinedsec80g_cash_donation_2k_cap80G cash donation to single PAN ≤ ₹2,000 (Sec 80G(5D))hra_80gg_mutexHRA (Sec 10(13A)) + 80GG are mutually exclusiveassessment_year_formatAssessmentYear: 4-digit formattotal_income_identityTotal Income = max(0, Gross Total Income − Total Deductions)agri_exempt_income_5k_capAgricultural exempt income ≤ ₹5,000 on ITR-1/4sec80ccd1b_cap_50k80CCD(1B) NPS additional ≤ ₹50,000sec80gg_cap_60k80GG ≤ ₹60,000 (₹5,000/month × 12)mobile_format_checkmobile format checkpin_code_format_checkpin code format checkstate_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 AAAAA9999Asec80c_cap_150k80C + 80CCC + 80CCD(1) sum ≤ ₹1,50,000 (Sec 80CCE)sec80tta_cap_10k80TTA ≤ ₹10,000sec80ttb_cap_50k80TTB ≤ ₹50,000 (senior citizens only)sec80ee_cap_50k80EE ≤ ₹50,000sec80eea_cap_150k80EEA ≤ ₹1,50,000sec80eeb_cap_150k80EEB ≤ ₹1,50,000sec80ee_eea_mutexOnly one of 80EE / 80EEA can be claimedsched_tds1_totalTDS-on-salary total = sum of per-employer rowsverification_presentVerification block: AssesseeVerName requiredhp_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,000sec80d_preventive_health_cap_5k80D preventive health check-up ≤ ₹5,000 combinedsec80g_cash_donation_2k_cap80G cash donation to single PAN ≤ ₹2,000 (Sec 80G(5D))hra_80gg_mutexHRA (Sec 10(13A)) + 80GG are mutually exclusiveassessment_year_formatAssessmentYear: 4-digit formattotal_income_identityTotal Income = max(0, Gross Total Income − Total Deductions)sec80ccd1b_cap_50k80CCD(1B) NPS additional ≤ ₹50,000sec80gg_cap_60k80GG ≤ ₹60,000 (₹5,000/month × 12)mobile_format_checkmobile format checkpin_code_format_checkpin code format checkstate_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 AAAAA9999Asec80c_cap_150k80C + 80CCC + 80CCD(1) sum ≤ ₹1,50,000 (Sec 80CCE)sec80tta_cap_10k80TTA ≤ ₹10,000sec80ttb_cap_50k80TTB ≤ ₹50,000 (senior citizens only)sec80ee_cap_50k80EE ≤ ₹50,000sec80eea_cap_150k80EEA ≤ ₹1,50,000sec80eeb_cap_150k80EEB ≤ ₹1,50,000sec80ee_eea_mutexOnly one of 80EE / 80EEA can be claimedsched_tds1_totalTDS-on-salary total = sum of per-employer rowsverification_presentVerification block: AssesseeVerName requiredhp_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,000sec80d_preventive_health_cap_5k80D preventive health check-up ≤ ₹5,000 combinedsec80g_cash_donation_2k_cap80G cash donation to single PAN ≤ ₹2,000 (Sec 80G(5D))hra_80gg_mutexHRA (Sec 10(13A)) + 80GG are mutually exclusiveassessment_year_formatAssessmentYear: 4-digit formattotal_income_identityTotal Income = max(0, Gross Total Income − Total Deductions)sec80ccd1b_cap_50k80CCD(1B) NPS additional ≤ ₹50,000sec80gg_cap_60k80GG ≤ ₹60,000 (₹5,000/month × 12)mobile_format_checkmobile format checkpin_code_format_checkpin code format checkstate_code_presentstate code present
Category B · defective-notice risk
aadhaar_pan_linkingAadhaar + Aadhaar–PAN linking per Circular 03/2023itr3_audit_threshold_turnoverTurnover > ₹10 cr → Sec 44AB audit (Form 3CA/3CB-3CD)itr3_bs_pl_required_when_booksitr3 bs pl required when booksitr3_bs_balance_checkitr3 bs balance checkagm_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 AAAAA9999Asec80c_cap_150k80C + 80CCC + 80CCD(1) sum ≤ ₹1,50,000 (Sec 80CCE)sec80tta_cap_10k80TTA ≤ ₹10,000sec80ttb_cap_50k80TTB ≤ ₹50,000 (senior citizens only)sec80ee_cap_50k80EE ≤ ₹50,000sec80eea_cap_150k80EEA ≤ ₹1,50,000sec80eeb_cap_150k80EEB ≤ ₹1,50,000sec80ee_eea_mutexOnly one of 80EE / 80EEA can be claimeditr4_44ad_turnover_capSec 44AD turnover ≤ ₹3 crsched_tds1_totalTDS-on-salary total = sum of per-employer rowsverification_presentVerification block: AssesseeVerName requiredhp_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,000sec80d_preventive_health_cap_5k80D preventive health check-up ≤ ₹5,000 combinedsec80g_cash_donation_2k_cap80G cash donation to single PAN ≤ ₹2,000 (Sec 80G(5D))hra_80gg_mutexHRA (Sec 10(13A)) + 80GG are mutually exclusiveassessment_year_formatAssessmentYear: 4-digit formattotal_income_identityTotal Income = max(0, Gross Total Income − Total Deductions)agri_exempt_income_5k_capAgricultural exempt income ≤ ₹5,000 on ITR-1/4sec80ccd1b_cap_50k80CCD(1B) NPS additional ≤ ₹50,000sec80gg_cap_60k80GG ≤ ₹60,000 (₹5,000/month × 12)itr4_44ad_44ada_44ae_mutexitr4 44ad 44ada 44ae mutexmobile_format_checkmobile format checkpin_code_format_checkpin code format checkstate_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).
- Type — string / integer / boolean / array / object per the schema declaration.
- Pattern — PAN
AAAAA9999A, BSR3 digits + 4 alphanumeric, CIN, etc. - Required — every
required: […]on every nested object. - Enum — closed-set fields (FilingSection, ResidentialStatus, Status, ReturnFileSec…).
- Range / length —
minimum / maximum / minLength / maxLengthon every numeric + string. - Format — date-only fields validated as YYYY-MM-DD; email format on EmailAddress.
Compiled once per form-slug per process; subsequent downloads reuse the cache.
What we don't check
- Form-specific business rules CBDT doesn't express in the schema — we cover the most-frequent ones from the Validation Rules PDFs (above), but several hundred more are queued for incremental addition. Genius / the offline utility catches these too at file time.
- Tax computation — slab rates, surcharge, rebate u/s 87A, AMT, MAT. Filed in the offline utility / Genius which has the working tax engine.
- Cross-form rules (26AS reconciliation, Form 16 vs salary). Coming via the embedded Finacra integration where the data feeds are connected.