Перейти к основному содержимому

03 Таблицы решений

Интерфейс пользователя

Узлы для работы с настроечными таблицами

luxmsbi-medrouting-context

Этот узел должен идти первым. В нём задаётся подключение к источнику данных для всех последующих решающих таблиц.

luxmsbi-medrouting-step

Этот узел предоставляет интерфейс к решающим таблицам.

Пример потока

Пример потока с решающими таблицами

Подготовка данных

Для подготовки начальных данных, создания необходимых таблиц и прочих похожих задач можно пользоваться обычными инструментами Data Boring. Например, можно воспользоваться узлом luxmsbi-run-sql. Этот узел поддерживает шаблонизацию с помощью специального синтаксиса. Переменные из среды Data Boring можно подставлять в тело запроса. Для этого используйте конструкцию: ${var_name}.

Пример:


create table if not exists databoring."flow_${msg.payload.flowId}_all"
(
patient_id uuid,
event_date date,
patient_sex char(1),
patient_age int,
lpu_code text,
visit_case_type int,
vitalparam_code text,
mpstr_value text,
mpint_value int,
vitalspr_code text,
mkb text
);

truncate table databoring."flow_${msg.payload.flowId}_all";

insert into databoring."flow_${msg.payload.flowId}_all"
select
k."identityCode"::uuid as patient_id,
v."visitDate" as event_date,
'F' as patient_sex,
date_part('year', age(k."dateTaken", k."datR")) as patient_age,
l.code as lpu_code,
v."caseTypeId" as visit_case_type,
vp.code as vitalparam_code,
mstr.value as mpstr_value,
mval.value as mpint_value,
vspr.code as vitalspr_code,
ml.mkb
from reg_pregnancy.karta k
join reg_pregnancy.visit v on v."kartaId" = k.id
join reg_pregnancy.lpufull l on l."lpuId" = v."lpuId"
left join reg_pregnancy.mkblist ml on ml."visitId" = v.id
left join reg_pregnancy.meddocument md on md."visitId" = v.id
left join reg_pregnancy.meddocquantity mdq on mdq."docId" = md.id
left join reg_pregnancy.vitalparam vp on vp.id = mdq."paramId"
left join reg_pregnancy.medicalparamspr mspr on mspr."quantityId" = mdq.id
left join reg_pregnancy.medicalparamstring mstr on mstr."quantityId" = mdq.id
left join reg_pregnancy.medicalparamvalue mval on mval."quantityId" = mdq.id
left join reg_pregnancy.vitalspr vspr on vspr.id = mspr.value
where k."dateTaken" between '${msg.payload.startDate}' and current_date;


create table if not exists databoring."flow_${msg.payload.flowId}"
(
patient_id uuid not null,
route_node_ident text not null,
node_id text not null,
event_date date,
patient_sex char(1),
patient_age int,
lpu_code text,
step_no int,
step_result text,
reason text
);

create table if not exists databoring."flow_${msg.payload.flowId}_s"
as table databoring."flow_${msg.payload.flowId}" with no data;

truncate table databoring."flow_${msg.payload.flowId}_s";

Переменные среды выполнения Data Boring

ПеременнаяОписание
msg.payload.flowIdid потока (уникален для сервера Data Boring)
msg.payload.startDateДата, выбранная в контексте medrouting-context

Описание настроечных таблиц в БД

Схема настроечных таблиц

databoring.route_nodes

В этой таблице хранятся типы решающих таблиц, которые будут доступны в интерфейсе Data Boring.

СтолбецТипОписание
idintegerзаполняется автоматически
identtextтекстовая метка-ключ
titletextназвание для интерфейса
source_typetextназвание регистра (reg_platform или reg_pregnancy)
configjsonbсистемные настройки

Струкутра таблицы databoring.route_nodes

ididenttitlesource_typeconfig
1iam-reg-pregnancy-observationОсмотрыreg_pregnancy{}
2iam-reg-pregnancy-diagnosysДиагнозыreg_pregnancy{}
3iam-reg-pregnancy-observation-2Осмотры-2reg_pregnancy{}
4iam-reg-pregnancy-diagnosys-2Диагнозы-2reg_pregnancy{}
5iam-reg-pregnancy-observation-3Осмотры-3reg_pregnancy{}
6iam-reg-pregnancy-diagnosys-3Диагнозы-3reg_pregnancy{}

Пример заполнения databoring.route_nodes

databoring.route_node_filters

СтолбецТипОписание
idintegerзаполняется автоматически
node_identtextпривязка к route_nodes
identtextтекстовая метка-ключ
titletextназвание для интерфейса
is_mandatoryintegerявляется ли обязательным
col_tabletextтаблица в БД, с которой связано это условие
col_nametextстолбец в БД, с которым связано это условие
op_listjsonbсписок допустимых операций сравнения
col_typetextтип столбца в БД
col_srcjsonbслужебное поле
configjsonbсистемные настройки

Струкутра таблицы databoring.route_node_filters

Пример заполнения поля op_list: ["=", ">", ">=", "<=", "<", "!=", "in", "between"]

idnode_identidenttitleis_mandatorycol_tablecol_name
20iam-reg-pregnancy-diagnosys-2lpu_codeOID МО1lpu_code
21iam-reg-pregnancy-diagnosys-2patient_ageВозраст пациентки1patient_age
22iam-reg-pregnancy-diagnosys-2vitalparam_codeКод результата осмотра0vitalparam_code
23iam-reg-pregnancy-diagnosys-2mkbКод МКБ0mkb
24iam-reg-pregnancy-diagnosys-2_prev_reasonПричина0prev_stepreason

Пример заполнения databoring.route_node_filters.

databoring.route_node_queries

СтолбецТипОписание
idintegerзаполняется автоматически
node_identtextпривязка к route_nodes
joined_tablesjsonbСписок столбцов, которые используются в решающей таблице. используется для выбора SQL шаблона.
sql_beforetextЗапрос, выполняемый перед основым
sql_querytextОсновной запрос
sql_aftertextЗапрос, выполняемые после основного

Струкутра таблицы databoring.route_node_queries