Пока что в общих словах опишу взаимодействие WLM (worklist manager'а), HIS и оборудования (точнее - модальности, не всегда модальность - оборудование, у нас, например, программа-видеограббер может список исследований запрашивать).
1. Взаимодействие оборудования и WLM.
Модальность по какому-то действию, чаще всего - по нажатию пользователем управляющих элементов интерфейса, иногда - автоматически, через какое-то время, запрашивает у WLM'а список исследований. Модальность может использовать какие-то фильтры при запросе (например, запросить исследования только за текущую дату), но может запросить и полный список. WLM ищет у себя в базе список исследований, предназначенный для конкретной модальности, накладывая, по необходимости, фильтры. Дальше идёт передача обнаруженного списка на модальность.
2. Взаимодействие WLM и HIS.
Откуда же возьмутся данный в базе WLM'а, для того, что бы передать их оборудованию?
У Махаон WLM Возможно два варианта: данные введёт пользователь через интерфейс пользователя; данные попадут в базу из госпитальной системы (HIS).
У нас реализовано два варианта взаимодействия с госпитальными системами.
а) Более старый вариант - взаимодействие по OLE. Я его описывать не буду, если с HL7 никак не получится - будем с OLE разбираться.
б) Более новый, рекомендуемый, вариант - взаимодействие с помощью протокола HL7.
Рекомендуется посмотреть вот эту тему, сообщение от 25-го ноября, 2010 11:19 :
viewtopic.php?t=408
Передача HL7 сообщений должна быть реализована на стороне госпиталки. При этом нет необходимости всю госпитальную систему реализовывать на HL7, как она выполнена внутри - не имеет значения, главное - что бы она наружу могла отдавать сообщения ORM^O01, которые WLM умеет принимать и обрабатывать.
В теме выложен тестовый проект:
http://www.makhaon.com/download/software/Test_hl7.zip
госпиталка должна работать так же, как этот тестовый проект. В этом же архиве приведено несколько ORM^O01 сообщений, которые можно передать для WLM'а с помощью проекта.
Мы сами писали сетевое взаимодействие по HL7 (впрочем, как и по DICOM'у). Взаимодействие по HL7 достаточно примитивное - просто передаётся сообщение + несколько предваряющих и конечных байтов.
Так же мы можем отдать готовые компоненты HL7 многопоточного приёма/передачи сообщений HL7 по сети с исходниками на Delphi.
Если нужны ссылки на сам стандарт HL7 и международные рекомендации IHE по взаимодействию госпитальных и PACS систем, которых мы придерживались - пишите - поищу.
Как вообще происходит процесс взаимодействия.
WLM в сети HL7 является приёмником (Listener), он принимает все сообщения, приходящие от госпиталки, находит те, с которыми он работает (ORM^O01) и обрабатывает их.
Соответственно, госпиталка должна, когда это ей необходимо, отдавать соответствующие команды для WLM'а - для добавления, обновления, удаления, установки статуса 'окончено'.
Соответствие тэгов DICOM и полей HL7 описано в файле Hl7 Mapping.txt.
В двух словах про HL7 на примере поля 'ORC 1 Тип сообщения'.
ORC - это сегмент сообщения. 1 - это номер поля в сегменте.
Ищем строчку с надписью 'ORC', отсчитываем поля, разделенные с помощью '|', получаем нужно поле. В поле ORC 1 находятся команды WLM'у, например: NW (1.txt) - создать новое исследование.