# 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`)