2026-10-07 · 喵窝资源铺
上一篇《会议纪要自动提取待办》把纪要里的 action items 提成了带期限的待办表。但提取出来的期限长这样:周五、下周三、月底——全是相对日期,没法直接跟日程表核对。这篇把链条走完最后一公里:相对期限锚定成绝对日期 → 对每个人的日程表查冲突(deadline 当天请假、当天被会排满),输出一张核对表。
待办表(上一篇脚本的 CSV 输出,会议日期 2026-10-07,周三):
状态,负责人,待办事项,期限 已完成,李娜,完成竞品调研报告,未定期限 进行中,张伟,输出新用户引导流程初稿,10月10日 进行中,李娜,补齐竞品价格对比表,周五 进行中,王强,压测订单接口,下周三 进行中,赵敏,整理客服常见问题 30 条,月底 进行中,张伟,和老刘对齐 API 字段口径,明天
日程表(日期,人员,时段,事项,内容故意埋了:期限当天年假、期限当天 3 个会、期限当天晚上的年会):
2026-10-09,李娜,09:30-11:30,季度复盘会 2026-10-09,李娜,14:00-16:00,供应商比稿 2026-10-10,张伟,10:00-12:00,引导流程评审会 2026-10-08,张伟,全天,年假 2026-10-14,王强,09:00-11:00,压测方案评审 2026-10-14,王强,13:00-15:00,架构委员会 2026-10-14,王强,16:00-18:00,跨部门排期会 2026-10-31,赵敏,19:00-21:00,公司年会
from datetime import date, timedelta
WEEK = {'一':0,'二':1,'三':2,'四':3,'五':4,'六':5,'日':6,'天':6}
def anchor(due, meeting_day):
"""把「明天/周五/下周三/月底/X月X日」锚定到绝对日期"""
m = re.match(r'(\d{1,2})月(\d{1,2})日', due)
if m:
return date(meeting_day.year, int(m.group(1)), int(m.group(2)))
if due == '明天': return meeting_day + timedelta(days=1)
if due == '后天': return meeting_day + timedelta(days=2)
if due == '月底':
nxt = date(meeting_day.year + (meeting_day.month == 12),
meeting_day.month % 12 + 1, 1)
return nxt - timedelta(days=1)
m = re.match(r'(下|本|这)?周([一二三四五六日天])', due)
if m:
pre, i = m.group(1), WEEK[m.group(2)]
if pre == '下':
# 下一个自然周的周X:必须按周一对齐,不能 offset+7(见坑1)
days = (7 - meeting_day.weekday()) + i
else:
days = (i - meeting_day.weekday()) % 7
if days == 0 and pre is None:
days = 7 # 光说「周三」而当天就是周三 → 按下一周
return meeting_day + timedelta(days=days)
return None
def check(todo_csv, sched_csv, meeting_day):
problems, ok = [], []
for t in csv.DictReader(open(todo_csv, encoding='utf-8-sig')):
if t['状态'] == '已完成': continue
d = anchor(t['期限'], meeting_day)
if d is None:
problems.append(f'??未识别|{t["负责人"]}|期限「{t["期限"]}」解析不了,交人工')
continue
if d < meeting_day:
problems.append(f'!!超期|{t["负责人"]}|期限 {d} 早于会议日期,纪要可能笔误')
continue
day_s = [s for s in sched if s[0]==d.isoformat() and s[1]==t['负责人']]
if any('假' in s[3] for s in day_s):
problems.append(f'!!冲突|{t["负责人"]}|{t["待办事项"]}|期限 {d} 当天请假')
elif day_s:
problems.append(f'!!紧张|{t["负责人"]}|{t["待办事项"]}|期限 {d} 当天已有 '
f'{len(day_s)} 个会({";".join(s[2]+" "+s[3] for s in day_s)})')
else:
ok.append(f'ok|{t["负责人"]}|期限 {d} 当天空闲')
return problems, ok
会议日期 2026-10-07,核对 5 条进行中待办:
!!紧张|张伟|输出新用户引导流程初稿|期限 2026-10-10 当天已有 1 个会(评审会) !!紧张|李娜|补齐竞品价格对比表|期限 2026-10-09 当天已有 2 个会(复盘会;比稿) !!紧张|王强|压测订单接口|期限 2026-10-14 当天已有 3 个会(评审;架构委;排期会) !!紧张|赵敏|整理客服常见问题 30 条|期限 2026-10-31 当天已有 1 个会(19:00-21:00 年会) !!冲突|张伟|和老刘对齐 API 字段口径|期限 2026-10-08 当天请假(全天 年假)
5 条待办 4 条撞日程:deadline 写「明天」的人当天在休年假;写「下周三」的人那天排了整整 3 个会;写「月底」的人月底那晚是公司年会。这种表人工根本看不出来,只有把相对日期换算成绝对日期、再跟日程表一一对,才现形。
(目标周几 - 今天周几) % 7 得出 offset,再对「下」前缀 +7。会议日期恰好是周三(2026-10-07)时,(2-2)%7=0→按当天算=10-07,+7 得 10-14——看似对了;但换成会议日期是周四,offset=6,+7 得 13 天后,落到了下下周。旧算法把王强的 deadline 算成 10-21(多算一周),日程表里 10-14 的 3 个会一个都查不到,冲突全漏。正确做法:「下周X」= 先算到下一个周一(7 - weekday),再加周X 的序号。修完后边界自测全过:周三说「周三」→下一周、说「本周三」→当天、「下周三」→10-14。脚本和数据都在文内,把待办 CSV(上一篇脚本的输出)和日程表 CSV 喂进去即可:python deadline_conflict.py todos.csv sched.csv 2026-10-07 out.csv。连跑两次输出逐字一致(幂等);期限解析不了的行标 ??未识别 交人工,不硬猜。
如果你的纪要格式更野(期限藏在备注里、多人共担一条)、或者日程表在飞书/日历导出件里,逻辑要再包一层,可以直接找我们代写(见下)。
懒得自己跑?找我们代写
喵窝资源铺提供 Python 脚本代写服务:你说清楚纪要格式、日程表来源和要什么核对表,我们写好、用你的真实数据测试通过再交付,24 小时内出活。AI 服务,明码标价,先看效果再付款(虚拟物品不退款,不满意免费重做)。
👉 了解代写服务 | 联系我们
📖 相邻文章:会议纪要提取待办 · 值班表冲突检查 · 考勤异常汇总 · 聊天记录批量提取待办 · 接龙按选项统计票数 · 博客目录
核对表仅供参考;!!冲突行请先跟当事人确认再改期,别拿着脚本输出直接改别人日程。