输入文件:
- 租赁任务考核_2026年{1,2,3}月.xlsx (考核源数据)
- {1,2}月.xlsx (客户盈亏表)
- 车辆里程考核与奖金发放规则(V.1.2).docx
输出文件:
- 里程任务考核_{1,2,3}月核算.xlsx (月度核算结果)
- 里程任务考核_Q1汇总.xlsx (含车辆台账)
- 3月客户盈亏表(待填写).xlsx (模版)
.claude_memory: 项目记忆(规则/偏好/架构/测试车辆)
.claude_plans: 历次计划文件
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
52 lines
1.9 KiB
Markdown
52 lines
1.9 KiB
Markdown
# 两项修复:结转不依赖考核记录 + 补发查对应月盈亏
|
||
|
||
## Context
|
||
两个bug需要修复:
|
||
1. 1月有结转但2月无考核记录 → 结转丢失(当前只遍历G[2]有记录的车)
|
||
2. 3月补发1月的奖金 → 应查1月盈亏,当前查的是3月盈亏
|
||
|
||
## 修改1:结转不依赖考核记录
|
||
|
||
### 规则
|
||
- 1月多跑够结转,2月即使没考核记录也发放结转奖金(完整月)
|
||
- 无考核记录时:考核里程=满月目标(如3000km),实际里程=0,视为消耗了一个月目标
|
||
- 无客户关联(因无考核记录)→ 不查盈亏,正常发放
|
||
|
||
### 修改 `calc_engine.py`
|
||
在 `calc_feb()` 中,遍历完 `G[2].items()` 后,额外遍历 `G[1]` 中有结转但不在 `G[2]` 中的key:
|
||
|
||
```
|
||
for k, g1 in G1.items():
|
||
if k not in G2 and g1['可结转'] >= 1:
|
||
# 创建虚拟的2月group:考核里程=满月目标,实际=0
|
||
# 发放结转奖金(完整月)
|
||
# 结转剩余月数 -= 1,传递给3月
|
||
```
|
||
|
||
`calc_mar()` 同理:遍历 `G[2]` 中有结转但不在 `G[3]` 中的key。
|
||
|
||
### 修改 `excel_writer.py`
|
||
- `build_payment_records`:无客户关联的结转,loss_status设为'否'(正常发放)
|
||
|
||
## 修改2:补发查对应月盈亏
|
||
|
||
### 规则
|
||
| 发放类型 | 查哪月盈亏 |
|
||
|---------|----------|
|
||
| 当月达标/累计补发/结转 | 当月 |
|
||
| 补发1月 | 1月 |
|
||
| 补发2月 | 2月 |
|
||
|
||
### 修改 `main.py`
|
||
- 将所有月份的 `loss_data` 都传入 `build_payment_records`(不只当月的)
|
||
|
||
### 修改 `excel_writer.py`
|
||
- `build_payment_records` 接收 `all_loss_data={1:..., 2:..., 3:...}`
|
||
- 根据发放类型确定查哪个月的盈亏表
|
||
- 奖金发放记录表新增列"盈亏查询月",标明查的是哪个月的盈亏
|
||
|
||
## 验证
|
||
- 找一辆1月有结转但2月无记录的车,确认2月正常发放结转
|
||
- 找一辆3月补发1月的车,确认查的是1月盈亏而非3月
|
||
- 金额总数合理
|