概览
在 Mirobody 中,“数据映射”是三个各自独立的关注点:- 域映射 —— vendor 把它的端点映射到归一化的
DataDomain枚举,让调用方按类别请求数据。 - 单位归一化 —— 自由文本的单位被折叠为规范的 UCUM(已上线)。
- FHIR 表示 —— 一切最终汇聚到的规范资源形态是 FHIR R4(测量值用
Observation)。
fetch 返回该 vendor 自己的 JSON(FHIR 原生源则返回 FHIR JSON);规范存储是内嵌的 FHIR R4 端点。1 —— 域映射
每次fetch 都接收一个 DataDomain,每个 vendor 把它映射到它实际中转的端点:
Observation 的 category token(ehr SMART-on-FHIR 客户端):
2 —— 单位归一化(UCUM)
src/fhir/units/ 中的术语引擎把一段自由文本的”数值 + 单位”字符串变成一个规范的 UCUM 单位,外加用于消歧的 LOINC PROPERTY 族。纯本地计算 —— 无数据库、无 embedding API。
tests/fhir/units_test.cpp 覆盖。
3 —— FHIR R4 表示
规范存储是 FHIR R4(src/fhir/)。FHIR 原生的 vendor —— 通用 ehr 客户端,以及 Vitalera / HealthConnect / Redox / Particle Health / Metriport-Medical —— 已直接返回 FHIR 资源;设备本地存储 POST Observation。一个测量值是一个 Observation,带一个归一化(UCUM)的 valueQuantity:
/fhir 提供(参见数据流)。
把一个指标映射到带编码的
Observation.code(SNOMED CT / LOINC / RxNorm)—— 即术语解析以及文档 → 带编码 FHIR 的写回 —— 尚在进行中。UCUM 归一化与 RESTful FHIR 存储已上线;完整的术语映射尚在计划中(参见 src/fhir/README.md 的第 3–4 阶段)。在此之前,Observation.code 可能携带一个 text 而非解析出的编码。(verify)映射一个新数据源
当你添加一个vendor::Vendor(Provider 集成)时:
- 确定该源中转哪些
DataDomain;在VendorInfo.domains中列出它们。 - 在
fetch中,把每个域映射到该源的端点(REST 路径)或 FHIRcategory(FHIR 源);对不支持的域抛错。 - 返回该源的 JSON(或 FHIR JSON)。不要预先归一化 —— 归一化 / FHIR 转换是下游的、共享的关注点。
- 若你暴露单位,把它们经
parse_value_unit/normalize_unit处理,使其落地为 UCUM。
下一步
Provider 集成
实现
fetch 与域映射数据流
从 vendor JSON 到 FHIR 存储
文件处理
文档数值的 UCUM 归一化
Provider 测试
验证你的 fetch 输出