МИС. Шаблоны исследований
В прошлый раз было описано, какие базовые сущности используются для хранения медицинских данных в МИС Нумеди. Сегодня же предлагаем окунуться в мир шаблонов для протоколов исследований.
Протокол исследования — документ, выдаваемый пациенту на руки. Что же представляет собой шаблон? Красивые картинки и цветные буквы — лишь фасад, а фундамент — структура, хранящаяся в базе данных. По большому счету можно выбрать любой формат описания абстрактных данных, который бы позволил сохранить иерархическую структуру. Мы же остановились на 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
Используется в конце шаблона. В результате добавляется зеленая линия на всю ширину строки и слово «Заключение», отображаемое под ней.
Все эти теги можно встретить, к примеру, в шаблоне УЗИ мочевого пузыря:
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 с нужными атрибутами. Система, со своей стороны, автоматически добавит все измерения, которые входят в эту группу измерений. Например, в шаблоне УЗИ печени и желчного пузыря для желчного пузыря указано:
Второй способ: указать тег measurement-group с нужными атрибутами и внутри уточнить некоторые атрибуты тегов измерений или добавить тег с текстом. Например, в шаблоне УЗИ БЦА для отображения информации для общей сонной артерии используется следующий код:
Для визуализации надписи «справа-слева» задействован уже знакомый тег text и новый line, который будет расшифрован ниже.
В любом правиле всегда можно найти исключение. Так же и получилось с артериальным давлением. Это именно та группа измерений, которая определила новый способ отображения групп: величины измерений пишутся через слеш, а референсные интервалы расположены рядом друг с другом:
Line
Все элементы внутри этого тега расположены в одну линию. Основное отличие тега line от measurement-group состоит в том, что line визуально объединяет никак не связанные друг с другом данные. Внутри могут находиться теги anatomy, measurement и text. Тег использует атрибуты is-color-selection и multi-interval, поведение которых соответствует аналогичным атрибутам в measurement-group.
Например, в шаблоне КТ головного мозга можно встретить следующие измерения:
Что ж осталось еще несколько тегов, но давайте перейдём к лирике, а после к сухому описанию оставшегося «добра».
Каждый шаблон привязан к определенному прайсу (услуге). Все прайсы, в свою очередь, распределены между прайс-группами. Последние уже входят в какие-либо модальности. Например:
- шейный отдел позвоночника (услуга) — шея (прайс-группа) — магнитно-резонансная томография [МРТ] (модальность);
- шейный отдел позвоночника (услуга) — шея (прайс-группа) — компьютерная томография [КТ] (модальность);
- консультация врача-терапевта (услуга) — терапия (прайс-группа) — консультации и манипуляции [КМ] (модальность);
- почки и надпочечники (услуга) — брюшная полость (прайс-группа) — ультразвуковое исследование [УЗИ] (модальность).
Если рассматривать прайс подробнее, то для него можно выделить следующие типы:
- основной;
- дополнительный;
- анализ.
Дополнительные услуги и анализы всегда связаны с основными и не могут быть оплачены и выполнены отдельно от них. В целом, введение дополнительных услуг в рамках основной услуги не только увеличивает количество получаемой во время обследования информации (актуально для исследований, проводимых на различном оборудовании), но и позволяет легко ввести в МИС понятие первичных и повторных приёмов врача-специалиста.
Рассмотрим приём к терапевту. Если перевести идею первичного приёма на язык прайсов, получим, что этот приём состоит из прайсов консультации врача-терапевта (основной прайс) и осмотра врача-терапевта (доп. прайс). Тем временем повторный приём представляет собой только прайс консультации. Аналогично для остальных специалистов. Такой подход разделения приёма на два отдельных прайса позволяет выдавать пациенту заключение только с необходимой информацией.
При генерации протокола исследования учитывается актуальная версия шаблона, которая привязана к текущему основному прайсу. Если пациент оплачивает, к примеру, услугу «УЗИ поджелудочная железа» или «консультация врача-терапевта», то вопросы при его отображении врачу не возникают. Но что делать, если оплачена не только консультация врача-терапевта, но и осмотр? Каким же образом добавить шаблон, привязанный к осмотру врача?
Не менее интересным занятием оказывается и отображение протокола исследования для лабораторной диагностики (ЛД), где используется отличный от дополнительных прайсов подход. Именно поэтому для анализов был выделен отдельный тип прайсов. Каждый основной прайс ЛД (исследование мазка/соскоба, исследование мочи и т. п.) в данном случае служит для объединения нескольких прайсов с типом «анализ», относящихся к разными прайс-группами, в единое целое. В результате для каждого основного прайса выдается только один протокол исследования независимо от количества оплаченных анализов. Если было заказано, к примеру, несколько анализов крови (основной прайс — исследование крови) и урологический мазок (основной прайс — исследование мазка/соскоба), то будет выдано два заключения.
Нельзя забывать и о том, что некоторые места в разных шаблонах могут дублироваться, или шаблон банально очень большой, и в нём трудно ориентироваться. Например, набор измерений для правой и левой миндалин встречаются в осмотрах врача-терапевта, врача-эндокринолога, врача-пульмонолога и т. п.
Таким образом, возникает необходимость, во-первых, в выделении фрагмента XML кода в отдельный шаблон и его последующем добавлении в специальное место, и, во-вторых, в присоединении к основному шаблону шаблонов оплаченных дополнительных прайсов или анализов. Для этих задач нам понадобятся оставшиеся три тега.
Наверняка возник вопрос: зачем использовать какие-то специальные теги, когда можно просто добавить один шаблон в конец другого, получив при этом своеобразный локомотив с вагонами? Да, существует и такой путь. Однако, система шаблонов должна быть гибкой и иметь возможность для вставки разных шаблонов в то место, которое нам нужно, соблюдая при этом определённый порядок.
Template-builder
Используется в качестве ссылки на другой шаблон. В атрибуте id указывается номер вставляемого шаблона.
В качестве примера приведем шаблоны правой и левой миндалин, которые используются в шаблоне осмотра специалистов.
Часть шаблона осмотра специалиста, где шаблон с номером 516 — для правой миндалины, а 517 — для левой миндалины:
Price-template-builder
Обозначает вставку шаблона, наличие которого зависит от оплаты. Например, осмотр врача, различные анализы. Содержит только один атрибут id, где прописывается номер шаблона.
Шаблон консультации врача-терапевта:
Price-group
Используется для отображения прайс-группы в шаблонах анализов. Может содержать тег price-template-builder. Атрибуты:
- id — номер прайс-группы из БД;
- bgcolor — цвет фона;
- fgcolor — цвет текста.
Рассмотрим протокол исследования крови для оплаченных прайсов липидный статус, аспартатаминотрансфераза (АсАТ), аланинаминотрансфераза (АлАТ), тестостерон общий, эстрадиол, пролактин, соматотропный гормон (СТГ).
Шаблон для липидного статуса (номер в базе — 379):
Шаблон для аланинаминотрансфераза (АлАТ) (номер в базе — 381):
В системе присутствует пара атрибутов, которые можно встретить во всех тегах:
- comment — игнорируется системой и выступает в качестве пометки для разработчика;
- spacing-before — дополнительное расстояние между строками. Возможные варианты: NONE, HALF, FULL. По умолчанию — NONE;
- is-short — указывает на тип строки: обычная (false) или короткая (true). По умолчанию стоит false.
При помощи атрибута is-short можно сделать протокол исследования, где основная картинка расположена слева, а различные измерения и группы измерений — справа. Одним из таких заключений является УЗИ щитовидной железы, шаблон которой приведен ниже:
Шаблон правой доли:
Шаблон левой доли:
Мы уже упоминали, что с человеком с течение жизни происходят различные метаморфозы. Оставшиеся теги как раз предназначены для их описания, и они будут рассмотрены в следующий раз.