L’interface est localisée ; les présentations et documents des Skills sont traduits automatiquement par IA dans votre langue. Le code, les commandes, chemins et termes techniques restent en version originale, et le document de l’auteur fait foi.
Explorer les Skills
Développement · SKILL.md

xiaozhi-teach-schedule-manager

xiaozhi-teach-schedule-manager

把独立教师"凭记忆排课"变成看得见的周课表与课时台账。 适用于老师说"排下周的课""把 [化名] 的课调到周四""[化名] 缺课要补""[化名] 请假""[化名] 还剩几课时""本周课表""这个时间排了谁""我下一节课是谁"。 流程:读学员可上课时间段 → 生成周课表 → 检测老师/学员时间冲突 → 老师确认后写入课表 → 维护课时包剩余与到期。 本 SKILL 不记课后内容、不扣课时、不处理金额与退费、不起草家长消息——课后记录与课时确认转 lesson-log,家长沟通转 parent-communication,财务请用独立记账工具。

Independent GitHub snapshot · Automated classification · Original documentation governs

Documentation de la Skill

GitHub

name: xiaozhi-teach-schedule-manager description: > 把独立教师"凭记忆排课"变成看得见的周课表与课时台账。 适用于老师说"排下周的课""把 [化名] 的课调到周四""[化名] 缺课要补""[化名] 请假""[化名] 还剩几课时""本周课表""这个时间排了谁""我下一节课是谁"。 流程:读学员可上课时间段 → 生成周课表 → 检测老师/学员时间冲突 → 老师确认后写入课表 → 维护课时包剩余与到期。 本 SKILL 不记课后内容、不扣课时、不处理金额与退费、不起草家长消息——课后记录与课时确认转 lesson-log,家长沟通转 parent-communication,财务请用独立记账工具。 compatibility: WorkBuddy / SkillHub / OpenClaw / ClawHub license: MIT metadata: display_name: 排课与课时管理 version: 2.11.1 author: 小智伴学 category: 独立教师 grade_bands: - 小学中段 - 小学高段 - 初中 - 高中 tags: [排课, 课时管理, 补课请假, 课时包, 排课冲突, 独立教师] depends_on: - xiaozhi-teach-student-intake - xiaozhi-teach-lesson-log - xiaozhi-teach-parent-communication id: openclaw:xiaozhi-teach-schedule-manager min_platform_version: "2.0" max_round_limit: 12

排课与课时管理 SKILL

一句话定位: 独立教师的时间是唯一不可再生的资产——把时间排清楚,是把生活排清楚。


技术边界

技术边界:本 SKILL 依赖能力 [M, K, F],无该能力时按 shared/platform-conventions.md 降级。

教学主体边界:本 SKILL 只给老师出草稿、做分析,不替老师上课,不代老师回答学生的问题,也不代老师评价学生;面向学生或家长的内容,一律由老师审定后再用(教育部《中小学生成式人工智能使用指南(2025 年版)》)。

适用范围:用于校外培训(一对一、小班)时,只在合法范围内用,口径见 shared/off-campus-training.md——学科类须经审批,各地已不再审批新的学科类培训机构;不占学校上课时间,线下 20:30、线上 21:00 前结束,不给学员留作业,一次收费不超过 3 个月或 60 课时,高中学员同样适用;面向义务教育阶段学生的另外不占用休息日、节假日与寒暑假,线上每课时不超过 30 分钟,面向高中学生的这两条参照执行。本技能不预设违规的排课、作业与收费。

⚠️ 危机例外(最高优先级):若对话中出现自伤/自残、轻生念头、遭受霸凌或伤害、持续严重绝望、家庭安全问题等超出学习范畴的信号,立即停止本 SKILL 的一切流程(含熔断、温情转化、数据展示、出题、家长摘要),按 shared/crisis-exception.md 处置:稳住不评判 → 说明 AI 边界 → 如实提示联系信任的成年人 → 按所在地区给出求助渠道(不确定地区时先问;中国大陆即时危险为 110/120,其他地区用当地紧急电话)。宁可误报,不可漏报;档案只记"已转介"的处置事实。

排课建议与冲突检测由本 SKILL 给出,写入课表前一律要老师确认。冲突检测只读 studentCards[].availability[](学员授权登记的可上课时间段),不擅自扩大可上课范围。无 K(日期感知)时先问今天日期与本周起止日再排课。

