# 电力行业人力资源系统需求梳理与实施路线图 > 状态:需求整理稿,供确认,尚未进入编码。 > 目标库:`mom-xgdl`(后端 local profile 数据源)。关联文档:[培训+到期提醒联调方案](hrm_training_and_expire_remind_integration.md)。 --- ## 一、需求总览 电力行业人力资源系统共三段需求,覆盖「人事档案 → 考勤 → 薪酬 → 绩效」全流程,以及面向班组/值守岗位的排班与工时,再叠加培训证书合规管理。 | 编号 | 需求原文要点 | 模块归属 | 当前进度 | |------|--------------|----------|----------| | 需求① | 统筹管理全员人事档案、劳动合同、考勤打卡、薪酬核算、绩效考核全流程业务 | HRM | 待实施(本文档梳理方案) | | 需求② | 针对运维班组、检修班组、值守岗位实现智能排班、工时统计,工时数据同步对接成本核算模块 | MES 排班/工时 + HRM 工时 | 待实施(含与成本模块的对接口径) | | 需求③ | 管理安全培训、技能培训、特种作业证书、从业资质,到期自动提醒,满足电力行业合规管理 | HRM 培训 + 证书/合同提醒 | **已实施完成**(见第六节) | **已确认的总体口径(会话决策)** - 三段需求分阶段推进,先统一梳理、按阶段编码,最后统一回归测试(用户口径「统一改完在测试」)。 - 目标数据库为 `mom-xgdl`,所有菜单/字典/配置/表均写入该库。 - 成本核算模块**当前不存在**,需求②的工时对接采取「先固化工时汇总表 + 对外提供 Api」,成本模块后续另建(本轮不建成本表)。 --- ## 二、现状盘点(已具备的能力) | 业务域 | 已有实体/接口 | 说明 | |--------|---------------|------| | 人事档案 | `hrm_employee`(基本信息/部门/岗位/学历/入职/员工状态/基本工资/薪酬结构ID 等);`hrm_employee_education`、`_emergency_contact`、`_work_history` | 有新增/分页/详情/离职交接接口;**入职/审批不联动回写** | | 劳动合同 | `hrm_employee_contract`,已有动态到期状态 + `REMIND_DAYS=30` + `/expiring-count` | 有到期提醒计数,无站内信(需求③已补) | | 请假/离职/调动审批 | `hrm_leave_application`、`hrm_resignation_application`、`hrm_transfer_application` + BPM | 通过 BPM 审批流;**审批通过后不反写员工主档** | | 交接 | `hrm_user_handover` + `HrmUserHandoverApi.expandUserIds()` | 离职数据交接,各模块查询统一扩展 userId(详见交接规则) | | 考勤 | `hrm_attendance_record`(打卡/clock-in/clock-out)、`_rule`、`_holiday`、`_exception`、`_summary`(汇总/generate);`HrmAttendanceSummaryDO` | **加班时长链断裂:打卡/异常均未产出 overtime 字段** | | 薪酬 | 档案`hrm_employee_salary`、社保`hrm_employee_social_security`/`hrm_social_security_config`/`_scheme`、个税`hrm_tax_rate_config`、请假类型`hrm_leave_type_config`、核算`hrm_salary_calculation`、发放`hrm_salary_payment`(+明细) | **核算只算固定项;加班写死 0、工作日写死 22;缺薪酬结构/员工薪酬档案后台 CRUD** | | 绩效 | `hrm_performance_appraise` + `_item` + `_result`(+`_item`) | 考核方案对象存在;**"指定班组"维度无落地载体** | | 培训/证书 | 需求③新增 `hrm_training`/`hrm_training_participant`;`hrm_certificate`(四类资质+到期字段) | 见第六节 | | 排班(需求②) | MES `mes_cal_plan(_shift/_team)`、`mes_cal_team(_member/_shift)`、`mes_cal_holiday` | 排班套件齐全,**但未落到"人×日"** | | 工时(需求②) | MES `mes_pro_task`(duration 人日)、`MesProTaskApi.getTeamWorkHourSummary`(按班组聚合,1 人日=8 人时) | HRM 已可跨模块调 MES 工时;**无汇总表,实时统计** | | 成本 | ERP 仅 `erp_finance_receipt`/`erp_finance_payment` | **无成本模块** | --- ## 三、需求①「全流程业务」差距分析与建议 ### 3.1 人员档案与劳动合同闭环 需求:全员人事档案 + 劳动合同全流程(签订/续签/到期)。 **现状缺口** 1. `hrm_employee` **缺「用工性质」「所属班组」字段**(运维班/检修班/值守岗等组织维度无法表达)。电力场景班组是核心组织单元,需求②排班、绩效指定班组都依赖它。 2. **审批通过后不反写主档**:离职审批通过 → 员工 `employeeStatus`/`leaveDate` 未自动更新(需手动改);调动审批通过 → `deptId/postId` 未联动。目前离职交接靠 `hrm_user_handover`,但员工状态字段仍靠手工。 3. **无「转正」业务**:`hrm_employee.regularDate` 字段存在但无触发点;试用→在职的状态流转无流程。 4. 劳动合同到期:已有到期计数 + 需求③站内信提醒,**续签动作**是否要走审批、新合同号如何衔接待定。 **建议** - 员工主档补 `employmentType`(用工性质:正式/劳务/外包/实习等,字典) 与 `teamId`/`teamName`(所属班组) —— 班组引用 MES `mes_cal_team` 或 HRM 独立班组表,需与需求②统一口径。 - 离职/调动审批结果**回写主档**(新增 BPM 审批完成监听,更新 employeeStatus/leaveDate/deptId/postId)。 - 新增**转正**动作(入职满试用期 → 正式,写 regularDate,改状态)。是否接 BPM 审批待定。 - 劳动合同增/续签保留现到期提醒链路。 ### 3.2 考勤打卡 需求:考勤打卡全流程(规则/打卡/汇总),为薪酬提供加班/缺勤。 **现状缺口** 1. `hrm_attendance_record` 打卡(clock-in/clock-out)存在,但**加班时长从未被计算**:无 overtime 写入点。 2. 有 `_exception`(异常/补卡)、`_rule`、`_holiday`、`_summary`(generate 汇总),但汇总字段与薪酬核算字段**未打通**。 **建议** - 打通"打卡/规则/节假日 → 每日考勤(含应出勤、实出勤、**加班时长 overtimeHours**、迟到早退) → 月度汇总"。 - 明确加班口径(超出规则工时部分 / 法定节假上班等),加班源数据由考勤产出,供薪酬消费。 ### 3.3 薪酬核算 需求:薪酬核算全流程。 **现状缺口(核心断链)** - `HrmSalaryCalculationServiceImpl` 核算**只取档案固定项**: - `overtimePay = BigDecimal.ZERO`、`overtimeHours = BigDecimal.ZERO`(**从不读考勤加班**); - `workDays = 22` **写死**(不从考勤/日历得出当月应出勤); - 请假扣款只读"已审批通过的请假记录"(`hrm_leave_application`),**不读考勤缺勤**,`leaveHours` 相关口径待核。 - **绩效结果未参与核算**:performanceSalary 从员工档案取固定值,**不读绩效结果表**。 - **无薪酬结构/员工薪酬档案的后台 CRUD**:`HrmSalaryStructureDO`、`HrmEmployeeSalaryDO` 仅被核算代码引用,`controller/admin/salary` 下只有社保/核算/发放/配置/税率/请假类型,缺 `HrmSalaryStructureController`、`HrmEmployeeSalaryController` → 前端无法维护"薪酬结构=固定+绩效+补贴+加班"与员工个人薪酬档案。 **建议** - 核算输入补齐三条链路:①考勤(加班时长/缺勤天数) → 加班费/扣款;②绩效结果 → 绩效工资;③请假/缺勤 → 扣款。三者乘以当人薪酬档案单价。 - 补建薪酬结构 + 员工薪酬档案后台 CRUD + 菜单权限。 - 建立「薪酬结构项 × 系数」,加班费 = 加班时长 × 时薪(由基本工资/应出勤折算),先与用户确认计价口径。 ### 3.4 绩效考核 需求:绩效考核全流程。 **现状缺口** - 考核实体(`appraise`/`item`/`result`)已具备,但**"2-指定班组"的 scopeType 无落地载体**(班组维度未建),指定人的结果与薪酬/培训联动弱。 - 考核结果如何进入薪酬(绩效工资)链路(见 3.3)需打通。 **建议** - 绩效对象落库到"员工(或班组)",班组维度复用需求①补的班组载体。 - 确认绩效结果 → 薪酬核算的取值规则(结果等级/分数 × 绩效工资档)。 ### 3.5 需求①建议实施子项小结 | 子项 | 涉及 | 说明 | |------|------|------| | A. 员工主档扩展 | `hrm_employee` + 字典 | 加 用工性质 / 所属班组(与②统一口径) | | B. 审批结果回写 + 转正 | HRM service + BPM 监听 | 离职/调动反写主档;转正动作 | | C. 考勤加班打通 | 考勤相关 service/mapper | 加班时长产出口径 | | D. 薪酬核算接考勤/绩效 | `HrmSalaryCalculationServiceImpl` | 加班费、应出勤、绩效工资、扣款 | | E. 薪酬结构与档案 CRUD | 新增 2 Controller + 菜单 | 后台可维护薪酬模型与个人档案 | | F. 绩效班组落地 + 结果入薪酬 | 绩效对象扩展 | 与 A/D 联动 | --- ## 四、需求②「排班 + 工时 + 成本对接」差距分析与建议 需求:对运维班组、检修班组、值守岗位**智能排班**、**工时统计**,工时数据**同步对接成本核算模块**。 ### 4.1 排班 **现状缺口** - MES `mes_cal_*` 排班套件齐全:`cal_plan`(排班计划) → `cal_plan_shift`(班次)、`cal_plan_team`(参与班组)、`cal_team_member`(班组成员,`userId`↔系统用户)、`cal_team_shift`(班组×班次×日期)、`cal_holiday`(节假日)。 - **可推演到"员工×日"的排班,但未落成明细**:值守岗位逐人逐日的班次安排(白/夜/休)没有物化结果。 - **无"智能"能力**:需明确智能是指(a)自动按规则生成排班表(合规:连续工时/休息间隔/班次均衡),还是(b)仅固化排班看板供查询。 **建议** - 在 `mes_cal_team_shift` 之上**固化"员工级排班明细"**(`mes_cal_schedule_detail`:员工×日期×班次),作为工时/值守合规的基准。 - "智能"按规则引擎最小化实现:先按班组班次模板生成 + 人工微调 + 合规校验,后续再谈自动优化。 - 值守(24h)岗位的排班口径(三班倒/白夜休等)需用户确认班次库。 ### 4.2 工时统计与成本对接 **现状缺口** - 报工工时:MES `mes_pro_task` 时长 duration(人日,1=8h),`MesProTaskApi.getTeamWorkHourSummary` 已按班组聚合,**HRM 已跨模块调用**(实时统计,无汇总表)。 - **无成本模块**(ERP 仅收付款)。需求原文"对接成本核算",若坚持实时算成本,会牵出 ERP 成本域的物料/人工/制造费用三要素,范围过大。 **建议(沿用已确认口径:先固化,不建成本)** - 新增**月度工时汇总表**(员工×班组×工时口径:排班工时/实际工时/加班工时,源自 MES 排班明细 + 报工),并对**对外提供 `Api`** 供后续成本模块消费。 - 人工成本口径:工时 × 员工时薪(薪酬档案) 可作**软成本预览**,但不落 ERP 成本总账(待用户确认是否本轮要做)。 --- ## 五、需求③(已完成)交付说明 需求③已实施完成并通过编译、种子落库 `mom-xgdl`: - **培训管理**:`hrm_training` + `hrm_training_participant`(草稿/待开展/已完成/已取消;编号 PX 自动生成;参训人批量添加/成绩/是否合格;`/hrm/training/*` 与 `/hrm/training-participant/*` 全套接口)。 - **证书/合同到期提醒**:每日 `infra_job`(`hrmExpiryRemindJob` 08:00) + 证书/合同列表懒触发兜底;Redis 日锁+60 天去重;按员工 `userId` 发站内信;提醒天数 `infra_config`(默认 30)可调。 - **联动发证**:培训完成时对 `is_pass=1` 且未发证的参训人生成 `hrm_certificate`(安全→类型4、技能→类型3,证书有效期=完成日+`cert_validity_months`),回写 `certificate_id` 防重。 - **证书筛选**:证书分页新增 `expiryType`(1 即将到期/2 已过期)。 - 联调方案文档已出([hrm_training_and_expire_remind_integration.md](hrm_training_and_expire_remind_integration.md))。 > 遗留:运行时端到端验证待用户环境就绪后执行(当前 `mom-xgdl` 无员工测试数据)。 --- ## 六、总体实施路线图(建议阶段) > 依赖关系:班组口径(需求①A) → 排班明细(需求②) 前置打通后,绩效指定班组/工时汇总才不返工。 | 阶段 | 内容 | 前置 | 产出 | |------|------|------|------| | **P0 已交付** | 需求③ 培训 + 到期提醒 | 无 | 已落地 + 联调文档 | | **P1 组织口径** | 需求①A 员工主档扩展(用工性质/班组) + 需求②班组口径统一 | P0 | 字典/字段/班组载体 | | **P2 人员闭环** | 需求①B 审批回写/转正 + 劳动合同续签口径 | P1 | BPM 监听 + 转正动作 | | **P3 考勤→薪酬** | 需求①C 考勤加班 + D 薪酬核算接考勤/绩效 + E 薪酬结构/档案 CRUD | P1 | 考勤/薪酬链路闭环 | | **P4 绩效** | 需求①F 绩效班组落地 + 结果入薪酬 | P1/P3 | 绩效→薪酬取值 | | **P5 排班+工时** | 需求② 员工级排班明细 + 月度工时汇总表 + 对外 Api | P1(班组) | 排班看板基准 + 工时 Api | | **P6 成本(另规划)** | ERP 成本域(人工/物料/制造) 消费工时 Api | P5 | 需求②"对接成本"落点 | > 每阶段遵循本仓库规则:接口变更出 `docs/` 前端联调方案;SQL 种子含菜单/字典/权限并落 `mom-xgdl`;跨模块改动做编译检查。**成本模块是否本轮就建、智能排班到何种程度,见下节待确认。** --- ## 七、待确认的开放决策 1. **班组载体归属**:员工所属班组引用 MES `mes_cal_team`(字段关联 `teamId`),还是 HRM 独立班组表?→ 影响 P1/P2/P5 三处。 2. **用工性质字典**:取值集合(正式/劳务/外包/实习/退休返聘/其他?)。 3. **转正流程**:转正是手动动作还是走 BPM 审批(试用期到自动提醒 + 审批后转正)? 4. **薪酬加班/扣款计价口径**:加班费 = 加班时长 × 时薪?时薪 = 基本工资 ÷ 当月应出勤天数?缺勤扣款口径同源?绩效工资 = 绩效结果分数/等级 × 固定绩效档? 5. **绩效考核范围**:本轮考核"指定班组"是否需要完整班组成员逐一评,还是考核到班组再分摊? 6. **需求②"智能"程度**:自动排班仅做规则模板 + 人工微调 + 合规校验,还是需要自动排班算法? 7. **成本模块范围**:确认本轮不建 ERP 成本域,只固化月度工时汇总表 + 对外 Api(软成本预览),成本核算另行规划 —— 是否认可? --- *本文档为需求梳理稿,待上述决策确认后按阶段实施;未经确认不进入编码。*