МИС. Шаблоны исследований

0-_hm89hry8zyzl31fiia13xuvg.png

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

Протокол исследования — документ, выдаваемый пациенту на руки. Что же представляет собой шаблон? Красивые картинки и цветные буквы — лишь фасад, а фундамент — структура, хранящаяся в базе данных. По большому счету можно выбрать любой формат описания абстрактных данных, который бы позволил сохранить иерархическую структуру. Мы же остановились на XML.

Шаблоны — это не статические данные, которые заносятся в поле таблицы один раз и забываются. Со временем структура шаблона может измениться. Например, не хватает каких-то измерений, или они, наоборот, лишние, и врач их не заполняет, ставя прочерки или оставляя пустые места. Ещё один случай изменения структуры — расширение функциональных возможностей системы шаблонов или переосмысление старых. Независимо от причины изменений для старой версии шаблона указывается время, до которого он действует, а для нового, в свою очередь, — с какого времени он вступает в силу. Таким образом, все старые протоколы не теряют и не приобретают какие-либо части, и остаются в том виде, в котором были отданы пациенту.

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

Template


Корневой элемент, внутри которого располагаются остальные теги. С помощью двух атрибутов в нём указывается наличие и расположение основного изображения в шаблоне:

  • image-id — идентификатор изображения, лежащего в хранилище;
  • image-position — расположение изображения. Варианты: none, top, left-top-corner, left-bottom-corner, left-top-corner-high. По умолчанию — none.


Anatomy


Используется для отображения сущности анатомия. Атрибуты:

  • id — номер анатомии в БД;
  • font-size, font-bold, font-underline — настройки шрифта;
  • anatomy-name — позволяет переопределить название анатомии. По умолчанию название берется из БД.


Anatomy-comment


Используется для отображения сущности комментарий. Атрибуты:

  • comment-id — номер комментария в БД;
  • use-default — флаг, указывающий на необходимость в автоматическом заполнении поля комментария стандартной фразой-шаблоном, помеченной как «по умолчанию». Варианты: true и false. По умолчанию — false;
  • comment-type — указывает на тип комментария. Варианты: comment (комментарий), conclusion (заключение), complaint (жалоба). По умолчанию — comment.


Measurement


Используется для отображения сущности измерение. Атрибуты:

  • id — номер измерения в БД;
  • max-width — общая ширина элемента;
  • value-width — ширина выпадающего списка для перечислимых измерений;
  • unit-width — ширина единиц измерения для числовых измерений;
  • measurement-name — позволяет переопределить название измерения, которое по умолчанию берётся из БД;
  • need-points-to-end — показывает нужны ли точки после значения перечислимого измерения. Варианты: true и false. По умолчанию — false;
  • empty-name — флаг, позволяющий не отображать название измерения. Варианты: true и false. По умолчанию — false;
  • show-referent-interval — флаг для отображения референсного интервала. Варианты: true и false. По умолчанию — true.


Conclusion-label


Используется в конце шаблона. В результате добавляется зеленая линия на всю ширину строки и слово «Заключение», отображаемое под ней.

Все эти теги можно встретить, к примеру, в шаблоне УЗИ мочевого пузыря:




iac19w7z_aanpqenhj8wlc-cfrc.png

Text


Предназначен для отображения простого текста. Атрибуты:

  • text-label — отображаемый текст;
  • max-width — ширина элемента;
  • font-size, font-bold, font-underline — настройки шрифта;
  • is-color-selection — выделение зеленым цветом. Варианты: true и false. По умолчанию — false.


Measurement-group


Используется для отображения сущности группа измерений. Внутрь этого тега можно поместить теги measurement и text. Атрибуты:

  • id — номер группы измерений в БД;
  • is-color-selection — выделение зеленым цветом. Варианты: true и false. По умолчанию — false;
  • multi-interval — используется для отображения референсных интервалов, когда в одной линии расположено 2 измерения с ними. Варианты: true и false. По умолчанию — false;
  • show-through-slash — показать измерения через /. Возможные варианты: true и false. По умолчанию — false.


Тег можно использовать двумя способами. Первый способ: указать только тег measurement-group с нужными атрибутами. Система, со своей стороны, автоматически добавит все измерения, которые входят в эту группу измерений. Например, в шаблоне УЗИ печени и желчного пузыря для желчного пузыря указано:





  


sv1tmkruxh0rtgw9ob48dg4dxkg.png

Второй способ: указать тег measurement-group с нужными атрибутами и внутри уточнить некоторые атрибуты тегов измерений или добавить тег с текстом. Например, в шаблоне УЗИ БЦА для отображения информации для общей сонной артерии используется следующий код:

Часть шаблона УЗИ БЦА

    
    
    





    
    



    
    




mll0cjpivw5huuswvl_i_aeurlk.png

Для визуализации надписи «справа-слева» задействован уже знакомый тег text и новый line, который будет расшифрован ниже.

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




    
     





ltio78opi2dj9dsxwbsbjs_unik.png

Line


Все элементы внутри этого тега расположены в одну линию. Основное отличие тега line от measurement-group состоит в том, что line визуально объединяет никак не связанные друг с другом данные. Внутри могут находиться теги anatomy, measurement и text. Тег использует атрибуты is-color-selection и multi-interval, поведение которых соответствует аналогичным атрибутам в measurement-group.

Например, в шаблоне КТ головного мозга можно встретить следующие измерения:

Часть шаблона КТ головного мозга

    
    
    



    
    
    



    
    



    
    



    
    




pjc99mchcqokyb-fvl4g-bo8osk.png

Что ж осталось еще несколько тегов, но давайте перейдём к лирике, а после к сухому описанию оставшегося «добра».

Каждый шаблон привязан к определенному прайсу (услуге). Все прайсы, в свою очередь, распределены между прайс-группами. Последние уже входят в какие-либо модальности. Например:

  • шейный отдел позвоночника (услуга) — шея (прайс-группа) — магнитно-резонансная томография [МРТ] (модальность);
  • шейный отдел позвоночника (услуга) — шея (прайс-группа) — компьютерная томография [КТ] (модальность);
  • консультация врача-терапевта (услуга) — терапия (прайс-группа) — консультации и манипуляции [КМ] (модальность);
  • почки и надпочечники (услуга) — брюшная полость (прайс-группа) — ультразвуковое исследование [УЗИ] (модальность).


Если рассматривать прайс подробнее, то для него можно выделить следующие типы:

  • основной;
  • дополнительный;
  • анализ.


Дополнительные услуги и анализы всегда связаны с основными и не могут быть оплачены и выполнены отдельно от них. В целом, введение дополнительных услуг в рамках основной услуги не только увеличивает количество получаемой во время обследования информации (актуально для исследований, проводимых на различном оборудовании), но и позволяет легко ввести в МИС понятие первичных и повторных приёмов врача-специалиста.

Рассмотрим приём к терапевту. Если перевести идею первичного приёма на язык прайсов, получим, что этот приём состоит из прайсов консультации врача-терапевта (основной прайс) и осмотра врача-терапевта (доп. прайс). Тем временем повторный приём представляет собой только прайс консультации. Аналогично для остальных специалистов. Такой подход разделения приёма на два отдельных прайса позволяет выдавать пациенту заключение только с необходимой информацией.

При генерации протокола исследования учитывается актуальная версия шаблона, которая привязана к текущему основному прайсу. Если пациент оплачивает, к примеру, услугу «УЗИ поджелудочная железа» или «консультация врача-терапевта», то вопросы при его отображении врачу не возникают. Но что делать, если оплачена не только консультация врача-терапевта, но и осмотр? Каким же образом добавить шаблон, привязанный к осмотру врача?

Не менее интересным занятием оказывается и отображение протокола исследования для лабораторной диагностики (ЛД), где используется отличный от дополнительных прайсов подход. Именно поэтому для анализов был выделен отдельный тип прайсов. Каждый основной прайс ЛД (исследование мазка/соскоба, исследование мочи и т. п.) в данном случае служит для объединения нескольких прайсов с типом «анализ», относящихся к разными прайс-группами, в единое целое. В результате для каждого основного прайса выдается только один протокол исследования независимо от количества оплаченных анализов. Если было заказано, к примеру, несколько анализов крови (основной прайс — исследование крови) и урологический мазок (основной прайс — исследование мазка/соскоба), то будет выдано два заключения.

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

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

Наверняка возник вопрос: зачем использовать какие-то специальные теги, когда можно просто добавить один шаблон в конец другого, получив при этом своеобразный локомотив с вагонами? Да, существует и такой путь. Однако, система шаблонов должна быть гибкой и иметь возможность для вставки разных шаблонов в то место, которое нам нужно, соблюдая при этом определённый порядок.

Template-builder


Используется в качестве ссылки на другой шаблон. В атрибуте id указывается номер вставляемого шаблона.

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

Шаблон правой миндалины




Шаблон левой миндалины




Часть шаблона осмотра специалиста, где шаблон с номером 516 — для правой миндалины, а 517 — для левой миндалины:








orcp0_pllq3xi4av9m8jedicu2q.png

Price-template-builder


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

Шаблон консультации врача-терапевта:




wot-zvkjwk9vcj3cm6ymazo0ti4.png

Шаблон осмотра врача-терапевта




gnwmoix-uf7_prbum93w30cieuk.png

Price-group


Используется для отображения прайс-группы в шаблонах анализов. Может содержать тег price-template-builder. Атрибуты:

  • id — номер прайс-группы из БД;
  • bgcolor — цвет фона;
  • fgcolor — цвет текста.


Рассмотрим протокол исследования крови для оплаченных прайсов липидный статус, аспартатаминотрансфераза (АсАТ), аланинаминотрансфераза (АлАТ), тестостерон общий, эстрадиол, пролактин, соматотропный гормон (СТГ).

Часть шаблона исследования крови




Шаблон для липидного статуса (номер в базе — 379):




Шаблон для аланинаминотрансфераза (АлАТ) (номер в базе — 381):




g46_u9ensfsbm5j5pclw8efpnui.png

В системе присутствует пара атрибутов, которые можно встретить во всех тегах:

  • comment — игнорируется системой и выступает в качестве пометки для разработчика;
  • spacing-before — дополнительное расстояние между строками. Возможные варианты: NONE, HALF, FULL. По умолчанию — NONE;
  • is-short — указывает на тип строки: обычная (false) или короткая (true). По умолчанию стоит false.


При помощи атрибута is-short можно сделать протокол исследования, где основная картинка расположена слева, а различные измерения и группы измерений — справа. Одним из таких заключений является УЗИ щитовидной железы, шаблон которой приведен ниже:

Шаблон УЗИ щитовидной железы




Шаблон правой доли:




Шаблон левой доли:




u-uktxclbuwbfgzeshvxwua-yce.png

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

© Habrahabr.ru