课时怎么算不归本 SKILL 管:单节课的消耗由 xiaozhi-teach-lesson-log 在课后生成待确认条目,老师确认后计入 usedUnits。本 SKILL 只维护课时包台账本身(总数、剩余、到期日)和到期提示。

财务不在本 SKILL 库范围:课时包台账只记课时数量(totalUnits / usedUnits / remainingUnits),不记金额、单价、收款、欠费、退费。这是有意划出的边界——请老师用独立的记账工具处理资金,教学数据与财务数据分开存放。因此本 SKILL 的任何流程都不会提出退款、赔付或折算金额的建议。


一、核心使命

独立教师排课常见的三个误区:

误区① 全靠记性:课排在脑子里,
        学员问"下次课什么时候"答不上来,
        学员冲突了才后知后觉。

误区② 课时台账混乱:学员课时包还剩多少不清楚,
        课时耗尽了才想起续费,
        学员超课时上课但课时没扣。

误区③ 补课调课靠手动:学员请假靠微信沟通,
        调课靠反复确认,
        没有系统记录,靠人脑容易漏。

本 SKILL 要解决的是:

  • 让排课可视化:周课表 + 学员可上课时间段
  • 让冲突早发现:排课时先比对 availability[] 再落笔
  • 让课时台账透明:每个学员课时包剩余、到期日、待确认条目清楚
  • 让补课请假有流程:标准动作 + 逐条留痕

二、触发时机

触发场景示例语句
排课"排下周的课" / "[化名] 排课"
周课表"本周课表" / "下周课表"
调课"调课" / "把 [化名] 的课调到 [日期]"

触发前提:要有明确的排课动作 + 对象(谁、哪天)。单说"调课""补课""请假"先追问是谁、哪一次;老师在聊别的时顺口提到"最近老调课"不激活。

老师说的话处理
"小A 这节课上完了" / "扣一课时"转课后记录助手(本 SKILL 不扣课时)
"小A 家长问调课怎么回"转家长沟通助手
"今天有哪些课"转独立教师工作台(只读汇总)
补课"补课" / "[化名] 缺课要补"
请假"[化名] 请假" / "学员请假怎么扣课时"
课时包"[化名] 还剩几课时" / "课时包快到期了"
登记课时包"[化名] 续了 [N] 课时,帮我登记"
排课冲突"这个时间排了谁" / "有没有冲突"
下一节课"我下一节课是谁"
续费节点"[化名] 课时快用完了"

三、核心流程

                ┌──────────────────────────┐
                │ ① 读学员可上课时间段      │
                │  studentCards[].availability│
                └────────────┬─────────────┘
                             ↓
                ┌──────────────────────────┐
                │ ② 周课表草案              │
                │  固定课 + 临时调课        │
                └────────────┬─────────────┘
                             ↓
                ┌──────────────────────────┐
                │ ③ 冲突检测                │
                │  老师时间 × availability  │
                └────────────┬─────────────┘
                             ↓
                ┌──────────────────────────┐
                │ ④ 排课建议 → 老师确认     │
                │  确认后才写 lessonSchedule│
                └────────────┬─────────────┘
                             ↓
                ┌──────────────────────────┐
                │ ⑤ 课时包台账              │
                │  剩余 / 到期 / 待确认条目 │
                └────────────┬─────────────┘
                             ↓
                ┌──────────────────────────┐
                │ ⑥ 补课/请假/调课          │
                │  一律生成待确认建议       │
                └──────────────────────────┘

四、可上课时间段

4.1 学员可上课时间(availability[])

学员的可上课时间登记在 workspace.studentCards[].availability[],每条是一个 {dayOfWeek, startTime, endTime} 三元组:

小A 的 availability:
  { "dayOfWeek": "周三", "startTime": "18:30", "endTime": "20:00" }
  { "dayOfWeek": "周五", "startTime": "18:30", "endTime": "20:00" }

只记时间,不记原因。"周三要上钢琴课""周日爷爷家"这类信息属于家庭安排,不写进档案——排课只需要知道哪段时间可用。

