# 统一字段池写入Skill 设计

## 1. Skill 定位

`统一字段池写入Skill` 负责将标准化后的字段候选写入统一字段池，并为每个字段选择推荐值、保留候选值和来源证据。

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

## 2. 输入

```python
@dataclass
class UnifiedFieldPoolWriteInput:
    batch_id: int
    normalized_candidates: list[NormalizedFieldCandidate]
    field_definitions: list[FieldDefinition]
    source_priority: dict
```

## 3. 输出

```python
@dataclass
class UnifiedFieldPoolWriteOutput:
    field_pool_items: list[FieldPoolItem]
    candidate_records: list[dict]
    manual_review_fields: list[dict]
    write_status: str
```

## 4. 推荐值选择规则

1. 优先选择高置信候选。
2. 同置信度时按来源优先级选择。
3. 来源优先级一致时选择规则抽取结果。
4. 多候选值明显不同则标记 `conflict_candidate`。
5. 待人工复核字段不作为无条件回填值。

## 5. 核心方法

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

主入口方法。

### 5.2 `group_candidates_by_field(candidates) -> dict`

按 `field_key` 分组。

### 5.3 `select_recommended_value(field_key, candidates, priority) -> FieldPoolItem`

选择推荐值。

### 5.4 `persist_field_pool_item(item) -> RegistrationFieldPoolItem`

写入字段池。

### 5.5 `persist_field_candidates(item, candidates) -> None`

保留所有候选值。

## 6. 技术实现

使用技术：

1. Django ORM
2. JSONField
3. 批量写入
4. 唯一约束：`batch + field_key`

## 7. 异常处理

1. 没有候选值：写入空字段并标记待复核。
2. 数据库写入失败：任务失败并写审计。
3. 字段重复写入：更新字段池版本或覆盖当前批次结果。
4. 候选冲突：保留候选并标记冲突候选。

## 8. 测试要点

1. 高置信候选被选为推荐值。
2. 来源优先级生效。
3. 冲突候选被保留。
4. 可回填字段标记正确。

