预扣预缴、年度汇算清缴与年终奖的个税计算

news2024/10/6 1:09:53

目录

  • 1. 税率表
  • 2. 年度汇算清缴
  • 3. 预扣预缴
    • 3.1 预扣预缴的代码实现
    • 3.2 全年应纳税额与全年收入的关系
  • 4. 年终奖

1. 税率表

月度税率表:

级数月度应纳税所得额税率(%)速算扣除数
1 ( 0 , 3000 ] (0, 3000] (0,3000] 3 3 3 0 0 0
2 ( 3000 , 12000 ] (3000,12000] (3000,12000] 10 10 10 210 210 210
3 ( 12000 , 25000 ] (12000,25000] (12000,25000] 20 20 20 1410 1410 1410
4 ( 25000 , 35000 ] (25000,35000] (25000,35000] 25 25 25 2660 2660 2660
5 ( 35000 , 55000 ] (35000,55000] (35000,55000] 30 30 30 4410 4410 4410
6 ( 55000 , 80000 ] (55000,80000] (55000,80000] 35 35 35 7160 7160 7160
7 ( 80000 , + ∞ ) (80000,+\infty) (80000,+) 45 45 45 15160 15160 15160

年度税率表:

级数全年应纳税所得额税率(%)速算扣除数
1 ( 0 , 36000 ] (0, 36000] (0,36000] 3 3 3 0 0 0
2 ( 36000 , 144000 ] (36000,144000] (36000,144000] 10 10 10 2520 2520 2520
3 ( 144000 , 300000 ] (144000,300000] (144000,300000] 20 20 20 16920 16920 16920
4 ( 300000 , 420000 ] (300000,420000] (300000,420000] 25 25 25 31920 31920 31920
5 ( 420000 , 660000 ] (420000,660000] (420000,660000] 30 30 30 52920 52920 52920
6 ( 660000 , 960000 ] (660000,960000] (660000,960000] 35 35 35 85920 85920 85920
7 ( 960000 , + ∞ ) (960000,+\infty) (960000,+) 45 45 45 181920 181920 181920

2. 年度汇算清缴

计算公式:

应纳税所得额 = 综合所得 − 免征 − 专项扣除 − 专项附加扣除 − 其他扣除 应纳税额 = 应纳税所得额 × 税率 − 速算扣除数 \begin{aligned} \textcolor{red}{应纳税所得额} &\textcolor{red}{= 综合所得 - 免征 - 专项扣除 - 专项附加扣除 - 其他扣除}\\ \textcolor{red}{应纳税额} &\textcolor{red}{= 应纳税所得额 \times 税率 - 速算扣除数} \end{aligned} 应纳税所得额应纳税额=综合所得免征专项扣除专项附加扣除其他扣除=应纳税所得额×税率速算扣除数

其中:

综合所得 = 工资薪金 + 劳务报酬 × 80 % + 稿酬 × 80 % × 70 % + 特许权使用费 × 80 % 综合所得=工资薪金 + 劳务报酬 \times 80\% + 稿酬 \times 80\% \times 70\% + 特许权使用费 \times 80\% 综合所得=工资薪金+劳务报酬×80%+稿酬×80%×70%+特许权使用费×80%

此外:

  • 免征:60000/年。
  • 专项扣除:即社保公积金。
  • 专项附加扣除:包括子女教育,继续教育,大病医疗,住房租金在内的七项。
  • 其他扣除:暂不考虑此项。

假设小明是个上班族,收入来源只有工资薪金,每月均为 18000 18000 18000 元,每月还需缴纳社保公积金 4000 4000 4000 元,由于小明还有一个子女正在接受教育,因此每月还可享受 2000 2000 2000 元的专项附加扣除,所以全年的应纳税所得额为

18000 ⋅ 12 − 4000 ⋅ 12 − 2000 ⋅ 12 − 60000 = 84000 元 18000\cdot 12-4000\cdot 12-2000\cdot 12-60000=84000元 180001240001220001260000=84000

查年度税率表知适用税率为 10 % 10\% 10%,故应纳税额为

84000 ⋅ 0.1 − 2520 = 5880 元 84000\cdot 0.1 - 2520=5880元 840000.12520=5880

清缴时,根据先前预扣预缴的金额进行多退少补即可。

📝 劳务报酬、稿酬和特许权使用费只有在年度汇算清缴时才会和工资薪金合并在一起计算,平时的预扣预缴均是独立计算的。

3. 预扣预缴

预扣预缴并不是每个月独立计算的,而是采取累计预扣法,使用的税率表是年度税率表

计算公式如下:

第 n 个月的应纳税额 = 第 n 个月的累计应纳税额 − 第 n − 1 个月的累计应纳税额 第 n 个月的累计应纳税额 = 第 n 个月的累计应纳税所得额 × 税率 − 速算扣除数 累计应纳税所得额 = 累计收入 − 累计免征 − 累计专项扣除 − 累计专项附加扣除 − 累计其他扣除 \begin{aligned} \textcolor{red}{第 n 个月的应纳税额} &\textcolor{red}{= 第n个月的累计应纳税额 - 第n - 1个月的累计应纳税额} \\ \textcolor{red}{第n个月的累计应纳税额} &\textcolor{red}{= 第n个月的累计应纳税所得额 \times 税率 - 速算扣除数}\\ \textcolor{red}{累计应纳税所得额} &\textcolor{red}{= 累计收入 - 累计免征 - 累计专项扣除-累计专项附加扣除-累计其他扣除} \end{aligned} n个月的应纳税额n个月的累计应纳税额累计应纳税所得额=n个月的累计应纳税额n1个月的累计应纳税额=n个月的累计应纳税所得额×税率速算扣除数=累计收入累计免征累计专项扣除累计专项附加扣除累计其他扣除

