# 缺失错放判定Skill 设计

## 1. Skill 定位

`缺失错放判定Skill` 负责根据法规要求项和资料匹配结果，判定每个要求项的完整性状态，并映射完整性维度的风险等级和基础处理建议。

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

本 Skill 是完整性检查中真正产生“缺失、错放、待复核”结论的规则执行单元。

## 2. 输入

```python
@dataclass
class MissingMisplacementEvaluateInput:
    requirements: list[RequirementItem]
    matches: list[RequirementDocumentMatch]
    document_uncertainties: list[DocumentUncertainty]
    risk_rules: dict
```

## 3. 输出

```python
@dataclass
class MissingMisplacementEvaluateOutput:
    item_results: list[CompletenessItemResult]
    missing_items: list[dict]
    misplaced_items: list[dict]
    suspected_items: list[dict]
    manual_review_items: list[dict]
    pass_status: str
    highest_risk_level: str
```

## 4. 判定规则

| 条件 | 状态 |
|---|---|
| 必交要求项有高置信匹配 | `provided` |
| 必交要求项没有匹配 | `missing` |
| 有低置信匹配 | `suspected` |
| 文档角色匹配但章节点不匹配 | `misplaced` |
| 命中文档待人工复核 | `manual_review_required` |
| 当前流程不适用 | `not_applicable` |

## 5. 风险映射

风险来源：

1. 规则项自身的 `risk_level_if_missing`。
2. 错放风险映射。
3. 待复核不确定性。
4. 资料处理失败状态。

准入结论：

1. 存在高风险缺失：`failed`
2. 存在中风险缺失或错放：`review_required`
3. 只有低风险或待复核：`conditional_pass`
4. 全部已提供：`passed`

## 6. 核心方法

### 6.1 `run(input) -> MissingMisplacementEvaluateOutput`

主入口方法。

### 6.2 `evaluate_requirement_status(requirement, matches) -> CompletenessItemResult`

对单个要求项判定状态。

### 6.3 `detect_misplacement(requirement, matches) -> bool`

判断文档是否存在但归错章节点。

### 6.4 `detect_suspected_provided(requirement, matches) -> bool`

判断是否疑似提供。

### 6.5 `map_risk_level(requirement, status, risk_rules) -> str`

映射风险等级。

### 6.6 `build_suggestion(requirement, status, risk_level) -> str`

生成基础处理建议。

建议示例：

1. `补充 CH1.4 申请表，并由注册申报负责人复核。`
2. `核对该文件是否应归入 CH1.5 产品列表。`
3. `当前资料疑似提供但命名不规范，建议人工确认后修正章节点。`

## 7. 技术实现

使用技术：

1. Python 规则引擎
2. YAML 风险映射
3. Pydantic/dataclass
4. 本地建议模板

## 8. 异常处理

1. 要求项缺少风险配置：默认中风险，并记录规则警告。
2. 匹配结果为空：按必交状态判缺失或不适用。
3. 匹配冲突：标记待人工复核。
4. 文档处理失败：不作为已提供，进入待复核。

## 9. 测试要点

1. 必交项无匹配时判缺失。
2. 高风险缺失导致 `failed`。
3. 低置信匹配进入 `suspected`。
4. 章节点不一致进入 `misplaced`。
5. 待复核文档不会直接判为通过。

