简体   繁体   English

openEHR应该如何使用?

[英]How is openEHR supposed to be used?

I am researching about electronic health records (EHR). 我正在研究电子健康记录(EHR)。 OpenEHR seems to be quite extended and appreciated in this field, as it is widely adopted. OpenEHR似乎在这个领域得到了广泛的推广和欣赏,因为它被广泛采用。 However, I fail to find how it is used. 但是,我没有找到它是如何使用的。 I mean, I can see all the definitions for archetypes, and how those definitions are written in ADL or XML. 我的意思是,我可以看到原型的所有定义,以及这些定义是如何用ADL或XML编写的。 But, once I have an archetype which is just that, a definition of a certain data model, how do I use that? 但是,一旦我有一个原型,就是某个数据模型的定义,我该如何使用它? Is there another type of representation, maybe also in ADL or XML? 是否有另一种表示形式,也可能是ADL或XML? Are there any examples of actual health records for a patient? 是否有患者的实际健康记录示例? I have spent hours looking for a John Doe health record example, with info like gender, age, blood pressure and so on, but all the examples I can find are about definitions of those terms. 我花了几个小时寻找John Doe健康记录的例子,其中包括性别,年龄,血压等信息,但我能找到的所有例子都是关于这些术语的定义。

If anyone can put me on the right track, I would appreciate it. 如果有人能让我走上正轨,我将不胜感激。 Thanks in advance! 提前致谢!

after having the set of archetypes that specifies your clinical record (structure, constraints, terminology), I would recommend to create your Operational Templates (OPT) using the Ocean Template Designer. 在拥有指定您的临床记录(结构,约束,术语)的原型集之后,我建议使用海洋模板设计器创建您的操作模板(OPT)。 That is a big XML with all the referenced archetype semantics in one file (easy to handle). 这是一个大型XML,在一个文件中包含所有引用的原型语义(易于处理)。

After that, you have to make some design choices: 之后,您必须做出一些设计选择:

  1. Database technology 数据库技术

You can choose a relational, object based or document based technology. 您可以选择基于关系,基于对象或基于文档的技术。 My preference is a mix of relational + some XML support. 我的偏好是关系+一些XML支持的混合。 Most relational DBMS today support xml as a native datatype. 今天大多数关系型DBMS都支持xml作为本机数据类型。

  1. Data model 数据模型

There are two extreme models a) map the RM 1-1 to a DB model, b) use a key/value approach. 有两种极端模型a)将RM 1-1映射到DB模型,b)使用键/值方法。 For requirements that needs to query the hierarchy a) is better, but you'll have a lot of joins in relational DBMSs. 对于需要查询层次结构的需求,a)更好,但是在关系DBMS中你会有很多连接。 For queries based on plain data b) is better but you'll need to have some logic if you want to build the hierarchy back from the k/v sets. 对于基于普通数据的查询b)更好,但如果要从k / v集合构建层次结构,则需要有一些逻辑。

Why I mentioned the hierarchy? 为什么我提到了层次结构? As you might notice, the openEHR Information Model has a tree structure, so is hierarchic by default, and that's because clinical information is hierarchical in nature. 您可能会注意到,openEHR信息模型具有树结构,因此默认情况下是分层结构,这是因为临床信息本质上是分层的。

