QuillHub
QuillHub

Перевод амбулаторного сэмпла на FHIR — итоги и дальнейшие шаги

33:273 спикера
33:22
длительность
13
главы
3
спикеры
7
Задачи
FHIRмаппингRucoraBundle/Compositionпубликациявалидация

Спикеры

3
Спикер A52%50 реплик
Спикер B7%21 реплика
Спикер C41%41 реплика

Основные идеи

6
  • Автоматизированный маппинг примера на FHIR полезен — выявил ошибки и подтвердил применимость Rucora/RailCore.
  • Найдено 12 ошибок валидатором и три ключевые проблемы (coverage, дискриминатор слайсов для identifier, coding systems complete-флаги).
  • Нужно почистить и исправить найденные проблемы в самом Rucora, без требования дополнительного профилирования.
  • Необходимо опубликовать результаты и примеры (на сайте и как статью) для валидации сообществом и продвижения позиции.
  • Для передачи документов Bundle типа 'document' следует однозначно определить расположение идентификаторов: единственный обязательный identifier бандла и дискуссия о дублировании идентификатора версии в Composition.

Важные моменты

6
  • Агент отмапировал ~1300 значений атрибутов для амбулаторного сэмпла.
  • Валидатор выявил 12 ошибок, относящихся к трём категориям.
  • Проблемы: core coverage, дискриминатор слайсов для identifier, и некорректное использование complete-флагов в системах кодирования.
  • Предложено снять флаги complete для систем кодирования или доработать работу с публикатором.
  • Решено публиковать примеры ресурсов на сайте и подготовить статью для журнала по стандартизации здравоохранения.

Решения

4
  • Продолжить работу: исправить найденные ошибки в Rucora и не вводить обязательного дополнительного профилирования Rucora на текущем этапе.
  • Опубликовать примеры FHIR (и возможно исходный XML) на сайте сообщества и подготовить статью для журнала по стандартизации здравоохранения.
  • Принять интерпретацию спецификации, представленную 'кодексом': identifier конкретного документа должен учитываться (принять текущую позицию как рабочую основу).
  • Для Bundle типа 'document' заявлено требование иметь заполненный уникальный identifier бандла; в Composition предпочтительно дублировать идентификатор версии/экземпляра для удобства обработки.

Задачи

7
  • Исправить 12 ошибок и три найденные проблемы (coverage, дискриминатор identifier, complete-флаги) в реализации Rucora.
  • Поработать с агентом и публикатором, чтобы снять или скорректировать флаги complete в системах кодирования.
  • Опубликовать примеры ресурсов (переложение амбулаторного сэмпла) на сайте сообщества для получения обратной связи.
  • Подготовить и отправить статью/публикацию по результатам перевода и маппинга (для журнала по стандартизации здравоохранения).
  • Разместить при возможности исходный XML сэмпл (источник для маппинга) вместе с примерами FHIR.

Термины

6
FHIR — стандарт для обмена медицинской информацией (FHIR — Fast Healthcare Interoperability Resources).
Bundle (бандл) — контейнер FHIR, объединяющий набор ресурсов; тип 'document' — особый режим упаковки документа.
Composition — ресурс FHIR, описывающий логическую структуру документа и ссылки на включённые ресурсы; имеет собственный identifier и версионность.
identifier — поле в ресурсах FHIR для уникальной идентификации (может быть серия/серийный номер или глобальный уникальный id).
coverage/core coverage — часть проверки/валидации соответствия профилям/стандартам (покрытие требований).

Основное содержание

13 глав · 33:22
0:28

1. Приветствие и проверка связи

Спикер A0:28

Приветствую.

Спикер B0:32

Слышно? Раз,

Спикер C0:44

Два, три. Слышно ли?

Спикер A0:46

Слышно, отлично.

Спикер C0:48

Прекрасно.

Спикер A0:51

Так, ну что, кажется, задача была открытая в сторону на этот раз. Да, там

Спикер C1:00

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

Спикер B1:08

Хорошо.

1:10

2. Результаты автоматического маппинга и выявленные ошибки

Спикер A1:10

Так, что произошло? Я отправил агента делать эту работу, а именно переводить амбулаторный сэмпл на FHIR. Отправил я его делать точно то же, что мы делали с S&MP, то есть не строить профили, а переводить пример.

