# Calculate Teaching Hours

> 按指定日期范围读取本地排课 Excel，依据明确班课名单区分一对一与班课并统计课时；没有一对一后缀的普通授课仍默认归入一对一，家长会与其他会议忽略。用于核算教学小时及汇总月度、周度或若干天的一对一和班课时长。

- Skill: `tgozen63/calculate-teaching-hours` (Agent Skill, multi-file: 5 files)
- Install (CLI): `npx skillmds@latest add tgozen63/calculate-teaching-hours`
- Raw SKILL.md: https://api.skillmd.com/api/skills/tgozen63/calculate-teaching-hours/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Data & Analytics
- Author: TGozen63 (https://skillmd.com/u/tgozen63)
- Updated: 2026-09-22
- Page: https://skillmd.com/skills/tgozen63/calculate-teaching-hours

---


# 统计教学课时

## 工作流程

1. 将用户给出的自然语言时间段转换为包含首尾日期的 `YYYY-MM-DD` 起止日期；“某月”指该自然月，“本周”按周一至周日。时间范围不明确时只询问起止日期。
2. 获取工作区依赖提供的 Python，运行：

   ```text
   scripts/calculate_hours.py YYYY-MM-DD YYYY-MM-DD
   ```

3. 首次使用时，把 `references/schedule.example.json` 复制为 `references/schedule.local.json`，填写课表目录和工作表名。脚本从该目录选择最后修改的 `学术导师+全体排课安排*.xlsx`；本机配置被 Git 忽略。
4. 使用脚本返回的 JSON 生成简洁汇总，不自行修正、补足或猜测课时。
5. 若 `missing_times` 或 `excluded` 非空，在结果后列出这些记录供用户核对。
6. 根据日期范围选择输出粒度：
   - 用户明确要求“月度统计”，或日期范围从某月 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 日。按学生姓名汇总一对一课程，并输出：

```text
统计时段：{开始日期} 至 {结束日期}

| 学生 | 具体上课日期（当日课时） | 总课时 | 节数 |
|---|---|---:|---:|
| {学生姓名} | {M月D日（Xh）、M月D日（Xh）……} | {小时数}小时 | {节数}节 |
| 合计 |  | {一对一总小时数}小时 | {一对一总节数}节 |
```

- 将同一学生的不同科目、线上/线下标记合并到同一行。
- 按学生总课时从高到低排列；总课时相同时保持稳定、清晰的顺序。
- 日期按时间先后排列，并在每个日期后标注当日课时；同一天有多节课时合并当日课时。
- 表格后简要列出班课总时长及各班级汇总；不展开班课逐节日期，除非用户明确要求。
- 最后给出一对一与班课合计总课时。

## 短周期输出格式

一周或若干天的统计输出一对一总时长和按班级汇总的班课明细，不具体到学生姓名、上课日期或逐节课程：

```text
统计时段：{开始日期} 至 {结束日期}
一对一：{小时数} 小时
班课：{小时数} 小时
- {班级名称}：{小时数} 小时
总课时：{小时数} 小时
```

按班课小时数从高到低排列。只有用户明确要求明细时，才补充学生姓名、日期、课程名称、时间或原单元格地址。

