fix(hrm): 社保扣款在员工未加社保时误扣、两方案扣款相同
客户反馈两点,实测数据确认都是代码问题。
一、没添加社保的员工也被扣了社保(102 人,多扣 21363.30 元)
根因:buildSalaryCalculation 里社保扣除无条件计算,
社会基数 = 社保档案基数 ?: 基本工资,
比例 = 方案比例 ?: 默认(养老0.08 + 医疗0.02 + 失业0.005 = 10.5%)。
于是没有社保档案的员工按「基本工资 1950 × 10.5% = 204.75」扣款,
132 条核算单里有 100 条就是这个金额。
修复:只有员工配置了社保档案才扣社保,没有档案扣款为 0
(与公积金口径保持一致)。
二、两个不同方案扣款金额完全一样(兵团五险 与 地方五险 都是 550.83)
根因:代码只累加了「养老 + 医疗 + 失业」三项个人比例,
漏掉了方案里配置的「大病医疗个人」与「长期护理个人」比例,
而这两个险种的个人比例正是两个方案唯一的差别
(兵团:大病 0.25% + 长护 0.15%;地方:大病 0.50% + 长护 0.25%)。
修复:个人应缴比例 = 养老 + 医疗 + 失业 + 大病医疗 + 长期护理。
修复前后(2026-10,132 条,均为待确认状态,已重新核算):
修复前:204.75 x 100 人、550.83 x 30 人、682.50 x 1、205.80 x 1
社保合计 37888.20
修复后:0.00 x 102 人(无社保档案,不再扣)
方案2(兵团五险)571.81 x 23 人 = 5246 x 10.90%
方案3(地方五险)590.18 x 9 人 = 5246 x 11.25%
社保合计 17319.63
顺带核对过的其他字段来源(未发现新问题):
- 基本工资/岗位工资/工龄工资 <- 员工档案
- 绩效/餐补/交通/其他补贴 <- 薪酬档案(hrm_employee_salary 当前 0 条,所以核算里全为 0,
需要客户先录薪酬档案才会有这些项)
- 加班费 <- 审批通过的加班申请(无申请为 0,管理类别不计)
- 公积金 <- 方案个人比例>0 且档案公积金基数>0 才扣(已在上轮修复)
- 个税 <- 个税税率配置,应纳税所得额已扣除社保与公积金
- 缺勤扣款 <- 考勤汇总 + 请假单