# coding=utf-8
import sys
import argparse
class YiLiao(object):
Max = 27786
Min = 5557
CompanyPercent = 0.10
PersonalPercent = 0.02
PersonalExtra = 3
class ShengYu(object):
Max = 27786
Min = 5557
CompanyPercent = 0.008
PersonalPercent = 0
PersonalExtra = 0
class GongJiJin(object):
Max = 27786
Min = 5557
CompanyPercent = 0.12
PersonalPercent = 0.12
PersonalExtra = 0
class YangLao(object):
Max = 23565
Min = 3613
CompanyPercent = 0.16
PersonalPercent = 0.08
PersonalExtra = 0
class ShiYe(object):
Max = 23565
Min = 3613
CompanyPercent = 0.008
PersonalPercent = 0.002
PersonalExtra = 0
class GongShang(object):
Max = 23565
Min = 4713
CompanyPercent = 0.02
PersonalPercent = 0
PersonalExtra = 0
def nianZhongGeShui(money):
levels = [
{
"min": 0,
"max": 3000,
"pc": 0.03,
"kc": 0,
}, {
"min": 3000,
"max": 12000,
"pc": 0.1,
"kc": 210,
}, {
"min": 12000,
"max": 25000,
"pc": 0.2,
"kc": 1410,
}, {
"min": 25000,
"max": 35000,
"pc": 0.25,
"kc": 2660,
}, {
"min": 35000,
"max": 55000,
"pc": 0.3,
"lc": 4410,
}, {
"min": 55000,
"max": 80000,
"pc": 0.35,
"kc": 7160,
}, {
"min": 80000,
"max": 100000000000,
"pc": 0.45,
"kc": 15160,
}
]
m = money / 12
pc = 0
kouchu = 0
for l in levels:
if m > l["min"] and m <= l["max"]:
pc = l["pc"]
kouchu = l["kc"]
shui = money * pc - kouchu
return shui
def geShui(money):
levels = [
{
"min": 0,
"max": 36000,
"pc": 0.03,
}, {
"min": 36000,
"max": 144000,
"pc": 0.1,
}, {
"min": 144000,
"max": 300000,
"pc": 0.2,
}, {
"min": 300000,
"max": 420000,
"pc": 0.25,
}, {
"min": 420000,
"max": 660000,
"pc": 0.3
}, {
"min": 660000,
"max": 960000,
"pc": 0.35
}, {
"min": 960000,
"max": 100000000000,
"pc": 0.45
}
]
shui = 0
for l in levels:
if money <= l["min"]:
break
if money > l["min"] and money <= l["max"]:
shui += (money - l["min"]) * l["pc"]
if money > l["max"]:
shui += (l["max"] - l["min"]) * l["pc"]
return shui
def monthly(monthlyIncome, begin, extra, sheBaoBase, gongJiJinBase):
print "*" * 50 + " 每月详情 " + "*" * 50
# 养老保险
yangLaoBase = max(min(YangLao.Max, monthlyIncome), YangLao.Min) if sheBaoBase == 0 else sheBaoBase
personalYangLao = yangLaoBase * YangLao.PersonalPercent + YangLao.PersonalExtra
companyYangLao = yangLaoBase * YangLao.CompanyPercent
# 工伤保险
gongShangBase = max(min(GongShang.Max, monthlyIncome), GongShang.Min) if sheBaoBase == 0 else sheBaoBase
personalGongShang = gongShangBase * GongShang.PersonalPercent + GongShang.PersonalExtra
companyGongShang = gongShangBase * GongShang.CompanyPercent
# 生育保险
shengYuBase = max(min(ShengYu.Max, monthlyIncome), ShengYu.Min) if sheBaoBase == 0 else sheBaoBase
personalShengYu = shengYuBase * ShengYu.PersonalPercent + ShengYu.PersonalExtra
companyShengYu = shengYuBase * ShengYu.CompanyPercent
# 失业保险
shiYeBase = max(min(ShiYe.Max, monthlyIncome), ShiYe.Min) if sheBaoBase == 0 else sheBaoBase
personalShiYe = shiYeBase * ShiYe.PersonalPercent + ShiYe.PersonalExtra
companyShiYe = shiYeBase * ShiYe.CompanyPercent
# 医疗保险
yiLiaoBase = max(min(YiLiao.Max, monthlyIncome), YiLiao.Min) if sheBaoBase == 0 else sheBaoBase
personalYiLiao = yiLiaoBase * YiLiao.PersonalPercent + YiLiao.PersonalExtra
companyYiLiao = yiLiaoBase * YiLiao.CompanyPercent
# 住房公积金
gongJiJinBase = max(min(GongJiJin.Max, monthlyIncome), GongJiJin.Min) if gongJiJinBase == 0 else gongJiJinBase
personalGongJiJin = gongJiJinBase * GongJiJin.PersonalPercent + GongJiJin.PersonalExtra
companyGongJiJin = gongJiJinBase * GongJiJin.CompanyPercent
totalShuiIncome = 0
totalShui = 0
shuiqian = monthlyIncome
shuiIncome = max(0, (
monthlyIncome - personalYangLao - personalGongShang - personalShengYu - personalShiYe - personalYiLiao - personalGongJiJin - extra - begin))
print "每月,养老(%.2lf + %.2lf)元, 医疗(%.2lf + %.2lf)元, 失业(%.2lf + %.2lf)元, 公积金(%.2lf + %.2lf) 元, 工伤(%.2lf + %.2lf)元, 生育(%.2lf + %.2lf)元\n应交税部分 %.2lf 元." % (
personalYangLao, companyYangLao, personalYiLiao, companyYiLiao, personalShiYe, companyShiYe, personalGongJiJin,
companyGongJiJin, personalGongShang, companyGongShang,
personalShengYu, companyShengYu,
shuiIncome)
yearIncome = 0
for m in range(1, 13):
totalShuiIncome += shuiIncome
geshui = geShui(totalShuiIncome) - totalShui
totalShui += geshui
realIncom = shuiqian - personalYangLao - personalGongShang - personalShengYu - personalShiYe - personalYiLiao - personalGongJiJin - geshui
print "%02d月, 个税 %7.2lf 元, 税后 %.2lf 元" % (m, geshui, realIncom)
yearIncome += realIncom
print "全年累计税后收入 %.2lf 元, 公积金 %.2lf 元" % (yearIncome, (personalGongJiJin + companyGongJiJin) * 12)
print "=" * 110 + "\n"
return yearIncome, (personalGongJiJin + companyGongJiJin) * 12, totalShui
def nz(monthlyFee, th):
print "*" * 50 + " 年终奖 " + "*" * 50
nianzhong = th * monthlyFee
nianZhongShui = nianZhongGeShui(nianzhong)
realNianzhong = nianzhong - nianZhongShui
print "%d 个月年终奖 %.2lf 元,个税 %.2lf 元,税后所得 %.2lf 元" % (th, nianzhong, nianZhongShui, realNianzhong)
print "=" * 110 + "\n"
return realNianzhong, nianZhongShui
if __name__ == '__main__':
begin = 5000 # 个税起征点
arg_parser = argparse.ArgumentParser()
arg_parser.add_argument('-m', '--monthlyIncome', default=10000, type=float, help="月薪")
arg_parser.add_argument('-c', '--cnt', default=3, help='年终奖/月薪', type=float)
arg_parser.add_argument('-e', '--extra', default=0, help='个税附加扣除', type=float)
arg_parser.add_argument('-s', '--sheBaoBase', default=0, help='社保基数', type=float)
arg_parser.add_argument('-g', '--gongJiJinBase', default=0, help='公积金基数', type=float)
args = arg_parser.parse_args(sys.argv[1:])
afterShuiIncome, gongjijin, totalShui = monthly(args.monthlyIncome, begin, args.extra, args.sheBaoBase,
args.gongJiJinBase)
realNianZhong, nianzhongShui = nz(args.monthlyIncome, args.cnt)
print "*" * 50 + " 汇总 " + "*" * 50
print "月薪 %.2lf 元, %d 薪\n" \
"税前年收入 %.2lf 元\n" \
"年度总个税 %.2lf 元\n" \
"年税后收入 %.2lf 元, 年终奖 %.2lf 元, 公积金可提取 %.2lf 元, 合计 %.2lf 元" % (
args.monthlyIncome,
(12 + args.cnt),
args.monthlyIncome * (12 + args.cnt),
totalShui + nianzhongShui,
afterShuiIncome,
realNianZhong,
gongjijin,
afterShuiIncome + realNianZhong + gongjijin
)
print "=" * 110 + "\n"
网友评论