Значит, он сказал, что он все перевел, что он отмапировал 1300 значений атрибутов. Из них что-то перенесено один в один, что-то преобразовано, что-то, как мы и раньше делали, тоже электронным атрибутом CD, которое не нужно.

Первое, это работа оказалась очень полезной для самого Rucora. Валидатор выявил 12 ошибок, относящихся к трем. Сейчас я найду это место.

Спикер C2:39

Мы экспериментально подтвердили, что практика — критерия истины.

Спикер B2:44

Абсолютно.

Спикер A2:46

Причем, мы экспериментально подтвердили, что RailCore в высокой степени применим. Найдены три проблемы. Сейчас мы их почистим. Я не начинал еще. Core coverage, что-то там с дискриминатором.

Спикер B3:03

Вот,

Спикер A3:06

И есть большая беда. Не надо будет разбираться. То, что мы в системах кодирования говорили, что они комплит, и сводили туда единственное значение нашего теста, что, конечно, неправда. Мы так делали, потому что в противном случае публикатор ругался, и я тогда не дожил.

Спикер C3:32

Ну, наверное, надо будет попробовать с агентом, с публикатором поработать, и тогда снять флаги complete, да, вот по системам кодирования.

Спикер A3:48

Да.

Спикер C3:49

А с coverage, дискриминатор слайсов для identifier.

Спикер A3:56

Можем пойти посмотреть, что там происходит.

4:00

3. Анализ проблем: coverage, дискриминаторы и системы кодирования

Спикер C4:00

Важная вещь.

Спикер A4:22

Да, вот в решениях сразу видно, что мы вводили два среза на идентификатор, общий вариант документа, и у нас полисе.

Спикер B4:35

Как это описано, ну.

Спикер A4:49

Как тут никак не описано. У нас, кажется, и в других местах так не описано, что они open. Да, это по умолчанию, наверное.

Спикер C5:24

Да.

Спикер A5:28

Ну, если на вскипку не видно, то я с агентом поразбираюсь, что именно здесь неправильно. Поправить.

Спикер B5:39

Хорошо.

Спикер C5:40

Наверное, проще, если что.

Спикер A5:44

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

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

6:23

4. Формат публикации: примеры против профилей и размещение на сайте

Спикер A6:23

Главный вопрос у меня такой: в каком виде мы хотим эту работу сделать? Вот что я имею в виду. Если мы просто переводим пример на первом, то непонятно как, но статью написать. Если мы делаем профили, то тогда мы можем вот сюда, в ну либо в решение на fire, я не знаю, либо просто в сам рукор. Да, пока мы используем это не только кругов, да, вот для проекта гостом, вот сюда добавить еще пункт меню, вот сверху назвать его "кодирование sent" и тут разместить наследованную спецификацию.

Спикер B7:15

Как вы считаете?

Спикер C7:16

Ну, мне кажется, нужно точно публиковать, потому что, ну, как минимум, в процессе подготовки публикации мы чуть лучше сами выберем то, что у нас получилось.

Если это будет, например, некоторую практическую ценность упражнения повышать.

А так, на сайте вывесить тоже можно, пускай сообщество ознакомится, может, кто-то заинтересуется, придет, какую-то обратную связь оставит.

Но публикацию надо делать, в том числе, чтобы продолжать гнуть свою линию.

Спикер A8:04

Хорошо, при этом я тогда подготовлю для.

Спикер C8:09

Коллег из Минздрава из Ньюиза, да-да.

Спикер A8:13

Да, да, ну и вообще, действительно, мы заявились. Вот мы зачем перевели как пример 1 в линейке. Вот, а дальше работа идет. Дальше, тем более что редакция журнала стандартизация здравоохранения сказывала готовность продолжать публикации. Кажется, надо продолжить.

8:35

5. План публикации СМД и стратегия покрытия сэндов

Спикер C8:35

Прошу. Сейчас, одну секунду, у меня тут еще звонок по обычной мобильной связи.

Евгений, я вернулся, как слышно.

Спикер A9:13

Да, хорошо слышно, отлично. Итак, мы с вами решили, что целесообразно подготовить публикацию нового СМД для стандартизации правоохранения. Это первая часть. И вот слушаю дальше. Вас прерывали.

