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

Метод бронирования слота

Методы создания и отмены бронирования.

Создание бронирования:

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

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

  1. Клиент получает ресурс Slot и на основе информации из полученного ресурса формирует ресурс Appointment;

  2. Клиент вызывает метод создания бронирования в ЦИСЗ и в теле запроса передает сформированный ресурс Appointment, а в заголовках запроса устанавливается тип передаваемого контента (content-type) в application/json.

ЦИСЗ может принимать только ресурс Appointment, соответствующий профилю “Бронирование слота” (AppointmentBy), при этом используемые справочные данные должны соответствовать значениям справочников ЦИСЗ.

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

• входящего ресурса на соответствие профилю “Бронирование слота” (AppointmentBy);

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

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

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

POST [FHIR_BASE]/Appointment/   
HEADERS: content-type:application/json

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

Название Профиль Описание
appintment Бронирование слота Бронирование на слот, формируемое клиентом на слот

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

Название Профиль Описание
result OperationOutcome В случае, если входящий ресурс не прошел валидацию, возвращается ресурс OperationOutcome с HTTP кодом 400 (BadRequest)
resource Бронирование слота В случае, если входящий ресурс прошел валидацию, возвращается ресурс Бронирование слота с HTTP кодом 200 (OK) и статусом booked

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

Название Дочерний элемент Описание
issue - Проблема, корневой элемент
  severity Важность
  code Код ошибки, предупреждения или информационный
  diagnostics Дополнительная текстовая информация

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

код HTTP OperationOutcome.issue.diagnostics Примечания  
200 -    
400 Невозможно забронировать слот. Дата и время окончания приема не должны быть меньше текущей даты и времени. Дата окончания приема: {appointment.End}, время запроса: время_запроса__” Возникает при попытке создания бронирования на прошедшую дату  
400 Слот недоступен для бронирования, выберите другой слот. Статус слота: {status} Возникает при попытке создания бронирования на слот, который имеет статус, отличный от free  
400 Значение поля Specialty в Appointment {Appointment_Specialty} не соответствует значению поля specialty в выбранном слоте {Sloty_Specialty}    
400 Значение поля ServiceCategory в Appointment {Appointment_ServiceCategory} не соответствует значению поля serviceCategory в выбранном слоте {Sloty_ServiceCategory}    
400 Значение поля ServiceType в Appointment {Appointment_ServiceType} не соответствует значению поля serviceType в выбранном слоте {Sloty_ServiceType}    
400 Значение поля AppointmentType в Appointment {Appointment_AppointmentType} не соответствует значению поля appointmentType в выбранном слоте {Sloty_AppointmentType}    
400 Дата и время приема, указанные в слоте и бронировании, должны совпадать. Время приема из слота: время_слота_    
400 Роль медицинского работника, указанная в бронировании, не соответствует роли медицинского работника в слоте    
400 Структурное подразделение, указанное в бронировании, не соответствует структурному подразделению в слоте    
400 Бронирование возможно только с направлением Если в слоте указано обязательное наличие направления на услугу, у пациента должно быть активное направление, совпадающее по параметрам со слотом и использующееся для бронирования в расширении extension:serviceRequestAppointed  
400 Значение поля ServiceCategory в Appointment {Appointment_ServiceCategory} не соответствует значению поля ServiceCategory в направлении {ServiceRequest_Category}    
400 Значение поля ServiceType в Appointment {Appointment_ServiceType} не соответствует значению поля ServiceType в направлении {ServiceRequest_ServiceType}    
400 Значение поля Specialty в Appointment {Appointment_Specialty} не соответствует значению Specialty в направлении {ServiceRequest_Specialty}    
400 Дата и время приема, указанные в направлении и бронировании, должны совпадать. Время приема из направления: время_направления_ или период_направления__ В направлении в элементе occurenceDate или occurencePeriod указаны даты или период, когда может создаваться Appointment  
400 Пациент уже имеет бронирование на данное расписание в этот день. Расписание: {Schedule_Reference} Если пациент уже имеет активное бронирование в расписании, для него невозможно создать еще одно на этот день  
400 Создание нового бронирования возможно только со статусом pending Если в создаваемом ресурсе указан статус, отличный от pending  

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

