Руководство к использованию стандарта FHIR в ЦИСЗ
0.2.6803 - 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" ] } ] }
▲ Вверх