# 标准办事指南结构化 Schema 草案

## 1. 文档目标

本文档用于定义“标准办事指南”类文件的结构化建模方案，目标是让系统不仅能把这类文件当作普通文档检索，还能稳定支持以下场景：

- 标准事项详情查询
- 事项预审与一次性告知
- 材料清单核对
- 办理时限、收费、窗口、咨询投诉查询
- 办事指南版本化管理与结构化对比
- 围绕事项的 QA / Research / 推荐增强

本文档讨论的对象是各级政务服务平台上的标准化事项指南，例如“办理及加注普通护照”这类包含基础信息、审批信息、材料清单、收费、窗口、法律救济等固定栏目结构的事项文件。

---

## 2. 现状

### 2.1 当前系统已经具备的能力

当前仓库已经实现的能力可以分为三层：

1. 文档层
   - Docling 文档解析
   - 元数据抽取
   - OpenSearch chunk 检索与文档检索
   - QA / Research 基于文档证据回答问题

2. 图谱层
   - Phase 0 治理图：Document / Organization / Region / PolicyTheme 及其关系
   - Phase 1 事项图：Matter / Condition / Material / TimeLimit / TargetGroup 及其关系

3. 应用层
   - Matter 搜索
   - Matter 卡片
   - Matter requirements
   - QA 与 Research 对事项卡的复用

### 2.2 当前“事项”实现的实际覆盖范围

当前事项实现的核心定位是“事项办理核心语义”，而不是“标准办事指南全文结构化”。现有事项图主要覆盖：

- 事项名称
- 办理条件
- 所需材料
- 办理时限
- 适用对象
- 办理部门
- 事项级适用地域
- 依据文件

这套模型已经足够支撑：

- “这个事项需要哪些材料？”
- “多久办完？”
- “哪个部门办理？”
- “依据文件有哪些？”

### 2.3 当前方案对标准办事指南的不足

对于标准办事指南样式的文件，当前系统存在以下结构性缺口：

1. 缺少“标准办事指南详情层”
   - 当前只有 Document 和 Matter 图谱语义，没有一层承接指南栏目化信息的结构模型。

2. 无法表达大量栏目字段
   - 例如事项版本、实施编码、业务办理项编码、网办深度、预约地址、快递支持、必须现场办理原因、审批结果、收费项、法律救济、窗口信息、咨询投诉渠道等。

3. 材料清单缺少“行级语义”
   - 当前 Material 更像全局材料节点。
   - 标准指南中的材料清单是“某事项下某一行要求”，包含原件份数、复印件份数、纸质/电子、是否免提交、来源渠道、填报须知、备注等上下文依赖信息。

4. 同名材料存在过度合并风险
   - 现有 Phase 1 仍以名称为主进行 Material 级别 merge。
   - 这会让不同事项下同名材料的具体要求互相污染。

5. 事项定位能力不足
   - 标准指南常常同时包含事项名称、日常用语、实施编码、基本编码、事项版本。
   - 当前 Matter 搜索主要依赖 name contains，不足以稳定支撑真实政务检索入口。

6. 检索与展示没有“标准办事指南视图”
   - 当前前端事项页更适合展示 Matter 卡片，不适合完整展示标准指南全部栏目。

### 2.4 当前方案仍然可以工作的部分

尽管不完整，当前系统仍然可以对标准办事指南产生部分价值：

- 作为普通文档入库并通过全文检索召回
- 通过 QA 从正文中回答收费、窗口、咨询电话等问题
- 抽取部分 Matter / Material / TimeLimit 语义用于事项预审

但这种方式依赖全文与生成兜底，不是稳定、可控、可过滤、可对比的结构化支撑。

---

## 3. 核心判断

### 3.1 不建议把标准办事指南直接塞进现有 Matter 图

原因如下：

1. Matter 图的目标是“跨文档可复用的事项语义骨架”，不是“单份办事指南的栏目化详情”。
2. 指南详情中大量信息是文档级、版本级、窗口级、行级信息，不适合全部提升为图节点。
3. 如果强行把窗口、收费、咨询方式、法律救济等都节点化，图谱会迅速膨胀，维护成本高，查询也会复杂化。

