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

新一年的退税又开始了, 到下周四(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 人的视角解读世界。

参考资料

相关推荐
NineData1 天前
从个人开发到企业专属集群,NineData 的产品矩阵怎么做的?
运维·数据库·程序员
集成显卡1 天前
别局限于 Oh-My-Posh,试试 Rust 编写的 starship:极简超快且无限可定制的命令行提示符
程序员·代码规范·命令行
陈随易1 天前
我也曾离猝死很近
前端·后端·程序员
SimonKing1 天前
IntelliJ IDEA 配置与插件全部迁移到其他盘,彻底释放C盘空间
java·后端·程序员
程序员cxuan2 天前
说点掏心窝子的话
后端·程序员
本末倒置1832 天前
告别"话痨"提交记录!Git 压缩 Commit 实战指南,代码洁癖党狂喜
面试·程序员·代码规范
程序员鱼皮2 天前
刚刚,微信终于能用 OpenClaw 了!安卓 iOS 都行,附保姆级教程
ai·程序员·编程·ai编程·openclaw
孟陬2 天前
国外技术周刊第 2 期 — 本周热门 🔥 YouTube 视频 TED 演讲 AI 如何能够拯救(而非摧毁)教育
前端·后端·程序员
陈随易2 天前
深度拆解技术架构的三大鸿沟:企业级Claw vs OpenClaw的工程差异
前端·后端·程序员
得物技术2 天前
Claude Code + OpenSpec 正在加速 AICoding 落地:从模型博弈到工程化的范式转移|得物技术
程序员·ai编程·claude