Medichrona:利用 IRIS for Health 和 three.js 以 3D 形式重现合成患者的终身病历
15秒简介:https://youtu.be/veKSM1THLeo
大家好,我是阿诺尔夫(Arnolf),一名独立开发者。
我正在开发Medichrona,它能将一名患者的终身医疗记录转换为运行在 InterSystems IRIS for Health 上的时序知识图谱,并允许您在浏览器中以 3D 形式逐年探索这些数据。这些数据来自 InterSystems 示例中的 Synthea 合成患者数据。
本文将详细说明数据如何从FHIR数据包呈现到3D界面。
演示视频
- 追踪一位患者的诊疗历程(约3分钟):https://youtu.be/zicdPNSglPc
- 记录最丰富的患者概览(约2分钟):https://youtu.be/IE7Gy04P8uI
数据流
Synthea FHIR R4 Bundles (15 synthetic patients)
|
|-- loaded by transaction --> IRIS for Health FHIR server (/fhir/r4)
| the source records
|
'-- Python ETL --> SQL graph tables (same IRIS instance)
ingest -> rank -> layout -> export
| |
| optional copy v
v one JSON file per patient
iris-vector-graph |
(openCypher queries) v
Astro + three.js viewer1. FHIR服务器保存源记录。每位患者的“Bundle”作为一笔事务进入IRIS for Health FHIR服务器。该图谱绝不会替换这些记录。
2. 通过 Python ETL 将图结构构建在 SQL 表中。相同的 Bundle 需经过四个阶段:
ingest将FHIR资源转换为节点和边。就诊记录构成时间主线,而疾病、用药、观察结果、操作、机构及执业人员则与之相连。rank为每个节点赋予权重。该权重决定了节点的大小以及哪些标签优先显示。layout预先计算 3D 坐标并将其存储在 IRIS 中。export为每位患者生成一个 JSON 文件。
边仅来源于记录中写入的引用和时间信息。系统不会进行任何推断。每个节点仍与其背后的 FHIR 资源保持关联,因此在本地演示中,详细信息面板可以打开 FHIR 服务器上的原始记录。
3. 浏览器仅负责绘制。查看器是一个使用 three.js 构建的静态 Astro 网站。它读取患者的 JSON 文件,运行时不会查询 IRIS。 每个节点类都有自己的形状,使用 InstancedMesh 绘制,年份滑块显示该年份中存在的内容。Python 和 TypeScript 除了 JSON 文件外没有任何共享内容。
4. 该图谱也可通过 openCypher 访问。可选步骤将 SQL 图谱复制到同一 IRIS 实例中的 iris-vector-graph 中。SQL 表仍作为屏幕数据的来源。
为何使用一个 IRIS for Health 实例
FHIR 存储库和图表表在同一个 IRIS for Health 容器中运行,但位于不同的命名空间中。只需启动一个数据库,图及其来源记录便并存于同一环境中。
当前限制
- ETL 读取的是已加载到 FHIR 服务器中的相同 Bundle 文件。目前尚不从 FHIR 服务器读取数据。
- 该演示在本地运行,包含 15 位示例患者。
关于数据
所示数据由 Synthea 生成的合成患者数据,并非真实人员的个人信息。严禁将其用于诊断或治疗决策。屏幕上已对真实机构名称进行了遮蔽处理。
技术栈
InterSystems IRIS for Health Community Edition 2026.1、带 InterSystems DB-API 驱动程序的 Python、iris-vector-graph 4.6、Astro、three.js。
欢迎任何在 IRIS 上从事 FHIR 数据、图或可视化相关工作的人士与我交流。欢迎留言和发消息。
InterSystems IRIS 是 InterSystems Corporation 的商标。FHIR 是 HL7 的注册商标。