n n n 个月的累计应纳税所得额为负值时,暂不退税。纳税年度终了后仍为负值时,由纳税人通过办理综合所得年度汇算清缴,税款多退少补。

⚠️ 预扣预缴环节,综合所得中的四项是分开计算的,所以这里的累计收入指的是「累计工资薪金」或是「累计其他连续劳务报酬」。

依然采用之前小明的例子,现在来计算每个月应当预扣预缴多少税:

月份累计收入累计社保公积金累计专项附加扣除累计免征累计应纳税所得额累计应纳税额已缴税额本月应纳税额
01 18000 18000 18000 4000 4000 4000 2000 2000 2000 5000 5000 5000 7000 7000 7000 7000 × 3 % = 210 7000×3\%=210 7000×3%=210 0 0 0 210 210 210
02 36000 36000 36000 8000 8000 8000 4000 4000 4000 10000 10000 10000 14000 14000 14000 14000 × 3 % = 420 14000×3\%=420 14000×3%=420 210 210 210 210 210 210
03 54000 54000 54000 12000 12000 12000 6000 6000 6000 15000 15000 15000 21000 21000 21000 21000 × 3 % = 630 21000×3\%=630 21000×3%=630 420 420 420 210 210 210
04 72000 72000 72000 16000 16000 16000 8000 8000 8000 20000 20000 20000 28000 28000 28000 28000 × 3 % = 840 28000×3\%=840 28000×3%=840 630 630 630 210 210 210
05 90000 90000 90000 20000 20000 20000 10000 10000 10000 25000 25000 25000 35000 35000 35000 35000 × 3 % = 1050 35000×3\%=1050 35000×3%=1050 840 840 840 210 210 210
06 108000 108000 108000 24000 24000 24000 12000 12000 12000 30000 30000 30000 42000 42000 42000 42000 × 10 % − 2520 = 1680 42000×10\%-2520=1680 42000×10%2520=1680 1050 1050 1050 630 630 630
07 126000 126000 126000 28000 28000 28000 14000 14000 14000 35000 35000 35000 49000 49000 49000 49000 × 10 % − 2520 = 2380 49000×10\%-2520=2380 49000×10%2520=2380 1680 1680 1680 700 700 700
08 144000 144000 144000 32000 32000 32000 16000 16000 16000 40000 40000 40000 56000 56000 56000 56000 × 10 % − 2520 = 3080 56000×10\%-2520=3080 56000×10%2520=3080 2380 2380 2380 700 700 700
09 162000 162000 162000 36000 36000 36000 18000 18000 18000 45000 45000 45000 63000 63000 63000 63000 × 10 % − 2520 = 3780 63000×10\%-2520=3780 63000×10%2520=3780 3080 3080 3080 700 700 700
10 180000 180000 180000 40000 40000 40000 20000 20000 20000 50000 50000 50000 70000 70000 70000 70000 × 10 % − 2520 = 4480 70000×10\%-2520=4480 70000×10%2520=4480 3780 3780 3780 700 700 700
11 198000 198000 198000 44000 44000 44000 22000 22000 22000 55000 55000 55000 77000 77000 77000 77000 × 10 % − 2520 = 5180 77000×10\%-2520=5180 77000×10%2520=5180 4480 4480 4480 700 700 700
12 216000 216000 216000 48000 48000 48000 24000 24000 24000 60000 60000 60000 84000 84000 84000 84000 × 10 % − 2520 = 5880 84000×10\%-2520=5880 84000×10%2520=5880 5180 5180 5180 700 700 700
合计------- 5880 5880 5880

可以发现,小明的全年预缴税额与通过年度汇算清缴计算出的应纳税额完全一致,因此无需进行退税或补税。

需要注意的是,累计并不一定从 1 1 1 月开始计算。由于不同公司之间独立进行税款预扣,新任职公司无法获知员工在上一家公司的累计收入和已预扣预缴税额,因此只能重新开始累计。这种情况下,若小明在年度中途跳槽,其预扣预缴税额可能与年度最终应纳税额存在差异,导致年度汇算清缴时出现退税或补税的情况。

例如,小明在 1 1 1 月至 6 6 6 月期间任职于A公司, 7 7 7 月至 12 12 12 月期间任职于B公司。小明在A公司期间的累计应纳税所得额为 6 ⋅ ( 18000 − 4000 − 2000 − 5000 ) = 42000 6 \cdot (18000 - 4000 - 2000 - 5000) = 42000 6(18000400020005000)=42000 元,累计应纳税额为 42000 ⋅ 0.1 − 2520 = 1680 42000 \cdot 0.1 - 2520 = 1680 420000.12520=1680 元。由于B公司的预扣预缴是独立进行的(即同样从头开始累计),小明在B公司的累计应纳税额也为 1680 1680 1680 元。因此,他全年的预扣预缴税额为 1680 ⋅ 2 = 3360 1680 \cdot 2 = 3360 16802=3360 元,故小明需要补缴 5880 − 3360 = 2520 5880 - 3360 = 2520 58803360=2520 元的税款。这一补税的原因在于小明跳槽后,在两个公司均适用较低的税率(3%),导致全年的实际税负较低,从而在汇算清缴时需补缴差额。

