三表联合工资体检单:考勤×加班×工资条,一人一张对清

2026-10-07 · 喵窝资源铺 · 实跑验证过的开源脚本

前面两篇各管一段:出勤×底薪核算管底薪,加班费倍率复核管加班。但真实工资条的错是跨表的——考勤说全勤、加班记录有 4 小时、工资条却比底薪还少 600。单看任何一张表都对不出来,必须三张表对到一个人头上。这篇把三表联合,逐人生成一张「工资体检单」:

设计上把「差额」和「矛盾」分成两列:金额对上了不等于没问题(见下面第二个真坑),一致(有矛盾项) 是独立结论,不藏在差额里。

实跑结果:9 人 8 类异常全对出,对照组零误报

2026 年 9 月(21 个工作日,9/25~27 中秋法定假),底薪 6525(日薪 300、时薪 37.5):

姓名埋的坑脚本结论
郑十一正确发薪+正确加班费(对照)一致,零误报
李四事假 2 天,工资条按全月底薪发多发 600 → 事假款未扣
王五周末加班 4h,工资条一分加班费没发少发 300 → 加班费疑似未发
赵六缺勤 2 天,工资条照发全额多发 600 → 缺勤未扣
孙七考勤全勤,工资条却少发 600少发 600 → 疑似扣了事假款(三方矛盾,只有联合核对能看见)
周九法定假加班 3h 被标成「周末」类型与日历矛盾 + 少发 225(错标让 3× 变 2×)
吴十事假当天报了 4h 加班,加班费和扣款互相抵差额 0 但 一致(有矛盾项)——加班与事假同日
刘十三考勤有记录、工资条没这个人漏发
钱十二三表都没他,工资条发 5300凭空多算

这次实跑揪出的两个真坑

坑一:调休的周六不是周末。第一版测试数据我把 9 月 26 日(周六)当周末加班日埋数据,算出来就错了 112.5 元——9/26 是中秋法定假,加班该按 3× 算,真周末 2× 的只有 9/19 那种周六。法定假日覆盖周末,日历校验必须先查法定节假日表、再查 weekday。而且错误是叠加的:周九那笔「法定假 3h 标成周末」既产生一条矛盾记录,又把应发金额带偏 112.5(37.5×3h×1 倍差),单假设「类型标错了」解释不了金额差异,得两条结论一起给。

坑二:金额对上了也可能有矛盾。吴十事假扣 300、同一天又报了 4h 加班费 225,工资条发 6450 和正确应发分毫不差——但「请着事假还在加班」本身就是考勤脏数据。如果体检单只看差额,这个人会被标「一致」蒙混过关。所以结论拆成三态:一致 / 一致(有矛盾项) / 多发或少发,矛盾项永远单独成列。这是前几篇「解释要并列、错误会叠加」教训的延续:对账工具最危险的不是报错,是把脏数据洗成正常。

边界 8 项全过

  1. 考勤表缺列 → 报错并打印实际表头,不静默
  2. 坏日期「9月1日」→ 报错不静默跳过
  3. 三张表任何一张空表(只有表头)→ 报错不静默通过
  4. 文件不存在 → 报错
  5. HOLIDAYS 覆盖生效(把 9/19 设成法定假,日历校验随之翻转)
  6. 同输入两次运行,输出 xlsx 内容逐格一致(内容级幂等)
  7. 非法加班类型(如「节假日吧」)→ 报错并列出合法值
  8. 非法考勤状态(如「旷工!」)→ 报错并列出合法值

用起来

python salary_full_check.py 考勤表.xlsx 加班记录.xlsx 工资条.xlsx 体检单.xlsx
# 可选:HOLIDAYS=2026-10-01,2026-10-02 SICK_RATE=0.6

输出每人一行:出勤/事假/病假/缺勤、加班构成(平日/周末/法定小时)、折算底薪、加班费应发、正确应发 vs 工资条、差额、矛盾与原因。xlsx 和控制台报告同时出。

不想自己摆三张表的格式?下载体检单三表 xlsx 模板(考勤表 / 加班记录 / 工资条 + 一页说明),照着列名填就能跑。脚本、测试数据生成器(gen_salary_full_testdata.py,9 人埋 8 类坑自带断言)和边界自测(edge_salary_full_test.py,8 项)都在 gitee 仓库。三张表来自不同系统(钉钉/企业微信/财务 Excel)、格式各不相同对不上?找我们按你的实际格式定制改好交付。

相关:出勤天数×底薪核算 · 加班费倍率复核 · 加班工时对账 · 考勤月度汇总

喵窝资源铺 · AI 自动化脚本服务 · 虚拟物品,交付后不退款 · 每单附真实运行截图