### 3.2 推荐采用“双层模型”

推荐方案：

1. 保留现有 Matter 图
   - 继续承担“事项核心办理语义”与图谱导航能力。

2. 新增“标准办事指南结构化详情层”
   - 专门承接标准办事指南的栏目化、版本化、行级信息。

3. 两层之间通过绑定关系衔接
   - 一个标准办事指南可以绑定一个或多个 Matter。
   - Guide 中的材料行可以绑定已有 Material 节点。
   - Guide 中的办理部门、地域、窗口可以绑定 Organization / Region。

这个边界清晰、演进稳定，也最符合当前仓库已有架构。

---

## 4. 设计原则

### 4.1 分层建模

- Document 负责原始文档与通用元数据
- Matter Graph 负责事项核心语义
- Standard Service Guide Profile 负责标准办事指南详情

### 4.2 图谱只保留高价值关系

以下信息优先保留在结构化详情层，而不是一律图节点化：

- 收费项
- 窗口信息
- 咨询投诉方式
- 法律救济
- 审批结果模板/样例
- 材料行级附加说明

### 4.3 行级语义优先于全局去重

标准指南中的材料清单、窗口列表、收费项、跨域通办规则都应保留“当前事项指南上下文”下的独立行对象，不能只依赖全局名称去重。

### 4.4 允许“结构化详情”和“图谱节点”同时存在

例如：

- `guide.materials[].material_name = "居民身份证"`
- 同时绑定到 `Material(material_id=...)`

结构化详情保留当前指南里的具体要求，图谱节点保留跨文档复用语义。

### 4.5 支持版本化与重抽取

标准办事指南经常更新版本，因此结构化详情必须具备：

- `schema_version`
- `extractor_version`
- `matter_version` / `guide_version`
- `updated_at`
- `source_url`

### 4.6 保留原文块与不确定性标记

抽取结果应支持：

- 原始 section 文本保留
- 字段置信度
- 缺失字段列表
- 待人工复核标记

这样便于 QA 回链、人工修正和增量迭代。

### 4.7 公开优先与 ACL 兜底

- 事项类与标准办事指南查询默认按公共服务场景设计，首选公开可查
- Guide 详情不是独立权限源
- `acl_ids` 直接镜像自 `gov_doc_meta`
- 当 `acl_ids` 为空时，Guide 与 Matter 查询默认公开
- 当 `acl_ids` 非空时，再复用现有 ACL 过滤逻辑进行兜底控制
- 权限变更时必须同步刷新对应 Guide 文档的 `acl_ids`

---

## 5. 总体方案

### 5.1 推荐新增专用结构化对象

新增顶层结构化对象：`StandardServiceGuideProfile`

语义定位：

- 它不是通用 Document 元数据
- 它不是 Matter 节点本身
- 它是“某一份标准办事指南文档”的结构化详情视图

### 5.2 推荐存储方案

首版推荐增加独立索引：`gov_service_guides`

原因：

1. 标准指南字段量大、嵌套深
2. 存在材料行、窗口行、收费项等数组结构
3. 后续很可能需要按指南字段直接过滤和聚合
4. 不适合把完整对象塞入现有 `gov_doc_meta` 的简单元数据文档中

推荐职责划分：

1. `gov_doc_meta`
   - 保留通用元数据
   - 镜像少量 guide 摘要字段，用于搜索结果展示和筛选

2. `gov_service_guides`
   - 保存完整标准办事指南结构化详情

补充要求：

- `gov_service_guides.acl_ids` 复制文档级 `acl_ids`，仅用于查询过滤
- 权限真值源仍然是 `gov_doc_meta`
- 事项/Guide 查询默认优先返回公开数据；仅在存在显式 `acl_ids` 时启用受限访问控制

3. Neo4j
   - 只同步 Guide 中与 Matter 图真正相关的核心语义