再例如,如果小明没有跳槽,但在这一年内额外获得了一笔价值 10000 10000 10000 元的劳务报酬,那么这笔劳务报酬需按照 10000 ⋅ 0.8 ⋅ 0.2 = 1600 10000 \cdot 0.8 \cdot 0.2 = 1600 100000.80.2=1600 元计算纳税。因此,他全年的预扣预缴税款为 5880 + 1600 = 7480 5880 + 1600 = 7480 5880+1600=7480 元。年度汇算清缴时,小明的全年应纳税所得额为 84000 + 10000 ⋅ 0.8 = 92000 84000 + 10000 \cdot 0.8 = 92000 84000+100000.8=92000 元,对应的应纳税额为 92000 ⋅ 0.1 − 2520 = 6680 92000 \cdot 0.1 - 2520 = 6680 920000.12520=6680 元,故小明应退税 7480 − 6680 = 800 7480 - 6680 = 800 74806680=800 元。

由此可见,如果一个人的收入来源仅为工资薪金,并且每月的工资薪金和各类扣除项目保持稳定且未发生跳槽情况,那么在年度汇算清缴时,该纳税人通常无需进行退税或补税。

接下来,我们从数学的角度进行进一步分析。为便于讨论,假设纳税人符合上述理想条件。设该纳税人的每月工资为 s s s,缴纳的社保公积金为 p p p,专项附加扣除为 a a a。根据年度税率表,全年的应纳税所得额对应的税率为 r r r,速算扣除数为 q q q,则全年的应纳税额为:

( s ⋅ 12 − p ⋅ 12 − a ⋅ 12 − 60000 ) ⋅ r − q = 12 ⋅ ( s − p − a − 5000 ) ⋅ r − q = 12 ⋅ [ ( s − p − a − 5000 ) ⋅ r − q 12 ] \begin{aligned} &(s \cdot 12 - p \cdot 12 - a \cdot 12 - 60000) \cdot r - q \\ =& 12 \cdot (s - p - a - 5000) \cdot r - q \\ =& 12 \cdot \left[(s - p - a - 5000) \cdot r - \frac{q}{12}\right] \end{aligned} ==(s12p12a1260000)rq12(spa5000)rq12[(spa5000)r12q]

观察表达式中的 ( s − p − a − 5000 ) ⋅ r − q 12 (s - p - a - 5000) \cdot r - \frac{q}{12} (spa5000)r12q 这一项,可以看出它实际上就是按照月度税率表计算的月度应纳税额,这也进一步验证了月度税率表的适用范围和速算扣除数均是年度税率表的 1 / 12 1/12 1/12

在使用月度税率表进行计算时,每个月都是独立计算的,不涉及累计计算,因此每个月得出的预扣预缴税款是相同的。以小明为例,我们可以算出小明每个月的预扣预缴税款为 7000 ⋅ 0.1 − 210 = 490 7000 \cdot 0.1 - 210 = 490 70000.1210=490 元,这与实际预扣预缴的情况并不一致。然而,注意到 490 ⋅ 12 = 5880 490 \cdot 12 = 5880 49012=5880 元,最终的全年结果仍是正确的。这表明,按照月度税率表计算的结果可以视为对真实情况的一种加权平均,即:

490 = 210 ⋅ 5 + 630 + 700 ⋅ 6 12 = 5 12 ⋅ 210 + 1 12 ⋅ 630 + 1 2 ⋅ 700 490 = \frac{210 \cdot 5 + 630 + 700 \cdot 6}{12} = \frac{5}{12} \cdot 210 + \frac{1}{12} \cdot 630 + \frac{1}{2} \cdot 700 490=122105+630+7006=125210+121630+21700

3.1 预扣预缴的代码实现

根据公式可知,在使用累计预扣法计算第 n n n 个月的个税时,需要借助第 n − 1 n-1 n1 个月的信息。这启示我们可以通过递归的方式来完成计算(当然,使用递推也可以,但递归更易于理解)。

注意到税率表是单调递增的,我们可以二分出来相应的税率和速算扣除数,并使用备忘录来避免重复计算。

📝 也可以先进行预处理,这样每次查询的复杂度都是 O ( 1 ) O(1) O(1)。然而,如果一年有 100000 100000 100000 个月,而纳税人只需要查询第一个月的纳税情况,此时预处理将导致不必要的等待时间。

from bisect import bisect_left

# 税率表的上限值
upper_bounds = [36000, 144000, 300000, 420000, 660000, 960000, float('inf')]

# 税率和速算扣除数列表
tax_rates = [
    (0.03, 0),
    (0.1, 2520),
    (0.2, 16920),
    (0.25, 31920),
    (0.3, 52920),
    (0.35, 85920),
    (0.45, 181920)
]

memo = {}

