2019新舊版五險一金和年終獎對比

代碼如下:

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

"""

@file: calculate.py
@author: xiaoxiao
@date: 2018-07-07 17:30:32

"""


class Calculate(object):

    def __init__(self, base_limit, tax_base, tax_3, tax_10, tax_20, tax_25, tax_30, tax_35):
        self.base_limit = base_limit
        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.base_limit:
            return n * 0.12
        else:
            return self.base_limit * 0.12

    # 計算公積金單位繳納:12%
    def calculate_unit_accumulation_fund(self, n):
        if n < self.base_limit:
            return n * 0.12
        else:
            return self.base_limit * 0.12

    # **********  養老保險  ********** #
    # 計算養老保險個人繳納:8%
    def calculate_personal_endowment_insurance(self, n):
        if n < self.base_limit:
            return n * 0.08
        else:
            return self.base_limit * 0.08

    # 計算養老保險單位繳納:19%
    def calculate_unit_endowment_insurance(self, n):
        if n < self.base_limit:
            return n * 0.19
        else:
            return self.base_limit * 0.19

    # **********  失業保險  ********** #
    # 計算失業保險個人繳納:0.0%
    def calculate_personal_unemployment_insurance(self, n):
        if n < self.base_limit:
            return n * 0.00
        else:
            return self.base_limit * 0.00

    # 計算失業保險單位繳納:0.8%
    def calculate_unit_unemployment_insurance(self, n):
        if n < self.base_limit:
            return n * 0.008
        else:
            return self.base_limit * 0.008

    # **********  工傷保險  ********** #
    # 計算工傷保險個人繳納:0.0%
    def calculate_personal_injury_insurance(self, n):
        if n < self.base_limit:
            return n * 0.00
        else:
            return self.base_limit * 0.00

    # 計算工傷保險單位繳納:0.4%
    def calculate_unit_injury_insurance(self, n):
        if n < self.base_limit:
            return n * 0.004
        else:
            return self.base_limit * 0.004

    # **********  生育保險  ********** #
    # 計算生育保險個人繳納:0.0%
    def calculate_personal_maternity_insurance(self, n):
        if n < self.base_limit:
            return n * 0.00
        else:
            return self.base_limit * 0.

    # 計算生育保險單位繳納:0.4%
    def calculate_unit_maternity_insurance(self, n):
        if n < self.base_limit:
            return n * 0.004
        else:
            return self.base_limit * 0.004

    # **********  醫療保險  ********** #
    # 計算醫療保險個人繳納:2%+3
    def calculate_personal_medical_insurance(self, n):
        if n < self.base_limit and n >= 3:
            return n * 0.02 + 3
        elif n > self.base_limit:
            return self.base_limit * 0.02 + 3
        else:
            return 0.00

    # 計算醫療保險單位繳納:10%
    def calculate_unit_medical_insurance(self, n):
        if n < self.base_limit:
            return n * 0.10
        else:
            return self.base_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_old(self, salary, year_award):
        tax = 0.0
        base_salary = 3500
        # 如果年終獎減去最低扣稅基數與基本工資的差額小於0,則不用扣稅
        if year_award - base_salary + salary <= 0:
            return tax
        if salary > base_salary:
            if year_award / 12 < 1500:
                tax = year_award * 0.03 - 0
            elif year_award / 12 < 4500:
                tax = year_award * 0.10 - 105
            elif year_award /12 < 9000:
                tax = year_award * 0.20 - 555
            elif year_award / 12 < 35000:
                tax = year_award * 0.25 - 1005
            elif year_award / 12 < 55000:
                tax = year_award * 0.30 - 2755
            elif year_award / 12 < 80000:
                tax = year_award * 0.35 - 5505
            elif year_award > 80000:
                tax = year_award * .045 - 80000
            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 - 13505
            else:
                print ("Input year_award = %s" % year_award)
        return tax

# 計算新版年終獎扣稅
    def calculate_year_award_tax_new(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('請輸入工資數:')
if salary:
    salary = int(salary)
else:
    salary = 0

# 其它補貼
allowance = input('其它補貼:')
if allowance:
    allowance = int(allowance)
else:
    allowance = 0

year_award = input('請輸入年終獎:')
if year_award:
    year_award = int(year_award)
else:
    year_award = 0

calculation = Calculate(25401, 3500, 1500, 4500, 9000, 35000, 55000, 80000)
calculation_new = 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)
# print '繳納的公積金爲:' + str(calculate_personal_accumulation_fund + calculate_unit_accumulation_fund)

# *****  養老保險  ***** #
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_old = calculation.calculate_personal_income_tax(total_pay_amount)
personal_tax_new = calculation_new.calculate_personal_income_tax(total_pay_amount)

print('\n應發工資:【%.2f】\n' % total_pay_amount)

print('老版個人所得稅:【%.2f】' % personal_tax_old)
final_paying_amount_old = total_pay_amount - personal_tax_old
print('老版實發工資:【%.2f】\n' % final_paying_amount_old)

print('新版個人所得稅:【%.2f】' % personal_tax_new)
final_paying_amount_new = total_pay_amount - personal_tax_new
print('新版實發工資:【%.2f】' % final_paying_amount_new)

print('\n新版比老版少繳納個人所得稅:【%.2f】' % (personal_tax_old - personal_tax_new))
if personal_tax_old > 0:
    print('少繳納比例:【%.1f%%】' % ((personal_tax_old - personal_tax_new) / personal_tax_old * 100))

print ('\n')
year_award_tax_old = calculation.calculate_year_award_tax_old(salary, year_award)
year_award_tax_new = calculation.calculate_year_award_tax_new(salary, year_award)
print('老版年終獎所得扣稅如下:')
print('年終獎金額       舊版扣稅       新版扣稅       舊版年終獎最終所得       新版年終獎最終所得')
print('  ' + str(year_award) + '         ' + str(year_award_tax_old) + '         ' + str(year_award_tax_new) + '          ' +
      str(year_award - year_award_tax_old) + '           ' + str(year_award - year_award_tax_new))
year_salary_old = final_paying_amount_old + year_award - year_award_tax_old
year_salary_new = final_paying_amount_new + year_award - year_award_tax_new
print('\n年終獎新版比老版少繳納所得稅:【%.2f】' % (year_award_tax_old - year_award_tax_new))
if year_award_tax_old > 0:
    print('少繳納比例:【%.1f%%】' % ((year_award_tax_old - year_award_tax_new) / year_award_tax_old * 100))

print('舊版年終那個月最終工資所得:' + str(year_salary_old))
print('新版年終那個月最終工資所得:' + str(year_salary_new))
print('\n年終獎那個月新版比老版總共少繳納所得稅:【%.2f】' % (personal_tax_old - personal_tax_new + year_award_tax_old - year_award_tax_new))
if year_award_tax_old > 0:
    print('少繳納比例:【%.1f%%】' % ((personal_tax_old - personal_tax_new + year_award_tax_old - year_award_tax_new) / (personal_tax_old + year_award_tax_old) * 100))

計算結果:
這裏寫圖片描述
由此可見,在不計算其它補貼的情況下,純月薪10000,以前到手7472.30元,現在到手7713.09元。繳納的個稅,相比之前的324.70元,現在只需繳納83.91元,可以少交稅240.79元,少繳納了74.2%。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章