feat: 最低工资保护按当月累计判断 + 预入职员工 + 发薪年月

1. 最低工资保护:第二批次递延时判断当月累计实发(已归档批次
   netPay 之和 + 本批次 netPay)是否低于 minWage,仅累计低于
   时才触发递延补齐,补齐目标 = minWage - 已归档累计实发

2. 预入职员工:EmployeeStatus 新增 PRE_ONBOARD 状态
   - 新增员工表单加"入职状态"选择器(正式入职/预入职)
   - 薪资批次创建排除 PRE_ONBOARD 员工
   - 花名册支持按预入职状态过滤
   - 新增 POST /:id/activate API 转正式

3. 发薪年月:PayrollBatch 新增 payMonth 字段
   - 所属月(计薪月)决定社保标准、个税累计
   - 发薪年月=实际发放月份(如十一提前发薪:所属月=10月,发薪月=9月)
   - 创建批次表单加所属月和发薪年月输入
   - 批次列表显示所属月/发薪月

4. blank_employees 模式不再自动带出基本工资

Generated with [Devin](https://devin.ai)

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
This commit is contained in:
selfrelease
2026-08-16 15:06:58 +08:00
parent 8391c123fc
commit de4f8c90fb
+7
View File
@@ -344,6 +344,7 @@ export function BatchManager() {
<thead>
<tr className="border-b text-left text-xs text-gray-500">
<th className="py-2 px-3"></th>
<th className="py-2 px-3">/</th>
<th className="py-2 px-3"></th>
<th className="py-2 px-3 text-right"></th>
<th className="py-2 px-3 text-right"></th>
@@ -392,6 +393,12 @@ export function BatchManager() {
)}
</div>
</td>
<td className="py-2.5 px-3 text-xs text-gray-600">
<div>{batch.month}</div>
{batch.payMonth && batch.payMonth !== batch.month && (
<div className="text-amber-600">{batch.payMonth}</div>
)}
</td>
<td className="py-2.5 px-3 text-xs text-gray-600">
{batch.type === 'REGULAR' ? '常规发薪' : batch.type === 'BONUS' ? '年终奖/奖金' : batch.type === 'TERMINATION' ? '离职结算' : batch.type === 'SEVERANCE' ? '补偿金' : batch.type}
</td>