如何给程序员讲明白个人所得税: 汇算清缴的来龙去脉

新一年的退税又开始了, 到下周四(3月21日)就可以无需预约直接在 app 上办理了, 祝大家能多退点钱。

我不希望自己只是被稀里糊涂的退了一笔钱, 在研究了税法的前因后果后, 才写出了这么一篇文章。

在 2019 年税改前, 老的税法从1980年开始已经实行四十年了。每一年都被吐嘈, 但是每一年都没改。就像是一段四十年没改过的代码, 历史包袱太重。即使大家都知道里面有很多 bug, 也没人敢动。因为在修复问题的同时, 还要保证良好的兼容性。

对程序员来说, 理解一样东西最好的方法就是把这个东西重新做一篇(黑话 "re-engineering")。让我们回到2019年, 看看那时候老税法的问题和修复方案, 就会彻底明白:

  • 为什么每个月的税越交越多?
  • 为什么每年要汇算清缴?

四十年的祖传代码: 2019年以前的税法

先上线再说

本着 "先上线再说" 的精神, 从 1980 年开始我国就开始执行了一个很简单的税收方案。

如何保证政策落地呢? 一家一户收显然是非常麻烦的, 很容易遗漏。所以选择让企业帮员工统一代缴, 在发工资前就给你扣了, 看你还怎么溜。这样政府只要看牢几个大企业就行了, 非常好落地。随之而来的, 工人阶级也成为了我国税收的主力军, 所以有人又称之为 "工薪税"

如何保证公平呢? 个税在国外又叫 "罗宾逊税" , 罗宾逊是英国文学上著名的劫富济贫的好汉, 其实就是 "劫富济贫税"。个税的一个重要目标就是缩小收入差距。所以要对穷人少收, 富人多收。于是采用了 "累进税率法" , 就是将你的税收进行分段, 处于越高段位的收入, 税率越高。 2019 年之前的累进税率表如下

假如我2017年3月的收入是 14600, 那我应该纳税多少钱呢? 首先当时每个月有统一的税前扣除 5000, 所以我的应纳税所得额只有 9600:

  • 不超过 1500 的部分按照 3% 纳税: 1500*0.03=45
  • 1500-4500 部分按照 10% 纳税: 3000*0.1=300
  • 4500-9000 部分按照 20% 纳税: 4500*0.2=900
  • 超过 9000 部分按照 25%: 600*0.25=150
  • 总计纳税: 45+300+900+150=1395

不过这个算法可以用 "速算扣除数" 优化下, 只要乘以应纳税所得额对应的税率再减去速算扣除数就可以了: 9600*0.25-1005=1395。可以看到结果和上面是一模一样的。

1980 出台方案非常简单, 就是 每个月收入减去统一的税前扣除后, 再按照累进税率缴纳。

上线遇到了两个小bug

匆匆上线的系统必然有客户反馈 bug, 程序还比较好改, 税法可就难了啊。

首先是不同地方面临的生活成本不同, 上海, 深圳, 北京的物价和西安, 长沙能一样吗? 每个人的生活压力也不同, 有的人上有老, 下有小;而有的人单身汉, 自由快活。统一都用5000元的税前扣除, 是不是不太合适?

其次是更加难解的公平性问题。税法隐含的假设是, 大家每个月的盈利都是很稳定的。虽然对程序员来说确实如此, 但是还有很多行业的周期波动很大, 比如旅游业, 商场百货, 临时工等等, 俗称 "三年不开张, 开张吃三年"。他们的年收入未必有程序员高, 但是却因为某个月的收入很多, 到头来交的税反而更多, 就起不到 "劫富济贫" 的效果了。

第一个补丁: 累计预扣

既然客户反馈了 bug, 那掌管"国家程序"的"超级程序员"们当然就要修复。

先来思考最朴素的修复方案。既然有的人月度收入波动有点大, 那年度收入总是稳定了的吧。那我们可以直接在每一年底, 按照年度收入, 计算累进税率来收税。

虽然能解决问题,但是既然改的是老代码, 得考虑下兼容性。之前是按月收取, 如果突然改成按年收税, 政府每个月的开支咋办? 原本按月收, 每个月交的税不会很多, 按年收入的话就需要一次性收一大笔钱, 可能有的企业就周转不过来了。

所以最后还是得按月收。但是我们还是可以按年度累计收入来计算累进税, 每个月只需要缴纳其中的增量部分 。这种方法就叫做 "累计预扣"