What I did in my EHRServer was creating structured indexes in a relational DBMS. 我在EHRServer中所做的是在关系DBMS中创建结构化索引。 This approach sits in the middle of a) and b). 这种方法位于a)和b)的中间。 I also use ORM tools ( http://grails.org/doc/latest/guide/GORM.html ) to automatically map object instances into tables. 我还使用ORM工具( http://grails.org/doc/latest/guide/GORM.html )自动将对象实例映射到表中。

One key aspect of the data model is to save the reference to the archetype that defines every data point, that can be done in the DB itself or using metadata to map archetype paths to a table/column. 数据模型的一个关键方面是保存对定义每个数据点的原型的引用,可以在DB本身中完成,也可以使用元数据将原型路径映射到表/列。

  1. UI definition UI定义

You can create your UI by hand, or generate it from archetypes + templates. 您可以手动创建UI,也可以从原型+模板生成UI。 Either way you'll need some metadata to bind the fields on the UI to fields on archetypes. 无论哪种方式,您都需要一些元数据来将UI上的字段绑定到原型上的字段。 For this I use the field id and the archetypeId + path. 为此,我使用字段id和archetypeId +路径。

This helps me to bind input data from doctors into the openEHR Information Model, and with the right metadata this can be done in a generic way. 这有助于我将医生的输入数据绑定到openEHR信息模型中,并且通过正确的元数据,这可以通用方式完成。

If you don't know about archetype Ids and paths, please read: http://openehr.org/releases/1.0.2/architecture/am/archetype_principles.pdf 如果您不了解原型ID和路径,请阅读: http//openehr.org/releases/1.0.2/architecture/am/archetype_principles.pdf

I would recommend also the Architecture Overview: http://openehr.org/releases/1.0.2/architecture/overview.pdf 我还建议建筑概述: http//openehr.org/releases/1.0.2/architecture/overview.pdf

  1. Business logic 商业逻辑

Binding data to your data model is part of the business logic, also validating that data. 将数据绑定到数据模型是业务逻辑的一部分,也验证了数据。 For validation I use the constraints that appear in the archetypes and operational templates. 为了验证,我使用了原型和操作模板中出现的约束。 IF you have the archetype Id + path, you can get the constraint from the archetype and then you can evaluate that constraint against input data. 如果你有原型Id +路径,你可以从原型获得约束,然后你可以根据输入数据评估该约束。

  1. Integration of previous components 集成以前的组件

Glue all the stuff together and you'll have: UI <-> logic <-> DB 将所有内容粘合在一起,您将拥有:UI < - > logic < - > DB

Hope that helps. 希望有所帮助。

The openEHR spec describes how to write a system based on this dual layer approach...a number of companies around the world now use the architecture as the foundation for their systems. openEHR规范描述了如何基于这种双层方法编写系统......世界上许多公司现在都使用该架构作为其系统的基础。 Your frustration is not new, as it is a demanding step to take. 你的沮丧并不新鲜,因为这是一个艰难的步骤。 But the result is that health records can be shared by the systems, with post hoc discovery of formal meaning. 但结果是健康记录可以由系统共享,并具有正式意义的事后发现。 The models can be written in any language, adding languages as you go....there is no language primacy. 模型可以用任何语言编写,随时添加语言......没有语言优先权。

I suggest that you subscribe to openehr.org technical mailing list and ask the same question. 我建议你订阅openehr.org技术邮件列表并提出同样的问题。

Cheers Sam Heard OpenEHR Foundation 干杯Sam Heard OpenEHR基金会

welcome to the world of openEHR :) 欢迎来到openEHR的世界:)

You may also find looking at open source examples useful - we have implemented an endoscopy reporting application using openEHR from persistence to automated GUI. 您还可以找到有用的开源示例 - 我们已经使用openEHR从持久性到自动GUI实现了内窥镜报告应用程序。 A .Net winforms application in this case but uses MVC so I'd assume it wouldn't be too difficult to use Web or Mobile front-ends. 在这种情况下,.Net winforms应用程序,但使用MVC所以我认为使用Web或Mobile前端不会太困难。 What you won't find in openEHR at the moment is the means to model 'UI' together with data - therefore we used a 'hack' and exploited annotations feature to create some "GUI Directives" that are embedded into the clinical models. 您目前在openEHR中找不到的是将“UI”与数据一起建模的方法 - 因此我们使用“hack”和利用注释功能来创建嵌入到临床模型中的一些“GUI指令”。

Have a look at: http://gastros.codeplex.com 看看: http//gastros.codeplex.com

Also have written a couple 'papers' on implementation of openEHR if you like that sort of thing ;) 如果你喜欢这样的话,还写了一些关于openEHR实现的'论文';)

Atalag K, Yang HY, Tempero E, Warren JR. Atalag K,Yang HY,Tempero E,Warren JR。 Evaluation of software maintainability with openEHR–a comparison of architectures. 使用openEHR评估软件可维护性 - 架构比较。 International Journal of Medical Informatics 国际医学信息学杂志

Atalag K, Yang HY, Tempero E, Warren J. Model Driven Development of Clinical Information Sytems using openEHR. Atalag K,Yang HY,Tempero E,Warren J.使用openEHR模拟驱动的临床信息系统开发。 Stud Health Technol Inform. Stud Health Technol通知。 2011;169:849–53. 2011; 169:849-53。

Atalag K, Yang HY. Atalag K,Yang HY。 From openEHR Domain Models to Advanced User Interfaces: a Case Study in Endoscopy. 从openEHR领域模型到高级用户界面:内窥镜检查的案例研究。 Wellington; 惠灵顿; 2010. Available from: http://www.hinz.org.nz/uploads/file/2010conference/P17_Atalag.pdf 2010.来自: http//www.hinz.org.nz/uploads/file/2010conference/P17_Atalag.pdf

Good luck! 祝好运! One last note - HL7 as some others have noted is for 'outside of systems' or for health information exchange - some have attempted to use RIM to build applications. 最后一个注意事项 - 正如其他一些人所指出的那样,HL7用于“系统之外”或用于健康信息交换 - 有些人试图使用RIM来构建应用程序。 openEHR exists for this purpose - so it is THE specifications to build EHR systems. openEHR就是为此目的而存在的 - 所以它是构建EHR系统的规范。 The emerging FHIR standard from HL7 has similarities in terms of defining clinical data models - I also recommend to watch that space: We are hoping some sort of convergence will occur in the not so distant future hopefully ;) 来自HL7的新兴FHIR标准在定义临床数据模型方面具有相似性 - 我还建议观察这个空间:我们希望在不远的将来会出现某种趋同;)

