背景

今年疫情复工后,财务小姐姐给我们普及了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. The sequence and de novo assembly of the giant panda genome.ppt

    sequencing:使用二代测序原因:高通量,短序列 不用长序列原因: 1.算法错误率高 2.长序列测序将嵌合体基因错误积累.嵌合体基因:通过重组由来源与功能不同的基因序列剪接而形成的杂合基因 se ...

  2. Resin介绍及其使用配置

    Resin介绍及其使用配置一 Resin是一个提供高性能的,支持 Java/PHP 的应用服务器.目前有两个版本:一个是GPL下的开源版本,提供给一些爱好者.开发人员和低流量网站使用:一种是收费的专业 ...

  3. 吴裕雄--天生自然 JAVASCRIPT开发学习:对象 实例(3)

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  4. TPO1-3 Timberline Vegetation on Mountains

    Wind velocity also increase with altitude and may cause serious stress for trees,as is made evident ...

  5. Angular开发者指南(七)依赖注入

    依赖注入 依赖注入(DI)是一种软件设计模式,处理组件如何获取其依赖关系. AngularJS注入器子系统负责创建组件,解析它们的依赖关系,并根据请求将它们提供给其他组件. 使用依赖注入 DI遍布An ...

  6. spring学习笔记四:AOP

    AOP(Aspect Orient Programming),面向切面编程,是对面向对象编程OOP的一种补充 面向对象编程使用静态角度考虑程序的结构,而面向切面编程是从动态角度考虑程序运行过程 AOP ...

  7. 输入一个url之后到底发生了什么 - Hurry

    背景 最近学习到 nginx 方向代理发现,nginx 可以将你的请求以 http 块的 server 形式代理到请求的域名或者 ip 地址. 一个简单的 nigx 配置如下: 12345678 se ...

  8. web虚拟主机的三种配置方法

  9. docker 使用:创建nginx容器

    在上一节中了解了镜像和容器.对于镜像可以这样的理解,镜像相当于一个光盘,里面刻录了一个系统这个系统已经带有相关的服务了. 容器是通过镜像这个光盘安装的一个操作系统,光盘预加了什么服务,容器就有什么服务 ...

  10. .Java中的异常、断言、日志【草稿下,Log4j专题】

    (本章主要讲解Java里面比较核心的一块内容--异常处理,Java异常处理机制,一致都是比较复杂的一块,而很多时候如果写程序的时候能够适当地注意对应的一些异常处理情况,那么就会在开发过程节省一大部分时 ...