最新税法的累进税率表如下:

假设我一月份应纳税所得 30000 元, 二月份应纳税所得 100000 元, 三月份应纳税所得也是 100000 元, 那么每个月的税额计算如下:

  • 一月份累计收入 30000, 直达到第 1 级, 纳税 30000*0.03=900
  • 二月份累计收入 130000, 达到了第 2 级。我们按照 2 级计算完毕后, 再减去之前的累计纳税, 即是本月的纳税额: 130000*0.1-2520-900=9580
  • 三月份累计收入 230000 元, 达到了第 3 级: 230000*0.2-16920-9580-900=18600

三月份的纳税所得虽然也是 100000 元, 但是纳税额却比二月份多了接近一倍。因为随着累计收入的不断增加, 本月收入会进入越来越高的税率区间, 纳的税也就越来越多:

累计预扣也是 19 年税改的重要内容, 因为不需要直接参与, 所以宣传得没有汇算清缴多, 但是大家是能实际感受到: 每个月的税越交越多。

这点大家普遍觉得能接受, 因为纳税的总额并没有变多, 还是等于把全年的收入按累进税率算一下, 相当于把前几个月的税给延后了。在此期间还能用这笔钱做点别的事情, 对个人是更有利的。

第二个补丁: 汇算清缴

bug 修到这里感觉还不错, 但是继续修下去又发现了另一个问题。

"累计预扣" 要如何落地呢? 之前都每个月单独计税的, 不需要之前的状态。现在还得保存一个累计的值, 如果一年中没有换工作还好办, 如果中间换了工作呢? 回忆一下, 个人所得税虽然叫 "个人" 所得税, 但其实都是企业代缴的。当前的企业怎么可能知道你在上一家企业的累计收入呢? 这可是商业机密啊。

所以当你换工作后, 现行税法会从头开始累计:

这就会导致 "累计预扣" 的税钱比较少。这是不公平的。

有的人更惨一些, "累计预扣" 反而会多交。上面的这种有稳定工作的, 交的都是 "工资税" 。还有些人根本没有稳定的工作, 也不存在一个帮他计算 "累计" 的企业了, 只能按照每次所得进行纳税, 有点像之前的老税法, 这种叫做 "劳务税" :

上述问题全部来自于 "累计收入" 的信息不可知。但是国税局对你的累计收入是一清二楚的。于是我们就可以修复这个问题了, 在每年结束后让个人再进行一次 "汇算清缴", 这个算出来的数字肯定是准确, 跟之前的预扣只要多退少补就行了。

  • 换工作的人预扣税一般会少, 需要补税
  • 做劳务临时工的人一般预扣会多, 需要退税。汇算清缴的一个重要意义也是平衡了工资和劳务所得。

实习生表面上有稳定的公司, 其实交的是劳务税。至今记得 2018 年我在公司实习, 2019 年退了一大笔钱, 高兴坏了。

  • 除此之外, 为了公平性, 国家还增加了赡养老人, 子女教育, 住房贷款等多个专项扣除, 让我们在满足条件的时候能够进一步退税

End

作者:元青

微信公众号 「技乐书香」

关注我,用程序员和 i 人的视角解读世界。

参考资料

相关推荐
小李小李不讲道理7 小时前
行动+思考 | 2024年度总结
前端·程序员·年终总结
聪小陈1 天前
圣诞节:记一次掘友让我感动的时刻
前端·程序员
百万蹄蹄向前冲1 天前
2024不一样的VUE3期末考查
前端·javascript·程序员
陈哥聊测试2 天前
软件格局在变,谁能扛起国产替代的大旗?
安全·程序员·产品
黄油饼卷咖喱鸡就味增汤拌孜然羊肉炒饭3 天前
SpringBoot如何实现缓存预热?
java·spring boot·spring·缓存·程序员
少年姜太公3 天前
从零开始详解js中的this(下)
前端·javascript·程序员
凌虚3 天前
Kubernetes APF(API 优先级和公平调度)简介
后端·程序员·kubernetes
小华同学ai3 天前
ShowDoc:Star12.3k,福利项目,个人小团队的在线文档“简单、易用、轻量化”还专门针对API文档、技术文档做了优化
前端·程序员·github
小青鱼5 天前
AI编程-Cursor从入门到精通系列之常用概念及解释(二)
人工智能·程序员
捡田螺的小男孩6 天前
参数校验的十个建议!收藏好,别再给测试机会提bug~
java·后端·程序员