# 社保公积金账户关联根部门 + 员工新增自动带出账户 > 生成时间:2026-08-16 > 涉及模块:设置(账户管理)、花名册(新增员工)、组织架构(根部门关联) > 核心文件:`backend/src/routes/social.routes.ts`、`backend/src/routes/department.routes.ts`、`backend/src/services/contract.service.ts`、`frontend/src/pages/Settings.tsx`、`frontend/src/pages/roster/modals.tsx`、`frontend/src/lib/api-services.ts` --- ## 一、需求背景 1. 社保公积金账户创建后,需要关联组织架构的根节点(公司/分公司/子公司,即 level=0 的部门)。 2. 员工新增时,选定部门后自动带出该部门所属根节点关联的社保公积金账户,可手工调整,确定后按账户当前生效的年度标准执行。 --- ## 二、完成内容 ### 1. 账户关联组织架构根节点 #### 前端:设置页 → 社保公积金账户 Tab - 新建/编辑账户弹窗新增"关联根部门"区域 - 列出所有 level=0 根部门(公司/分公司/子公司),可多选勾选 - 保存账户时同步关联到选中的根部门 - 编辑时自动加载已关联的部门并回显勾选状态 #### 后端新增 API | 方法 | 路径 | 说明 | |---|---|---| | `PUT` | `/social/accounts/:id/departments` | 批量设置账户关联的根部门(先清除旧关联,再批量设置新关联,仅限 level=0) | | `GET` | `/social/accounts/:id/departments` | 查询账户已关联的根部门列表 | | `GET` | `/social/department-account/:departmentId` | 按部门带出适用账户 + 当前生效年度标准 | #### 部门 API - `PUT /departments/:id` 的 schema 新增 `socialAccountId`、`housingAccountId` 可选字段 - 更新时写入 `department.socialAccountId` / `department.housingAccountId` #### 账户关联逻辑 - 账户类型为 `SOCIAL` 时,写入 `department.socialAccountId` - 账户类型为 `HOUSING` 时,写入 `department.housingAccountId` - 设置新关联前,先清除该账户的所有旧关联(`updateMany` 置 null) - 仅允许关联 `level=0` 的根部门 --- ### 2. 员工新增时自动带出账户 #### 前端:花名册 → 新增员工 - 表单 state 新增 `departmentId` 字段,部门选择改为按 `id` 取值 - 选定部门后,自动调用 `GET /social/department-account/:departmentId` 查询适用账户 - 社保账户、公积金账户下拉框自动选中继承的账户 - 账户下方显示当前生效标准(基数范围、比例) - 可手动调整账户选择(下拉切换到其他账户) - 缴费基数默认与月工资一致,可手动修改 - 提交时将 `socialAccountId` / `housingAccountId` 写入参保记录 #### 后端:按部门带出账户逻辑 `GET /social/department-account/:departmentId` 处理流程: 1. 从当前部门向上查找,直到 `level=0` 的根部门 2. 读取根部门的 `socialAccount` / `housingAccount` 3. 若根部门未关联账户,回退到公司默认账户(`isDefault=true`) 4. 查询账户当前生效的 `SocialYearStandard`(`isCurrent=true`) 5. 返回 `{ socialAccount, housingAccount, socialStandard, housingStandard }` #### 后端:参保记录写入 accountId `contract.service.ts` 中 `createEmployee`: - `EmployeeSocialInsRecord.create` 写入 `accountId: data.socialAccountId || null` - `EmployeeHousingFundRecord.create` 写入 `accountId: data.housingAccountId || null` --- ## 三、数据流 ``` 设置页:创建账户 → 勾选根部门 → 保存 ↓ department.socialAccountId / housingAccountId ↓ 新增员工:选择部门 → 向上找根部门 → 读取关联账户 ↓ 自动带出账户 + 当前标准 → 可手动调整 ↓ 提交 → EmployeeSocialInsRecord.accountId / EmployeeHousingFundRecord.accountId ↓ 薪资计算:通过员工账户查年度标准 → 计算社保公积金 ``` --- ## 四、使用流程 1. 在 **设置 → 社保公积金账户** 中创建账户,勾选关联的根部门 2. 新增员工时选择部门 → 自动带出对应账户 → 确认基数 → 保存 3. 薪资计算时按员工账户的年度标准执行 --- ## 五、兼容性 - 旧 `SocialInsuranceConfig` / `HousingFundConfig` 表保留 - 薪资计算优先用新账户年度标准,查不到回退旧表 - 未关联账户的根部门,员工新增时回退到公司默认账户 - RehireModal(重新入职)保持原有逻辑,不自动带出账户(员工已有参保记录) --- ## 六、部署记录 - 提交:`014c94e` feat: 账户关联根部门 + 员工新增自动带出账户 - 部署:2026-08-16 已部署到 https://on.hr8ai.top/ - 数据库:schema 同步完成(Department 表 socialAccountId/housingAccountId 字段已存在)