tuqin
4 天以前 0d30e44d3cf4118222f6de88424a39a04d1642e9
分支
用户 tuqin <tuqin@tuqin.cn>
星期二, 十一月 3, 2026 22:11 +0800
提交者 tuqin <tuqin@tuqin.cn>
星期二, 十一月 3, 2026 22:11 +0800
提交0d30e44d3cf4118222f6de88424a39a04d1642e9
目录 94f17267e060dddb3b86f13742691986103e35b7 目录 | zip | gz
上一版本 612172aacb1b05162270ff846441f1c6336d0321 查看 | 对比
fix(hrm): actual_days 改为可空,区分「未录考勤」与「实出0天」

问题:hrm_salary_calculation.actual_days 是 INT NOT NULL DEFAULT 0,
导致「该月未生成考勤汇总」和「实出 0 天」都存成 0,无法区分。
缺勤扣款逻辑于是把未录考勤当成实出 0 天,把整月工资扣光
(11 月重算时 132 人实发全部归零)。

修复:字段改为 NULL DEFAULT NULL,语义约定:
- actual_days IS NULL → 未生成考勤汇总,视为满勤,不扣旷工
- actual_days = 0 → 实出 0 天(人工填写),按 100% 扣旷工
- actual_days = N → 扣 应出-N 中超出请假单覆盖的部分

验证(基本1950/岗位11383.60/应出30):
- 实出 NULL → 缺勤0.00,实发13000.00
- 实出 0 → 缺勤13333.60(封顶),实发0.00
- 实出 20 → 缺勤4444.53,实发8684.32
- 实出 30 → 缺勤0.00,实发13128.85

另:11 月 132 条核算单已按「未录考勤」置 NULL 并重算,
实发恢复正常(合计 599521.74),撤销的确认状态已从备份表还原。
已添加1个文件
17 ■■■■■ 文件已修改
sql/mysql/hrm_salary_calculation_actual_days_nullable.sql 17 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史