# 课评写入决策规则 ## 场景总览 | 场景 | 说明 | 写入位置 | |------|------|---------| | 正常上课 | 固定班级固定时间,学生正常到课 | 本班学生 feedback/ | | 正常请假 | 固定班级固定时间,学生请假 | 本班学生 feedback/(请假) | | 外班来补课 | 其他班的学生来本班上课 | 本班 补课/学生名/feedback/ | | 本班临时调时间 | 固定班级但本次课改了时间 | 本班学生 feedback/,课评中注明实际时间 | | 临时凑班 | 不属于任何固定班级的一次性排课 | 建临时班级目录或按补课处理 | ## 场景1:本班正常到课 - 位置:`班级目录/学生名/feedback/YYYYMMDD_课程编号-课次.md` - 操作:在学生 feedback 目录下新增课评文件 - 学生目录已存在 → 直接写 - 学生目录不存在 → 先创建学生目录和 feedback 子目录 ## 场景2:本班请假 - 位置:`班级目录/学生名/feedback/YYYYMMDD_课程编号-课次(请假).md` - 操作:在学生 feedback 目录下新增请假记录文件 - 请假记录也要写,保证每位学生每次课都有对应文件 ## 场景3:外班来补课 - 位置:`班级目录/补课/学生名/feedback/YYYYMMDD_课程编号-课次.md` - 操作: 1. 检查 `班级目录/补课/学生名/` 是否已存在 2. 已存在 → 直接在 feedback 下新增课评文件 3. 不存在 → 创建 `补课/学生名/feedback/` 目录,再写课评 - 补课学生不需要 profile.md ## 场景4:本班临时调时间 **核心原则:写回原班级,不新建目录。** 班级目录名中的时间是常规标签,不是精确到每次课的约束。 ### 老师操作流程 1. 确认是哪个固定班级的课(比如 CSP01六六周六1045) 2. 正常在该班级目录下为每个学生写课评 3. 课评文件中**加一行注明实际时间**: ```markdown # 课程名称:CSP01-10 变量与运算 **授课日期**: 2026-05-10 **实际时间**: 16:00-18:00(临时调整,原定 10:45-12:45) **课评内容**: ... ``` ### 三种学生的处理 | 学生状态 | 操作 | |---------|------| | 到课 | 和场景1一样,在学生 feedback/ 下写课评,注明实际时间 | | 请假 | 和场景2一样,写请假记录 | | 外班来补课 | 和场景3一样,在补课/ 下写课评 | ### 为什么不新建临时目录 1. 目录会越积越多,长期仓库很乱 2. 学生课评会被拆到两个目录,历史不连续 3. 老师不需要纠结写哪个目录,班级目录就那几个 4. 课评文件名已有日期精确标识,目录名只是标签 ## 场景5:临时凑班 不属于任何固定班级的一次性排课(如集训、体验课等): - 如果有对应的固定班级 → 按场景4处理,写回固定班级 - 如果完全无对应 → 建临时班级目录(如 `CSP01六六集训0510`),按场景1/2/3处理 - 临时班级目录用完后不删除,保留历史记录 ## 查找课评的反向逻辑 统计课评完成度时,只在排课老师T的仓库中查找(谁上课谁写课评),从最精确到最模糊逐级查找,每一级找到即停: ``` 校宝记录:学生S 在日期D 到课,排课老师T,课程编号B,上课时间TIME 第1级(精确匹配):课程编号B + 时间TIME + 老师T 1a. 在T仓库找 目录名含B 且 含TIME 的班级目录 → 在该目录的 S/feedback/ 中找日期D的课评 → 找到 → 结束 1b. 未找到 → 在该目录的 补课/S/feedback/ 中找日期D的课评 → 找到 → 结束 → 未找到 → 进入第2级 第2级(放宽时间):课程编号B + 老师T,时间不限 2a. 在T仓库找 目录名含B 的所有其他班级目录(排除第1级已查的) → 排除非常规班(目录名含"集训"、"体验"、"临时"等) → 在这些目录的 S/feedback/ 中找日期D的课评 → 找到 → 结束 2b. 未找到 → 在这些目录的 补课/S/feedback/ 中找日期D的课评 → 找到 → 结束 → 未找到 → 标记缺失 ``` **核心原则:谁上课谁写课评,只查排课老师的仓库。** 不需要跨老师查找,别的老师上的课不会出现在自己仓库里。 **覆盖的4种情况**: | 查找 | 含义 | |------|------| | 1a. 精确班级学生目录 | 固定班固定时间,本班学生写的课评 | | 1b. 精确班级补课目录 | 固定班固定时间,补课学生写的课评 | | 2a. 同阶段不同时间学生目录 | 临时调了时间,写在了另一个同编号班级目录下 | | 2b. 同阶段不同时间补课目录 | 临时调了时间,补课学生的课评在另一个同编号班级的补课目录 | **关键过滤规则**: - **全程限定课程编号B**:缺B补B,不跨课程编号 - 第2级排除"集训/体验/临时"等非常规班目录名 - 每一步找到就停,不重复计数 ## 关键原则 1. **以学生为中心**:查找时先找学生名,再检查日期 2. **课程编号是全程硬约束**:只在课程编号B范围内查找,缺B补B 3. **谁上课谁写课评**:只查排课老师T的仓库,不跨老师 4. **每位学生每次课必须有文件**:到课写课评,请假写请假记录,不能遗漏 5. **补课学生按实际补课班级归类**:去哪个班补课,课评就写在那个班的补课目录下 6. **补课目录可复用**:同一个补课学生多次来同一个班补课,目录已存在就不再创建 7. **临时调时间写回原班级**:不新建目录,课评内容中注明实际时间即可 ## 两种查找模式 老师仓库是独立的,不同场景需要不同的查找范围: | 目的 | 查找范围 | 约束 | |------|---------|------| | 课评完成度统计 | 只查排课老师T的仓库 | 限定课程编号B,逐级查找 | | 写阶段总结 | 遍历所有老师仓库(15个) | 不限课程编号,按学生名收集全部课评,按时间排序 | **阶段总结查找逻辑**: ``` 目标:为学生S 生成阶段总结 1. 遍历所有老师仓库的 .claude/memory/class/ 下所有班级目录 2. 在每个班级目录中查找 S/feedback/ 和 补课/S/feedback/ 3. 收集所有 YYYYMMDD_*.md 文件 4. 按日期排序,汇总输出 ``` 学生可能换班换老师(如CSP01升CSP02换了老师),课评分散在多个仓库,只能全扫。 ## 学生索引机制 ### 目的 教学督导(可读所有仓库)每周定时扫描15个老师仓库,生成统一的学生索引文件,避免后续查询反复全扫。 ### 索引结构 ``` .claude/memory/student_index/ ├── 刘毅潇.md ├── 张祺琪.md └── ... ``` 每个索引文件: ```markdown # 刘毅潇 ## 当前班级 - CSP05克力周六1600 ## 课评记录 | 日期 | 老师 | 班级 | 路径 | |------|------|------|------| | 2026-05-10 | 克力 | CSP05克力周六1600 | keli_ClassFeedback/.../feedback/20260510_CSP05-10.md | | 2026-05-03 | 克力 | CSP05克力周六1600 | keli_ClassFeedback/.../feedback/20260503_CSP05-09.md | | 2026-04-19 | 六六 | CSP01六六周六1400 | liuliu_ClassFeedback/.../feedback/20260419_CSP01-08.md | ``` ### 更新方式 - **定时扫描**:每周执行课评整理时自动扫描所有仓库,更新索引 - **增量更新**:只追加新发现的课评,不删除历史记录 - **升班/换老师**:索引中追加新班级记录,"当前班级"取最新一条 ### 索引的好处 1. **老师仓库不动**:写入逻辑完全不变 2. **课评完成度统计**:读索引即可,不用全扫15个仓库 3. **阶段总结**:直接读索引文件,按日期排序就完事 4. **升班/换老师**:索引里追加记录,学生历史自然连续 5. **统一视图**:教学督导和所有协作者都能看到学生完整课评轨迹