Download .ipynb

Comparing the old and new tax regimes


New-Vs-Old-Income-Tax-Slab.png

Old Tax Regime

  • Standard deduction of 50,000/-
  • Deductions under 80C are assumed to be fully utilised i.e, 1,50,000/-
  • Employee's self-contribution towards NPS under 80CCD(1B) of 50,000/-
  • Employer's contributions towards NPS is assumed to be zero, however can be given as a parameter to the function old_tax_regime(gross_income,employer_pf,employer_nps)
  • HRA, LTA and other exemptions are not considered

PF contribution by the employer is assumed to be 12% of the gross income, however can be changed in the function's parameters

Conclusion: The old tax regime seems to be beneficial assuming that you avail all the main deductions possible

In [1]:
def old_tax_regime(gross_income,employer_pf,employer_nps):
  income = (gross_income-employer_pf)/1e5 #income in lakhs

  #Standard deduction : 50k
  income += -0.5
  #80C deductions : 1.5lac
  income += -1.5
  #80CCD(1b) : NPS self-contribution : 50k
  income += -0.5
  #80CCD(2) : Employer NPS contribution : max 10% of gross_income
  income += -employer_nps/1e5

  tax = 0
  if income>10 :
    tax = 0.05*2.5 + 0.2*5 + 0.3*(income-10)
  elif income>5:
    tax = 0.05*2.5 + 0.2*(income-5)
  elif income>2.5:
    tax = 0.05*(income-2.5)

  return tax

def new_tax_regime(gross_income,employer_pf,employer_nps):
  income = (gross_income-employer_pf)/1e5 #income in lakhs

  #80CCD(2) : Employer NPS contribution : max 10% of gross_income
  income += -employer_nps/1e5

  tax = 0
  if income>15 :
    tax = (0.05+0.1+0.15+0.2+0.25)*2.5 + 0.3*(income-15)
  elif income>12.5:
    tax = (0.05+0.1+0.15+0.2)*2.5 + 0.25*(income-12.5)
  elif income>10:
    tax = (0.05+0.1+0.15)*2.5 + 0.2*(income-10)
  elif income>7.5:
    tax = (0.05+0.1)*2.5 + 0.15*(income-7.5)
  elif income>5:
    tax = 0.05*2.5 + 0.1*(income-5)
  elif income>2.5:
    tax = 0.05*(income-2.5)

  return tax
In [2]:
incomes = [9e5,10e5,11e5,12e5,13e5,14e5,15e5,16e5,17e5,18e5,19e5]
for i in incomes:
  old = int(1e5*(old_tax_regime(i,0.12*i,0)))
  new = int(1e5*(new_tax_regime(i,0.12*i,0)))
  print("%d lakhs gross -- old: %d -- new: %d"%(i/1e5,old,new))
9 lakhs gross -- old: 20900 -- new: 43800
10 lakhs gross -- old: 38500 -- new: 57000
11 lakhs gross -- old: 56099 -- new: 70200
12 lakhs gross -- old: 73700 -- new: 86200
13 lakhs gross -- old: 91299 -- new: 103800
14 lakhs gross -- old: 108900 -- new: 121400
15 lakhs gross -- old: 133499 -- new: 142499
16 lakhs gross -- old: 159900 -- new: 164500
17 lakhs gross -- old: 186300 -- new: 186500
18 lakhs gross -- old: 212699 -- new: 212699
19 lakhs gross -- old: 239099 -- new: 239099