# 字段抽取范围确认Skill 设计

## 1. Skill 定位

`字段抽取范围确认Skill` 负责确定本次字段抽取使用哪些文档，以及每个目标字段优先从哪些文档角色中抽取。

英文实现标识建议使用 `FieldExtractionScopeResolveSkill`。

## 2. 输入

```python
@dataclass
class FieldExtractionScopeResolveInput:
    documents: list[DocumentFact]
    selected_document_ids: list[int]
    target_field_keys: list[str]
    field_source_priority: dict
```

## 3. 输出

```python
@dataclass
class FieldExtractionScopeResolveOutput:
    extractable_documents: list[DocumentFact]
    excluded_documents: list[dict]
    field_document_plan: dict[str, list[DocumentFact]]
    warnings: list[dict]
```

## 4. 文档筛选规则

参与抽取的文档必须满足：

1. `source_role = submission`
2. 文档处理状态可用。
3. 文档存在文本或表格结构。
4. 文档角色属于字段来源配置。

排除：

1. 法规依据资料。
2. 不支持文件。
3. 解析失败且无可用文本。
4. 用户未选择且不在默认来源范围内的文档。

## 5. 核心方法

### 5.1 `run(input) -> FieldExtractionScopeResolveOutput`

主入口方法。

### 5.2 `filter_extractable_documents(documents) -> list[DocumentFact]`

筛选可抽取文档。

### 5.3 `build_field_document_plan(fields, documents, priority) -> dict`

为每个字段构建候选文档顺序。

### 5.4 `collect_scope_warnings(documents) -> list[dict]`

收集待复核、解析失败、文本缺失等警告。

## 6. 技术实现

使用技术：

1. 文档角色枚举
2. YAML 来源优先级
3. Python 排序规则

## 7. 测试要点

1. 法规资料被排除。
2. 申请表、说明书、产品列表被纳入。
3. 用户选择文档时只使用选中范围。
4. 待复核文档会降低抽取可信度。

