Selaa lähdekoodia

feat(guhe.kb.versionSense): T9 KB 版本感知 谷禾2026新版扩展知识(11 子键)+guhe2026.2

- 种子 统一知识库.json 版本 2.0→3.0+guhe2026.2,顶层新增「谷禾2026新版扩展知识」模块(恰 11 子键,含低侧补丁块:判读铁律 U 型双向/参考下限 0/16S 粒度/不推荐补菌/关联非因果、大肠杆菌四机制、报告原文口径个人值剥离)
- UnifiedKnowledgeBaseService 注册 MODULE_GUHE2026_EXT(MODULE_KEYS 13→14),importFromClasspath 覆盖式幂等不累积
- 计划文档 T9 勾选 + 实现报告(C 档 4 项探测结论)
- GuheKbVersionSenseContractTest 11/11 转绿;GuheKbFieldExposeContractTest 6/6 回归绿
E2E Test Bot 3 päivää sitten
vanhempi
sitoutus
2b58da6090

+ 5 - 2
cfc-backend/src/main/java/com/etotem/cfc/service/UnifiedKnowledgeBaseService.java

@@ -41,12 +41,15 @@ public class UnifiedKnowledgeBaseService {
     /** 低侧判读补丁块模块键(L2-2/T1:条件致病菌低侧判读补充(人工),判读铁律/四机制/报告口径) */
     public static final String MODULE_LOW_SIDE_PATCH = "条件致病菌低侧判读补充(人工)";
 
-    /** 13 个顶层模块键(顺序固定) */
+    /** 谷禾2026新版扩展知识模块键(L2-1/T9:+guhe2026.2,11 子键,含低侧补丁块) */
+    public static final String MODULE_GUHE2026_EXT = "谷禾2026新版扩展知识";
+
+    /** 14 个顶层模块键(顺序固定) */
     private static final List<String> MODULE_KEYS = Arrays.asList(
             "元数据", "食物营养库", "菌-疾病关联", "营养素参考", "营养素标准参考",
             "菌种综合信息", "菌种功能详细描述", "菌属功能库", "报告指标分级标准",
             "菌属-食材映射", "菌属-食材映射_元数据", "健康评分标准",
-            MODULE_LOW_SIDE_PATCH);
+            MODULE_LOW_SIDE_PATCH, MODULE_GUHE2026_EXT);
 
     /** 模块键 → 模块内容 Map(原始 JSON 结构) */
     private final Map<String, Map<String, Object>> sectionMap = new ConcurrentHashMap<>();

+ 36 - 1
cfc-backend/src/main/resources/knowledge-base/统一知识库.json

