openEHR应该如何使用?

时间:2014-08-22 14:11:00

标签: hl7 medical openehr

我正在研究电子健康记录(EHR)。 OpenEHR似乎在这个领域得到了广泛的推广和欣赏,因为它被广泛采用。但是,我没有找到它是如何使用的。我的意思是,我可以看到原型的所有定义,以及这些定义是如何用ADL或XML编写的。但是,一旦我有一个原型,就是某个数据模型的定义,我该如何使用它?是否有另一种表示形式,也可能是ADL或XML?是否有患者的实际健康记录示例?我花了几个小时寻找John Doe的健康记录示例,其中包括性别,年龄,血压等信息,但我能找到的所有例子都是关于这些术语的定义。

如果有人能让我走上正轨,我将不胜感激。提前谢谢!

8 个答案:

答案 0 :(得分:7)

在拥有指定临床记录(结构,约束,术语)的原型集之后,我建议使用海洋模板设计器创建操作模板(OPT)。这是一个大型XML,在一个文件中包含所有引用的原型语义(易于处理)。

之后,你必须做出一些设计选择:

  1. 数据库技术
  2. 您可以选择基于关系,基于对象或基于文档的技术。我的偏好是关系+一些XML支持的混合。今天大多数关系型DBMS都支持xml作为本机数据类型。

    1. 数据模型
    2. 有两种极端模型a)将RM 1-1映射到DB模型,b)使用键/值方法。对于需要查询层次结构的需求,a)更好,但是您在关系DBMS中会有很多连接。对于基于普通数据的查询,b)更好,但如果你想从k / v集合建立层次结构,你需要有一些逻辑。

      为什么我提到了层次结构?您可能会注意到,openEHR信息模型具有树结构,因此默认情况下是层次结构,因为临床信息本质上是分层的。

      我在EHRServer中所做的是在关系型DBMS中创建结构化索引。这种方法位于a)和b)的中间。我还使用ORM工具(http://grails.org/doc/latest/guide/GORM.html)自动将对象实例映射到表中。

      数据模型的一个关键方面是保存对定义每个数据点的原型的引用,可以在DB本身中完成,也可以使用元数据将原型路径映射到表/列。

      1. 用户界面定义
      2. 您可以手动创建UI,也可以从原型+模板生成UI。无论哪种方式,您都需要一些元数据来将UI上的字段绑定到原型上的字段。为此,我使用字段id和archetypeId +路径。

        这有助于我将医生的输入数据绑定到openEHR信息模型中,并且通过正确的元数据,这可以通用方式完成。

        如果您不了解原型ID和路径,请阅读:http://openehr.org/releases/1.0.2/architecture/am/archetype_principles.pdf

        我还建议使用架构概述:http://openehr.org/releases/1.0.2/architecture/overview.pdf

        1. 业务逻辑
        2. 将数据绑定到数据模型是业务逻辑的一部分,也验证了数据。为了验证,我使用了原型和操作模板中出现的约束。如果你有原型Id +路径,你可以从原型获得约束,然后你可以根据输入数据评估该约束。

          1. 以前组件的集成
          2. 将所有内容粘贴在一起,您将拥有:UI< - >逻辑< - > DB

            希望有所帮助。

答案 1 :(得分:6)

openEHR规范描述了如何基于这种双层方法编写系统......世界各地的许多公司现在都使用该架构作为其系统的基础。 你的沮丧并不新鲜,因为这是一个艰难的步骤。但结果是健康记录可以由系统共享,并具有正式意义的事后发现。这些模型可以用任何语言编写,随时添加语言......没有语言优势​​。

我建议您订阅openehr.org技术邮件列表并提出相同的问题。

干杯萨姆赫德 OpenEHR基金会

答案 2 :(得分:5)

欢迎来到openEHR世界:)

您也可以找到有用的开源示例 - 我们已经使用openEHR从持久性到自动GUI实现了内窥镜报告应用程序。在这种情况下,.Net赢得了应用程序,但使用了MVC,所以我认为使用Web或Mobile前端并不太难。你目前在openEHR中找不到的是建模和用户界面的手段。与数据一起 - 因此我们使用了' hack'和利用注释功能来创建一些" GUI指令"这些都嵌入到临床模型中。

