背景
今年疫情复工后,财务小姐姐给我们普及了2020年新个税的算法。。
听完之后的感觉就是:恩,原来是这么回事!
虽然是个小工薪阶级,但是对于扣多少税还是很关心的。于是拿起笔算了算2月份的个税,产生了另外一个感觉:头疼,晕!
每个月都要这么算一算,估计要崩溃了。
于是,决定利用python语言,用一次脑子写个小脚本算税,以后只要填数据就好啦!
2020年新个税
在写脚本之前,得整明白脚本要处理哪些逻辑。
那么,就得好好了解了解2020年新个税方案。
按照财务小姐姐的普及,方案如下:
1)个税起征点调到5000;
2)累积预扣法:
税 = 计税总额 * 扣除比例 - 累积已扣税 - 速算扣除数
||
累积收入 - 累积扣除的(五险一金 + 5000 + 专项附加 + 其它)
累积收入:含奖金、年终奖等。
3)扣除比例的多少,由2)中的计税总额来决定,具体如下表:
有点儿小复杂,举2个例子来说明:
python代码实现个税计算
从以上新个税的收法来看,我们需要分为5部分:
1)每个月的收入 - 累加
2)每个月的扣除 - 累加
3)扣除比例的计算
4)累积到本月为止的扣税总额
5)扣税额 = (累加收 - 累加扣除)*扣除比例 - 累积扣税 - 速算扣除数
步骤1:准备一个excel表格,存放收入和扣除数据
以每月收入1万元为例:
步骤2:用python读取excel数据,并计算累积收入/累积扣除/累积扣税额
累积收入、累积已扣税:
1 #*******************************累积收入+累积已扣税***************************************
2 def get_all_income_deducted_by_months(sh,m):
3 """
4 sh: excel的表单对象
5 m: 月份。比如当前月份为3月。那么 m=3.
6 一般公司都是,当月发放上一个月的薪资。3月份 要计算发放2月份工资时,
7 总收入 = 1月 + 2月的薪资 + 其它收入 。
8 总扣税 = 1月已扣税
9 """
10 income = 0 # 总收入金额
11 tax_deducted = 0 # 已扣税金额
12 for index in range(3,2+(m-1)+1):
13 salary = sh.cell(row=2,column=index).value
14 print("获取第{}列 第{}个月 的薪资: {}".format(index, index-2,salary))
15 income += salary # 收入累加
16 tax = sh.cell(row=3, column=index).value
17 print("获取第{}列 第{}个月 的已扣税: {}".format(index, index - 2, tax))
18 tax_deducted += tax
19
20 # 加上其它收入
21 other_income = sh.cell(row=2,column=15).value
22 print("其它收入为:{}".format(other_income))
23 income += other_income
24 print("加上 {}月 为止的总收入为:{}".format(m,income))
25 print("到目前为止的总扣税为:{}".format(tax_deducted))
26 return income,tax_deducted
累积的总扣除项:
1 #*******************************扣除项***************************************
2 def get_total_deduction(sh,m):
3 """
4 sh: excel的表单对象
5 m: 月份。比如当前月份为3月。那么 m=3.
6 3月份计算 包含2月在内的扣除项:
7 总扣除 = 公积金 * 2 + 社保 *2 + 专项扣除项 * 2 + 5000 * 2
8 """
9 # 各项扣除金额(含公积金&社保&附加项)
10 provident_fund = sh.cell(row=5,column=3).value # 公积金
11 social_security = sh.cell(row=5,column=4).value # 社保
12 additional_item = sh.cell(row=5,column=5).value # 附加项
13 # 总扣除的金额
14 total_deduction = (provident_fund + social_security + additional_item + 5000)*(m-1)
15 print("总扣除金额为:{}".format(total_deduction))
16 return total_deduction
步骤3 - 依据公式计算上月扣税额,并写入excel表中对应月份
1 if __name__ == '__main__':
2 # 打开计税excel表
3 wb = load_workbook("data.xlsx")
4 sh = wb["Sheet1"]
5 # 获取当前月份
6 m = datetime.datetime.now().month
7 # 获取总收入、获取总的扣税额 - 到目前为止
8 income, tax_deducted= get_all_income_deducted_by_months(sh,m)
9 # 获取总扣除项
10 total_deduction = get_total_deduction(sh,m)
11 # 计税总额 = 总收入 - 总扣除项
12 cur_income = income - total_deduction
13 print("当前计税金额 = {}(总收入) - {}(总扣除项):{}".format(income,total_deduction,cur_income))
14 # 最终要扣税 --- 计算公式
15 # 税 = 计税总额 * 扣除比例 - 累积已扣税 - 速算扣除数
16 tax_money = 0
17 if 0<= cur_income <= 36000:
18 tax_money = cur_income * 0.03 - tax_deducted
19 elif 36000 < cur_income <= 144000:
20 tax_money = cur_income * 0.1 - tax_deducted - 2520
21 elif 144000 < cur_income <= 300000:
22 tax_money = cur_income * 0.2 - tax_deducted -16920
23 elif 300000 < cur_income <= 420000:
24 tax_money = cur_income * 0.25 - tax_deducted - 31920
25 elif 420000 < cur_income <= 660000:
26 tax_money = cur_income * 0.3 - tax_deducted - 52920
27 elif 660000 < cur_income <= 960000:
28 tax_money = cur_income * 0.35 - tax_deducted - 85920
29 elif 960000 < cur_income:
30 tax_money = cur_income * 0.45 - tax_deducted - 181920
31
32 print("{}月最终的扣税人民币为:{}".format(m-1,tax_money))
33
34 # 将扣税额写入对应的月份
35 sh.cell(row=3,column=m+1).value = tax_money
36 wb.save("data.xlsx")
现在是3月份,那么如果收入是每月10000,2月份的扣税金额为:
下一个月的时候,只要再运行一下这个脚本,就可以得到3月份的扣税额哦!!
当然,你也可以一口气把这一年的都算完。
当然,有些小伙伴每月的收入并不是固定的,有些小伙伴还有一些额外的收入。
都可以在此基础上根据个人情况做调整哦!!
原文出处:https://www.cnblogs.com/Simple-Small/p/12426260.html
来源:oschina
链接:https://my.oschina.net/u/4416603/blog/3239102