不要用 learningPreferences 做时间冲突检测。那个字段记的是学习方式偏好("喜欢先看例题""步骤要写全"),拿它判断时间会得出荒唐结论。老师若在 learningPreferences 里写了时间类内容,提示一次并帮他迁到 availability[]。

📎 完整登记模板见 references/weekly-schedule-template.md(第一节"学员可上课时间段")

4.2 老师自己的时间

老师的不可用时间与上课偏好记在 workspace.teacherProfile 与会话中,不入学员卡。授课形式(线上/线下)读 teacherProfile.deliveryChannels。

📎 完整模板见 references/weekly-schedule-template.md(第二节"老师时间矩阵":不可用时间 + 可用课时位 + 老师偏好)


五、周课表生成

5.1 课表模板

📎 完整模板见 references/weekly-schedule-template.md(第三节"周课表模板":周一至周五放学后时段的课表示例,周六、周日两列默认不排 + 课时统计栏)

5.2 课表生成三步走

第 1 步:固定学员优先
  · 每周固定时间学员先排
  · 锁定本周的"硬骨架"

第 2 步:临时学员填空
  · 填空固定学员之间的空位
  · 优先安排学习节奏紧急的学员

第 3 步:留缓冲位
  · 留 1-2 个空位处理调课/补课
  · 不满课是健康的课表

六、冲突检测

6.1 冲突类型

■ 老师时间冲突
  · 同时段 workspace.lessonSchedule[] 已有 status=scheduled/makeup 的课
    (比对 startTime 与 durationMinutes 算出的区间是否重叠)
  · 同时段是老师登记的不可用时间

■ 学员时间冲突
  · 拟排时段不落在该学员任何一条 availability[] 区间内
    (判据:同一 dayOfWeek,且 startTime ≤ 拟排开始,
      拟排结束 ≤ endTime)
  · 学员没登记 availability[] → 不猜,先问一次并登记

■ 时段规定
  · 所有学段(面向中小学生的校外培训都适用:国办发〔2018〕80 号;教基厅函〔2021〕11 号):
    线下课结束晚于 20:30、线上课结束晚于 21:00 → 提前;
    落在工作日白天的学校上课时间 → 不排
  · 小学中段 20:00、小学高段 20:20 前结束(shared/grade-bands.md 三)
  · 面向义务教育阶段学生的学科类培训("双减"意见;高中学员参照执行,按当地规定):
    落在周六、周日、法定节假日、寒暑假 → 不排;
    线上每课时超过 30 分钟,或两课时之间不足 10 分钟 →
    拆成每课时不超过 30 分钟、中间休息不少于 10 分钟
  · 处理:说一句依据,给出合规的候选时段或拆法,由老师选;其余照常排

■ 课时包提示
  · remainingUnits ≤ 3
  · expiryDate 距今 ≤ 7 天
  · pendingConfirmations 非空(剩余课时可能虚高)

冲突检测只看时间。 不因为"这个学员最近状态不好""家长不太配合"之类判断去调整排课建议——那不是排课要解决的问题。

6.2 冲突检测输出

📎 完整报告模板见 references/weekly-schedule-template.md(第 4.2 节"冲突检测输出":排课请求 + 四类检测结果 + 建议)


七、补课/请假/调课三动作

7.1 请假

■ 学员请假
  操作:
    · 课时不扣(对应课节 status=absence,
      课时条目由 lesson-log 生成 units=0 的待确认条目)
    · 记录请假日期;原因只记"已请假",不记家庭细节
    · 不代排补课;需要补课时按 §7.2 生成待确认的补课建议

📎 请假登记模板见 references/leave-makeup-reschedule-forms.md(第一节)

7.2 补课

■ 补课
  操作:
    · 在老师可用时间 ∩ 该学员 availability[] 中、合乎 §6.1 时段规定的范围里找候选时段
    · 生成"待确认的补课建议",列出 1-3 个候选:
        「小A 缺的这节课,这两个时间都排得开:
          本周五 18:30-20:00 / 下周五 18:30-20:00。
          选哪个?也可以都不选。」
    · 老师选定并与学员/家长确认后,才写入 lessonSchedule[](status=makeup)
    · 课时消耗仍由 lesson-log 在课后生成待确认条目

■ 排课优先级(建议顺序,老师可推翻)
  · 同周补 > 下周补
  · 一次排完 > 分散排
  · 尽量贴近该学员原有的上课节奏

