# 数据录入需求总览

本文档基于 `docs/architecture` 下 5 份架构文档拆解，目标是把 BrAPI Test Server 的数据录入需求按上游到下游梳理清楚：

```text
Core 基础数据 -> Germplasm/Seed 种质种子 -> Phenotyping 表型 -> Genotyping 基因型
```

## 文档索引

| 顺序 | 文档 | 说明 |
| --- | --- | --- |
| 1 | `01-core-data-entry-requirements.md` | crop、person、program、location、trial、season、study、list |
| 2 | `02-germplasm-seed-entry-requirements.md` | breeding_method、germplasm、attribute、cross、seed_lot、pedigree |
| 3 | `03-phenotyping-entry-requirements.md` | ontology、trait、method、scale、observation_variable、observation_unit、event、image、observation |
| 4 | `04-genotyping-entry-requirements.md` | plate、sample、reference、variantset、variant、callset、allele_call、genome_map |

## 总体录入链路

```mermaid
flowchart TD
    CROP["crop 作物"] --> PROGRAM["program 项目"]
    PERSON["person 人员"] --> PROGRAM
    PROGRAM --> TRIAL["trial 试验批次"]
    PROGRAM --> LOCATION["location 地点"]
    TRIAL --> STUDY["study 研究/试验单元"]
    LOCATION --> STUDY

    CROP --> BM["breeding_method 育种方法"]
    BM --> G["germplasm 种质"]
    G --> GAV["germplasm_attribute_value 种质属性值"]
    PROGRAM --> CP["crossing_project 杂交项目"]
    CP --> CROSS["cross_entity Cross/PlannedCross"]
    G --> CROSSP["cross_parent 亲本"]
    CROSS --> CROSSP
    G --> MIX["seed_lot_content_mixture 批次组成"]
    CROSS --> MIX
    MIX --> SL["seed_lot 种子批次"]

    STUDY --> OU["observation_unit 观测单元"]
    G --> OU
    SL --> OU
    CROSS --> OU
    OU --> OBS["observation 观测值"]

    OU --> SAMPLE["sample 样本"]
    STUDY --> SAMPLE
    SAMPLE --> CALLSET["callset 调用集合"]
    VARIANT["variant 变异位点"] --> CALL["allele_call 基因型结果"]
    CALLSET --> CALL
```

## 全局界面原则

| 页面类型 | 用途 | 建议界面 |
| --- | --- | --- |
| 列表页 | 查询、筛选、分页、批量操作 | 顶部筛选区 + 表格 + 新增按钮 + 行内查看/编辑 |
| 新增/编辑页 | 单表主数据录入 | 分组表单，必填字段靠前，外键使用搜索选择器 |
| 详情页 | 查看主表及下游数据 | 顶部摘要 + Tab：基本信息、关联数据、扩展信息、外部引用 |
| 关系选择器 | 选择上游依赖 | 支持按 ID、名称、作物、项目、study 搜索 |
| 批量导入 | 初始化和大批量数据 | 上传 CSV/Excel + 字段映射 + 预校验 + 导入结果 |

## 全局字段规则

| 字段类型 | 录入规则 |
| --- | --- |
| `id` / `DbId` | 系统生成或用户提供；必须唯一；编辑时不可随意修改 |
| 名称字段 | 必填或强建议必填；用于下拉选择展示 |
| 外键字段 | 页面展示名称，提交保存实际 ID |
| 枚举字段 | 使用下拉框或单选控件 |
| 日期时间 | 使用日期/时间选择器，保存前统一格式 |
| `additional_info` | 作为高级配置，用键值编辑器录入 |
| `external_references` | 作为外部系统引用，用可增删表格录入 |

## 总体录入顺序

1. 录入 Core：`crop`、`person`、`program`、`location`、`trial`、`season`、`study`、`list`。
2. 录入 Germplasm/Seed：`breeding_method`、`germplasm_attribute_definition`、`germplasm`、`germplasm_attribute_value`、`crossing_project`、`cross_entity`、`cross_parent`、`pedigree_node`、`pedigree_edge`、`seed_lot`、`seed_lot_content_mixture`、`seed_lot_transaction`。
3. 录入 Phenotyping：`ontology`、`trait`、`method`、`scale`、`observation_variable`、`observation_unit`、`event`、`image`、`observation`。
4. 录入 Genotyping：`plate`、`sample`、`reference_set`、`reference`、`reference_bases`、`variantset`、`variant`、`callset`、`allele_call`、`genome_map`、`linkageGroup`、`marker_position`。

## 通用验收标准

1. 每张表都有列表、新增、编辑、详情能力。
2. 每个外键字段都能通过名称搜索选择，而不是要求用户手填数据库 ID。
3. 下游表新增时必须校验上游数据是否存在。
4. 删除或禁用上游数据时，需要提示被哪些下游表引用。
5. 支持按模块导入 CSV/Excel，并在导入前给出错误行和错误原因。
6. 详情页能看到关键下游关联，例如 `study` 下的 observation unit、sample、variantset。
