# 社保公积金个税扣除功能
## 涉及页面
- 薪酬管理 -> 社保公积金方案
- 薪酬管理 -> 个税税率配置
- 薪酬管理 -> 薪酬核算
- 员工管理 -> 员工社保公积金档案
## 数据库表
| 表名 | 说明 |
|------|------|
| hrm_employee | 员工基本信息表 |
| hrm_employee_salary | 员工薪酬档案表 |
| hrm_employee_social_security | 员工社保公积金档案表(绑定方案 + 个人化基数) |
| hrm_social_security_scheme | 社保公积金方案表(比例模板) |
| hrm_tax_rate_config | 个税税率配置表(累进税率) |
**设计说明:**
- **社保公积金方案**:定义各项缴纳比例,可被多个员工复用
- **员工社保公积金档案**:员工绑定方案,设置个人化的缴纳基数
- 一个社保方案可以绑定多个员工,一个员工可以有多个社保档案(按生效日期取最新)
## 表关联关系
**重要说明:员工与系统用户通过手机号绑定,userId 是系统用户ID,不是员工ID。**
```
┌─────────────────────────────────────────────────────────────────────────┐
│ 表关联关系图 │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ system_users (系统用户表) │
│ ├─ id (用户ID) ←────────────────── userId 字段关联此 ID │
│ ├─ username (用户名,等于手机号) │
│ ├─ mobile (手机号) │
│ └─ nickname (昵称,等于员工姓名) │
│ │
│ hrm_employee (员工表) │
│ ├─ id (员工ID) │
│ ├─ user_id → 关联系统用户ID (system_users.id) ← 绑定关系 │
│ ├─ phone (手机号) → 创建员工时同步创建用户(用户名=手机号) │
│ ├─ deptId (部门ID) │
│ ├─ baseSalary (基本工资,兜底数据) │
│ └─ salaryStructureId │
│ │
│ hrm_employee_salary (员工薪酬档案) │
│ ├─ userId → 关联系统用户ID (system_users.id) │
│ ├─ baseSalary (基本工资) │
│ ├─ performanceSalary (绩效工资) │
│ └─ effectiveDate (生效日期) │
│ │
│ hrm_employee_social_security (员工社保公积金档案) │
│ ├─ userId → 关联系统用户ID (system_users.id) │
│ ├─ socialSecuritySchemeId → 关联社保公积金方案ID │
│ ├─ socialSecurityBase (社保缴纳基数) │
│ ├─ housingFundBase (公积金缴纳基数) │
│ └─ effectiveDate (生效日期) │
│ │
│ hrm_social_security_scheme (社保公积金方案) │
│ ├─ id (方案ID) ←────────────────── socialSecuritySchemeId 关联此 ID │
│ ├─ name (方案名称) │
│ ├─ effectiveDate (生效日期) │
│ ├─ 各险种缴纳比例(养老、医疗、失业、工伤、生育、公积金) │
│ └─ 状态、备注 │
│ │
│ hrm_salary_calculation (薪酬核算记录) │
│ ├─ userId → 关联系统用户ID (system_users.id) │
│ ├─ deptId (部门ID,来自员工表) │
│ └─ 各项薪资和扣除 │
│ │
│ hrm_tax_rate_config (全局个税税率配置) │
│ └─ 7级累进税率表 │
│ │
└─────────────────────────────────────────────────────────────────────────┘
```
**绑定逻辑说明:**
1. 创建员工时,系统自动创建一个系统用户(用户名=手机号)
2. 创建用户后,返回的 userId 存入员工的 `user_id` 字段
3. 薪酬档案、社保档案、核算记录中的 `userId` 都是系统用户ID
4. 查询员工信息时,可以通过 `userId` 关联系统用户获取登录账号信息
**社保公积金配置说明:**
- 社保公积金方案定义各项缴纳比例,可被多个员工复用
- 员工社保公积金档案绑定方案,并设置个人化的缴纳基数
- 薪酬核算时:获取员工最新社保档案 → 获取绑定的方案 → 使用方案的比例计算扣除
## 数据获取优先级
薪酬核算时,各数据的获取优先级:
| 数据项 | 优先来源 | 兜底来源 |
|------|---------|---------|
| 基本工资 | `hrm_employee_salary.baseSalary` | `hrm_employee.baseSalary` |
| 绩效工资 | `hrm_employee_salary.performanceSalary` | 0 |
| 各项补贴 | `hrm_employee_salary.*Allowance` | 0 |
| 社保基数 | `hrm_employee_social_security.socialSecurityBase` | 基本工资 |
| 公积金基数 | `hrm_employee_social_security.housingFundBase` | 基本工资 |
| 社保比例 | `hrm_social_security_scheme.*PersonalRatio`(通过档案的方案ID获取) | 默认比例 |
| 公积金比例 | `hrm_social_security_scheme.housingFundPersonalRatio`(通过档案的方案ID获取) | 12% |
| 个税税率 | `hrm_tax_rate_config` 按应纳税所得额匹配 | - |
**默认缴纳比例:**
| 险种 | 个人比例 |
|------|---------|
| 养老保险 | 8% |
| 医疗保险 | 2% |
| 失业保险 | 0.5% |
| 公积金 | 12% |
**userId 使用场景:**
| 场景 | 使用方式 |
|------|---------|
| 创建薪酬档案 | userId = employee.getUserId() |
| 创建社保档案 | userId = employee.getUserId() |
| 薪酬核算记录 | userId = employee.getUserId() |
| 查询薪酬档案 | selectLatestByUserId(userId) |
| 查询社保档案 | selectLatestByUserId(userId) |
## API
### 社保公积金方案
| 方法 | 路径 | 说明 |
|------|------|------|
| POST | /hrm/salary/social-security-scheme/create | 创建社保公积金方案 |
| PUT | /hrm/salary/social-security-scheme/update | 更新社保公积金方案 |
| DELETE | /hrm/salary/social-security-scheme/delete | 删除社保公积金方案 |
| GET | /hrm/salary/social-security-scheme/get | 获取社保公积金方案 |
| GET | /hrm/salary/social-security-scheme/list | 获取社保公积金方案列表 |
**社保公积金方案字段:**
| 字段 | 类型 | 说明 |
|------|------|------|
| id | Long | 方案ID |
| name | String | 方案名称 |
| effectiveDate | Date | 生效日期 |
| pensionCompanyRatio | BigDecimal | 养老保险企业缴纳比例(如 0.16 表示 16%) |
| pensionPersonalRatio | BigDecimal | 养老保险个人缴纳比例 |
| medicalCompanyRatio | BigDecimal | 医疗保险企业缴纳比例 |
| medicalPersonalRatio | BigDecimal | 医疗保险个人缴纳比例 |
| unemploymentCompanyRatio | BigDecimal | 失业保险企业缴纳比例 |
| unemploymentPersonalRatio | BigDecimal | 失业保险个人缴纳比例 |
| workInjuryRatio | BigDecimal | 工伤保险企业缴纳比例 |
| maternityRatio | BigDecimal | 生育保险企业缴纳比例 |
| housingFundCompanyRatio | BigDecimal | 公积金企业缴纳比例 |
| housingFundPersonalRatio | BigDecimal | 公积金个人缴纳比例 |
| status | Integer | 状态:0-启用,1-禁用 |
| remark | String | 备注 |
### 个税税率配置
| 方法 | 路径 | 说明 |
|------|------|------|
| POST | /hrm/salary/tax-rate-config/create-list | 批量创建个税税率配置 |
| PUT | /hrm/salary/tax-rate-config/update | 更新个税税率配置 |
| DELETE | /hrm/salary/tax-rate-config/delete | 删除个税税率配置 |
| GET | /hrm/salary/tax-rate-config/get | 获取个税税率配置 |
| GET | /hrm/salary/tax-rate-config/list | 获取个税税率配置列表 |
| GET | /hrm/salary/tax-rate-config/get-effective | 获取生效的个税税率配置列表 |
**个税税率配置字段:**
| 字段 | 类型 | 说明 |
|------|------|------|
| id | Long | 配置ID |
| name | String | 配置名称 |
| effectiveDate | Date | 生效日期 |
| level | Integer | 税率级数(1-7) |
| minAmount | BigDecimal | 应纳税所得额下限(含) |
| maxAmount | BigDecimal | 应纳税所得额上限(不含),0表示无上限 |
| taxRate | BigDecimal | 税率(如 0.03 表示 3%) |
| quickDeduction | BigDecimal | 速算扣除数 |
### 员工社保公积金档案
| 方法 | 路径 | 说明 |
|------|------|------|
| POST | /hrm/salary/employee-social-security/create | 创建员工社保公积金档案 |
| PUT | /hrm/salary/employee-social-security/update | 更新员工社保公积金档案 |
| DELETE | /hrm/salary/employee-social-security/delete | 删除员工社保公积金档案 |
| GET | /hrm/salary/employee-social-security/get | 获取员工社保公积金档案 |
| GET | /hrm/salary/employee-social-security/page | 获取员工社保公积金档案分页 |
| GET | /hrm/salary/employee-social-security/list-by-user | 获取员工社保公积金档案历史列表 |
| GET | /hrm/salary/employee-social-security/get-latest | 获取员工最新生效的社保公积金档案 |
**员工社保公积金档案字段:**
| 字段 | 类型 | 说明 |
|------|------|------|
| id | Long | 档案ID |
| userId | Long | 系统用户ID(关联员工表) |
| userName | String | 员工姓名(响应字段) |
| deptName | String | 部门名称(响应字段) |
| socialSecuritySchemeId | Long | 社保公积金方案ID |
| schemeName | String | 方案名称(响应字段) |
| socialSecurityBase | BigDecimal | 社保缴纳基数(员工个性化设置) |
| housingFundBase | BigDecimal | 公积金缴纳基数(员工个性化设置) |
| effectiveDate | Date | 生效日期 |
| status | Integer | 状态:0-启用,1-禁用 |
| remark | String | 备注 |
## 前端修改点
### 1. 个税税率配置页面
```html
{{ row.minAmount }} ~ {{ row.maxAmount === 0 ? '∞' : row.maxAmount }}
{{ (row.taxRate * 100).toFixed(0) }}%
编辑
```
### 2. 社保公积金方案页面
```html
新增方案
{{ (row.pensionCompanyRatio * 100).toFixed(1) }}%
{{ (row.pensionPersonalRatio * 100).toFixed(1) }}%
{{ (row.medicalPersonalRatio * 100).toFixed(1) }}%
{{ (row.housingFundPersonalRatio * 100).toFixed(1) }}%
{{ row.status === 0 ? '启用' : '禁用' }}
编辑
删除
养老保险
医疗保险
失业/工伤/生育保险
公积金
取消
确定
```
### 3. 员工社保公积金档案页面
```html
搜索
重置
新增
{{ row.status === 0 ? '启用' : '禁用' }}
编辑
历史
删除
缴纳基数(员工个性化设置)
取消
确定
{{ row.status === 0 ? '启用' : '禁用' }}
```
## 扣除计算逻辑说明
### 社保扣除(个人部分)
每个员工使用其绑定方案中的缴纳比例计算:
```
社保扣除 = 社保基数 × (养老保险个人比例 + 医疗保险个人比例 + 失业保险个人比例)
```
- 基数取值:员工社保档案的 `socialSecurityBase`
- 比例取值:通过 `socialSecuritySchemeId` 获取方案的比例
- 若方案中比例为空,使用默认值:养老8%、医疗2%、失业0.5%
### 公积金扣除(个人部分)
每个员工使用其绑定方案中的缴纳比例计算:
```
公积金扣除 = 公积金基数 × 公积金个人比例
```
- 基数取值:员工社保档案的 `housingFundBase`
- 比例取值:通过 `socialSecuritySchemeId` 获取方案的比例
- 若方案中比例为空,使用默认值:12%
### 个税扣除
```
应纳税所得额 = 应发工资 - 社保扣除 - 公积金扣除 - 5000(起征点)
个税 = 应纳税所得额 × 税率 - 速算扣除数
```
- 若应纳税所得额 ≤ 0,则个税为 0
- 根据7级累进税率表查找对应档位
## 示例计算
假设员工:
- 基本工资:10000 元
- 绩效工资:2000 元
- 社保基数:10000 元
- 公积金基数:10000 元
按 2024 年标准计算:
1. **应发工资** = 10000 + 2000 = 12000 元
2. **社保扣除** = 10000 × (8% + 2% + 0.5%) = 1050 元
3. **公积金扣除** = 10000 × 12% = 1200 元
4. **应纳税所得额** = 12000 - 1050 - 1200 - 5000 = 4750 元
5. **个税** = 4750 × 3% - 0 = 142.5 元
6. **实发工资** = 12000 - 1050 - 1200 - 142.5 = 9607.5 元
## 注意事项
- 社保公积金配置需要根据当地政策设置比例和基数上下限
- 个税起征点目前固定为 5000 元/月
- 员工社保公积金档案可在员工管理中维护,支持按生效日期管理历史记录
- 薪酬核算时会自动计算各项扣除,无需手动干预