📎 补课安排模板见 references/leave-makeup-reschedule-forms.md(第二节)

7.3 调课

■ 调课(双方协商)
  操作:
    · 老师主动调:与学员/家长协商新时间
    · 学员/家长主动调:登记新时间
    · 双方都要确认

⚠️ 调课原则:
  · 一周内完成调课,不留"待定"
  · 新时间同样过 §6.1 时段规定(不占学校上课时间、按时结束;面向义务教育阶段学生的学科类培训不调到周六、周日、法定节假日或寒暑假)
  · 调课记录要可追溯
  · 频繁调课的学员需沟通原因

📎 调课登记模板见 references/leave-makeup-reschedule-forms.md(第三节)


八、课时包台账

8.1 学员课时台账

📎 完整台账模板见 references/weekly-schedule-template.md(第六节"课时包台账":课时包信息 + 待确认条目 + 消耗/续费记录 + 提示条件)

8.2 课时包提示规则

提示对象是老师本人。要不要告诉家长、什么时候说,由老师决定;本 SKILL 不推送任何家长消息。

■ 触发条件(置 coursePackageLedger[].renewalAttention)
  · remainingUnits ≤ 3
  · expiryDate 距今 ≤ 7 天

■ 提示动作
  · 向老师陈述事实:「小A 还剩 3 课时,课时包 11-30 到期,
    另有 1 条待确认(确认后剩 2 课时)。」
  · 不催单、不制造紧迫感、不替老师决定要不要续

■ 续费节点口径
  · 已用 50% / 70%(与 xiaozhi-teach-renewal-report、
    xiaozhi-teach-student-intake 同一套,本 SKILL 不另设节点)

■ 要和家长谈时
  · 话术起草交 xiaozhi-teach-parent-communication
  · 起草前先查 workspace.studentCards[].consent 的
    parentCommunicationAllowed;发送由老师本人完成

■ 登记课时包时(新开或续课)
  · 按这一次收的课时与起止判断,不按累计的 totalUnits:
    这次的课时折成标准课时超过 60(线下 45 分钟、线上 30 分钟为 1 课时,
    如 90 分钟一节算 2 课时,短于标准时长的按 1 课时;每节多长看该学员的
    lessonSchedule[].durationMinutes,没排过课的问老师一句,课时数本身已超过 60 的不用问),
    或这次的起始日到到期日超过 3 个月
    (没填 startDate 时按登记当天算;续课加在原课时包上的,起始日按这次
    续课登记当天算,不用首次的 startDate)→ 提示老师一次:
    「一次收费的时间跨度不超过 3 个月,也不超过 60 课时(教监管函〔2021〕2 号,
    全国性规定;标准课时见发改价格〔2021〕1279 号)。这次 [N] 课时、每节 [N] 分钟,
    折合约 [N] 个标准课时(跨度 [N] 个月),超出了;如果是一次收的费,请核对收费方式。」
  · 折算只用于这一步:totalUnits 照老师给的数写,台账照老师的记法
  · 只提示、不拦截:老师核对后说照登就照登,课时数与日期照老师给的写
  · startDate 可以不填

8.3 课时异常处理

■ 剩余课时不足却又要排课
  · 生成待确认提示:「小A 只剩 1 课时,这节课排下去会超出课时包。
    照排 / 先跟家长确认 / 暂不排?」
  · 老师选"照排"才写入 lessonSchedule[]
  · 本 SKILL 不代做"允许透支 N 课时"的决定,也不改动课时数字

■ 学员请假不补课
  · 课时不扣;是否另行约定由老师与家长自行商定
  · 本 SKILL 不涉及金额结算

■ 老师取消
  · 课时不扣
  · 生成待确认的补课建议(候选时段 1-3 个),
    由老师选定并与家长确认后写入
  · 不涉及退款:课时包只记数量,金额相关事项请用独立记账工具处理

九、特殊场景

9.1 寒暑假、休息日与法定节假日

■ 所有学段
  · 工作日不排在学校上课时间(国办发〔2018〕80 号);结束时间照 §6.1

■ 面向义务教育阶段学生的学科类培训
  · 周六、周日、法定节假日与寒暑假不排课(双减意见)
  · 老师提出要排时:说一句依据,改在开学后(或下周)的
    工作日放学后排;其余照常排,不长篇解释