# 计算第 n 个月的个税
def calculate_tax(n, s, p, a):
    if n in memo:
        return memo[n]

    # 第 n 个月的累计应纳税所得额
    accumulate_taxable_income = n * (s - p - a - 5000)

    idx = bisect_left(upper_bounds, accumulate_taxable_income)
    tax_rate, deduction = tax_rates[idx]

    # 第 n 个月的累计应纳税额
    accumulate_tax = accumulate_taxable_income * tax_rate - deduction

    if n == 1:
        previous_tax = 0
    else:
        # 递归计算前 n-1 个月的累计税额
        previous_tax = calculate_tax(n - 1, s, p, a)[0]

    # 第 n 个月的应纳税额 = 第 n 个月的累计应纳税额 - 第 n-1 个月的累计应纳税额
    current_tax = accumulate_tax - previous_tax

    # 保存 (第 n 个月的累计应纳税额, 第 n-1 个月的累计应纳税额, 第 n 个月的应纳税额)
    memo[n] = (accumulate_tax, previous_tax, current_tax)

    return memo[n]


if __name__ == '__main__':
    memo.clear()

    for i in range(1, 13):
        result = calculate_tax(i, 18000, 4000, 2000)
        print(f"第{i}个月: 累计应纳税额={result[0]}, 已缴税额={result[1]}, 本月应纳税额={result[2]}")

输出:

第1个月: 累计应纳税额=210.0, 已缴税额=0, 本月应纳税额=210.0
第2个月: 累计应纳税额=420.0, 已缴税额=210.0, 本月应纳税额=210.0
第3个月: 累计应纳税额=630.0, 已缴税额=420.0, 本月应纳税额=210.0
第4个月: 累计应纳税额=840.0, 已缴税额=630.0, 本月应纳税额=210.0
第5个月: 累计应纳税额=1050.0, 已缴税额=840.0, 本月应纳税额=210.0
第6个月: 累计应纳税额=1680.0, 已缴税额=1050.0, 本月应纳税额=630.0
第7个月: 累计应纳税额=2380.0, 已缴税额=1680.0, 本月应纳税额=700.0
第8个月: 累计应纳税额=3080.0, 已缴税额=2380.0, 本月应纳税额=700.0
第9个月: 累计应纳税额=3780.0, 已缴税额=3080.0, 本月应纳税额=700.0
第10个月: 累计应纳税额=4480.0, 已缴税额=3780.0, 本月应纳税额=700.0
第11个月: 累计应纳税额=5180.0, 已缴税额=4480.0, 本月应纳税额=700.0
第12个月: 累计应纳税额=5880.0, 已缴税额=5180.0, 本月应纳税额=700.0

3.2 全年应纳税额与全年收入的关系

现假设不考虑专项附加扣除,且社保公积金占工资的比例为 22 % 22\% 22%,我们来绘制全年应纳税额与全年收入之间的关系曲线。

此时,全年应纳税所得额的计算公式为:

s ⋅ 12 − 0.22 ⋅ s ⋅ 12 − 0 ⋅ 12 − 60000 = 0.78 ⋅ 12 s − 60000 s \cdot 12 - 0.22\cdot s \cdot 12 - 0 \cdot 12 - 60000=0.78\cdot 12s-60000 s120.22s1201260000=0.7812s60000

s = 12 s s=12s s=12s,此时 s s s 代表年收入,全年应纳税额 T T T s s s 的关系为

T ( s ) = ( 0.78 ⋅ s − 60000 ) ⋅ r ( s ) − q ( s ) = 0.78 ⋅ r ( s ) ⋅ s − 60000 ⋅ r ( s ) − q ( s ) ≜ k s + b \begin{aligned} T(s)=(0.78\cdot s-60000)\cdot r(s)-q(s)=0.78\cdot r(s)\cdot s-60000\cdot r(s)-q(s) \triangleq ks+b \end{aligned} T(s)=(0.78s60000)r(s)q(s)=0.78r(s)s60000r(s)q(s)ks+b

其中 k = 0.78 ⋅ r ( s ) k=0.78\cdot r(s) k=0.78r(s) b = − 60000 ⋅ r ( s ) − q ( s ) b=-60000\cdot r(s)-q(s) b=60000r(s)q(s),显然 T ( s ) T(s) T(s) 是一个分段函数。

from bisect import bisect_left
import numpy as np
import matplotlib.pyplot as plt

upper_bounds = [36000, 144000, 300000, 420000, 660000, 960000, float('inf')]

tax_rates = [
    (0.03, 0),
    (0.1, 2520),
    (0.2, 16920),
    (0.25, 31920),
    (0.3, 52920),
    (0.35, 85920),
    (0.45, 181920)
]

# s是年收入
def calculate_year_tax(s):
    year_taxable_income = 0.78 * s - 60000
    if year_taxable_income <= 0:
        return 0
    idx = bisect_left(upper_bounds, year_taxable_income)
    tax_rate, deduction = tax_rates[idx]
    year_tax = year_taxable_income * tax_rate - deduction
    return year_tax

income_range = np.linspace(0, 1200000, 1200000)
taxes = [calculate_year_tax(s) for s in income_range]

income_range_in_wan = income_range / 10000
taxes_in_wan = np.array(taxes) / 10000

