2. 样本追踪系统架构设计

样本追踪系统不是一张“记录表”,而是一条贯穿样本全生命周期的数据链。它的核心任务只有一句话:在任何时刻,都能回答“这个样本是谁、从哪来、现在在哪、经历过什么、下一步该去哪”。要做到这一点,系统必须在架构上把物理样本与数字记录一一绑定,并在接收、存储、处理、废弃四个阶段持续写入可追溯的事件。

一、端到端追踪框架的四个阶段

从架构视角看,样本追踪可以拆成四个物理阶段,每个阶段对应不同的数据写入动作:

  • 接收(Receive):样本到达实验室,登记来源、类型、数量、到达时间与状态(如冷链是否完整)。此阶段生成或绑定 UID,并记录“接收事件”。
  • 存储(Store):样本被放入冰箱、液氮罐或暂存架,系统记录位置坐标(设备—层—架—盒—孔)与存储条件(温度、湿度)。
  • 处理(Process):样本被分装、提取、扩增、测序或消耗,系统记录“母样本—子样本”的派生关系、操作人、试剂批次与时间戳。
  • 废弃(Discard):样本被灭活、销毁或移交,系统记录废弃原因、方式、执行人与审批人,并保留历史记录不可删除。

这四个阶段不是线性走完就结束,而是可能反复循环:一个样本可以多次分装、多次存储、多次处理,最终才进入废弃。因此,追踪框架必须支持事件追加,而不是覆盖式修改。

二、UID 体系:让每个样本有唯一身份

UID(Unique Identifier)是追踪系统的锚点。设计 UID 时,需要同时满足三个条件:全局唯一、可读可解析、与物理标签一致。常见的做法是采用分段编码,例如:

BF-2025-06-00123-A01
│   │    │   │     │
│   │    │   │     └─ 子样本序号(A01 表示第一次分装的第 1 管)
│   │    │   └─────── 当日流水号(00123)
│   │    └─────────── 月份(06)
│   └──────────────── 年份(2025)
└──────────────────── 机构/项目前缀(BF = Biofoundry)

这种编码的好处是:人眼能快速读出时间与批次,系统也能通过正则解析出字段。对于子样本,建议采用“母 UID + 派生后缀”的方式,而不是重新生成一个完全无关的编号。这样,任何子样本都能通过字符串截断回溯到母样本。

物理层面,UID 通常以二维码或 RFID 标签承载。二维码适合单管、冻存管;RFID 适合整盒、整架批量读取。无论哪种载体,都必须保证标签与数据库记录在接收环节完成首次绑定,后续所有操作只引用 UID,不再依赖人工抄写。

三、数据模型:事件驱动的核心表结构

追踪系统的数据模型应围绕“样本实体 + 事件日志”来设计,而不是把所有字段塞进一张宽表。推荐的核心实体包括:

  • Sample(样本实体):UID、类型、来源、母样本 UID、当前状态、创建时间。
  • Event(事件日志):事件 ID、UID、事件类型(接收/存储/处理/废弃)、时间戳、操作人、设备、参数 JSON。
  • Location(位置):设备 ID、层、架、盒、孔位,以及当前占用状态。
  • Derivation(派生关系):母 UID、子 UID、分装体积、操作类型。

其中,Event 表是只追加的(append-only)。任何状态变更都通过写入新事件来表达,而不是 UPDATE 旧记录。这样即使操作失误,也能通过事件回放还原历史。例如,一个样本从“存储”变为“处理”,不是修改 Sample 表的 status 字段,而是追加一条 event_type = "process_start" 的记录,再由系统根据最新事件推导当前状态。

建议为 Event 表建立 (UID, timestamp) 联合索引,这样查询某个样本的完整履历时,只需按时间排序即可得到一条清晰的时间线。

四、架构分层与数据流

从系统架构看,追踪系统通常分为三层:采集层、服务层、存储与展示层。采集层负责扫码、RFID 读取、设备接口(如冰箱温度记录仪);服务层负责 UID 生成、事件校验、权限控制与派生关系维护;存储与展示层负责持久化、履历查询与看板展示。

下面这张图展示了从样本接收到废弃的端到端数据流,以及 UID 在其中的绑定与传递关系:

样本追踪端到端数据流与 UID 绑定 接收 Receive 登记来源 / 绑定 UID 存储 Store 位置坐标 / 温度条件 处理 Process 分装 / 派生 / 消耗 废弃 Discard 灭活 / 销毁 / 审批 Event 事件日志(append-only) event_id · UID · event_type · timestamp · operator · device · params(JSON) Sample 样本实体 UID · 类型 · 来源 母 UID · 当前状态 Location 位置 设备 · 层 · 架 · 盒 · 孔 占用状态 Derivation 派生 母 UID → 子 UID 分装体积 · 操作类型 Audit 审计 废弃原因 · 审批人 不可删除 UID 贯穿全链路:BF-2025-06-00123-A01 接收绑定 → 存储定位 → 处理派生 → 废弃审计,所有事件均以 UID 为外键关联

五、关键设计原则与常见陷阱

在实际落地时,有几个原则值得反复强调:

  1. UID 一旦生成不可修改。如果标签损坏,应重新打印同一 UID,而不是生成新编号。
  2. 位置信息必须精确到孔位。只记录“在 -80℃ 冰箱”无法支持快速定位,必须细化到盒与孔。
  3. 派生关系要双向可查。既能从母样本查到所有子样本,也能从子样本回溯到母样本。
  4. 废弃不等于删除。废弃样本的记录必须保留,仅标记状态为 discarded,并记录审批链。
常见陷阱:用 Excel 维护样本位置,再用另一张表记录处理事件。两张表之间没有 UID 外键约束,一旦人工录入出错,就会出现“样本在系统里有记录、在冰箱里找不到”的情况。追踪系统的第一原则是单一数据源,所有操作都写入同一个事件日志。

总结来说,样本追踪系统的架构设计可以归纳为:以 UID 为锚点,以事件日志为骨架,以位置和派生关系为两翼,覆盖接收、存储、处理、废弃四个阶段。只要这条数据链不断裂,样本的全生命周期就是可追溯、可审计、可复现的。