Как должен использоваться openEHR?

Я исследую электронные медицинские записи (EHR). OpenEHR, по-видимому, довольно распространен и оценен в этой области, поскольку он широко принят. Однако я не могу найти, как он используется. Я имею в виду, я могу видеть все определения архетипов и то, как эти определения написаны в ADL или XML. Но, как только у меня есть архетип, который является именно этим, определением определенной модели данных, как я могу это использовать? Есть ли другой тип представления, возможно, также в ADL или XML? Есть ли примеры фактических медицинских записей для пациента? Я потратил часы на поиск примера записи здоровья Джона Доу, с такой информацией, как пол, возраст, кровяное давление и так далее, но все примеры, которые я могу найти, касаются определений этих терминов.

Если кто-нибудь может поставить меня на правильный путь, я был бы признателен. Заранее спасибо!

8 ответов


спецификация openEHR описывает, как написать систему на основе этого двухслойного подхода...ряд компаний по всему миру теперь используют архитектуру в качестве основы для своих систем. Ваше разочарование не ново, так как это требовательный шаг. Но в результате медицинские записи могут быть разделены системами, С пост-специальным открытием формального значения. Модели могут быть написаны на любом языке, добавляя языки, как вы идете....нет языкового первенства.

I советуем подписаться на openehr.org технический список рассылки и задать тот же вопрос.

Ура Сэм Слышал OpenEHR Foundation


после наличия набора архетипов, который определяет вашу клиническую запись (структуру, ограничения, терминологию), я бы рекомендовал создать ваши операционные Шаблоны (OPT) с помощью конструктора шаблонов Ocean. Это большой XML со всеми ссылками на семантику архетипов в одном файле (прост в обращении).

после этого вы должны сделать несколько вариантов дизайна:

  1. Технологии баз данных

вы можете выбрать реляционное, объектное или технология на основе документов. Мое предпочтение-это сочетание реляционной + некоторой поддержки XML. Большинство реляционных СУБД сегодня поддерживают xml как собственный тип данных.

  1. модель данных

существует две экстремальные модели a) сопоставьте RM 1-1 с моделью DB, b) используйте подход ключ/значение. Для требований, которые должны запрашивать иерархию a) лучше, но у вас будет много соединений в реляционных СУБД. Для запросов на основе простых данных b) лучше, но вам нужно будет иметь некоторую логику, если вы хотите построить иерархию из наборов k/V.

Почему я упомянул иерархии? Как вы могли заметить, информационная модель openEHR имеет древовидную структуру, поэтому по умолчанию является иерархической, и это потому, что клиническая информация иерархична по своей природе.

то, что я делал в моем EHRServer, создавало структурированные индексы в реляционной СУБД. Этот подход находится в середине а) и Б). Я также использую инструменты ORM (http://grails.org/doc/latest/guide/GORM.html) для автоматического сопоставления экземпляров объектов в таблицы.

одним из ключевых аспектов модели данных является сохранение ссылки на архетип, который определяет каждую точку данных, что может быть сделано в самой БД или с помощью метаданных для сопоставления путей архетипа к таблице/столбцу.

  1. определение пользовательского интерфейса

вы можете создать свой пользовательский интерфейс вручную, или создать его из шаблонов архетипы +. В любом случае вам понадобится некоторые метаданные для привязки полей пользовательского интерфейса к полям архетипов. Для этого я использую идентификатор поля и путь archetypeId +.

Это помогает мне связать входные данные от врачей в информационную модель openEHR, и с правильными метаданными это можно сделать общим способом.

Если вы не знаете об идентификаторах архетипов и путях, пожалуйста, прочитайте:http://openehr.org/releases/1.0.2/architecture/am/archetype_principles.pdf

Я бы также рекомендовал обзор архитектуры:http://openehr.org/releases/1.0.2/architecture/overview.pdf

  1. бизнес-логики

привязка данных к вашей модели данных является частью бизнес-логики, а также проверка этих данных. Для проверки я использую ограничения, которые появляются в архетипах и рабочих шаблонах. Если у вас есть путь к архетипу Id +, вы можете получить ограничение от архетипа, а затем вы можете оценить это ограничение по входным данным данные.

  1. интеграция предыдущих компонентов

склейте все вещи вместе, и у вас будет: UI logic DB

надеюсь, это поможет.


добро пожаловать в мир openEHR :)

