2019五险一金及年终奖扣税

#!/usr/bin/python
# -*- coding: utf-8 -*-

"""

@file: calculate.py
@author: xiaoxiao
@date: 2019-01-05 12:30:32

"""


class Calculate(object):

    def __init__(self, high_limit, tax_base, tax_3, tax_10, tax_20, tax_25, tax_30, tax_35):
        self.high_limit = high_limit # 五险一金最高缴费标准
        # 最低标准
        self.low_accumulation_fund = 2273 # 住房公积金最低缴费标准
        self.low_endowment_insurance = 3387 # 养老保险最低缴费标准
        self.low_unemployment_insurance = 3387 # 失业保险最低缴费标准
        self.low_injury_insurance = 5080 # 工伤保险最低缴费标准
        self.low_maternity_insurance = 5080 # 生育保险最低缴费标准
        self.low_medical_insurance = 5080 # 医疗保险最低缴费标准
        self.tax_base = tax_base
        self.tax_3 = tax_3
        self.tax_10 = tax_10
        self.tax_20 = tax_20
        self.tax_25 = tax_25
        self.tax_30 = tax_30
        self.tax_35 = tax_35

    # **********  公积金  ********** #
    # 计算住房公积金个人缴纳:12%
    def calculate_personal_accumulation_fund(self, n):
        if n < self.low_accumulation_fund:
            return self.low_accumulation_fund * 0.12
        elif n < self.high_limit:
            return n * 0.12
        else:
            return self.high_limit * 0.12

    # 计算公积金单位缴纳:12%
    def calculate_unit_accumulation_fund(self, n):
        if n < self.low_accumulation_fund:
            return self.low_accumulation_fund * 0.12
        elif n < self.high_limit:
            return n * 0.12
        else:
            return self.high_limit * 0.12

    # **********  养老保险  ********** #
    # 计算养老保险个人缴纳:8%
    def calculate_personal_endowment_insurance(self, n):
        if n < self.low_endowment_insurance:
            return self.low_endowment_insurance * 0.08
        elif n < self.high_limit:
            return n * 0.08
        else:
            return self.high_limit * 0.08

    # 计算养老保险单位缴纳:19%
    def calculate_unit_endowment_insurance(self, n):
        if n < self.low_endowment_insurance:
            return self.low_endowment_insurance * 0.19
        elif n < self.high_limit:
            return n * 0.19
        else:
            return self.high_limit * 0.19

    # **********  失业保险  ********** #
    # 计算失业保险个人缴纳:0.0%
    def calculate_personal_unemployment_insurance(self, n):
        if n < self.low_unemployment_insurance:
            return self.low_unemployment_insurance * 0.00
        elif n < self.high_limit:
            return n * 0.00
        else:
            return self.high_limit * 0.00

    # 计算失业保险单位缴纳:0.8%
    def calculate_unit_unemployment_insurance(self, n):
        if n < self.low_unemployment_insurance:
            return self.low_unemployment_insurance * 0.008
        elif n < self.high_limit:
            return n * 0.008
        else:
            return self.high_limit * 0.008

    # **********  工伤保险  ********** #
    # 计算工伤保险个人缴纳:0.0%
    def calculate_personal_injury_insurance(self, n):
        if n < self.low_injury_insurance:
            return self.low_injury_insurance * 0.00
        elif n < self.high_limit:
            return n * 0.00
        else:
            return self.high_limit * 0.00

    # 计算工伤保险单位缴纳:0.4%
    def calculate_unit_injury_insurance(self, n):
        if n < self.low_injury_insurance:
            return self.low_injury_insurance * 0.004
        elif n < self.high_limit:
            return n * 0.004
        else:
            return self.high_limit * 0.004

    # **********  生育保险  ********** #
    # 计算生育保险个人缴纳:0.0%
    def calculate_personal_maternity_insurance(self, n):
        if n < self.low_maternity_insurance:
            return self.low_maternity_insurance * 0.00
        elif n < self.high_limit:
            return n * 0.00
        else:
            return self.high_limit * 0.00

    # 计算生育保险单位缴纳:0.4%
    def calculate_unit_maternity_insurance(self, n):
        if n < self.low_maternity_insurance:
            return self.low_maternity_insurance * 0.004
        elif n < self.high_limit:
            return n * 0.004
        else:
            return self.high_limit * 0.004

    # **********  医疗保险  ********** #
    # 计算医疗保险个人缴纳:2%+3
    def calculate_personal_medical_insurance(self, n):
        if n < self.low_medical_insurance:
            return self.low_medical_insurance * 0.02 + 3
        elif n < self.high_limit and n >= 3:
            return n * 0.02 + 3
        elif n > self.high_limit:
            return self.high_limit * 0.02 + 3
        else:
            return 0.00

    # 计算医疗保险单位缴纳:10%
    def calculate_unit_medical_insurance(self, n):
        if n < self.low_medical_insurance:
            return self.low_medical_insurance * 0.10
        elif n < self.high_limit:
            return n * 0.10
        else:
            return self.high_limit * 0.10

    # **********  个人所得税  ********** #
    def calculate_personal_income_tax(self, m):
        m = m - self.tax_base
        if m <= 0:
            return 0
        elif m < self.tax_3:
            return m * 0.03
        elif m < self.tax_10:
            return m * 0.10 - self.tax_3 * 0.07
        elif m < self.tax_20:
            return m * 0.20 - self.tax_10 * 0.1 - self.tax_3 * 0.07
        elif m < self.tax_25:
            return m * 0.25 - self.tax_20 * 0.05 - self.tax_10 * 0.1 - self.tax_3 * 0.07
        elif m < self.tax_30:
            return m * 0.30 - self.tax_25 * 0.05 - self.tax_20 * 0.05 - self.tax_10 * 0.1 - self.tax_3 * 0.07
        elif m < self.tax_35:
            return m * 0.35 - self.tax_30 * 0.05 - self.tax_25 * 0.05 - self.tax_20 * 0.05 - self.tax_10 * 0.1 - self.tax_3 * 0.07
        else:
            return m * 0.45 - self.tax_35 * 0.1 - self.tax_30 * 0.05 - self.tax_25 * 0.05 - self.tax_20 * 0.05 - self.tax_10 * 0.1 - self.tax_3 * 0.07

