5.4 KiB
Context
生产物料库(biz_production_material*)已对齐质检物料库:试剂/耗材统一目录、批次、领用(manual_out)、工单 step_save(parent_usage_id)、盘点。用户确认 方案 A:配置试剂配制完成后 先入库存,工单使用前 再领用,步骤登记 不二次扣库。
已废弃的 biz_consumable_pack 仅为耗材模板,无配制实例与子物料领用追溯,不可复用。
Goals / Non-Goals
Goals:
- 第三类物料
material_type=configured_reagent,目录 + BOM(试剂+耗材子项) - 配制单:记录每次配制实际消耗的子物料领用行;产出配置试剂批次
- 配置试剂走完整 批次 → 领用 → 工单 step_save 链路
- UI 落在【生产物料库】与【生产工单】执行态,风格对齐 Fresh Mint / QC 物料库
Non-Goals:
- 不合并质检物料库
- 不恢复耗材包
- 工艺库/工艺路线步骤引用配置试剂 BOM(二期)
- 配制现场「直用不入库」模式(方案 B/C)
- 盘点首版对配置试剂做特殊调账逻辑(沿用现有 Part A/B,不调账)
Decisions
Decision 1: 扩展 material_type,不另建独立库存域
选择:configured_reagent 作为 biz_production_material.material_type 第三值;批次/领用/盘点 复用 现有表与 CRUD 模式。
理由:与用户已接受的试剂/耗材统一库一致;避免第二套 batch/usage API。
替代:独立 biz_configured_reagent* 表系 — 拒绝,重复建设。
Decision 2: 配方与配制分离
| 实体 | 表 | 含义 |
|---|---|---|
| 配方 BOM | biz_production_material_formula |
主数据:标准子物料与标准用量 |
| 配制单 | biz_production_material_prep + _prep_line |
业务单据:某次实际配制 |
理由:BOM 可版本化维护;配制单保留历史追溯(哪次用了哪些领用记录)。
配制单头关键字段:configured_material_id、prep_no、prep_time、output_qty、output_unit、batch_no、expire_date、stock_in_no(产出批次)、status(draft/completed/cancelled)。
配制行关键字段:component_material_id、component_material_type、component_material_code、requisition_usage_id(parent 领用记录)、actual_qty、usage_unit。
Decision 3: 库存流水 source_type
| 环节 | change_type | source_type | 库存影响 |
|---|---|---|---|
| 子物料配制消耗 | use | prep_consume |
子物料 不扣 batch;stock_before==stock_after;parent_usage_id 指向领用记录 |
| 配置试剂配制入库 | in | prep_in |
配置试剂 catalog stock_qty ↑;新建/更新 batch remaining_qty |
| 配置试剂领用 | use | manual_out |
按 batch 扣减(与现网一致) |
| 工单步骤登记 | use | step_save |
不扣库存;parent_usage_id 指向领用记录 |
理由:与 production-material-requisition Decision 5 一致;子物料已在领用时扣过 batch。
Decision 4: 配制完成事务边界
单次「确认配制」在一个 DB 事务内:
- 校验每行
requisition_usage_id有效、未重复、领用人为当前用户或允许范围 - 写入
prep+prep_line - 对每个 prep_line 写
prep_consumeusage - 创建配置试剂
stock_batch+prep_inusage - 更新配置试剂
stock_qty
失败则整体回滚。
Decision 5: 生产工单步骤 UI
选择:新增 biz_production_task_step_configured_reagent 子表(或等价命名),工单执行态增加 「配置试剂」Tab;领用下拉 GET /production-material-requisition-options?materialType=configured_reagent。
理由:与保留「试剂」「耗材」分列一致;避免塞入 reagent Tab 造成类型混淆。
保存仍调用统一 register_step_usage_from_requisition;目录内配置试剂 有实际用量时必须选领用记录。
Decision 6: 编码唯一性
沿用 租户 + material_type + material_code;允许配置试剂编码与试剂/耗材编码相同(类型不同)。
Decision 7: 偏离 BOM
配制时允许调整 实际用量;子物料行 必须 选领用记录。标准用量自 BOM 带出,仅作参考。
Risks / Trade-offs
| 风险 | 缓解 |
|---|---|
| 领用余量与子物料配制量不一致 | 首版仅记录 prep_consume 关联领用,不强制核销领用余额字段;二期可加「领用已配制量」汇总 |
| 配置试剂批次过期日规则不清 | 配制单必填 expire_date |
| 成本单价 | 首版 unit_price/amount 可按子物料 prep_consume 金额汇总写入产出 batch |
| 步骤子表增多 | 配置试剂 Tab 独立;工艺模板引用二期再做 |
| 与未完成 production-material-requisition 依赖 | tasks 注明前置:统一物料库迁移已执行 |
Migration Plan
- DDL:formula、prep、prep_line;字典项
configured_reagent;step 子表(若新建) - 部署后端 API + 前端
- 无历史数据迁移(新能力);旧耗材包保持废弃
回滚:隐藏菜单与 API;新表保留不删(软兼容)。
Open Questions
| # | 问题 | 默认 |
|---|---|---|
| Q1 | 配制单是否独立菜单 vs 物料库 Tab | 物料库第四 Tab「配制单」 |
| Q2 | prep_no 生成规则 | 租户内按日序号,如 PZ-YYYYMMDD-NNN |
| Q3 | 取消配制单是否回滚库存 | 首版仅 draft 可删;completed 不可撤销 |