摘自水木论坛
# coding:utf-8
# 个税起征点
startTax = 5000
def getNumberBeforeTax(month):
# 计算当月及累计到当月的专项扣除的金额
decreaseTaxYear = 0
for i in range(1, month+1):
decreaseTaxNumber = 0
for key in specialTax.keys():
#print key, specialTax.get(key)
specialTaxMonth = 0
if specialTax.get(key)[1]<=i<=specialTax.get(key)[2]:
specialTaxMonth = specialTax.get(key)[0]
decreaseTaxNumber += specialTaxMonth
decreaseTaxYear += decreaseTaxNumber
return decreaseTaxYear, decreaseTaxNumber
def getSalaryBeforeTax(month):
# 计算当月月薪,累计到当月的年薪以及累积到当月的应税收入
for i in range(1, month+1):
salaryBaseMonth = 0
salaryBaseYear = 0
salaryTaxYear = 0
for key in salaryBase.keys():
if salaryBase.get(key)[1]<=month<=salaryBase.get(key)[2]:
salaryBaseMonth = salaryBase.get(key)[0]
salaryTaxYear += countBaseForTax(salaryBaseMonth)*i
salaryBaseYear += salaryBase.get(key)[0]*(i-salaryBase.get(key)[1]+1)
elif i>salaryBase.get(key)[2]:
salaryBaseYear += salaryBase.get(key)[0]*(salaryBase.get(key)[2]-salaryBase.get(key)[1]+1)
return salaryBaseMonth, salaryBaseYear, salaryTaxYear
def countBaseForTax(salaryMoney):
# 根据月薪计算当月应税额
if salaryMoney<=25401:
return salaryMoney-salaryMoney*0.222-3
else:
return salaryMoney-25401*0.222-3
def countTax(moneyCount):
# 计算个税额
if moneyCount <= 36000:
return 0.03*moneyCount
elif 36000 < moneyCount <= 144000:
return 0.1*moneyCount-2520
elif 144000 < moneyCount <= 300000:
return 0.2*moneyCount-16920
elif 300000 < moneyCount <= 420000:
return 0.25*moneyCount-31920
elif 420000 < moneyCount <= 660000:
return 0.3*moneyCount-52920
elif 660000 < moneyCount <= 960000:
return 0.35*moneyCount-85920
else:
return 0.45*moneyCount-181920
def countTT():
print "-"*25
#print "月份 ", '{0:^22}'.format("本月纳税额 "), '{0:^40}'.format("年度纳税额")
print "月份 ", "本月纳税额 ", "年度纳税额"
print "-"*25
print "-"*25
taxForThisYear = 0
for i in range(1,13):
moneyForTaxEach = getSalaryBeforeTax(i)[2]- getNumberBeforeTax(i)[0] - startTax*i
taxForThisMonth = countTax(moneyForTaxEach)
print '{0:<4}'.format(i), '{0:>8}'.format(round(taxForThisMonth-taxForThisYear,1)), '{0:>12}'.format(round(taxForThisMonth,1))
taxForThisYear += taxForThisMonth-taxForThisYear
if __name__ == "__main__":
# 专项扣除及起始月份,如某项无扣除,该项金额设置为0即可
specialTax = {"childTaxCount" :(1000,1,12), # 子女
"houseFunding" :(1000,1,12), # 房贷
"parentTax" :(2000,1,12), # 赡养父母
"houseRental" :(0,1,12), # 房租
"education" :(0,1,12)} #继续教育
# 月薪及起始月份
salaryBase = {"salaryPhase1":(30000,1,2),
"salaryPhase2":(33000,3,12)}
# 计算每月因纳税额以及年底累计纳税额
countTT()