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