背景

今年疫情复工后,财务小姐姐给我们普及了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数据,并计算累积收入/累积扣除/累积扣税额

累积收入、累积已扣税:

 #*******************************累积收入+累积已扣税***************************************
def get_all_income_deducted_by_months(sh,m):
"""
sh: excel的表单对象
m: 月份。比如当前月份为3月。那么 m=3.
一般公司都是,当月发放上一个月的薪资。3月份 要计算发放2月份工资时,
总收入 = 1月 + 2月的薪资 + 其它收入 。
总扣税 = 1月已扣税
"""
income = 0 # 总收入金额
tax_deducted = 0 # 已扣税金额
for index in range(3,2+(m-1)+1):
salary = sh.cell(row=2,column=index).value
print("获取第{}列 第{}个月 的薪资: {}".format(index, index-2,salary))
income += salary # 收入累加
tax = sh.cell(row=3, column=index).value
print("获取第{}列 第{}个月 的已扣税: {}".format(index, index - 2, tax))
tax_deducted += tax # 加上其它收入
other_income = sh.cell(row=2,column=15).value
print("其它收入为:{}".format(other_income))
income += other_income
print("加上 {}月 为止的总收入为:{}".format(m,income))
print("到目前为止的总扣税为:{}".format(tax_deducted))
return income,tax_deducted

累积的总扣除项:

 #*******************************扣除项***************************************
def get_total_deduction(sh,m):
"""
sh: excel的表单对象
m: 月份。比如当前月份为3月。那么 m=3.
3月份计算 包含2月在内的扣除项:
总扣除 = 公积金 * 2 + 社保 *2 + 专项扣除项 * 2 + 5000 * 2
"""
# 各项扣除金额(含公积金&社保&附加项)
provident_fund = sh.cell(row=5,column=3).value # 公积金
social_security = sh.cell(row=5,column=4).value # 社保
additional_item = sh.cell(row=5,column=5).value # 附加项
# 总扣除的金额
total_deduction = (provident_fund + social_security + additional_item + 5000)*(m-1)
print("总扣除金额为:{}".format(total_deduction))
return total_deduction

步骤3 - 依据公式计算上月扣税额,并写入excel表中对应月份

 if __name__ == '__main__':
# 打开计税excel表
wb = load_workbook("data.xlsx")
sh = wb["Sheet1"]
# 获取当前月份
m = datetime.datetime.now().month
# 获取总收入、获取总的扣税额 - 到目前为止
income, tax_deducted= get_all_income_deducted_by_months(sh,m)
# 获取总扣除项
total_deduction = get_total_deduction(sh,m)
# 计税总额 = 总收入 - 总扣除项
cur_income = income - total_deduction
print("当前计税金额 = {}(总收入) - {}(总扣除项):{}".format(income,total_deduction,cur_income))
# 最终要扣税 --- 计算公式
# 税 = 计税总额 * 扣除比例 - 累积已扣税 - 速算扣除数
tax_money = 0
if 0<= cur_income <= 36000:
tax_money = cur_income * 0.03 - tax_deducted
elif 36000 < cur_income <= 144000:
tax_money = cur_income * 0.1 - tax_deducted - 2520
elif 144000 < cur_income <= 300000:
tax_money = cur_income * 0.2 - tax_deducted -16920
elif 300000 < cur_income <= 420000:
tax_money = cur_income * 0.25 - tax_deducted - 31920
elif 420000 < cur_income <= 660000:
tax_money = cur_income * 0.3 - tax_deducted - 52920
elif 660000 < cur_income <= 960000:
tax_money = cur_income * 0.35 - tax_deducted - 85920
elif 960000 < cur_income:
tax_money = cur_income * 0.45 - tax_deducted - 181920 print("{}月最终的扣税人民币为:{}".format(m-1,tax_money)) # 将扣税额写入对应的月份
sh.cell(row=3,column=m+1).value = tax_money
wb.save("data.xlsx")

现在是3月份,那么如果收入是每月10000,2月份的扣税金额为:

 

下一个月的时候,只要再运行一下这个脚本,就可以得到3月份的扣税额哦!!

当然,你也可以一口气把这一年的都算完。

当然,有些小伙伴每月的收入并不是固定的,有些小伙伴还有一些额外的收入。

都可以在此基础上根据个人情况做调整哦!!