{ "resourceType": "Appointment", "id": "ExampleAppointmentSlot2", "meta": { "profile": [ "https://fhir.by/StructureDefinition/AppointmentBy" ] }, "extension": [ { "url": "https://fhir.by/StructureDefinition/PaidSlot", "valueCodeableConcept": { "coding": [ { "system": "https://fhir.by/ValueSet/EncounterTypeOfService", "code": "paid", "display": "Платные услуги" } ] } } ], "identifier": [ { "value": "A002", "assigner": { "reference": "Organization/9ad86c36-0f29-428d-b476-c8603a7cdd1f" } } ], "status": "pending", "serviceCategory": [ { "coding": [ { "system": "https://fhir.by/ValueSet/HealthcareServiceCategory", "code": "03/1", "display": "Амбулаторно-поликлиническая диагностика для взрослого населения" } ] } ], "serviceType": [ { "concept": { "coding": [ { "system": "https://fhir.by/ValueSet/MedicalServiceType", "code": "C061.1", "display": "Прием (осмотр, консультация) врача-хирурга первичный" } ] } } ], "specialty": [ { "coding": [ { "system": "https://fhir.by/ValueSet/ServiceSpecialtyBy", "code": "C061", "display": "Хирургия" } ] } ], "appointmentType": { "coding": [ { "system": "https://fhir.by/ValueSet/SlotAppointmentTypeBy", "code": "routin", "display": "плановый первичный прием" } ] }, "reason": [ { "concept": { "text": "Боли в мышцах, которые беспокоят длительное время" } } ], "priority": { "coding": [ { "system": "https://fhir.by/ValueSet/HealthCareForms", "code": "planned", "display": "Плановая медицинская помощь" } ] }, "start": "2025-08-09T08:00:00Z", "end": "2025-08-09T08:15:00Z", "slot": [ { "reference": "Slot/SlotSurgeryFree" } ], "created": "2025-05-29T08:15:00Z", "subject": { "reference": "Patient/PatientFullBundle" }, "participant": [ { "actor": { "reference": "PractitionerRole/3c057f8d-4369-4c5e-86be-f710dff3a91c" }, "status": "accepted" } ] }

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

{ "resourceType": "Appointment", "id": "b04f385c-426a-445c-b9c4-8f5ac9ac8278", "meta": { "profile": [ "https://fhir.by/StructureDefinition/AppointmentBy" ], "lastUpdated": "2025-05-29T09:17:36.9823861+00:00" }, "extension": [ { "url": "https://fhir.by/StructureDefinition/PaidSlot", "valueCodeableConcept": { "coding": [ { "system": "https://fhir.by/ValueSet/EncounterTypeOfService", "code": "paid", "display": "Платные услуги" } ] } } ], "identifier": [ { "value": "A002", "assigner": { "reference": "Organization/9ad86c36-0f29-428d-b476-c8603a7cdd1f" } } ], "status": "booked", "serviceCategory": [ { "coding": [ { "system": "https://fhir.by/ValueSet/HealthcareServiceCategory", "code": "03/1", "display": "Амбулаторно-поликлиническая диагностика для взрослого населения" } ] } ], "serviceType": [ { "concept": { "coding": [ { "system": "https://fhir.by/ValueSet/MedicalServiceType", "code": "C061.1", "display": "Прием (осмотр, консультация) врача-хирурга" } ] } } ], "specialty": [ { "coding": [ { "system": "https://fhir.by/ValueSet/ServiceSpecialtyBy", "code": "C061", "display": "Хирургия" } ] } ], "appointmentType": { "coding": [ { "system": "https://fhir.by/ValueSet/SlotAppointmentTypeBy", "code": "routin", "display": "плановый первичный прием" } ] }, "reason": [ { "concept": { "text": "Боли в мышцах, которые беспокоят длительное время" } } ], "priority": { "coding": [ { "system": "https://fhir.by/ValueSet/HealthCareForms", "code": "planned", "display": "Плановая медицинская помощь" } ] }, "start": "2025-08-09T08:00:00Z", "end": "2025-08-09T08:15:00Z", "slot": [ { "reference": "Slot/SlotSurgeryFree" } ], "created": "2025-05-29T08:15:00Z", "subject": { "reference": "Patient/PatientFullBundle" }, "participant": [ { "actor": { "reference": "PractitionerRole/3c057f8d-4369-4c5e-86be-f710dff3a91c" }, "status": "accepted" } ] }

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

{ "resourceType": "OperationOutcome", "id": "8bc2467e-560f-4069-a51e-e76a32a21d3c", "meta": { "lastUpdated": "2025-05-29T09:17:36.9823861+00:00" }, "issue": [ { "severity": "[severity]", "code": "[code]", "diagnostics": "текст ошибки" }] }

Отмена бронирования:

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

Последовательность действий для отмены бронирования:

  1. Клиент получает ресурс Appointment, который требуется отменить с помощью метода Получение заданной медицинской информации о пациенте;

  2. Клиент передает id ресурса Appointment в url;

  3. Клиент вызывает метод отмены бронирования в ЦИСЗ и в теле запроса передает ресурс Parameters, заполняет перечень параметров (указывает код причины отмены по справочнику Причины отмены бронирования и, при необходимости, заполняет текстовое поле причины), а в заголовках запроса устанавливается тип передаваемого контента (content-type) в application/json.

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

