Руководство к использованию стандарта FHIR в ЦИСЗ
0.2.6803 - ci-build

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

Метод импорта пакета медицинских данных о пациенте в ЦИСЗ в виде электронного документа является основным методом импорта (добавления) медицинской информации о пациенте в ЦИСЗ.

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

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

  1. МИС ОЗ формирует пакет медицинской информации о пациенте в виде ресурса Bundle;

  2. МИС ОЗ конвертирует ресурс Bundle в формат base64;

  3. МИС ОЗ вызывает локальный метод КП ЕСИФЮЛ sign и предает в метод ресурс Bundle в формате base64;

  4. Медицинский работник с помощью КП ЕСИФЮЛ подписывает Bundle, КП ЕСИФЮЛ возвращает в МИС ОЗ ответ в формате base64;

  5. МИС ОЗ вызывает метод импорта пакета медицинских данных о пациенте в ЦИСЗ в виде электронного документа и в теле запроса передает подписанный ресурс Bundle, в заголовках запроса устанавливается тип передаваемого контента (content-type) в application/cms.

Примечания:

  • При импорте пакета медицинской информации о пациенте в поле Composition.author обязательно должен быть указан идентификатор авторизованного медицинского работника (идентификатор содержится в токене авторизации - поле practitioner_id);

  • При импорте пакета медицинской информации о пациенте в поле Composition.custodian обязательно должен быть указан идентификатор организации здравоохранения, в которой происходила авторизация медицинского работника (идентификатор содержится в токене авторизации – поле department_ids).

Для использования метода в процессе проектирования и разработки допускается передача пакета медицинских данных без подписи со стороны медицинского работника, для этого необходимо в заголовках запроса установить тип передаваемого контента(content-type) в application/json. Отличие основного метода импорта от служебного метода импорта заключается в том, что информация в основной метод импорта передается не в виде JSON, а в двоичном подписанном виде.

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

• входящие FHIR-профили должны соответствовать профилям ЦИСЗ;

• используемые справочные данные должны соответствовать значениям справочников ЦИСЗ.

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

• входящего пакета медицинских данных на соответствие профилю пакета медицинских данных;

• ресурсов пакета медицинских данных на соответствие профилям ЦИСЗ;

• справочных данных пакета медицинских данных на соответствие значениям справочников ЦИСЗ.

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

POST [FHIR_BASE]/Bundle/$import  
HEADERS: content-type:application/cms

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

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

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

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

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

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

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

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

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

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

Пример запроса на импорт пакета медицинских данных о пациенте в ЦИСЗ:

