Описание правил и логики вывода расписания.

Количество дней расписания для вывода

Определяет на сколько максимум дней сервис отдает расписание клиентам для отображения.

Устанавливается сервисной настройкой "Schedule.Days" при запуске сервиса.

Права ячеек

Права ячеек расписания определяют, какому сервису будет доступна та или иная ячейка.

Существует следующие уровни прав:

  • Регистратура - Registry — записать пациента может пользователь Системы с ролью «Регистратура».
  • Врач - Doctor — записать пациента может пользователь Системы с ролью «Врач»; оператор КЦ/пациент с РПГУ, если есть направление на консультацию/пациент на Д-учете.
  • Интернет - Internet — пациент может самостоятельно записаться на РПГУ к врачу.
  • Другая МО - DoctorOtherLpu — записать пациента может врач из другой медицинской организации через сервис врач-врач по направлению.
  • Доступ по квоте - Quota — не используется в текущей версии.
  • Инфомат - Infomat — пациент может самостоятельно записаться через Инфомат к врачу.
  • Колл-центр - CallCenter — записать пациента может оператор КЦ.

Права могут пересекаться. К примеру, ячейка может быть с правами самозаписи и регистратуры одновременно или вообще иметь все права одновременно.

Является битовым флагом. Ссылка на правила построения флагов.

Существует механизм открытия ячеек расписания, который добавляет дополнительные права.

Права клиентов

Методы получения текущих прав по клиентам

Получение данных по всем клиентам

Получение данных по клиенту

Текущие права клиентов

КлиентТип записиПрава**. План 2 этап - 2DR API 2.28 - Текущие
1Кол-центр, робот КЦОбычная записьКол-центр
2Кол-центр, робот КЦЗапись по направлениюКол-центр | Другая МО
3Кол-центр, робот КЦЗапись по направлению в другую МОКол-центр | Другая МО
4ИнфоматОбычная записьИнфомат
5ИнфоматЗапись по направлениюИнфомат | Другая МО
6ИнфоматЗапись по направлению в другую МОИнфомат | Другая МО
7Интернет, 2др, другие порталы самозаписиОбычная записьИнтернет
8

Интернет, 2др, другие порталы самозаписи

Запись по направлениюИнтернет | Другая МО
9

Интернет, 2др, другие порталы самозаписи

Запись по направлению в другую МОИнтернет | Другая МО
10ГосуслугиОбычная запись

Регистратура | Интернет | Инфомат | Кол-центр

11ГосуслугиЗапись по направлениюРегистратура | Интернет | Инфомат | Кол-центр | Другая МО
12ГосуслугиЗапись по направлению в другую МОРегистратура | Интернет | Инфомат | Кол-центр | Другая МО
13

МИС*

Обычная записьРегистратура | Врач
14МИС*Запись по направлениюРегистратура | Врач
15МИС*Запись по направлению в другую МОДругая МО***
16Врач-врачВсеДругая МО

Если клиентское приложение себя не идентифицирует, то по умолчанию ему будет отдано расписание с правом доступа Интернет.

Если клиентское приложение отсутствует в списке выше, то это значит что у него права Интернет.

*- когда МИС использует методы API 2др.

**- Уровень доступа формируется на основе флагов

***- Сначала провели в Белгородской области , затем в остальных также убрали Регистратуру. Скрипт в задаче API-2382 - Получение подробных данных проблемы... СТАТУС

Значения флагов
Регистратура (код REGISTRY) = 1,
Врач (код DOCTOR) = 2,
Интернет (код INTERNET) = 4,
Другая МО (код OTHER_MO) = 8,
Инфомат (код INFOMAT) = 32,
Кол-центр (код CALL_CENTER) = 64,
EPGU (код EPGU) = 128 (данный бит появился в МИС на PostgreSQL).

Данные значения хранятся в БД домена "Расписания" PostgreSQL в справочнике nsi.timetable_access_role.

