出勤天数×底薪核算:中途入职折算、病假打折、全勤奖,一个脚本对清

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

上一篇加班费倍率复核管的是「加班那部分钱」,这篇往前钻一层:底薪部分。工资条上的应发 = 出勤折算底薪 − 请假扣款 + 全勤奖,坑密度比加班费还高:

脚本做什么

输入两张表:考勤表(姓名/日期/状态:出勤·事假·病假·缺勤)+ 工资条(姓名/底薪/入职日期/应发合计)。对每个人按标准算法算出应发,和工资条逐人比对:

实跑结果:9 人埋 6 类坑,全对出

2026 年 9 月(21 个工作日,含中秋 3 天法定假),底薪 6525(日薪 300),全勤奖 300:

姓名情况工资条脚本结论
张三/郑十一全勤对照组正确一致,零误报
李四事假2天,工资条按全月底薪发6525多发 600 → 事假未扣
王五病假3天,被按事假全额扣5925少发 540 → 病假未按60%计发
赵六9-15 中途入职,正确折算3600一致(折算 6525×11/21.75+300)
孙七缺勤2天,工资条按全月底薪发6525多发 600 → 缺勤未扣
吴十事假1天,日薪按/30算且照发全勤6607.5多发 382.5 → 日薪按30天折算且照发全勤(复合错法)
周九考勤表有、工资条无—漏发
钱十二考勤表无、工资条发 53005300凭空多算

这次实跑揪出的真坑:复合错法

吴十的坑我故意埋成「双重错」:日薪按 30 天折(少扣 82.5)且请了事假还照发全勤奖(多发 300)。如果原因猜测还是 if/elif 只报第一个吻合的假设,两个假设各自单独都不等于 6607.5,会报「未匹配到已知错法,需人工核对」——排查者就得从零开始。

解法:把已知错法的组合也列进候选(「日薪按30天折算且照发全勤奖(复合错法)」),命中后写明是复合错法。上一条教训(解释要并列)的延伸:单假设覆盖不了真实世界,错误经常是叠加的。

边界 7 项全过

  1. 考勤表缺列 → 报错并打印实际表头,不静默
  2. 坏日期「9月1日」→ 报错不静默跳过
  3. 空考勤表(只有表头)→ 报错不崩
  4. 非法状态(如「旷工!」)→ 报错并列出合法值
  5. 文件不存在 → 报错
  6. HOLIDAYS 覆盖生效(法定假天数随之变化)
  7. 同输入两次运行输出逐格一致(内容级幂等)

用起来

python attendance_payroll_recon.py 考勤表.xlsx 工资条.xlsx 复核结果.xlsx
# 可选:HOLIDAYS=2026-10-01,2026-10-02 SICK_RATE=0.6 FULL_BONUS=300

脚本和生成测试数据的自测脚本在 gitee 仓库,也可以直接找我们定制:考勤系统导出格式千奇百怪(钉钉、企业微信、手工 Excel),按你的实际格式改好交付。

相关:加班工时对账 · 加班费倍率复核 · 考勤月度汇总 · 三表联合工资体检单 · 请假状态筛选

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