Регламент по телемедицине

Сервис интеграционной платформы N3 «Подсистемы Управление потоками» обеспечивает механизмы взаимодействия и обмена медицинскими данными между различными информационными системами, обслуживающими процесс передачи сведений о заявках в рамках конкретной бизнес-логики.

Ниже представлено описание регламента работы с сервисом. В состав описания включены схемы процессов, описание используемых технологий, методов, входных и выходных данных.

Описание решения

Описание процесса обмена данными о заявках

Подсистема УП предназначена для обмена информацией по заявкам в рамках указанного процесса. Для разных типов заявок МО может выступать как в роли направляющей МО, так и в роли целевой (консультирующей) МО.

Процесс обмена данными о заявках в рамках типового решения, реализуемый в УП, поддерживает выполнение следующих действий:

  1. Получение маршрутов прохождения заявок и описания операций, в рамках которых доступно право создавать заявки.
  2. Создание заявки по выбранному маршруту.
  3. Получение списка заявок, которые имеют операции доступные данному получателю.
  4. Получение списка заявок в статусах, которые доступны для просмотра и действия.
  5. Получение сведений заявки по её идентификатору.
  6. Получение набора данных (объекта контекста) собранного при работе с заявкой.
  7. Получение перечня переходов (операций), которые доступных в текущем состоянии заявки.
  8. Получение условий перехода (выполнения операций) к новому состоянию (статусу) заявки.
  9. Получение схемы данных (объекта контекста), необходимого для осуществления перехода к новому состоянию (статусу) заявки.
  10. Запрос перехода заявки в новое состояние согласно указанному правилу перехода.

УП предоставляет возможность реализации различных сценариев работы с заявками. Сценарии зависят от набора операций, доступных для заявки в рамках указанного процесса. Под операциями понимаются различные действия над заявкой, такие как распределение заявки врачу-консультанту, возврат заявки запрашивающему врачу на дополнение, отказ в консультации по заявке, дополнение заявки сведениями, формирование заключения по заявке и т.д.

Описание базового сценария обмена

Подсистема Управление потоками предназначена для получения, ведения, хранения, поиска и выдачи сведений о заявках согласно контексту бизнес-процесса.

Обмен данными между МИС МО и подсистемой Управление потоками осуществляется в результате выполнения шагов следующего базового сценария:

  1. Получить из подсистемы список маршрутов и операций, доступных для создания и продвижения заявки.
  2. Получить из системы по выбранному маршруту описания условий перехода к новому состоянию заявки.
  3. На основе полученных данных выполнить запрос схем передачи данных, необходимых для осуществления операции создания заявки: формат структуры данных передаваемых в заявку, используемых при описании характеристик пользователя.
  4. Создать заявку по указанному маршруту.
  5. Запросить список заявок, доступных для осуществления операций согласно их текущему состоянию. МИС МО запрашивает наличие заявок у подсистемы Управление потоками для последующих действий.
  6. Получить из системы контекст по заявке для принятия решения о последующем действии. МИС МО запрашивает объект контекста с содержанием заявки по ее идентификатору.
  7. Выполнить запрос на изменение заявки для перевода её в следующее состояние в рамках указанного процесса. Передача информации из МИС МО в подсистему УП об изменении состояния заявки и переходе к новому статусу. Выполнение производится до тех пор, пока заявка не будет приведена к конечному состоянию.
  8. Запросить список заявок доступных для просмотра. МИС МО запрашивает список заявок у подсистемы УП для просмотра изменений по заявкам.
  9. Получить из системы контекст по закрытой заявке для получения консультативного заключения.

Описание протокола взаимодействия

Общая информация о сервисе

В качестве протокола взаимодействия используется RESTful API. Данные необходимо передавать в формате JSON, должен присутствовать http заголовок content-type: application/json.

Информационный обмен может осуществляется в соответствии со стандартом FHIR® (Fast Healthcare Interoperability Resources), разработанным организацией HL7. Требуемая версия FHIR R4, 4.0.0. Подробное описание стандарта — http://hl7.org/FHIR/. Использование REST- протокола в FHIR® – см. http://FHIR-ru.github.io/http.html.

Использование справочников

Справочники, используемые в сервисе, опубликованы в «Сервисе Терминологии». Описание сервиса Терминологии и правила взаимодействия с ним приведены по ссылке: http://api.netrika.ru/docs.php?article=Terminology.

Для каждого использованного в обмене справочника в схеме данных указан OID (объектный идентификатор).

Параметры схемы, указывающие на значения справочников, представляются в следующей виде:

 Раскрыть

{

  "type": "string",

  "title": "<Текстовое значение параметра>",

  "description": "<Инструкции по заполнению с указанием источника - oid справочника>"       

}

Роли пользователей передаются согласно справочнику НСИ: 1.2.643.5.1.13.2.1.1.734

Медицинские организации передаются согласно справочнику НСИ: 1.2.643.2.69.1.1.1.64

Полный перечень используемых сервисом справочников перечислен в описании параметров объектов.

Внутренняя логика сервиса

Описание данных

Структуры данных, которыми системы обмениваются в ходе работы с заявками, описываются с помощью json-схем. Идентификаторы схем содержатся в описании операций (переходов между статусами) над заявками.

Предметная область – сущность, объединяющая под собой описания данных и маршруты бизнес-процессов.

Общий набор данных - json-схема, описывающая все возможные поля и структуры данных, используемых в документообороте. Схемы, описанные ниже, должны быть сконструированы на основе общего набора данных. Это обеспечивает автоматизацию сбора, поиска и агрегации данных. Хранится одна схема на предметную область.

Метаданные маршрутов бизнес-процессов - json-схема описывающая краткий набор ключевых характеристик маршрута бизнес процесса в рамках предметной области. Позволяет выводить контекстную информацию о маршрутах в списке, строить по маршрутам форму фильтрации. Заявки также можно фильтровать по метаданным маршрутов. Хранится одна схема на предметную область.

Метаданные заявок - json-схема, описывающая краткий набор ключевых характеристик заявки. Позволяет выводить контекстную информацию о заявках в списке, строить по заявкам форму фильтрации. Хранится одна схема на предметную область.

Данные, используемые при операциях с заявками - json-схема, описывающая набор и структуру данных необходимых для передачи со стороны пользователя при совершении операции с заявкой. Можно создать в рамках предметной области столько, сколько требуется.

Роли - json-схема, описывающая набор и структуру данных необходимых для передачи информации о пользователе при проверке доступа к функциям системы. Можно создать в рамках предметной области столько, сколько требуется. Пользователь может на входе передавать несколько наборов присвоенных ему ролей. Например, пользователь может быть одновременно врачом в одной организации и административным руководителем в другой. Соответственно заявки и маршруты ему будут подбираться с учетом обеих его ролей.

Маршрут и его описание

Маршрут - описание порядка выполнения операций в ходе исполнения работ по заявкам.

 Рисунок 2 Схема состояний и операций над заявкой

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

Состояния или статусы (1, 2, 3 на рисунке) - это контрольные точки в бизнес-процессе. Они создаются в рамках маршрута с указанием имени и правил доступа. Правило доступа описывает, какому пользователю может быть доступна заявка для просмотра в данном статусе.

Переходы (а, б, в, г, д, е на рисунке) - это операции над заявкой по данному маршруту.

Если стартовое состояние перехода не указано (а, б на рисунке), то он используется для создания заявки в том статусе, который указан как конечный. Операций создания заявки по маршруту может быть сколько угодно с любой логикой. Например, можно настроить создание заявки со статусом доступным исполнителю. Можно создать заявку в статусе “черновик”, доступным заявителю.

Если стартовое состояние указано тоже, что и конечное (е на рисунке), то операция не изменит статус заявки. Решает задачу редактирования данных заявки без необходимости изменения статуса.

При указании конечного состояния отличного от стартового - заявка меняет состояние (в, г, д на рисунке).

Для типового маршрута в подсистеме Управление потоками определен следующий набор состояний заявки:

  • Черновик
  • Направлено в МО
  • Отклонено
  • Передано врачу
  • В листе ожидания
  • Запрашивается дополнительная информация
  • Подготовка заключения
  • Заключение готово
  • Организация консилиума
  • Подготовка заключения консилиумом
  • Подпись заключения участниками консилиума
  • На подписи у председателя консилиума
  • Заключение консилиума готово

Каждое из состояний заявки имеет свой уникальный идентификатор в системе.

Переходы и ролевой доступ к просмотру

Содержание правил перехода в рамках маршрута:

  1. Название операции или перехода.
  2. Начальное состояние. Не указывается, если операция предназначена для создания заявки.
  3. Итоговое состояние. Указывается обязательно.
  4. Набор данных, необходимых для осуществления операции.
  5. Проверки. Осуществляют проверки доступа к выполнению операции и другую бизнес-логику, необходимую для поддержки бизнес-процесса. Текстовое описание каждой проверки содержится в описаниях операций.
  6. Отклики. Уведомление внешнего сервиса о факте перехода конкретной заявки в определенный статус. Текстовое описание каждого отклика содержится в описаниях операций.

Для определения ролевого доступа к просмотру и работе с заявками используется «ролевой контекст». Например, для предметной области «Тестовая область» ролевой контекст определён набором json-схем. Основной ролевой схемой для работы пользователей МИС является данная схема:

 Раскрыть

 

{

 "type": "object",

 "$schema": "http://json-schema.org/draft-04/schema#",

 "required": [

 "organization",],

 "properties": {

 "organization": {

  "type": "string",

  "title": "Организация пользователя",

  "examples": [

  "Organization/a7ad714e-7c68-4950-ac7d-408bb68e23e9"

  ],

  "description": "Заполняется согласно справочнику НСИ 1.2.643.2.69.1.1.1.64"

 },

 "SNILS": {

  "type": "string",

  "title": "СНИЛС",

  "examples": [

  "89322342342"

  ],

  "description": "СНИЛС сотрудника заполняется без пробелов и тире"

 }

 }

}

Пример ролевого контекста согласно данной схеме:

 Раскрыть

 

"roleContext": {
    "5ff16ba7-9edd-41a4-bd06-2ee33cfd4597": {
      "organization": "910bbc2e-e8c3-489d-aee4-5810797b212b",
      "SNILS": "11122233344"
    }
  }

Так же идентификатор схемы ролевого контекста возможно получить при получении сведений о маршруте (getWorkflow) и операции над заявкой (getTransition). Саму схему в последствии можно запросить методом «getSchema».

 

"5ff16ba7-9edd-41a4-bd06-2ee33cfd4597" – в примере ролевого контекста должно являться идентификатором ролевой схемы соответствующей настройкам доступа на маршруте, смотрите приложение к регламенту.

Описание методов

Состав методов сервиса

Функциональность подсистемы Управление потоками обеспечивается следующими методами:

Структура данных заявки

В методах сервиса для передачи набора данных заявки используется параметр типа «Object» - processContext.

В обмене для структуры данных о заявке используется несколько объектов. Перечень объектов и описание их назначения представлено в таблице ниже.

Данные в параметре типа «Object» - processContext могут быть описаны в формате стандарту FHIR.

Таблица 2 Описание объектов, входящих в состав типовой заявки

№ п/п

Объект

Назначение объекта по бизнес-логике

Описание

1

patient

Пациент

В объекте указывается информация о пациенте.

2

requesterPractitioner

Врач направляющей МО

В объекте указывается информация о медицинском специалисте направляющей МО

3

serviceRequest

Параметры заявки

В объекте указывается информация об общих параметрах заявки

4

requesterCondition

Состояние пациента от направляющей МО

В объекте указывается информация о состоянии пациента со стороны направляющей МО

5

diagnosticResults

Результаты диагностических исследований

В объекте указывается информация о результатах диагностических исследований пациента со стороны направляющей МО

6

medication

Лекарственные препараты

В объекте указывается информация о принимаемых пациентом лекарственных препаратах

7

observation

Объективные данные осмотра

В объекте указывается информация о состоянии пациента, объективные данные о состоянии пациента при осмотре

8

attachedfiles

Прикрепленные файлы

В объекте указывается информация о прикрепленных файлах, в том числе откреплённых подписях к файлам

9

communication

Комментарий при отказе обработки заявки

В объекте указывается информация комментарии при отказе обработки заявки

10

appointment

Бронирование времени обслуживания

В объекте указывается информация о времени (фактическом, желаемом) обработки заявки

11

performerPractitioner

Врач целевой МО

В объекте указывается информация о медицинском специалисте целевой МО, отвечающем за консультацию

 12

performerCondition

Диагноз

В объекте указывается информация об анамнезе и диагнозах установленных при осмотре пациента со стороны целевой МО.

13

diagnosticReport

Заключение

В объекте указывается информация о параметрах заключения целевой организации

14

presentedForm

Консультативное заключение

В объекте указывается информация о ссылке на файлы документа и подписи документа заключения

15

council

Состав консилиума

В объекте указывается информация о составе консилиума и председателе консилиума

Структура метаданных заявки

Использование метаданных заявок применяется для вывода контекстной информацию о заявках в списке, для построения форм фильтрации по заявкам. Это общая логика для всех заявок вне зависимости от методов работы с заявками.

