Руководство к использованию стандарта FHIR в ЦИСЗ (ВЕТКА release-1-4-t2-10-26-18)
1.4.463 - ci-build

Импорт пакета данных организации здравоохранения

Метод предназначен для импорта пакета данных организации здравоохранения, сформированного в МИС ОЗ, в ЦИСЗ.

Последовательность действий для использования метода:

  1. ​МИС ОЗ формирует пакет данных организации здравоохранения в виде ресурса Bundle типа transaction по профилю Пакет информации в контексте организации;
  2. МИС ОЗ вызывает метод импорта пакета данных организации здравоохранения в ЦИСЗ и в теле запроса передает сформированный ресурс Bundle, а в заголовках запроса устанавливается тип передаваемого контента (content-type) в application/json.

Транзакция (transaction) – действие, которое необходимо произвести над ресурсом.

Доступны следующие типы транзакций:

  • создание (POST);
  • обновление (PUT).

​Тип транзакции задается в элементе Bundle.entry.request профиля Пакет информации в контексте организации. Ресурс Bundle типа transaction представляет собой ресурсы, размещенные в Bundle, с указанием действий (типов транзакций), которые необходимо произвести над каждым ресурсом в рамках одного HTTP запроса.

Особенности метода:

  • метод позволяет в составе Bundle одновременно импортировать несколько ресурсов одного профиля с указанием действий, которые необходимо выполнить над этими ресурсами: создание (POST), обновление (PUT).

  • для каждого ресурса, содержащегося в Bundle типа transaction, в элементе Bundle.entry.request должно быть задано действие (тип транзакции), которое нужно произвести над ресурсом.

​ЦИСЗ может принимать только ресурс Bundle, соответствующий профилю Пакет информации в контексте организации, при этом:

Метод осуществляет проверку:

​Подробное описание профилей ЦИСЗ размещено по адресу: Профили ЦИСЗ.

​Программные интерфейсы ЦИСЗ защищены сервером авторизации с использованием технологии OAuth 2.0: авторизация в ЦИСЗ. При каждом вызове метода клиентское приложение (МИС) должно передавать токен доступа (токен организации) в заголовке запроса.

Импорт пакета данных организации здравоохранения производится в виде JSON без подписи со стороны медицинского работника (в заголовках запроса устанавливается тип передаваемого контента (content-type) в application/json).

Вызов метода осуществляется с помощью HTTP POST команды:

POST [FHIR_BASE]/Bundle/$import

Правила обработки транзакций:

  • каждому ресурсу в рамках одной транзакции типа POST присваивается уникальный идентификатор;

  • для каждого ресурса в рамках одной транзакции типа PUT изначально производится поиск в ЦИСЗ переданного идентификатора ресурса. Если ресурс с таким идентификатором уже существует в ЦИСЗ – используется уже существующий идентификатор, если ресурс с таким идентификатором отсутствует в ЦИСЗ – то переданному в методе ресурсу присваивается уникальный идентификатор;

  • результат выполнения транзакции не зависит от уникального идентификатора ресурса, присвоенного ресурсу в рамках транзакции;

  • ​транзакция считается успешно выполненной только в том случае, если все ресурсы в рамках транзакции прошли валидацию на соответствие профилям ЦИСЗ;

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

Входные данные метода:

Название Профиль Описание
bundle ​пакет информации в контексте организации Пакет данных организации здравоохранения, сформированный локальной или облачной МИС ОЗ

Выходные данные метода:

Название Профиль Описание
result parameters В случае, если входящий пакет данных является валидным, то возвращается тип операции Parameters. В противном случае возвращается тип операции OperationOutcome с HTTP статусом 400 (BadRequest)

Тип операции Parameters состоит из следующих параметров:

Название Описание
ProcessingStatus Статус обработки добавления пакета данных. При успешном выполнении операции будет иметь значение Pending
OperationStatusReference ​Ссылка на статус операции, по которой можно получить статус обработки пакета данных
ResourceId Идентификатор ресурса, по которому можно получить статус операции, проводящейся с данным ресурсом
ResourceType Тип ресурса

