# 01 Core - trial_contact 表录入说明

来源：`docs/requirements/01-core-data-entry-requirements.md`

## 录入目标

`trial_contact` 是给 trial 添加联系人的关系表，不是独立主数据。它记录 trial 与 person 的多对多关系，用于试验责任追踪、联系人展示、权限和通知。

## 前置依赖和下游引用

| 类型 | 内容 |
| --- | --- |
| 表 | `trial_contact` |
| 前置依赖 | `trial`、`person` |
| 下游引用 | trial 联系人展示、权限和通知 |

## 页面入口

| 页面 | 录入要求 |
| --- | --- |
| Trial 新增/编辑页 | 联系人区域使用可增删表格选择 `person` |
| Trial 详情页 | 展示 trial 联系人 |
| 批量导入 | 支持通过 Core 导入流程导入 trial 联系人关系 |

## 字段录入

| 字段 | 类型 | 控件 | 录入说明 | 校验/来源 |
| --- | --- | --- | --- | --- |
| `trial_db_id` | varchar(255) | Trial 选择器 | 所属 trial | 必选，来源 `trial.id` |
| `person_db_id` | varchar(255) | 人员选择器 | 联系人 | 必选，来源 `person.id` |

## 校验规则

1. `trial_db_id` 必选，且必须引用已存在的 `trial.id`。
2. `person_db_id` 必选，且必须引用已存在的 `person.id`。
3. 同一 trial 下不建议重复添加同一个 person。

## 接口能力

本文档原始需求未强制限定 trial_contact 的独立 URL。实现时可以随 trial 新增/编辑一起保存，也可以提供 trial 联系人子资源接口；前端需要具备新增、删除、查询 trial 联系人的能力。

## 导入导出

1. 支持通过 Core 导入流程导入 `trial_contact`。
2. 外键列支持填写 ID；可额外支持名称匹配，但名称重复时必须报错。
3. 导入时需要校验 trial 和 person 是否存在。
4. 错误报告返回行号、字段名、错误原因、建议修正方式。

## 删除/停用

`trial_contact` 是关系记录，可在 Trial 新增/编辑页或详情页移除。删除关系不应删除 `trial` 或 `person` 主数据。

## 验收点

1. Trial 新增/编辑页可增删联系人。
2. 联系人选择器展示 person 名称，提交保存 `person.id`。
3. 删除 trial_contact 后，person 主数据仍保留。
