Back to skills
SKILL.md
Teaching Ops
ASecurity高校教师教学运行事务辅助:调课/停课/补课申请材料、监考安排与监考表、期末考试排期与教室协调、教材申报与选用、开学与期末教学准备清单。核心方法是「用检查代替记忆」——把 人 × 时间 × 空间 三个维度交叉核对,冲突显式报错而不静默通过。当教师说「写个调课申请」「安排监考表」「排期末考试时间」「申报教材」「补课怎么安排」「下周出差这课怎么调」「监考撞车了怎么办」「下学期教材什么时候报」「开学要交哪些材料」时使用。Triggers: 写个调课申请、安排监考表、排期末考试时间、申报教材、补课怎么安排、监考怎么排、监考撞车了、教室冲突怎么办、教材选用怎么填、教材什么时候报、开学要交什么材料、期末教学材料清单、调课审批流程、监考须知怎么写。
- 11 stars
- 0 votes
- 1 copy
- 2 views
- Added October 20, 2026
Security analysis
100/100Pro scans all 4 files and shows the line behind each finding
npx -y skills add EtherealMingo/university-teacher-skills --skill teaching-ops --agent claude-codeAre you the author of Teaching Ops?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/etherealmingo-teaching-ops)---
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.md
- scripts/conflict_check.py
- scripts/invigilation_plan.py
- scripts/term_calendar.py
Attribution
Comments
Loading comments…
Newsletter
Get the weekly list of safe new skills, and the ones we pulled.