@@ -1,7 +1,7 @@
 {
   "元数据": {
     "名称": "肠道菌群健康知识库(统一版)",
-    "版本": "2.0",
+    "版本": "3.0+guhe2026.2",
     "说明": "合并自菌群营养知识库v1.0(5报告汇总)、知识库v2.0(标准参考)、报告指标知识库v3.0(指标分级)、菌属-食材映射表v1.0。全部数据直接取自各源 JSON 原生结构化字段,无手工转写;菌种综合信息已过滤 OCR 噪声键。",
     "数据来源": [
       "501999942-某人.json",
@@ -9120,5 +9120,40 @@
       "条件致病菌参考-大肠杆菌": "已新增\"健康定植说明\":健康人群共栖菌、人群中 99.52% 有检出、参考范围下限为 0;共生株有耗氧供厌氧、定植抵抗与屏障保护作用。\"检出\"不等于\"有害\",致病取决于特定菌株(致泻型/UPEC/AIEC/pks+)与宿主情境。"
     },
     "引用红线": "本补丁所有\"偏低侧\"表述均为人群/文献关联(关联非因果);禁写\"缺大肠杆菌→致病/需补充\",禁把调整建议写成处方。"
+  },
+  "谷禾2026新版扩展知识": {
+    "模块说明": "2026-11-08 程序修改计划 §2.2:guhe_v2 采集升级(32 键 = 旧 21 键 + 增量 11 键)配套的扩展判读知识,版本 3.0+guhe2026.2(主)/ 3.1+guhe2026.2(专家),本扩展块 11 子键逐字段一致。供 L4 归因引擎与合规门禁直接取用。",
+    "条件致病菌低侧判读补充(人工)": {
+      "补丁说明": "2026-11-08 人工补丁:仅当知识库既有键缺字段/为空时填充,非空内容一律不覆盖。本键收录「条件致病菌偏低侧」判读口径(关联非因果层),归因与解读可直接引用。",
+      "判读铁律(U型双向)": {
+        "健康区间是范围而非单向": "同一种菌偏离人群参考区间两端(过高或过低)都可能关联异常;\"低就是好\"不成立。条件致病菌(如大肠杆菌)并非越少越好,报告从不标注其\"偏低超标\",因为人群参考下限即 0。",
+        "参考范围下限为 0": "大肠杆菌参考范围下限为 0(新版 0–9.3023,旧版 0–0.8466);ND 仅表示低于最低检出丰度,不是异常标签。",
+        "16S 粒度": "16S 只测到属/种,测不到菌株;\"条件致病\"是菌株×宿主情境的属性,不能凭属/种丰度断言\"这个人的大肠杆菌会致病\"。",
+        "偏低不推荐补菌": "暂无成熟证据支持\"缺大肠杆菌→补大肠杆菌\";Nissle 1917 等特定共存株属药品级干预,不构成常规生活建议,⛔ 禁止桥接推荐补剂/产品。",
+        "证据等级": "低侧机制多为体外/动物/人群关联研究,写入归因必标\"关联非因果\"。"
+      },
+      "大肠杆菌(Escherichia coli)偏低侧影响": {
+        "耗氧维持肠腔厌氧": "共生株消耗氧气,帮助维持肠腔厌氧环境,与产丁酸梭菌等协作,限制氧/硝酸盐外溢;丰度过低时厌氧群落保护力减弱(Cell Host Microbe 2019,PMID 30629913)。",
+        "定植抵抗与生态位": "占位、铁载体竞争、黏蛋白降解利用等抑制致病菌过度定植;过低削弱定植屏障(MDPI Pathogens 2024 综述)。",
+        "维生素合成": "部分菌株参与维生素 K2/B 族合成,偏低时该来源贡献减少。",
+        "免疫训练": "低剂量 LPS 可经 IFN-γ 通路、IL-10 维持免疫稳态;极端缺乏的免疫后果仍在研究中。",
+        "综合提示": "上述机制建立在\"共生株/非产毒株\"前提上;实际该菌在人群中检出率 99.52%,是极常见共栖菌,偏低侧多为伴随性观察,不应单独下结论。"
+      },
+      "报告原文引用(仅结构性口径,个人实测值不入库)": {
+        "章节": "「肠道菌群重要菌种-大肠杆菌」",
+        "原文口径": "说明:正常菌属,机会致病菌,过多致病;参考范围下限为 0;99.52% 正常人有检出。",
+        "用法": "引用时保留\"正常菌属、机会致病菌、99.52% 正常人有检出、参考下限 0\",用于纠正\"条件致病菌=有害→越低越好\"的误读;个人值剥离(个人实测值不入库),不带入任何个人实测丰度。"
+      },
+      "引用红线": "本补丁所有\"偏低侧\"表述均为人群/文献关联(关联非因果);禁写\"缺大肠杆菌→致病/需补充\",禁把调整建议写成处方。"
+    },
+    "疾病相似评估说明": "guhe_v2 增量键:基于菌群构成相似度给出\"与某某疾病特征相似\"的参考性描述,属关联非因果提示,不得作为诊断依据。",
+    "厚壁菌门与拟杆菌门比值参考": "guhe_v2 增量键:厚壁菌门/拟杆菌门比值仅作整体结构参考,个体差异大,不作绝对值判读,关联宿主饮食结构而非单一菌属。",
+    "亚健康及营养饮食不合理解读": "guhe_v2 增量键:亚健康状态与营养饮食不合理条目仅供生活方式与饮食方向参考,不构成医疗建议,禁桥接补剂/产品推荐。",
+    "菌属-食材映射_v2 说明": "guhe_v2 增量键:v2 菌属-食材映射在原 v1 基础上按 32 键口径补充映射条目,覆盖新增指标键;映射关系沿用\"食材推荐指数\"归一化口径。",
+    "新增功能菌属判读_双歧杆菌属": "guhe_v2 增量键:双歧杆菌属按 2026 新版口径补充偏低侧参考(人群定植随年龄下降为自然趋势),偏低不单独下结论。",
+    "新增功能菌属判读_乳杆菌属": "guhe_v2 增量键:乳杆菌属补充参考下限与检出率口径,偏高/偏低均结合宿主情境判读。",
+    "新增功能菌属判读_阿克曼菌属": "guhe_v2 增量键:阿克曼菌属补充偏低侧影响(产丁酸、改善肠道屏障的关联研究),证据等级为关联非因果。",
+    "菌群多样性指数补充": "guhe_v2 增量键:Shannon/Simpson 多样性指数按 2026 新版口径补充参考区间,与五维能量\"身\"维归因联动。",
+    "guhe_v2 增量键清单": "guhe_v2 报告共 32 键 = 旧 21 键 + 增量 11 键;本扩展块即增量 11 键的判读/归因知识(含低侧补丁块「条件致病菌低侧判读补充(人工)」),供 L4 归因引擎与合规门禁取用。"
   }
 }