# 计算年终奖扣税
    def calculate_year_award_tax(self, salary, year_award):
        tax = 0.0
        base_salary = 5000
        # 如果年终奖减去最低扣税基数与基本工资的差额小于0,则不用扣税
        if year_award - base_salary + salary <= 0:
            return tax
        if salary > base_salary:
            if year_award / 12 < 3000:
                tax = year_award * 0.03 - 0
            elif year_award / 12 < 12000:
                tax = year_award * 0.10 - 210
            elif year_award /12 < 25000:
                tax = year_award * 0.20 - 1410
            elif year_award / 12 < 35000:
                tax = year_award * 0.25 - 2660
            elif year_award / 12 < 55000:
                tax = year_award * 0.30 - 4410
            elif year_award / 12 < 80000:
                tax = year_award * 0.35 - 7160
            elif year_award > 80000:
                tax = year_award * .045 - 15160
            else:
                print ("Input year_award = %s" % year_award)
        else:
            if year_award / 12 < 1500:
                tax = (year_award - base_salary + salary) * 0.03 - 0
            elif year_award / 12 < 4500:
                tax = (year_award - base_salary + salary) * 0.10 - 105
            elif year_award /12 < 9000:
                tax = (year_award - base_salary + salary) * 0.20 - 555
            elif year_award / 12 < 35000:
                tax = (year_award - base_salary + salary) * 0.25 - 1005
            elif year_award / 12 < 55000:
                tax = (year_award - base_salary + salary) * 0.30 - 2755
            elif year_award / 12 < 80000:
                tax = (year_award - base_salary + salary) * 0.35 - 5505
            elif year_award > 80000:
                tax = (year_award - base_salary + salary) * .045 - 80000
            else:
                print ("Input year_award = %s" % year_award)
        return tax

salary = input('\n请输入工资数:')
if salary:
    salary = int(salary)
else:
    salary = 0

# 其它补贴
allowance = input('其它补贴:')
if allowance:
    allowance = int(allowance)
else:
    allowance = 0

# 抵扣税款
reduce_tax = input('专项附加扣除总和:')
if reduce_tax:
    reduce_tax = int(reduce_tax)
else:
    reduce_tax = 0

year_award = input('年终奖:')
if year_award:
    year_award = int(year_award)
else:
    year_award = 0

calculation = Calculate(25401, 5000, 3000, 12000, 25000, 35000, 55000, 80000)

# *****  公积金  ****** #
calculate_personal_accumulation_fund = calculation.calculate_personal_accumulation_fund(salary)
calculate_unit_accumulation_fund = calculation.calculate_unit_accumulation_fund(salary)