4. Ingest artifacts / trace
   - 保留抽取原始 JSON 和 section 原文，便于调试与重放

### 5.3 与现有 Matter 图的关系

推荐关系如下：

- `StandardServiceGuideProfile.doc_id -> Document.doc_id`
- `StandardServiceGuideProfile.bindings.matter_ids[] -> Matter.matter_id`
- `StandardServiceGuideProfile.materials[].linked_material_id -> Material.material_id`
- `StandardServiceGuideProfile.basic_info.implementing_orgs[] -> Organization`
- `StandardServiceGuideProfile.basic_info.regions[] -> Region`

说明：

- Matter 图继续做“快速事项问答”和“结构导航”
- 标准指南详情则提供“完整栏目展示”和“精细查询”

---

## 6. 标准办事指南结构化 Schema 草案

### 6.1 顶层对象

```json
{
  "schema_version": "service_guide_v1",
  "profile_id": "guide_xxxxx",
  "doc_id": "doc_xxxxx",
  "content_hash": "...",
  "scene_type": "standard_service_guide",
  "source": "广东省政务服务网",
  "source_url": "https://...",
  "is_current": true,
  "guide_version": "75",
  "extractor_version": "guide_extractor_v1",
  "extracted_at": "2026-03-17T10:00:00Z",
  "acl_ids": [],
  "document_info": {},
  "matter_identity": {},
  "basic_info": {},
  "cross_region_service": [],
  "review_info": {},
  "result_info": [],
  "acceptance_info": {},
  "process_info": {},
  "materials": [],
  "fees": [],
  "legal_basis": [],
  "rights_and_obligations": {},
  "remedies": {},
  "consultation_and_supervision": {},
  "service_windows": [],
  "bindings": {},
  "quality": {},
  "raw_sections": {}
}
```

### 6.2 字段分组定义

#### A. document_info

用于保存与原始文档绑定的基础信息。

| 字段 | 类型 | 说明 |
|------|------|------|
| title | string | 文档标题 |
| normalized_title | string | 归一化标题 |
| doc_type | string | 文种/资料类型，需扩展支持“办事指南” |
| knowledge_category | string | 管理分类，建议新增“办事指南/事项类文件” |
| publish_date | string | 发布日期 |
| effective_date | string | 生效日期 |
| expiry_date | string | 失效日期 |
| issuing_org | string | 发布主体 |
| status | string | 有效状态 |

#### B. matter_identity

用于表达“这个指南对应的是哪个事项”。

| 字段 | 类型 | 说明 |
|------|------|------|
| matter_name | string | 事项名称 |
| colloquial_names | string[] | 日常用语、常见口语表达 |
| matter_type | string | 行政许可/公共服务等 |
| basic_code | string | 基本编码 |
| implementation_code | string | 实施编码 |
| business_item_code | string | 业务办理项编码 |
| matter_version | string | 事项版本 |
| implementing_subject | string | 实施主体 |
| subject_nature | string | 实施主体性质 |
| delegated_department | string | 委托部门 |

说明：

- `matter_name` 用于主展示
- `colloquial_names` 用于事项检索、问答改写和别名映射
- 编码类字段用于稳定定位与跨系统对接

#### C. basic_info

用于承接标准指南“基础信息”栏目。

| 字段 | 类型 | 说明 |
|------|------|------|
| service_object | string[] | 服务对象，例如自然人/法人 |
| promised_time_limit | object | 承诺办结时限 |
| legal_time_limit | object | 法定办结时限 |
| visit_count_to_hall | integer | 到现场次数 |
| must_onsite | boolean | 是否必须现场办理 |
| must_onsite_reason | string | 必须现场办理原因 |
| case_type | string | 办件类型 |
| notified_commitment_enabled | boolean | 是否告知承诺制 |
| hall_required | boolean | 是否进驻政务大厅 |
| express_supported | boolean | 是否支持物流快递 |
| reservation_supported | boolean | 是否支持预约办理 |
| reservation_url | string | 在线预约地址 |
| service_modes | string[] | 网上办理/窗口办理/自助办理等 |
| online_depth | string | 网办深度 |
| linked_agencies | string[] | 联办机构 |

