You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
4.9 KiB
4.9 KiB
薪资计算器 API(N05)
Base URL:
/api/v1认证:Authorization: Bearer <access-token>角色:当前登录用户必须具备STUDENT角色。
1. 能力边界
- 输入税前月薪,估算个人五险一金、大病固定费和当月个税后的到手工资。
- 采用居民个人综合所得累计预扣法;
monthIndex表示当前工资口径下的累计计税月份数,而不是自然月编号。 - 支持用户覆盖社保基数、公积金基数和个人比例。
- 城市政策以地级行政区、直辖市和省直辖县级市为最小单元,不拆分到区县。
dataLevel=CITY表示城市级参数;dataLevel=PROVINCE_FALLBACK表示由于公开城市级资料不足而使用省级回退参数,结果精度较低。- 所有结果均为估算值,实际以工资单、当地政策和税务申报为准。
2. 查询城市列表
GET /salary-calculator/cities
返回全部启用城市摘要,按省份编码和城市编码排序。
响应示例:
{
"code": 200,
"message": "ok",
"data": [
{
"cityCode": "110000",
"provinceCode": "110000",
"provinceName": "北京市",
"cityName": "北京市",
"policyVersion": "2026-09-20-v1",
"policyEffectiveDate": "2026-07-01",
"dataLevel": "CITY"
}
]
}
3. 查询城市默认参数
GET /salary-calculator/cities/{cityCode}
返回城市级或省级回退的当前默认参数。计算请求必须原样携带响应中的 policyVersion 作为 expectedPolicyVersion。
4. 计算并保存
POST /salary-calculator/calculations
请求示例:
{
"cityCode": "110000",
"grossMonthlySalary": 10000.00,
"monthIndex": 1,
"specialAdditionalDeduction": 0.00,
"expectedPolicyVersion": "2026-09-20-v1",
"idempotencyKey": "optional-client-key",
"overrides": {
"socialSecurityBase": 10000.00,
"housingFundBase": 10000.00,
"pensionRate": 0.08,
"medicalRate": 0.02,
"unemploymentRate": 0.005,
"housingFundRate": 0.12,
"seriousIllnessMonthlyFee": 0.00
}
}
cityCode、grossMonthlySalary、expectedPolicyVersion必填。monthIndex默认 1,范围 1–12。specialAdditionalDeduction默认 0。idempotencyKey可选,最长 64 字符;同用户同键同规范化请求返回原历史,同键不同请求返回409/10604。- 覆盖基数必须位于对应城市范围内;比例为 0 时允许基数为 0。
成功响应:
{
"code": 200,
"message": "ok",
"data": {
"historyId": 123,
"createdAt": "2026-09-20T16:00:00",
"result": {
"cityCode": "110000",
"cityName": "北京市",
"dataLevel": "CITY",
"policyVersion": "2026-09-20-v1",
"policyEffectiveDate": "2026-07-01",
"taxRulesVersion": "CN_IIT_2019_V1",
"estimate": true,
"monthIndex": 1,
"grossMonthlySalary": 10000.00,
"socialSecurityBase": 10000.00,
"housingFundBase": 10000.00,
"pension": 800.00,
"medical": 200.00,
"unemployment": 50.00,
"housingFund": 1200.00,
"currentMonthTax": 82.50,
"netSalary": 7667.50
}
}
}
5. 查询历史
GET /salary-calculator/calculations?page=0&size=20
- 仅返回当前用户的记录。
- 按创建时间倒序、历史 ID 倒序。
size最大 100。
GET /salary-calculator/calculations/{id}
返回输入、政策、覆盖项和结果三组完整 JSON 快照。访问他人历史统一返回 404/10603。
6. 删除历史
DELETE /salary-calculator/calculations/{id}
物理删除本人历史;成功后再次查询返回 404/10603。删除后原幂等键可重新使用。
7. 错误码
| HTTP | code | 含义 |
|---|---|---|
| 400 | 10602 | 工资、比例、基数或分页参数非法 |
| 401 | 401 | 未登录或 Token 无效 |
| 403 | 2002 | 已登录但不是 STUDENT |
| 404 | 10601 | 城市不存在、停用或未配置 |
| 404 | 10603 | 历史不存在或不属于当前用户 |
| 409 | 10604 | 幂等键冲突 |
| 409 | 10605 | 城市政策版本已变化 |
10605 响应会在 data 中返回最新 policyVersion 和 policyEffectiveDate,客户端应重新加载城市详情后再试算。
8. 计算口径
社保基数 = 用户覆盖值,否则 min(max(税前月薪, 社保下限), 社保上限)
公积金基数 = 用户覆盖值,否则 min(max(税前月薪, 公积金下限), 公积金上限)
累计收入 = 税前月薪 × monthIndex
累计基本减除费用 = 5000 × monthIndex
累计专项附加扣除 = 月度专项附加扣除 × monthIndex
累计应纳税所得额 = max(累计收入 - 累计个人社保 - 累计公积金 - 累计大病费
- 累计基本减除费用 - 累计专项附加扣除, 0)
当月个税 = max(累计应纳税额 - 累计已预扣税额, 0)
到手工资 = max(税前月薪 - 个人养老 - 个人医疗 - 个人失业 - 个人公积金
- 大病固定费 - 当月个税, 0)