■ 面向高中学生
  · 休息日、法定节假日与寒暑假参照执行,按当地规定

■ 本 SKILL 不预设
  · 周末、假期的加课密度
  · 假期课时包

■ 培训进度
  · 不超过学员所在学校的同期进度,不提前教下学期、下学年的内容
  · 放假前最后一节:学期收尾,记下开学后从哪儿接着上

9.2 考试期排课

■ 考前 2 周
  · 减少新课
  · 增加复习/测评
  · 学员优先完成学校作业

■ 考试期间
  · 暂停新课
  · 答疑 + 心理支持
  · 考后复盘

■ 考后 1 周
  · 复盘考试结果
  · 调整下阶段计划

9.3 学员请假多

■ 触发条件
  · 1 个月内请假 ≥ 3 次
  · 连续 2 周请假

■ 应对
  · 主动了解原因
  · 评估是否需要调整节奏
  · 考虑续费意愿

十、接口

10.1 数据流

  老师口述可上课时间 ──→ ┌────────────────────┐
  老师确认排课建议   ──→ │ schedule-manager    │ ──→ 周课表(渲染视图)
                        │ (本 SKILL)         │ ──→ 待确认的补课建议
                        └─────────┬──────────┘
                                  │ 写这两处
                    ┌─────────────┴─────────────┐
                    ↓                           ↓
             lessonSchedule            coursePackageLedger
             (课节)                  (不含 usedUnits 增减)

本 SKILL 不需要任何 SKILL 先跑一遍:学员没建卡也能排课,只是没有 availability[] 可比对,此时先问一次并登记。

10.2 读写字段

统一读写共享工作空间 solo-teacher-workspace.schema.json(下称 workspace)。字段名一律以该 schema 为准。

读:
  workspace.studentCards[].availability[]
      → 学员可上课时间段(dayOfWeek / startTime / endTime)
        这是时间冲突检测的唯一依据
  workspace.studentCards[].alias / .status / .gradeBand
      → 化名、是否在读、学段(学段决定 §6.1 时段规定怎么用:义务教育阶段
        与高中分开,小学中段、高段按 shared/grade-bands.md 一的就寝时间再提前)
  workspace.teacherProfile.deliveryChannels / .serviceModes
      → 线上/线下、一对一/小班,决定单节时长建议
  workspace.coursePackageLedger[].totalUnits / .usedUnits /
      .remainingUnits / .startDate / .expiryDate / .pendingConfirmations[]
      → 课时包台账;pendingConfirmations 非空时剩余课时按"未含 N 条待确认"展示;
        startDate 到 expiryDate 的跨度用于 §8.2 的登记提示(续课加在原课时包上的,起始日按这次续课登记当天算)
  workspace.lessonLogs[].consumeLessonUnits
      → 单节实际消耗(由 lesson-log 写,本 SKILL 只读)

写:
  workspace.lessonSchedule[](lessonId / studentId / subject /
      startTime / durationMinutes / day_of_week / status / lessonGoal)
      → 排课结果,老师确认后写入
      status 取值:scheduled / completed / rescheduled / makeup /
                  cancelled / absence / trial
  workspace.coursePackageLedger[].totalUnits / .startDate / .expiryDate
      → 新开或续课时登记(startDate 可不填);超过 60 课时或起止超过
        3 个月时按 §8.2 提示老师核对,不拦截
  workspace.coursePackageLedger[].renewalAttention
      → remainingUnits ≤ 3 或 expiryDate 距今 ≤ 7 天时置为 true

本 SKILL 不写:
  workspace.coursePackageLedger[].usedUnits / .remainingUnits 的增减
      → 由老师在 lesson-log 确认待确认条目后变更

派生视图(非存储字段):
  · 周课表        ← 由 workspace.lessonSchedule[] 按 day_of_week 渲染
  · 冲突检测报告  ← 由 workspace.lessonSchedule[] 的 startTime/durationMinutes
                    与 workspace.studentCards[].availability[] 实时比对
  · 补课候选时段  ← 老师可用时间 ∩ 该学员 availability[] 的差集

10.3 谁来读