时间对象统一结构建议：

```json
{
  "raw_text": "7个工作日",
  "duration": "7",
  "unit": "工作日",
  "is_working_day": true
}
```

#### D. cross_region_service

用于承接“跨域通办”栏目。

数组项结构建议：

| 字段 | 类型 | 说明 |
|------|------|------|
| service_scope_type | string | 省内通办/跨省通办/跨境通办 |
| regions_summary | string[] | 用于展示与过滤的摘要地域列表 |
| regions_detail | string[] | 完整地域明细，列表过长时允许仅保存在详情层 |
| regions_truncated | boolean | 地域列表是否做了摘要化 |
| service_modes | string[] | 全程网办/异地代收代办等 |
| notes | string | 补充说明 |
| raw_text | string | 原始跨域通办文本 |

说明：

- 短列表时 `regions_summary` 与 `regions_detail` 可以相同
- 长列表时优先保留可展示、可过滤的摘要项，完整明细留在 `regions_detail` 或 `raw_text`

#### E. review_info

用于承接“审批信息”栏目。

| 字段 | 类型 | 说明 |
|------|------|------|
| power_level | string | 行使层级 |
| power_source | string | 权力来源 |
| service_forms | string[] | 审批服务形式 |
| business_system | string | 业务系统 |

#### F. result_info

用于承接“审批结果”栏目。

数组项结构建议：

| 字段 | 类型 | 说明 |
|------|------|------|
| outcome_name | string | 结果名称 |
| outcome_type | string | 证照/批文/回执等 |
| template_name | string | 模板名称 |
| sample_name | string | 样例名称 |
| electronic_certificate_status | string | 无电子证照/已关联电子证照等 |
| notes | string | 备注 |

#### G. acceptance_info

用于承接“受理范围”和“受理条件”栏目。

| 字段 | 类型 | 说明 |
|------|------|------|
| service_targets | string[] | 服务对象类型 |
| natural_person_topics | string[] | 面向自然人主题分类 |
| legal_person_topics | string[] | 面向法人主题分类 |
| local_feature_topics | string[] | 地方特色主题分类 |
| application_scope | string | 申请内容 |
| acceptance_conditions | string[] | 受理条件 |

说明：

- `acceptance_conditions` 是指南级条件原文列表
- 后续可选同步到 Matter -> Condition 图谱节点

#### H. process_info

用于承接“办理流程”和“办理结果说明”。

```json
{
  "summary": "申请人提交材料后，由受理机关审核并办结。",
  "step_titles": ["提交申请", "受理审核", "领取结果"],
  "raw_text": "...",
  "notes": "...",
  "needs_review": false
}
```

说明：

- 首版只承诺 `summary + step_titles + raw_text`
- 不把 step 级细粒度对象作为 MVP 硬约束
- 如后续源数据稳定，再升级到详细步骤 schema

#### I. materials

这是标准办事指南中最重要的结构之一，必须按“行对象”建模。

单行结构建议：

| 字段 | 类型 | 说明 |
|------|------|------|
| guide_material_id | string | 当前指南内稳定行 ID |
| material_name | string | 材料名称 |
| linked_material_id | string | 绑定到图谱 Material 的可选 ID |
| requirement_level | string | required / conditional / optional |
| original_count | integer | 原件份数 |
| copy_count | integer | 复印件份数 |
| form_types | string[] | 纸质 / 电子化 / 纸质电子化 |
| paper_spec | string | A4 等规格 |
| electronic_license_linked | boolean | 是否关联电子证照 |
| exempt_submission | boolean | 是否可免提交 |
| reusable_previous_submission | boolean | 是否可复用历史材料 |
| material_type | string | 证件证书证明 / 申请表 / 其他 |
| source_channel | string | 政府核发 / 申请人自备 / 其他 |
| fill_instructions | string | 填报须知 |
| notes | string | 备注 |
| applicable_conditions | string[] | 适用条件，如“仅限 16 周岁以下未成年人” |
| blank_form_available | boolean | 是否有空白表格 |
| sample_available | boolean | 是否有示例样本 |
| download_hint | string | 下载说明 |