В приведенном ниже примере описания структуры метаданных заявки описывается набор и структура формируемых параметров заявки и пути их нахождения в её контексте (наборе структурированных данных агрегированных по ходу заявки по маршруту).

 Раскрыть

"schema": 

{

  "type": "object",

  "$schema": "http://json-schema.org/draft-04/schema#",

  "properties": {

   "patient": {

    "selector": "$.patient.idMPI"

        },

   "performer": {

          "selector": "$.serviceRequest.performerOrganization"

        },

   "requester": {

     "selector": "$.serviceRequest.requesterOrganization"

        },

   "resultMedicalCare": {

     "selector": "$.serviceRequest.resultMedicalCare"

        },

   "resultAmbulanceDepartureType": {

     "selector": "$.serviceRequest.resultAmbulanceDepartureType"

        }

      }

}

Пример структуры метаданных конкретной заявки по схеме, приведенной выше:

"metadata":

{

   "patient": "8ff30a0b-85c3-462c-aae1-3ec719b3c1a3",

   "performer": "fc2c38ce-6599-4ff3-ae82-915b91a07db9",

   "resultMedicalCare": "5",

   "resultAmbulanceDepartureType": "3"

},
  • Name - имя процесса или значение человек ориентированного идентификатора (поиск по неполному совпадению).
  • Workflow - название маршрута или его идентификатор (точное совпадение).
  • Metadata - фильтр по объекту метаданных процесса (правила сопоставления Json-объектов см ниже).
  • Created - дата (или период) создания процесса (описание передачи дат см. ниже).
  • Updated - дата (или период) обновления процесса (описание передачи дат см. ниже).

Описание принципа сопоставления Json-объектов при использовании в качестве фильтров метаданных маршрута или заявки:

В качестве фильтра принимается Json-объект, в котором путь к искомому значению будет таким же как в объекте, где производится поиск. Например, в метаданных процесса есть следующие данные в формате обмена:

 Раскрыть

{


 "patientName": "Alexander",

 "diagnosis": {

  "name": "some name",

  "code": 315

 },

 "participant": {

  "name": "Ivan",

  "cpecialityCodes": [

   103,

   203,

   304

  ]

 }

}

В таком случае, для доступа к полю "code" в объекте "diagnosis" нужно повторить путь к полю:

 Раскрыть

 {

 "diagnosis": {

  "code": 315

 }

}

 Все выбранные данные в объекте в любом случае будут приведены к строке, и выбор сопоставление производится с помощью SQL-конструкции LIKE (поиск вхождения подстроки). То следующее выражение будет эквивалентно предыдущему:

 Раскрыть

 {

 "diagnosis": {

  "code": "315"

 }

}

 Для выбора нескольких значений, одного и того же поля можно использовать перечисление значений в массиве, однако в таком случае будет использовано полное совпадение:

 Раскрыть

 {

 "diagnosis": {

  "code": [

   314,

   315,

   317

  ]

 }

}

 В случае, если в объекте фильтра будет несколько полей — итоговое выражение будет собираться с учётом того, что все выражения должны быть истиной.

 Раскрыть

 {

 "patientName": [

  "Alex",

  "Sam"

 ],

 "diagnosis": {

  "name": "some name",

  "code": [

   314,

   315,

   317

  ]

 }

}

Передача дат фильтрации:

Для передачи периода дат ожидается структура, представляющая собой массив дат, сериализованный в JSON:

 Раскрыть

"created": [

  "2020-12-17T11:58:30+03:00",

  "2020-12-18T13:58:30+03:00"

    ]

или

"updated": [

  "2020-12-17T11:58:30+03:00",

  "2020-12-18T13:58:30+03:00"

    ]

В случае если в массиве одна дата, будут выбраны все данные, в которых искомая дата будет больше чем, переданная в дата массиве. В случае, если передано больше 2х дат — все кроме первых двух будут проигнорированы.

 Параметры сортировки:

Для передачи сортировки необходимо передать имя из ответа в поле запроса orderingField. Поля доступные для передачи «Created», «Updated». 

Для сортировки по убыванию в поле запроса descendingOrder нужно передать true.

Получение списка переходов доступных для создания заявки (GetAvailableTransitions)

Метод предоставляет перечень маршрутов и описания операций, в рамках которых возможно создавать заявки.

Описание параметров запроса и ответа

Описание параметров запроса метода в таблице ниже.

Таблица 3 Входные параметры метода POST GetAvailableTransitions

№ п/п

Параметр

Тип

Кратность

Описание

1

roleContext

object

1..1

Значение ролевого контекста пользователя

2

WorkflowFilter

object

1..1

Значение фильтра (описание принципа работы фильтра в тексте ниже)

3

Skip

number

0..1

Количество пропущенных элементов в выборке

4

Take

number

0..1

Количество элементов в списке

Фильтр

Объект для фильтрации по маршруту. Все поля являются опциональными (не обязательными). Пример конструкции фильтра:

 "WorkflowFilter": {

  "name": "",

  "metadata": {},

 }
  • Name - название маршрута (точное совпадение);

  • Metadata - фильтр по объекту метаданных маршрута (правила сопоставления Json-объектов описаны выше).

Метаданные маршрута описываются по соответствующей схеме и указываются при его создании или редактировании администратором системы.

Описание структуры ответа:

Таблица 4 Выходные параметры метода POST GetAvailableTransitions

№ п/п

Параметр

Тип

Кратность

Описание

1

roleContext

object

1..1

Значение ролевого контекста пользователя

2

WorkflowFilter

object

1..1

Значение фильтра

3

Skip

number

0..1

Количество пропущенных элементов в выборке

4

Take

number

0..1

Количество элементов в списке

5

roleContext

object

1..1

Значение ролевого контекста пользователя

Пример запроса

 Пример запроса

POST {{url}}/api/Queries/GetAvailableTransitions

authorization: N3[пробел][GUID передающей системы]

content-type: application/json

{

 "RoleContext": {},

 "WorkflowFilter":

{

  "Organization": "dfe3eec2-8a79-4921-9b58-0ce03a5e6c10"

 },

 "Skip": 0,

 "Take": 10 }

Получение маршрута обработки заявки по идентификатору (GetWorkflow)

Метод возвращает данные о статусах и операциях на маршруте по идентификатору. С помощью возвращаемых данных можно узнать все возможные состояния заявки, перечень возможных операций и переходов между статусами, выполняемые проверки при попытках выполнения переходов и условия доступности заявок на каждом из статусов.

Описание параметров запроса и ответа

В таблице ниже представлено описание параметров запроса метода.

Таблица 5 Входные параметры метода GET GetWorkflow

№ п/п

Параметр

Тип

Кратность

Описание

1

workflowId

String

1..1

Идентификатор маршрута

Описание структуры ответа

Таблица 6 Выходные параметры метода GET GetWorkflow

№ п/п

Параметр

Тип

Кратность

Описание

1

ErrorCode

string

1..1

Код результата операции

2

Message

string

1..1

Описание результата операции

3

result.Id

string

1..1

Системный идентификатор маршрута

4

result.Name

string

1…*

Название маршрута

5

result.Description

string

1..1

Описание маршрута

6

result.IsContruction

string

1..1

Статус отладки. Если передано True, то маршрут является пилотным

7

result.AreaId

string

1..1

Идентификатор предметной области, в рамках которой существует маршрут

8

result.AreaName

string

1..1

Имя предметной области, в рамках которой существует маршрут

9

result.MetadataID

Array

0..1

Идентификатор метаданных маршрута

10

result.Metadata

object

0..1

Структура метаданных маршрута

11

result.Stages

Array

0..*

Статусы

12

result.Stages.StageId

object

0..1

Статус

13

result.Stages.StageId.Id

string

1..1

Идентификатор статуса

14

result.Stages.StageId.Name

string

1..1

Название статуса

15

result.Stages.StageId.Description

string

0..1

Описание статуса

16

result.Stages.StageId.Validators

Array

0..1

Проверки, выполняемые для доступа к данным по заявке, когда она находится в данном статусе

17

result.Stages.StageId.Validators.Id

String

1..1

Идентификатор проверки

18

result.Stages.StageId.Validators.Name

String

1..1

Название проверки

19

result.Stages.StageId.IsDisabled

boolean

1..1

Статус блокировки

20

result.Stages.StageId.BusinessStatus

Object

0..1

Статус согласно справочнику НСИ

21

result.Stages.StageId.BusinessStatus.System

string

0..1

OID справочника статусов

22

result.Stages.StageId.BusinessStatus.Code

string

0..1

Код статуса

23

result.Transitions

Array

0..1

Операции

24

result.Transitions.TransitionId

Object

1..1

Операция (переход)

25

result.Transitions.TransitionId.Id

String

1..1

Идентификатор операции (перехода)

26

result.Transitions.TransitionId.Name

String

1..1

Название операции (перехода)

27

result.Transitions.TransitionId.FromStageId

String

0..1

Идентификатор статуса заявки, в котором можно совершить операцию. Если передаётся «null», то операция используется для создания заявки

28

result.Transitions.TransitionId.ToStageId

String

1..1

Идентификатор статуса заявки, в котором она окажется после осуществления операции (перехода)

29

result.Transitions.TransitionId.SchemaId

String

0..1

Идентификатор схемы данных необходимых для выполнения операции

30

result.Transitions.TransitionId.Validators

Object

1..*

Проверки,выполняемые при попытке выполнении операции (перехода)

31

result.Transitions.TransitionId.Validators.Id

String

1..1

Идентификатор проверки

32

result.Transitions.TransitionId.Validators.Name

String

1..1

Описание проверки

33

result.Transitions.TransitionId.Callbacks

Object

0..*

Уведомления внешних систем

34

result.Transitions.TransitionId.Callbacks.Id

string

1..1

Идентификатор уведомления

35

result.Transitions.TransitionId.Callbacks.Name

string

1..1

Описание уведомления, которое уходит при успешном выполнении операции (перехода)

36

result.IsDisabled

boolean

0..1

Свойство блокировки маршрута. Если маршрут заблокирован, то по нему будет невозможно создать новую заявку.

 Пример запроса

GET {{url}}/api/Queries/GetWorkflow/[id маршрута]

GET http://[hostname]/api/Queries/GetWorkflow/b3393395-06f7-4261-b403-5dc0dab1296b authorization: N3[пробел][GUID передающей системы]

content-type: application/json

Получение схемы данных передаваемых при осуществлении перехода (GetSchema)

Метод предназначен для получения схемы данных (объекта контекста), необходимого для осуществления перехода к новому состоянию заявки.

Описание параметров запроса и ответа

В таблице ниже представлено описание параметров запроса метода.

Таблица 7 Входные параметры для метода POST GetSchema

№ п/п

Параметр

Тип

Кратность

Описание

1

id

String

1..1

Идентификатор схемы

Описание структуры ответа

В описании структур, передаваемых в ответе данных в формате json-схемы, содержится описания типов передаваемых данных, кратности и обязательности. Справочные материалы в обмене данными в заявках используются в рамках справочников НСИ. В случае использования справочника, в описании структуры данных "description" указывается код справочника.

Если в рамках заявки требуется передать информацию о пациенте, зарегистрированном в ГИС, случае ИЭМК, результатах лабораторных или инструментальных исследований, направлении на оказание медицинской помощи, то согласно схеме описания данных для осуществления операции над заявкой потребуется указать идентификаторы данных объектов из соответствующих сервисов: Индекс пациента, ИЭМК, ОДЛИ, ОДИИ, УО.

 Пример запроса

GET {{url}}/api/Commands/GetSchema/[id схемы]

GET http://[hostname]/api/Queries/GetSchema/e57a49c0-717c-4d25-a045-114157567088

authorization: N3[пробел][GUID передающей системы]

content-type: application/json

Создание заявки (POST StartNewProcess)

Для создания заявки в сервисе используется метод POST StartNewProcess. Метод создаёт заявку по маршруту согласно переданному переходу.

Описание параметров запроса

В таблице ниже представлено описание параметров запроса метода.

Таблица 8 Входные параметры для метода POST StartNewProcess

№ п/п

Параметр

Тип

Кратность

Описание

1

workflowId

String

1..1

Идентификатор маршрута

2

name

String

1..1

Название заявки

3

initialTransitionId

String

1..1

Идентификатор перехода для создания заявки

4

processContext

Object

1..1

Набор данных (структура, смотреть в контрольных примерах)

5

roleContext

Object

1..1

Значение ролевого контекста пользователя

 Пример запроса

POST {{url}}/api/Commands/StartNewProcess

{

 "workflowId": "b3393395-06f7-4261-b403-5dc0dab1296b",

 "name": "Моя заявка",

 "initialTransitionId": "e9b2cce6-93ec-4118-8728-1580af7b9e82",

 "processContext": { <структура, смотреть в контрольных примерах> },

 "roleContext": {}

}

Редактирование/обновление заявки (POST MoveToStage)

Для редактирования или обновления данных заявки в сервисе используется метод POST MoveToStage. В базовом назначении метод позволяет осуществить запрос перехода заявки в новое состояние согласно указанному правилу перехода. Далее представлены варианты использования запроса метода при которых происходит переход заявки в новое состояние.

