输入文件:
- 租赁任务考核_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>
1.9 KiB
1.9 KiB
两项修复:结转不依赖考核记录 + 补发查对应月盈亏
Context
两个bug需要修复:
- 1月有结转但2月无考核记录 → 结转丢失(当前只遍历G[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月
- 金额总数合理