# *****  养老保险  ***** #
calculate_personal_endowment_insurance = calculation.calculate_personal_endowment_insurance(salary)
calculate_unit_endowment_insurance = calculation.calculate_unit_endowment_insurance(salary)

# *****  失业保险  ***** #
calculate_personal_unemployment_insurance = calculation.calculate_personal_unemployment_insurance(salary)
calculate_unit_unemployment_insurance = calculation.calculate_unit_unemployment_insurance(salary)

# *****  工伤保险  ***** #
calculate_personal_injury_insurance = calculation.calculate_personal_injury_insurance(salary)
calculate_unit_injury_insurance = calculation.calculate_unit_injury_insurance(salary)

# *****  生育保险  ***** #
calculate_personal_maternity_insurance = calculation.calculate_personal_maternity_insurance(salary)
calculate_unit_maternity_insurance = calculation.calculate_unit_maternity_insurance(salary)

# *****  医疗保险  ***** #
calculate_personal_medical_insurance = calculation.calculate_personal_medical_insurance(salary)
calculate_unit_medical_insurance = calculation.calculate_unit_medical_insurance(salary)

print('\n公积金:【个人:%.2f】【单位:%.2f】' % (calculate_personal_accumulation_fund, calculate_unit_accumulation_fund))
print('养老保险:【个人:%.2f】【单位:%.2f】' % (calculate_personal_endowment_insurance, calculate_unit_endowment_insurance))
print('失业保险:【个人:%.2f】【单位:%.2f】' % (calculate_personal_unemployment_insurance, calculate_unit_unemployment_insurance))
print('工伤保险:【个人:%.2f】【单位:%.2f】' % (calculate_personal_injury_insurance, calculate_unit_injury_insurance))
print('生育保险:【个人:%.2f】【单位:%.2f】' % (calculate_personal_maternity_insurance, calculate_unit_maternity_insurance))
print('医疗保险:【个人:%.2f】【单位:%.2f】' % (calculate_personal_medical_insurance, calculate_unit_medical_insurance))
personal_all = calculate_personal_accumulation_fund + calculate_personal_endowment_insurance + calculate_personal_unemployment_insurance + calculate_personal_injury_insurance + calculate_personal_maternity_insurance + calculate_personal_medical_insurance
unit_all = calculate_unit_accumulation_fund + calculate_unit_endowment_insurance + calculate_unit_endowment_insurance + calculate_unit_injury_insurance + calculate_unit_maternity_insurance + calculate_unit_medical_insurance
# print('五险一金总共缴纳:【个人:%.2f】【单位:%.2f】\n' % (personal_all, unit_all))

# *****  税前应发工资  ***** #
total_pay_amount = salary - personal_all + allowance

# print("1.老版纳税税级距:3500[base]-1500[3%]-4500[10%]-9000[20%]-35000[25%]-55000[30%]-80000[35%]-above[45%]")
# print("2.新版纳税税级距:5000[base]-3000[3%]-12000[10%]-25000[20%]-35000[25%]-55000[30%]-80000[35%]-above[45%]")

# *****  缴纳的个人所得税  ***** #
personal_tax = calculation.calculate_personal_income_tax(total_pay_amount)
reduce_personal_tax = calculation.calculate_personal_income_tax(total_pay_amount - reduce_tax)
reduce_final_paying_amount = total_pay_amount - reduce_personal_tax
year_award_tax = calculation.calculate_year_award_tax(salary, year_award)
year_salary = reduce_final_paying_amount + year_award - year_award_tax

print('\n月薪:【%.2f】' % salary)
print('五险一金总共缴纳:【个人:%.2f】【单位:%.2f】' % (personal_all, unit_all))
print('扣除五险一金后,应发薪水:【%.2f】' % total_pay_amount)
print('个人所得扣税:【%.2f】' % reduce_personal_tax)
print('实发薪水:【%.2f】\n' % year_salary)

print('年终奖:【%.2f】' % year_award)
print('年终奖扣税:【%.2f】' % year_award_tax)
print('年终那个月最终工资所得:【%.2f】\n' % year_salary)

计算结果:
在这里插入图片描述
从上图中,我们可以看到,月薪10000元,在扣完个人五险一金2203元后,最后扣税83.91元。

在这里插入图片描述
如果我们加上一个1500元的租房抵扣个税,最后缴纳个税仅38.91元。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值