Термин или понятие |
Комментарий |
МИС |
Медицинская информационная система |
МО |
Медицинская организация |
СМП |
Скорая медицинская помощь |
ТФОМС |
Территориальный фонд ОМС |
СПб ГБУЗ МИАЦ |
Санкт-Петербургское государственное бюджетное учреждение здравоохранения «Медицинский информационно-аналитический центр» |
Подсистема «Аналитика» |
Подсистемы "Аналитика" предназначена для анализа детальной информации на основании данных, полученных из подсистем «Обмен данными лабораторных исследований», «Интегрированная электронная медицинская карта», «Индекс пациента», «Управление НСИ» |
Подсистема «УНСИ» |
Подсистема «Управление нормативно-справочной информацией» |
РЕГИЗ |
Государственная информационная система Санкт‑Петербурга «Региональный фрагмент единой информационной системы в сфере здравоохранения» |
Электронный сервис |
Система взаимодействия, включающая информационные базы данных, в том числе содержащие сведения об используемых органами и организациями программных и технических средствах, обеспечивающих возможность доступа через систему взаимодействия к их информационным системам |
УКФ (синоним УДКФ) |
Учет движения коечного фонда |
ИС |
Информационная система |
REST |
Архитектурный стиль |
Сервис обеспечивает:
Обмен данными между сервисами осуществляется в рамках следующих сценариев:
Схема информационного взаимодействия в рамках сценария «Передача сведений о состоянии коечного фонда» представлена на рисунке Рисунок 1.
Рисунок 1. Схема информационного взаимодействия в рамках сценария «Передача сведений о состоянии коечного фонда»
Базовый сценарий «Передача сведений о состоянии коечного фонда» представляет собой следующую последовательность шагов:
Схема информационного взаимодействия в рамках сценария «Поиск данных о движении коечного фонда по параметрам» - по профилю медицинской помощи, по идентификатору МО на рисунке Рисунок 2.
Рисунок 2. Схема информационного взаимодействия в рамках сценария «Поиск данных о движении коечного фонда по параметрам»
Базовый сценарий «Поиск данных о движении коечного фонда по параметрам» представляет собой следующую последовательность шагов:
Инициатором взаимодействия с сервисом УКФ выступают МИС медицинских организаций и ИС других заинтересованных сторон. Наименования методов определены с позиции МИС медицинских организаций как инициаторов взаимодействия.
Токен авторизации - параметр authorization.
Формат обмена данными: Content-Type: application/fhir+json.
Информационный обмен осуществляется в соответствии со стандартом FHIR® (Fast Healthcare Interoperability Resources), разработанным организацией HL7. Используемая версия FHIR DSTU2, 1.0.2. Подробное описание стандарта доступно по следующим ссылкам:
В качестве протокола взаимодействия используется RESTful AP (использование REST-протокола в FHIR® – см. http://fhir-ru.github.io/http.html).
Передающая система должна быть зарегистрована в Справочнике Участники информационного обмена N3.Здравоохранение - OID 1.2.643.2.69.1.2.
Функциональность сервиса УКФ обеспечивается следующими методами:
Процессы консолидации, первичной обработки и ведения нормативно-справочной информации обеспечиваются «Сервисом НСИ».
Описание «Сервиса НСИ» и правила взаимодействия с ним приведены в соответствующем разделе (доступен по ссылке: http://api.n3med.ru/api/nsi/).
Используемые сервисом обмена УКФ справочники:
Метод предназначен для передачи в сервис УКФ сведений о движении коечного фонда МО за временной период. При положительном результате проверок входных данных и обработки метода будет сформирован и передан в составе выходных параметров уникальный идентификатор объекта. В обмене ожидаются сведения по всем активным профилям МО.
В таблице представлено описание параметров ресурса HealthcareService.
Параметр |
Тип |
Обяза-тельность[1] |
Описание |
resourceType |
HealthcareService |
1..1 |
Тип ресурса |
id |
guid |
0..1 |
Идентификатор ресурса (заполняется сервисом при приеме данных) |
providedBy |
Reference(Organization) |
1..1 |
Ссылка на объект типа Organization c указанием идентификатора МО, передающей сведения, по справочнику НСИ 1.2.643.2.69.1.1.1.64 |
characteristic |
valueCodeableConcept |
1..1 |
Код профиля койки по справочнику НСИ 1.2.643.5.1.13.2.1.1.221 (или другой выбранный для регионального процесса) |
extension |
valueInteger |
0..* |
Расширение для передачи значений количества коек |
TotalBedCount |
valueInteger |
0..1 |
Общее количество коек, при приеме данных выполняется проверка условия - значения передаваемое в параметре должно быть больше либо равно сумме значений из параметров BedCountOnRepair, OccupiedBedCount, FreeBedCount |
BedCountOnRepair |
valueInteger |
0..1 |
Количество закрытых на ремонт коек |
PrevDayOccupiedBedCount |
valueInteger |
0..1 |
Количество занятых коек на начало истекших суток |
OccupiedBedCount |
valueInteger |
0..1 |
Количество занятых коек на начало текущих суток |
AccompPersonCount |
valueInteger |
0..1 |
Количество сопровождающих при больных детях |
FreeBedCount |
valueInteger |
0..1 |
Количество свободных коек, при приеме данных выполняется проверка условия - значения передаваемое в параметре должно быть больше либо равно сумме значений из параметров FreeBedCountMale, FreeBedCountFemale, FreeBedCountChild |
FreeBedCountMale |
valueInteger |
0..1 |
Количество свободных коек мужских |
FreeBedCountFemale |
valueInteger |
0..1 |
Количество свободных коек женских |
FreeBedCountChild |
valueInteger |
0..1 |
Количество свободных коек детских |
ActualOn |
valuePeriod |
1..1 |
Период отчета, даты в периоде не должны быть в будущем, и не должны быть в прошлом более чем на одни календарные сутки |
start |
valueDatetime |
1..1 |
Дата и время начала периода в формате по стандарту ISO8601 с указанием таймзоны (YYYYMMDDThhmmss±hhmm или YYYYMMDDThhmmssZ) |
end |
valueDatetime |
0..1 |
Дата и время конца периода в формате по стандарту ISO8601 с указанием таймзоны (YYYYMMDDThhmmss±hhmm или YYYYMMDDThhmmssZ) |
[1] «Обязательность» означает количество возможных значений реквизита в контейнере:
0..1 – означает, что реквизит необязательный, максимальное количество экземпляров 1;
0..* – реквизит необязательный, максимальное количество экземпляров не ограничено;
1..1 – реквизит обязательный, экземпляр один;
1..* – реквизит обязательный, максимальное количество экземпляров не ограничено.
Для передачи нескольких ресурсов с данными о движении коек разного профиля должен использоваться Bundle типа транзакция.
При приеме данных сервис выполнит проверку значений для количественных параметров - допустимы целые неотрицательные (больше или равно 0, и целое) (TotalBedCount, BedCountOnRepair, PrevDayOccupiedBedCount, OccupiedBedCount, AccompPersonCount, FreeBedCount, FreeBedCountMale, FreeBedCountFemale, FreeBedCountChild).
В ответ метод вернет структуру объекта из запроса, расширив ее уникальным идентификатором (id). Описание обработки ошибок приведено в разделе 8.
Метод предназначен для поиска сведений о движениии коечного фонда в базе данных сервиса УКФ по параметрам.
В таблице представлено описание параметров ресурса Parameters, используемого для запроса метода поиска.
Параметр |
Тип |
Обяза-тельность[2] |
Описание |
resourceType |
Parameters |
Тип ресурса |
|
parameter |
0..* |
Параметры поиска, один или несколько |
|
name |
valueString/ valueDate / valuePeriod |
0..1 |
Наименование параметра поиска, здесь может быть код МО, код профиля койки, период отчета |
[2] «Обязательность» означает количество возможных значений реквизита в контейнере:
0..1 – означает, что реквизит необязательный, максимальное количество экземпляров 1;
0..* – реквизит необязательный, максимальное количество экземпляров не ограничено;
1..1 – реквизит обязательный, экземпляр один;
1..* – реквизит обязательный, максимальное количество экземпляров не ограничено.
В ответ метод вернет найденные объекты (структура параметров в объекте описана в пункте 5.1). Описание обработки ошибок приведено в разделе 8.
Система поддерживает хранение только актуальных данных из последней передачи в обмене. При приеме данных на хранение или обновление выполняется проверка наличия ранее переданных данных.
При передаче на хранение или обновление должно соблюдаться условие - данные в пакете Bundle только от одной МО.
При передаче на хранение или обновление пакет Bundle может содержать данные о нескольких профилях коек.
В случае, если данные об одном из профилей койки раннее передавались, то сервис обновляет запись на актуальную.
В случае, если данные от МО по профилю койки не обнаружены, сервис добавляет новую запись для этой МО и профиле койки и присваивает идентификатор.
При передаче данных на обновление дата в параметре "start" (значение начала периода в контейнере параметров "ActualOn" запроса с Bundle) не должна быть меньше той, что передавалась в ранее отправленном пакете.
Пример запроса |
Пример ответа |
В запросе данные от одной МО на обновление по профилю койки 219 и на добавление данных нового профиля койки 202. { "resourceType": "Bundle", "type": "transaction", "entry": [ { "resource": { "resourceType": "HealthcareService", "id":"00e1d604-dec7-4c69-ad5c-7a8225ace006", "extension": [ { "url": "AccompPersonCount", "valueInteger": 1 }, { "url": "BedCountOnRepair", "valueInteger": 2 }, { "url": "FreeBedCount", "valueInteger": 3 }, { "url": "FreeBedCountChild", "valueInteger": 4 }, { "url": "FreeBedCountFemale", "valueInteger": 5 }, { "url": "FreeBedCountMale", "valueInteger": 6 }, { "url": "OccupiedBedCount", "valueInteger": 7 }, { "url": "PrevDayOccupiedBedCount", "valueInteger": 8 }, { "url": "TotalBedCount", "valueInteger": 9 }, { "url": "ActualOn", "valuePeriod": { "start": "2020-07-17T12:00:00Z", "end": "2020-07-17T15:00:00Z" } } ], "providedBy": { "reference": "Organization/874f7758-2f74-4813-a285-7fbdc4b7b96e" }, "characteristic": [ { "coding": [ { "system": "urn:oid:1.2.643.5.1.13.2.1.1.221", "version": "2", "code": "219" } ] } ] } }, { "resource": { "resourceType": "HealthcareService", "extension": [ { "url": "AccompPersonCount", "valueInteger": 0 }, { "url": "BedCountOnRepair", "valueInteger": 0 }, { "url": "FreeBedCount", "valueInteger": 2 }, { "url": "FreeBedCountChild", "valueInteger": 0 }, { "url": "FreeBedCountFemale", "valueInteger": 0 }, { "url": "FreeBedCountMale", "valueInteger": 0 }, { "url": "OccupiedBedCount", "valueInteger": 0 }, { "url": "PrevDayOccupiedBedCount", "valueInteger": 0 }, { "url": "TotalBedCount", "valueInteger": 2 }, { "url": "ActualOn", "valuePeriod": { "start": "2020-07-16T12:00:00Z", "end": "2020-07-16T15:00:00Z" } } ], "providedBy": { "reference": "Organization/874f7758-2f74-4813-a285-7fbdc4b7b96e" }, "characteristic": [ { "coding": [ { "system": "urn:oid:1.2.643.5.1.13.2.1.1.221", "version": "2", "code": "202" } ] } ] } } ] } |
В ответе обновленные данные объекта id:"00e1d604-dec7-4c69-ad5c-7a8225ace006" и данные с идентификатором нового объекта: { "resourceType": "Bundle", "type": "transaction", "entry": [ { "resource": { "resourceType": "HealthcareService", "id": "00e1d604-dec7-4c69-ad5c-7a8225ace006", "extension": [ { "url": "AccompPersonCount", "valueInteger": 1 }, { "url": "BedCountOnRepair", "valueInteger": 2 }, { "url": "FreeBedCount", "valueInteger": 3 }, { "url": "FreeBedCountChild", "valueInteger": 4 }, { "url": "FreeBedCountFemale", "valueInteger": 5 }, { "url": "FreeBedCountMale", "valueInteger": 6 }, { "url": "OccupiedBedCount", "valueInteger": 7 }, { "url": "PrevDayOccupiedBedCount", "valueInteger": 8 }, { "url": "TotalBedCount", "valueInteger": 9 }, { "url": "ActualOn", "valuePeriod": { "start": "2020-07-17T12:00:00Z", "end": "2020-07-17T15:00:00Z" } } ], "providedBy": { "reference": "Organization/874f7758-2f74-4813-a285-7fbdc4b7b96e" }, "characteristic": [ { "coding": [ { "system": "urn:oid:1.2.643.5.1.13.2.1.1.221", "version": "2", "code": "219" } ] } ] } }, { "resource": { "resourceType": "HealthcareService", "id":"88223fbe-ecdb-4951-9ab7-4113121dfafb", "extension": [ { "url": "AccompPersonCount", "valueInteger": 0 }, { "url": "BedCountOnRepair", "valueInteger": 0 }, { "url": "FreeBedCount", "valueInteger": 2 }, { "url": "FreeBedCountChild", "valueInteger": 0 }, { "url": "FreeBedCountFemale", "valueInteger": 0 }, { "url": "FreeBedCountMale", "valueInteger": 0 }, { "url": "OccupiedBedCount", "valueInteger": 0 }, { "url": "PrevDayOccupiedBedCount", "valueInteger": 0 }, { "url": "TotalBedCount", "valueInteger": 2 }, { "url": "ActualOn", "valuePeriod": { "start": "2020-07-16T12:00:00Z", "end": "2020-07-16T15:00:00Z" } } ], "providedBy": { "reference": "Organization/874f7758-2f74-4813-a285-7fbdc4b7b96e" }, "characteristic": [ { "coding": [ { "system": "urn:oid:1.2.643.5.1.13.2.1.1.221", "version": "2", "code": "202" } ] } ] } } ] } |
При приеме сведений в сервис данные, содержащие дату и время обрабатываются по стандарту ISO8601 (по UTC) c учетом таймзоны. Время в параметрах с датой из запроса может быть указано как в виде YYYYMMDDThhmmss±hhmm, так и YYYYMMDDThhmmssZ. Описание ответа представлено в таблице, и в том и в другом случае сохраниться один и тот же момент времени, переданный в запросе.
Пример из запроса |
Пример из ответа |
Вариант передачи 1: в виде YYYYMMDDThhmmss±hhmm "url": "ActualOn", "valuePeriod": { "start": "2020-07-16T10:32:00+03:00", "end": "2020-07-16T10:33:00+03:00" } |
Вариант ответа 1: в виде YYYYMMDDThhmmssZ (что равнозначно виду YYYYMMDDThhmmss±00:00) "url": "ActualOn", "valuePeriod": { "start": "2020-07-16T07:32:00Z", "end": "2020-07-16T07:33:00Z" } |
Вариант передачи 2: в виде YYYYMMDDThhmmssZ "url": "ActualOn", valuePeriod": { "start": "2020-07-16T10:32:00Z", "end": "2020-07-16T10:33:00Z" } |
Вариант ответа 2: в виде YYYYMMDDThhmmssZ "url": "ActualOn", "valuePeriod": { "start": "2020-07-16T10:32:00Z", "end": "2020-07-16T10:33:00Z" } |
При обработке любого метода в сервисе УКФ выполняется проверка всех параметров. При отрицательном результате выполнения проверки переданных параметров выходные данные будут содержать массив элементов обо всех обнаруженных ошибках. Типизированный сценарий обработки ошибки предполагает вывод кода из стандартного набора системных кодов.
Код ошибки |
Описание |
1. |
Внутренняя ошибка сервиса |
2. |
[Наименование параметра] [Значение параметра] не найдено в сервисе терминологии [OID справочника] |
3. |
В коллекции найдено больше одного значения [Наименование параметра] |
4. |
Элемент {0}: Свойство [Наименование параметра] является недействительным значением |
5. |
Элемент {0}: Значение [Значение параметра] не найдено в справочнике [OID справочника] |
6. |
Элемент {0}: Свойство [Наименование параметра] не заполнено |
7. |
Элемент {0}: Справочник [OID справочника] должен быть [OID справочника] |
8. |
Элемент {0}: Некорректный код [Значение параметра] с версией [Значение параметра] в справочнике [OID справочника] |
9. |
Элемент {0}: Свойство [Наименование параметра] должно быть больше нуля |
10. |
Элемент {0}: Сумма значений [Наименование параметра], [Наименование параметра], [Наименование параметра] должна быть меньше или равна [Наименование параметра] |
11. |
Элемент {0}: Свойство [Наименование параметра] не должно содержать значения в будущем |
12. |
Элемент {0}: Свойство [Наименование параметра] не может быть раньше, чем вчера |
13. |
Элемент {0}: Свойство [Наименование параметра] должно быть больше, чем [Наименование параметра] |
14. |
Свойство [Значение параметра] является недействительным значением |
15. |
Свойства [Наименование параметра], [Наименование параметра] или [Наименование параметра] должны быть заполнены |
16. |
Свойство [Значение параметра] не является guid'ом или заполнено недействительным значением |
17. |
Значение [Значение параметра] не найдено в справочнике [OID справочника] |
18. |
Свойство [Наименование параметра] не заполнено |
19. |
Справочник [OID справочника] должен быть [OID справочника] |
20. |
Свойство [Наименование параметра] не должно содержать значения в будущем |
21. |
Свойство [Наименование параметра] должно быть больше, чем [Наименование параметра] |
22. |
Значение даты [Наименование параметра] должно быть больше или равно, чем ранее переданная дата [Наименование параметра] для данного профиля коек |
23. |
Элемент {0}: Сумма значений [Наименование параметра], [Наименование параметра], [Наименование параметра] должна быть равна [Наименование параметра]' |
24. |
Элемент {0}: OrgId указанной МО [Значение параметра] в токене не равен OrgId переданной МО [Значение параметра] |
POST [base]/api/Bundle { "resourceType": "Bundle", "type": "transaction", "entry": [ { "resource": { "resourceType": "HealthcareService", "extension": [ { "url": "AccompPersonCount", "valueInteger": 1 }, { "url": "BedCountOnRepair", "valueInteger": 1 }, { "url": "FreeBedCount", "valueInteger": 6 }, { "url": "FreeBedCountChild", "valueInteger": 0 }, { "url": "FreeBedCountFemale", "valueInteger": 0 }, { "url": "FreeBedCountMale", "valueInteger": 6 }, { "url": "OccupiedBedCount", "valueInteger": 7 }, { "url": "PrevDayOccupiedBedCount", "valueInteger": 8 }, { "url": "TotalBedCount", "valueInteger": 14 }, { "url": "ActualOn", "valuePeriod": { "start": "2021-03-29T00:00:00Z", "end": "2021-03-30T00:00:00Z" } } ], "providedBy": { "reference": "Organization/3b4b37cd-ef0f-4017-9eb4-2fe49142f682" }, "characteristic": [ { "coding": [ { "system": "urn:oid:1.2.643.5.1.13.2.1.1.221", "version": "2", "code": "216" } ] } ] } }, { "resource": { "resourceType": "HealthcareService", "extension": [ { "url": "AccompPersonCount", "valueInteger": 10 }, { "url": "BedCountOnRepair", "valueInteger": 11 }, { "url": "FreeBedCount", "valueInteger": 12 }, { "url": "FreeBedCountChild", "valueInteger": 1 }, { "url": "FreeBedCountFemale", "valueInteger": 1 }, { "url": "FreeBedCountMale", "valueInteger": 10 }, { "url": "OccupiedBedCount", "valueInteger": 16 }, { "url": "PrevDayOccupiedBedCount", "valueInteger": 17 }, { "url": "TotalBedCount", "valueInteger": 39 }, { "url": "ActualOn", "valuePeriod": { "start": "2021-03-29T00:00:00Z", "end": "2021-03-30T00:00:00Z" } } ], "providedBy": { "reference": "Organization/3b4b37cd-ef0f-4017-9eb4-2fe49142f682" }, "characteristic": [ { "coding": [ { "system": "urn:oid:1.2.643.5.1.13.2.1.1.221", "version": "2", "code": "18" } ] } ] } } ] }
{ "resourceType": "Bundle", "type": "transaction", "entry": [ { "resource": { "resourceType": "HealthcareService", "id": "c65378f7-b3fa-4e17-a8a1-1195c6667f10", "extension": [ { "url": "AccompPersonCount", "valueInteger": 1 }, { "url": "BedCountOnRepair", "valueInteger": 1 }, { "url": "FreeBedCount", "valueInteger": 6 }, { "url": "FreeBedCountChild", "valueInteger": 0 }, { "url": "FreeBedCountFemale", "valueInteger": 0 }, { "url": "FreeBedCountMale", "valueInteger": 6 }, { "url": "OccupiedBedCount", "valueInteger": 7 }, { "url": "PrevDayOccupiedBedCount", "valueInteger": 8 }, { "url": "TotalBedCount", "valueInteger": 14 }, { "url": "ActualOn", "valuePeriod": { "start": "2021-03-29T00:00:00Z", "end": "2021-03-30T00:00:00Z" } } ], "providedBy": { "reference": "Organization/3b4b37cd-ef0f-4017-9eb4-2fe49142f682" }, "characteristic": [ { "coding": [ { "system": "urn:oid:1.2.643.5.1.13.2.1.1.221", "version": "2", "code": "216" } ] } ] } }, { "resource": { "resourceType": "HealthcareService", "id": "ab01eba3-4716-45b5-ab1c-40d3c4e7fed3", "extension": [ { "url": "AccompPersonCount", "valueInteger": 10 }, { "url": "BedCountOnRepair", "valueInteger": 11 }, { "url": "FreeBedCount", "valueInteger": 12 }, { "url": "FreeBedCountChild", "valueInteger": 1 }, { "url": "FreeBedCountFemale", "valueInteger": 1 }, { "url": "FreeBedCountMale", "valueInteger": 10 }, { "url": "OccupiedBedCount", "valueInteger": 16 }, { "url": "PrevDayOccupiedBedCount", "valueInteger": 17 }, { "url": "TotalBedCount", "valueInteger": 39 }, { "url": "ActualOn", "valuePeriod": { "start": "2021-03-29T00:00:00Z", "end": "2021-03-30T00:00:00Z" } } ], "providedBy": { "reference": "Organization/3b4b37cd-ef0f-4017-9eb4-2fe49142f682" }, "characteristic": [ { "coding": [ { "system": "urn:oid:1.2.643.5.1.13.2.1.1.221", "version": "2", "code": "18" } ] } ] } } ] }
POST [base]/api/HealthcareService/_search { "resourceType": "Parameters", "parameter": [ { "name": "Organization", "valueString": "3b4b37cd-ef0f-4017-9eb4-2fe49142f682" }, { "name": "actualOnStart", "valueDate": "2021-03-29T00:32:00Z" } ] }
POST [base]/api/HealthcareService/_search { "resourceType": "Parameters", "parameter": [ { "name": "system", "valueString": "urn:oid:1.2.643.5.1.13.2.1.1.221" }, { "name": "code", "valueString": 219 }, { "name": "actualOn", "valuePeriod": { "start": "2021-11-17T01:00:00Z", "end": "2021-11-17T12:40:00Z" } } ] }