spec.md 3.9 KB

ADDED Requirements

Requirement: Reagent inventory fields

系统 SHALL 在 biz_reagent 表上新增以下库存字段:

  • stock_qty DECIMAL(18,4) NOT NULL DEFAULT 0 — 当前库存量
  • warning_qty DECIMAL(18,4) NOT NULL DEFAULT 0 — 预警库存量
  • status CHAR(1) NOT NULL DEFAULT '1' — 启用/停用状态(1=启用,0=停用)

后端 SQLAlchemy Model BizReagent SHALL 同步新增对应字段。前端列表和表单 SHALL 展示这些字段。

Scenario: Existing reagents have zero stock after migration

  • WHEN 数据库迁移完成,已有试剂记录存在
  • THEN 所有已有试剂的 stock_qty 为 0,warning_qty 为 0,status 为 '1'

Scenario: Reagent list shows stock info

  • WHEN 用户访问试剂管理列表
  • THEN 列表显示当前库存量、预警库存量、状态列

Requirement: Manual stock-in for reagent

系统 SHALL 支持对单个试剂进行手动入库操作。入库数量必须大于 0。入库后 stock_qty 增加,同时生成一条变动记录(source_type=manual_in,change_type=in)。

Scenario: Successful stock-in

  • WHEN 用户对库存为 10 的试剂入库 5
  • THEN 试剂 stock_qty 变为 15,生成变动记录 change_qty=5, stock_after=15, source_type=manual_in

Requirement: Manual stock-out for reagent

系统 SHALL 支持对单个试剂进行手动出库操作。出库数量必须大于 0,且不能超过当前库存。出库必须填写领用人。出库后 stock_qty 减少,同时生成一条变动记录(source_type=manual_out,change_type=use,change_qty 为负数)。

Scenario: Successful stock-out

  • WHEN 用户对库存为 10 的试剂出库 3,领用人"李四"
  • THEN 试剂 stock_qty 变为 7,生成变动记录 change_qty=-3, stock_after=7, source_type=manual_out, receiver=李四

Scenario: Stock-out exceeds inventory

  • WHEN 用户对库存为 2 的试剂出库 5
  • THEN 系统拒绝并提示库存不足

Requirement: Batch stock-in for reagents

系统 SHALL 支持对多个试剂批量入库。所有条目在同一事务内处理,任一条目失败则全部回滚。

Scenario: Successful batch stock-in

  • WHEN 用户批量入库 3 种试剂,数量分别为 5、10、2
  • THEN 3 种试剂库存分别增加,生成 3 条变动记录,全部在同一事务内

Requirement: Batch stock-out for reagents

系统 SHALL 支持对多个试剂批量出库。批量出库需统一填写领用人和用途。所有条目在同一事务内处理,任一条目失败则全部回滚。

Scenario: Successful batch stock-out

  • WHEN 用户批量出库 3 种试剂,领用人"李四"
  • THEN 3 种试剂库存分别减少,生成 3 条变动记录

Requirement: Delete protection for stocked reagent

系统 SHALL 禁止删除库存量大于 0 的试剂。

Scenario: Delete reagent with stock

  • WHEN 用户尝试删除库存为 5 的试剂
  • THEN 系统拒绝并提示"该物料仍有库存,无法删除"

Requirement: Row-level locking for reagent stock operations

出入库操作 SHALL 使用 with_for_update() 行锁,防止并发操作导致库存数据不一致。

Requirement: Reagent stock log table

系统 SHALL 新建 biz_reagent_stock_log 变动记录表,字段结构与 biz_consumable_stock_log 一致:

  • material_id — 试剂 ID
  • material_code / material_name — 快照字段
  • change_type — in(入库) / use(使用/出库)
  • change_qty — 变动数量(入库正数,出库负数)
  • stock_before / stock_after — 变动前后库存
  • source_type — manual_in / manual_out / step_save
  • step_id / task_id / task_no — 步骤溯源字段
  • receiver / purpose — 领用人/用途
  • 公共字段

Scenario: Stock log created on reagent stock-in

  • WHEN 试剂入库 5
  • THEN 变动记录 change_type=in, change_qty=5, source_type=manual_in, stock_before=旧库存, stock_after=新库存