пятница, 13 мая 2016 г.


Эта статья - перевод оригинальной статьи, опубликованной 10 мая 2016 года в блоге Hay on FHIR, дополненная и согласованная с автором (David Hay).

Создаем профили средствами ClinFHIR


Создание пользовательских профилей или "профилирование ресурсов" ("profiling") - довольно "избитая" тема в англоязычном блоге Hay on Fhir. Суть "профилирования", о котором мы обещали подробно поговорить в предыдущей статье, заключается в возможности реализации спецификации FHIR с учетом локального "контекста" здравоохранения. В официальной документации стандарт FHIR назван "платформенной спецификацией" ("platform specification"), т.е. стандартом предусмотрена "платформа", на которой строится инфраструктура обмена данными. Сама инфраструктура определяет форматы передачи данных (wire formats), структуры и типы данных, информационные модели, справочники и интерфейсы, использование которых в конкретном контексте уточняется ("ограничивается" и "расширяется") пользователем.


Существует мощный и понятный простому пользователю ("простому" с некоторыми оговорками) инструмент для работы с профилями от Furore - Forge. Его удобство заключается в том, что (от пользователя) не требуется досконально знать структуру ресурса (нет необходимости "заучивать" спецификацию) или уметь редактировать XML-код ресурса. Вся работа будет выполнена с помощью удобного пользовательского интерфейса. Кроме того, единожды установленное приложение будет автоматически обновляться по мере выхода новых версий, а также для обеспечения соответствия новым версиям спецификации FHIR.


Тем не менее, работа c Forge от Furore предполагает как минимум общее понимание "профилирования", занимающего особое место в стандарте FHIR. CLinFHIR, в свою очередь, позволяет "пощупать" процесс создания профилей без необходимости "углубляться в дебри стандарта". Нам предлагается "быстро" создать профиль, например, для последующего его обсуждения и редактирования / изменения совместно с другими заинтересованными лицами. Результат, который получится при работе с ClinFHIR не будет продуманным до мелочей, "технически" сложным и совершенным. Скорее, на выходе получится "пробная" версия профиля, открытая для коллективного обсуждения и последующего дорабатывания.


Какой можно сделать вывод? ClinFHIR выполняет функции инструмента моделирования информации о здоровье (сlinical modelling): для решения конкретного кейса требуется дополненная модель какой-либо клинической концепции, однако, пока наилучшее решение (по модели) не очевидно, требуется инструмент, который позволит создавать промежуточные решения.


Небольшое "техническое" отступление о профилях

"Профилирование ресурсов" подразумевает их расширение за счет введения в структуру дополнительных полей или ограничение, например, допустимых значений полей. Речь может также идти и о "привязке" значений некоторого поля ресурса к пользовательскому справочнику (в том числе переопределение набора значений со стандартного на пользовательский). Все это становится возможными благодаря ресурсам особого типа - "StructureDefinition". Ресурс StructureDefinition может использоваться для исключения из структуры базового ресурса какого-либо поля (например, путем переопределения его кардинальности (cardinality) к значению [0..0]), для ограничения внутренней структуры ресурса и его содержимого (запрет вложенности в элементах), для наложения дополнительных ограничений на внутренние или внешние элементы ресурса, связанные с ним по ссылке (target of a resource reference).

Вернемся "на землю"

Новая версия ClinFHIR получила функцию создания простых профилей, чтобы все желающие могли "вдоволь" и без дополнительных сложностей "наиграться" с ними. Напомним, что профили (т.е. ресурсы типа StructureDefinition) хранятся на FHIR-сервере аналогично обычным ресурсам. (Правда, на сервере особого типа - Conformance Server, хотя физически Conformance Server и Data Server могут размещаться на одной физической машине.) Т.к. профиль - это самый обычный ресурс, его можно скачать и просмотреть (XML или JSON - представление).


Создаем профиль базового ресурса

Откроем ClinFHIR перейдя по этой ссылке. ClinFHIR находится в процессе переезда на новый сервер, поэтому лучше воспользоваться предоставленной ссылкой и, кроме того, кликнуть по пункту "Reset Config" в выпадающем меню ClinFHIR ("шестеренка" в верхней панели), чтобы очистить кэш браузера. После очистки кэша будут установлены следующие параметры:

  • Сервер данных (data server) для хранения пациентов и других базовых ресурсов: HAPI STU-3 server;
  • Сервер для хранения профилей и других ресурсов, обеспечивающих "соответствие" (conformance server): Grahames STU-3 server;
  • Терминологический сервер (terminology server), обслуживающий терминологические службы: Grahames STU-3 server;

Совершенно не обязательно работать именно с такой конфигурацией: можно выбрать другие серверы. Главное, чтобы они "опирались" на одну версию спецификации FHIR (например, STU-2), чтобы избежать "неприятных сюрпризов". (ClinFHIR даже может предупредить Вас, о том, что
"weird things may happen..."
)


