统计教学课时
工作流程
将用户给出的自然语言时间段转换为包含首尾日期的
YYYY-MM-DD起止日期;“某月”指该自然月,“本周”按周一至周日。时间范围不明确时只询问起止日期。获取工作区依赖提供的 Python,运行:
scripts/calculate_hours.py YYYY-MM-DD YYYY-MM-DD首次使用时,把
references/schedule.example.json复制为references/schedule.local.json,填写课表目录和工作表名。脚本从该目录选择最后修改的学术导师+全体排课安排*.xlsx;本机配置被 Git 忽略。使用脚本返回的 JSON 生成简洁汇总,不自行修正、补足或猜测课时。
若
missing_times或excluded非空,在结果后列出这些记录供用户核对。根据日期范围选择输出粒度:
- 用户明确要求“月度统计”,或日期范围从某月 21 日至下月 20 日(含首尾日期)时,使用月度明细表。
- 用户要求一周、本周、某周或若干天的短周期统计时,使用简洁汇总。
- 用户明确指定输出格式或明细程度时,优先遵循用户当次要求。
课程识别口径
只把名称明确匹配以下名单的课程识别为班课;当前班课为欧亚、云中学、AP 微积分,历史班课还包括沃隆港(伍伦贡/卧龙岗)、新南、双学分(启程 3915)、英本、IG、OSSD、VET/14800 等外地项目。允许空格、括号和常见别名差异。
- 欧亚
OH不计入一对一、班课、答疑或总课时,放入excluded。 - 家长会、其他会议、教研、培训、调休、请假和休息记录忽略并放入
excluded。 - 除上述明确班课与排除项外,凡有有效授课时间的课程都按一对一处理;课程名没有“一对一”“1对1”或“1v1”后缀也不改变这一默认分类。
- 班课的
L、T、OH等分段沿用最近一个明确班级;没有明确班级名称的普通课程不得仅凭分段字样猜成班课。
统计规则
- 先按“课程识别口径”匹配明确班课;未匹配班课或排除项的授课记录统一计为一对一。
- 一对一优先读取课程同格时间;同格无时间时读取正下方单元格。“一对一”“1对1”或“1v1”后缀只是课程名称信息,不是分类的必要条件。
- 将只有时间或时长备注、没有课程名称的单元格排除,避免重复计算一对一课程下方的时间。
- 将连续出现的
L/C/T/OH/WS等简写归入同一天同一列上方最近的班级。 - 排除家长会、会议、调休、请假等非授课记录,排除欧亚OH课时,并在
excluded中保留明细。 - 按实际开始和结束时间计算小时数,日期范围包含开始日和结束日。
月度输出格式
月度统计通常指某月 21 日至下月 20 日。按学生姓名汇总一对一课程,并输出:
统计时段:{开始日期} 至 {结束日期}
| 学生 | 具体上课日期(当日课时) | 总课时 | 节数 |
|---|---|---:|---:|
| {学生姓名} | {M月D日(Xh)、M月D日(Xh)……} | {小时数}小时 | {节数}节 |
| 合计 | | {一对一总小时数}小时 | {一对一总节数}节 |
- 将同一学生的不同科目、线上/线下标记合并到同一行。
- 按学生总课时从高到低排列;总课时相同时保持稳定、清晰的顺序。
- 日期按时间先后排列,并在每个日期后标注当日课时;同一天有多节课时合并当日课时。
- 表格后简要列出班课总时长及各班级汇总;不展开班课逐节日期,除非用户明确要求。
- 最后给出一对一与班课合计总课时。
短周期输出格式
一周或若干天的统计输出一对一总时长和按班级汇总的班课明细,不具体到学生姓名、上课日期或逐节课程:
统计时段:{开始日期} 至 {结束日期}
一对一:{小时数} 小时
班课:{小时数} 小时
- {班级名称}:{小时数} 小时
总课时:{小时数} 小时
按班课小时数从高到低排列。只有用户明确要求明细时,才补充学生姓名、日期、课程名称、时间或原单元格地址。