Метод возвращает:

  • HTTP статус 202 (Accepted): валидация входящего пакета данных на соответствие профилю пакета данных прошла успешно, запрос на импорт пакета принят в обработку, но обработка запроса еще не завершена;
  • HTTP статус серии 4xx: операция импорта не выполнена. К сбою операции импорта могут привести ошибки в контенте (например, неверный набор символов, неверный JSON и т. д.).

В случае успешного выполнения проверки метод возвращает НТТР статус операции импорта и набор параметров, по которым в последующем можно запросить в ЦИСЗ добавленный пакет данных.

Пример запроса на импорт пакета ресурсов расписаний со слотами в ЦИСЗ:

{ "resourceType" : "Bundle", "id" : "BundleSchedule", "meta" : { "profile" : [ "https://fhir.by/AbstractArea/StructureDefinition/Bundle/OrganizationBundle" ] }, "type" : "transaction", "timestamp" : "2024-08-01T11:12:21Z", "entry" : [ { "fullUrl" : "Schedule/ScheduleSurgeryBundle", "resource" : { "resourceType" : "Schedule", "id" : "ScheduleSurgeryBundle", "meta" : { "profile" : [ "https://fhir.by/StructureDefinition/ScheduleBy" ] }, "extension" : [ { "url" : "https://fhir.by/StructureDefinition/OrganizationReference", "valueReference" : { "reference" : "Organization/OrganizationCISM" } } ], "identifier" : [ { "type" : { "text" : "Временный текстовый идентификатор - Расписание работы врача хирурга" } } ], "active" : true, "serviceCategory" : [ { "coding" : [ { "system" : "https://fhir.by/ValueSet/HealthcareServiceCategory", "code" : "02/1" } ] } ], "serviceType" : [ { "concept" : { "coding" : [ { "system" : "https://fhir.by/ValueSet/HealthcareServiceType", "code" : "B01" } ] } } ], "specialty" : [ { "coding" : [ { "system" : "https://fhir.by/ValueSet/ServiceSpecialtyBy", "code" : "C003" } ] } ], "name" : "Расписание работы врача хирурга", "actor" : [ { "reference" : "PractitionerRole/PractitionerRoleForDemo" } ], "planningHorizon" : { "start" : "2024-08-01", "end" : "2024-09-01" }, "comment" : "Приемные часы с 8.00 до 16.30" }, "request" : { "method" : "POST", "url" : "https://pqms.cisz.by/SlotsApi/Fhir/Organization" } }, { "fullUrl" : "Slot/SlotSurgeryFreeBundle", "resource" : { "resourceType" : "Slot", "id" : "SlotSurgeryFreeBundle", "meta" : { "profile" : [ "https://fhir.by/StructureDefinition/SlotBy" ] }, "extension" : [ { "url" : "https://fhir.by/StructureDefinition/PaidSlot", "valueCodeableConcept" : { "coding" : [ { "system" : "https://fhir.by/ValueSet/EncounterTypeOfService", "code" : "free" } ] } }, { "url" : "https://fhir.by/StructureDefinition/PaidSlot", "valueCodeableConcept" : { "coding" : [ { "system" : "https://fhir.by/ValueSet/EncounterTypeOfService", "code" : "paid" } ] } }, { "url" : "https://fhir.by/StructureDefinition/PriceIfPaid", "valueQuantity" : { "value" : 20, "unit" : "BYN" } }, { "url" : "https://fhir.by/StructureDefinition/WithServiceRequest", "valueBoolean" : false }, { "url" : "https://fhir.by/StructureDefinition/OrganizationReference", "valueReference" : { "reference" : "Organization/OrganizationCISM" } } ], "serviceCategory" : [ { "coding" : [ { "system" : "https://fhir.by/ValueSet/HealthcareServiceCategory", "code" : "03/1" } ] } ], "serviceType" : [ { "concept" : { "coding" : [ { "system" : "https://fhir.by/ValueSet/MedicalServiceType", "code" : "C067.1" } ] } } ], "specialty" : [ { "coding" : [ { "system" : "https://fhir.by/ValueSet/ServiceSpecialtyBy", "code" : "C067" } ] } ], "appointmentType" : [ { "coding" : [ { "system" : "https://fhir.by/ValueSet/SlotAppointmentTypeBy", "code" : "routin" } ] } ], "schedule" : { "reference" : "Schedule/ScheduleSurgery" }, "status" : "free", "start" : "2024-08-09T08:00:00Z", "end" : "2024-08-09T08:15:00Z" }, "request" : { "method" : "POST", "url" : "https://pqms.cisz.by/SlotsApi/Fhir/Organization" } }, { "fullUrl" : "Slot/SlotSurgeryBusyBundle", "resource" : { "resourceType" : "Slot", "id" : "SlotSurgeryBusyBundle", "meta" : { "profile" : [ "https://fhir.by/StructureDefinition/SlotBy" ] }, "extension" : [ { "url" : "https://fhir.by/StructureDefinition/PaidSlot", "valueCodeableConcept" : { "coding" : [ { "system" : "https://fhir.by/ValueSet/EncounterTypeOfService", "code" : "free" } ] } }, { "url" : "https://fhir.by/StructureDefinition/WithServiceRequest", "valueBoolean" : false }, { "url" : "https://fhir.by/StructureDefinition/OrganizationReference", "valueReference" : { "reference" : "Organization/OrganizationCISM" } } ], "serviceCategory" : [ { "coding" : [ { "system" : "https://fhir.by/ValueSet/HealthcareServiceCategory", "code" : "03/1" } ] } ], "serviceType" : [ { "concept" : { "coding" : [ { "system" : "https://fhir.by/ValueSet/MedicalServiceType", "code" : "C067.1" } ] } } ], "specialty" : [ { "coding" : [ { "system" : "https://fhir.by/ValueSet/ServiceSpecialtyBy", "code" : "C067" } ] } ], "appointmentType" : [ { "coding" : [ { "system" : "https://fhir.by/ValueSet/SlotAppointmentTypeBy", "code" : "routin" } ] } ], "schedule" : { "reference" : "Schedule/ScheduleSurgery" }, "status" : "busy", "start" : "2024-08-09T08:15:00Z", "end" : "2024-08-09T08:30:00Z" }, "request" : { "method" : "POST", "url" : "https://pqms.cisz.by/SlotsApi/Fhir/Organization" } } ] }

