Skip to content
Back to skills

Teaching Ops

ASecurity

高校教师教学运行事务辅助:调课/停课/补课申请材料、监考安排与监考表、期末考试排期与教室协调、教材申报与选用、开学与期末教学准备清单。核心方法是「用检查代替记忆」——把 人 × 时间 × 空间 三个维度交叉核对,冲突显式报错而不静默通过。当教师说「写个调课申请」「安排监考表」「排期末考试时间」「申报教材」「补课怎么安排」「下周出差这课怎么调」「监考撞车了怎么办」「下学期教材什么时候报」「开学要交哪些材料」时使用。Triggers: 写个调课申请、安排监考表、排期末考试时间、申报教材、补课怎么安排、监考怎么排、监考撞车了、教室冲突怎么办、教材选用怎么填、教材什么时候报、开学要交什么材料、期末教学材料清单、调课审批流程、监考须知怎么写。

  • 11 stars
  • 0 votes
  • 1 copy
  • 2 views
  • Added October 20, 2026
educationpythongobash

Security analysis

A100/100

Pro scans all 4 files and shows the line behind each finding

Scanned October 20, 2026

npx -y skills add EtherealMingo/university-teacher-skills --skill teaching-ops --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Teaching Ops?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Teaching Ops
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/etherealmingo-teaching-ops/badge)](https://www.skillsdirectory.com/skills/etherealmingo-teaching-ops)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: teaching-ops
description: "高校教师教学运行事务辅助:调课/停课/补课申请材料、监考安排与监考表、期末考试排期与教室协调、教材申报与选用、开学与期末教学准备清单。核心方法是「用检查代替记忆」——把 人 × 时间 × 空间 三个维度交叉核对,冲突显式报错而不静默通过。当教师说「写个调课申请」「安排监考表」「排期末考试时间」「申报教材」「补课怎么安排」「下周出差这课怎么调」「监考撞车了怎么办」「下学期教材什么时候报」「开学要交哪些材料」时使用。Triggers: 写个调课申请、安排监考表、排期末考试时间、申报教材、补课怎么安排、监考怎么排、监考撞车了、教室冲突怎么办、教材选用怎么填、教材什么时候报、开学要交什么材料、期末教学材料清单、调课审批流程、监考须知怎么写。"
---

# 教学运行事务(调课 · 监考 · 考试排期 · 教材申报 · 开学期末清单)

> **Goal**:教学运行事务都是小事,但**每件都能出事** —— 调课漏报、监考撞车、
> 考试排期冲突、教材漏订,单看都不大,出错直接冲教学秩序。
> 本技能把「靠脑子记」换成「靠检查过」:把散落的课表、教室、教师名单、
> 校历落成一张可核对的数据表,用 `人 × 时间 × 空间` 三维交叉核对,
> **冲突显式列出来**,再由人拍板。
>
> **本技能只准备材料、只做检查,不做决定**:调停课要报教务审批,
> 监考安排要跟同事商量,教材要按本校规定选。产出是初稿与核对表,不是终稿。

## 何时使用

- 「写个调课申请」/「下周出差,这课怎么调」/「要停一次课,怎么补」
- 「安排监考表」/「监考怎么排」/「谁监考哪一场」
- 「排期末考试时间」/「考试排期怎么报」/「教室不够用怎么办」
- 「申报教材」/「教材选用表怎么填」/「教材什么时候报」/「换教材要走什么流程」
- 「开学要交什么材料」/「期末教学材料清单」/「成绩什么时候录」
- 「期末考试跟我的课冲突了」/「监考撞车了怎么办」

**不适用**(走别的 skill):

| 需求 | 该用哪个 skill |
|---|---|
| 出试卷、编题、双向细目表 | `quiz-generator` / `exam-pipeline` |
| 考后成绩分析、试卷质量分析 | `exam-pipeline` |
| 写教案、教学大纲、教学设计 | `lesson-plan` |
| 排组会、学生汇报 | `lab-meeting` |
| 写公文、通知、会议纪要 | `admin-reporting` / `meeting-notices` |

**一句话边界**:`exam-pipeline` 管「卷子」,本技能管「卷子什么时候、在哪考、谁监考」。

## 底座(禁止重写)

| 路径 | 用途 |
|---|---|
| `skills/awesome-benzi/references/INPUT_MODEL.md` | **`question-batch` 一次性提问机制**,本技能 intake 直接复用(`IN-QUESTION-002` 同批合并,`IN-QUESTION-004` 不连环追问) |
| `skills/awesome-benzi/references/QUALITY_GATES.md` | **冲突分级口径**:`blocked` / `needs-review` / `advisory`,`QG-ISSUE-003` 有 blocked 不得进入下一状态;错误码退出约定见 `QG-ERROR-003` |
| `skills/awesome-benzi/references/LANGUAGE_MODEL.md` | 通知话术、监考须知的「AI 味」治理:去套话、去机械转承 |
| `skills/office-layer/` | **文件产出唯一通道**(docx / xlsx / pptx),禁止手写 OOXML、禁止文本框拼伪表格 |
| `THIRD_PARTY_NOTICES.md` | 底座溯源与许可证合规(哪些能引用、哪些已排除) |

本技能自带的检查工具(**只做计算与出 spec,落盘一律交 office-layer**):

| 脚本 | 作用 |
|---|---|
| `skills/teaching-ops/scripts/conflict_check.py` | 人 × 时间 × 空间交叉核对,输出分级冲突清单 + xlsx spec + Markdown 报告 |
| `skills/teaching-ops/scripts/invigilation_plan.py` | 监考需求 → 排班(硬约束不违反、次数均衡),输出监考表 spec 与核对数据 |
| `skills/teaching-ops/scripts/term_calendar.py` | 开学首日 → 学期周次与时间节点倒排表 spec |

## 前置信息收集(intake,一次性问完)

按 `INPUT_MODEL.md` 的 `question-batch`,把下面 **6 组问题合并成一次提问**,
不要边做边问。缺的**用安全默认值继续并在交付物里标注**,不要停下来干等。

| # | 问什么 | 为什么要 | 缺了怎么办 |
|---|---|---|---|
| 1 | 学期、**第 1 周周一是哪天**、总周次、考试周、校历(节假日/调休/停课) | 所有周次换算、节假日冲突、倒排表的唯一锚点 | 缺锚点 → 倒排表整表不生成,只出模板并标 `【待补:开学首日】` |
| 2 | **本人课表**(课程、班级、周次、星期节次、教室)| 调课要与本人其他课比对 | 缺 → 无法做「与本人其他课程冲突」检查,显式告知不可核对 |
| 3 | **教室资源**(教室号、容量、设备、是否已登记借用) | 容量/设备/占用冲突 | 缺容量 → 容量项跳过并标注「未核对」 |
| 4 | **教师名单**(姓名、任课班级、是否班主任、不可用日期、监考上限/减免情况) | 监考排班与回避规则 | 缺 → 不排班(本技能不编人名),改为出需求汇总表 |
| 5 | **本校规定**:调停课审批流程与审批人、监考人数定额与回避规定、单日/单学期监考上限、连考间隔要求、成绩录入与归档截止 | 各校口径差异极大 | 全部按「通行惯例」出草案,逐条标 `【待教师确认:以本校教务文件为准】` |
| 6 | **截止时间与模板**:本次要交什么、交给谁、什么时候交、有无学校模板文件 | 决定产出物与倒排 | 无模板 → 用通用结构并标注「请对照贵校模板调整」 |

**第 5 组是本校差异最大的一组,问不到就明说,不要猜** —— 猜错的代价是材料被打回。

问完把答案落成一份数据文件(后续所有检查都读它,改数据只需改这里):

```json
{
  "term": {"name": "2025-2026-2", "start": "2026-03-02", "weeks": 18, "exam_weeks": [17, 18]},
  "holidays": ["2026-04-06", "2026-05-01"],
  "rules": {"min_exam_gap_min": 30, "max_daily_invigilation": 2},
  "rooms": [{"room": "教三-201", "capacity": 60, "equipment": ["多媒体", "投影"]}],
  "events": [
    {"id": "E1", "kind": "上课", "status": "active", "course": "数据结构", "teacher": "张明",
     "class": "计科2201", "date": "2026-03-11", "start": "08:00", "end": "09:40",
     "room": "教三-201", "students": 45, "origin": "", "approval": ""}
  ],
  "invigilation": {
    "requirements": [{"id": "I1", "course": "数据结构", "class": "计科2201",
                      "date": "2026-06-22", "start": "09:00", "end": "11:00",
                      "room": "教三-201", "need": 2}],
    "teachers": [{"name": "张明", "teaches": ["计科2201"], "homeroom": [],
                  "unavailable": ["2026-06-23"], "max_slots": 3}],
    "assignments": [],
    "rules": {"avoid_own_class": true, "avoid_homeroom": true, "balance_tolerance": 1}
  }
}
```

**`status` 的语义(调课就靠它表达)**:`active` = 真实占用;`cancelled` = 原安排已取消,
只留痕、不参与占用核对。**调课 = 原时间一条 `cancelled` + 新时间一条 `active`**;
停课 = 原时间一条 `cancelled`;补课 = 新时间一条 `active`。
所有时间必须是零填充的 `HH:MM`(`9:00` 会被判为格式错误并阻断,这是有意的)。

## 核心方法:人 × 时间 × 空间交叉核对

教学运行的事故只有三类根因:**同一个人被排了两次、同一个班被排了两次、
同一个教室被排了两次**,再加上一条「违反了校历/教务规定」。所以核对表就按这四路查。

### 冲突检测表(本技能的骨架)

| 维度 | 规则 ID | 查什么 | 级别 |
|---|---|---|---|
| 人 × 时间 | `CHK-TEACHER` | 同一教师同一时段两场课/考试 | **blocked** |
| 班 × 时间 | `CHK-CLASS` | 同一班级同一时段两门课/两场考试 | **blocked** |
| 空间 × 时间 | `CHK-ROOM` | 同一教室同一时段两场活动 | **blocked** |
| 校历 | `CHK-HOLIDAY` | 排到法定节假日/校历特殊日 | **blocked** |
| 考试周 | `CHK-EXAMWEEK` | 考试周还排了课 | needs-review |
| 学期周次 | `CHK-TERM` | 周次落不到 1..总周次(开学日或校历有问题) | needs-review |
| 教室容量 | `CHK-CAPACITY` | 学生数 > 教室容量 | needs-review |
| 教室设备 | `CHK-EQUIP` | 需要设备该教室没有 | needs-review |
| 教室登记 | `CHK-ROOM-REG` | 教室不在资源清单里(写法不一致) | needs-review |
| 连考间隔 | `CHK-CLASS-GAP` | 同班同日两场考试间隔小于本校要求 | needs-review |
| 字段完整性 | `CHK-FIELD` / `CHK-TIME` | 缺教师/班级/教室、时间格式错或起止倒置 | **blocked** |
| 审批留痕 | `CHK-APPROVAL` | 调停补课没有审批状态 | needs-review |
| 原安排说明 | `CHK-ORIGIN` | 调停补课没写原上课时间地点 | needs-review |
| 监考:撞车 | `INV-CLASH` | 同一人同一时段两场监考 | **blocked** |
| 监考:有课 | `INV-TEACH-BUSY` | 该时段本人有课 | **blocked** |
| 监考:请假 | `INV-UNAVAIL` | 排到已登记不可用的日期 | **blocked** |
| 监考:缺口 | `INV-GAP` | 考场监考人数不够(已尝试排班) | **blocked** |
| 监考:未排班 | `INV-TODO` | 只有需求、还没排班 | needs-review |
| 监考:重复 | `INV-DUP` | 同一考场同一人被排两次 | **blocked** |
| 监考:回避 | `INV-OWN-CLASS` / `INV-HOMEROOM` | 排到本人任课班级/班主任班级 | needs-review |
| 监考:超标 | `INV-OVERLOAD` / `INV-DAILY` | 超过本人上限/单日连监上限 | needs-review |
| 监考:均衡 | `INV-BALANCE` | 同事之间监考次数差过大 | advisory |

**执行口径(照 `QUALITY_GATES.md`)**:
- `blocked` —— **不得进入下一步**。排期不得执行、不得通知学生、不得上报教务。
- `needs-review` —— 逐条给结论(改 / 保留并写明依据),不得空着。
- `advisory` —— 提示,写清为什么这样安排。

### 跑批(推荐)

```bash
cd /Users/mingo/Documents/kimi/Workspaces/skills     # 技能包根目录
PY="skills/office-layer/.venv/bin/python"            # 首次:bash skills/office-layer/bootstrap.sh

$PY skills/teaching-ops/scripts/conflict_check.py \
    --in 过程/排期数据.json --spec 过程/冲突spec.json --report 过程/冲突报告.md
# 退出码 2 = 有 blocked,**不要忽略这个非零退出码**
$PY skills/office-layer/scripts/xlsx_kit.py build --spec 过程/冲突spec.json --out 排期冲突核对表.xlsx
$PY skills/office-layer/scripts/xlsx_kit.py inspect --in 排期冲突核对表.xlsx   # 自检
```

### 没有 JSON 时的替代做法(Excel 条件核对)

数据在表里不想转 JSON,就在 `排期冲突核对表.xlsx` 的「事件总表」右侧加辅助列
(列序:A 编号 B 类型 C 状态 D 课程 **E 教师 F 班级 G 日期 H 起 I 止 J 教室** K 人数):

```excel
' 教师冲突(O 列)—— 同一教师、同一天、时段相交的行数
=IF(COUNTIFS($C$2:$C$999,"生效",$E$2:$E$999,E2,$G$2:$G$999,G2,$H$2:$H$999,"<"&I2,$I$2:$I$999,">"&H2)>1,"✘ 教师冲突","")

' 班级冲突(P 列):把 $E 换成 $F;教室冲突(Q 列):把 $E 换成 $J
=IF(COUNTIFS($C$2:$C$999,"生效",$F$2:$F$999,F2,$G$2:$G$999,G2,$H$2:$H$999,"<"&I2,$I$2:$I$999,">"&H2)>1,"✘ 班级冲突","")
```

- 行数 >1 就是冲突(自己那一行也计入)。筛出所有带 `✘` 的行,就是必须解决清单。
- **时间列必须是零填充文本 `HH:MM`(或改成数值分钟数)**,否则 `<` / `>` 比较会错。
- Excel 只覆盖「人/班/地」三类;节假日、考试周、容量、审批留痕仍要人工逐条过
  —— 所以能用脚本就用脚本,Excel 兜底。

**红线级的执行纪律**:冲突**必须显式列出**。任何情况下都不允许「看着差不多就放过去」、
不允许把冲突项从表里删掉、不允许只报一次口头结论而不落表。

## 工作流

### 阶段零 · 任务分诊

**输入**:教师一句话需求 + intake 答案。
**动作**:按下面这张表判走哪条线(可多线并行,如「排考试 + 排监考」走 C → B)。

| 教师意图 | 走哪条线 |
|---|---|
| 调课 / 停课 / 补课 / 出差改课 | **A 线**(先跑阶段一) |
| 监考安排 / 监考表 | **B 线**(阶段一 → B) |
| 期末考试时间 / 教室协调 / 缓考补考 | **C 线**(阶段一 → B → C) |
| 教材申报 / 教材选用 / 换教材 | **D 线**(不依赖阶段一) |
| 开学准备 / 期末清单 / 什么时候交什么 | **E 线**(不依赖阶段一) |

**输出**:任务类型标记 + 本次要交付的文件清单。
**退出条件**:6 组 intake 问题全部有答案或已用默认值标注;要交付什么、交给谁、什么时候交明确。

---

### 阶段一 · 排期数据落表与交叉核对(A/B/C 线共用)

**输入**:intake 的课表、教室清单、教师名单、校历、本校规定。
**动作**:
1. 把真实数据写进 `过程/排期数据.json`(**一条一条照抄教师提供的材料,看不清就标 `【待补:…】`**)。
2. 跑 `conflict_check.py`,读退出码与三档统计。
3. `blocked` 逐条解决(改数据 → 重跑);`needs-review` 逐条给结论。
4. 用 `xlsx_kit.py build` + `inspect` 落表并自检。

**输出**:`排期冲突核对表.xlsx`(事件总表 / 冲突清单 / 人时地交叉核对 / 监考需求 / 核对结论)
+ `冲突报告.md`。
**退出条件**:**`blocked` 清零**;`needs-review` 每条都有「改掉」或「保留 + 依据」;
表格经 `inspect` 校验过。**做不到就如实说做不到,不要写「基本没问题」。**

---

### A 线 · 调课 / 停课 / 补课申请

**输入**:原上课时间地点、拟调整后的时间地点、原因、补课方案、影响学生范围。

**动作 1:把申请要素填齐**(缺一项就留占位,教务处退件最常见的原因就是要素不全)

| 要素 | 说明 | 例子 / 占位 |
|---|---|---|
| 课程名称与代码 | 与教务系统一致 | 数据结构 / `【待补:课程代码】` |
| 授课教师、班级 | 影响的班级要写全 | 张明 / 计科2201 |
| 学生人数 | 真实选课人数,**不估** | 45(`【待补:以教务系统选课人数为准】`) |
| 原上课时间地点 | 精确到周次+星期+节次+教室 | 第 2 周 2026-03-11 周三 1-2 节 教三-201 |
| 调整后时间地点 | 同上 | 第 2 周 2026-03-12 周四 3-4 节 教四-101 |
| 调课原因 | 写真实原因,附证明材料 | `【待补:出差/会议/病假,并附证明】` |
| 补课方案 | 停课必须写怎么补、何时补;不补要说明如何保证进度 | `【待补:第 X 周 X 日 X 节补课】` |
| 影响学生范围 | 只有本班还是涉及合班/选修 | 仅计科2201,45 人 |
| 审批留痕 | 教研室→学院→教务处的意见与批件号 | `【待补:批件号与批准日期】` |

**动作 2:逐条过调课冲突检查清单**(这 5 项一项都不能跳)

| 检查项 | 怎么查 | 查不出怎么办 |
|---|---|---|
| ① 与本人其他课程冲突 | 阶段一 `CHK-TEACHER`;Excel 公式 O 列 | 没有课表 → 明写「未核对:缺本人课表」 |
| ② 与教室占用冲突 | 阶段一 `CHK-ROOM`;Excel Q 列;再向教室管理部门确认借用登记 | 教室未登记 → `CHK-ROOM-REG` needs-review |
| ③ 与学生其他课程冲突 | 阶段一 `CHK-CLASS`;必要时请教学秘书核对全班课表 | 缺班级课表 → 标「需教学秘书核对」 |
| ④ 与国家法定节假日/校历冲突 | 阶段一 `CHK-HOLIDAY`(节假日清单由教师提供,**不内置**) | 校历未提供 → 标 `【待补:本校校历】` |
| ⑤ 与考试周冲突 | 阶段一 `CHK-EXAMWEEK` | 考试周未知 → 标 `【待补:考试周】` |

**动作 3:出申请表初稿**(表内带冲突自查表 + 三级审批栏 + 人工确认位)

```bash
$PY skills/office-layer/scripts/docx_kit.py spec --spec 过程/调课申请spec.json --out 调课申请表初稿.docx
$PY skills/office-layer/scripts/docx_kit.py inspect --in 调课申请表初稿.docx
```

`调课申请spec.json` 骨架(`spec` 模式支持 title/subtitle/sections/table/placeholder):

```json
{"title": "本科课程调课申请表", "subtitle": "2025-2026 学年第二学期",
 "sections": [
   {"heading": "一、课程基本信息", "no_indent": true,
    "table": {"header": ["项目", "内容"],
              "rows": [["课程名称", "数据结构"], ["课程代码", "【待补:课程代码】"],
                       ["授课班级", "计科2201"], ["学生人数", "45"]]}},
   {"heading": "七、冲突自查(逐项核对后打钩)", "no_indent": true,
    "table": {"header": ["核对项", "结论", "说明"],
              "rows": [["与本人其他课程冲突", "【待教师确认】", ""],
                       ["与教室占用冲突", "【待教师确认】", ""],
                       ["与学生其他课程冲突", "【待教师确认】", ""],
                       ["与法定节假日/校历冲突", "【待教师确认】", ""],
                       ["与考试周冲突", "【待教师确认】", ""]]}},
   {"heading": "八、审批", "no_indent": true,
    "table": {"header": ["环节", "意见", "签名/日期"],
              "rows": [["教研室主任", "【待签署】", ""], ["教学副院长", "【待签署】", ""],
                       ["教务处", "【待签署】", ""]]}},
   {"placeholder": "【待教师确认:以上内容与事实一致,并已知悉在教务批准前不得执行调课、不得通知学生】"}
 ]}
```

**动作 4:起草通知学生的话术**(**只出草稿,由教师在获批后自己发出**)

```text
【调课通知】《数据结构》课程调整
原定:3 月 11 日(周三)第 1-2 节,教三-201
调整为:3 月 12 日(周四)第 3-4 节,教四-101
涉及班级:计科 2201(45 人)
调课原因:教师参加学校会议(已报教务处审批,批件号:【待补:批件号】)
课时说明:本次调整不减少课时,总学时不变
请提前 5 分钟到课;如与其他课程冲突,请于 3 月 10 日前向学习委员反馈。
联系人:【待补:教师姓名与联系方式】
```

话术三原则:**写明原时间与新时间、说明是否减少课时、给出反馈渠道与截止时间**。
不要写「望周知」「特此通知」这类空壳句(见 `LANGUAGE_MODEL.md`)。

**输出**:`调课申请表初稿.docx`、`调课通知_草稿.md`、`排期冲突核对表.xlsx`。

**退出条件**:① 五类冲突全部有明确结论(含「未核对 + 原因」);② 申请表所有未知项为
`【待补:…】`;③ 审批栏留空待签;④ **明确告知教师:未经教务批准不得执行、不得通知学生**。

---

### B 线 · 监考安排

**输入**:监考需求(科目 × 时间 × 考场 × 需监考人数)、教师名单(任课班级/不可用日期/上限)。

**动作 1:汇总需求**(一项都不能凭印象补)

| 字段 | 来源 | 缺了怎么办 |
|---|---|---|
| 考试科目、班级 | 教务考试安排 / 开课学院 | 缺 → 索要,不猜 |
| 日期、起止时间 | 教务考试安排 | 缺 → 不排 |
| 考场 | 教务安排 | 缺 → `【待补:考场】` |
| 需监考人数 | **本校监考定额**(多按考生人数分档) | 缺 → 不排,脚本会直接退出并说明原因 |

**动作 2:排班并复检**

```bash
$PY skills/teaching-ops/scripts/invigilation_plan.py \
    --in 过程/排期数据.json --spec 过程/监考spec.json --out-check 过程/监考核对.json
# 需要关闭「任课教师回避本班」时(仅在本校确无此规定时)加 --allow-own-class
$PY skills/office-layer/scripts/xlsx_kit.py build --spec 过程/监考spec.json --out 监考表.xlsx
$PY skills/teaching-ops/scripts/conflict_check.py --in 过程/监考核对.json --report 过程/监考核对报告.md
$PY skills/office-layer/scripts/xlsx_kit.py inspect --in 监考表.xlsx
```

排班器遵守的约束(**硬约束绝不违反,宁可留缺口报错**):

| 类型 | 约束 | 违反后果 |
|---|---|---|
| 硬 | 同一人同一时段只能一个考场 | 排班时直接跳过该人 |
| 硬 | 已登记不可用(请假/出差)的日期不排 | 跳过 |
| 硬 | 本人该时段有课不排 | 跳过 |
| 软 | 回避本人授课班级(`--allow-own-class` 可关) | 跳过;复检另报 needs-review |
| 软 | 回避本人任班主任班级 | 跳过 |
| 软 | 单人不超过 `max_slots` | 跳过;复检另报 |
| 公平 | 按已排场次最少优先(同次数按姓名排序,结果可复现) | 均衡差 > 容差时报 `INV-BALANCE` |
| 缺口 | 排不满就报 `INV-GAP`(blocked) | **不用凑数的人填坑** |

**动作 3:与同事协调**(脚本不做,也不能替教师做)

```text
X 老师您好,本学期期末监考先跟您对一下:
· 6 月 22 日(周一)09:00-11:00 教三-201《数据结构》,主监考
这个时段您有课或者其他安排吗?如不方便,请在本周五前回我一句,我再协调换人。
本次安排还要报教务处审批,批完我再发正式通知。
```

协调纪律:**一次问完、给足回复时间、说明为什么找到他、不均衡时说明原因、
主动问一句是否有特殊情况**(孕期、健康、临近退休、行政岗、家有需要照顾的人,
各校通常有减免规定 —— 以本校规定为准,别替学校承诺)。

**动作 4:出监考须知与流程提醒**(把「会忘的事」写在纸上)

| 时间点 | 该做什么 |
|---|---|
| 考前 30 分钟 | 到考务办领卷,核对课程/班级/份数/考场,检查封条完好 |
| **考前 20 分钟** | **到达考场**:一人清场(桌面、抽屉、墙面),一人门口组织入场 |
| 开考前 | 逐个核验证件(不一致不得入场);按本校要求宣读考场纪律 |
| 考试中 | 一前一后,不交谈、不看手机、不长时间离场;发现疑似违纪**先取证不争执** |
| 结束前 15 分钟 | 提醒时间;**不得提前收卷** |
| 收卷 | 按座位号清点**两遍**,份数与本考场实到人数核对一致;封袋签名,当场交回考务办 |

违纪处理流程:① 暂扣违纪材料 ② 填《违纪情况登记表》并由考生签字
③ 两名监考共同签字 ④ 考后连同材料交考务办 ⑤ 认定与处分**按本校规定执行**。
**本技能不引具体条款号、不代替学校的认定程序。**

```bash
$PY skills/office-layer/scripts/docx_kit.py md --in 过程/监考须知.md --out 监考须知.docx --title "监考须知"
```

**输出**:`监考表.xlsx`(需求汇总 / 安排表 / 均衡与可用性统计 / 缺口与说明)、
`监考核对报告.md`、`监考须知.docx`、`监考协调话术.md`。

**退出条件**:① `INV-GAP` = 0,或缺口已显式上报教务;② 无 `INV-CLASH` / `INV-UNAVAIL` /
`INV-TEACH-BUSY`;③ 每位被排的教师都已协调确认(表里保留
`【待教师确认:X 月 X 日是否可监考】`);④ 明确告知:**安排表在教务审批前不是正式安排**。

---

### C 线 · 考试排期与教室协调

**输入**:科目、班级、人数、时长、需要的教室容量与设备。

**动作 1:排期要素成表** —— 科目 / 班级 / 人数(真实选课人数)/ 考试时长 /
建议时段 / 需要容量 / 需要设备(如绘图桌、机房、听力设备)。

**动作 2:四类冲突核对**(跑阶段一,读对应规则)

| 冲突类型 | 规则 | 处置 |
|---|---|---|
| 教室占用 | `CHK-ROOM` | 换教室或换时段,并同步教室借用登记 |
| 学生连考 | `CHK-CLASS-GAP`(同班同日两场间隔) | 调开一场;间隔要求以本校考务规定为准 |
| 教师连监 | `INV-DAILY` / `INV-OVERLOAD` | 换人;连续监考影响状态 |
| 与上课冲突 | `CHK-TEACHER` / `INV-TEACH-BUSY` | 换时段或换人,**不得让教师同时上课与监考** |
| 容量/设备 | `CHK-CAPACITY` / `CHK-EQUIP` | 换大教室 / 换有设备的教室,或申请临时设备 |
| 考试周边界 | `CHK-EXAMWEEK` / `CHK-HOLIDAY` | 考试不得排在节假日;考试周内不排课 |

**动作 3:缓考 / 补考安排** —— 单独成表,写清:缓考名单与依据(`【待补:缓考原因与审批】`)、
补考时间地点、监考(照 B 线走一遍,同样要避开与正常考试冲突)、
成绩记载方式(**按本校规定,本技能不做判定**)。

**动作 4:教室协调** —— 输出「教室需求清单」交教室管理部门:日期、时段、教室号、
容量、设备、班级;换教室后必须回头重跑阶段一(换了教室就可能撞别人)。

**输出**:`考试排期表.xlsx`、`缓考补考安排表.xlsx`、`教室需求清单.xlsx`(均走 `xlsx_kit.py build`)。
**退出条件**:四类冲突全部有结论;教室需求清单已发出并得到确认(未确认的写清「待教室管理部门确认」)。

---

### D 线 · 教材申报与选用

**输入**:课程、班级、学生数、拟选用教材信息、是否变更。

**动作 1:过选用原则**(判断依据必须来自真实材料,不能凭印象)

| 原则 | 怎么核 |
|---|---|
| **马工程教材优先** | 该课程是否有对应马工程教材,**以教育部/本校教材科发布的清单为准**;有则按规定必须选用 —— 本技能不凭印象断定哪门课有 |
| 出版时间 | 一般要求近三年出版/最新版次;以出版社版权页信息为准 |
| 是否有配套教辅 | 习题集、实验指导、数字资源是否可得 |
| 是否规划教材 | 国家级/省级规划教材标识 |
| 与大纲匹配 | 章节目录能否覆盖课程大纲的考核点 |
| 价格与用量 | 学生负担与到书可能性 |

**动作 2:填申报要素**(**ISBN、价格、版次、出版社必须来自出版社官网/教材科的真实数据 ——
ISBN 是硬事实,编错就是错订教材,这里严禁模型补全**)

| 要素 | 说明 |
|---|---|
| 书名、作者、出版社 | 与版权页一致 |
| **ISBN** | 13 位,`【待补:请从出版社官网或教材科系统抄录】` |
| 版次、出版年月 | 如「第 5 版,2023 年 8 月」 |
| 单价 | 以教材科报价为准 |
| 使用班级、学生数 | 真实选课人数 |
| 用量估算 | 学生数 ×(1+损耗 3%~5%) + 教师用书 + 样书;**损耗率按本校惯例,先用 5% 并以教材科口径复核** |
| 是否新订/续订/变更 | 变更须附理由 |
| 自编/校本教材 | 另附审定意见与印刷需求 |

**动作 3:教材变更与评价** —— 变更必须写清理由(版本更新 / 停版 / 与大纲不符 /
马工程要求 / 学生反馈),并附上一轮使用评价:使用班级、使用效果、学生反馈、
是否继续使用。评价内容**由教师提供,本技能不代写评价结论**。

**动作 4:自编讲义 / 校本教材申报** —— 流程:主编申请 → 教研室审核 →
学院教学委员会审定 → 教务处备案/审批 → 印刷(写明印量、字数、使用范围、
是否公开出版)。各校要求不同,**以本校教材管理办法为准**。

**输出**:`教材选用申报表初稿.docx`、`教材变更申请表初稿.docx`、`教材申报汇总表.xlsx`
(含用量估算列与核对列)。
**退出条件**:所有 ISBN / 价格 / 版次要么来自真实来源、要么是 `【待补:…】`;
用量估算写明算法与损耗率来源;变更理由与评价由教师确认。

---

### E 线 · 开学 / 期末教学准备清单(时间节点倒排)

**输入**:**第 1 周周一**、总周次、考试周、节假日。
**动作**:以开学首日为锚点,把「第几周要交什么」倒排成有具体日期的表。

```bash
$PY skills/teaching-ops/scripts/term_calendar.py \
    --start 2026-03-02 --weeks 18 --exam-weeks 17,18 \
    --holidays 2026-04-06,2026-05-01 --spec 过程/倒排spec.json
$PY skills/office-layer/scripts/xlsx_kit.py build --spec 过程/倒排spec.json --out 学期时间节点倒排表.xlsx
$PY skills/office-layer/scripts/xlsx_kit.py inspect --in 学期时间节点倒排表.xlsx
```

倒排表默认节点(**通行惯例,每行都留了「校历核对位」,必须逐行对本校通知核实**):

| 锚点 | 节点 | 为什么不能漏 |
|---|---|---|
| 开学前 2 周 | 教材申报与到货核对 | 漏订在开学前还能补 |
| 开学前 1 周 | 课表与教室确认 | 冲突此时还能改 |
| 第 1 周 | 教学日历 / 授课计划提交 | 提交后修改要走变更 |
| 第 1 周 | 点名册与选课名单核对 | 退补选结束前处理异常 |
| 第 2 周 | 教学资料(大纲/教案)归档 | 学期档案首轮归档 |
| 第 3 周 | 补考 / 缓考安排确认 | 名单、时间地点、监考一并定 |
| 第 8 周 | 期中教学检查材料 | 教案、作业批改样本、考勤 |
| 第 16 周 | 期末考试排期上报 + 监考需求汇总 | 排期与监考要留协调时间 |
| 第 17-18 周 | 考试周(停课) | 考试周内不排课 |
| 考试周后 2 周内 | 成绩录入截止 | 逾期改分另走流程 |
| 学期结束后 | 试卷与教学资料归档 | 试卷、成绩单、试卷分析、教学总结 |

**期末三件事的先后顺序不能反**:① 考试排期确定 → ② 监考安排 → ③ 监考通知发出。
先发通知再改排期,是最常见的返工来源。

**输出**:`学期时间节点倒排表.xlsx`(倒排表 / 周次日历 / 口径与免责)。
**退出条件**:锚点日期真实;每行「校历核对位」已由教师逐条核实或标注待核;
本校特有节点已补进表。

---

### 阶段末 · 交付

1. 所有 xlsx/docx 均由 `skills/office-layer/` 生成,并用 `inspect` 读回校验(表格数、段落数符合预期)。
2. 交付说明固定包含四句:
   - 「这是初稿,请重点核对:`【待补:…】` 处、`【待教师确认:…】` 处、日期与教室编号。」
   - 「调课/停课/补课须经教务审批,**审批前不得执行、不得通知学生**。」
   - 「监考安排涉及同事,请先与本人协调并经教务审批后再发正式通知。」
   - 「各校教务规定不同,本材料按通行惯例起草,**以本校教务文件与教务审核结论为准**。」
3. 含学生姓名/学号/人数的文件在文件名或首页标注「含学生个人信息,请注意保管」。
4. 提醒教师删除 `过程/` 下的中间文件(JSON、spec、临时 xlsx)。

## 产出物

| 文件 | 内容 | 通道 |
|---|---|---|
| `排期冲突核对表.xlsx` | 事件总表 / 冲突清单 / 人时地交叉核对 / 监考需求 / 核对结论 | `xlsx_kit.py build` |
| `冲突报告.md` | 分级冲突清单 + 交叉核对结论 + 「必须由人做的事」 | `conflict_check.py` |
| `调课申请表初稿.docx` | 申请要素 + 五类冲突自查表 + 三级审批栏 + 人工确认位 | `docx_kit.py spec` |
| `调课通知_草稿.md` | 通知学生话术(获批后由教师发出) | 直接交付 Markdown |
| `监考表.xlsx` | 需求汇总 / 安排表 / 均衡与可用性统计 / 缺口与说明 | `xlsx_kit.py build` |
| `监考核对报告.md` | 监考冲突复检结果与缺口 | `conflict_check.py` |
| `监考须知.docx` | 考前 20 分钟到场、清场、证件核验、违纪处理、试卷清点 | `docx_kit.py md` |
| `考试排期表.xlsx` / `缓考补考安排表.xlsx` / `教室需求清单.xlsx` | C 线三表 | `xlsx_kit.py build` |
| `教材选用申报表初稿.docx` / `教材变更申请表初稿.docx` / `教材申报汇总表.xlsx` | D 线三件 | `docx_kit.py` / `xlsx_kit.py` |
| `学期时间节点倒排表.xlsx` | 倒排表 / 周次日历 / 口径与免责 | `term_calendar.py` + `xlsx_kit.py build` |

## 红线

1. **不虚构课表、教室、教师名单、学生数、考试需求、ISBN、价格、版次**。
   排期的一切依据来自教师/教务提供的真实数据;**没有数据就留 `【待补:具体说明】` 占位**,
   绝不凭常识补一个「大概是这样」的教室号或人名。编错一个教室号,两个班就要在走廊上课。
2. **调课 / 停课必须经教务审批**。本技能只帮准备申请材料与冲突自查,
   **不得代替教师做决定,不得直接通知学生**。审批前一律表述为「送审材料」。
3. **监考安排涉及同事,须协调与尊重,不得擅自指派**。产出是「建议安排 + 待确认」,
   不是通知;排班结果必须留 `【待教师确认:…】` 位,并由教师本人去沟通。
4. **学生名单等个人信息只在本机处理**,不上传、不外发;中间文件任务结束后提醒删除,
   交付含个人信息的文件时明确提示保管要求。
5. **各校教务规定不同,必须提示以本校教务文件为准**。监考定额、回避规定、连考间隔、
   审批流程、教材选用与马工程清单、成绩录入学分规则 —— 本技能一律给「通行惯例 + 待核对位」,
   不给「你们学校就是这么规定的」。**不引具体条款号。**
6. **排期冲突必须报错而非静默通过**。`conflict_check.py` 退出码 2 表示有 blocked,
   必须解决后重跑;**冲突结论要显式列在表里**,不允许「心里知道但没写」,
   也不允许为了交付好看而删掉冲突行。
7. 不修改、覆盖教师提供的原始材料;过程文件只放 `过程/` 目录。

## 自检清单

交付前逐项过(对应 `CONVENTIONS.md` 第 8 节与 `QUALITY_GATES.md`):

- [ ] intake 6 组问题一次性问完,缺的项用默认值并**在交付物里标注**
- [ ] 排期数据里**没有一条是我编的**:教师、班级、教室、人数、考试时间全部可溯源
- [ ] `conflict_check.py` 退出码为 0(**没有 blocked**);若不为 0,是否已解决并重跑
- [ ] `needs-review` 每一条都有结论(改掉 / 保留 + 依据),没有空着
- [ ] 冲突清单**显式出现在交付表里**,没有为了好看而删行
- [ ] 五类调课冲突(本人课程 / 教室 / 学生课程 / 节假日校历 / 考试周)逐条有结论
- [ ] 监考:无 `INV-CLASH` / `INV-UNAVAIL` / `INV-TEACH-BUSY`;缺口为 0 或已上报
- [ ] 监考表里每位教师都留了「待本人确认」位,且话术已起草
- [ ] 教材表里所有 ISBN / 价格 / 版次要么真实来源、要么 `【待补:…】`
- [ ] 所有 docx/xlsx 由 `skills/office-layer/` 生成,并 `inspect` 过
- [ ] 交付说明写清了四句固定提示(初稿 / 需教务审批 / 需与同事协调 / 以本校文件为准)
- [ ] 含学生信息的文件已标注保管要求;已提醒删除 `过程/` 中间文件
- [ ] 引用的 底座路径真实存在(`ls` 验证过)

## 附:常见翻车点 → 哪一步挡住它

| 翻车点 | 挡住它的步骤 |
|---|---|
| 调课没报教务就上了,事后被追责 | A 线动作 3 + 红线 2(审批前不得执行、不得通知学生) |
| 调课时跟自己的另一门课撞了 | `CHK-TEACHER`(阶段一) |
| 换了教室,但那个时段教室已被别人借走 | `CHK-ROOM` + 教室借用登记确认 |
| 学生班级同时段两门课 | `CHK-CLASS` |
| 补课排在法定节假日 / 调休日 | `CHK-HOLIDAY`(节假日清单由教师提供) |
| 考试周里还在补课 | `CHK-EXAMWEEK` |
| 监考把自己排到两个考场 | `INV-CLASH`(硬约束,排班时就不可能发生) |
| 监考排给了请假的老师 | `INV-UNAVAIL` |
| 老师上课时段被排监考 | `INV-TEACH-BUSY` |
| 监考表排到本班任课教师,被要求回避 | `INV-OWN-CLASS` |
| 监考次数不均,同事有意见 | `INV-BALANCE` + 最少优先排班 |
| 考场监考人数不够,临时拉人 | `INV-GAP`(blocked,宁可上报教务) |
| 同一班两场考试挨太紧 | `CHK-CLASS-GAP` |
| 88 人的班排在 60 人的教室 | `CHK-CAPACITY` |
| 教材漏订 / 订错版本 | E 线倒排「开学前 2 周」+ D 线 ISBN 真实来源要求 |
| 成绩录入过期才发现 | E 线倒排「考试周后 2 周内」+ 以本校通知核实 |
| 材料被打回,说缺要素 | A/D 线要素表 + `CHK-FIELD` / `CHK-ORIGIN` / `CHK-APPROVAL` |

Files in this skill

  • SKILL.md35.9 KB
  • scripts/conflict_check.py34.1 KB
  • scripts/invigilation_plan.py14.6 KB
  • scripts/term_calendar.py8.7 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.