乐于分享
好东西不私藏

如果我是迈瑞软件系统架构师(四)向下兼容复杂世界,向上保持平台纯净

如果我是迈瑞软件系统架构师(四)向下兼容复杂世界,向上保持平台纯净

复杂性必须被隔离,而不是被复制

医院的信息系统从来不是一张白纸

任何一家大型医院都不可能为了部署一套新软件把原来的信息系统全部推倒重建。

HIS可能已经运行十几年。

LIS来自另一家公司。

PACS又是一个独立系统。

手麻系统可能已经积累了大量历史数据。

监护仪、麻醉机、输注泵和呼吸机,更可能来自多个厂商。

这些系统之间。

有的使用标准接口,有的依靠数据库视图,有的通过消息队列,有的仍然需要文件交换。

还有一些系统只能通过厂家提供的封闭接口访问。

这就是现实。

迈瑞如果希望自己的重症系统、手麻系统、急诊系统和AI平台适应全国医院。

首先必须承认医院的信息环境天然复杂。

问题不是能不能消灭复杂性而是把复杂性放在哪里。

最糟糕的做法是把医院差异直接写进核心代码

假设一家医院的HIS。

患者编号字段叫:patient_id

另一家医院叫:inpatient_no

第三家医院使用:zyh

最简单的做法是在核心程序里不断增加判断:

如果是甲医院读取这个字段。

如果是乙医院读取另一个字段。

如果是丙医院再增加一个特殊规则。

一开始看起来只是多写几行代码。

但随着医院越来越多核心代码里会逐渐出现:

医院名称判断,特殊字段映射,专属流程,临时补丁,旧版本兼容,设备厂商分支。

最后每一个核心功能都必须知道自己运行在哪家医院。

这时候平台已经不再是统一平台,而是全国医院特殊逻辑的总和。

把差异写进核心代码等于每接一家医院,就复制一次复杂性。

复杂性一旦进入核心后果会越来越严重

第一,核心代码越来越难理解。

工程师修改一个功能。

必须先确认会不会影响某几家特殊医院。

第二,测试量快速增加。

同一个版本需要在几十种接口组合、流程组合和设备组合下测试。

第三,升级越来越困难。

新功能明明已经完成却因为几个历史接口没有适配无法统一发布。

第四,问题难以定位。

出现错误以后很难判断是核心平台问题,还是某家医院的特殊逻辑问题。

第五,产品失去可复制性。

每部署一家新医院都需要重新分析大量旧代码。

最终公司看起来做了一个平台。

实际做的仍然是一个个独立项目。

正确的做法是把系统分成两层,一层负责应对医院的混乱现实,一层负责保持平台的统一和纯净

可以把它们叫作:本地适配层核心平台层。

本地适配层

负责“听懂每一家医院”

本地适配层部署在医院内部。

它负责连接现有系统和设备。

包括HIS,EMR,LIS,PACS,手麻系统,护理系统,中央监护平台。

麻醉机,监护仪,呼吸机,输注泵。

它的工作不是直接提供临床功能。

而是完成几件基础事情:

读取医院原始数据,识别不同接口格式,完成字段映射,统一患者身份,转换时间和编码,清洗异常数据,处理接口失败,最后输出平台能够理解的标准数据。

例如。

无论医院原始系统把患者编号叫作什么。

进入核心平台以后都统一叫作:patient_id

无论原始系统怎样表示手术状态,进入平台以后。

都转换成统一状态:待手术,入室,麻醉开始,手术开始,手术结束,麻醉结束,进入PACU。

这样医院的差异被限制在适配层内部,不会继续向上扩散。

核心平台只理解一种统一语言

核心平台不应该知道:

某家医院使用哪一家HIS,哪一个字段叫住院号,监护仪是什么品牌,接口是Web API还是数据库视图。

它只接收统一的数据模型。

例如平台只需要知道:

这是一名什么患者?安排了什么手术?当前生命体征是什么?最近有哪些异常检验?现在处于什么手术阶段。

至于这些数据原来来自哪里由本地适配层负责。

核心平台则专注于:

业务流程,统一数据服务,AI任务,规则引擎,权限,审计,通知,质控,科研。

核心平台越纯净越容易做到:

统一开发,统一测试,统一升级,统一维护。

适配层面对差异核心平台面对业务

为什么这对AI平台尤其重要?

AI最怕的不是数据少,而是数据含义不一致。

同样一个字段。

一家医院记录当前体重另一家医院记录入院体重。

一家医院检验值使用mmol/L另一家医院可能使用不同单位。

一家系统里的“手术开始”可能是医生点击的时间,另一家系统可能来自设备事件。

如果这些差异没有提前处理,直接把原始数据交给AI。

AI得到的就不是完整临床事实,而是一堆含义不确定的数据。

因此AI平台不能直接适配几十种医院原始接口。

它必须建立在统一数据层之上。

先把数据说成同一种语言再让AI开始理解。

否则所谓智能分析只是把数据混乱进一步放大。

如何兼容不同HIS?

HIS通常提供:

患者基本信息,住院信息,诊断,医嘱,用药,手术申请,费用数据。

但不同HIS的数据库结构差异很大。

有的提供标准API,有的只开放数据库视图,有的仍然通过中间表交换。

迈瑞不应该让核心平台直接访问每一种HIS。

而应该建立统一HIS适配规范。

