# 02 Germplasm / Seed - seed_lot_transaction 表录入说明

来源：`docs/requirements/02-germplasm-seed-entry-requirements.md`

## 录入目标

`seed_lot_transaction` 记录库存变化。它不应该由用户像普通表单一样手动维护，而应该由“入库、出库、转移、分装、合并、消耗”等业务动作自动生成。

## 字段录入

| 字段               | 业务意义                                     | 录入方式                | 控件建议            | 校验规则                                          |
| ------------------ | -------------------------------------------- | ----------------------- | ------------------- | ------------------------------------------------- |
| `id`               | 流转记录主键                                 | 系统生成                | 隐藏/只读           | 必填、唯一                                        |
| `auth_user_id`     | 数据所属用户或租户                           | 登录上下文自动写入      | 隐藏                | 不允许手填                                        |
| `amount`           | 流转数量                                     | 用户在业务动作中录入    | 数字输入框          | 必填；大于 0                                      |
| `description`      | 流转说明，如用于某 study、分装原因、报废原因 | 用户录入                | 多行文本            | 可选；出库/报废建议必填                           |
| `timestamp`        | 流转发生时间                                 | 默认当前时间，可调整    | 日期时间选择器      | 必填                                              |
| `units`            | 流转单位                                     | 默认继承 seed_lot.units | 下拉框/只读         | 必填；需与 seed_lot 单位一致或有换算关系          |
| `from_seed_lot_id` | 来源批次                                     | 按动作自动设置          | SeedLot 选择器/隐藏 | 与 `to_seed_lot_id` 至少一个存在                  |
| `to_seed_lot_id`   | 目标批次                                     | 按动作自动设置          | SeedLot 选择器/隐藏 | 与 `from_seed_lot_id` 至少一个存在；不能等于 from |

## 业务动作映射

| 动作      | from_seed_lot_id | to_seed_lot_id | amount 对库存影响                            |
| --------- | ---------------- | -------------- | -------------------------------------------- |
| 入库      | 空               | 目标批次       | 目标批次增加                                 |
| 出库      | 来源批次         | 空             | 来源批次减少                                 |
| 转移      | 来源批次         | 目标批次       | 来源减少，目标增加                           |
| 分装      | 原批次           | 新批次         | 原批次减少，新批次增加                       |
| 合并      | 多个来源批次     | 目标批次       | 来源减少，目标增加；可能生成多条 transaction |
| 消耗/报废 | 来源批次         | 空             | 来源减少，并记录原因                         |

## 验收点

1. amount 必须大于 0。
2. 出库/消耗时，amount 不得超过来源批次当前库存。
3. from 和 to 不能相同。
4. transaction 创建后应自动更新 seed_lot.amount 和 last_updated。
5. 已生成的 transaction 原则上不允许随意修改；如需纠错，应通过反向交易或更正记录处理。

---

**状态：已完成**（页面：`germplasm/seed-lot` → 库存交易 Tab；`germplasm/seed-lot/[seedLotDbId]` → Transactions Tab；BrAPI `POST /seedlots/transactions`）

