# 知识图谱 V1.5 增强 — 验收文档

## 完成范围

### Batch 1: 查询底座收尾
- `GraphSchema.key_prop_for()` 公共方法，集中 key_property 解析
- `graph_query_service.py` 内联 key_property 获取全部改为调用公共方法

### Batch 2: System / DataResource 卡片
- 后端 `get_system_card()` / `get_data_resource_card()` 方法
- API: `GET /graph/system/{entity_key}` / `GET /graph/data-resource/{entity_key}`
- Response Model: `SystemCardResponse` / `DataResourceCardResponse`
- `related_docs` 本期返回空列表（无可靠 2 跳路径）

### Batch 3: Budget / Indicator / Industry 卡片
- 后端 `get_budget_card()` / `get_indicator_card()` / `get_industry_card()` 方法
- API: `GET /graph/budget/{entity_key}` / `GET /graph/indicator/{entity_key}` / `GET /graph/industry/{entity_key}`
- `related_docs` 采用 2 跳启发式查询，允许为空
- Neo4j 全文索引补齐：`dataresource_fulltext`, `budget_fulltext`, `indicator_fulltext`, `industry_fulltext`

### Batch 4: Planner 扩展
- 5 个新 QueryIntent: `SYSTEM_DETAIL`, `DATA_RESOURCE_DETAIL`, `BUDGET_DETAIL`, `INDICATOR_DETAIL`, `INDUSTRY_DETAIL`
- 关键词路由: 系统/平台, 数据资源/数据集, 预算/经费/资金, 指标/考核/KPI, 产业/行业
- 5 个 `_collect_*_detail()` 证据收集方法
- 5 个中文证据模板
- 优先级修复：事项详情 / 主题探索 优先于泛化标签推断

### Batch 5: 前端卡片组件
- 5 个 Vue 组件: `SystemCard.vue`, `DataResourceCard.vue`, `BudgetCard.vue`, `IndicatorCard.vue`, `IndustryCard.vue`
- 5 个 TypeScript interface + 5 个 API 方法 (`graph.ts`)
- `CardRelatedDocItem` 类型定义

### Batch 6: GraphExplorer 统一卡片入口
- `CARD_TYPES` 扩展为 9 类: Policy, Task, Project, Matter, System, DataResource, Budget, Indicator, Industry
- MatterCard 接入 GraphExplorer Modal
- `openCardModal()` 支持 9 类卡片分发
- Modal 模板支持 9 类卡片渲染

### Batch 7: Phase 3 场景抽取补强
- `SCENE_ENHANCEMENT_RULES` 增强：6 组易混淆类型辨析规则
  - Person vs Organization, Person vs Position
  - Event vs Document
  - Mechanism vs Task, Mechanism vs Standard
  - Infrastructure vs System
- `graph_builder.py` 增加场景统计日志: `scene_type`, `entity_type_distribution`, `raw_entity_count`, `filtered_entity_count`
- `_normalise_entities()` 增加类型过滤 debug 日志

### Batch 8: 后端测试
- `test_graph_schema_unit.py`: `key_prop_for()` 3 个测试, `entity_types_for_scene()` 3 个测试
- `test_query_planner_unit.py`: 5 个新意图分类测试, 2 个证据收集测试, 1 个降级测试

---

## 非完成范围（本期明确不做）

1. 更深层条款图 (phase_2a/2b)
2. 更完整人事关系图
3. 统一时间模型
4. Person/Event/Mechanism/Standard/Infrastructure/Technology 的专用知识卡
5. 上述 Phase 3 六类实体的 Planner detail intent
6. 跨标签统一全文检索与复杂召回排序
7. 卡片协议统一抽象重构
8. `active_phases` 不改变（仍 phase_0 + phase_1，phase_3 继续按场景启用）

---

## 接口清单

| 方法 | 路径 | Response Model |
|------|------|----------------|
| GET | `/graph/policy/{entity_key}` | PolicyCardResponse |
| GET | `/graph/task/{entity_key}` | TaskCardResponse |
| GET | `/graph/project/{entity_key}` | ProjectCardResponse |
| GET | `/graph/system/{entity_key}` | SystemCardResponse |
| GET | `/graph/data-resource/{entity_key}` | DataResourceCardResponse |
| GET | `/graph/budget/{entity_key}` | BudgetCardResponse |
| GET | `/graph/indicator/{entity_key}` | IndicatorCardResponse |
| GET | `/graph/industry/{entity_key}` | IndustryCardResponse |

---

## 测试结果

- `test_graph_schema_unit.py`: 22 passed
- `test_query_planner_unit.py`: 31 passed
- 前端 `vite build`: 通过

---

## 已知边界

1. **System / DataResource 的 related_docs 为空**：当前 schema 中 Document 只直连 Policy/Task/Project，System/DataResource 无可靠 2 跳路径，返回空列表
2. **Budget / Indicator / Industry 的 related_docs 依赖 2 跳启发式**：路径为 Budget→FUNDS→Task←DEPLOYS_TASK←Document 等，数据稀疏时可能为空
3. **Planner 关键词路由存在竞争**：问题文本同时包含多类关键词时，按优先级匹配（事项/主题优先于泛化标签推断）
4. **Phase 3 实体仅在场景抽取中可用**：Person/Event 等不在默认 active_phases 中，需通过 extraction_scenes 启用

---

## 发布检查清单

- [ ] Neo4j 约束与全文索引: 重启后端触发 `init_schema()` 自动创建 4 个新全文索引
- [ ] Schema reload: 后端启动时自动加载 `graph_schema.yaml`
- [ ] 前端类型刷新: `loadTypesFromApi()` 在页面加载时自动拉取最新类型定义
- [ ] Planner 模板: 5 个新证据模板已内嵌，无需额外配置
- [ ] 前端构建: `vite build` 通过后部署 dist 目录