说明：

1. `linked_material_id` 仅用于和 Matter 图关联，不替代本行自身信息。
2. `requirement_level` 必须显式区分必需、条件必需、非必要。
3. 这层是标准指南能否真正可用的关键。

#### J. fees

数组项结构建议：

| 字段 | 类型 | 说明 |
|------|------|------|
| fee_name | string | 收费项目名称 |
| amount_text | string | 原始金额文本，例如“120元” |
| amount_value | number | 数值金额 |
| currency | string | 货币单位，默认 CNY |
| charging_body | string | 收费主体 |
| charging_method | string | 行政事业性收费等 |
| reducible | boolean | 是否允许减免 |
| notes | string | 备注 |

#### K. legal_basis

数组项结构建议：

| 字段 | 类型 | 说明 |
|------|------|------|
| law_name | string | 法律法规名称 |
| document_no | string | 依据文号 |
| article_no | string | 条款号 |
| issuing_body | string | 颁布机关 |
| effective_date | string | 实施日期 |
| article_content | string | 条款内容 |

说明：

- 这一层与现有治理图中的 `BASED_ON` 不冲突。
- 前者是办事指南栏目中的依据摘要，后者是文档级治理关系。

#### L. rights_and_obligations

```json
{
  "rights": ["..."],
  "obligations": ["..."]
}
```

#### M. remedies

```json
{
  "administrative_reconsideration": {
    "department": "...",
    "address": "...",
    "phones": ["..."],
    "url": "..."
  },
  "administrative_litigation": {
    "department": "...",
    "address": "...",
    "phones": ["..."],
    "url": "..."
  }
}
```

#### N. consultation_and_supervision

```json
{
  "consultation_phones": ["..."],
  "consultation_urls": ["..."],
  "complaint_phones": ["..."],
  "complaint_urls": ["..."]
}
```

#### O. service_windows

数组项结构建议：

| 字段 | 类型 | 说明 |
|------|------|------|
| window_name | string | 窗口名称 |
| location | string | 办理地点 |
| office_phone | string | 办公电话 |
| office_hours | string | 办公时间 |
| navigation | string | 位置指引 |
| scope | string | 窗口服务范围 |

#### P. acl_ids

用于承接文档级 ACL 令牌，字段语义与 `gov_doc_meta.acl_ids` 保持一致。

| 字段 | 类型 | 说明 |
|------|------|------|
| acl_ids | string[] | ACL 令牌列表，空数组表示公开文档 |

#### Q. bindings

用于表达 Guide 与现有系统对象的关联关系。

```json
{
  "matter_ids": ["matter_xxx"],
  "organization_bindings": [
    {
      "name": "广州市公安局",
      "organization_id": "...",
      "role": "handled_by"
    }
  ],
  "region_bindings": [
    {
      "name": "广州市",
      "region_id": "...",
      "role": "applicable_region"
    }
  ]
}
```

#### R. quality

用于记录抽取质量状态。

```json
{
  "completeness_score": 0.92,
  "confidence_score": 0.88,
  "missing_fields": ["result_info.template_name"],
  "needs_review": false,
  "warnings": ["materials[6].notes contains merged lines"]
}
```

#### S. raw_sections

保留原始分段文本，便于回链与重抽取。

```json
{
  "basic_info": "...原始文本...",
  "materials": "...原始文本...",
  "fees": "...原始文本..."
}
```

---

## 7. 与样例标准办事指南的字段映射

以“办理及加注普通护照”样例为例，推荐映射如下：