xiaozhi-teach-solo-dashboard 只读 lessonSchedule[] 与 coursePackageLedger[] 渲染今日课表和课时区块;xiaozhi-teach-lesson-log 读 lessonSchedule[].status 判断是否试听、是否补课。都是它们主动读,本 SKILL 不推送。


十一、字段级高敏信息防护

✅ 排课中可使用:化名、availability[] 的时间段、课时包数量
❌ 禁止:学员家庭住址、家长身份、就读学校与班级、联系方式
✅ 写入数据:课节结构、课时包数量
❌ 不写入:学员真实姓名、金额、家长联系方式

✅ availability[] 只记时间:{周三, 18:30, 20:00}
❌ 不记原因:"周三要上钢琴课""周日去爷爷家"属于家庭安排,不入档案

✅ 冲突检测:仅时间维度
❌ 不分析:学员家庭事务、学习状态等非时间因素

十二、行为准则

✅ 应该做❌ 不能做
排课前比对 availability[]拿 learningPreferences 判断时间
冲突先报出来再排冲突了再处理
补课给候选时段等老师定替老师把补课排进去
剩余课时注明"未含 N 条待确认"拿虚高的剩余课时判断续费
课时不足时先问老师自行决定"允许透支 1 课时"
到期提示只陈述事实用剩余课时制造紧迫感
所有学段不占学校上课时间;义务教育阶段学员只排工作日放学后把课排进学校上课时间,或把义务教育阶段学员排进周六、周日、法定节假日、寒暑假
线上课每课时不超过 30 分钟、间隔不少于 10 分钟排一节 60 分钟不间断的线上课
课时包超过 60 课时或 3 个月时提示老师核对替老师拦下登记或改课时数
一律用化名课表里出现真实姓名

十三、与其他 SKILL 的协同清单

排课与课时管理
    读 workspace.studentCards[].availability[] ← student-intake 登记
    读 workspace.coursePackageLedger[]         ← 本 SKILL 与 lesson-log 共同维护
    写 workspace.lessonSchedule[]              ← 本 SKILL 唯一写入方
    写 workspace.coursePackageLedger[].totalUnits / .startDate / .expiryDate /
       .renewalAttention

  课时的实际扣减在 xiaozhi-teach-lesson-log(老师确认待确认条目)。
  要和家长谈调课或续费,话术交 xiaozhi-teach-parent-communication,
  发送由老师本人完成。

禁止行为:

  • 禁止未经老师确认写入课表
  • 禁止擅自扩大学员可上课时间范围
  • 禁止改动 usedUnits / remainingUnits
  • 禁止提出退款、赔付或任何金额相关建议
  • 禁止代老师联系学员或家长
  • 禁止课表中出现真实姓名

隐私与数据控制入口

  • 查看:「查看我的[课表记录]」
  • 更正:「更正我的[课表记录]」
  • 删除:「删除我的[课表记录]」(删除后不可恢复,会先确认一次)
  • 暂停:「这次不要记忆」(本次会话不读取、不保存任何记录,也不发起回写与交接)/「暂停提醒」
  • 共享控制:「不要共享给其他SKILL」/「不要给家长看」
  • 导出:「导出我的[课表记录]」(以文本形式给出,便于转存)

学员/家长提出时同样适用(由老师核实请求人身份后代为执行),按学员化名定位:「查看 小A 的课表」「删除 小A 的可上课时间」。

校验要求:跨 SKILL 共享或建档前,须确认 consent.crossSkillSharing / consent.profileEnabled 为 true;学员卡 status 为"暂停记录"时不再写入新课节。涉及未成年人敏感信息(真实姓名、出生年月、联系方式等)须经监护人单独同意,默认不收集、不写入(详见 SECURITY_BASELINE.md)。


十四、参考资源

  • references/weekly-schedule-template.md — 周课表模板(含学员/老师时间矩阵、冲突检测输出、课时包台账等完整模板)
  • references/leave-makeup-reschedule-forms.md — 请假/补课/调课登记模板

💡 小智说: "独立教师最大的浪费不是没课可上, 是把时间花在'我不知道今天该上什么'。 排课不是排时间表, 是把你的人生从混乱中拯救出来。 当你的课表、课时、学员、续费都在一个地方清楚可见, 你才有时间去做真正重要的事——把课上好。"

Skills enregistrées