plt.figure(figsize=(10, 6))
plt.plot(income_range_in_wan, taxes_in_wan, label="Tax Payable", color='b')
plt.title("Annual Tax Payable vs. Annual Income")
plt.xlabel("Annual Income (10,000 Yuan)")
plt.ylabel("Annual Tax Payable (10,000 Yuan)")
plt.grid(True)
plt.legend()

# 标记一些关键点
x_points = [20, 40, 60, 80, 100, 120]
y_points = [calculate_year_tax(x * 10000) / 10000 for x in x_points]

for x, y in zip(x_points, y_points):
    plt.scatter(x, y, color='red')
    plt.text(x, y, f'({x},{y:.2f})', fontsize=9, verticalalignment='bottom', horizontalalignment='right')

plt.show()

基于以上结果,我们可以进一步计算:

级数年收入范围 (元) T ( s ) T(s) T(s)社保公积金实际到手实际到手占比(取区间平均值估计)
1 ( 76923.08 , 123076.92 ] (76923.08, 123076.92] (76923.08,123076.92] T = 0.0234 s − 1800 T=0.0234s-1800 T=0.0234s1800 0.22 s 0.22s 0.22s 0.7566 s + 1800 0.7566s+1800 0.7566s+1800 0.7566 + 1800 ⋅ 2 76923.08 + 123076.92 = 0.7746 0.7566+1800\cdot \frac{2}{76923.08+123076.92}=0.7746 0.7566+180076923.08+123076.922=0.7746
2 ( 123076.92 , 261538.46 ] (123076.92, 261538.46] (123076.92,261538.46] T = 0.078 s − 8520 T=0.078s-8520 T=0.078s8520 0.22 s 0.22s 0.22s 0.702 s + 8520 0.702s+8520 0.702s+8520 0.702 + 8520 ⋅ 2 123076.92 + 261538.46 = 0.7463 0.702+8520\cdot \frac{2}{123076.92+261538.46}=0.7463 0.702+8520123076.92+261538.462=0.7463
3 ( 261538.46 , 461538.46 ] (261538.46, 461538.46] (261538.46,461538.46] T = 0.156 s − 28920 T=0.156s-28920 T=0.156s28920 0.22 s 0.22s 0.22s 0.624 s + 28920 0.624s+28920 0.624s+28920 0.624 + 28920 ⋅ 2 261538.46 + 461538.46 = 0.7040 0.624+28920\cdot \frac{2}{261538.46+461538.46}=0.7040 0.624+28920261538.46+461538.462=0.7040
4 ( 461538.46 , 615384.62 ] (461538.46, 615384.62] (461538.46,615384.62] T = 0.195 s − 46920 T=0.195s-46920 T=0.195s46920 0.22 s 0.22s 0.22s 0.585 s + 46920 0.585s+46920 0.585s+46920 0.585 + 46920 ⋅ 2 461538.46 + 615384.62 = 0.6721 0.585+46920\cdot \frac{2}{461538.46+615384.62}=0.6721 0.585+46920461538.46+615384.622=0.6721
5 ( 615384.62 , 923076.92 ] (615384.62, 923076.92] (615384.62,923076.92] T = 0.234 s − 70920 T=0.234s-70920 T=0.234s70920 0.22 s 0.22s 0.22s 0.546 s + 70920 0.546s+70920 0.546s+70920 0.546 + 70920 ⋅ 2 615384.62 + 923076.92 = 0.6382 0.546+70920\cdot \frac{2}{615384.62+923076.92}=0.6382 0.546+70920615384.62+923076.922=0.6382
6 ( 923076.92 , 1307692.31 ] (923076.92, 1307692.31] (923076.92,1307692.31] T = 0.273 s − 106920 T=0.273s-106920 T=0.273s106920 0.22 s 0.22s 0.22s 0.507 s + 106920 0.507s+106920 0.507s+106920 0.507 + 106920 ⋅ 2 923076.92 + 1307692.31 = 0.6019 0.507+106920\cdot \frac{2}{923076.92+1307692.31}=0.6019 0.507+106920923076.92+1307692.312=0.6019
7 ( 1307692.31 , + ∞ ) (1307692.31, +\infty) (1307692.31,+) T = 0.351 s − 208920 T=0.351s-208920 T=0.351s208920 0.22 s 0.22s 0.22s 0.429 s + 208920 0.429s+208920 0.429s+208920 0.429 + 208920 ⋅ 2 1307692.31 + 1.5 ⋅ 1307692.31 = 0.5131 0.429+208920\cdot \frac{2}{1307692.31+1.5\cdot1307692.31}=0.5131 0.429+2089201307692.31+1.51307692.312=0.5131

大部分人的年收入位于第 1 , 2 1,2 1,2 级,实际到手大概在 75 % 75\% 75% 左右,少部分高新技术从业者可以达到 3 3 3 级,此时到手只有 70 % 70\% 70%

⚠️ 再强调一遍,本节所讨论的年收入是指年薪,因为我们只考虑了工资薪金。

4. 年终奖

假设年终奖发了 x x x 元,如何计算年终奖的个税呢?

