求职的时候,经常被问到期望薪资如何,收到多个offer,也要进行薪资和福利的对比,尤其是税后收入和公积金。可是自从个税改革后,个税计算变得非常繁琐,也没有发现很好的网页,于是自己写了一个python脚本,感觉还不错,充分考虑了每个月的个税,税后收入,以及公积金和医保入账情况。
尤其是如果两个offer税前看似接近,但是社保和公积金基数,公积金比例差别不小,那么对实际税后收益影响就很大,这就是抉择的重要依据,也是往往很难算得清。依我看,税后收入+公积金是最重要的标准,另外医保个人账户收入,也不可忽视。其他的,比如餐补车补旅游啊等等福利,这里就照顾不到了,可以算进月薪里面算。
#第n月的税后收入,公积金收入,医保收入等
def total_benf(n,salary,shebao,yibao,gongjijin,gjj_rate,append): #参数为第N月,月薪,社保基数,医保基数,公积金基数,公积金比例,附加扣除
after_tax=salary-shebao*0.08-yibao*0.02-gongjijin*gjj_rate-11-gettax(n,salary,shebao,yibao,gongjijin,gjj_rate,append)
return after_tax,gongjijin*gjj_rate*2,yibao*0.05,shebao*0.08
#年终奖个税
def getbonustax(bonus):
tax_income=bonus
if(tax_income<36000):
rate=0.03
sukou=0
elif(tax_income>=36000 and tax_income<144000):
rate=0.1
sukou=2520
elif(tax_income>=144000 and tax_income<300000):
rate=0.2
sukou=16920
elif(tax_income>=300000 and tax_income<420000):
rate=0.25
sukou=31920
elif(tax_income>=420000 and tax_income<660000):
rate=0.3
sukou=52920
elif(tax_income>=660000 and tax_income<960000):
rate=0.35
sukou=85920
else:
rate=0.45
sukou=181920
return tax_income*rate-sukou
#第n月的个税 参数为第N月,月薪,社保基数,医保基数,公积金基数,公积金比例,附加扣除
def gettax(n,salary,shebao,yibao,gongjijin,gjj_rate,append):
if(n==1): #第一个月的算法
tax_income=salary-shebao*0.08-yibao*0.02-gongjijin*gjj_rate-11-5000-append
if(tax_income<=0):
rate=0
sukou=0
elif(tax_income<36000):
rate=0.03
sukou=0
elif(tax_income>=36000 and tax_income<144000):
rate=0.1
sukou=2520
elif(tax_income>=144000 and tax_income<300000):
rate=0.2
sukou=16920
elif(tax_income>=300000 and tax_income<420000):
rate=0.25
sukou=31920
elif(tax_income>=420000 and tax_income<660000):
rate=0.3
sukou=52920
elif(tax_income>=660000 and tax_income<960000):
rate=0.35
sukou=85920
else:
rate=0.45
sukou=181920
return tax_income*rate-sukou
else: #各月累计的算法
tax_income=salary-shebao*(0.08+0.02)-gongjijin*0.05-11-5000-append #5000就是免征额
tax_income=tax_income*n #前n月总收入
if(tax_income<=0):
rate=0
sukou=0
elif(tax_income<36000):
rate=0.03
sukou=0
elif(tax_income>=36000 and tax_income<144000):
rate=0.1
sukou=2520
elif(tax_income>=144000 and tax_income<300000):
rate=0.2
sukou=16920
elif(tax_income>=300000 and tax_income<420000):
rate=0.25
sukou=31920
elif(tax_income>=420000 and tax_income<660000):
rate=0.3
sukou=52920
elif(tax_income>=660000 and tax_income<960000):
rate=0.35
sukou=85920
else:
rate=0.45
sukou=181920
res=tax_income*rate-sukou
for i in range(1,n): #还要减去之前每个月的扣税
res=res-gettax(i,salary,shebao,yibao,gongjijin,gjj_rate,append)
return res
#统计全年的个税和各种收入 参数为月薪,社保基数,医保基数,公积金基数,公积金比例,附加扣除
def calc_total(salary,bonus,shebao,yibao,gongjijin,gjj_rate,append=1000):
n=12 #一年12个月
tax_sum=0
after_taxsum=0
gjj_sum=0
yibao_sum=0
yanglao_sum=0
print('方案:月薪{},年奖金{},社保基数{},医保基数{},公积金基数{},公积金比例{}\n'.format(salary,bonus,shebao,yibao,gongjijin,gjj_rate))
for i in range(1,n+1):
tax=gettax(i,salary,shebao,yibao,gongjijin,gjj_rate,append)
tax_sum+=tax
print("第{}月的个税为{}".format(i,round(tax)),end="\t")
month_res=total_benf(i,salary,shebao,yibao,gongjijin,gjj_rate,append)
after_tax=month_res[0]
after_taxsum+=after_tax
print("税后收入为{}".format(round(after_tax,1)),end=" ")
gjj=month_res[1]
gjj_sum+=gjj
print("公积金入账为{}".format(gjj),end=" ")
print("税后加公积金为{}".format(round(after_tax+gjj,0)),end="\t")
yanglao=month_res[3]
yanglao_sum+=yanglao
print("养老入账为{}".format(round(yanglao)),end=" ")
yiliao=month_res[2]
yibao_sum+=yiliao
print("医保入账为{}".format(round(yiliao)))
bonus_tax=getbonustax(bonus)
bonus_income=bonus-bonus_tax #年终奖减去个税
print('年终奖个税为{}'.format(round(bonus_tax)),end="\t")
print('税后收入为{}\n'.format(bonus_income))
tax_sum+=bonus_tax
after_taxsum+=bonus_income
print('累计年度个税为{}'.format(round(tax_sum)),end="\t")
print('税后收入为{}'.format(round(after_taxsum)),end=" ")
print('公积金入账为{}'.format(round(gjj_sum,1)),end=" ")
print('税后加公积金为{}'.format(round(after_taxsum+gjj_sum)),end="\t")
print('养老入账为{}'.format(round(yanglao_sum)),end=" ")
print('医保入账为{}'.format(round(yibao_sum)))
print('-------------------\t-----------------------------------------------------------\t-----------------------------')
calc_total(salary=11000,bonus=8000,shebao=2000,yibao=2000,gongjijin=2000,gjj_rate=0.05)
calc_total(salary=22000,bonus=60000,shebao=22000,yibao=22000,gongjijin=22000,gjj_rate=0.05)
calc_total(salary=23000+16*22,bonus=60000,shebao=8400,yibao=8400,gongjijin=15200,gjj_rate=0.05,append=2000)
#salary 月薪+月补贴
#bonus 年终奖金
#shebao 养老保险基数
#yibao 医疗保险基数
#gongjijin 公积金基数
#gjj_rate 公积金比例
#append 附加扣除 默认1000
效果如下 排列非常整齐,美观

本文介绍了一个Python脚本,用于计算税后收入、公积金和个人医保账户收入等。通过输入月薪、年终奖和社会保险基数等参数,该脚本能帮助比较不同工作offer的实际收益。

被折叠的 条评论
为什么被折叠?