You might also want to have a look at 您可能还想看看

dev.ehrscape.com which is based on an underlying openEHR backend and dev.ehrscape.com,它基于一个基础的openEHR后端和

look at the GET composition call 看看GET组合调用

You will see an example of JSONified openEHR data. 您将看到JSONified openEHR数据的示例。 This is a simplified version of 'canonical' openEHR data, but helps give you an idea of the genral structure 这是“规范”openEHR数据的简化版本,但有助于您了解一般结构

Other examples are at http://www.medvision360.com/medcloud/?lang=en , simialrly with an openEHR based data model 其他示例在http://www.medvision360.com/medcloud/?lang=en ,与基于openEHR的数据模型同步

Here is a snippet of vital signs in json format... 以下是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"
        ]
      }
    ]
  }
}

You may find some help by looking at this work on GitHub https://github.com/ppazos?tab=repositories much of it is based around openEHR concepts. 您可以通过在GitHub上查看此工作找到一些帮助https://github.com/ppazos?tab=repositories其中大部分都是基于openEHR概念。

In the world of multi-level knowledge modeling in healthcare there is also MLHIM. 在医疗保健领域的多层次知识建模领域,也有MLHIM。 MLHIM grew out of experience with openEHR and is based directly on XML standards. MLHIM源于openEHR的经验,直接基于XML标准。 www.mlhim.org and https://github.com/mlhim www.mlhim.org和https://github.com/mlhim

Records are compiled and transmitted in XML to other vendors or organizations. 记录以XML格式编译和传输给其他供应商或组织。 HL7 is used for sending messages such as lab orders to/from lab vendors with specific OBR and OBX. HL7用于向具有特定OBR和OBX的实验室供应商发送实验室订单等消息。

I'm not sure what you are looking to do with your research - if you're building your own app/site, then I would suggest blue button plus. 我不确定你的研究是什么 - 如果你正在建立自己的应用程序/网站,那么我会建议蓝色按钮加。 It is an initiative by the ONC and the js will parse most CCDA (XML document with patient info from EHR) documents. 这是ONC的一项倡议,并且js将解析大多数CCDA(带有来自EHR的患者信息的XML文档)文档。 Look over the library on GitHub - https://github.com/blue-button/bluebutton.js 查看GitHub上的库 - https://github.com/blue-button/bluebutton.js

Most importantly, research the background (HITECH Act) and know the challenges (EHR interoperability). 最重要的是,研究背景(HITECH法案)并了解挑战(EHR互操作性)。 Go to HHS.gov and look over the information there. 转到HHS.gov并查看那里的信息。 Also, you're going to need someone who knows medical terminology and codes (ICDs, CPTs, SNOMED, etc.) as well as a clinical advisor because you could have all the data in the world, but if you don't display it in a proper or meaningful way, it's essentially useless. 此外,您将需要知道医学术语和代码(ICD,CPT,SNOMED等)以及临床顾问的人,因为您可以拥有世界上的所有数据,但如果您不显示它以适当或有意义的方式,它基本上是无用的。

If you are interested in the combination REST+openEHR (or other archetype-based EHR approaches like CIMI or ISO 13606) then you might find the approach described in http://www.biomedcentral.com/1472-6947/13/57 interesting, corresponding open source code in Java is available at https://github.com/LiU-IMT/EEE 如果您对REST + openEHR(或其他基于原型的EHR方法,如CIMI或ISO 13606)感兴趣,那么您可能会发现http://www.biomedcentral.com/1472-6947/13/57中描述的方法很有趣,相应的Java开源代码可以在https://github.com/LiU-IMT/EEE上找到

More recent discussions regarding specifying/standardizing an openEHR REST API can be found at https://openehr.atlassian.net/wiki/display/spec/openEHR+REST+APIs 有关指定/标准化openEHR REST API的最新讨论,请访问https://openehr.atlassian.net/wiki/display/spec/openEHR+REST+APIs

Having a standardized REST API for openEHR will enable end user applications to connect to openEHR backends from several different vendors/projects so that you do not need to spend so much time on storage & query. 为openEHR提供标准化REST API将使最终用户应用程序能够连接到来自多个不同供应商/项目的openEHR后端,这样您就不需要在存储和查询上花费太多时间。

Simplified answer to your question: 简化了您的问题的答案:

  • Data Model: use any platform which adhers openEHr Specs. 数据模型:使用任何支持openEHr规范的平台。
  • Data Constraints: Use archetypes : can be defined in ADL or XML 数据约束:使用原型:可以用ADL或XML定义
  • openEHR record instance: XML openEHR记录实例:XML
  • Database: any 数据库:任何

Here is a openEHR record for blood glucose with clinical data encoded using LOINC: 这是一个openEHR血糖记录,临床数据使用LOINC编码:

    <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>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM