V3.0.0 叠加客户亏损筛选,生成最终发放记录

新增功能:
- 读取1月/2月亏损表,按客户名称匹配考核数据
- 车辆考核追踪新增列:客户名称、客户是否亏损、考核应发、最终发放、未发放原因
- 月汇总新增亏损筛选section:亏损拦截/未匹配/最终发放/汇总
- 3月无亏损表,全部正常发放
- 亏损拦截不补发

规则:客户亏损→该客户下所有车不发;未匹配→标注待人工确认

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
kkfluous
2026-04-03 09:14:37 +08:00
parent 26361f3a95
commit e814013320
3 changed files with 162 additions and 17 deletions

30
main.py
View File

@@ -1,5 +1,5 @@
#!/usr/bin/env python3
"""按月生成独立Excel文件 - 里程考核绩效"""
"""按月生成独立Excel文件 - 里程考核绩效(含亏损筛选)"""
import os, openpyxl
from calc_engine import *
from excel_writer import *
@@ -23,6 +23,22 @@ mar_data = calc_mar(G[1], G[2], G[3], feb_data)
vehicle_payments, vehicle_info = collect_vehicle_payments(G, feb_data, mar_data)
master_vehicles = read_master_vehicles()
# 亏损表
print("\n读取亏损表...")
loss_data = {}
for m in [1,2,3]:
ld = read_loss_data(m)
if ld:
loss_clients = sum(1 for v in ld.values() if v == '')
print(f" {m}月: {len(ld)}个客户, 其中亏损{loss_clients}")
loss_data[m] = ld
else:
print(f" {m}月: 无亏损表")
loss_data[m] = None
# 车牌→客户名称映射
plate_client = get_vehicle_client_map(D)
# 所有业务员
all_persons = {}
for m in G:
@@ -33,8 +49,8 @@ for m in G:
jan_total = sum(r['奖金'] for r in D[1] if r['是否达标']=='达标')
feb_total = sum(sum(d[''] for d in v) for v in feb_data.values())
mar_total = sum(sum(d[''] for d in v) for v in mar_data.values())
print(f"\n1月: {jan_total:.2f}, 2月: {feb_total:.2f}, 3月: {mar_total:.2f}")
print(f"Q1计: {jan_total + feb_total + mar_total:.2f}")
print(f"\n考核应发: 1月{jan_total:.2f}, 2月{feb_total:.2f}, 3月{mar_total:.2f}")
print(f"Q1考核应发合计: {jan_total + feb_total + mar_total:.2f}")
# ============================================================
# 按月生成
@@ -68,14 +84,14 @@ for settle_month in [1, 2, 3]:
# Sheet 4: 汇总
if settle_month == 1:
write_summary_jan(wb, D[1])
write_summary_jan(wb, D[1], loss_data[1], plate_client)
elif settle_month == 2:
write_summary_month(wb, 2, feb_data, ['结转','补发1月','当月','累计补发2月'])
write_summary_month(wb, 2, feb_data, ['结转','补发1月','当月','累计补发2月'], loss_data[2], plate_client)
else:
write_summary_month(wb, 3, mar_data, ['结转','补发1月','补发2月','当月','累计补发3月'])
write_summary_month(wb, 3, mar_data, ['结转','补发1月','补发2月','当月','累计补发3月'], loss_data[3], plate_client)
# Sheet 5: 车辆考核追踪
write_vehicle_tracking_sheet(wb, settle_month, G, master_vehicles, vehicle_payments, vehicle_info)
write_vehicle_tracking_sheet(wb, settle_month, G, master_vehicles, vehicle_payments, vehicle_info, loss_data[settle_month], plate_client)
# Sheet 6-17: 业务员
for person in sorted(all_persons.keys()):