Files
njts-accounting-core/docs/payroll_enhancements.md
2026-01-20 11:15:49 +09:00

275 lines
7.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 工资系统增强功能说明
## 已实现的三大改进
### 1. 扶养人数输入和判定 ✓
#### 功能说明
- **扶养家族管理**: 已有的 `dependents` 表允许录入扶养家族信息
- **自动计算扶养人数**: 系统自动统计有效期内的扶养人数
- **扶养判定规则表**: 新增 `dependent_rules` 表,可配置扶养条件
#### API 端点
- `POST /payroll/employees/{employee_id}/dependents` - 添加扶养家族
- `GET /payroll/employees/{employee_id}/dependents` - 查看扶养家族列表
- `GET /payroll/settings/dependent-rules` - 查看扶养判定规则
- `POST /payroll/settings/dependent-rules` - 设置扶养判定规则
#### 扶养判定条件(可配置)
```
- 所得限度額_一般: 480,000円/年
- 所得限度額_配偶者: 480,000円/年
- 所得限度額_配偶者特別: 1,330,000円/年
- 年齢_特定扶養親族: 19-23歳
- 年齢_老人扶養親族: 70歳以上
```
---
### 2. 奖金计算 + 社保上限设置 ✓
#### 社会保险料上限表 (`insurance_limit_settings`)
可通过画面手动修改的上限值:
| 设定类型 | 2026 年初始值 | 说明 |
| ------------------------ | ------------- | -------------------------------- |
| 健康保険標準報酬月額上限 | 1,390,000 円 | 健康保险计算基数上限(第 50 级) |
| 厚生年金標準報酬月額上限 | 650,000 円 | 厚生年金计算基数上限(第 32 级) |
| 通勤手当非課税限度額 | 150,000 円 | 通勤补贴免税上限 |
#### API 端点
**社保上限管理**:
- `GET /payroll/settings/insurance-limits` - 获取当前社保上限
- `POST /payroll/settings/insurance-limits` - 创建新的上限设置
- `PUT /payroll/settings/insurance-limits/{limit_id}` - 修改上限值
**奖金计算**:
- `POST /payroll/bonus/calculate` - 计算奖金
- `GET /payroll/bonus/` - 获取奖金列表
- `GET /payroll/bonus/{bonus_id}` - 获取奖金详情
- `POST /payroll/bonus/{bonus_id}/approve` - 审批奖金
#### 奖金计算逻辑
```python
总支给额 = 基本奖金 + 业绩奖金 + 其他奖金
# 应用社保上限
健康保险 = min(总支给额, 健康保险上限) × 健康保险率
厚生年金 = min(总支给额, 厚生年金上限) × 厚生年金率
介护保险 = min(总支给额, 健康保险上限) × 介护保险率 (40-64)
雇用保险 = 总支给额 × 雇用保险率
# 奖金所得税(特殊算法)
所得税 = (总支给额 - 社保) × 根据前3月平均工资和扶养人数确定的税率
差引支给额 = 总支给额 - 总控除额
```
#### 奖金类型
- 夏季賞与(夏季奖金)
- 冬季賞与(冬季奖金)
- 決算賞与(结算奖金)
- その他(其他)
---
### 3. 源泉徴収税額表上传功能 ✓
#### 功能说明
- **CSV 上传**: 可通过 API 上传源泉徴收税额表的 CSV 文件
- **年份区分**: 每条税率记录有 `valid_from``valid_to` 字段区分年份
- **自动应用**: 计算工资时自动使用对应年份的税额表
#### API 端点
- `POST /payroll/settings/income-tax/import-csv` - 上传税额表 CSV
- `GET /payroll/settings/income-tax` - 查看当前税额表
- `GET /payroll/settings/income-tax/calculate` - 测试税额计算
#### CSV 格式示例
```csv
monthly_income_from,monthly_income_to,dependents_count,tax_amount,valid_from
0,88000,0,0,2026-01-01
88000,89000,0,130,2026-01-01
89000,90000,0,200,2026-01-01
```
**字段说明**:
- `monthly_income_from`: 月收入下限
- `monthly_income_to`: 月收入上限
- `dependents_count`: 扶养人数 (0, 1, 2, 3...)
- `tax_amount`: 源泉徴収税额
- `valid_from`: 适用开始日期
#### 使用流程
1. 准备 CSV 文件(按国税厅公布的源泉徴収税額表格式)
2. 调用上传 API: `POST /payroll/settings/income-tax/import-csv`
3. 系统自动应用新税额表进行计算
---
## 数据库变更
### 新增表
1. **insurance_limit_settings** - 社保上限设置表
```sql
- limit_id ()
- setting_type ()
- limit_amount ()
- valid_from/valid_to ()
```
2. **bonus_payments** - 奖金计算表
```sql
- bonus_id ()
- employee_id (ID)
- bonus_year/bonus_month ()
- bonus_type ()
- base_bonus/performance_bonus/other_bonus ()
- health_insurance/care_insurance/pension_insurance... ()
- total_bonus/total_deduction/net_bonus ()
```
3. **dependent_rules** - 扶养判定条件表
```sql
- rule_id ()
- rule_type ()
- rule_value ()
- valid_from/valid_to ()
- description ()
```
### 应用数据库变更
```bash
# 1. 应用增强功能schema
psql -U your_user -d your_database -f backend/sql/payroll_enhancements.sql
# 2. 验证表是否创建成功
psql -U your_user -d your_database -c "\dt *bonus* *insurance_limit* *dependent_rule*"
```
---
## 计算逻辑改进总结
### 月度工资计算
1. ✅ 应用健康保险上限 (1,390,000 円)
2. ✅ 应用厚生年金上限 (650,000 円)
3. ✅ 应用通勤补贴免税限度 (可配置)
4. ✅ 40-64 岁自动计算介护保险
5. ✅ 自动统计扶养人数用于所得税计算
### 奖金计算
1. ✅ 应用社保上限(与工资计算一致)
2. ✅ 特殊的奖金所得税算法
3. ✅ 支持多种奖金类型
4. ✅ 基于前 3 月平均工资计算税率
---
## 前端 TODO建议
需要创建以下管理画面:
1. **社保上限设置画面**
- 显示当前上限值
- 允许修改上限金额
- 查看历史变更记录
2. **扶养判定规则画面**
- 显示当前判定条件
- 允许修改所得限度额
- 配置年龄条件
3. **税额表上传画面**
- CSV 文件上传组件
- 预览上传内容
- 查看当前税额表
4. **奖金计算画面**
- 选择员工
- 输入奖金金额
- 显示计算结果
- 审批流程
---
## API 测试示例
### 1. 设置社保上限
```bash
curl -X POST http://localhost:18080/payroll/settings/insurance-limits \
-H "Content-Type: application/json" \
-d '{
"setting_type": "健康保険標準報酬月額上限",
"limit_amount": 1390000,
"valid_from": "2026-01-01",
"notes": "2026年度上限"
}'
```
### 2. 上传税额表 CSV
```bash
curl -X POST http://localhost:18080/payroll/settings/income-tax/import-csv \
-F "file=@tax_table_2026.csv" \
-F "valid_from=2026-01-01"
```
### 3. 计算奖金
```bash
curl -X POST http://localhost:18080/payroll/bonus/calculate \
-H "Content-Type: application/json" \
-d '{
"employee_id": 1,
"bonus_year": 2026,
"bonus_month": 6,
"bonus_type": "夏季賞与",
"payment_date": "2026-06-30",
"base_bonus": 500000,
"performance_bonus": 100000,
"calculated_by": "admin"
}'
```
### 4. 查询扶养判定规则
```bash
curl http://localhost:18080/payroll/settings/dependent-rules
```
---
## 总结
**问题 1**: 扶养人数输入和判定 - 已实现,可配置判定条件
**问题 2**: 奖金计算 + 社保上限 - 已实现,上限可手动修改
**问题 3**: 税额表上传 - 已实现,支持 CSV 上传和年份区分
所有功能都已实现 API 层,可以通过 RESTful 接口调用。下一步建议创建前端管理画面以便更方便地操作这些功能。