查看:http://gastros.codeplex.com

还写了几篇论文'关于openEHR的实施,如果你喜欢那种东西;)

Atalag K,Yang HY,Tempero E,Warren JR。使用openEHR评估软件可维护性 - 架构比较。国际医学信息学杂志

Atalag K,Yang HY,Tempero E,Warren J.使用openEHR模拟驱动的临床信息系统开发。 Stud Health Technol通知。 2011; 169:849-53。

Atalag K,Yang HY。从openEHR领域模型到高级用户界面:内窥镜检查的案例研究。惠灵顿; 2010.可从:http://www.hinz.org.nz/uploads/file/2010conference/P17_Atalag.pdf

获取 祝你好运!最后一个注意事项 - HL7正如其他一些人所指出的那样,是出于系统之外的问题。或者为了健康信息交换 - 一些人试图使用RIM来构建应用程序。 openEHR就是为此目的而存在的 - 所以它是构建EHR系统的规范。 HL7新出现的FHIR标准在定义临床数据模型方面有相似之处 - 我还建议观察这个空间:我们希望在不远的将来会出现某种趋同;)

答案 3 :(得分:4)

您可能还想查看

dev.ehrscape.com,它基于底层的openEHR后端和

查看GET组合调用

您将看到JSONified openEHR数据的示例。这是'规范'的简化版本。 openEHR数据,但有助于您了解一般结构

其他示例位于http://www.medvision360.com/medcloud/?lang=en,类似于基于openEHR的数据模型

以下是json格式的生命体征片段......

{  
  "ctx":{  
    "language":"en",
    "territory":"GB",
    "composer_name":"Sr. Kristen George"
  },
  "nursing_vital_signs_observations":{  
    "vital_signs":[  
      {  
        "respirations":[  
          {  
            "any_event":[  
              {  
                "rate":[  
                  {  
                    "|magnitude":16,
                    "|unit":"/min"
                  }
                ],
                "time":[  
                  "2014-07-17T15:18:07.339+01:00"
                ]
              }
            ]
          }
        ]
      },
      {  
        "blood_pressure":[  
          {  
            "any_event":[  
              {  
                "systolic":[  
                  {  
                    "|magnitude":123,
                    "|unit":"mm[Hg]"
                  }
                ],
                "diastolic":[  
                  {  
                    "|magnitude":102,
                    "|unit":"mm[Hg]"
                  }
                ],
                "time":[  
                  "2014-07-17T15:18:07.339+01:00"
                ]
              }
            ]
          }
        ]
      },
      {  
        "pulse":[  
          {  
            "any_event":[  
              {  
                "heart_rate":[  
                  {  
                    "|magnitude":93,
                    "|unit":"/min"
                  }
                ],
                "time":[  
                  "2014-07-17T15:18:07.339+01:00"
                ]
              }
            ]
          }
        ]
      },
      {  
        "indirect_oximetry":[  
          {  
            "any_event":[  
              {  
                "spo2":[  
                  {  
                    "|numerator":94,
                    "|denominator":100
                  }
                ],
                "time":[  
                  "2014-07-17T15:18:07.339+01:00"
                ]
              }
            ]
          }
        ]
      }
    ],
    "context":[  
      {  
        "setting":[  
          {  
            "|code":"233",
            "|value":"secondary nursing care",
            "|terminology":"openehr"
          }
        ],
        "start_time":[  
          "2014-05-22T15:18:07.339+01:00"
        ]
      }
    ]
  }
}

答案 4 :(得分:3)

您可以通过查看GitHub上的这项工作找到一些帮助https://github.com/ppazos?tab=repositories,其中很多都是基于openEHR概念。

在医疗保健领域的多层次知识建模领域,也有MLHIM。 MLHIM源于openEHR的经验,直接基于XML标准。 www.mlhim.org和https://github.com/mlhim

答案 5 :(得分:2)

记录被编译并以XML格式传输给其他供应商或组织。 HL7用于向具有特定OBR和OBX的实验室供应商发送实验室订单等消息。

我不确定您的研究是什么 - 如果您正在构建自己的应用/网站,那么我建议使用蓝色按钮。这是ONC的一项倡议,并且js将解析大多数CCDA(带有来自EHR的患者信息的XML文档)文档。查看GitHub上的库 - https://github.com/blue-button/bluebutton.js

最重要的是,研究背景(HITECH法案)并了解挑战(EHR互操作性)。转到HHS.gov并查看那里的信息。此外,您将需要知道医学术语和代码(ICD,CPT,SNOMED等)以及临床顾问的人,因为您可以拥有世界上的所有数据,但如果您不显示它以适当或有意义的方式,它基本上是无用的。

答案 6 :(得分:1)

如果您对组合REST + openEHR(或其他基于原型的EHR方法,如CIMI或ISO 13606)感兴趣,那么您可能会发现http://www.biomedcentral.com/1472-6947/13/57中描述的方法有趣,相应的Java开源代码可用在https://github.com/LiU-IMT/EEE

有关指定/标准化openEHR REST API的最新讨论,请访问https://openehr.atlassian.net/wiki/display/spec/openEHR+REST+APIs

为openEHR提供标准化的REST API将使最终用户应用程序能够连接到来自多个不同供应商/项目的openEHR后端,这样您就不需要在存储上花费太多时间。查询。

答案 7 :(得分:1)

简化回答您的问题:

  • 数据模型:使用任何支持openEHr规范的平台。
  • 数据约束:使用原型:可以用ADL或XML定义
  • openEHR记录实例:XML
  • 数据库:任何

以下是使用LOINC编码的临床数据的血糖openEHR记录:

  

      

    <namespace>EHR</namespace>
    <type>COMPOSITION</type>
</contribution>
<commit_audit>
    <system_id>10aec661-5458-4ff6-8e63-c2265537196d </system_id>
    <committer xsi:type="PARTY_IDENTIFIED">
        <name>guest</name>
    </committer>
    <time_committed>
        <value>2008-05-22T10:34:28</value>
    </time_committed>
    <change_type>
        <value>creation</value>
        <defining_code>
            <terminology_id>
                <value>openehr</value>
            </terminology_id>
            <code_string>249</code_string>
        </defining_code>
    </change_type>
</commit_audit>
<uid>
    <value>c7ff23f4-6ad2-4ff9-bedf-fb60be37666e::10aec661-5458-4ff6-8e63-c2265537196d::1
    </value>