Спикер C9:32

Ну а второй частью, еще до статьи, давайте разделим публикацию и статьи. Еще до статьи выложить на всеобщее обозрение сообщества на нашем сайте, который CICDish, что у нас часть тоже появилась. Вот, может быть, кто-то придет и скажет, что какие-то важные бизнес-кейсы остались не покрытыми, что-то не предусмотрено и так далее.

Спикер A10:03

Хорошо, давайте представим себе, в каком виде это может быть сделано. Я представляю себе профили. Новых у нас не появляется. У нас появляются примеры. Правильно? Примеры ресурсов, представляющие собой переложение примера из Send.

Спикер B10:24

Так?

Спикер A10:24

Это все, или еще что-то там появится?

Спикер C10:29

Наверное, примеры ресурсов, да. Это будет на первый этап точно достаточно. То есть, если еще где-то получится XML исходного сэмпла разместить, будет вообще классно. Который, собственно, стал исходником для маппинга.

И в целом можно коммуницировать, что ну вот сейчас нам, например, на ИТМе покажут свежую статистику по количеству зарегистрированных СЭМДов, да?

Спикер A11:04

Да.

Спикер C11:04

Опираясь на это, то есть просто идти, вот там, не знаю, сейчас там топ-1 мы сделали за счет лабораторных исследований. Вот сейчас добавим амбулаторные приемы, осмотры, консультации, там будет топ-2. Вот. Посмотреть, что еще сверху? Чем сейчас реально наполняется ренд, и если это получится автоматизировать до какого-то уровня, то просто покрыть вот эти верхние, наиболее частые сэнды.

А дальше смотрите, 80% текущего объема сендов уже покрыто и может рассматриваться как альтернатива на файл. Если мы за счет 3-5 документов это сможем сделать, это будет прекрасно. Достаточно сильная позиция для того, чтобы ее брали, смотрели, прорабатывали.

Спикер A12:14

Хорошо, согласен. Надо только это головокружение от успехов получить, потому что я сделал первый шаг. Это не законченная работа, надо ее завершить.

Спикер C12:29

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

Спикер A12:53

Да, да, это сильная позиция.

Спикер C12:54

Особенно учитывая, что ни финансирования, ни каких-то сверхресурсов мы не привлекали. В инициативном порядке, на собственном энтузиазме, сделали.

Спикер A13:12

Да, что показывает, ну, иллюстрирует наш аргумент, что стандарт существенно снижает затраты отрасли. Да, что если вот такой маппинг делается в инициативном порядке без ресурсов, то, значит, какие-то работы по интеграции, вот они того же порядка тоже делают дешевле, чем делать с нуля. Так, принято. Все, ну тогда спасибо, у меня больше нету.

13:42

6. Кодовые ассистенты и влияние доступной кодовой базы

Спикер C13:42

Здесь все сразу, пока в контексте. Более того, реализация интеграции с помощью различных кодовых ассистентов будет заметно проще, потому что примеров кода на FIRE они в процессе. Ну вот эти модели, на которых эти кодовые ассистенты сделаны, видели намного больше, чем пример от кода на CDA.

Спикер A14:11

Это гипотеза, но я бы ее смягчил. Кодовые ассистенты достаточно много видели кода на FHIR для того, чтобы практически с первого раза давать хорошие результаты.

Спикер C14:29

Ну, здесь, наверное, можно привести такой пример, что условно на Python кодовый ассистент вам намного больше ассистирует, чем если, например, вы соберетесь вести разработку с помощью кодового ассистента на 1С.

Просто в силу того, что доступная кодовая база Python для обучения всех моделей в основе ассистентов была намного больше, чем доступная кодовая база 1С. Не принижая важность в российской экосистеме, но ровно в такой же аналогии.

Есть знания, которые подпитаны большими экосистемами, есть локальные экосистемы. Естественно, чем больше примеров, тем лучше работают.

Спикер A15:28

Это безусловно, это подтверждается тем, что когда я прошу своего кодекса что-то сделать, то он в терминах четверки делает просто с первого раза и все чистенько. В терминах пятерки он иногда ошибается, промахивается, потом говорит: "Ой, да действительно, это в пятерке, вот иначе надо". У него очевидно меньше базы.

