美文网首页
个税计算器

个税计算器

作者: 卷毛爱胖丁 | 来源:发表于2019-12-28 11:21 被阅读0次
    # 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"
    
    

    相关文章

      网友评论

          本文标题:个税计算器

          本文链接:https://www.haomeiwen.com/subject/dhqsoctx.html