2020 新个税算的头疼?会 python,这都不是事儿...的更多相关文章

  1. Spring Cloud 2020.0.1 正式发布!真是头疼。。。

    上一篇:Spring Cloud 2020.0.0 正式发布,全新颠覆性版本! 号外!号外!号外! Spring Cloud 2020.0.0 在去年 12 月底,赶在一年的尾巴最后几天仓促发布了,时 ...

  2. 启动崩盘!IDEA 2020 无法启动的解决办法|赠送 IDEA 2020 新功能

    今天早上看到 IDEA 可以升级新版本,想着体验一下新功能,点击升级,然后全部项目工程无法打开. 报错信息如下: Cannot execute command No project found to ...

  3. 2020新Asp.NET敏捷快速开发框架7.0.5旗舰版源码asp.net mvc框架,工具类CRM,工作流

    演示地址: http://frame3.diytassel.com  用户名:system  密码:0000    需要的联系QQ:22539134 一.新添加了 1.多语言功能: 2.代码生成器模版 ...

  4. 浙江省新高中信息技术教材,将围绕Python进行并增加编程相关知识点

    2017年初消息: 浙江省信息技术新教材,即将在2017级(2017年9月入学)高中新生中开始使用. 据了解,与目前的选考(可以理解为高考科目)要求的信息技术教材由3本<信息技术基础>.& ...

  5. 2020年09月15日-项目开发-python二次处理代码文件

    Caterpillar通过将BPMN生成为solidity代码后, 我需要对solidity代码做二次处理,即在其中的特定函数中插入event类型,以便去做事件监听. 最终生成的不仅包括solidit ...

  6. 推荐一款新框架PyScript:在 HTML 嵌入 Python 代码!

    一.介绍 网页浏览器是目前世界上最普遍,最可携的计算机环境.几乎所有人都可以在计算机或是手机上使用网页浏览器,以没有基础设施障碍的方式访问程序. 在 PyCon US 2022 上,知名 Python ...

  7. BF算法和KMP算法 python实现

    BF算法 def Index(s1,s2,pos = 0): """ BF算法 """ i = pos j = 0 while(i < ...

  8. 新安装的win7/win10系统,所有驱动都没安装,插入U盘也无法识别解决方法

    我是使用老毛挑安装的系统,结果安装好之后,才发现所有驱动都没有安装,例如usb,网卡驱动等 解决方法就是先把驱动下载到系统安装盘里面,然后再次进入安装系统界面,相当于重新安装系统,但实际上我们不需要. ...

  9. 【Python笔记】2020年7月30日练习【python用input函数输入一个列表】

    练习课题链接:廖雪峰-Python教程-高级特性-迭代 学习记录: 1.Python当中类似于 三目运算符 的应用 2.Python用input函数输入一个列表 代码实例:对用户输入的一组数字转化成l ...

随机推荐

  1. 对数据集进行最优分箱和WOE转换

    对数据集分箱的方式三种,等宽等频最优,下面介绍对数据集进行最优分箱,分箱的其他介绍可以查看其他的博文,具体在这就不细说了: 大体步骤: 加载数据: 遍历所有的feature, 分别处理离散和连续特征: ...

  2. Jenkins+maven+jmeter+eclipse搭建自动化测试平台

    一.准备工作 1.jmeter准备测试脚本 2.maven环境配置 3.eclipse创建maven项目 4.Jenkins集成项目 二.jmeter准备测试脚本 使用jmeter准备测试脚本(不管录 ...

  3. python语法基础-函数-内置函数和匿名函数-长期维护

    ##################     内置函数        #######################  """ 一共是 68个内置函数: 反射相关的内置函 ...

  4. python中sort和sorted排序的相关方法

    Python list内置sort()方法用来排序,也可以用python内置的全局sorted()方法来对可迭代的序列排序生成新的序列. 1)排序基础 简单的升序排序是非常容易的.只需要调用sorte ...

  5. getcwd() 和 os.path.realpath () 的区别

    http://lemfix.com/topics/7 getcwd()获取当前目录:其他文件调用时,会根据当前文件的位置获取目录,不同的文件调用,值是不一样的. os.path.realpath()获 ...

  6. 国产ROM纷争升级 能否诞生终结者?

    能否诞生终结者?" title="国产ROM纷争升级 能否诞生终结者?"> 相比iOS系统的低硬件高流畅,安卓系统就显得"逼格"低了许多.先不说 ...

  7. Java集合 - 明的博客

    "In this world there are only two tragedies. One is not getting what one wants, and the other i ...

  8. unittest(22)- p2p项目实战(8)-test_class_auto_incre

    # 8.test_class_auto_incre # 使用ddt import requests import unittest from p2p_project_7.tools.http_requ ...

  9. 2016年3月13日 FXStreet首席分析师:欧元/美元下周走势展望

    FX168讯 欧元/美元在经历周初沉闷的走势之后,最终在欧洲央行出台一系列措施促进通货膨胀和经济增长之后怒涨至近一个月最高位.欧洲央行决议公布之前,投资者预期存款利率将下调10至15个基点,并可能进一 ...

  10. git创建/合并分支/删除分支/将修改后的内容同步到GitHub远程仓库

    1.创建分支并切换到刚创建的分支(这里创建新的分支来修改README.md的内容然后将创建的分支与master分支合并,最后删除创建的分支) $ git checkout -b 分支名 Switche ...