Выберем базовый ресурс, который мы будем дополнять с целью разрешить конкретный клинический кейс. По правде говоря, дополняться будет стандартный профиль базового ресурса (а не сам ресурс), т.к. структура и типы данных элементов базовых ресурсов описываются набором стандартных профилей (кстати, все они доступны для скачивания как часть спецификации FHIR).


Выполним следующие действия: нажмем на ссылку ‘Find Profile’ в центральной части рабочей области и выберем нужный тип ресурса. После этого, выбранный профиль появится в центральной части рабочей области Resource Creator. Обратите внимание на значок глаза слева от названия профиля. Вот, что мы увидим, нажав на "глазок":


(скопировать и вставить скриншот)

В области слева показано древовидное представление ресурса, причем, отображается список элементов, заполненных значениями, а не все допустимые поля ресурса, предусмотренные спецификацией. Реальный ресурс содержит произвольное кол-во элементов - меньше, чем определено в спецификации (если не все поля необходимы в конкретном контексте реализации) или больше (вводятся дополнительные поля через механизм "расширений"). В центральной части рабочей области находится подробная информация (Details) о содержимом конкретного узла дерева, выбранного в области слева. Кнопка "New Resource" (сверху) создает пользовательский профиль по выбранному нами стандартному профилю базового ресурса. (Помните, профиль - это такой же ресурс, как и все остальные?)


(скопировать и вставить скриншот)

Имя создаваемого профиля задается в поле в центральной части интерфейса. Введенное значение будет использоваться для уникальной идентификации профиля на сервере, "обеспечивающего соответствие" (Conformance Server). В случае, если профиль с таким именем уже существует на сервере, пользователь получит предупреждение.

Рабочая область слева имеет дополнительный набор кнопок: "Remove from profile" удалит выбранный элемент ресурса, кнопки "Child Node" (добавить "потомка") и "Add Sibling Node" (добавить элемент одного уровня вложенности с текущим) используются для добавления новых элементов в структуру ресурса.


По нажатию на кнопку "Add child node" в правой части появятся форма для ввода данных, которые будут передаваться создаваемым пользовательским элементом:


(скопировать и вставить скриншот)

Поставим перед собой комическую задачу - описать структуру ресурса, в котором помимо определенных спецификацией полей будут также передаваться данные о фазе луны (moonPhase) на момент создания экземпляра ресурса. Тип данных нового элемента - простая строка (simple string), значение кардинальности элемента - [0..1]. По нажатию на кнопку "Add", увидим следующее:


(скопировать и вставить скриншот)

Обратите внимание, только что созданный элемент "moonPhase" является потомком (вложен) элемента "created". В нижней части рабочей области перечисляется список внесенных в ресурс изменений (Changes), которые заключаются в добавлении и удалении элементов. Внесенные изменения можно отменить. Нажмем на кнопку "Save" (она, кстати, появляется только тогда, когда пользователь задаст имя создаваемого им профиля без пробелов). В результате будет создан новый "пользовательский" профиль.


С технической точки зрения ClinFHIR генерирует "описание расширения" (extension definition) для каждого из созданных элементов (целый ряд ресурсов structureDefinition), а затем сохраняет профиль, содержащий ссылки на описания расширений для каждого из добавленных пользователем элементов (полей).


Чтобы вернуться на главную страницу Resource Creator закройте диалоговое окно, сообщающее об успешном создании профиля. Теперь наш профиль отображается в списке профилей:


(скопировать и вставить скриншот)

Последний шаг

Выберем тестового пациента и только что созданный нами профиль, чтобы создать экземпляр ресурса с добавленным элементом "moonPhase":

(скопировать и вставить скриншот)

Предостережения от Дэвида:

  • Задача, которую ставит перед собой ClinFHIR, заключается в демонстрации (в максимально упрощенном виде) процесса создания пользовательских профилей для базовых ресурсов. Все что делает CLinFHIR в данном случае - это генерирует расширения (extensions) для полей ресурса, которые не предусмотрены базовой спецификацией, а определяются пользователем. В обычной ситуации лучше было бы попытаться найти в репозитории профилей такой профиль, который решает конкретный клинический кейс, и, только если такого профиля нет, создавать собственный.
  • ClinFHIR не позволяет создавать по настоящему "сложные" профили со сложными элементами или привязывать допустимые значения пользовательского элемента к наборам значений (value set) (пока что). Причина проста - это и не планируется, так как есть более продвинутые инструменты, такие как Forge от Furore.
  • Указывая ссылку на ресурс, нельзя указать тип ресурса

    (When you specify a resource reference you can’t specify a resource type/s)
  • Эта функция ClinFHIR работает только с серверами, поддерживающими STU-3, однако, все также нужно помнить, что тестовые серверы могут работать нестабильно.

Что будет добавлено и доделано в ближайшее время:
  • Можно будет выбирать (из списка) уже существующие описания расширений (extension definition);
  • Привязка к наборам кодированных значений;
  • Поддержка комплексных (сложных) расширений;
  • Возможность указывать тип ресурса, если расширение ссылается на ресурс;
  • Поддержка всех типов данных;











Комментариев нет:

Отправить комментарий