Файл HL7_OUT.xml. Настройка конфигурации исходящих сообщений.
<?xml version="1.0" encoding="windows-1251"?>
<!— Кодировка самого файла HL7_OUT.xml должна соответствовать указанной здесь кодировке-->
<hl7>
<events>
<!—
В секции перечисляются обрабатываемые события из таблицы HL7_EVENTS.
<code> – содержимое поля HL7_EVENTS.REC_TYPE + HL7_EVENTS.ACTION_TYPE. Если поле HL7_EVENTS.ACTION_TYPE не пусто, его значение прибавляется со знаком подчеркивания.
<name> – используется только в этом файле настроек (для удобства названия секций) и его можно не задавать. Тогда <name> будет совпадать с <code>.
-->
<event desc="Изменение пациента">
<name>PATIENT</name>
<code>P_U</code>
</event>
<event desc="Запись на прием">
<name>PLANNING</name>
<code>PLANNING_UPDATE</code>
</event>
</events>
<sections>
<!—
Секции описывают формат сообщения. Если имя секции совпадает с описанными выше событиями (events), то на основе этой секции и будет построено HL7 сообщение. Также есть промежуточные секции (например, common): они используются в других секциях (через свойство <parent>), чтобы избежать настройки для каждого сообщения одного и того же.
-->
<COMMON>
<xml>
<!—
Кодировка исходящего сообщения. Перед отправкой сообщение будет перекодировано в соответствии с указанной кодировкой, она же будет указана в xml-заголовке отправляемого сообщения.
-->
<encoding>UTF-8</encoding>
</xml>
<segments>
<!—
Из этих сегментов будет состоять исходящее xml-сообщение
-->
<MESSAGE_INFO>
<!—
В фигурных скобках указываются имена полей sql-запросов. При формировании сообщения описанные ниже (в секции queries) запросы будут выполнены и из результирующей записи значения полей будут соответственно подставлены в исходящее сообщение (уже без фигурных скобок).
Есть несколько фиксированных системных полей, значение которых заполняет сам HL7 сервер:
{MESSAGE_ID} – автоматически генерируется для нового сообщения
{EVENT_ID} – HL7_EVENTS. HL7_EVENTS_ID
{REC_ID} - HL7_EVENTS.REC_ID
{HL7_COMMENT} - HL7_EVENTS.COMMENT
{EXT_CODE} - HL7_EVENTS.EXT_CODE
{EXT_CODE1} - HL7_EVENTS.EXT_CODE1
{EXT_CODE2} - HL7_EVENTS.EXT_CODE2
{CURRENT_DATE} - HL7_EVENTS.CURRENT_DATE
-->
<MESSAGE_ID>{MESSAGE_ID}</MESSAGE_ID>
<DATETIME>{CURRENT_DATE}</DATETIME>
</MESSAGE_INFO>
</segments>
</COMMON>
<PATIENT>
<parent>COMMON</parent>
<xml>
<!—
Имя корневого элемента исходящего HL7 сообщения. Его можно не указывать, тогда будет браться имя секции. В данном случае – PATIENT.
-->
<name>PAT</name>
</xml>
<segments>
<PATIENT_INFO>
<PATIENTS_ID>{PATIENTS_ID}</PATIENTS_ID>
<NOM>{NOM}</NOM>
<PRENOM>{PRENOM}</PRENOM>
<BIRTHDAY>{BIRTHDAY}</BIRTHDAY >
</PATIENT_INFO>
<!—
В сегменте может быть указан конкретный SQL-запрос. Это значит, что данный сегмент может быть повторен в исходящем сообщении несколько раз, в зависимости от числа записей, которые вернет этот запрос при выполнении.
-->
<INSURANCE query="insurance">
<PROGRAM_ID>{PROGRAM_ID}</PROGRAM_ID>
<PROGRAM_CODE>{PROGRAM_CODE}</PROGRAM_CODE>
</INSURANCE>
</segments>
<queries>
<!—
SQL-скрипты, которые будут последовательно выполнены перед созданием исходящего сообщения.
<order> - порядок выполнения скрипта (если не указан, то выполняются последовательно)
<type> - open или exec (определяет способ выполнения скрипта)
<name> - можно указать имя запроса. Это необязательно и нужно только для повторяющихся сегментов (таких, как INSURANCE — см. выше)
<text> - текст скрипта.
В скриптах могут использоваться параметры (:PARAM_NAME), которые по имени должны совпадать с системными полями (см. выше) либо с именами полей предыдущих запросов.
Например, первый запрос (типа open) возвращает несколько полей, значение которых можно через параметры использовать во втором и последующих скриптах.
-->
<query>
<order>1</order>
<type>open</type>
<text>
select
PATIENTS_ID,
NOM,
PRENOM,
NE_LE as BIRTHDAY
from
PATIENTS
where
PATIENTS_ID = :REC_ID
</text>
</query>
<query>
<order>2</order>
<type>open</type>
<name>insurance</name>
<text>
select
FM_CLINK.FM_CLINK_ID as PROGRAM_ID,
FM_CLINK.CODE as PROGRAM_CODE
from
FM_CLINK_PATIENTS
inner join FM_CLINK ON FM_CLINK.FM_CLINK_ID = FM_CLINK_PATIENTS.FM_CLINK_ID
where
FM_CLINK_PATIENTS.PATIENTS_ID = :REC_ID
</text>
</query>
</queries>
</PATIENT>
<!—
Следующая секция (сообщение) наследуется от PATIENTS, следовательно, будет использовать его структуру. Также наследуются и скрипты, но они могут быть изменены на свои. Структура сообщения также будет дополнена.
-->
<PLANNING>
<parent>PATIENT</parent>
<segments>
<PLANNING_INFO>
<PLANNING_ID>{PLANNING_ID}</PLANNING_ID>
<COMMENT>{PLANNING_COMMENT}</COMMENT>
<EXAM_CODE>{EXAM_CODE}</EXAM_CODE>
<EXAM_NAME>{EXAM_NAME}</EXAM_NAME>
<SUBJ_ID>{SUBJ_ID}</SUBJ_ID>
<SUBJ_NAME>{SUBJ_NAME}</SUBJ_NAME>
</PLANNING_INFO>
</segments>
<queries>
<query>
<type>open</type>
<text>
select
p.PATIENTS_ID,
p.NOM,
p.PRENOM,
p.NE_LE as BIRTHDAY,
pl.PLANNING_ID,
pl.COMMENTAIRE as PLANNING_COMMENT,
ex.CODE as EXAM_CODE,
ex.NAME as EXAM_NAME,
sj.pl_subj_id as SUBJ_ID,
sj.NAME as SUBJ_NAME
from
planning pl join patients p on pl.PATIENTS_ID = p.PATIENTS_ID
join pl_exam ex on ex.pl_exam_id = pl.pl_exam_id
join pl_subj sj on sj.pl_subj_id = pl.pl_subj_id
where
pl.PLANNING_ID = :REC_ID
</text>
</query>
<query>
<order>3</order>
<type>exec</type>
<text>
delete from HL7_EVENTS where MESSAGE_ID = :MESSAGE_ID </text>
<query>
</queries>
</PLANNING>
</sections>
</hl7>