一种直观的想法是将这 x x x 元均摊到12个月上,然后根据 x 12 \frac{x}{12} 12x月度税率表,得到相应的税率 r x / 12 r_{x/12} rx/12 和速算扣除数 q x / 12 q_{x/12} qx/12。随后,每个月的应纳税额可以表示为 x 12 ⋅ r x / 12 − q x / 12 \frac{x}{12} \cdot r_{x/12} - q_{x/12} 12xrx/12qx/12 (注意,年终奖无需减去免征额)。将这12个月的应纳税额累加后,即可得到年终奖应缴纳的个税:

12 ⋅ ( x 12 ⋅ r x / 12 − q x / 12 ) = x ⋅ r x / 12 − 12 ⋅ q x / 12 12 \cdot \left( \frac{x}{12} \cdot r_{x/12} - q_{x/12} \right) = x \cdot r_{x/12} - 12 \cdot q_{x/12} 12(12xrx/12qx/12)=xrx/1212qx/12

例如,小明本年度获得了 60000 60000 60000 元的年终奖,计算得出 60000 / 12 = 5000 60000/12=5000 60000/12=5000。根据月度税率表,适用的税率为 10 % 10\% 10%。因此,每个月的应纳税额为 5000 ⋅ 0.1 − 210 = 290 5000 \cdot 0.1-210 = 290 50000.1210=290 元,年终奖的个税为 290 ⋅ 12 = 3480 290 \cdot 12 = 3480 29012=3480 元。

注意到 r x / 12 = r x r_{x/12}=r_x rx/12=rx 12 ⋅ q x / 12 = q x 12\cdot q_{x/12}=q_x 12qx/12=qx,此时年终奖个税的计算公式变为 x ⋅ r x − q x x\cdot r_x-q_x xrxqx,即我们无需预先均摊到每个月上,而是直接使用 x x x 去查年度税率表,然后去计算个税。 60000 60000 60000 对应的税率为 10 % 10\% 10%,因此年终奖的个税为 60000 ⋅ 0.1 − 2520 = 3480 60000\cdot 0.1-2520=3480 600000.12520=3480 元。

绘制年终奖个税与年终奖的关系曲线:

from bisect import bisect_left
import numpy as np
import matplotlib.pyplot as plt

upper_bounds = [36000, 144000, 300000, 420000, 660000, 960000, float('inf')]

tax_rates = [
    (0.03, 0),
    (0.1, 2520),
    (0.2, 16920),
    (0.25, 31920),
    (0.3, 52920),
    (0.35, 85920),
    (0.45, 181920)
]

def calculate_bonus_tax(bonus):
    idx = bisect_left(upper_bounds, bonus)
    tax_rate, deduction = tax_rates[idx]
    return bonus * tax_rate - deduction

bonus_range_in_wan = np.arange(0, 1200000, 1)
taxes_in_wan = np.array([calculate_bonus_tax(bonus) / 10000 for bonus in bonus_range_in_wan])

plt.figure(figsize=(10, 6))
plt.plot(bonus_range_in_wan / 10000, taxes_in_wan, label="Bonus Tax Payable", color='blue')

plt.title("Bonus Tax Payable vs. Bonus Amount")
plt.xlabel("Bonus Amount (10,000 Yuan)")
plt.ylabel("Bonus Tax Payable (10,000 Yuan)")
plt.grid(True)
plt.legend()

plt.show()

可以看出,曲线呈现出一个正常的上升趋势,随着年终奖的增加,个税也呈现出单调递增的趋势。

但!是!官方计算年终奖个税的公式实际上是:

x ⋅ r x / 12 − q x / 12 = x ⋅ r x − q x 12 x \cdot r_{x/12} - q_{x/12} = x \cdot r_x - \frac{q_x}{12} xrx/12qx/12=xrx12qx

从月度税率表的角度来看,本应减去12个月的速算扣除数,但实际只减了一个;从年度税率表的角度来看,速算扣除数被缩减为原来的 1 12 \frac{1}{12} 121。这种计算方式不仅会导致年终奖个税增加,还会产生所谓的 「年终奖盲区」,即年终奖多发一块钱,可能会导致多交几千块钱的税!

假设小明的年终奖为 36000 36000 36000 元,查年度税率表可知适用的税率为 3 % 3\% 3%,因此年终奖个税为 36000 ⋅ 0.03 − 0 12 = 1080 36000 \cdot 0.03 - \frac{0}{12} = 1080 360000.03120=1080 元。如果小明的年终奖增加到 36001 36001 36001 元,此时适用的税率就上升到 10 % 10\% 10%,相应的年终奖个税变为 36001 ⋅ 0.1 − 2520 12 = 3390.1 36001 \cdot 0.1 - \frac{2520}{12} = 3390.1 360010.1122520=3390.1 元。多发了一块钱,却导致需要多交 3390.1 − 1080 = 2310.1 3390.1 - 1080 = 2310.1 3390.11080=2310.1 元的税!

这还不够极端,如果小明的年终奖为 960000 960000 960000 元,此时年终奖个税为 960000 ⋅ 0.35 − 85920 12 = 328840 960000 \cdot 0.35 - \frac{85920}{12} = 328840 9600000.351285920=328840 元。然而,如果年终奖多发一块钱,个税将变为 960001 ⋅ 0.45 − 181920 12 = 416840.45 960001 \cdot 0.45 - \frac{181920}{12} = 416840.45 9600010.4512181920=416840.45 元。仅多发一块钱,却需要多交 416840.45 − 328840 = 88000.45 416840.45 - 328840 = 88000.45 416840.45328840=88000.45 元的税!