Для слота расписания представление битовых флагов в виде десятичного значения хранится в hlt_DoctorTimeTable.FlagAccess (MS SQL Server) и в appt.timetable.access_flag (PostgreSQL).
Десятичное значение можно перевести в двоичное в калькуляторе, либо в любом онлайн сервисе. Каждый бит, читая справа налево, определяет права доступа к слоту расписания (1 - доступ есть, 0 - доступа нет).
Скрипт для разложения числового значения на права клиентов/роли, где в values передать значение в десятичной системе:
select ttar.timetable_access_role_id
     , ttar.name
     , ttar.access_flag
     , access_rule.is_enabled
  from nsi.timetable_access_role ttar
       left join lateral ( select t.access_flag & ttar.access_flag > 0 as is_enabled
                             from (values (235)) as t (access_flag)
                         ) access_rule on true;


Запрос получения прав клиентов (ЦОД НСИ)
select 
ca.Mnem as [ClientApplicationName],
ca.ClientApplicationGuid as [ClientApplicationGuid],
cf.Name as [Function],
cp.Access as [Access],
cp.ScheduleDays as [ScheduleDays],
case when cp.Access & 1 > 0 then 1 else 0 end as [Регистратура],
case when cp.Access & 2 > 0 then 1 else 0 end as [Врач],
case when cp.Access & 4 > 0 then 1 else 0 end as [Интернет],
case when cp.Access & 8 > 0 then 1 else 0 end as [Другая МО],
case when cp.Access & 32 > 0 then 1 else 0 end as [Инфомат],
case when cp.Access & 64 > 0 then 1 else 0 end as [Кол-центр]
from oms_ClientPermission cp
join oms_ClientFunction cf on cp.rf_ClientFunctionId = cf.ClientFunctionId
join oms_ClientApplication ca on cp.rf_ClientApplicationId = ca.ClientApplicationId
where cp.ClientPermissionId > 0
Скрипт для разложения числа на права
PostgreSQL:
select t.access_flag & 1 > 0 as Регистратура,
       t.access_flag & 2 > 0 as Врач,
       t.access_flag & 4 > 0 as Интернет,
       t.access_flag & 8 > 0 as Другая_МО,
       t.access_flag & 32 > 0 as Инфомат,
       t.access_flag & 64 > 0 as Кол_центр,
       t.access_flag & 128 > 0 as Портал_госуслуг
  from (values (239)) as t (access_flag);

MS SQL Server:
declare @access int = 239
select
case when @access & 1 > 0 then 1 else 0 end as [Регистратура],
case when @access & 2 > 0 then 1 else 0 end as [Врач],
case when @access & 4 > 0 then 1 else 0 end as [Интернет],
case when @access & 8 > 0 then 1 else 0 end as [Другая МО],
case when @access & 32 > 0 then 1 else 0 end as [Инфомат],
case when @access & 64 > 0 then 1 else 0 end as [Кол-центр],
case when @access & 128 > 0 then 1 else 0 end as [Портал госуслуг]


Сервис определения прав(распространяется нугетом) http://bitbucket.softrust.ru/projects/TODR/repos/2dr-schedule-api/browse/src/Schedule/SofTrust.WebApi.Schedule.Library/Services/ClientAccess/ClientAccessService.cs

Перед проведением любых скриптов со страницы необходимо проверить таблицу "oms_ClientFunction" на наличие данных: VisitDoctor, VisitDirection, VisitDirectionOtherLpu

Скрипты для применения прав доступа(выполнять на базе ЦОД НСИ):

Обновление права доступа к ячейкам расписания клиентских приложений. 1 этап.sql - Применяет права согласно 1 этапу

Обновление права доступа к ячейкам расписания клиентских приложений. 2 этап.sql - Применяет права согласно 2 этапу

Новые права для робота КЦ.sql - делает права робота КЦ как у самого КЦ

Справочники. (API-3045). Расширение прав ЕПГУ на все кроме Врач и Врач другой ЛПУ.sql - дает Госуслугам расширенные права

Скрипты для добавления новых клиентов и добавления их прав:

Справочники (API-2458) Добавление нового клиента 'Стационар'.sql - добавляет новый клиент "Стационар" и права к нему.

Справочники (API-2397) Добавление нового клиента Робот Полимедика.sql - добавляет новый клиент "Робот Полимедика" и права к нему

Справочники(API-2219) Добавление нового клиента Социальная защита населения.sql - добавляет новый клиент "СоцЗащита" и права к нему
Скрипты для добавления дней доступных для записи для клиентов

Кол-во дней для записи для клиентов.sql



Типы приема

Тип приема определяет назначение ячейки и доступна ли она для записи.

Ограничения в таблице ниже описаны для клиентов апи 2др: РПГУ, КЦ, 2др и прочие.

Для записи через Госуслуги средствами ФЭР и Витрина ФЭР имеются свои настраиваемые белые списки доступных типов.

Доступность на уровне бдКодТип приемаПравило валидации в сервисе записиКод настройкиКомментарий
Приемные4Прием по очередиБез ограничений


201Прием беременныхУ пациента есть карта беременныхBusyType_PregnancyПроверка происходит по наличию незакрытой карты беременных(hlt_mkp_card)

202Прием детей до 1 годаВозраст пациента < 1CellAgeType

203Прием пациентов до 18 летВозраст пациента < 18CellAgeType

204Прием пациентов с 18 летВозраст пациента >= 18CellAgeType

205МедосмотрБез ограничений


206ДиспансеризацияЗапись только по мероприятию диспансеризации
Запрет в Московской Области

207Платный приемБез ограничений


209Прием здорового ребенкаВозраст пациента < 18 и нет открытых ТАПов по заболеванию по отдельным специальностям(Педиатрия, Общая врачебная практика (семейная медицина), Инфекционные болезни) за ограниченный период(60 дней).BusyType_HealthyChild

API-1564 - подробное описание валидации.

Специальности для отбора указываются через настройку ValidationRules:Visit:BusyType_HealthyChild_Check_Speciality.

Период поиска открытых тап указывается через настройку ValidationRules:Visit:BusyType_HealthyChild_Check_Days


210Прием инвалидовПациент инвалидBusyType_DisabilityПроверка происходит по таблице hlt_INV

211Дежурный врачБез ограничений


212Выездной профосмотрБез ограничений


213Организационные мероприятияБез ограничений


214Консультационный приемБез ограничений


215ДиагностикаЗапись только по направлениюУказывается через настройки слотов в поле BlockBusyЗапрет в Московской Области

320ОнкологияЗапрет обычной записи. Ограничение записи по направлению - записать может только врач со специальностью, входящей в список настройки "Коды специальности Онкология" (setting)BusyType_Onco

315ТМК врач-пациент Без ограничений


322ТМК врач-врач Без ограничений


323ТМК консилиумБез ограничений


319Диспансерное наблюдениеБез ограничений


324Приём пациентов 60+



325Мобильный ФАП
MobileBrigade
Неприемные2Выходной деньЗапретCheckDocBusyОчень сомнительная настройка. Если ее убрать, то можно будет записываться на нериемные ячейки. Считаю, что нужно будет ее убрать совсем и проверять это правило по умолчанию.

3Врач на больничномЗапрет


1Врач в отпускеЗапрет


6Врач на учебеЗапрет


7Дежурный врачЗапрет


8ПрочееЗапрет


304Неприемное времяЗапрет


305МедосмотрЗапрет


306ДиспансеризацияЗапрет


307КомандировкаЗапрет


308Административная работаЗапрет


309Организационные мероприятияЗапрет


310Форс-мажорЗапрет


311Прием в другом подразделенииЗапрет


312Ремонт оборудованияЗапрет

Другие5Живая очередьЗапрет


17Прием на дому (вызов на дом)Запись только в рамках вызова на дом



Если у врача в течение дня нет ни одной ячейки, то сервис заполняет пробел не приёмным днем с типом "Нет приема". Такого типа нет в бд.



  • Нет меток