| 样例栏目 | 映射路径 |
|------|------|
| 事项名称 | `matter_identity.matter_name` |
| 日常用语 | `matter_identity.colloquial_names[]` |
| 事项类型 | `matter_identity.matter_type` |
| 承诺办结时限 | `basic_info.promised_time_limit` |
| 法定办结时限 | `basic_info.legal_time_limit` |
| 到办事现场次数 | `basic_info.visit_count_to_hall` |
| 必须现场办理原因 | `basic_info.must_onsite_reason` |
| 实施主体 | `matter_identity.implementing_subject` |
| 是否支持物流快递 | `basic_info.express_supported` |
| 在线预约地址 | `basic_info.reservation_url` |
| 实施编码 | `matter_identity.implementation_code` |
| 基本编码 | `matter_identity.basic_code` |
| 事项版本 | `matter_identity.matter_version` |
| 跨域通办 | `cross_region_service[]` |
| 审批信息 | `review_info` |
| 审批结果 | `result_info[]` |
| 受理条件 | `acceptance_info.acceptance_conditions[]` |
| 材料清单 | `materials[]` |
| 收费项目信息 | `fees[]` |
| 设定依据 | `legal_basis[]` |
| 权利与义务 | `rights_and_obligations` |
| 行政复议/行政诉讼 | `remedies` |
| 咨询方式与监督方式 | `consultation_and_supervision` |
| 办理窗口 | `service_windows[]` |

---

## 8. 改动点

### 8.1 入库链路改动

新增“标准办事指南结构化抽取阶段”，位置建议在：

- Docling 文本解析之后
- GraphBuilder 之前或之后均可，但建议在 GraphBuilder 之前完成 section 级结构抽取

推荐新增组件：

- `backend/app/core/service_guide_extractor.py`
- `backend/app/prompts/service_guide_extraction.py`

职责：

1. 判断当前文档是否为标准办事指南
2. 做 section 级抽取
3. 生成 `StandardServiceGuideProfile`
4. 输出绑定结果与质量报告
5. 在新内容路径与重复内容快路径都能补建 Guide 详情

### 8.2 元数据抽取改动

当前元数据抽取主要针对传统公文文种，需要补充：

1. doc_type 扩展支持“办事指南”等非传统公文类型
2. 增加 `scene_type` 或 `document_scene_type` 判断
3. 支持从标题和 section 特征判断是否属于标准办事指南

实现注意：

- 不能只修改 `metadata_extractor`
- 还需要同步修改 unified `document_analyzer` 的 prompt 与输出契约
- pending meta 和最终 meta 写入路径都要能落下 `document_scene_type`

建议新增字段：

- `document_scene_type = standard_service_guide | policy_document | notice | mixed`

### 8.3 OpenSearch 存储改动

建议新增索引：`gov_service_guides`

至少包含：

- `profile_id`
- `doc_id`
- `acl_ids`
- `scene_type`
- `matter_name`
- `colloquial_names`
- `implementation_code`
- `basic_code`
- `matter_version`
- `implementing_subject`
- `guide_version`
- `service_modes`
- `handled_org_names`
- `region_names`
- `materials`（nested）
- `fees`（nested）
- `service_windows`（nested）
- `quality`
- `raw_sections`

同时 `gov_doc_meta` 建议镜像以下轻量字段：

- `document_scene_type`
- `guide_profile_id`
- `guide_matter_name`
- `guide_codes`
- `guide_version`

说明：

- `matter_identity.colloquial_names` 是 Guide 内唯一事实源
- 根级 `colloquial_names`、`guide_search_text` 仅做检索镜像
- 不再单独维护 `basic_info.daily_terms`
- 如果搜索页要按 `document_scene_type` 过滤，还需要同步补齐 chunk 侧镜像字段与 search filter schema

### 8.4 图谱同步改动

图谱层不建议全量同步 Guide 详情，仅同步：

1. Matter 主体
2. 可复用 Condition
3. 可复用 Material
4. 可复用 TimeLimit
5. 办理部门与适用地域

新增同步规则建议：

- `matter_identity` -> Matter / aliases / codes
- `acceptance_info.acceptance_conditions[]` -> Condition 候选
- `materials[].material_name` -> Material 候选
- `basic_info.promised_time_limit` / `legal_time_limit` -> TimeLimit 候选

但以下内容不进入图谱首版主干：