Пять пока еще подтверждает, что база очень важна. Так что, тогда спасибо. Я предлагаю эту тему отложить до следующего раза. Я подготовлюсь с кем-то более завершенными результатами.

16:24

7. Где размещать идентификаторы: Bundle (document) и Composition

Спикер C16:24

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

Бандл типа document накладывает обязательное требование, чтобы единственный возможный identifier бандли был заполнен уникальным значением system.value. Да, это требование от самого стандарта. При этом в бандле типа document у нас может быть resource composition с неограниченным количеством идентификаторов.

И текущая позиция кодекса в том, что давайте располагать идентификатор конкретного экземпляра документа на уровне бандла, а в Composition располагать, собственно, идентификатор набора версий документа. Вот здесь, наверное, мое возражение было бы: либо давайте продублируем идентификатор конкретной версии документа еще и в Composition, потому что, условно, если вдруг возникнет сценарий, что этот Composition будет обрабатываться как-то отдельно, чтобы из него могли извлечь конкретную версию.

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

Спикер A18:57

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

Спикер C19:17

Иметь, да, это просто будет удобно, вот.

Спикер A19:21

Даже тогда, я хотел бы обсудить на самом деле единственный главный аргумент кодекса, который он тут приводит. Он приводит цитату из документации фаера. Давайте мы не посмотрим.

Спикер B19:46

в

Спикер A19:48

Composition Identifier прямо определен как документ, сохраняющийся при изменении версии и сопоставлен с CDA в SetID.

А я, кстати, не очень понимаю. Вы смотрели эту спецификацию? Давайте сейчас посмотрим.

20:17

8. Проверка спецификации: Composition Identifier

Спикер A20:17

Потому что звучит странно. Вот это высказывание звучит странно, потому что это множественный идентификатор. А значит, к нему не могут быть единым образом применены вот такие требования.

Спикер C20:31

Давайте посмотрим.

Спикер A20:38

Сейчас потратим еще немножко времени.

Спикер B21:08

Нет, секундочку. Возможно, какие-нибудь дополнительные требования? Дополнительный?

Спикер A21:33

apm да требуется дополнительные прекрасно да композицию.

Спикер B22:00

Тут

Спикер A22:00

Написано, что это версия индипендент.

Спикер C22:06

Нажмите на identify, не на тип данных, а который в дереве. Да, здесь будет страничка с расширенным комментарием.

Спикер B22:16

Вот.

Спикер A22:23

Удивительно. Да, действительно, это написано и сопоставлено с этой идеей. Но удивительно, что у него кардинально стоит на звездочках.

22:45

9. Бизнес-аргументы и позиция Кодекса

Спикер B22:45

и

Спикер A22:45

Это бизнес-дискуссию дольше, но, видимо,

Спикер C22:54

Не одним вы столкнулись. Кто-то еще? Ну,

Спикер A23:01

Это звучит как не совсем наша тема: ресурсы, бизнес.

Спикер C23:06

Но вот здесь мне больше нравится предложение, что этот идентификатор остается константным, в то время как композиция меняется во времени.

Спикер A23:20

Верно, и тогда это серия только.

Спикер C23:23

Да. Вот это, наверное, звучит как то, что кодекс разобрался в свеке стандарта лучше меня. Ну что ж, и такое тоже возможно.

Спикер A23:41

Он был не один. У него там за спиной стояли много людей, которые что-то писали, а он это прочитал. Вот. Возможно, они как-то интерпретировали.

Спикер C23:54

Так, а в дискуссии что?

Спикер A23:56

В дискуссии о бизнес-идентификаторах. Но про то, что это не GUI серверы, это как бы другая сторона вопроса. Так.

24:41

10. Согласование решения: хранение идентификатора в Bundle

Спикер B24:41

ну

Спикер C24:56

Нам остается согласиться с кодексом.

Спикер A25:00

Получается, что да, это прям явное ограничение.

Спикер C25:06

Если не появятся дополнительных альтернативных точек зрения, то, наверное, на текущий момент можно решение принять. А дальше будут у коллег аргументы. Вот, наверное, можно вспомнить о том, что бандлы типа «документ» должны храниться именно бандлам, а не набором отдельных ресурсов. Где-то такое пожелание когда-то проскакивало, и не пожелание, а требование.