вы также можете найти, глядя на примеры с открытым исходным кодом полезно-мы внедрили приложение отчетности эндоскопии с помощью openEHR от персистентности до автоматизированного GUI. Приложение .Net winforms в этом случае, но использует MVC, поэтому я бы предположил, что не будет слишком сложно использовать веб-или мобильные интерфейсы. То, что вы не найдете в openEHR на данный момент, - это средство моделирования " UI "вместе с данными, поэтому мы использовали "Хак" и использовали аннотации для создания некоторых "директив 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 Inform. 2011;169: 849-53.

Atalag K, Yang HY. От моделей домена openEHR до расширенных пользовательских интерфейсов: пример исследования в эндоскопии. Wellington; 2010. Доступно по адресу:http://www.hinz.org.nz/uploads/file/2010conference/P17_Atalag.pdf

удачи! Последнее примечание-HL7, как отмечали некоторые другие, для "вне систем" или для обмен информацией о здоровье-Некоторые пытались использовать RIM для создания приложений. openEHR существует для этой цели-так что это спецификации для создания систем EHR. Новый стандарт FHIR от HL7 имеет сходство с точки зрения определения клинических моделей данных - я также рекомендую следить за этим пространством: мы надеемся, что какая-то конвергенция произойдет в не столь отдаленном будущем ;)


вы также можете посмотреть на

dev.ehrscape.com который основан на базовом бэкэнде openEHR и

посмотрите на вызов GET composition

вы увидите пример данных jsonified openEHR. Это упрощенная версия "канонических" данных openEHR, но помогает дать вам представление о генральной структуре

другие примеры находятся в http://www.medvision360.com/medcloud/?lang=en, simialrly с 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"
        ]
      }
    ]
  }
}

вы можете найти некоторую помощь, посмотрев эту работу на GitHubhttps://github.com/ppazos?tab=repositories многое из этого основано на концепциях openEHR.

в мире многоуровневого моделирования знаний в здравоохранении также существует MLHIM. MLHIM вырос из опыта работы с openEHR и основан непосредственно на стандартах XML. www.mlhim.org и https://github.com/mlhim


записи компилируются и передаются в формате XML другим поставщикам или организациям. HL7 используется для отправки сообщений, таких как лабораторные заказы/от поставщиков лаборатории с конкретными OBR и OBX.

Я не уверен, что вы хотите сделать с вашим исследованием - если вы создаете свое собственное приложение/сайт, то я бы предложил синюю кнопку Плюс. Это инициатива ONC, и js будет анализировать большинство документов CCDA (XML-документ с информацией о пациенте из EHR). Посмотрите библиотеку на GitHub - https://github.com/blue-button/bluebutton.js

самое главное, исследовать фон (закон HITECH) и знать проблемы (совместимость с EHR). Перейти к HHS.gov и посмотрите на информацию там. Кроме того, вам понадобится кто-то, кто знает медицинскую терминологию и коды (ICDs, CPTs, SNOMED и т. д.) а также клинический консультант, потому что у вас могут быть все данные в мире, но если вы не отображаете их надлежащим или значимым образом, это по существу бесполезный.


Если вас интересует сочетание отдых+openEHR (или иного архетипа на основе ЭМК подходы, такие как Кими или ISO 13606), то вы могли бы найти подход, описанный в http://www.biomedcentral.com/1472-6947/13/57 интересные, соответствующие открытым исходным кодом на языке Java доступна на https://github.com/LiU-IMT/EEE

более последние обсуждения относительно указания / стандартизации API OPENEHR REST можно найти на https://openehr.atlassian.net/wiki/display/spec/openEHR + REST + API

наличие стандартизированного API REST для openEHR позволит приложениям конечных пользователей подключаться к бэкэндам openEHR от нескольких разных поставщиков/проектов, чтобы вам не нужно было тратить столько времени на хранение и запрос.


упрощенный ответ на ваш вопрос:

  • модель данных: использовать любой платформе, на которой adhers спецификации openEHr.
  • ограничения данных: используйте архетипы: можно определить в ADL или XML
  • экземпляр записи openEHR: XML
  • база данных: любая

вот запись 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>