- `service_windows`
- `fees`
- `remedies`
- `consultation_and_supervision`
- `result_info`

### 8.5 API 改动

建议新增标准办事指南 API：

| API | 说明 |
|------|------|
| `GET /api/v1/service-guides` | 标准办事指南搜索 |
| `GET /api/v1/service-guides/{profile_id}` | 获取完整结构化详情 |
| `GET /api/v1/service-guides/by-doc/{doc_id}` | 通过文档获取指南详情 |
| `GET /api/v1/service-guides/by-matter/{matter_id}` | 通过事项获取绑定指南 |

说明：

- `POST /api/v1/service-guides/precheck` 暂不纳入首版，待搜索、详情和 ACL 过滤链路稳定后再单独立项
- `GET /api/v1/service-guides*` 默认按公开接口设计，可匿名访问公开数据
- 当 Guide 存在显式 `acl_ids` 时，再应用现有 PermissionService / `acl_ids` 过滤逻辑

同时现有 Matter API 可做增强：

1. Matter 搜索时支持别名和编码搜索
2. Matter 详情可附带 `linked_service_guides`
3. Matter requirements 可选融合 Guide materials 行级信息

### 8.6 搜索与 QA 改动

推荐增加查询路由：

1. Guide 查询默认允许匿名访问公开数据；遇到显式 `acl_ids` 再执行 ACL 过滤
2. 当问题包含“收费、窗口、电话、投诉、复议、预约、快递、实施编码、事项版本”等关键词时，优先查询 `gov_service_guides`
3. 当问题包含“材料、条件、时限、部门”时，可同时利用 Matter 图与 Guide 详情
4. QA 上下文中增加“标准办事指南结构化证据”块

### 8.7 前端改动

建议新增“标准办事指南详情页”，不要复用现有 MatterCard 直接承接全部字段。

建议页面结构：

1. 顶部：事项名称、日常用语、编码、版本
2. 左侧：基础信息、审批信息、受理条件、办理流程
3. 中部：材料清单、收费项
4. 右侧：窗口、咨询投诉、法律救济、依据文件

同时 Matter 页与 Guide 页保留跳转关系：

- Matter 页负责快速事项卡
- Guide 页负责完整标准事项详情

---

## 9. 实施方案

### Phase A：识别与分类打底

目标：先把标准办事指南从普通文档中稳定识别出来。

实施项：

1. 扩展 `graph_schema.yaml` 中的 `doc_type` 与 `knowledge_category`
2. 同步修改 `metadata_extractor` 与 `document_analyzer`，使其都能输出 `document_scene_type`
3. pending meta、最终 meta 以及 chunk 镜像路径按需补齐 `document_scene_type`
4. 上传/入库时允许标记“办事指南/事项类文件”
5. 搜索页支持按 `document_scene_type` 或 `knowledge_category` 过滤

产出：

- 可识别哪些文档是标准办事指南
- 可对这类文档单独检索与统计

### Phase B：结构化详情 MVP

目标：先实现可查询、可展示、可回链的结构化详情。

MVP 推荐至少覆盖：

1. matter_identity
2. basic_info
3. acceptance_info
4. materials
5. fees
6. consultation_and_supervision
7. service_windows
8. legal_basis

补充约束：

- `process_info` 如进入 MVP，仅保留 `summary`、`step_titles`、`raw_text`
- MVP 不承诺流程 step 级结构化对象

实施项：

1. 新增 `gov_service_guides` 索引
2. 新增 `service_guide_extractor`
3. 在新内容路径与重复内容快路径都接入 Guide 抽取/补建
4. 新增公开查询 API 与详情 API
5. 新增结构化详情前端页
6. 保证 `gov_doc_meta` / `gov_service_guides` 的 ACL 同步一致
7. 文档删除时同步清理对应 Guide 文档

产出：

- 给定 `doc_id` 可返回完整标准事项详情
- 材料清单的行级语义可稳定展示

### Phase C：与 Matter 图融合

目标：让 Guide 详情和 Matter 图形成互补，而不是两套孤立系统。

