# 变更审计记录:助教等级映射硬编码修复(P2-9) | 字段 | 值 | |------|-----| | 日期 | 2026-03-19 | | 关联问题 | P2-9(RNS1 系列审计遗留项) | | 违反规则 | feiqiu-data-rules 规则 6:等级名称禁止硬编码 | ## 操作摘要 `fdw_queries.py` 中两处 `_level_map = {1: "junior", 2: "middle", 3: "senior", 4: "star"}` 硬编码存在双重问题: 1. 违反 feiqiu-data-rules 规则 6(等级必须从配置表读取) 2. 映射值域完全错误——`v_dim_assistant.level` 实际值为 8/10/20/30/40,硬编码的 1/2/3/4 永远匹配不上,所有助教的 level 字段始终返回空字符串 ## 改动方案 ### 新增函数 - `get_level_map(conn, site_id)` — 从 `app.v_cfg_assistant_level_price` 动态读取 `level_code → level_name` 映射,查询失败返回空 dict ### 修改函数 - `get_assistant_info()` — 删除硬编码 `_level_map`,改用 `get_level_map()` 动态查询 - `get_all_assistants()` — 同上 ### 验证 - 配置表实际数据:`{8: "助教管理", 10: "初级", 20: "中级", 30: "高级", 40: "星级"}` - `v_dim_assistant.level` 实际值域:8(1), 10(35), 20(34), 30(6), 40(4) ## 影响范围 | 接口 | 影响 | |------|------| | BOARD-1 助教看板 | `get_all_assistants()` 返回的 level 从空字符串变为中文等级名 | | COACH-1 助教详情 | `get_assistant_info()` 返回的 level 从空字符串变为中文等级名 | | 前端 | 需确认前端是否依赖英文 level 值(junior/middle/senior/star)做逻辑判断 | ## 风险评估 - 风险等级:低 - level 字段之前始终返回空字符串(映射不上),现在返回中文名称,是功能修正而非破坏性变更 - 降级机制:配置表查询失败返回空 dict,level 字段回退为空字符串(与修复前行为一致) ## 文件清单 | 文件 | 操作 | |------|------| | `apps/backend/app/services/fdw_queries.py` | 修改(新增 `get_level_map()`,修改 2 处调用) | | `docs/audit/changes/2026-03-19__level-map-hardcode-fix.md` | 新增(本文件) |