chore: 添加输入输出文件 + .claude记忆和计划

输入文件:
- 租赁任务考核_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>
This commit is contained in:
kkfluous
2026-04-07 14:09:24 +08:00
parent da487c41d4
commit 573f8397a6
32 changed files with 3491 additions and 0 deletions

View File

@@ -0,0 +1,51 @@
# 两项修复:结转不依赖考核记录 + 补发查对应月盈亏
## 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月
- 金额总数合理