实施项：

1. Guide -> Matter 绑定
2. Matter 搜索补充别名/编码召回
3. Matter 卡可展示 Guide 详情入口
4. QA / Research 可同时导入 Matter 图证据和 Guide 结构证据

说明：

- 自然语言 `precheck` 不作为本阶段硬目标，待查询链路稳定后再评估是否单独立项

产出：

- “事项预审助手”能力明显增强
- 自然语言问答稳定性提升

### Phase D：结构化比较与版本治理

目标：支持同事项不同地区/不同版本对比。

实施项：

1. 按 `implementation_code + matter_version + region` 对 Guide 做分组
2. 支持材料差异、窗口差异、收费差异、办理口径差异对比
3. 支持 Guide 版本变化提醒

产出：

- 可支持更高价值的专题研究与咨询答复场景

---

## 10. 风险与边界

### 10.1 文档文本可能不是理想表格结构

许多标准办事指南来自网页导出，文本中会出现：

- 表头断裂
- 单元格换行错位
- 多行备注粘连
- 区域列表超长

因此首版不要假设所有字段都能 100% 精确切表，应允许：

- `raw_sections`
- `warnings`
- `needs_review`

并采用保守策略：

- 无法稳定拆列时优先保留 `raw_text` 与 `warnings`
- 不对原件份数、是否免提交、是否支持快递等高敏感字段做无依据推断

### 10.2 不是所有字段都适合入图

标准办事指南结构化完成，并不意味着所有字段都应进入图谱。图谱应保持节制，只同步真正有跨文档复用价值的信息。

### 10.3 一个指南可能绑定多个事项

虽然很多指南是一事项一文档，但也要允许一份指南覆盖多个事项，因此 `bindings.matter_ids` 设计为数组。

### 10.4 不建议首版做过重的人工维护后台

首版优先解决：

- 能抽
- 能存
- 能查
- 能展示

人工校对后台可后置。

### 10.5 Guide 不能绕过现有 ACL

Guide 详情默认面向公共服务场景公开查询，但不能因为新增了 `gov_service_guides` 就绕过显式设置的文档权限。

要求：

- `gov_service_guides.acl_ids` 与 `gov_doc_meta.acl_ids` 保持同步
- 空 `acl_ids` 视为公开，允许匿名查询
- 非公开文档必须要求用户 ACL 与文档 ACL 有交集
- 权限变更任务、重复内容补建路径、文档删除路径都要同步维护 Guide 生命周期

---

## 11. 验收标准

以下指标建议作为首版验收标准：

1. 对于“办理及加注普通护照”样例，结构化详情的栏目覆盖率达到 90% 以上。
2. 材料清单中至少以下字段可稳定抽出：材料名称、必要性、原件/复印件份数、材料形式、免提交、来源渠道、填报须知、备注。
3. 可通过事项名称、日常用语、实施编码中的任一方式稳定定位指南。
4. 可直接查询窗口信息、收费项、咨询投诉方式、法律救济信息，而不再只依赖正文生成。
5. Matter 图与 Guide 详情能互相跳转，且不会因为同名材料造成指南详情污染。
6. 公开事项/Guide 可匿名查询；显式受限 Guide 的 ACL 结果与文档详情保持一致，不出现权限放大。

---

## 12. 最终建议

最终建议可以概括为一句话：

> 保留现有 Matter 图作为“事项核心语义层”，新增 `StandardServiceGuideProfile` 作为“标准办事指南结构化详情层”，两者通过绑定关系衔接，而不是相互替代。

这样做的好处是：

1. 不推翻现有事项图建设成果
2. 能真正覆盖标准办事指南的栏目化信息
3. 便于后续做事项预审、咨询答复、指南对比、版本治理
4. 与当前仓库的 OpenSearch + Neo4j 双底座架构兼容

如果要继续向开发实施推进，下一步建议输出两份文档：

1. `gov_service_guides` OpenSearch mapping 详细设计
2. `service_guide_extractor` 抽取提示词与接口契约设计