重新绘制年终奖个税与年终奖的关系曲线,同时绘制扣税后实际到手金额与年终奖的关系曲线:

from bisect import bisect_left
import numpy as np
import matplotlib.pyplot as plt

upper_bounds = [36000, 144000, 300000, 420000, 660000, 960000, float('inf')]
tax_rates = [
    (0.03, 0),
    (0.1, 2520),
    (0.2, 16920),
    (0.25, 31920),
    (0.3, 52920),
    (0.35, 85920),
    (0.45, 181920)
]

def calculate_bonus_tax(bonus):
    idx = bisect_left(upper_bounds, bonus)
    tax_rate, deduction = tax_rates[idx]
    return bonus * tax_rate - deduction // 12  # 仅需简单改动

bonus_range_in_wan = np.arange(0, 1200000, 1)

taxes_in_wan = np.array([calculate_bonus_tax(bonus) / 10000 for bonus in bonus_range_in_wan])
after_tax_in_wan = np.array([(bonus - calculate_bonus_tax(bonus)) / 10000 for bonus in bonus_range_in_wan])

fig, axs = plt.subplots(1, 2, figsize=(16, 6))

axs[0].plot(bonus_range_in_wan / 10000, taxes_in_wan, label="Bonus Tax Payable", color='blue')
axs[0].set_title("Bonus Tax Payable vs. Bonus Amount")
axs[0].set_xlabel("Bonus Amount (10,000 Yuan)")
axs[0].set_ylabel("Bonus Tax Payable (10,000 Yuan)")
axs[0].grid(True)
axs[0].legend()

axs[1].plot(bonus_range_in_wan / 10000, after_tax_in_wan, label="Bonus After Tax", color='green')
axs[1].set_title("Bonus After Tax vs. Bonus Amount")
axs[1].set_xlabel("Bonus Amount (10,000 Yuan)")
axs[1].set_ylabel("Bonus After Tax (10,000 Yuan)")
axs[1].grid(True)
axs[1].legend()

plt.tight_layout()
plt.show()

在这里插入图片描述

右图中的红线(手动绘制)就是我们之前提到的「年终奖盲区」,如果年终奖不幸落入了这些区间内,那还不如不发。

现在我们可以计算出这些盲区:

for i, left in enumerate(upper_bounds):
    if i == 6:
        break
    baseline = left - calculate_bonus_tax(left)
    right = left + 1
    while right - calculate_bonus_tax(right) < baseline:
        right += 1
    print(f"盲区 {i + 1}: [{left}, {right}]")

输出:

盲区 1: [36000, 38567]
盲区 2: [144000, 160500]
盲区 3: [300000, 318334]
盲区 4: [420000, 447500]
盲区 5: [660000, 706539]
盲区 6: [960000, 1120000]

从盲区6可以看出,96w的年终奖和112w的年终奖到手居然是一样的,这也进一步凸显了「年终奖盲区」的严重性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2190864.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Qt操作主/从视图及XML——实例:汽车管理系统

目录 1. 主界面布局2.连接数据库3.主/从视图应用 1. 主界面布局 先创建一个QMainwindow&#xff0c;不带设计界面 #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow> #include <QGroupBox> #include <QTableView> #include <QListWidg…

Python数据结构与算法问题详解

Python数据结构与算法问题详解 Python 作为一种高级编程语言&#xff0c;凭借其简洁的语法和强大的内置库&#xff0c;成为了数据结构与算法学习的绝佳工具。本文将深入解析几种常见的数据结构&#xff0c;并结合具体的算法&#xff0c;展示如何在实际问题中高效解决问题。通过…

EEPROM读写实验——FPGA学习笔记18

一、EEPROM简介 Electrically Erasable Progammable Read Only Memory:是指带电可擦可编程只读存储器&#xff0c;是一种常用的非易失性存储器&#xff08;掉电数据不丢失&#xff09; EEPROM发展历史 我们这次实验所用的AT24C64存储容量为64Kbit&#xff0c;内部分成256页&am…

PELT算法

PELT算法的范畴 PELT算法&#xff08;Pruned Exact Linear Time&#xff09;属于时间序列分析和变点检测&#xff08;Change Point Detection&#xff09;范畴的算法。 从更广泛的角度来看&#xff0c;PELT算法还可以归类为以下几类算法的子集&#xff1a; 1. 时间序列分析&…

SpringBoot在校园健康信息管理中的创新

第5章 系统详细设计 5.1管理员功能模块 管理员登录&#xff0c;通过填写注册时输入的用户名、密码、角色进行登录&#xff0c;如图5-1所示。 图5-1管理员登录界面图 管理员登录进入师生健康信息管理系统可以查看个人中心、学生管理、教师管理、数据收集管理、问卷分类管理、…

昇思学习打卡营学习记录:DCGAN生成漫画头像

DCGAN原理 DCGAN&#xff08;深度卷积对抗生成网络&#xff0c;Deep Convolutional Generative Adversarial Networks&#xff09;是GAN的直接扩展。不同之处在于&#xff0c;DCGAN会分别在判别器和生成器中使用卷积和转置卷积层。 它最早由Radford等人在论文Unsupervised Re…