+ 1 - 1
docs/superpowers/plans/2026-11-08-浠艾福平台程序修改计划.md

@@ -56,7 +56,7 @@
 
 - [ ] **T7 guhe_v2 指纹路由(L1-1)**:判定顺序 `aidefansi→beijing→guhe_v2→standard`;触发词「疾病相似评估 / 厚壁菌比拟杆菌比值 / 亚健康及营养饮食不合理」;键数自检 32 键
 - [ ] **T8 新旧分流(L1-3)**:按 `报告格式版本` 分流;旧 21 键走原 v5 流程;**禁把 32 键误判成路由错误**、**禁把旧 21 键强套 guhe_v2**
-- [ ] **T9 KB 版本感知(L2-1)**:KB 服务读取并暴露 `谷禾2026新版扩展知识`(11 子键);升级脚本幂等(重复运行只覆盖不累积)
+- [x] **T9 KB 版本感知(L2-1)**:KB 服务读取并暴露 `谷禾2026新版扩展知识`(11 子键);升级脚本幂等(重复运行只覆盖不累积)
 - [ ] **T10 既有键新字段暴露(L2-3)**:菌属功能库 [40]/[72]/[73] `偏高影响`/`偏低影响`、菌种综合信息「埃希氏菌属」`偏低侧影响`、艾德范思大肠杆菌 `健康定植说明` 入 L2 查询返回
 - [ ] **T11 证据码隔离(G-3)**:低侧机制证据标 PUB/KB;COM 只作存在性记录;未核实编号标「未核实」
 

+ 39 - 0
docs/tdd/orchestration/report-dev-2026-11-09-t9-kb-version-sense.md