• входящего ресурса на соответствие заполненных параметров;

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

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

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

POST [FHIR_BASE]/Patient/[patient_id]/Appointment/[appointment_id]/$cancel   
HEADERS: content-type:application/json

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

Название Профиль Описание
parameters Parameters Ресурс, передающий параметры операции
Название Тип Описание  
cancellation-reason valueCoding Концепт причины отмены бронирования по справочнику Причины отмены бронирования Обязательный
notes valueString Текстовое представление причины бронирования Необязательный

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

Название Профиль Описание
result OperationOutcome В случае, если входящий ресурс не прошел валидацию, возвращается ресурс OperationOutcome с HTTP кодом 400 (BadRequest)
resource Бронирование слота В случае, если входящий ресурс прошел валидацию, возвращается ресурс Бронирование слота с HTTP кодом 200 (OK) и статусом cancelled

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

Название Дочерний элемент Описание
issue - Проблема, корневой элемент
  severity Важность
  code Код ошибки, предупреждения или информационный
  diagnostics Дополнительная текстовая информация

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

код HTTP OperationOutcome.issue.diagnostics Примечания
200 -  
400 Должен быть передан код и справочник для параметра ‘cancellation-reason’ Не передан параметр cancellation-reason
400 Параметр ‘cancellation-reason’ не должен быть пустым  
400 Указан неверный параметр в запросе  
400 Справочник {System} с кодом {Code} не найден Как правило, если в парметре cancellation-reason.coding.system указан неверный url справочника
400 Не удалось найти ресурс ‘Appointment’ c id ‘{Appointment_Id}’ Указан неверный id в url запроса

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

{ "resourceType": "Parameters", "parameter": [ { "name": "cancellation-reason", "valueCoding": { "system": "https://fhir.by/ValueSet/appointmentCancelationReason", "code": "pat-cpp" } } , { "name": "notes", "valueString": "улучшение состояния" } ] }

Пример ответа в случае успешной отмены бронирования в ЦИСЗ:

{ "resourceType": "Appointment", "id": "b04f385c-426a-445c-b9c4-8f5ac9ac8278", "meta": { "profile": [ "https://fhir.by/StructureDefinition/AppointmentBy" ], "lastUpdated": "2025-05-29T09:17:36.9823861+00:00" }, "extension": [ { "url": "https://fhir.by/StructureDefinition/PaidSlot", "valueCodeableConcept": { "coding": [ { "system": "https://fhir.by/ValueSet/EncounterTypeOfService", "code": "paid", "display": "Платные услуги" } ] } } ], "identifier": [ { "value": "A002", "assigner": { "reference": "Organization/9ad86c36-0f29-428d-b476-c8603a7cdd1f" } } ], "status": "cancelled", "serviceCategory": [ { "coding": [ { "system": "https://fhir.by/ValueSet/HealthcareServiceCategory", "code": "03/1", "display": "Амбулаторно-поликлиническая диагностика для взрослого населения" } ] } ], "serviceType": [ { "concept": { "coding": [ { "system": "https://fhir.by/ValueSet/MedicalServiceType", "code": "C061.1", "display": "Прием (осмотр, консультация) врача-хирурга" } ] } } ], "specialty": [ { "coding": [ { "system": "https://fhir.by/ValueSet/ServiceSpecialtyBy", "code": "C061", "display": "Хирургия" } ] } ], "appointmentType": { "coding": [ { "system": "https://fhir.by/ValueSet/SlotAppointmentTypeBy", "code": "routin", "display": "плановый первичный прием" } ] }, "reason": [ { "concept": { "text": "Боли в мышцах, которые беспокоят длительное время" } } ], "priority": { "coding": [ { "system": "https://fhir.by/ValueSet/HealthCareForms", "code": "planned", "display": "Плановая медицинская помощь" } ] }, "start": "2025-08-09T08:00:00Z", "end": "2025-08-09T08:15:00Z", "slot": [ { "reference": "Slot/SlotSurgeryFree" } ], "created": "2025-05-29T08:15:00Z", "subject": { "reference": "Patient/PatientFullBundle" }, "participant": [ { "actor": { "reference": "PractitionerRole/3c057f8d-4369-4c5e-86be-f710dff3a91c" }, "status": "accepted" } ] }

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

{ "resourceType": "OperationOutcome", "id": "8bc2467e-560f-4069-a51e-e76a32a21d3c", "meta": { "lastUpdated": "2025-05-29T09:17:36.9823861+00:00" }, "issue": [ { "severity": "[severity]", "code": "[code]", "diagnostics": "текст ошибки" }] }
▲ Вверх