# 04 Germplasm / Seed - cross_entity 表录入说明

来源：`docs/architecture/04-germplasm-seed-data-flow.md`

## 录入目标

`cross_entity` 是 Cross 和 PlannedCross 的统一落库表。`plannedcross` 不是独立数据库表，计划杂交通过 `planned=true` 表达；实际杂交可以通过 `planned_cross_id` 关联计划杂交。

## 上下游关系

| 类型 | 内容 |
| --- | --- |
| 表 | `cross_entity` |
| Java 实体 | `CrossEntity` |
| 前置依赖 | `crossing_project`，可选自关联 `cross_entity` |
| 下游引用 | `cross_parent`、`cross_pollination_event`、`seed_lot_content_mixture` |
| API | `/brapi/v2/crosses`、`/brapi/v2/plannedcrosses` |

## 字段录入

| 字段 | 业务意义 | 录入方式 | 校验规则 |
| --- | --- | --- | --- |
| `id` | cross 主键 | 系统生成；导入可指定 | 必填、唯一 |
| `auth_user_id` | 数据所属用户 | 登录上下文自动写入 | 不允许前端手填 |
| `name` | cross 名称 | 用户录入/自动生成 | 建议必填 |
| `cross_type` | 杂交类型 | 枚举选择 | 可选 |
| `crossing_project_id` | 所属 crossing project | CrossingProject 选择器 | 建议必选，若填需存在 |
| `status` | planned cross 状态 | 枚举选择 | 计划杂交常用 |
| `planned` | 是否为计划杂交 | 开关 | 必填，默认 false |
| `planned_cross_id` | 关联计划杂交 | Cross 选择器 | 可选，必须指向 `planned=true` 的 cross |

## 附属集合字段

| 附属表 | 内容 |
| --- | --- |
| `cross_entity_cross_attributes` | crossAttributes 列表 |
| `cross_parent` | cross 的亲本 |
| `cross_pollination_event` | 授粉事件 |

## 页面与交互

- Cross 列表页展示实际杂交；PlannedCross 列表页展示 `planned=true` 数据。
- 新建实际 cross 时可选择 planned cross，并继承 planned cross 的亲本作为初始值。
- 详情页展示 parents、pollination events 和 seed lot 组成入口。

## 关键校验

1. `plannedcross` 不新建表，所有 planned cross 走 `cross_entity`。
2. `planned_cross_id` 不能指向自己。
3. 删除 cross 前检查 `cross_parent`、`cross_pollination_event`、`seed_lot_content_mixture` 引用。

---

**状态：已完成**（页面：`germplasm/cross-pedigree` → Cross Tab；详情：`cross-pedigree/crosses/[crossDbId]`、`planned-crosses/[plannedCrossDbId]`；创建实际杂交时继承计划杂交亲本）