{ "resourceType": "Bundle", "id": "BundleFull", "meta": { "profile": [ "https://fhir.by/AbstractArea/StructureDefinition/Bundle/MedicationDocument" ] }, "identifier": { "system": "https://fhir.by/ValueSet/urn:ietf:rfc:3986", "value": "urn:uuid:0c3151bd-1cbf-4d64-b04d-cd9187a4c6t9" }, "type": "document", "timestamp": "2024-04-07T11:12:21Z", "entry": [ { "fullUrl": "Composition/CompositionFullBundle", "resource": { "resourceType": "Composition", "id": "CompositionFullBundle", "meta": { "profile": [ "https://fhir.by/StructureDefinition/CompDocument" ] }, "status": "registered", "type": { "coding": [ { "system": "https://fhir.by/ValueSet/CompositionType", "code": "general", "display": "Общая медицинская информация" } ] }, "subject": [ { "reference": "Patient/PatientFullBundle" } ], "encounter": { "reference": "Encounter/EncounterFullBundle" }, "date": "2024-04-07T11:12:21Z", "author": [ { "reference": "Practitioner/ExampleDoctor" } ], "title": "CompDocument для наполненного Bundle", "custodian": { "reference": "Organization/OrganizationCISM" }, "event": [ { "detail": [ { "reference": { "reference": "Condition/DiagnosisrFullBundle" } } ] }, { "detail": [ { "reference": { "reference": "Observation/HeightFullBundle" } } ] }, { "detail": [ { "reference": { "reference": "Observation/WeightFullBundle" } } ] }, { "detail": [ { "reference": { "reference": "Observation/BMIFullBundle" } } ] }, { "detail": [ { "reference": { "reference": "Observation/ArterialBloodPressureFullBundle" } } ] }, { "detail": [ { "reference": { "reference": "Observation/HeartRateFullBundle" } } ] }, { "detail": [ { "reference": { "reference": "Observation/TemperatureFullBundle" } } ] } ] } }, { "fullUrl": "Patient/PatientFullBundle", "resource": { "resourceType": "Patient", "id": "PatientFullBundle", "meta": { "profile": [ "https://fhir.by/StructureDefinition/PatientWithIdentificationNumber" ] }, "identifier": [ { "type": { "coding": [ { "system": "https://fhir.by/ValueSet/PersonalDocumentType", "code": "INP" } ] }, "value": "7001112A009PB3", "period": { "start": "2024-01-31" } }, { "extension": [ { "extension": [ { "url": "https://fhir.by/StructureDefinition/PassportIssuedString", "valueString": "Центральным РУВД г Минска, 11.08.2021" }, { "url": "https://fhir.by/StructureDefinition/PassportIssuedDate", "valueDate": "2021-08-11" }, { "url": "https://fhir.by/StructureDefinition/PassportIssuedCode", "valueCodeableConcept": { "coding": [ { "system": "https://fhir.by/ValueSet/OCAM", "code": "106" } ] } } ], "url": "https://fhir.by/StructureDefinition/PassportIssued" } ], "use": "usual", "type": { "coding": [ { "system": "https://fhir.by/ValueSet/PersonalDocumentType", "code": "Passport-RB" } ] }, "value": "MP1234579" } ], "active": true, "name": [ { "family": "Иванов", "given": [ "Василий", "Васильевич" ], "period": { "start": "2024-01-31" } } ], "telecom": [ { "system": "phone", "value": "89001234567" } ], "gender": "male", "birthDate": "1989-01-31", "deceasedBoolean": false, "address": [ { "extension": [ { "url": "https://fhir.by/StructureDefinition/CoutryForAddresses", "valueCodeableConcept": { "coding": [ { "system": "https://fhir.by/ValueSet/CitizenshipCode", "code": "BY", "display": "Беларусь" } ] } }, { "url": "https://fhir.by/StructureDefinition/StreetGeoRegistry", "valueCodeableConcept": { "coding": [ { "system": "https://fhir.by/ValueSet/StreetGeoRegistry", "code": "72609920778", "display": "Переулок Снежный" } ] } }, { "url": "https://fhir.by/StructureDefinition/ApartmetnRoom", "valueString": "кв. 11" } ], "use": "home", "text": "Могилевская область, г.Могилев, Переулок Гоголя, д.19", "postalCode": "212011" } ] } }, { "fullUrl": "Encounter/EncounterFullBundle", "resource": { "resourceType": "Encounter", "id": "EncounterFullBundle", "meta": { "profile": [ "https://fhir.by/StructureDefinition/EncounterGeneral" ] }, "status": "completed", "class": [ { "coding": [ { "system": "https://fhir.by/ValueSet/VSTermsOfService", "code": "1" } ] } ], "priority": { "coding": [ { "system": "https://fhir.by/ValueSet/HealthCareForms", "code": "emergency" } ] }, "type": [ { "coding": [ { "system": "https://fhir.by/ValueSet/TypeOfHealthCare", "code": "primary" } ] } ], "subject": { "reference": "Patient/PatientFullBundle", "display": "Иванов Василий Васильевич" }, "serviceProvider": { "reference": "Organization/OrganizationCISM" }, "participant": [ { "actor": { "reference": "PractitionerRole/ExampleTherapist", "display": "Филатов Олег Михайлович" } } ], "actualPeriod": { "start": "2024-04-07T11:12:21Z", "end": "2024-04-07T11:25:21Z" }, "diagnosis": [ { "condition": [ { "reference": { "reference": "Condition/DiagnosisrFullBundle" } } ], "use": [ { "coding": [ { "system": "https://fhir.by/ValueSet/TypeOfDiagnosis", "code": "mainDiagnosis" } ] } ] } ] } }, { "fullUrl": "Condition/DiagnosisrFullBundle", "resource": { "resourceType": "Condition", "id": "DiagnosisrFullBundle", "meta": { "profile": [ "https://fhir.by/StructureDefinition/FinalDiagnosis" ] }, "extension": [ { "url": "https://fhir.by/StructureDefinition/KindOfDiagnosis", "valueCodeableConcept": { "coding": [ { "system": "https://fhir.by/ValueSet/KindOfDiagnosisCode", "code": "Final" } ] } }, { "url": "https://fhir.by/StructureDefinition/AssertedDate", "valueDateTime": "2024-04-07" } ], "clinicalStatus": { "coding": [ { "system": "http://terminology.hl7.org/CodeSystem/condition-clinical", "code": "active" } ] }, "code": { "coding": [ { "system": "https://fhir.by/ValueSet/InternClassificDiseases10", "code": "E11" } ], "text": "E11 - Сахарный диабет 2 типа" }, "subject": { "reference": "Patient/PatientFullBundle", "display": "Иванов Василий Васильевич" }, "onsetDateTime": "2024-04-07", "recordedDate": "2024-04-07", "participant": [ { "actor": { "reference": "PractitionerRole/ExampleTherapist", "display": "Филатов Олег Михайлович" } } ] } }, { "fullUrl": "Observation/HeightFullBundle", "resource": { "resourceType": "Observation", "id": "HeightFullBundle", "meta": { "profile": [ "https://fhir.by/StructureDefinition/AnthropometricDataBy" ] }, "status": "registered", "category": [ { "coding": [ { "code": "exam", "userSelected": false } ] } ], "code": { "coding": [ { "system": "https://fhir.by/ValueSet/AnthropoMetricCodes", "code": "body-height" } ] }, "subject": { "reference": "Patient/PatientFullBundle", "display": "Иванов Василий Васильевич" }, "encounter": { "reference": "Encounter/EncounterFullBundle" }, "effectiveDateTime": "2024-04-07T11:12:21Z", "performer": [ { "reference": "PractitionerRole/ExampleTherapist", "display": "Филатов Олег Михайлович" } ], "valueQuantity": { "value": 180, "unit": "cm", "system": "http://unitsofmeasure.org", "code": "cm" } } }, { "fullUrl": "Observation/WeightFullBundle", "resource": { "resourceType": "Observation", "id": "WeightFullBundle", "meta": { "profile": [ "https://fhir.by/StructureDefinition/AnthropometricDataBy" ] }, "status": "registered", "category": [ { "coding": [ { "code": "exam", "userSelected": false } ] } ], "code": { "coding": [ { "system": "https://fhir.by/ValueSet/AnthropoMetricCodes", "code": "body-weight" } ] }, "subject": { "reference": "Patient/PatientFullBundle", "display": "Иванов Василий Васильевич" }, "encounter": { "reference": "Encounter/EncounterFullBundle" }, "effectiveDateTime": "2024-04-07T11:12:21Z", "performer": [ { "reference": "PractitionerRole/ExampleTherapist", "display": "Филатов Олег Михайлович" } ], "valueQuantity": { "value": 90, "unit": "kg", "system": "http://unitsofmeasure.org", "code": "kg" } } }, { "fullUrl": "Observation/BMIFullBundle", "resource": { "resourceType": "Observation", "id": "BMIFullBundle", "meta": { "profile": [ "https://fhir.by/StructureDefinition/AnthropometricDataBy" ] }, "status": "registered", "category": [ { "coding": [ { "code": "exam", "userSelected": false } ] } ], "code": { "coding": [ { "system": "https://fhir.by/ValueSet/AnthropoMetricCodes", "code": "body-mass-index" } ] }, "subject": { "reference": "Patient/PatientFullBundle", "display": "Иванов Василий Васильевич" }, "encounter": { "reference": "Encounter/EncounterFullBundle" }, "effectiveDateTime": "2024-04-07T11:12:21Z", "performer": [ { "reference": "PractitionerRole/ExampleTherapist", "display": "Филатов Олег Михайлович" } ], "valueQuantity": { "value": 30 } } }, { "fullUrl": "Observation/ArterialBloodPressureFullBundle", "resource": { "resourceType": "Observation", "id": "ArterialBloodPressureFullBundle", "meta": { "profile": [ "https://fhir.by/StructureDefinition/VitalSignsBy" ] }, "status": "registered", "category": [ { "coding": [ { "code": "vital-signs", "userSelected": false } ] } ], "code": { "coding": [ { "system": "https://fhir.by/ValueSet/VitalSignsCodes", "code": "arterial-blood-pressure" } ] }, "subject": { "reference": "Patient/PatientFullBundle", "display": "Иванов Василий Васильевич" }, "encounter": { "reference": "Encounter/EncounterFullBundle" }, "effectiveDateTime": "2024-04-07T11:12:21Z", "performer": [ { "reference": "PractitionerRole/ExampleTherapist", "display": "Филатов Олег Михайлович" } ], "component": [ { "code": { "coding": [ { "system": "https://fhir.by/ValueSet/VitalSignsCodes", "code": "systolic-arterial-blood-pressure" } ] }, "valueQuantity": { "value": 140, "unit": "mm[Hg]", "system": "http://unitsofmeasure.org", "code": "mm[Hg]" } }, { "code": { "coding": [ { "system": "https://fhir.by/ValueSet/VitalSignsCodes", "code": "diastolic-arterial-blood-pressure" } ] }, "valueQuantity": { "value": 95, "unit": "mm[Hg]", "system": "http://unitsofmeasure.org", "code": "mm[Hg]" } } ] } }, { "fullUrl": "Observation/HeartRateFullBundle", "resource": { "resourceType": "Observation", "id": "HeartRateFullBundle", "meta": { "profile": [ "https://fhir.by/StructureDefinition/VitalSignsBy" ] }, "status": "registered", "category": [ { "coding": [ { "code": "vital-signs", "userSelected": false } ] } ], "code": { "coding": [ { "system": "https://fhir.by/ValueSet/VitalSignsCodes", "code": "heart-rate" } ] }, "subject": { "reference": "Patient/PatientFullBundle", "display": "Иванов Василий Васильевич" }, "encounter": { "reference": "Encounter/EncounterFullBundle" }, "effectiveDateTime": "2024-04-07T11:12:21Z", "performer": [ { "reference": "PractitionerRole/ExampleTherapist", "display": "Филатов Олег Михайлович" } ], "valueQuantity": { "value": 80, "unit": "/min", "system": "http://unitsofmeasure.org", "code": "/min" } } }, { "fullUrl": "Observation/TemperatureFullBundle", "resource": { "resourceType": "Observation", "id": "TemperatureFullBundle", "meta": { "profile": [ "https://fhir.by/StructureDefinition/VitalSignsBy" ] }, "status": "registered", "category": [ { "coding": [ { "code": "vital-signs", "userSelected": false } ] } ], "code": { "coding": [ { "system": "https://fhir.by/ValueSet/VitalSignsCodes", "code": "body-temperature" } ] }, "subject": { "reference": "Patient/PatientFullBundle", "display": "Иванов Василий Васильевич" }, "encounter": { "reference": "Encounter/EncounterFullBundle" }, "effectiveDateTime": "2024-04-07T11:12:21Z", "performer": [ { "reference": "PractitionerRole/ExampleTherapist", "display": "Филатов Олег Михайлович" } ], "valueQuantity": { "value": 36.5, "unit": "Cel", "system": "http://unitsofmeasure.org", "code": "Cel" } } } ] }

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