Помимо редактирования заявки, запрос метода используется для обновления состояния заявки в любых других операциях доступных по заявке.

Описание параметров запроса

В таблице ниже представлено описание параметров запроса метода.

Таблица 9 Входные параметры для метода POST MoveToStage

№ п/п

Параметр

Тип

Кратность

Описание

1

processId

String

1..1

Идентификатор заявки

2

transitionId

String

1..1

Идентификатор перехода

3

processContext

Object

1..1

Набор данных (структура, смотреть в контрольных примерах)

4

roleContext

Object

1..1

Значение ролевого контекста пользователя

 

 Пример запроса

POST {{url}}/api/Commands/MoveToStage

{

  "processId": "b26c9527-c67b-4702-a525-df20a0645d23",

  "transitionId": "6545013e-c9bc-4e35-b466-802769a394bc",

  "processContext":{<структура, смотреть в контрольных примерах>},

  "roleContext": {}

}

Получение списка доступных для действия заявок (POST //GetTransitionAvailableProcesses)

Для получения списка доступных для действия заявок в сервисе используется метод POST GetTransitionAvailableProcesses. Метод предназначен для получения списка заявок в статусах, которые имеют операции доступные для использования данному пользователю.

Описание параметров запроса

В таблице ниже представлено описание параметров запроса метода.

Таблица 10 Входные параметры для метода фильтрации

№ п/п

Параметр

Тип

Кратность

Описание

1

roleContext

String

1..1

Значение ролевого контекста пользователя.

RoleContext – фильтрует заявки по правилам доступа. В результате отображаются все заявки, где нет ограничений по ролевому доступу (значение RoleContext игнорируется) и заявки где проверки данных ролевого контекста в текущем статусе позволяют пользователю выполнить операцию (значение RoleContext проверяются).

2

workflowFilter

Object

0...1

Параметры фильтра по схеме описания метаданных маршрута.

WorkflowFilter – фильтр заявок по атрибутам и метаданным маршрутов (workflows) по которым они движутся. Атрибуты и метаданные маршрута присваиваются ему при создании или редактировании администратором системы по соответствующей схеме (см. метод получения схем данных).

•             Name - название маршрута (Строка, точное совпадение)

•             Metadata - фильтр по объекту метаданных маршрута (Структура, правила сопоставления Json-объектов см. ниже под таблицей)

3

processFilter

Object

0...1

Параметры фильтра по схеме описания метаданных заявки.

ProcessFilter – фильтр заявок непосредственно по атрибутам и матаданным самой заявки. Атрибуты заявки присваиваются ей при создании и обновлении. Метаданные заявки генерируются при создании и каждом обновлении по соответствующей схеме (см. метод получения схем данных).

4

StageFilter

 

Array

0...1

Фильтр по идентификаторам текущих статусов заявок

5

orderingField

 

String

0...1

Поле сортировки

6

descendingOrder

 

Boolean

0...1

Направление сортировки

7

Skip

Number

0..1

Количество пропущенных элементов в выборке

5

Take

Number

0..1

Количество элементов в списке

Подробное описание и примеры структуры схем метаданных для последующего использования в методах фильтрации заявок представлено в пункте 5.3.

Таблица 11 Выходные параметры для метода фильтрации

№ п/п

Параметр

Тип

Кратность

Описание

1

ErrorCode

String

1..1

Код результата операции

2

Message

String

1..1

Описание результата операции

3

Result.TransitionIds

Array

1..1

Идентификаторы переходов

4

result.ProcessId

String

1..1

Системный идентификатор заявки

5

result.ProcessHumanFriendlyId

String

1…*

Человекоориентированный идентификатор заявки

6

result.Metadata

Object

1..1

Метаданные маршрута

7

result.CurrentStage

String

1..1

Текущий статус заявки

8

result.WorkflowId

String

1..1

Идентификатор маршрута

9

result.WorkflowName

String

1..1

Название маршрута

10

result.ProcessName

String

1..1

Название заявки

11

result.BusinessStatus

Object

0..1

Статус заявки

12

result.BusinessStatus. System

String

0..1

Ссылка на справочник НСИ 1.2.643.2.69.1.1.1.148.2

13

result.BusinessStatus. Code

string

0..1

Код значения статуса. Код справочника НСИ

 

 Пример запроса

POST {{url}}/api/Queries/GetTransitionAvailableProcesses

{

  "RoleContext": {      
    "5ff16ba7-9edd-41a4-bd06-2ee33cfd4597": {

      "Role": "DEPCHIEF",

      "Organization": "931a9317-586c-4dd5-bc32-cd8d3af78903"

    }

  },

  "WorkflowFilter": {},

  "ProcessFilter": {

    "workflow": "b3393395-06f7-4261-b403-5dc0dab1296b",

    "metadata": {

      "resultMedicalCare": [

        "3",

        "5"

      ],

      "resultAmbulanceDepartureType": [

        "3",

        "1"

      ]

    },

    "updated": [],

    "created": [

      "2020-12-17T11:58:30+03:00",

      "2020-12-18T13:58:30+03:00"

    ]

  },

  "orderingField": "updated",

  "descendingOrder": false,

  "BusinessStatusCodes": [

    "2"

  ],

  "StageFilter": [],

  "Skip": 0,

  "Take": 10

}

 Пример ответа

{

  "result": {

    "result": [

      {

        "transitionIds": [

          "6545013e-c9bc-4e35-b466-802769a394bc",

          "959450aa-a67d-45e7-b2ba-2f682959c12d"

        ],

        "processId": "3c9b3659-b2b3-424a-ab87-cfde37f1196e",

        "processHumanFriendlyId": "TMC122043OOX5",

        "metadata": {

          "patient": "8ff30a0b-85c3-462c-aae1-3ec719b3c1a3",

          "performer": "fc2c38ce-6599-4ff3-ae82-915b91a07db9",

          "resultMedicalCare": "5",

          "resultAmbulanceDepartureType": "3"

        },

        "currentStageId": "d41a2f57-6c06-4f38-9982-ea1fc7730d01",

        "currentStage": "Черновик",

        "workflowId": "b3393395-06f7-4261-b403-5dc0dab1296b",

        "workflowName": "Подсистемы Управление потоками_бп",

        "processName": "Новая заявка ",

        "created": "2020-12-17T13:33:18.966651+03:00",

        "updated": "2020-12-17T13:33:18.966651+03:00",

        "businessStatus": {

          "system": "urn:oid:1.2.643.2.69.1.1.1.148.2",

          "code": "2"

        }

      },

      {

        "transitionIds": [

          "6545013e-c9bc-4e35-b466-802769a394bc",

          "959450aa-a67d-45e7-b2ba-2f682959c12d"

        ],

        "processId": "2806edea-0c7f-4f4f-9c01-faa4761eb286",

        "processHumanFriendlyId": "TMC12200L75IN",

        "metadata": {

          "patient": "8ff30a0b-85c3-462c-aae1-3ec719b3c1a3",

          "performer": "fc2c38ce-6599-4ff3-ae82-915b91a07db9",

          "resultMedicalCare": "5",

          "resultAmbulanceDepartureType": "3"

        },

        "currentStageId": "d41a2f57-6c06-4f38-9982-ea1fc7730d01",

        "currentStage": "Черновик",

        "workflowId": "b3393395-06f7-4261-b403-5dc0dab1296b",

        "workflowName": "Подсистемы Управление потоками_бп",

        "processName": "Новая заявка ",

        "created": "2020-12-17T15:33:08.284762+03:00",

        "updated": "2020-12-17T15:33:08.284762+03:00",

        "businessStatus": {

          "system": "urn:oid:1.2.643.2.69.1.1.1.148.2",

          "code": "2"

        }

      },

      {

        "transitionIds": [

          "6545013e-c9bc-4e35-b466-802769a394bc",

          "959450aa-a67d-45e7-b2ba-2f682959c12d"

        ],

        "processId": "5a6120a1-ceee-48c2-bd5c-a0c3cc83c980",

        "processHumanFriendlyId": "TMC122094XD5X",

        "metadata": {

          "patient": "8ff30a0b-85c3-462c-aae1-3ec719b3c1a3",

          "performer": "fc2c38ce-6599-4ff3-ae82-915b91a07db9",

          "resultMedicalCare": "5",

          "resultAmbulanceDepartureType": "3"

        },

        "currentStageId": "d41a2f57-6c06-4f38-9982-ea1fc7730d01",

        "currentStage": "Черновик",

        "workflowId": "b3393395-06f7-4261-b403-5dc0dab1296b",

        "workflowName": "Подсистемы Управление потоками_бп",

        "processName": "Новая заявка ",

        "created": "2020-12-18T11:17:04.438225+03:00",

        "updated": "2020-12-18T11:17:04.438225+03:00",

        "businessStatus": {

          "system": "urn:oid:1.2.643.2.69.1.1.1.148.2",

          "code": "2"

        }

      },

      {

        "transitionIds": [

          "6545013e-c9bc-4e35-b466-802769a394bc",

          "959450aa-a67d-45e7-b2ba-2f682959c12d"

        ],

        "processId": "e90d54af-c1e8-4127-bb4f-f573d7d3353d",

        "processHumanFriendlyId": "TMC1220926SYY",

        "metadata": {

          "patient": "8ff30a0b-85c3-462c-aae1-3ec719b3c1a3",

          "performer": "fc2c38ce-6599-4ff3-ae82-915b91a07db9",

          "resultMedicalCare": "5",

          "resultAmbulanceDepartureType": "3"

        },

        "currentStageId": "d41a2f57-6c06-4f38-9982-ea1fc7730d01",

        "currentStage": "Черновик",

        "workflowId": "b3393395-06f7-4261-b403-5dc0dab1296b",

        "workflowName": "Подсистемы Управление потоками_бп",

        "processName": "Новая заявка ",

        "created": "2020-12-18T11:17:12.202303+03:00",

        "updated": "2020-12-18T11:17:12.202303+03:00",

        "businessStatus": {

          "system": "urn:oid:1.2.643.2.69.1.1.1.148.2",

          "code": "2"

        }

      },

      {

        "transitionIds": [

          "6545013e-c9bc-4e35-b466-802769a394bc",

          "959450aa-a67d-45e7-b2ba-2f682959c12d"

        ],

        "processId": "4bf133a0-549f-4e28-b0e1-3a44c9b0bbde",

        "processHumanFriendlyId": "TMC122052YL1B",

        "metadata": {

          "patient": "8ff30a0b-85c3-462c-aae1-3ec719b3c1a3",

          "performer": "fc2c38ce-6599-4ff3-ae82-915b91a07db9",

          "resultMedicalCare": "3",

          "resultAmbulanceDepartureType": "3"

        },

        "currentStageId": "d41a2f57-6c06-4f38-9982-ea1fc7730d01",

        "currentStage": "Черновик",

        "workflowId": "b3393395-06f7-4261-b403-5dc0dab1296b",

        "workflowName": "Подсистемы Управление потоками_бп",

        "processName": "Новая заявка ",

        "created": "2020-12-18T11:58:30.200089+03:00",

        "updated": "2020-12-18T11:58:30.200089+03:00",

        "businessStatus": {

          "system": "urn:oid:1.2.643.2.69.1.1.1.148.2",

          "code": "2"

        }

      },

      {

        "transitionIds": [

          "6545013e-c9bc-4e35-b466-802769a394bc",

          "959450aa-a67d-45e7-b2ba-2f682959c12d"

        ],

        "processId": "727523ee-059e-40bf-a396-abcff9160287",

        "processHumanFriendlyId": "TMC122055BU7D",

        "metadata": {

          "patient": "8ff30a0b-85c3-462c-aae1-3ec719b3c1a3",

          "performer": "fc2c38ce-6599-4ff3-ae82-915b91a07db9",

          "requester": "931a9317-586c-4dd5-bc32-cd8d3af78903",

          "resultMedicalCare": "3",

          "resultAmbulanceDepartureType": "3"

        },

        "currentStageId": "d41a2f57-6c06-4f38-9982-ea1fc7730d01",

        "currentStage": "Черновик",

        "workflowId": "b3393395-06f7-4261-b403-5dc0dab1296b",

        "workflowName": "Подсистемы Управление потоками_бп",

        "processName": "Новая заявка ",

        "created": "2020-12-18T12:23:30.272053+03:00",

        "updated": "2020-12-18T12:23:30.272053+03:00",

        "businessStatus": {

          "system": "urn:oid:1.2.643.2.69.1.1.1.148.2",

          "code": "2"

        }

      }

    ],

    "total": 6

  },

  "success": true,

  "errorCode": 0,

  "message": null,

  "stackTrace": null

}

 

Получение списка доступных для просмотра заявок (POST //GetReadAvailableProcesses)

Для получения списка доступных для просмотра заявок в сервисе используется метод POST GetReadAvailableProcesses. Метод предназначен для получения списка заявок в статусах, которые доступны данному пользователю для просмотра и действия.

Описание параметров запроса

В таблице ниже представлено описание параметров запроса метода.

Таблица 12 Входные параметры для метода фильтрации

№ п/п

Параметр

Тип

Кратность

Описание

1

roleContext

Object

1..1

Значение ролевого контекста пользователя.

RoleContext – фильтрует заявки по правилам доступа. В результате отображаются все заявки, где нет ограничений по ролевому доступу (значение RoleContext игнорируется) и заявки где проверки данных ролевого контекста в текущем статусе позволяют пользователю выполнить операцию (значение RoleContext проверяются).

2

WorkflowFilter

Object

0...1

Параметры фильтра по схеме описания метаданных маршрута.

WorkflowFilter – фильтр заявок по атрибутам и метаданным маршрутов (workflows) по которым они движутся. Атрибуты и метаданные маршрута присваиваются ему при создании или редактировании администратором системы по соответствующей схеме (см. метод получения схем данных).

•             Name - название маршрута (Строка, точное совпадение)

•             Metadata - фильтр по объекту метаданных маршрута (Структура, правила сопоставления Json-объектов см. ниже)

3

ProcessFilter

Object

0...1

Параметры фильтра по схеме описания метаданных заявки.

ProcessFilter – фильтр заявок непосредственно по атрибутам и матаданным самой заявки. Атрибуты заявки присваиваются ей при создании и обновлении. Метаданные заявки генерируются при создании и каждом обновлении по соответствующей схеме (см. метод получения схем данных).

4

StageFilter

Array

0...1

Фильтр по идентификаторам текущих статусов заявок

5

orderingField

String

0...1

Поле сортировки

6

descendingOrder

Boolean

0...1

Направление сортировки. Для сортировки по убыванию в поле запроса descendingOrder нужно передать true.

7

Skip

Number

0..1

Количество пропущенных элементов в выборке

8

Take

Number

0..1

Количество элементов в списке

 

 Пример запроса

POST {{url}}/api/Queries/GetReadAvailableProcesses

{

  "RoleContext": {      
    "5ff16ba7-9edd-41a4-bd06-2ee33cfd4597": {

      "Role": "DEPCHIEF",

      "Organization": "931a9317-586c-4dd5-bc32-cd8d3af78903"

    }

  },

  "WorkflowFilter": {},

  "ProcessFilter": {

    "workflow": "b3393395-06f7-4261-b403-5dc0dab1296b",

    "metadata": {

      "resultMedicalCare": [

        "3",

        "5"

      ],

      "resultAmbulanceDepartureType": [

        "3",

        "1"

      ]

    },

    "updated": [],

    "created": [

      "2020-12-17T11:58:30+03:00",

      "2020-12-18T13:58:30+03:00"

    ]

  },

  "orderingField": "updated",

  "descendingOrder": false,

  "BusinessStatusCodes": [

    "2"

  ],

  "StageFilter": [],

  "Skip": 0,

  "Take": 10

}

Получение описания правил перехода по его идентификатору (GetTransition)

Метод возвращает описание условий перехода к новому состоянию заявки.

Описание параметров запроса и ответа

В таблице ниже представлено описание параметров запроса метода.

Таблица 13 Входные параметры для метода POST GetTransition

№ п/п

Параметр

Тип

Кратность

Описание

2

Id

String

1..1

Идентификатор перехода

Описание структуры ответа

Таблица 14 Выходные параметры для метода POST GetTransition

№ п/п

Параметр

Тип

Кратность

Описание

1

ErrorCode

string

1..1

Код результата операции

2

Message

string

1..1

Описание результата операции

4

Result.id

string

1..1

Идентификатор перехода

5

Result.Name

string

1..1

Название перехода

6

Result.fromStageId

string

1..1

Стартовый статус

7

Result.toStageId

string

1..1

Итоговый статус

8

Result.schemaId

string

1..1

Идентификатор схемы данных необходимых для осуществления перехода

 

 Пример запроса

GET {{url}}/api/Queries/GetTransition/[id перехода]

GET http://[hostname]/api/Queries/GetTransition/e9b2cce6-93ec-4118-8728-1580af7b9e82

authorization: N3[пробел][GUID передающей системы]

content-type: application/json

Получение объекта контекста заявки (POST //GetProcessContext)

Для получения объекта контекста заявки в сервисе используется метод POST GetProcessContext. Метод предназначен для получения набора данных (объекта контекста), собранного при работе с заявкой.

Описание параметров запроса

В таблице ниже представлено описание параметров запроса метода.

Таблица 15 Входные параметры для метода POST GetProcessContext

№ п/п

Параметр

Тип

Кратность

Описание

1

RoleContext

Object

1..1

Структуры ролевого контекста согласно схемам предметной области

2

ProcessId

String

1..1

Идентификатор процесса ()

 

 Пример запроса

POST {{url}}/api/Queries/GetProcessContext

{

  "RoleContext": {      
    "5ff16ba7-9edd-41a4-bd06-2ee33cfd4597": {

      "Role": "DEPCHIEF",

      "Organization": "931a9317-586c-4dd5-bc32-cd8d3af78903"

    }

  },

  "ProcessId": "64f88f61-7747-402c-9e04-d93eaadc234f"

}

Редактирование маршрута (POST //UpdateProcess)

Для редактирования маршрута в сервисе используется метод POST UpdateProcess. Метод предназначен для внесения изменений в наименование маршрута.

Описание параметров запроса

В таблице ниже представлено описание параметров запроса метода.

Таблица 16 Входные параметры для метода POST UpdateProcess

№ п/п

Параметр

Тип

Кратность

Описание

1

ProcessId

String

1..1

Идентификатор процесса ()

2

Name

String

1..1

Наименование процесса

 

 Пример запроса

POST {{url}}/api/Commands/UpdateProcess

{

  "ProcessId": "d7d7d4ae-a012-468c-b625-7fc4acb1e49a",

  "Name": "Новая заявка"

}

Организация обмена файлами. Компонент XDS

Компонент XDS предназначен для распределенного хранения данных, поступающих в функциональные сервисы платформы N3. Компонент представляет собой REST-сервис и представляет собой сайт IIS. Компонент распространяется как самостоятельный компонент в виде nuget-пакета вида N3.XDS.0.1.0-unstable0030.nupkg.

В текущем решении реализованы следующие методы:

  • Регистрация документа в XDS.
  • Получение документа из XDS.

Передача файла вложения заявки (POST //api/Commands/xds)

Для передачи объекта файла вложения, прикрепленного к заявке (регистрация данных) в сервисе XDS используется метод POST {{url}}/api/Commands/xds, позволяющий загрузить файл и в результате получить ссылку (идентификатор) загруженного в ответ. Метод предназначен для отправки файлов, прикрепленных к заявке (например, результатов выполненных исследований).

Описание параметров запроса

В таблице ниже представлено описание параметров запроса метода.

Таблица 17 Входные параметры для метода POST //api/Commands/xds

№ п/п

Параметр

Тип

Кратность

Описание

1

formFile

string

0..1

Ссылка на файл, указывается для передачи расположение файла

 

 Пример запроса

POST {{url}}/api/Commands/xds

{

formFile

}

Получение файла вложения заявки (POST //xds)

Для получения объекта файла вложения, прикрепленного к заявке в сервисе, используется метод POST {{url}}/api/Queries/xds/{fileId}. Метод предназначен для получения файлов, прикрепленных к заявке (например, результатов выполненных исследований), при выполнении следующих условий:

  1. На входе передается идентификатор заявки, по которой необходимо получить файл, ссылку (идентификатор) на файл, ролевой контекст.
  2. Система проверяет ролевой контекст для текущего состояния заявки, наличие идентификатора файла в контексте заявки.

Если оба условия удовлетворены, то пользователю предоставляется возможность получить файл

Описание параметров запроса

В таблице ниже представлено описание параметров запроса метода.

Таблица 18 Входные параметры для метода POST //xds

№ п/п

Параметр

Тип

Кратность

Описание

1

fileId

string

0..1

Идентификатор файла, полученный в ответе при отправке. Идентификатор указывается в контексте заявки.

2

RoleContext

array

0..1

Ролевой контекст для текущего состояния заявки в процессе

 

 Пример запроса

POST {{url}}/api/Queries/xds/{fileId}

{

 "RoleContext": {      
    "5ff16ba7-9edd-41a4-bd06-2ee33cfd4597": {

      "Role": "DEPCHIEF",

      "Organization": "931a9317-586c-4dd5-bc32-cd8d3af78903"

    }

  },   
  "ProcessId": "b4fa714e-5d81-485a-bb22-16ae2b4ffe2f"

}

Организация поддержки FHIR-стандарта в методах сервиса

Сервис предоставляет возможность обмена данными по стандарту FHIR. С целью упрощения процесса интеграции с сервисом Подсистемы Управление потоками по стандарту FHIR реализовано два метода, позволяющие преобразовывать данные простого формата json к формату FHIR. Методы могут помочь при отладке в процессе интеграции. Использование методов преобразования не обязательно. Приведение к формату FHIR, если его применение предполагает обмен, можно выполнять самостоятельно.

Для конвертации данных в формат стандарта FHIR и обратно предназначены методы:

  • /api/debug/convertSimpleJsonToFHIRJson - преобразование из простой структуры в FHIR;
  • /api/debug/convertFHIRJsonToSimpleJson - обратное преобразование из FHIR в простую структуру.

Данный стандарт поддерживается для следующих методов обмена данными заявки /api/FHIR/StartNewProcess, /api/FHIR/MoveToStage, /api/FHIR/ProcessContext, /api/FHIR/Process/{processId}.

Общий принцип преобразования

При организации обмена по стандарту FHIR для указанных выше методов работы с заявкой происходит преобразование данных processContext и roleContext к формату ресурсов FHIR questionnaireresponse и parameters соответственно. 

Для преобразования в формат FHIR в адресе запроса необходимо указать тип ресурса в формат которого конвертируются данные:

/api/debug/convertSimpleJsonToFHIRJson?FHIRType=QuestionnaireResponse

или

/api/debug/convertSimpleJsonToFHIRJson?FHIRType=Parameters.

При этом в теле запроса передаются данные processContext и roleContext в стандартном формате json.

Сценарий преобразования стандартного json в формат FHIR предполагает следующие шаги:

  1. Вызов метода преобразования контекста заявки processContext (/api/debug/convertSimpleJsonToFHIRJson?FHIRType=QuestionnaireResponse) и сохранение результата.
  2. Вызов метода преобразования ролевого контекста roleContext (/api/debug/convertSimpleJsonToFHIRJson?FHIRType=Parameters) и сохранение результата.
  3. Вызов метода обработки заявки FHIR (например, создания заявки POST /api/FHIR/StartNewProcess) и добавление в тело запроса результатов шагов 1 и 2.
  4. Получение результата создания заявки по стандарту FHIR.

Примеры полного преобразования тела запроса по созданию заявки в FHIR в тексте ниже.

Структуры данных заявки, ролевого контекста и метаданных приводятся к максимально утилитарному минималистичному формату json. Интерфейс на FHIR генерируется и интерпретируются автоматически. Данные передаваемые клиентскими системами при создании и изменении заявки интерпретируются как формы(анкеты), заполненные пользователем согласно формату ресурса questionnaireresponse стандарта FHIR и параметры пользователя для определения ролевого доступа – формат ресурса parameters стандарта FHIR.

Далее конвертированные результаты для processContext и roleContext можно использовать с методами обработки заявки по FHIR (См. описание в пунктах 5.15.4 - 5.15.8).

Для обратного преобразования предназначен метод /api/debug/convertFHIRJsonToSimpleJson, в теле запроса которого передаются данные processContext и roleContext в формате FHIR. В результате обработки будут получены объекты processContext и roleContext приведенные к простому виду json, которые можно применять со стандартными методами работы с заявкой.

Обработка данных из processContext в FHIR

При конвертации входящих данных из processContext к виду FHIR для методов startNewProcess и moveToStage преобразовываются структуры объекта "resourse", входящего в параметр запроса с именем "processContext" в структуры, которые хранятся физически.

Структура преобразовывается соответственно типам данных ресурса FHIR questionnaireresponse (подробное описание состава ресурса по ссылке http://FHIR-ru.github.io/questionnaireresponse.html).

  • "valueString": "<string>" – строки;
  • "valueBoolean": <boolean> – булевые;
  • "valueInteger": <integer> – числа;
  • "item": [{}] - вложенные сложные структуры, массивы, объекты.

Для разделения и преобразования объектов и массивов внутри processContext применяется следующая логика:

  • Узел типа "object" и все элементы, которые содержит объект при конвертации приводятся к виду:
    {

     "linkId": "object",

     "answer": [

      {

       "item": []

      }

     ]

    }

Объект FHIR "answer" - может содержать внутри элементы или item или value (), где item - object, value - примитивный тип (string, bool, interger, ...). Если указаны оба варианты, то выводится ошибка. Также, если в объекте FHIR item лежит другой item, это обозначает, что вложенный объект item – массив, все элементы внутри которого будут иметь вид, принятый для данного типа элементов.

  • Узел типа "array" и все элементы, которые содержит объект при конвертации приводятся к виду:
    {

     "linkId": "array",

     "item": []

    }

Массив может состоять как из примитивных типов, так и из объектов, все элементы внутри которых будут иметь вид, принятый для данного типа элементов.

Например, узел «объект»: 

 Пример объекта

"patient": {

    "patientIdMPI": "019802c4-7e56-4f60-a10b-34ba4b256219",

    "patientName": "Гусев Евгений Викторович",

    "patientemail": "89128329zxc813@mail.com"

  }

Преобразовывается к виду:

 Нажмите здесь для раскрытия...

{


   "linkId": "patient",

   "text": "object",

   "item": [

    {

     "linkId": "patientIdMPI",

     "answer": [

      {

       "valueString": "019802c4-7e56-4f60-a10b-34ba4b256219"

      }

     ]

    },

    {

     "linkId": "patientName",

     "answer": [

      {

       "valueString": "Гусев Евгений Викторович"

      }

     ]

    },

    {

     "linkId": "patientemail",

     "answer": [

      {

       "valueString": "89128329zxc813@mail.com"

      }

     ]

    }

   ]

  }

Например, для узла «массив»: 

 Нажмите здесь для раскрытия...

"files": [

    {

      "id": "1",

      "URL": "ya.ru",

      "isDeleted": false

    }

  ]

Преобразовывается к виду:

 Пример запроса

  {

      "linkId": "files",

      "item": [

        {

          "linkId": "0",

          "answer": [

            {

              "item": [

                {

                  "linkId": "id",

                  "answer": [

                    {

                      "valueString": "1"

                    }

                  ]

                },

                {

                  "linkId": "URL",

                  "answer": [

                    {

                      "valueString": "ya.ru"

                    }

                  ]

                },

                {

                  "linkId": "isDeleted",

                  "answer": [

                    {

                      "valueBoolean": false

                    }

                  ]

                }

              ]

            }

          ]

        }

      ]

    }

 Элементы массива нумеруются по порядку "linkId": "0", так как узел "linkId" в FHIR является обязательным.

В методах /api/FHIR/StartNewProcess и /api/FHIR/MoveToStage сервис поддерживает и обратное преобразование данных из переданных в по стандарту FHIR к внутреннему формату.

При работе с методом /api/FHIR/ProcessContext так же поддерживается преобразование в обратную сторону из структуры, хранящейся в системе к формату FHIR.

Пример стандартной структуры TMCore:

 Нажмите здесь для раскрытия...

{

  "patient": {

    "idMPI": "8ff30a0b-85c3-462c-aae1-3ec719b3c1a3",

    "identityDocument": [

      {

        "id": "1",

        "system": "1.2.643.2.69.1.1.1.6.14",

        "code": "0003123123"

      },

      {

        "id": "2",

        "system": "1.2.643.2.69.1.1.1.6.228",

        "code": "7849500830000203"

      }

    ],

    "birthDate": "2002-11-14",

    "gender": "male",

    "social": {

      "registration": "1",

      "socialStatus": "1"

    },

    "placeOfWork": "Google",

    "address": {

      "district": "район",

      "city": "город/село",

      "line": "ул. Наименование улицы,д.№"

    },

    "fullName": "Вакуленко Борис Владимирович",

    "contact": {

      "name": "ФИО вызывавшего",

      "telecom": "125-25-25"

    }

  }

}

Пример структуры FHIR преобразованной по структуре выше:

 Нажмите здесь для раскрытия...

{

  "resourceType": "QuestionnaireResponse",

  "status": "completed",

  "item": [

    {

      "linkId": "patient",

      "answer": [

        {

          "item": [

            {

              "linkId": "idMPI",

              "answer": [

                {

                 "valueString": "8ff30a0b-85c3-462c-aae1-3ec719b3c1a3"

                }

              ]

            },

            {

              "linkId": "identityDocument",

              "item": [

                {

                  "linkId": "0",

                  "answer": [

                    {

                      "item": [

                        {

                          "linkId": "id",

                          "answer": [

                            {

                              "valueString": "1"

                            }

                          ]

                        },

                        {

                          "linkId": "system",

                          "answer": [

                            {

                       "valueString": "1.2.643.2.69.1.1.1.6.14"

                            }

                          ]

                        },

                        {

                          "linkId": "code",

                          "answer": [

                            {

                        "valueString": "0003123123"

                            }

                          ]

                        }

                      ]

                    }

                  ]

                },

                {

                  "linkId": "1",

                  "answer": [

                    {

                      "item": [

                        {

                          "linkId": "id",

                          "answer": [

                            {

                              "valueString": "2"

                            }

                          ]

                        },

                        {

                          "linkId": "system",

                          "answer": [

                            {

                "valueString": "1.2.643.2.69.1.1.1.6.228"

                            }

                          ]

                        },

                        {

                          "linkId": "code",

                          "answer": [

                            {

                  "valueString": "7849500830000203"

                            }

                          ]

                        }

                      ]

                    }

                  ]

                }

              ]

            },

            {

              "linkId": "birthDate",

              "answer": [

                {

                  "valueString": "2002-11-14"

                }

              ]

            },

            {

              "linkId": "gender",

              "answer": [

                {

                  "valueString": "male"

                }

              ]

            },

            {

              "linkId": "social",

              "answer": [

                {

                  "item": [

                    {

                      "linkId": "registration",

                      "answer": [

                        {

                          "valueString": "1"

                        }

                      ]

                    },

                    {

                      "linkId": "socialStatus",

                      "answer": [

                        {

                          "valueString": "1"

                        }

                      ]

                    }

                  ]

                }

              ]

            },

            {

              "linkId": "placeOfWork",

              "answer": [

                {

                  "valueString": "Google"

                }

              ]

            },

            {

              "linkId": "address",

              "answer": [

                {

                  "item": [

                    {

                      "linkId": "district",

                      "answer": [

                        {

                          "valueString": "район"

                        }

                      ]

                    },

                    {

                      "linkId": "city",

                      "answer": [

                        {

                          "valueString": "город/село"

                        }

                      ]

                    },

                    {

                      "linkId": "line",

                      "answer": [

                        {

                 "valueString": "ул. Наименование улицы,д.№"

                        }

                      ]

                    }

                  ]

                }

              ]

            },

            {

              "linkId": "fullName",

              "answer": [

                {

                  "valueString": "Вакуленко Борис Владимирович"

                }

              ]

            },

            {

              "linkId": "contact",

              "answer": [

                {

                  "item": [

                    {

                      "linkId": "name",

                      "answer": [

                        {

                          "valueString": "ФИО вызывавшего"

                        }

                      ]

                    },

                    {

                      "linkId": "telecom",

                      "answer": [

                        {

                          "valueString": "125-25-25"

                        }

                      ]

                    }

                  ]

                }

              ]

            }

          ]

        }

      ]

    }

  ]

}

Обработка данных из roleContext в FHIR

При конвертации входящих данных из roleContext к виду FHIR для методов startNewProcess и moveToStage преобразовываются структуры объекта ролевого контекста в структуры, которые хранятся физически.

Структура преобразовываются в соответствии типов данных ресурса FHIR parameters (подробное описание состава ресурса по ссылке http://FHIR-ru.github.io/parameters.html).

Для разделения и преобразования объектов и массивов внутри roleContext применяется следующая логика:

  • Узел типа "object" и все элементы, которые содержит объект при конвертации приводятся к виду: 

 Нажмите здесь для раскрытия...

{

      "name": "object",

      "resource": {

        "resourceType": "Parameters",

        "parameter": [

          {

            "name": "element",

            "valueString": "value"

          }

        ]

      }

    }

    Объект FHIR "parameter" - может содержать внутри и элементы, и значения элементов value (), где value - примитивный тип (string, bool, interger, ...).

  • Узел типа "array" и все элементы, которые содержит объект при конвертации приводятся к виду:      

 Нажмите здесь для раскрытия...

{

      "name": "array",

      "part": [

        {

          "name": "0",

          "resource": {

            "resourceType": "Parameters",

            "parameter": [

              {

                "name": "Role",

                "valueString": "DOCTOR"

              }

            ]

                 }

                 ]

        }

Объект FHIR "part" - может содержать внутри объекты, все элементы внутри которых будут иметь вид, принятый для данного типа элементов.

Пример структуры ролевого контекста TMCore:

 Нажмите здесь для раскрытия...

"RoleContext": {
    "5ff16ba7-9edd-41a4-bd06-2ee33cfd4597": {
      "organization": "910bbc2e-e8c3-489d-aee4-5810797b212b",
      "SNILS": "11122233344"
    }
  }  

Пример структуры ролевого контекста по FHIR преобразованной из структуры выше:

 Нажмите здесь для раскрытия...

{
  "resourceType": "Parameters",
  "parameter": [
    {
      "name": "RoleContext",
      "resource": {
        "resourceType": "Parameters",
        "parameter": [
          {
            "name": "5ff16ba7-9edd-41a4-bd06-2ee33cfd4597",
            "resource": {
              "resourceType": "Parameters",
              "parameter": [
                {
                  "name": "organization",
                  "valueString": "910bbc2e-e8c3-489d-aee4-5810797b212b"
                },
                {
                  "name": "SNILS",
                  "valueString": "11122233344"
                }
              ]
            }
          }
        ]
      }
    }
  ]
}

Описание метода создания заявки по стандарту FHIR (POST //api/FHIR/StartNewProcess)

Метод предназначен для создания заявки по стандарту FHIR. В таблице ниже представлено описание параметров запроса метода.

Таблица 19 Входные параметры для метода POST /api/FHIR/StartNewProcess

№ п/п

Параметр

Тип

Кратность

Описание

1

workflowId

String

1..1

Идентификатор маршрута

2

name

String

1..1

Название заявки

3

initialTransitionId

String

1..1

Идентификатор перехода для создания заявки

4

processContext

Object

1..1

Набор данных (структура, смотреть в контрольных примерах). Может быть получен в результате преобразования данных к формату FHIR

5

roleContext

Object

1..1

Значение ролевого контекста пользователя. Может быть получен в результате преобразования данных к формату FHIR

Пример формата запроса по стандарту FHIR

 Пример запроса

{

 "resourceType": "Parameters",

 "parameter": [

  {

   "name": "workflowId",  

   "valueString": "00000000-0000-0000-0000-000000000000",  

  },

  {

   "name": "name",

   "valueString": null,

  },

  {

   "name": "initialTransitionId",

   "valueString": null,

  },

  {

   "name": "processContext",

   "resource": {}

  },

  {

   "name": "roleContext",

   "part": "[{}]"

  }

 ]

}

Полный пример запроса представлен в приложении с контрольными примерами.

Описание метода редактирования/обновления заявки по стандарту FHIR (POST //api/FHIR/MoveToStage)

Метод предназначен для редактирования и обновления заявки по маршруту по стандарту FHIR. В таблице ниже представлено описание параметров запроса метода.

Таблица 20 Входные параметры для метода POST /api/FHIR/MoveToStage

№ п/п

Параметр

Тип

Кратность

Описание

1

processId

String

1..1

Идентификатор заявки

2

transitionId

String

1..1

Идентификатор перехода

3

processContext

Object

1..1

Набор данных (структура, смотреть в контрольных примерах). Может быть получен в результате преобразования данных к формату FHIR

4

roleContext

Object

1..1

Значение ролевого контекста пользователя. Может быть получен в результате преобразования данных к формату FHIR

Пример формата запроса по стандарту FHIR

 Пример запроса

{

 "resourceType": "Parameters",

 "parameter": [

  {

   "name": "processId",

   "valueString": "00000000-0000-0000-0000-000000000000",

  },

  {

   "name": "transitionId",

   "valueString": "00000000-0000-0000-0000-000000000000",

  },

  {

   "name": "processContext",

   "resource": {}

  },

  {

   "name": "roleContext",

   "part": "{}",

  }

 ]

}

Полный пример запроса представлен в приложении с контрольными примерами.

Описание метода получения объекта контекста заявки по стандарту FHIR (POST //api/FHIR/ProcessContext)

Метод предназначен для получения объекта контекста заявки по стандарту FHIR. В таблице ниже представлено описание параметров запроса метода.

Таблица 21 Входные параметры для метода POST //api/FHIR/ProcessContext

№ п/п

Параметр

Тип

Кратность

Описание

1

RoleContext

Object

1..1

Структуры ролевого контекста согласно схемам предметной области

2

ProcessId

String

1..1

Идентификатор процесса

Пример формата запроса по стандарту FHIR

 Пример запроса

{


 "resourceType": "Parameters",

 "parameter": [

  {

   "name": "processId",

   "valueString": "00000000-0000-0000-0000-000000000000",

  },

  {

   "name": "roleContext",

   "part": "{}",

  }

 ]}

Полный пример запроса представлен в приложении с контрольными примерами.

Пример полного преобразования тела запроса по созданию заявки в FHIR

 Пример запроса

{

 "resourceType": "Parameters",

 "parameter": [

  {

   "name": "workflowId",

   "valueString": "b3393395-06f7-4261-b403-5dc0dab1296b"

  },

  {

   "name": "name",

   "valueUrl": "Sz-process6-FHIR"

  },

  {

   "name": "initialTransitionId",

   "valueUrl": "e9b2cce6-93ec-4118-8728-1580af7b9e82"

  },

  {

   "name": "processContext",

   "resource": {

    "resourceType": "QuestionnaireResponse",

    "status": "completed",

    "item": [

     {

      "linkId": "patient",

      "answer": [

       {

        "item": [

         {

          "linkId": "idMPI",

          "answer": [

           {

            "valueString": "8ff30a0b-85c3-462c-aae1-3ec719b3c1a3"

           }

          ]

         },

         {

          "linkId": "identityDocument",

          "item": [

           {

            "linkId": "0",

            "answer": [

             {

              "item": [

               {

                "linkId": "id",

                "answer": [

                 {

                  "valueString": "1"

                 }

                ]

               },

               {

                "linkId": "system",

                "answer": [

                 {

                  "valueString": "1.2.643.2.69.1.1.1.6.14"

                 }

                ]

               },

               {

                "linkId": "code",

                "answer": [

                 {

                  "valueString": "0003123123"

                 }

                ]

               }

              ]

             }

            ]

           },

           {

            "linkId": "1",

            "answer": [

             {

              "item": [

               {

                "linkId": "id",

                "answer": [

                 {

                  "valueString": "2"

                 }

                ]

               },

               {

                "linkId": "system",

                "answer": [

                 {

                  "valueString": "1.2.643.2.69.1.1.1.6.228"

                 }

                ]

               },

               {

                "linkId": "code",

                "answer": [

                 {

                  "valueString": "7849500830000203"

                 }

                ]

               }

              ]

             }

            ]

           }

          ]

         },

         {

          "linkId": "birthDate",

          "answer": [

           {

            "valueString": "2002-11-14"

           }

          ]

         },

         {

          "linkId": "gender",

          "answer": [

           {

            "valueString": "male"

           }

          ]

         },

         {

          "linkId": "social",

          "answer": [

           {

            "item": [

             {

              "linkId": "registration",

              "answer": [

               {

                "valueString": "1"

               }

              ]

             },

             {

              "linkId": "socialStatus",

              "answer": [

               {

                "valueString": "1"

               }

              ]

             }

            ]

           }

          ]

         },

         {

          "linkId": "placeOfWork",

          "answer": [

           {

            "valueString": "Google"

           }

          ]

         },

         {

          "linkId": "address",

          "answer": [

           {

            "item": [

             {

              "linkId": "district",

              "answer": [

               {

                "valueString": "район"

               }

              ]

             },

             {

              "linkId": "city",

              "answer": [

               {

                "valueString": "город/село"

               }

              ]

             },

             {

              "linkId": "line",

              "answer": [

               {

                "valueString": "ул. Наименование улицы,д.№"

               }

              ]

             }

            ]

           }

          ]

         },

         {

          "linkId": "fullName",

          "answer": [

           {

            "valueString": "Вакуленко Борис Владимирович"

           }

          ]

         },

         {

          "linkId": "contact",

          "answer": [

           {

            "item": [

             {

              "linkId": "name",

              "answer": [

               {

                "valueString": "ФИО вызывавшего"

               }

              ]

             },

             {

              "linkId": "telecom",

              "answer": [

               {

                "valueString": "125-25-25"

               }

              ]

             }

            ]

           }

          ]

         }

        ]

       }

      ]

     },

     {

      "linkId": "dispatcherRole",

      "answer": [

       {

        "item": [

         {

          "linkId": "identityDocument",

          "answer": [

           {

            "item": [

             {

              "linkId": "system",

              "answer": [

               {

                "valueString": "1.2.643.2.69.1.1.1.6.223"

               }

              ]

             },

             {

              "linkId": "code",

              "answer": [

               {

                "valueString": "48835311311"

               }

              ]

             }

            ]

           }

          ]

         },

         {

          "linkId": "dispatcherNumber",

          "answer": [

           {

            "valueString": "АБ-23"

           }

          ]

         },

         {

          "linkId": "organization",

          "answer": [

           {

            "valueString": "931a9317-586c-4dd5-bc32-cd8d3af78903"

           }

          ]

         }

        ]

       }

      ]

     },

     {

      "linkId": "paramedicRole",

      "answer": [

       {

        "item": [

         {

          "linkId": "identityDocument",

          "answer": [

           {

            "item": [

             {

              "linkId": "system",

              "answer": [

               {

                "valueString": "1.2.643.2.69.1.1.1.6.223"

               }

              ]

             },

             {

              "linkId": "code",

              "answer": [

               {

                "valueString": "48835311311"

               }

              ]

             }

            ]

           }

          ]

         },

         {

          "linkId": "organization",

          "answer": [

           {

            "valueString": "931a9317-586c-4dd5-bc32-cd8d3af78903"

           }

          ]

         }

        ]

       }

      ]

     },

     {

      "linkId": "seniorParamedicRole",

      "answer": [

       {

        "item": [

         {

          "linkId": "identityDocument",

          "answer": [

           {

            "item": [

             {

              "linkId": "system",

              "answer": [

               {

                "valueString": "1.2.643.2.69.1.1.1.6.223"

               }

              ]

             },

             {

              "linkId": "code",

              "answer": [

               {

                "valueString": "48835311311"

               }

              ]

             }

            ]

           }

          ]

         },

         {

          "linkId": "organization",

          "answer": [

           {

            "valueString": "931a9317-586c-4dd5-bc32-cd8d3af78903"

           }

          ]

         }

        ]

       }

      ]

     },

     {

      "linkId": "depChiefRole",

      "answer": [

       {

        "item": [

         {

          "linkId": "identityDocument",

          "answer": [

           {

            "item": [

             {

              "linkId": "system",

              "answer": [

               {

                "valueString": "1.2.643.2.69.1.1.1.6.223"

               }

              ]

             },

             {

              "linkId": "code",

              "answer": [

               {

                "valueString": "48835311311"

               }

              ]

             }

            ]

           }

          ]

         },

         {

          "linkId": "organization",

          "answer": [

           {

            "valueString": "931a9317-586c-4dd5-bc32-cd8d3af78903"

           }

          ]

         }

        ]

       }

      ]

     },

     {

      "linkId": "serviceRequest",

      "answer": [

       {

        "item": [

         {

          "linkId": "reasonCallMedicalCare",

          "answer": [

           {

            "valueString": "2"

           }

          ]

         },

         {

          "linkId": "territoryCode",

          "answer": [

           {

            "valueString": "3"

           }

          ]

         },

         {

          "linkId": "requesterOrganization",

          "answer": [

           {

            "valueString": "931a9317-586c-4dd5-bc32-cd8d3af78903"

           }

          ]

         },

         {

          "linkId": "brigadeNumber",

          "answer": [

           {

            "valueString": "9317"

           }

          ]

         },

         {

          "linkId": "shiftNumber",

          "answer": [

           {

            "valueString": "1"

           }

          ]

         },

         {

          "linkId": "placeCallReceived",

          "answer": [

           {

            "valueString": "1"

           }

          ]

         },

         {

          "linkId": "reasonsBeingLate",

          "answer": [

           {

            "valueString": "2"

           }

          ]

         },

         {

          "linkId": "ambulanceTeam",

          "answer": [

           {

            "valueString": "3"

           }

          ]

         },

         {

          "linkId": "accidentCause",

          "answer": [

           {

            "valueString": "3"

           }

          ]

         },

         {

          "linkId": "intoxication",

          "answer": [

           {

            "valueBoolean": false

           }

          ]

         },

         {

          "linkId": "complaint",

          "answer": [

           {

            "valueString": "жалобы"

           }

          ]

         },

         {

          "linkId": "complicationsExamination",

          "answer": [

           {

            "item": [

             {

              "linkId": "complications",

              "answer": [

               {

                "valueString": "2"

               }

              ]

             },

             {

              "linkId": "complicationsCodMKB",

              "answer": [

               {

                "valueString": "T78.2"

               }

              ]

             },

             {

              "linkId": "effectivenessMeasures",

              "answer": [

               {

                "valueString": "2"

               }

              ]

             },

             {

              "linkId": "assistanceProvidedLocationCallАmbulance",

              "answer": [

               {

                "valueString": "оказанная помощь"

               }

              ]

             },

             {

              "linkId": "assistanceProvidedАmbulanceCar",

              "answer": [

               {

                "valueString": "оказанная помощь в автомобиле скорой"

               }

              ]

             },

             {

              "linkId": "performanceIndicatorsEvents",

              "answer": [

               {

                "item": [

                 {

                  "linkId": "bloodPressure",

                  "answer": [

                   {

                    "valueString": "120/80"

                   }

                  ]

                 },

                 {

                  "linkId": "pulse",

                  "answer": [

                   {

                    "valueInteger": 60

                   }

                  ]

                 },

                 {

                  "linkId": "heartRate",

                  "answer": [

                   {

                    "valueInteger": 30

                   }

                  ]

                 },

                 {

                  "linkId": "respirationRate",

                  "answer": [

                   {

                    "valueInteger": 40

                   }

                  ]

                 },

                 {

                  "linkId": "bodyHeat",

                  "answer": [

                   {

                    "valueString": "36.6"

                   }

                  ]

                 },

                 {

                  "linkId": "pulseOximetry",

                  "answer": [

                   {

                    "valueString": "23.3"

                   }

                  ]

                 },

                 {

                  "linkId": "glucose monitoring",

                  "answer": [

                   {

                    "item": [

                     {

                      "linkId": "bloodGlucoseLowerBound",

                      "answer": [

                       {

                        "valueString": "100.54"

                       }

                      ]

                     },

                     {

                      "linkId": "bloodGlucoseUpperBound",

                      "answer": [

                       {

                        "valueString": "12.34"

                       }

                      ]

                     }

                    ]

                   }

                  ]

                 }

                ]

               }

              ]

             }

            ]

           }

          ]

         },

         {

          "linkId": "deliveryMethodToCar",

          "answer": [

           {

            "valueString": "1"

           }

          ]

         },

         {

          "linkId": "resultAmbulanceDepartureType",

          "answer": [

           {

            "valueString": "3"

           }

          ]

         },

         {

          "linkId": "kilometers",

          "answer": [

           {

            "valueString": "километраж"

           }

          ]

         },

         {

          "linkId": "time",

          "answer": [

           {

            "item": [

             {

              "linkId": "receiveСallDateTime",

              "answer": [

               {

                "valueDateTime": "2010-10-07T13:41:23+04:00"

               }

              ]

             },

             {

              "linkId": "callЕransferDateTime",

              "answer": [

               {

                "valueDateTime": "2010-10-08T13:43:23+04:00"

               }

              ]

             },

             {

              "linkId": "checkoutTime",

              "answer": [

               {

                "valueString": "hh:mm:ss"

               }

              ]

             },

             {

              "linkId": "arrivalTime",

              "answer": [

               {

                "valueString": "hh:mm:ss"

               }

              ]

             },

             {

              "linkId": "startTimeTransportation",

              "answer": [

               {

                "valueString": "hh:mm:ss"

               }

              ]

             },

             {

              "linkId": "arrivalTimeСlinic",

              "answer": [

               {

                "valueString": "hh:mm:ss"

               }

              ]

             },

             {

              "linkId": "endTimeCall",

              "answer": [

               {

                "valueString": "hh:mm:ss"

               }

              ]

             },

             {

              "linkId": "timeReturnToStation",

              "answer": [

               {

                "valueString": "hh:mm:ss"

               }

              ]

             },

             {

              "linkId": "timeTakenComplete",

              "answer": [

               {

                "valueString": "затраченное на вызов время"

               }

              ]

             }

            ]

           }

          ]

         },

         {

          "linkId": "ambulanceCallType",

          "answer": [

           {

            "valueString": "1"

           }

          ]

         },

         {

          "linkId": "resultMedicalCare",

          "answer": [

           {

            "valueString": "5"

           }

          ]

         },

         {

          "linkId": "performerOrganization",

          "answer": [

           {

            "valueString": "fc2c38ce-6599-4ff3-ae82-915b91a07db9"

           }

          ]

         },

         {

          "linkId": "hospitalOrganization",

          "answer": [

           {

            "valueString": "fc2c38ce-6599-4ff3-ae82-915b91a07db9"

           }

          ]

         },

         {

          "linkId": "idIEMK",

          "answer": [

           {

            "valueString": "1110025"

           }

          ]

         },

         {

          "linkId": "consent",

          "answer": [

           {

            "valueBoolean": true

           }

          ]

         },

         {

          "linkId": "comments",

          "answer": [

           {

            "valueString": "доп.текст.инфа"

           }

          ]

         }

        ]

       }

      ]

     },

     {

      "linkId": "observation",

      "answer": [

       {

        "item": [

         {

          "linkId": "generalCondition",

          "answer": [

           {

            "valueString": "1"

           }

          ]

         },

         {

          "linkId": "behavior",

          "answer": [

           {

            "valueString": "2"

           }

          ]

         },

         {

          "linkId": "consciousness",

          "answer": [

           {

            "valueString": "2"

           }

          ]

         },

         {

          "linkId": "meningealSigns",

          "answer": [

           {

            "valueString": "5"

           }

          ]

         },

         {

          "linkId": "eyes",

          "answer": [

           {

            "item": [

             {

              "linkId": "pupils",

              "answer": [

               {

                "valueString": "3"

               }

              ]

             },

             {

              "linkId": "anisocoria",

              "answer": [

               {

                "valueString": "4"

               }

              ]

             },

             {

              "linkId": "nystagmus",

              "answer": [

               {

                "valueString": "5"

               }

              ]

             },

             {

              "linkId": "lightResponse",

              "answer": [

               {

                "valueString": "6"

               }

              ]

             }

            ]

           }

          ]

         },

         {

          "linkId": "skin",

          "answer": [

           {

            "item": [

             {

              "linkId": "integument",

              "answer": [

               {

                "valueString": "2"

               }

              ]

             },

             {

              "linkId": "acrocyanosis",

              "answer": [

               {

                "valueString": "6"

               }

              ]

             },

             {

              "linkId": "marbling",

              "answer": [

               {

                "valueString": "9"

               }

              ]

             },

             {

              "linkId": "edemas",

              "answer": [

               {

                "valueString": "10"

               }

              ]

             },

             {

              "linkId": "localizationOfEdema",

              "answer": [

               {

                "valueString": ""

               }

              ]

             },

             {

              "linkId": "rash",

              "answer": [

               {

                "valueString": "13"

               }

              ]

             },

             {

              "linkId": "rashLocalization",

              "answer": [

               {

                "valueString": ""

               }

              ]

             }

            ]

           }

          ]

         },

         {

          "linkId": "breathing",

          "answer": [

           {

            "valueString": "2"

           }

          ]

         },

         {

          "linkId": "wheezing",

          "answer": [

           {

            "valueString": "2"

           }

          ]

         },

         {

          "linkId": "shortnessOfBreath",

          "answer": [

           {

            "valueString": "3"

           }

          ]

         },

         {

          "linkId": "organsCirculatorySystem",

          "answer": [

           {

            "item": [

             {

              "linkId": "heartSounds",

              "answer": [

               {

                "valueString": "2"

               }

              ]

             },

             {

              "linkId": "noise",

              "answer": [

               {

                "valueString": "1"

               }

              ]

             },

             {

              "linkId": "pulseLike",

              "answer": [

               {

                "valueString": "1"

               }

              ]

             }

            ]

           }

          ]

         },

         {

          "linkId": "digestiveOrgans",

          "answer": [

           {

            "item": [

             {

              "linkId": "tongue",

              "answer": [

               {

                "valueString": "1"

               }

              ]

             },

             {

              "linkId": "belly",

              "answer": [

               {

                "valueString": "1"

               }

              ]

             },

             {

              "linkId": "bellyInActOfBreathing",

              "answer": [

               {

                "valueString": "7"

               }

              ]

             },

             {

              "linkId": "peritonealIrritationSymptoms",

              "answer": [

               {

                "valueString": "8"

               }

              ]

             },

             {

              "linkId": "enlargedLiver",

              "answer": [

               {

                "valueString": "11"

               }

              ]

             }

            ]

           }

          ]

         },

         {

          "linkId": "urination",

          "answer": [

           {

            "valueString": ""

           }

          ]

         },

         {

          "linkId": "feces",

          "answer": [

           {

            "valueString": ""

           }

          ]

         },

         {

          "linkId": "otherSymptoms",

          "answer": [

           {

            "valueString": ""

           }

          ]

         },

         {

          "linkId": "pressure",

          "answer": [

           {

            "item": [

             {

              "linkId": "workingBloodPressure",

              "answer": [

               {

                "valueString": "120/80"

               }

              ]

             },

             {

              "linkId": "bloodPressure",

              "answer": [

               {

                "valueString": "120/80"

               }

              ]

             }

            ]

           }

          ]

         },

         {

          "linkId": "pulse",

          "answer": [

           {

            "valueInteger": 60

           }

          ]

         },

         {

          "linkId": "heartRate",

          "answer": [

           {

            "valueInteger": 30

           }

          ]

         },

         {

          "linkId": "respirationRate",

          "answer": [

           {

            "valueInteger": 40

           }

          ]

         },

         {

          "linkId": "bodyHeat",

          "answer": [

           {

            "valueString": "36.6"

           }

          ]

         },

         {

          "linkId": "pulseOximetry",

          "answer": [

           {

            "valueString": "23.3"

           }

          ]

         },

         {

          "linkId": "glucose monitoring",

          "answer": [

           {

            "item": [

             {

              "linkId": "bloodGlucoseLowerBound",

              "answer": [

               {

                "valueString": "100.54"

               }

              ]

             },

             {

              "linkId": "bloodGlucoseUpperBound",

              "answer": [

               {

                "valueString": "12.34"

               }

              ]

             }

            ]

           }

          ]

         },

         {

          "linkId": "additionalObjectiveData",

          "answer": [

           {

            "valueString": ""

           }

          ]

         },

         {

          "linkId": "ECG",

          "answer": [

           {

            "item": [

             {

              "linkId": "preMedicalCareECG",

              "answer": [

               {

                "valueString": ""

               }

              ]

             },

             {

              "linkId": "preMedicalCareECGTime",

              "answer": [

               {

                "valueString": "01:30:00"

               }

              ]

             },

             {

              "linkId": "postMedicalCareECG",

              "answer": [

               {

                "valueString": ""

               }

              ]

             },

             {

              "linkId": "postMedicalCareECGTime",

              "answer": [

               {

                "valueString": "01:30:00"

               }

              ]

             }

            ]

           }

          ]

         }

        ]

       }

      ]

     },

     {

      "linkId": "condition",

      "answer": [

       {

        "item": [

         {

          "linkId": "codeMKB",

          "answer": [

           {

            "valueString": "S72.1"

           }

          ]

         },

         {

          "linkId": "complaints",

          "answer": [

           {

            "valueString": "Жалобы"

           }

          ]

         },

         {

          "linkId": "anamnesis",

          "answer": [

           {

            "valueString": "Дополнительные сведения по анамнезу заболевания"

           }

          ]

         }

        ]

       }

      ]

     },

     {

      "linkId": "attachedfiles",

      "item": [

       {

        "linkId": "0",

        "answer": [

         {

          "item": [

           {

            "linkId": "id",

            "answer": [

             {

              "valueString": "1"

             }

            ]

           },

           {

            "linkId": "fileURL",

            "answer": [

             {

              "valueString": ""

             }

            ]

           },

           {

            "linkId": "signatureURL",

            "answer": [

             {

              "valueString": ""

             }

            ]

           },

           {

            "linkId": "isBlocked",

            "answer": [

             {

              "valueBoolean": false

             }

            ]

           }

          ]

         }

        ]

       },

       {

        "linkId": "1",

        "answer": [

         {

          "item": [

           {

            "linkId": "id",

            "answer": [

             {

              "valueString": "2"

             }

            ]

           },

           {

            "linkId": "fileURL",

            "answer": [

             {

              "valueString": ""

             }

            ]

           },

           {

            "linkId": "signatureURL",

            "answer": [

             {

              "valueString": ""

             }

            ]

           },

           {

            "linkId": "isBlocked",

            "answer": [

             {

              "valueBoolean": false

             }

            ]

           }

          ]

         }

        ]

       }

      ]

     },

     {

      "linkId": "110/u",

      "answer": [

       {

        "item": [

         {

          "linkId": "fileURL",

          "answer": [

           {

            "valueString": ""

           }

          ]

         },

         {

          "linkId": "signatureURL",

          "answer": [

           {

            "valueString": ""

           }

          ]

         }

        ]

       }

      ]

     }

    ]

   }

  },

  {

   "name": "RoleContext",

   "part": [

    {

     "name": "0",

     "resource": {

      "resourceType": "Parameters",

      "parameter": [

       {

        "name": "Role",

        "valueInteger": 0

       },

       {

        "name": "Organization",

        "valueInteger": 0

       }

      ]

     }

    }

   ]

  }

 ]

}

Организация взаимодействия с внешними подсистемами и сервисами

Программный интерфейс подсистемы УП предоставляет возможность организации обмена данными с внешними подсистемами и сервисами, входящими в РЕГИЗ.

Взаимодействие с файловым хранилищем портала Телемедицины

Подсистема УП предоставляет возможность организовать доступ к файловому хранилищу портала Телемедицины для использования в качестве хранилища данных.

Выгрузка файлов

Общий алгоритм работы с файлами:

1) Загрузить файлы в файловое хранилище организации (п.1.1). Доступна загрузка одного файла за раз.

2) В ответе возвращается ссылка на файл в download_url .

3) Ссылка вставляется в ProcessContext в необходимый параметр либо в /api/Commands/StartNewProcess, либо в /api/Commands/MoveToStage.

Конфигурируемые данные

Для отправки файла в хранилище организации следуют сформировать POST-запрос в следующем формате:

Пример:

[base_url]/api/orgs/files?org_id=[org_id]&apikey=[apiKey]&token=[token]

form 'file=@/Путь к файлу'

Описание параметров запроса

Описание параметров:

№ п/п

Параметр

Тип

Кратность

Описание

1

baseUrl

string

1..1

Адрес портала, обеспечивающего организацию доступа к мессенджеру

2

apiKey

string

1..1

Региональный ключ к хранилищу

3

org_id

string

1..1

Идентификатор МО согласно справочнику НСИ 1.2.643.2.69.1.1.1.64

 

4

token

string

1..1

Токен доступа для работы с подсистемой телемедицинских консультаций

Пример ответа

 Пример

{

 "status": "ok",

 "org_id": 670,

 "org_external_id": "",

 "endpoint": "orgs/files",

 "name": "Медицинская Организация",

 "info": {

  "id": 9883,

  "file_addr": "./upload/structureitems/670/d359bed08b463d644ea9eaa55c3f7f4b.jpg",

  "file_key": "72a3779013bb900a1095696f5fc3bab9",

  "description": "",

  "title": "mrt-grudnoy-kletki-glav.jpg",

  "ts": "1601034056",

  "file_secondary_key": "480f687e8ef905ca7fb79b0638980d97",

  "user_id": null,

  "thread_id": null,

  "deleted_at": "0",

  "project_id": "0",

  "thumbnail_url": "",

  "updated_at": "0",

  "broken_thumb_status": "0",

  "template_signing_required": false,

  "fullpath": "/srv/irida/irida.experimental/upload/structureitems/670/d359bed08b463d644ea9eaa55c3f7f4b.jpg",

  "info": {

   "basename": "d359bed08b463d644ea9eaa55c3f7f4b.jpg",

   "extension": "jpg",

   "filename": "d359bed08b463d644ea9eaa55c3f7f4b",

   "collaborative": 0,

   "collaborative_reviews": 0,

   "url": "https://irida-vega.ru/experimental/upload/structureitems/670/d359bed08b463d644ea9eaa55c3f7f4b.jpg",

   "icon": "https://irida-vega.ru/experimental/assets/images/fileicons/svg/jpg.svg",

   "description": "",

   "ts": 1601034056,

   "fullpath": "./upload/structureitems/670/d359bed08b463d644ea9eaa55c3f7f4b.jpg",

   "is_image": 1,

   "filesize": 62.9,

   "filesize_litera": "Кб",

   "absolutePath": "/srv/irida/irida.experimental/upload/structureitems/670/d359bed08b463d644ea9eaa55c3f7f4b.jpg",

   "thumburl": "https://irida-vega.ru/experimental/upload/thumbs/9883/d359bed08b463d644ea9eaa55c3f7f4b.jpg",

   "gallery_type": "image",

   "filesize_mb": 0.1,

   "sign": false

  },

  "history": [],

  "download_url": "https://irida-vega.ru/experimental/download?file=9883"

 }

}

Использование данных ответа в телемедицинской заявке

В качестве ссылки а файл в телемедицинской заявке следует использовать абсолютный путь до файла, который в ответе лежит по адресу jsonpath: $.info.info.url

  • Организация получения чата ВКС

После создания заявки на портале ТМК для нее генерируются чат и комната ВКС. Для получения ссылок необходимо получить токен доступа к порталу. Чтобы не генерировать дополнительные токены для МИС, сервис предоставляет возможность передавать данные с использованием его токена. Для чего реализован метод (проброс через сервис УП) для получения списка ссылок по заявке:

[base_url]/api/flows/process_links?process_id=[process_id]&apikey=[apiKey]

Более подробное описание правил взаимодействия представлено в описании профилей API портала Телемедицины (в том подробности о правилах организации чата и ВКС).

  • Конфигурируемые данные

Для организации взаимодействия клиент-системы необходимо хранение конфигурируемых данных, к которым относятся следующие данные, определяемые провайдером:

  • адрес портала, обеспечивающего организацию доступа к мессенджеру (baseUrl);
  • ключ доступа к методам API (apiKey);
  • идентификатор процесса в сервисе «Управление потоками».

Таблица 22 Входные параметры метода

№ п/п

Параметр

Тип

Обязательность

Описание

1

baseUrl

String

1..1

Адрес портала, обеспечивающего организацию доступа к мессенджеру

2

apiKey

String

1..1

Ключ доступа к методам

3

process_id

String

1..1

Идентификатор процесса в сервисе «Сервис управления Маршрутами». Хранится в контексте заявки на портале Телемедицины

Для получения ссылок на чат/комнату ВКС для каждого участника по заявке клиент-системой необходимо выполнить запросом с бэкэнда с помощью метода “api/flows/process_links” (GET).

  • Пример запроса

[base_url]/api/flows/process_links?process_id=[process_id]&apikey=[apiKey]

Взаимодействие с подсистемой СЗПВ

Подсистема СЗПВ предоставляет возможность осуществлять запись на ТМК по схожему алгоритму взаимодействия с подсистемой УО (запись по направлению).

Для организации записи на ТМК в качестве аналога идентификатора направления в УО МИС МО необходимо получить и далее передавать идентификатор processHumanFriendlyId и метаданные заявки, которые формируется при регистрации заявки в подсистеме УП. Указанные данные можно получить с помощью метода

{{url}}/api/Queries/GetProcess/< processId>

где processId – идентификатор созданной заявки в подсистеме УП.

Более подробное описание правил взаимодействия представлено в описании профилей API подсистемы СЗПВ.

 Пример запроса

{{url}}/api/Queries/GetProcess/521d041d-274c-47c3-a59c-010b10444225

 Пример ответа

{

  "result": {

    "metadata": {

      "id": "b6e53519-3b35-4fab-8740-99345eb719fb",

      "processId": "521d041d-274c-47c3-a59c-010b10444225",

      "metadata": {

        "patient": "8ff30a0b-85c3-462c-aae1-3ec719b3c1a3",

        "performer": "fc2c38ce-6599-4ff3-ae82-915b91a07db9",

        "requester": "931a9317-586c-4dd5-bc32-cd8d3af78903",

        "resultMedicalCare": "5",

        "resultAmbulanceDepartureType": "3"

      }

    },

    "id": "521d041d-274c-47c3-a59c-010b10444225",

    "name": "Новая заявка. Активы",

    "workflowId": "5fb7cefc-b7e0-467c-b79b-43f2859c95dc",

    "metadataId": "b6e53519-3b35-4fab-8740-99345eb719fb",

    "currentStageId": "617690fd-de03-41d6-b2df-793f765ef537",

    "created": "2021-02-15T13:33:51.450247+03:00",

    "updated": "2021-02-15T13:33:51.450247+03:00",

    "businessStatus": {

      "system": "urn:oid:1.2.643.2.69.1.1.1.148.2",

      "code": "19"

    },

    "humanFriendlyId": "TMC0221X7S18Q"

  },

  "success": true,

  "errorCode": 0,

  "message": null,

  "stackTrace": null

}

Взаимодействие с подсистемой «Индекс пациента» (сервис MPI)

Подсистема «Индекс пациента» предназначен для управления обменом идентификационными данными пациентов с внешними сервисами и системами для обеспечения: регистрации и хранения записей, содержащих идентификаторы субъектов ЭМК (пациентов МО), поддержки связей с внешними, находящимися на уровне медицинских организаций, реестрами идентификаторов пациентов МО, передачу отдельных карточек пациентов и их наборов во внешние системы, инициацию идентификации каждой новой карточки путем создания первичной связи patientlink.

Сервис TMCore предоставляет возможность организации информационного взаимодействия с сервисом MPI.

В программном интерфейсе TMCore для организации обмена данными с MPI поддержаны следующие методы:

  • поставка данных пациента в MPI;
  • методы поиска карточек: поиск мастер-карточки пациента по документу, поиск всех карточек по идентификатору карточки, Получение карточки пациента по идентификатору записи, получение карточки пациента по ФИО и Дате рождения.

Для передачи данных о пациентах (карточек пациентов) по правилам обмена сервиса MPI используется FHIR-ресурс «Patient».

Таблица 23 Описание параметров ресурса Patient

Имя параметра

Кратность

Тип данных (FHIR)

Описание

 

identifier

1..1

Identifier

где identifier.system = 1.2.643.5.1.13.2.7.100.5 (передающая ИС):

 

value -идентификатор пациента в передающей ИС, должен заполняться автоматически формируемым значением [ТМК+слеш+IdPatientMis], (где IdPatientMis - идентификатор пациента в МИС МО);

 

+system - должен заполняться константой "urn:oid:1.2.643.5.1.13.2.7.100.5"

 

assigner.display - должен заполняться константой "urn:oid:1.2.643.2.69.1.2.116" (идентификатор передающей системы N3.Телемедицина по справочнику НСИ 1.2.643.2.69.1.2)

 

где identifier.system = 1.2.643.5.1.13.2.7.100.7 (первичная МИС МО)

 

value - идентификатор пациента в первичной системе(МИС МО первичная), должен заполняться идентификатором пациента из МИС МО {IdPatientMis} 

 

system - заполнять константой "urn:oid:1.2.643.5.1.13.2.7.100.7"

 

assigner.display - заполнять кодом из справочника 1.2.643.2.69.1.2 для МИС МО

 

 

0..*

Identifier

Документы пациента.

 

Для Identifier.system указывается тип документа по справочнику urn:oid:1.2.643.2.69.1.1.1.6 в формате {urn:oid:1.2.643.2.69.1.1.1.6}.{код записи}

 

name

1..1

HumanName

Имя, ассоциируемое с пациентом.

 

Структура HumanName заполняется следующим образом:

 

1. family - Фамилия (кратность 1..1), отчество пациента (кратность 0..1)

 

2. given - Имя пациента (кратность 1..1)

 

gender

0..1

code

Допустимые коды: 

 

male:1

 

female:2

 

unknown:3

 

birthDate

1..1

date

Дата рождения пациента

 

address

0..*

Address

Адрес пациента:

 

temp = 8 по справочнику 1.2.643.2.69.1.1.1.28 (временный)

 

home = 2 (фактическое проживание)

 

work = 4 (служебный)

 

old = 1, 3, 5, 6, 7, 9 (регистрации, места рождения, почтовый и др.)

 

telecom

0...*

ContactPoint

Контактные данные пациента (e-mail, phone)

 

managingOrganization

1..1

Reference(Organization)

Организация, занимающаяся хранением записи пациента. Ссылка на managingOrganization должна указывать на объект типа Organization, хранящийся в сервисе Терминологии. Здесь указывается первичная организация пациента. Сведения об организации - отправителе определяются из авторизационного идентификатора (токена) сообщения и могут отличаться от первичной организации. Например: первичной организацией может быть поликлиника, где обслуживался пациент, а сообщение передано из сервиса ДЛИ, установленного в МИАЦ

 
 

Поставка данных пациента в MPI

Программный интерфейс TMCore предоставляет возможность МИС МО поставлять данные пациента в сервис MPI. При поддержке метода поставки на стороне МИС МО необходимо обеспечить выполнение следующих общих условий:

  • При передаче данных в сервис должен указываться токен TMCore. Токен указывается в адресной строке.
  • На стороне TMCore выполняется поверка наличия и соответствия указанного токена. Если проверка токена успешна, то формируется запрос на перердачу данных в MPI. Если нет, то на сторону МИС МО передается сообщение об ошибке.
  • После успешной проверки формируется и передается запрос в MPI в соответствии правил обмена.
  • Передача данных пациента в объеме согласно требованиям сервиса MPI и по структуре ресурса Patient (стандарта FHIR).
  • Выполнение условия для проверки на уникальность по параметрам: «identifier.system + identifier.value + managingOrganization»;
  • Для этого во входных параметрах при запросе метода указываются две системы:
  • первичная (пространство urn:oid:1.2.643.5.1.13.2.7.100.7) – для МИС МО;
  • передающая (пространство urn:oid:1.2.643.5.1.13.2.7.100.5) – для Телемедицины (указывается по умолчанию, см. Таблица 23 Описание параметров ресурса Patient);
  • для первичной в значении параметра identifier.value передается идентификатор пациента idPatientMis в МИС МО;
  • для передающей в значении параметра identifier.value передается идентификатор пациента МИС МО по формату «TMC/ idPatientMis».
  • Полученный ответ от MPI передается в ответе МИС МО.

 Пример запроса

POST {{url}}/api/Regis/Mpi/SavePatient   
authorization: N3[пробел][GUID передающей системы]

content-type: application/json

{

 "resourceType": "Patient",

 "identifier": [

  {

   "system": "urn:oid:1.2.643.5.1.13.2.7.100.5",

   "value": "TMC/<idPatientMis>",

   "assigner": {

    "display": "1.2.643.2.69.1.2.116"

   }

  },

  {

   "system": "urn:oid:1.2.643.5.1.13.2.7.100.7",

   "value": "<idPatientMis>",

   "assigner": {

    "display": "1.2.643.2.69.1.2.28"

   }

  },

  {

   "system": "urn:oid:1.2.643.2.69.1.1.1.6.223",

   "value": "18477901518",

   "assigner": {

    "display": "ПФР"

   }

  }

 ],

 "name": [

  {

   "family": [

    "Андреев",

    "Антонович"

   ],

   "given": [

    "Дмитрий"

   ]

  }

 ],

 "telecom": [

  {

   "system": "email",

   "value": "+7-(989)1355987"

  },

  {

   "system": "fax",

   "value": "+7-(989)1355987"

  },

  {

   "system": "other",

   "value": "+7-(989)1355987"

  },

  {

   "system": "pager",

   "value": "+7-(989)1355987"

  },

  {

   "system": "phone",

   "value": "+7-(989)1355987"

  }

 ],

 "gender": "male",

 "birthDate": "19-10-1995",

 "address": [

  {

   "use": "home",

   "text": "123456, г. Прегонь, ул. Северная, 4/2"

  },

  {

   "use": "work",

   "text": "123456, г. Прегонь, ул. Северная, 4/2"

  },

  {

   "use": "old",

   "text": "123456, г. Прегонь, ул. Северная, 4/2"

  },

  {

   "use": "temp",

   "text": "123456, г. Прегонь, ул. Северная, 4/2"

  }

 ],

 "managingOrganization": {

  "reference": "Organization/3b4b37cd-ef0f-4017-9eb4-2fe49142f682"

 }

}

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

Программный интерфейс TMCore предоставляет возможность МИС МО выполнять поиск карточек в сервисе MPI. При поддержке метода поиска на стороне МИС МО необходимо обеспечить выполнение следующих общих условий:

  • В запросе метода должен указываться токен TMCore. Токен указывается в адресной строке.
  • На стороне TMCore выполняется поверка наличия и соответствия указанного токена. Если проверка токена успешна, то формируется запрос на передачу данных в MPI. Если нет, то на сторону МИС МО передается сообщение об ошибке.
  • После успешной проверки формируется и передается запрос в MPI в соответствии правил обмена.

Предоставляемый метод поиска данных в MPI выполняется по следующему сценарию:

  1. Сервис TMCore получает запрос на поиск данных от МИС МО.
  2. Сервис TMCore проверяет выполнение условий, указанных выше и затем отправляет запросы в MPI.
  3. Сервис TMCore получает идентификатор карточки MPI.
  4. Ответы предыдущего шага передается в МИС МО.

 Пример запроса

POST [base]/api/Regis/Mpi/GetMasterCardByDoc  
authorization: N3[пробел][GUID передающей системы]

content-type: application/json

{

  "resourceType": "Parameters",

  "parameter": [{

    "name": "docType",

    "valueString": "urn:oid:1.2.643.2.69.1.1.1.6.223"

  },

  {

    "name": "docNumber",

    "valueString": "88950847590"

  }]

}

Поиск данных пациента в MPI по идентификатору

Программный интерфейс TMCore предоставляет возможность МИС МО выполнять поиск карточек в сервисе MPI. При поддержке метода поиска на стороне МИС МО необходимо обеспечить выполнение следующих общих условий:

  • В запросе метода должен указываться токен TMCore. Токен указывается в адресной строке.
  • На стороне TMCore выполняется поверка наличия и соответствия указанного токена. Если проверка токена успешна, то формируется запрос на передачу данных в MPI. Если нет, то на сторону МИС МО передается сообщение об ошибке.
  • После успешной проверки формируется и передается запрос в MPI в соответствии правил обмена.

Предоставляемый метод поиска данных в MPI выполняется по следующему сценарию:

  1. Сервис TMCore получает запрос на поиск данных от МИС МО.
  2. Сервис TMCore проверяет выполнение условий, указанных выше и затем отправляет запросы в MPI.
  3. Сервис TMCore получает список идентификаторов карточек MPI.
  4. По каждому идентификатору последовательно выполняется запрос карточки и получается ответ.
  5. Ответы предыдущего шага объединяются и общий результат обработки передается в МИС МО.

 Пример запроса

GET [base]/api​/Regis​/Mpi​/GetPatientCardById​/[patientId] 
authorization: N3[пробел][GUID передающей системы]

Коды возвращаемых ошибок

Код

Описание

0

Ошибок не найдено

1

Внутренняя ошибка приложения

2

Ошибка валидации выполнения операции. Неверный код передаваемой сущности, отсутствие обязательных данных согласно спецификациям

3

Множественный переход

11

Указанный маршрут не найден

12

Указанного статуса не существует

14

Указанного валидатора не существует

15 

Указанного отклика не существует

16

Заявка не найдена

17

Указанной предметной области не существует

18

Указанной схемы данных не существует

19

Указанной операции (transition) не существует

32

Нет данных ожидаемых для осуществления перехода или создания заявки

33

Нет метаданных описания маршрута

42

Данные расширения схемы не разрешены

51

Метаданные маршрута не найдены

52

Метаданные заявки не найдены