feat(hrm): 薪酬核算新增全勤奖与实出天数,修正实发工资口径
需求:
1. 核算单新增「全勤奖」,与其他津贴一致人工维护,计入应发与实发
2. 「出勤天数」更名为「应出天数」(语义不变,仍是按排班累计的应出勤天数)
3. 「排班工时」改为「实出天数」,取自考勤汇总 hrm_attendance_summary.actual_days;
原 total_work_hours 列保留但不再参与业务(历史数据不删除)
同时修复 3 处会导致实发工资算错的既有缺陷(新建核算正确、但改一次核算单实发就变少):
- 后端 calcActualSalary 收入项漏掉 postSalary / senioritySalary
- 前端 calculateActualSalary 同样漏掉 postSalary / senioritySalary
- HrmSalaryCalculationSaveReqVO.CalculationItem 未声明 postSalary / senioritySalary,
预览保存时这两个金额会被丢弃
并显式对齐 totalIncome 与 calcActualSalary 的收入项口径,两者今后必须一致。
另修复既有隐患:
- HrmAttendanceSummaryDO.yearMonth 未转义,year_month 是 MySQL 保留字,
MyBatis-Plus 生成的 SQL 语法错误(该 Mapper 方法此前从未被调用,本次核算取实出天数时暴露)
SQL:hrm_salary_add_full_attendance_bonus.sql(幂等,含历史数据回填实出天数)
自测(mom-zyjc 实测):
- 核算:应出 22 / 实出 21(取自考勤汇总)/ 全勤奖默认 0 / 实发 = 收入 - 扣除 ✔
- 修改核算单:基本 9000 + 岗位 1000 + 工龄 500 + 全勤奖 500 - 社保 550.83 = 10449.17 ✔