{ "resourceType": "Parameters", "parameter": [ { "name": "ProcessingStatus", "valueString": "Pending" }, { "name": "OperationStatusReference", "valueReference": { "reference": "http://staging.cisz.by/fhir/Patient/5d884255-1cf8-11ef-8fe6-232a0e90dedd/status" } }, { "name": "ResourceId", "valueString": "5d884255-1cf8-11ef-8fe6-232a0e90dedd" }, { "name": "ResourceType", "valueString": "Bundle" } ] }

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

{ "resourceType": "OperationOutcome", "id": "8bc2465e-560f-4069-a51e-e76a32a21d3c", "meta": { "lastUpdated": "2024-05-29T09:17:36.9823861+00:00" }, "issue": [ { "severity": "error", "code": "invariant", "details": { "coding": [ { "system": "http://hl7.org/fhir/dotnet-api-operation-outcome", "code": "1012" }, { "system": "http://fire.ly/dotnet-sdk-operation-outcome-structdef-reference", "code": "Bundle(https://fhir.by/AbstractArea/StructureDefenition/Bundle/MedicationDocument)" } ], "text": "Instance failed constraint bdl-11 \"A document must have a Composition as the first resource\"" }, "expression": [ "Bundle, element Bundle(https://fhir.by/AbstractArea/StructureDefenition/Bundle/MedicationDocument)" ] }, { "severity": "error", "code": "invariant", "details": { "coding": [ { "system": "http://hl7.org/fhir/dotnet-api-operation-outcome", "code": "1012" }, { "system": "http://fire.ly/dotnet-sdk-operation-outcome-structdef-reference", "code": "Bundle(https://fhir.by/AbstractArea/StructureDefenition/Bundle/MedicationDocument)" } ], "text": "Instance failed constraint bdl-Composition \"A document must have one Composition resource, and the profile must be \"https://fhir.by/StructureDefinition/CompDocument\"" }, "expression": [ "Bundle, element Bundle(https://fhir.by/AbstractArea/StructureDefenition/Bundle/MedicationDocument)" ] } ] }
▲ Вверх