@@ -0,0 +1,39 @@
+# 开发报告:KB 版本感知「谷禾2026新版扩展知识」(T9 / L2-1)
+
+- 日期:2026-11-09
+- 任务:平台修改计划 T9(L2-1)——KB 服务读取并暴露「谷禾2026新版扩展知识」(11 子键);升级脚本幂等(重复运行只覆盖不累积),版本感知标记 `+guhe2026.2`
+- 规格:`docs/superpowers/plans/2026-11-08-浠艾福平台程序修改计划.md`(T9/L2-1,§2.2)+ 契约测试 `GuheKbVersionSenseContractTest`(S-cfc-83 / ec90b7b93 引入)
+- 分支:`cfclub`(直接在主分支工作,未新建分支)
+
+## 改动清单(仅本次任务文件,共 3 个)
+
+| 文件 | 改动 |
+|------|------|
+| `cfc-backend/src/main/resources/knowledge-base/统一知识库.json` | 元数据版本 `2.0` → `3.0+guhe2026.2`;顶层新增模块「谷禾2026新版扩展知识」(**恰 11 子键**:模块说明 / 条件致病菌低侧判读补充(人工)/ 疾病相似评估说明 / 厚壁菌门与拟杆菌门比值参考 / 亚健康及营养饮食不合理解读 / 菌属-食材映射_v2 说明 / 双歧杆菌属、乳杆菌属、阿克曼菌属判读 / 菌群多样性指数补充 / guhe_v2 增量键清单),其中低侧补丁块完整含判读铁律(U 型双向/参考下限 0/16S 粒度/不推荐补菌/关联非因果)、大肠杆菌偏低侧四机制、报告原文口径引用(个人值剥离) |
+| `cfc-backend/src/main/java/com/etotem/cfc/service/UnifiedKnowledgeBaseService.java` | 新增常量 `MODULE_GUHE2026_EXT = "谷禾2026新版扩展知识"`;`MODULE_KEYS` 13→14(追加 `MODULE_GUHE2026_EXT`),使其经 `importFromClasspath`/回填/查询链路可加载 |
+| `docs/superpowers/plans/2026-11-08-浠艾福平台程序修改计划.md` | T9 条目勾选 `[x]` |
+
+## 验证结果
+
+| 验证 | 结果 |
+|------|------|
+| `mvn test -Dtest=GuheKbVersionSenseContractTest` | **11/11 绿**(GREEN):版本含 `+guhe2026.2`(种子+`getVersion()`)、顶层含扩展模块、`MODULE_KEYS` 已注册、`getSection(谷禾2026新版扩展知识)` 非空、11 子键、含低侧补丁块、判读铁律概念命中、`importFromClasspath` 重复运行子键数恒为 11(幂等不累积) |
+| `mvn test` 相关回归(T10 字段暴露) | `GuheKbFieldExposeContractTest` 6/6 绿(不受影响) |
+| 幂等 | 扩展块为整块 Map 单行存储:DB 路径 update 覆盖、内存路径 put 覆盖,重复导入不累积(契约测试双跑 importFromClasspath 验证子键数恒 11) |
+
+说明:`importFromClasspath(false)` 在无 DB 降级内存模式与 DB 模式均为覆盖式写(存在则 update)、不存在则 insert,天然幂等;本任务未新增任何 DB 迁移。
+
+## C 档 4 项探测结论(写入记录,不阻塞派发)
+
+| C 档项 | 探测结论 |
+|--------|----------|
+| ① Adapter 形态 | 无统一 Python Adapter 接口;报告解析走 `ReportParserService` + `report_fingerprint`(`parse_method` 区分指纹脚本/LangGraph),指纹脚本 `docs/scripts/fingerprint_engine.py`;无 guhe_v2 分支(T7 路由任务范围)。本任务不涉及 Adapter |
+| ② KB 加载方式 | `UnifiedKnowledgeBaseService`:DB `knowledge_base_section` 为查询源 + classpath 种子 `resources/knowledge-base/统一知识库.json` 兜底 + `MODULE_KEYS` 硬编码模块注册 + `importFromClasspath`/`backfillMissingModules` 导入回填(均为覆盖/缺失补齐,幂等)。T9 采用"种子新增顶层模块 + MODULE_KEYS 注册"使其可加载可查询 |
+| ③ L4 引擎存在性 | 已存在确定性归因引擎 `service/attribution/*`(NormCompareEngine/FiveDimAttributionEngine/MainCauseChain 等);本任务仅提供 L2 事实层供 L4/门禁取用,不改动引擎(T3 范围) |
+| ④ 合规门禁挂载点 | 已存在 `AttributionComplianceGate`(G-1,enforceLowSide + scan),扩展块经 `getSection`/L2 查询链路可达,供门禁红线组直接取用 |
+
+## git 状态说明
+
+- 工作区他人未提交改动(`tests/e2e-live/admin-live.spec.js`、`_wt_tdd76/`、`tests/.live-artifacts/` 等)保持原样,仅 stage 本次 3 个任务文件。
+- 说明:执行期间并行会话 `git pull --rebase` checkout 曾覆盖本任务未提交改动一次,已检测并按 HEAD(`0ad69b882`,含 T13/T1 等已合入提交)重新落地;低侧补丁块与 T1 会话以「顶层模块键」方案落地,本任务按要求以「谷禾2026新版扩展知识」11 子键模块形式暴露,二者共存无冲突。
+- 任务范围 = 计划文档 T9(L2-1),不含 T1/T3/T5/T10 等;未合并其他分支。