package cn.iocoder.yudao.module.hrm.service.salary; import cn.iocoder.yudao.module.hrm.controller.admin.salary.vo.HrmSocialSecuritySchemeSaveReqVO; import cn.iocoder.yudao.module.hrm.dal.dataobject.salary.HrmSocialSecuritySchemeDO; import java.time.LocalDate; import java.util.Collection; import java.util.List; import java.util.Map; /** * 社保公积金方案 Service 接口 * * @author 超级管理员 */ public interface HrmSocialSecuritySchemeService { /** * 创建社保公积金方案(含适用部门) * * @param createReqVO 方案信息 * @return 方案ID */ Long createScheme(HrmSocialSecuritySchemeSaveReqVO createReqVO); /** * 更新社保公积金方案(含适用部门,整组替换) * * @param updateReqVO 方案信息 */ void updateScheme(HrmSocialSecuritySchemeSaveReqVO updateReqVO); /** * 删除社保公积金方案 * * @param id 方案ID */ void deleteScheme(Long id); /** * 获取社保公积金方案 * * @param id 方案ID * @return 方案信息 */ HrmSocialSecuritySchemeDO getScheme(Long id); /** * 获取社保公积金方案列表 * * @param status 状态(可选) * @return 方案列表 */ List getSchemeList(Integer status); /** * 获取方案绑定的适用部门ID列表 * * @param schemeId 方案ID * @return 部门ID列表 */ List getSchemeDeptIds(Long schemeId); /** * 批量获取方案绑定的适用部门ID(方案ID -> 部门ID列表) * * @param schemeIds 方案ID集合 * @return 方案ID -> 部门ID列表 */ Map> getSchemeDeptIdMap(Collection schemeIds); /** * 按部门解析核算用的社保公积金方案 * * 优先级:该部门绑定的方案(生效日期不晚于核算期间,取最新)> 全局默认方案(未绑定任何部门的方案中生效日期最新者) * * @param deptId 员工所在部门ID(可为空) * @param periodDate 核算期间的月初日期 * @return 方案;查不到返回 null,由调用方使用默认比例常量 */ HrmSocialSecuritySchemeDO resolveSchemeByDeptId(Long deptId, LocalDate periodDate); }