Поэтому возможно, что конкретный экземпляр версии, ID-шник экземпляра мы не утеряем, потому что сам бандл будет тоже храниться, будет оберткой.

Спикер A25:59

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

Но внутри кондишена находится только перечень ссылок на конкретные элементы документа, на ресурсы, которые входят в этот документ. Верно?

Спикер C26:32

Ну и какое-то текстовое наполнение, которое соответствует идее второго уровня.

Спикер A26:40

Ну окей. Текстовое наполнение.

В принципе, текстовое наполнение, конечно, уже тоже информация. Но если вот сейчас отложить в сторону вопроса текстового наполнения и поговорить именно о самих ресурсах, то когда экземпляры ресурсов меняются, выпускается версия. Экземпляры ресурсов меняются, содержание композиции тоже меняется, верно же? Там будут ссылки на другие экземпляры. То есть у этого composition тоже версия будет другая, а идентификатор будет, то есть содержание у него будет другое, а идентификатор.

27:25

11. Идентификация версий и обработка бандлов в composition

Спикер C27:25

Его будет тот же. А давайте откроем сейчас сам composition и посмотрим. Там, по-моему, должен быть явно атрибут для версии. Может быть, сейчас там и картинка сложится здесь.

Спикер A27:41

Да, контент, конечно, есть вершин.

Спикер C27:48

Ну вот, картинка замкнулась. Версия выделена отдельным атрибутом.

Спикер A27:55

Дело вот в чем. Кажется, не всегда соответствует бизнес ведению, потому что версии часто номеруются просто номерами. Или вот сюда и надо вписать вот этот идентификатор версии?

Спикер B28:23

Нет.

Спикер A28:23

Смотрите, есть два способа идентификации конкретного документа. Ты делаешь идентификатор серии, и внутри серии ты пишешь номер версии. И этот номер не уникален глобально: один, два, три, четыре, пять. Либо ты делаешь уникальный идентификатор версии документа. Глобальный, уникальный. Здесь поддержана таким образом получается только идентификация.

Спикер B28:54

Серийный номер версии или номер версии.

Спикер C29:05

Именно так выглядит. Именно так, так то.

Спикер A29:10

Есть, если я идентифицирую то и то, и то, то у меня здесь некуда. Этой ситуации не поддерживают.

Спикер C29:18

Почему? Мы можем положить сам бандл. При этом нужно явно требовать, чтобы он был типа документ. Тогда его будут обрабатывать по соответствующему правилу, как единый взаимосвязанный пакет, не разрывая на отдельные экземпляры ресурсов.

Спикер A29:45

Для бандлы типа документ может быть такое представление. Оно не обязательно такой, и оно, если у него что, если у него тип, если тип соответствует, то проверяй такой.

Спикер C30:02

Да, это прямо записать как требование, что вот для send в бандле типа документ экземпляр id экземплярах должно быть записано в.

Спикер A30:17

Идентификатор bundle. Смотрите, вот это сопоставление. Так вот, сейчас это и сделано. Формально описать средств невозможно, потому что кардинальности яичка и применено такое условное ограничение, что если тип не с документ, то система должна завершаться 51. Ну, или может быть подробнее.

Спикер B30:55

Написать constraint.

Спикер A31:12

Наверное, надо дожать описание. Здесь нет фишевого текста, и поэтому плохо видно. Неудобно смотреть на текст ограничения.

Спикер B31:34

Так, я записал себе.

Спикер A31:40

В бандле дописать в преамбула фиш-текст.

Спикер C32:06

хорошо

Спикер A32:06

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

Спикер C32:25

Мне кажется, достаточно будет только индикатор из документов.

Спикер B32:36

Так. Спасибо.

Спикер C32:52

Ну, в целом, выглядит как будто бы все.

32:55

12. Проверка камеры

Спикер A32:55

Есть ли у вас камера, сэр?

Спикер C32:59

Да, сейчас, секунду.

Спикер B33:02

Пробуем.

Спикер C33:08

Так, почему-то не активируется. А вот сейчас?

Спикер A33:14

Чёрная карта.

Спикер B33:16

О, всё. Есть. Хорошо.

33:20

13. Завершение и прощание

Спикер A33:20

Всего тогда. Спасибо. До будущих встреч.

Спикер C33:22

Всего доброго.