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.flowId | id потока (уникален для сервера Data Boring) |
msg.payload.startDate | Дата, выбранная в контексте medrouting-context |
Описание настроечных таблиц в БД
databoring.route_nodes
В этой таблице хранятся типы решающих таблиц, которые будут доступны в интерфейсе Data Boring.
Столбец | Тип | Описание |
---|---|---|
id | integer | заполняется автоматически |
ident | text | текстовая метка-ключ |
title | text | название для интерфейса |
source_type | text | название регистра (reg_platform или reg_pregnancy ) |
config | jsonb | системные настройки |
Струкутра таблицы databoring.route_nodes
id | ident | title | source_type | config |
---|---|---|---|---|
1 | iam-reg-pregnancy-observation | Осмотры | reg_pregnancy | {} |
2 | iam-reg-pregnancy-diagnosys | Диагнозы | reg_pregnancy | {} |
3 | iam-reg-pregnancy-observation-2 | Осмотры-2 | reg_pregnancy | {} |
4 | iam-reg-pregnancy-diagnosys-2 | Диагнозы-2 | reg_pregnancy | {} |
5 | iam-reg-pregnancy-observation-3 | Осмотры-3 | reg_pregnancy | {} |
6 | iam-reg-pregnancy-diagnosys-3 | Диагнозы-3 | reg_pregnancy | {} |
Пример заполнения databoring.route_nodes
databoring.route_node_filters
Столбец | Тип | Описание |
---|---|---|
id | integer | заполняется автоматически |
node_ident | text | привязка к route_nodes |
ident | text | текстовая метка-ключ |
title | text | название для интерфейса |
is_mandatory | integer | является ли обязательным |
col_table | text | таблица в БД, с которой связано это условие |
col_name | text | столбец в БД, с которым связано это условие |
op_list | jsonb | список допустимых операций сравнения |
col_type | text | тип столбца в БД |
col_src | jsonb | служебное поле |
config | jsonb | системные настройки |
Струкутра таблицы databoring.route_node_filters
Пример заполнения поля op_list
: ["=", ">", ">=", "<=", "<", "!=", "in", "between"]
id | node_ident | ident | title | is_mandatory | col_table | col_name |
---|---|---|---|---|---|---|
20 | iam-reg-pregnancy-diagnosys-2 | lpu_code | OID МО | 1 | lpu_code | |
21 | iam-reg-pregnancy-diagnosys-2 | patient_age | Возраст пациентки | 1 | patient_age | |
22 | iam-reg-pregnancy-diagnosys-2 | vitalparam_code | Код результата осмотра | 0 | vitalparam_code | |
23 | iam-reg-pregnancy-diagnosys-2 | mkb | Код МКБ | 0 | mkb | |
24 | iam-reg-pregnancy-diagnosys-2 | _prev_reason | Причина | 0 | prev_step | reason |
Пример заполнения databoring.route_node_filters
.
databoring.route_node_queries
Столбец | Тип | Описание |
---|---|---|
id | integer | заполняется автоматически |
node_ident | text | привязка к route_nodes |
joined_tables | jsonb | Список столбцов, которые используются в решающей таблице. используется для выбора SQL шаблона. |
sql_before | text | Запрос, выполняемый перед основым |
sql_query | text | Основной запрос |
sql_after | text | Запрос, выполняемые после основного |
Струкутра таблицы databoring.route_node_queries