【STM32开发之寄存器版】(四)-独立看门狗IWDG

一 、前言 独立看门狗简介&#xff1a; STM32F103ZET6内置两个看门狗&#xff0c;提供了更高的安全性、时间的精确性和使用的灵活性。两个看门狗设备(独立看门狗和窗口看门狗)可用来检测和解决由软件错误引起的故障。 独立看门狗主要性能&#xff1a; 自由运行的递减计数器时钟…

【C++11】C++11的新语法

文章目录 统一的列表初始化std::initializer_list 变量类型推导autodecltype STL中的一些变化 统一的列表初始化 在C98中&#xff0c;标准允许使用花括号{}对数组或者结构体元素进行统一的列表初始值设定。 C11扩大了用大括号括起的列表(初始化列表)的使用范围&#xff0c;使其…

在 MySQL 中处理和优化大型报告查询经验分享

在 MySQL 数据库的使用过程中&#xff0c;我们经常会遇到需要生成大型报告的情况&#xff0c;这些查询可能涉及大量的数据和复杂的计算&#xff0c;对数据库的性能提出了很高的要求。 一、问题背景 大型报告查询通常具有以下特点&#xff1a; 数据量大&#xff1a;涉及大量的…

ConcurrentHashMap在JDK1.7和1.8的区别,详解

目录 1.了解HashMap底层插入原理 2.ConcurrentHashMap 是什么&#xff1f; HashTable的实现 3.ConcurrentHashMap 1.7和1.8的区别 4、JDK1.7 中的ConcurrentHashMap实现原理 6、JDK1.8中的ConcurrentHashMap 7.链表转红黑树条件 1.8 put方法 8.并发扩容 9.总结 首先呢…

Windows 11 24H2 v26100.1742 官方简体中文版

‌Windows 11 24H2是微软最新推出的操作系统更新&#xff0c;其在人工智能&#xff08;AI&#xff09;领域的创新为用户带来了显著的体验提升。该版本的一大亮点是AI Copilot&#xff0c;它能够智能地根据剪贴板内容调整操作上下文菜单&#xff0c;实现更智能化的交互。 此外&…

第33次CCF计算机软件能力认证【T1~T3】:词频统计、相似度计算、化学方程式配平

题目概括词频统计枚举相似度计算STL工具&#xff08;tranform()转换大小写&#xff09; 模拟化学方程式配平大模拟高斯消元 1、词频统计 在学习了文本处理后&#xff0c;小 P 对英语书中的 n 篇文章进行了初步整理。 具体来说&#xff0c;小 P 将所有的英文单词都转化为了整数…

Linux中的多线程

Linux线程概念 在一个程序里的一个执行路线就叫做线程&#xff08;thread&#xff09;。更准确的定义是&#xff1a;线程是“一个进程内部的控制序 列” 进程是系统分配资源的基本实体 线程是CPU调度的基本单位 POSIX线程库 创建线程 功能&#xff1a;创建一个新的线程 原…

执行路径带空格的服务漏洞

原理 当系统管理员配置Windows服务时&#xff0c;必须指定要执行的命令&#xff0c;或者运行可执行文件的路径。 当Windows服务运行时&#xff0c;会发生以下两种情况之一。 1、如果给出了可执行文件&#xff0c;并且引用了完整路径&#xff0c;则系统会按字面解释它并执行 …

算法修炼之路之滑动窗口

目录 一&#xff1a;滑动窗口的认识及模板 二&#xff1a;LeetcodeOJ练习 1.第一题 2.第二题 3.第三题 4.第四题 5.第五题 6.第六题 7.第七题 一&#xff1a;滑动窗口的认识及模板 这里先通过一道题来引出滑动窗口 LeetCode 209 长度最小的子数组 画图分析&…

软件验证与确认实验一:静态分析

目录 1. 实验目的及要求.................................................................................................... 3 2. 实验软硬件环境.................................................................................................... 3 …

(C语言贪吃蛇)15.贪吃蛇吃食物

目录 前言 注意事项⚠️ 效果预览 实现方法 运行效果 新的问题&#x1f64b; 最终效果 总结 前言 我们上一节实现了解决了贪吃蛇不合理走位的情况&#xff0c;不理解的再回去看看(传送门&#xff1a;解决贪吃蛇不合理走位)&#xff0c;那么贪吃蛇自然是要吃食物的啊&…

springboot系列--web相关知识探索四

一、前言 web相关知识探索三中研究了请求中所带的参数是如何映射到接口参数中的&#xff0c;也即请求参数如何与接口参数绑定。主要有四种、分别是注解方式、Servlet API方式、复杂参数、以及自定义对象参数。web相关知识探索三中主要研究了注解方式以及Servlet API方式。本次…

基于springboot vue 电影推荐系统

博主介绍&#xff1a;专注于Java&#xff08;springboot ssm 等开发框架&#xff09; vue .net php python(flask Django) 小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设&#xff0c;从业十五余年开发设计教学工作☆☆☆ 精彩专栏推荐订阅☆☆☆☆☆不然下次找…

DatePicker 日期控件

效果&#xff1a; 要求&#xff1a;初始显示系统当前时间&#xff0c;点击日期控件后修改文本控件时间。 目录结构&#xff1a; activity_main.xml(布局文件)代码&#xff1a; <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:and…