每一个适配器只负责把本地HIS数据。

转换成统一患者、诊断、医嘱和手术数据模型。

以后再接入新的HIS厂商,只是增加一个新的适配器,不修改核心业务。

如何兼容不同手麻系统?

手麻系统可能提供:

手术排程,当前手术患者,麻醉记录,既往麻醉史,手术阶段,术中事件,麻醉人员信息。

如果迈瑞AI平台只支持自己的手麻系统。

市场范围会被严重限制。

更合理的做法是先定义一套围术期标准数据接口。

不同厂商的手麻系统都通过适配层转换成同一种数据结构。

这样AI平台不关心数据来自迈瑞手麻系统还是其他厂商系统。

它只关心:

患者是谁?什么时候手术?正在进行什么操作?有哪些风险。

如何兼容LIS和PACS?

LIS的问题通常不是没有结果。

而是编码、单位和时间表达不同。

同一项检验可能存在多个名称,多个代码,多个参考范围。

因此适配层必须完成:

检验项目标准化,单位换算,参考范围处理,异常标识统一,时间排序。

PACS则更复杂。

核心平台不一定直接读取原始影像,但至少需要统一获取:

影像检查类型。

报告内容,检查时间,关键结论,影像链接,以后多模态AI成熟以后,再逐步扩展原始影像访问能力。

如何兼容不同设备?

设备接入同样不能依靠在核心平台里不断增加厂商判断。

应该建立统一设备数据模型。

例如所有监护设备最终都输出:

心率,血压,血氧,呼吸频率,体温,报警,设备状态。

所有麻醉机最终输出:

通气模式,潮气量,气道压力,氧浓度,呼气末二氧化碳,麻醉气体浓度。

不同厂商的通信协议,字段名称,采样频率由设备适配器处理。

核心平台只看到统一生命体征和设备事件。

这样迈瑞自己的设备可以提供最完整的数据。

第三方设备也可以实现基本兼容,这才是真正的开放平台。

本地适配层不能变成新的定制地狱

把差异放进适配层并不意味着适配层可以随意开发。

否则只是把混乱从核心平台搬到了另一处,适配层同样必须标准化。

例如:

统一适配器开发规范,统一字段映射模板,统一日志格式,统一错误码,统一监控方式,统一升级机制,统一测试工具,统一接口认证。

最好能够形成一个适配器市场。

每一家HIS厂商,每一种设备协议。

只开发一次以后全国复用。

如果每家医院都重新写一套适配程序,仍然只是另一种形式的项目制。

适配层还应该可替换

医院系统会更新,接口会变化,设备会更换。

所以适配层必须能够单独升级,不影响核心平台。

例如某家医院更换了HIS。

只需要替换HIS适配器。

核心平台不变。

某个设备厂商升级协议。

只修改对应设备适配器。

AI平台、任务中心、质控系统都不需要重新开发。

这种解耦决定了平台能否长期生存。

统一标准是整个架构的核心

适配层和核心平台之间。

必须有一套清楚的标准契约。

至少包括:

患者主索引,就诊信息,手术信息,诊断,医嘱,检验,影像报告,生命体征,设备状态,手术阶段,人员信息,事件与报警。

这些标准。

优先采用国家和行业已有规范。

例如成熟的数据编码、医疗术语和接口标准。

如果现有标准不足。

迈瑞应该建立自己的开放标准,并逐步推动行业采用。

因为真正的平台竞争。

最终竞争的不是谁连接了更多接口。

而是谁定义了大家愿意遵循的数据语言

平台纯净不等于平台封闭

保持核心纯净不是拒绝第三方系统。

恰恰相反。

核心越统一越容易开放。

当数据模型、权限、事件和接口规则稳定以后。

第三方厂商可以更容易接入。

医院也可以开发自己的扩展功能。

迈瑞则不需要为每一个合作伙伴修改核心代码。

所以开放与纯净并不矛盾。

真正危险的是:没有标准的开放。

每接一个系统就增加一套特殊逻辑。

那不叫开放平台那叫接口堆积。

一个简单的判断标准

每出现一家新医院可以问一句:

为了接入这家医院,我们需要修改核心平台吗?

如果答案经常是需要,说明平台还没有真正标准化。

理想状态应该是新增适配器,完成字段映射,配置规则,通过接口测试。

核心平台不做任何医院专属修改。

只有做到这一点迈瑞软件才可能真正规模化。

写在最后

医院世界天然复杂。

迈瑞不可能要求全国医院:

统一HIS,统一手麻系统,统一设备品牌,统一数据库,统一工作流程。

所以软件必须具备强大的兼容能力。

但兼容不能以牺牲核心平台为代价。

如果把每一家医院的字段、接口和特殊流程不断写进核心代码,平台最终一定会被拖垮。

真正合理的架构是:

本地适配层负责理解医院,核心平台负责坚持标准。

医院差异在底层被消化统一能力在上层被复用。

向下兼容复杂世界。

向上保持平台纯净。

这不是一个普通的技术选择。

它决定了一套软件究竟只能服务几家医院,还是能够走向全国。

复杂性无法消失但它必须被限制在应该存在的地方。

复杂性必须被隔离,而不是被复制。

知而后行,行而求知。

从手术室到机房,从临床到系统。记录一名麻醉医生关于医疗AI、医院信息化与持续成长的探索。

—— 医路智行录