Пример ответа в случае успешного импорта пакета в ЦИСЗ:

{ "resourceType": "Parameters", "parameter": [ { "name": "ProcessingStatus", "valueString": "Pending" }, { "name": "OperationStatusReference", "valueReference": { "reference": "https://staging.cisz.by/fhir/Bundle/12a23ffd-0972-11f0-b4f9-1e96f05ac188/$status" } }, { "name": "ResourceId", "valueString": "12a23ffd-0972-11f0-b4f9-1e96f05ac188" }, { "name": "ResourceType", "valueString": "Bundle" } ] }

Пример ответа в случае неуспешного импорта пакета в ЦИСЗ:

{ "resourceType": "OperationOutcome", "id": "fac6d9f8-1b0d-4469-ab69-4f121f4a071d", "meta": { "lastUpdated": "2025-03-25T12:17:57.2089093+00:00" }, "issue": [ { "severity": "error", "code": "invalid", "details": { "coding": [ { "system": "http://hl7.org/fhir/dotnet-api-operation-outcome", "code": "1028" }, { "system": "http://fire.ly/dotnet-sdk-operation-outcome-structdef-reference", "code": "Bundle(https://fhir.by/AbstractArea/StructureDefinition/Bundle/MedicationDocument).entry.resource->ServiceRequest(https://fhir.by/StructureDefinition/ServiceRequestConsult).reason.concept" } ], "text": "Instance count is 0, which is not within the specified cardinality of 1..1" }, "diagnostics": "Resource was validated using fhir.by package with version 0.2.3195", "expression": [ "Bundle.entry[4].resource[0].reason[0].concept, element Bundle(https://fhir.by/AbstractArea/StructureDefinition/Bundle/MedicationDocument).entry.resource->ServiceRequest(https://fhir.by/StructureDefinition/ServiceRequestConsult).reason.concept" ] } ] }
▲ Вверх