中试服务管理已有完整的出库生产+质检闭环:中试申请单 → 输注方案 → 输注计划 → 出库生产工单/任务 → 出库质检工单/任务。已存在 biz_outbound_release_review 表和基础 CRUD(4个端点、149行),但功能简陋:创建时未关联生产/质检工单,无聚合查询,无前端页面。
入库放行审核(storage-release-review)已有完整实现(后端757行 CRUD + 3个 Vue 文件 + 独立 API 文件),可参照其模式设计出库放行审核。
后端已有可复用函数 build_outbound_pilot_context_by_schedule(db, schedule_id, tenant_no),一次性查出申请单/患者/输注方案/计划/产品信息。
Goals:
Non-Goals:
biz_outbound_release_review 表 vs 新建表选择: 复用已有表,补充缺失字段。
理由: 表已存在且与 infusion_schedule_id 关联,只需补充 review_attachments、review_by_name、create_by_name 等快照字段。
备选: 新建表——会增加迁移成本且无额外收益。
选择: 基于 biz_pilot_infusion_schedule 构建,左连接 biz_outbound_release_review 获取审核状态。
理由: 审核对象是输注计划,而非审核记录本身。输注计划创建后,只有生产和质检都完成才需要审核。列表页展示所有排程(附带审核状态),而非只展示已创建审核记录的排程。
备选: 只展示已创建审核记录的排程——会导致"待审核"状态的排程无法展示。
选择: 放在 pilot-service/outbound-release-review/。
理由: 用户决策放在中试服务管理菜单下,与输注计划管理同级。
备选: 放在 quality-inspection/ 下——会与入库放行审核混在一起,不符合业务分组。
选择: 后端一次性聚合查询,复用 build_outbound_pilot_context_by_schedule()。
理由: 入库放行审核的详情也是后端聚合(6个信息域)。复用已有函数减少重复代码,且一次请求减少前端多次调用。
备选: 前端多次调用已有 API 组装——增加请求次数,前端逻辑复杂。
选择: 保持已有的 /web/admin/pilot-release-review 路径前缀。
理由: 后端 API 已注册在此路径下,保持一致性。
biz_outbound_release_review 表字段不完整 → 补充字段即可,已有数据不受影响(新字段为 NULL 安全)infusion_schedule_id 查询(有索引),且单次排程关联数据量有限,性能可控