</uid>
<data xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="COMPOSITION" xmlns="http://schemas.openehr.org/v1" archetype_node_id="openEHR-EHR-COMPOSITION.report.v1">
    <name>
        <value>Blood glucose report</value>
    </name>
    <archetype_details>
        <archetype_id>
            <value>openEHR-EHR-COMPOSITION.report.v1</value>
        </archetype_id>
        <template_id>
            <value>blood_glucose</value>
        </template_id>
        <rm_version>1.0.1</rm_version>
    </archetype_details>
    <language>
        <terminology_id>
            <value>ISO_639-1</value>
        </terminology_id>
        <code_string>en</code_string>
    </language>
    <territory>
        <terminology_id>
            <value>ISO_3166-1</value>
        </terminology_id>
        <code_string>AU</code_string>
    </territory>
    <category>
        <value>event</value>
        <defining_code>
            <terminology_id>
                <value>openehr</value>
            </terminology_id>
            <code_string>433</code_string>
        </defining_code>
    </category>
    <composer xsi:type="PARTY_IDENTIFIED">
        <name>Some Labs, at some place</name>
    </composer>
    <context>
        <start_time>
            <value>2012-02-26T11:44:17+1000</value>
        </start_time>
        <setting>
            <value>other care</value>
            <defining_code>
                <terminology_id>
                    <value>openehr</value>
                </terminology_id>
                <code_string>238</code_string>
            </defining_code>
        </setting>
        <other_context xsi:type="ITEM_TREE" archetype_node_id="at0001">
            <name>
                <value>other context</value>
            </name>
        </other_context>
    </context>
    <content xsi:type="SECTION" archetype_node_id="openEHR-EHR-SECTION.diagnostic_reports.v1">
    <name>
        <value>Blood Glucose</value>
    </name>
    <items xsi:type="OBSERVATION" archetype_node_id="openEHR-EHR-OBSERVATION.lab_test-blood_glucose.v1">
        <name>
            <value>Blood glucose</value>
        </name>
        <language>
            <terminology_id>
                <value>ISO_639-1</value>
            </terminology_id>
            <code_string>en</code_string>
        </language>
        <encoding>
            <terminology_id>
                <value>IANA_character-sets</value>
            </terminology_id>
            <code_string>UTF-8</code_string>
        </encoding>
        <archetype_details>
            <archetype_id>
                <value>openEHR-EHR-OBSERVATION.lab_test-blood_glucose.v1</value>
            </archetype_id>
            <template_id>
                <value>Blood glucose</value>
            </template_id>
            <rm_version>1.0.1</rm_version>
        </archetype_details>

        <subject xsi:type="PARTY_IDENTIFIED">
          <externalRef xsi:type="PARTY_PROXY">
            <id >
              <value>1.2.4.5.6.12.1</value>
              <root >
                <value>1.2.4.5.6.12.1</value>
              </root>
            </id>
            <namespace>DEMOGRAPHIC</namespace>
            <type>PERSON</type>
          </externalRef>
          <name>Patient Name</name>
          <identifiers xsi:type="DV_IDENTIFIER">
              <issuer>Some issuer id</issuer>
    <assigner>Some Assignee</assigner>
    <id>B5404149</id>
    <type>null</type>
          </identifiers>
        </subject>
        <protocol xsi:type="ITEM_TREE" archetype_node_id="at0033">
            <name>
                <value>Tree</value>
            </name>

            <items xsi:type="CLUSTER" archetype_node_id="at0039">
                <name>
                    <value>Specimen details</value>
                </name>
                <items xsi:type="ELEMENT" archetype_node_id="at0040">
                    <name>
                        <value>DateTime received</value>
                    </name>
                    <value xsi:type="DV_DATE_TIME">
                        <value>2006-11-22T18:57:01</value>
                    </value>
                </items>
                <items xsi:type="ELEMENT" archetype_node_id="at0041">
                    <name>
                        <value>DateTime processed</value>
                    </name>
                    <value xsi:type="DV_DATE_TIME">
                        <value>2006-11-22T18:57:01</value>
                    </value>
                </items>
            </items>
        </protocol>
        <data archetype_node_id="at0001">
            <name>
                <value>data</value>
            </name>
            <origin>
                <value>2006-11-22T18:57:01</value>
            </origin>
            <events xsi:type="POINT_EVENT" archetype_node_id="at0002">
                <name>
                    <value>Any event</value>
                </name>
                <time>
                    <value>2006-11-22T18:57:01</value>
                </time>
                <data xsi:type="ITEM_TREE" archetype_node_id="at0003">
                    <name>
                        <value>Tree</value>
                    </name>
                    <items xsi:type="ELEMENT" archetype_node_id="at0005">
                        <name xsi:type="DV_CODED_TEXT">
                            <value>Glucose 1h^Post Meal</value>
                            <defining_code>
                                <terminology_id>
                                    <value>LN</value>
                                </terminology_id>
                                <code_string>10449-7</code_string>
                            </defining_code>
                        </name>
                        <value xsi:type="DV_TEXT">  
                        <value>Blood Glucose</value>
                        </value>
                    </items>
                    <items xsi:type="ELEMENT" archetype_node_id="at0004">
                        <name>
                            <value>Blood glucose</value>
                        </name>
                        <value xsi:type="DV_QUANTITY">
                            <magnitude>100</magnitude>
                            <units>mmol/l</units>
                            <precision>0</precision>
                        </value>
                    </items>
                </data>
            </events>
        </data>
    </items>
    </content>
</data>

<lifecycle_state>
    <value>completed</value>
    <defining_code>
        <terminology_id>
            <value>openehr</value>
        </terminology_id>
        <code_string>532</code_string>
    </defining_code>
</lifecycle_state>