4. 集成工程中的术语子集与引用集
在SNOMED CT集成工程中,术语子集(Subset)与引用集(Reference Set)是控制术语使用范围、约束临床录入内容、支撑本地化表达的核心机制。如果把SNOMED CT全量概念比作一座拥有数十万词条的巨型词典,那么引用集就是为特定临床场景、特定科室或特定业务系统裁剪出的“专用词表”。理解引用集的类型体系、成员管理方式以及构建维护流程,是术语集成从“能查到”走向“用得住”的关键一步。
引用集的基本定位与类型体系
引用集本质上是一种标准化的容器结构,它通过“引用集标识符 + 成员记录”的方式,把一组SNOMED CT组件(概念、描述或关系)组织在一起,并附加成员级别的元数据。与简单的概念列表不同,引用集在SNOMED CT的发布文件中以独立文件形式存在,每个成员记录都包含引用集ID、被引用组件ID、成员状态以及若干可选字段。这种结构使得引用集既能表达“哪些概念属于这个集合”,也能表达“这些概念在该集合中扮演什么角色”。
从集成工程视角看,最常打交道的引用集类型包括以下几类:
- 简单类型引用集(Simple type):最基础的成员集合,仅记录成员是否属于该集合,常用于表达“允许使用”“禁止使用”这类二元判断。例如某医院将“本院检验项目可编码概念”构建为一个简单引用集。
- 有序类型引用集(Ordered type):在简单类型基础上增加排序字段,成员在集合中具有明确的先后顺序。典型场景是临床路径中的推荐术语排序、护理评估量表的选项顺序。
- 关联类型引用集(Association type):成员之间建立映射或关联关系,常用于表达“旧概念→新概念”的替换关系,或本地术语与SNOMED CT概念之间的对应关系。
- 属性值类型引用集(Attribute value type):为每个成员附加一个属性值,例如为某概念标注“适用科室=心内科”“使用优先级=高”。
- 语言类型引用集(Language type):用于管理某语言或方言下的可接受描述,支持多语言临床环境。
- 模块依赖类型引用集(Module dependency type):记录扩展模块之间的依赖关系,属于发布管理层面的引用集。
在集成工程中,选择哪种类型取决于业务需求:如果只需要控制“能不能用”,简单类型足够;如果需要控制“按什么顺序展示”,有序类型更合适;如果需要携带科室、优先级等附加信息,则应使用属性值类型。
成员管理:从标识到状态
引用集的成员管理围绕“成员记录”展开。每条成员记录至少包含三个核心字段:referencedComponentId(被引用的概念、描述或关系ID)、refsetId(所属引用集ID)、active(成员是否有效)。对于属性值类型,还会增加attributeValue字段;对于关联类型,则增加targetComponentId字段。
成员管理的关键操作包括新增、失效和更新。在SNOMED CT的版本化发布机制中,成员通常不直接删除,而是通过将active置为0来标记失效,从而保留历史可追溯性。例如,某概念因临床指南更新不再推荐使用,集成工程师不会从引用集中物理删除该成员,而是将其状态置为失效,并在关联类型引用集中指向新的推荐概念。这种“失效+替换”的模式是术语治理中保证数据可审计的重要实践。
临床场景筛选:从业务需求到概念集合
临床场景筛选是引用集构建中最需要专业判断的环节。它要求集成工程师与临床专家协作,把“某个场景下医生应该能选到什么术语”转化为明确的概念集合。筛选通常遵循以下逻辑:
- 确定场景边界:明确引用集服务的业务范围,例如“急诊胸痛分诊”“糖尿病随访”“手术麻醉记录”。
- 确定语义范围:判断需要哪些语义轴上的概念,例如疾病诊断、症状、操作、检验项目、药物等。
- 利用层级关系收窄:通过SNOMED CT的IS-A层级,从高层概念向下筛选。例如“胸痛”场景可纳入“胸痛”及其所有后代概念,同时排除明确不属于该场景的分支。
- 排除不适用概念:剔除已失效概念、与本地政策冲突的概念、粒度过粗或过细的概念。
- 临床复核:由临床专家逐条确认或抽样确认,确保术语符合实际记录习惯。
在实际工程中,筛选往往借助SNOMED CT的表达式约束或ECL(Expression Constraint Language)查询来完成。例如,要筛选“所有属于心血管疾病且不在儿科专用集合中的概念”,可以用ECL表达为<< 49601007 |心血管疾病| MINUS ^ 900000000000000000 |儿科专用引用集|。这种基于表达式的筛选方式比手工枚举更可维护,也更容易在版本升级时重新执行。
子集构建与维护流程
一个可长期运行的引用集,需要建立从需求到发布再到维护的闭环流程。下图展示了一个典型的引用集构建与维护流程,涵盖需求分析、概念筛选、成员编辑、验证发布和版本维护五个阶段,并标注了各阶段的关键输入与输出。
在流程执行中,有几个工程细节值得特别注意。第一,概念筛选阶段应保留筛选表达式和中间结果,以便在SNOMED CT新版本发布后重新执行并对比差异。第二,成员编辑阶段应建立变更日志,记录每次新增、失效和更新的原因、操作人和时间。第三,验证发布阶段除了临床复核,还应做技术校验,包括:成员ID是否存在于当前版本、引用集ID是否唯一、属性值是否符合预期格式、是否存在重复成员记录。第四,版本维护阶段需要关注SNOMED CT国际版或国家版的更新说明,识别哪些被引用概念已失效或被替换,并据此更新本地引用集。
一个可参考的引用集成员记录示例
以下是一个属性值类型引用集的成员记录示例,用于表达“急诊胸痛分诊可编码概念”及其使用优先级。字段以制表符分隔,符合SNOMED CT引用集文件的一般格式:
refsetId referencedComponentId active attributeValue effectiveTime
900000000000100001 29857009 1 high 20250101
900000000000100001 23924002 1 high 20250101
900000000000100001 267036007 1 medium 20250101
900000000000100001 429559004 1 medium 20250101
900000000000100001 7180009 0 low 20250101
其中,29857009代表“胸痛”,23924002代表“胸部压迫感”,267036007代表“呼吸困难”,429559004代表“胸痛伴出汗”,7180009代表“非心源性胸痛”。最后一条active=0表示该成员已失效,可能因为临床指南不再将其作为急诊分诊的首选术语。这种记录方式既保留了历史,又清晰表达了当前有效成员及其优先级。
总结来看,引用集与子集是SNOMED CT集成工程中连接“标准术语”与“临床落地”的桥梁。理解引用集的类型差异,掌握成员记录的结构与状态管理,建立从临床场景筛选到版本维护的闭环流程,才能让术语系统真正服务于临床记录、数据分析和互操作需求。在实际项目中,建议从一个小而明确的临床场景开始构建第一个引用集,跑通全流程后再逐步扩展,避免一开始就追求大而全的集合而陷入维护困境。