4. 平台总体架构设计

医疗术语服务平台并不是一个孤立的字典系统,它处在 HIS、EMR、LIS、PACS、CDR、医保结算、科研数据平台之间,承担“语义对齐层”的角色。临床系统产生的是带本地编码的诊断、检验、药品、手术文本;医保与上报系统要求的是国家医保代码、ICD-10/ICD-9-CM-3、LOINC、SNOMED CT 等标准编码。术语服务要做的,是在这些系统之间提供稳定的映射、校验、检索与版本管理能力,使上游业务系统不必各自维护一套术语库。

从定位上看,术语服务对外暴露三类能力:标准化映射(本地码→标准码)、术语检索与补全(按名称、拼音、同义词、编码前缀召回)、版本与校验(某次映射依据的是哪一版目录、是否已失效)。这三类能力决定了它必须同时具备低延迟查询、复杂关系推理和全文检索三种特征,也直接决定了后面的微服务划分与存储选型。

微服务与 API 网关架构

平台按业务能力拆分为若干微服务,而不是按技术分层拆分。典型划分如下:

  • 术语目录服务:管理 ICD-10、ICD-9-CM-3、LOINC、SNOMED CT、药品本位码等目录的版本、生效时间与发布状态。
  • 映射服务:维护本地码与标准码的映射关系,支持一对一、一对多、多对一及“不可映射”标记。
  • 检索服务:提供名称、别名、拼音首字母、编码前缀的混合检索与自动补全。
  • 校验服务:对业务系统提交的编码做合法性、版本一致性、性别/年龄适用性校验。
  • 订阅与通知服务:当目录版本更新时,向订阅方推送变更事件。

所有外部流量统一经过 API 网关。网关承担路由转发、JWT 鉴权、租户识别、限流熔断、访问审计与响应缓存。业务系统不直接访问内部服务,只通过网关暴露的 REST/JSON 接口或批量接口调用。对于高频的编码校验,网关层可缓存“编码→有效性”结果,TTL 设为 5 分钟,降低校验服务压力。

术语服务平台总体架构 上游业务系统 HIS 住院 EMR 病历 LIS 检验 医保结算 科研数据平台 区域健康档案 API 网关 路由 · JWT 鉴权 · 租户识别 · 限流熔断 · 审计 · 响应缓存 微服务层 术语目录服务 版本 / 生效期 / 发布 映射服务 1:1 / 1:N / 不可映射 检索服务 名称 / 拼音 / 前缀 校验服务 合法性 / 版本 / 适用性 订阅与通知服务 变更事件推送 存储层 关系库 PostgreSQL 目录元数据 / 映射表 版本 / 审计日志 图库 Neo4j SNOMED CT 关系 父子 / 等价 / 映射链 搜索引擎 Elasticsearch 全文 / 拼音 / 同义词 自动补全索引 对象存储 MinIO / OSS 原始目录包 / 映射报告 版本快照 / 导出文件

存储选型:四类存储各司其职

术语数据的形态差异很大,单一数据库无法同时满足所有需求,因此采用“关系库 + 图库 + 搜索引擎 + 对象存储”的组合。

关系库(PostgreSQL)存放目录元数据、映射关系表、版本记录和审计日志。映射表的核心字段包括:local_code、local_name、standard_system、standard_code、map_type(1:1 / 1:N / N:1 / unmapped)、catalog_version、effective_from、effective_to。例如一条映射记录:本地码 DIAG-0231、本地名称“2型糖尿病伴肾病”、标准系统 ICD-10、标准码 E11.2、映射类型 1:1、目录版本 GB2024-v3。关系库保证事务一致性与唯一约束,适合做映射的权威存储。

图库(Neo4j)用于表达 SNOMED CT 这类具有复杂层级和多重关系(is-a、finding-site、associated-morphology)的术语体系。当需要回答“某诊断的所有上位概念”或“两个概念之间的最短关系路径”时,图遍历比多表 JOIN 更直观、更高效。图库中节点为概念,边为关系类型,属性保存概念 ID 与描述。

搜索引擎(Elasticsearch)承担检索服务。索引中每个术语文档包含标准编码、首选名称、同义词数组、拼音全拼与首字母、所属目录版本。检索时使用 multi_match 配合 edge_ngram 分析器实现前缀补全,并用 synonym 过滤器把“心梗”映射到“心肌梗死”。检索服务不直接查关系库,避免模糊查询拖慢主库。

对象存储(MinIO/OSS)保存原始目录包、版本快照、映射报告和导出文件。目录包通常体积较大(如 SNOMED CT 全量包可达数百 MB),不适合放入数据库;对象存储提供版本化桶和预签名 URL,供订阅方按需下载。

高可用、可扩展与安全合规

高可用方面,网关与微服务均无状态,可水平扩展,部署至少两个副本并配置就绪探针;PostgreSQL 采用主备流复制,图库与搜索引擎使用三节点集群,对象存储使用纠删码或跨可用区副本。任一存储节点故障时,服务应降级而非整体不可用:例如图库不可用时,映射服务仍可基于关系库返回已缓存的映射结果。

可扩展方面,目录版本更新通过订阅与通知服务以事件方式广播,各服务消费事件后刷新本地缓存,避免全量重启。新增术语体系(如新增某省医保目录)只需在目录服务注册新系统并建立索引,不需要改动网关路由。

安全合规方面,医疗数据涉及患者隐私与行业监管,需落实以下措施:

  • 鉴权与授权:网关校验 JWT,按租户与角色控制可访问的目录范围;科研租户只能访问脱敏后的术语映射,不返回患者级数据。
  • 传输与存储加密:外部调用强制 HTTPS,内部服务间启用 mTLS;数据库与对象存储启用静态加密。
  • 审计留痕:所有映射变更、目录发布、批量导出写入审计日志,记录操作者、时间、IP、变更前后值,保留不少于 6 个月。
  • 版本可追溯:任何一次映射结果都能回答“依据哪一版目录、何时生效”,满足医保审核与病历质控的追溯要求。
架构设计的关键判断:术语服务是“语义对齐层”,不是业务系统。它应保持无状态、可缓存、可追溯,把复杂关系推理交给图库,把模糊检索交给搜索引擎,把权威映射交给关系库,把大文件交给对象存储。