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

Запись на медицинские услуги

Кейсы

Визит медицинского работника на дом

Участники:

  • врачи (медицинские сестры) стационаров,
  • врачи бригад СМП,
  • врачи (фельдшеры, медицинские сестры) УЗ, оказывающих амбулаторную медицинскую помощь,
  • регистраторы УЗ, оказывающих абулатоную медицинскую помощь
№ п/п Описание кейса Перечень основных передаваемых ресурсов Примечания
1 Создание заявки на активный визит    
1.1 В УЗ “А” создан и импортирован в ЦИСЗ ресурс “Вызов врача на дом” ServiceRequestHomeVisit MedicationDocument
1.2 Медицинских работник (регистратор) УЗ “В” производит поиск ресурсов “Вызов врача на дом” в контексте организации    
1.3 Врач (медицинская сестра) после выполнения визита к пациенту получает в контексте пациента ресурс “Вызов врача на дом”    
1.4 Врач (медицинская сестра) после выполнения визита к пациенту импортирует сведения о визите в ЦИСЗ EncounterGeneral
ObservationSubjective
VitalSignsBy
FinalDiagnosis
MedicationDocument
ServiceRequestHomeVisit.status=completed
2 Отмена активного визита, который был создан медицинским работником    
2.1 В УЗ “А” создан и импортирован в ЦИСЗ ресурс “Вызов врача на дом” ServiceRequestHomeVisit MedicationDocument
2.2 Врач (медицинская сестра) УЗ “В” получает в контексте пациента ресурс “Вызов врача на дом”    
2.3 Врач (медицинская сестра) УЗ “В” отменяет активный визит с указание причины отмены RejectionBy MedicationDocument
ServiceRequestHomeVisit.status=revoked

Формирование графика (расписания) работы врачей и кабинетов УЗ

Участники:

  • заместители главных врачей УЗ,
  • заведующие отделениями,
  • старшие медицинские сестры,
  • другие лица, уполномоченные составлять графики (расписания) приема врачей или работы кабинетов
№ п/п Описание кейса Перечень основных передаваемых ресурсов Примечания
3 Манипуляции с расписанием и слотами    
3.1 Медицинский работник формирует в МИС и импортирует в ЦИСЗ график (расписание) приема врачей или работы кабинетов вместе со слотами ScheduleBy
Schedule.active=true
SlotBy
Slot.status = free
OrganizationBundle
{Schedule} entry.request.method = “POST”
{Slot} entry.request.method = “POST”
3.2 Медицинский работник редактирует расписание + слоты ScheduleBy
Schedule.active=true
SlotBy
Slot.status = free
OrganizationBundle
{Schedule} entry.request.method = “PUT”
{Slot} entry.request.method = “PUT”
3.3 Медицинский работник редактирует только слоты:    
3.3.1 изменяет значение элементов слота SlotBy
Slot.status = free
OrganizationBundle
{Slot} entry.request.method = “PUT”
3.3.2 закрывает слот (изменяет статус с free на busy-unavailable) SlotBy
Slot.status = busy-unavailable
OrganizationBundle
{Slot} entry.request.method = “PUT”
3.3.3 добавляет новые свободные слоты в расписание SlotBy
Slot.status = free
OrganizationBundle
{Slot} entry.request.method = “POST”
3.4 Медицинский работник удаляет расписание ScheduleBy
Schedule.active=false
OrganizationBundle
{Schedule} entry.request.method = “PUT”
Slot.status → ‘busy-unavailable’

Запись на медицинские услуги

Участники:

  • врачи,
  • фельдшеры,
  • медицинские сестры,
  • регистраторы,
  • другие медицинские работники, которым в рамках установленного в УЗ бизнеспроцесса разрешено бронировать слоты и отменять бронирование
№ п/п Описание кейса Перечень основных передаваемых ресурсов Примечания
0 Предварительные условия    
0.1 Создание направления на исследование ServiceRequest MedicationDocument
0.2 Медицинский работник формирует в МИС и импортирует в ЦИСЗ график (расписание) приема врачей или работы кабинетов вместе со слотами ScheduleBy
Schedule.active=true
SlotBy
Slot.status = free
OrganizationBundle
{Schedule} entry.request.method = “POST”
{Slot} entry.request.method = “POST”
1 Бронирование слотов без направления    
1.1 Получение слотов, соответствующих специализации и типу услуги    
1.2 Бронирование слота AppointmentBy Метод создания бронирования:
POST [FHIR_BASE]/Appointment/
2 Бронирование слотов с направлением    
2.1 Получение направления    
2.2 Получение слотов, соответствующих специализации и типу услуги, указанному в направлении    
2.3 Бронирование слота AppointmentBy Метод создания бронирования:
POST [FHIR_BASE]/Appointment/
3 Отмена бронирования слотов    
3.1 Получение забронированных слотов в контексте пациента    
3.2 Отмена бронирования Parameters Метод отмены бронирования:
POST [FHIR_BASE]/Patient/[patient_id]/Appointment/[appointment_id]/$cancel
4 Оказание услуги с формированием Encounter    
4.1 Медицинский работник получает информацию о бронировании слота на оказываемую услугу    
4.2 Медицинский работник формирует в МИС Encounter, другие необходимые ресурсы и импортирует пакет медицинской информации в ЦИСЗ EncounterGeneral
Encounter.status=completed
Encounter.appointment
MedicationDocument
Appointment.status → fulfilled

Слоты

Общие положения

  • Мис импортирует в ЦИСЗ все созданные в контексте расписания слоты;
  • Мис может создавать и импортировать в ЦИСЗ только слоты со статусом free;
  • Вариант слота зависит от значения его статуса и некторых элементов ресурса.

Варианты слотов

Тип слота Статус Особенности формирования значений элементов ресурса Использование в бизнес-процессе УЗ Примечание
Свободные слоты (для записи пациентов на медицинские услуги, оказываемые на внебюджетной основе) free extension[reserve] = false
extension[fromOrganization] - 0..0
extension[withServiceRequest] = false|true
extension[paid] != free
Появляются в ЦИСЗ:
1. после создания и импорта МИС;
2. после отмены бронирования.
Доступны для записи:
1. через регистратуру (регистратором);
2. медицинским работником (врачом, фельдшером, медицинской сестрой);
3. пациентом из ЛКП или портал записи.
 
Свободные слоты (для записи на медицинские услуги пациентов, прикрепленных к организации, в которой эти услуги оказываются) free extension[reserve] = false
extension[fromOrganization] - 0..1
extension[withServiceRequest] = false
extension[paid] = free
Появляются в ЦИСЗ:
1. после создания и импорта МИС;
2. после отмены бронирования.
Доступны для записи:
1. через регистратуру (регистратором);
2. медицинским работником (врачом, фельдшером, медицинской сестрой);
3. пациентом из ЛКП или портал записи.
Запись пациента на медицинскую услугу, которая может быть оказана без направления в организации здравоохранения, за которой закреплен пациент (например, запись на прием к врачу общей практики, запись на вакцинацию и др.)
Свободные слоты (для записи на медицинские услуги пациентов, прикрепленных к УЗ, указанным в extension[fromOrganization]) free extension[reserve] = false
extension[fromOrganization] - 1..*
extension[withServiceRequest] = true
extension[paid] - любое значение
Появляются в ЦИСЗ:
1. после создания и импорта МИС;
2. после отмены бронирования.
Доступны для записи:
1. через регистратуру (регистратором);
2. медицинским работником (врачом, фельдшером, медицинской сестрой);
3. пациентом из ЛКП или портал записи.
Запись пациента на медицинскую услугу воможна только по направлению из организаии, которая указана в расширении extension[fromOrganization]
Свободные слоты (для записи на медицинские услуги пациентов, прикрепленных к УЗ, указанным в extension[fromOrganization]) free extension[reserve] = true
extension[fromOrganization] - 1..*
extension[withServiceRequest] = true
extension[paid] = free
Появляются в ЦИСЗ:
1. после создания и импорта МИС;
2. после отмены бронирования.
Доступны для записи:
1. через регистратуру (регистратором);
2. медицинским работником (врачом, фельдшером, медицинской сестрой).
Запись пациента на медицинскую услугу воможна только по направлению из организаии, которая указана в расширении extension[fromOrganization]
Забронированные слоты busy   Изменение статуса с free на busy происходит на стороне ЦИСЗ при успешном бронировании свободного слота МИС не может импортировать в ЦИСЗ слоты со статусом busy!
Слоты закрыты для бронирования busy-unavailable extension[cancellationReason] - 1..1
comment - 1..1
Появляются в ЦИСЗ:
1. в результате изменения статуса слота медицинским работником;
2. после отмены расписания, с которым связаны слоты.
Слоты закрываются для бронирования в случаях, когда они были созданы по ошибке, или когда медицинская услуга по каким-либо причинам не может быть оказана.
МИС не может импортировать в ЦИСЗ слоты со статусом busy!
Изменение статуса busy-unavailable невозможно!

Возможные изменения статусов слотов

Исходное значение Целевое значение Механизмы изменения статусов
free busy Реализовано на стороне ЦИСЗ при успешном бронировании
free busy-unavailable 1. Изменение статуса медицинским работником
2. Реализовано на стороне ЦИСЗ при удалении расписания
busy free Реализовано на стороне ЦИСЗ при успешной отмене бронирования
busy busy-unavailable 1. Изменение статуса медицинским работником
2. Реализовано на стороне ЦИСЗ при удалении расписания

Бронирование слота

Возможные изменения статусов бронирования

Исходное значение Целевое значение Механизмы изменения статусов
pending booked Реализовано на стороне ЦИСЗ при успешном бронировании
booked fulfilled Реализовано на стороне ЦИСЗ при оказании услуги, формировании и импорте Encounter со ссылкой на Appointment
booked cancelled Реализовано на стороне ЦИСЗ:
1. при отмене расписания,
2. при изменении медицинским работником статуса слота, на который ссылается Appointment, с busy на busy-unavailable

Диаграммы последовательности

Визит медицинского работника на дом


sequenceDiagram
  participant mis01 as "МИС-1"
  participant cish as "ЦИСЗ"
  participant mis02 as "МИС-2"
  autonumber
Note over mis01,cish: Оформление активного визита
  loop Количество заявок = n
    mis01 ->> mis01: Create ServiceRequestHomeVisin
    mis01 ->> cish: POST[FHIR BASE]/Bundle/$import/MedicationDocument + Patient + ServiceRequestHomeVisin.status=active
    cish -->> mis01: 200 OK/Bundle status 'successed'
  end
Note over cish,mis02: Получение информации о заявках на визиты
  loop С периодичностью, установленной правилами УЗ
  mis02 ->> cish: GET[FHIR BASE]/Organization/[OrganizationId]/ServiceRequestBy?_profile=https://fhir.by/StructureDefinition/ServiceRequestHomeVisit&status=active
  cish -->> mis02: 200 OK/total=n/[ServiceRequestHomeVisit]
  mis02 ->> mis02: Распределение визитов
  end
Note over cish,mis02: Результаты визита
  mis02 ->> cish: GET [FHIR BASE]/Patient/[patientId]/ServiceRequest?_profile=https://fhir.by/StructureDefinition/ServiceRequestHomeVisit&status=active
  cish -->> mis02: 200 OK/total=1/[ServiceRequestHomeVisit]  
  alt Визит выполнен
    mis02 ->> mis02: Create EncounterGeneral and other resources
    mis02 ->> cish: POST[FHIR BASE]/Bundle/$import/MedicationDocument + Patient + EmcounterGeneral.basedOn=Reference(ServiceRequestHomeVisit)
    cish ->> cish: ServiceRequestHomeVisit.status=completed
    cish -->> mis02: 200 OK/Bundle status 'successed'
  else Отмена визита
    mis02 ->> mis02: Create RejectionBy
    mis02 ->> cish: POST[FHIR BASE]/Bundle/$import/MedicationDocument + Patient + RejectionBy.topicReference=Reference(ServiceRequestHomeVisit)
    cish ->> cish: ServiceRequestHomeVisit.status=revoked
    cish -->> mis02: 200 OK/Bundle status 'successed'
  end

На диаграмме представлены кейсы, связанные с назначением активных визитов одним учраждением здравоохранения другому. Если назначение визита медицинского работника на дом к пациенту выполняется в рамках МИС одного учреждения здравоохранения, то импортировать эти ресурсы ServiceRequestHomeVisit в ЦИСЗ не целесообразно.

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

Порядок действий:

  1. Медицинский работник УЗ-1 формирует в МИС заявку для УЗ-2 на выполнение визита на дом к пациенту.
  2. Медицинский работник подписывает пакет медицинской информации ЭЦП и отправляет в ЦИСЗ.
  3. При успешной отравке пакета будет получен статус импорта - ‘seссessed’.
  4. В учреждении здравоохранения лицо, которое уполномочено принимать заявки на визиты медицинских работников на дом к пациентам, с периодичностью, установленной бизнес процессами УЗ, получает информацию из ЦИСЗ о наличии заявок.
  5. В ответе на запрос из ЦИСЗ в составе бандла типа ‘searchset’ приходит массив ресурсов ServiceRequestHomeVisit.
  6. В рамках УЗ происходит распределение визитов.
  7. Медицинский работник УЗ-2, которому поручено выполнение визита в контексте пациента получает сведения о заявке.
  8. В ответе на запрос из ЦИСЗ в составе бандла типа ‘searchset’ приходит массив, в котором находится один ресурс ServiceRequestHomeVisit.
  9. В случае, если медицинский работник выполнил визит, он формирует в МИС необходимые ресурсы (EncountetGeneral, FinalDiagnosis и др.). При этом EncounterGeneral должен содержать ссылку на ресурс ServiceRequestHomeVisit.
  10. Медицинский работник подписывает пакет медицинской информации ЭЦП и отправляет в ЦИСЗ.
  11. На стороне ЦИСЗ статус ресурса ServeceRequestHomeVisit изменится на ‘completed’.
  12. При успешной отправке пакета будет получен статус импорта - ‘seccessed’.
  13. В случае, если визит не был выполнен, медицинский работник УЗ-2 производит отмену визита с указанием причины отмены, формируя в МИС ресурс RejectionBy, который должен содержать ссылку на ресурс ServiceRequestHomeVisit.
  14. Медицинский работник подписывает медицинской информации ЭЦП и отправляет в ЦИСЗ.
  15. На стороне ЦИСЗ статус ресурса ServeceRequestHomeVisit изменяется на ‘revoked’.
  16. При успешной отправке пакета будет получен статус импотра - ‘seccessed’.

Формирование графика (расписания) работы врачей и кабинетов УЗ


sequenceDiagram
  participant mis as "МИС"
  participant cish as "ЦИСЗ"
  autonumber
  Note over mis,cish: Формление графика (расписания)
    mis ->> mis: Create ScheduleBy and SlotBy
    mis ->> cish: POST[FHIR BASE]/Bundle/$import/OrganizationBundle + ScheduleBy.active=true + SlotBy.status=free
    cish -->> mis: 200 OK/Bundle status 'successed'
  Note over cish,mis: Редактирование расписания
    mis ->> cish: GET[FHIR BASE]/Organization/[OrganizationId]/Schedule?_profile=https://fhir.by/StructureDefinition/ScheduleBy&[params]
    cish -->> mis: 200 OK/total=1/[ScheduleBy_01]
    mis ->> mis: Update ScheduleBy_01
    mis ->> cish: POST[FHIR BASE]/Bundle/$import/OrganizationBundle + ScheduleBy_01 [entry.request.method = "PUT"]
    cish ->> cish: Update ScheduleBy_01
    cish -->> mis: 200 OK/Bundle status 'successed'
  Note over cish,mis: Изменение слота
    mis ->> cish: GET[FHIR BASE]/Organization/[OrganizationId]/Schedule?_profile=https://fhir.by/StructureDefinition/ScheduleBy&[params]
    cish -->> mis: 200 OK/total=1/[ScheduleBy_01]
    mis ->> cish: GET[FHIR BASE]/Organization/[OrganizationId]/Slot?_profile=https://fhir.by/StructureDefinition/SlotBy&[params]
    cish -->> mis: 200 OK/total=n/[SlotBy_N]
    par Меняем значение элементов слота (кроме status)
      mis ->> mis: Update Slot_01, Slot_02 ...
      mis ->> cish: POST[FHIR BASE]/Bundle/$import/OrganizationBundle + SlotBy_01 + SlotBy_02 + ... [entry.request.method = "PUT"]
      cish ->> cish: Update SlotBy_01, Slot_02 ...
      cish -->> mis: 200 OK/Bundle status 'successed'
    and Закрываем слот для записи
      mis ->> mis: Update SlotBy_02.status=busy-unavailable
      mis ->> cish: POST[FHIR BASE]/Bundle/$import/OrganizationBundle + SlotBy_02 [entry.request.method = "PUT"]
      cish ->> cish: Update SlotBy_02
      cish -->> mis: 200 OK/Bundle status 'successed'
    and Добавляем в расписание новые слоты
      mis ->> mis: Create Slot_04, Slot_05 ...
      mis ->> cish: POST[FHIR BASE]/Bundle/$import/OrganizationBundle + SlotBy_04 + SlotBy_05 + ... [entry.request.method = "POST"]
      cish ->> cish: Create SlotBy_04, Slot_05 ...
      cish -->> mis: 200 OK/Bundle status 'successed'   
    end
  Note over cish,mis: Удаление расписания
    mis ->> cish: GET[FHIR BASE]/Organization/[OrganizationId]/Schedule?_profile=https://fhir.by/StructureDefinition/ScheduleBy&[params]
    cish -->> mis: 200 OK/total=1/[ScheduleBy_01]
    mis ->> mis: Update ScheduleBy_01
    mis ->> cish: POST[FHIR BASE]/Bundle/$import/OrganizationBundle + ScheduleBy_01.active=false [entry.request.method = "PUT"]
    cish ->> cish: Update ScheduleBy_01 and slots related ones
    cish -->> mis: 200 OK/Bundle status 'successed'  

Важно! Операция отмены импорта бандла после удаления расписания не проводится, а вместо этого создается новое расписание.

Порядок действий

  1. Медицинский работник формирует в МИС расписание.
  2. Медицинский работник подписывает пакет информации в контексте организации и отравляет в ЦИСЗ.
  3. При успешной отравке пакета будет получен статус импорта - ‘seссessed’.
  4. Медицинский работник получает из ЦИСЗ расписание, которое планирует изменить.
  5. В ответе на запрос из ЦИСЗ в составе бандла типа ‘searchset’ приходит массив ресурсов ScheduleBy.
  6. Медицинский работник выбирает расписание, которое необходим изменить, и вносит изменения.
  7. Медицинский работник подписывает пакет информации в контексте организации ЭЦП и отправляет в ЦИСЗ. Важно! Schedul.id импортируемого ресурса должен соответствовать Schedule.id ресурса, полученного из ЦИСЗ.
  8. На стороне ЦИСЗ происходит обновление ресурса ScheduleBy.
  9. При успешной отравке пакета будет получен статус импорта - ‘seссessed’.
  10. Если медицинскому работнику необходимо внести изменения в слоты, то предварительно он должен получить из ЦИСЗ расписание, слоты которого подлежат изменению.
  11. В ответе на запрос из ЦИСЗ в составе бандла типа ‘serchset’ приходит массив ресурсов ScheduleBy.
  12. Медицинский рботник выбирает расписание и получает из ЦИСЗ слоты, имеющие отношение к нему отношение.
  13. В ответе на запрос из ЦИСЗ в составе бандла типа ‘serchset’ приходит массив ресурсов SlotBy.
  14. Медицинский работник вносит необходимые изменения в значения элементов слотов.
  15. Медицинский работник подписывает пакет информации в контексте организации ЭЦП и оправляет в ЦИСЗ. Важно! Slot.id импортируемых ресурсов должены соответствовать Slot.id ресурсов, полученных из ЦИСЗ.
  16. На стороне ЦИСЗ происходит обновление ресурсов SlotBy.
  17. При успешной отравке пакета будет получен статус импорта - ‘seссessed’.
  18. При необходимости закрытия слотов для записи медицинский работник на стороне МИС меняет значение Slot.status с free на busy-unaveilable с указанием причины закрытия слота.
  19. Медицинский работник подписывает пакет информации в контексте организации ЭЦП и оправляет в ЦИСЗ. Важно! Slot.id импортируемых ресурсов должены соответствовать Slot.id ресурсов, полученных из ЦИСЗ.
  20. На стороне ЦИСЗ происходит обновление ресурсов SlotBy.
  21. При успешной отравке пакета будет получен статус импорта - ‘seссessed’.
  22. При необходимости добавления в расписание слотов, открытых для записи, медицинский работник создает в МИС новые слоты.
  23. Медицинский работник подписывает пакет информации в контексте организации ЭЦП и оправляет в ЦИСЗ.
  24. На стороне ЦИСЗ происходит обновление ресурсов SlotBy.
  25. При успешной отравке пакета будет получен статус импорта - ‘seссessed’.
  26. Если необходимо удалить расписание, то предварительно он должен получить из ЦИСЗ расписание, которое необходимо удалить.
  27. В ответе на запрос из ЦИСЗ в составе бандла типа ‘serchset’ приходит массив ресурсов ScheduleBy.
  28. Медицинский рботник выбирает расписание, которое необходимо удалить, и изменяет в нем значение элемента Schedule.active с true на false.
  29. Медицинский работник подписывает пакет информации в контексте организации ЭЦП и оправляет в ЦИСЗ.
  30. На стороне ЦИСЗ происходит обновление ресурсов ScheduleBy.
  31. При успешной отравке пакета будет получен статус импорта - ‘seссessed’.

Запись на медицинские услуги


sequenceDiagram
  participant mis as "МИС"
  participant cish as "ЦИСЗ"
  autonumber
  Note over mis,cish: Бронирование слотов

    mis ->> cish: GET[FHIR BASE]/Organization/[OrganizationId]/Slot?_profile=https://fhir.by/StructureDefinition/SlotBy&[params]
    cish -->> mis: 200 OK/total=N/[SlotBy_N]
    opt
      mis ->> cish: GET[FHIR BASE]/Patient/[PatientId]/Appointment?_profile=https://fhir.by/StructureDefinition/AppointmentBy&status=booked
      cish -->> mis: 200 OK/total=N/[AppointmentBy_N]
    end
    mis ->> mis: Create AppoitmentBy_01
    mis ->> cish: POST[FHIR BASE]/Appointment [Body: AppointmentBy_01.status=pending]
    alt Бронирование прошло успешно
      cish -->> mis: 200 OK/AppointmentBy_01.status=booked
    else Не удалось бронировать слот
      cish -->> mis: 400 Bad Request/OperationOutcome
    end
  Note over cish,mis: Отмена бронирования
    mis ->> cish: GET[FHIR BASE]/Patient/[PatientId]/Appointment?_profile=https://fhir.by/StructureDefinition/AppointmentBy&status=booked
    cish -->> mis: 200 OK/total=N/[AppointmentBy_N]
    mis ->> cish: POST[FHIR BASE]/Appointment/[Appointment_01Id]/$cancel [Body: Parameters.cancellation-reason]
    alt Отмена прошла успешно
      cish -->> mis: 200/AppointmentBy_01.status=cancelled
    else Не удалось отменить слот
      cish -->> mis: 400 Bad Request/OperationOutcome
    end
  Note over cish,mis: Оказание услуги
    mis ->> cish: GET[FHIR BASE]/Patient/[PatientId]/Appointment?_profile=https://fhir.by/StructureDefinition/AppointmentBy&status=booked
    cish -->> mis: 200 OK/total=1/[AppointmentBy_01]
    mis ->> mis: Create EnconterGeneral and other
    mis ->> cish: POST[FHIR BASE]/Bundle/$import/MedicationDocument + EncounterGeneral.appointment=Reference(AppointmentBy_01)
    cish ->> cish: Update Appointment_01.status=fulfilled
    cish -->> mis: 200 OK/Bundle status 'successed'

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

Запись на медицинские услуги будет проводиться также из личных кабинетов пациентов (ЛКП) и портала записи на медицинские услуги.

Порядок действий:

  1. Медицинский работник получает из ЦИСЗ информацию о наличии соответствующих требуемым параметрам свободных слотов.
  2. В ответе на запрос из ЦИСЗ в составе бандла типа ‘searchset’ приходит массив ресурсов SlotBy. Медицинский работник выбирает необходимый слот.
  3. Медицинский работник получает из ЦИСЗ информацию о наличии у пациента записей на исследования (желательно для предотвращения пересечения временных интервалов исследований).
  4. В ответе на запрос из ЦИСЗ в составе бандла типа ‘searchset’ приходит массив ресурсов AppointmentBy.
  5. Медицинский работник в МИС форирует бронирование на слот.
  6. Медицинский после прохождения авторизации с помощью ЭЦП отправляет запрос в ЦИСЗ.
  7. В случае успешного бронирования в ответе на запрос будет получен импортированный ресурс AppointmentBy со статусом booked.
  8. В случае, если не удалось бронировать слот, будет получен ресурс OperationOutcome с текстом ошибки.
  9. При отмене бронирования медицинский работник получает из ЦИСЗ информацию на медицинские услугах, на которые записан пациент.
  10. В ответе на запрос из ЦИСЗ в составе бандла типа ‘searchset’ приходит массив ресурсов AppointmentBy.
  11. Медицинский работник выбирает бронирование и отменяет его с помощью метода $cancel
  12. В случае успушной отмены в ответе на запрос будет получен отмененный ресурс AppointmentBy со статусом cancelled.
  13. В противном случае - ресурс OperationOutcome с текстом ошибки.
  14. При оказании услуги, на которую был записан паиент медицинский работник получает из ЦИСЗ информацию о бронировани пациента на оказываемую медицинскую услугу.
  15. В ответе назапрос из ЦИСЗ в составе бандла типа ‘searchset’ приходит массив, который содержит ресурс AppointmentBy, соответствующий оказываемой медицинской услуге.
  16. Если в результате оказания медицинской услуги в МИС формируется EncounterGeneral со статусом completed и другие ресурсы, связанные услугой,  то в значении элемента Encounter.appointment должна быть указана ссылка на Appointment.
  17. Медицинский работник подписывает ЭЦП пакет медицинской информации о пациенте и отправляет в ЦИСЗ.
  18. На стороне ЦИСЗ статус ресурса AppointmentBy изменится на fulfilled.
  19. При успешной отравке пакета будет получен статус импорта - ‘seссessed’.

POSTMAN-коллекция 

Скачать коллекцию

Скачать окружение

Логические проверки

№ п/п Кейсы Текст сообщения об ошибке для технических специалистов Текст сообщения об ошибке в человекочитаемом формате Описано в IG?
  Визит медицинского работника на дом      
1 При попытке в составе пакета медицинской информации о пациенте импортировать ресурс Encounter, который ссылается на ресурс ServiceRequestHomeVisit со статусом != active, будет возвращена следующая ошибка В Encounter.basedOn должна быть указана ссылка на ServiceRequest со статусом ‘active’. Сведения об оказании медицинской помощи на дому ссылаются либо на отмененный вызов врача на дом, либо на вызов врача на дом, который уже был выполнен. error
2 При попытке в составе пакета медицинской информации о пациенте импортировать ресурс RejectionHomeVisit, который ссылается на ресурс ServiceRequestHomeVisit со статусом completed, будет возвращена следующая ошибка Невозможно создать отказ от направления, которое было исполнено. Невозможно создать отказ от направления, которое было исполнено. error
3 При попытке в составе пакета медицинской информации о пациенте импортировать ресурс RejectionHomeVisit, который ссылается на ресурс ServiceRequestHomeVisit со статусом revoked, будет возвращена следующая ошибка Невозможно создать отказ от направления, которое было отменено. Невозможно создать отказ от направления, которое было отменено. error
  Формирование графика (расписания) работы врачей и кабинетов УЗ      
4 При попытке создать или обновить расписание с горизонтом планирования, в котором дата начала не указана, система выдаст ошибку Невозможно {actionText} расписание. Ошибка получения даты начала расписания {schedule.PlanningHorizon.Start}. Расписание должно содержать дату начала периода, на который оно было составлено. error
5 При попытке создать или обновить расписание с горизонтом планирования, в котором дата окончания не указана, система выдаст ошибку Невозможно {actionText} расписание. Ошибка получения даты окончания расписания {schedule.PlanningHorizon.End}. Расписание должно содержать дату окончания периода, на который оно было составлено. error
6 При попытке создать или обновить расписание с горизонтом планирования, в котором дата окончания меньше текущей даты, система выдаст ошибку Невозможно {actionText} расписание. Дата окончания расписания {schedule.PlanningHorizon.End} не должна быть меньше текущей даты {now}. Дата окончания периода, на который составлено расписания, должна быть больше текущей даты. error
7 При попытке создать или обновить расписание с горизонтом планирования, в котором дата окончания меньше даты начала, система выдаст ошибку Невозможно {actionText} расписание. Дата начала расписания {schedule.PlanningHorizon.Start} не должна быть больше даты окончания расписания {schedule.PlanningHorizon.End}. Дата окончания периода, на который составлено расписания, должна быть больше даты начала. error
8 При попытке создать или обновить расписание, которое пересекается с другим расписанием по конкретным услугам, врачу и времени, система выдаст ошибку Невозможно {actionText} расписание, т.к. оно пересекается с другим расписанием {savedSchedule.Id}. По услуге: {savedSchedule.serviceCategory.coding.code.intersect(schedule.ServiceCategory.coding.code)}, врачу {savedSchedule.actor.reference.intersect(schedule.actor.reference)} и времени приема. {schedule.planningHorizon.start} - {schedule.planningHorizon.end} попадает в диапазон {savedSchedule.planningHorizon.start} - {savedSchedule.planningHorizon.end}. Расписание с такими значениями видов услуг, исполнителей и периода уже создано ранее. error
9 При попытке обновить расписание (либо создать или обновить слот в рамках данного расписания) новыми значениями для ServiceType в случае, если новые значения не соответствуют сохраненным для данного расписания слотам Невозможно {actionText} расписание, конфликт значений в сохраненном слоте {slot.Id}: значение поля ServiceType {slot.serviceType.concept.coding.code} в слоте не соответствуют значению ServiceType {schedule.serviceType.concept.coding.code} в расписании.
Невозможно {actionText} слот, т.к. значение поля ServiceType {slot.serviceType.concept.coding.code} в слоте не соответствуют значению ServiceType {schedule.serviceType.concept.coding.code} в расписании.
Медицинские услуги, указанные в расписании, должны соответствовать значениям медицинских услуг в связанных с этим расписанием слотах. error
10 При попытке обновить расписание (либо создать или обновить слот в рамках данного расписания) новыми значениями для ServiceCategory в случае, если новые значения не соответствуют сохраненным для данного расписания слотам Невозможно {actionText} расписание, конфликт значений в сохраненном слоте {slot.Id}: значение поля ServiceCategory {slot.serviceCategory.coding.code} должно соответствовать значению поля ServiceCategory в расписании {schedule.serviceCategory.coding.code}.
Невозможно {actionText} слот, т.к. значение поля ServiceCategory {slot.serviceCategory.coding.code} должно соответствовать значению поля ServiceCategory в расписании {schedule.serviceCategory.coding.code}.
Категории медицинских услуг, указанные в расписании, должны соответствовать значениям категорий медицинских услуг в связанных с этим расписанием слотах. error
11 При попытке обновить расписание (либо создать или обновить слот в рамках данного расписания) новыми значениями для Speciality в случае, если новые значения не соответствуют сохраненным для данного расписания слотам Невозможно {actionText} расписание, конфликт значений в сохраненном слоте {slot.Id}: значение поля Specialty {slot.specialty.coding.code} должно соответствовать значению поля Specialty в расписании {schedule.specialty.coding.code}.
Невозможно {actionText} слот, т.к. значение поля Specialty {slot.specialty.coding.code} должно соответствовать значению поля Specialty в расписании {schedule.specialty.coding.code}.
Значения специализации медицинской помощи, указанные в расписании, должны соответствовать значениям специализации медицинской помощи в связанных с этим расписанием слотах. error
12 При попытке обновить расписание (либо создать или обновить слот в рамках данного расписания) новыми значениями для PractitionerRole в случае, если новые значения не соответствуют сохраненным для данного расписания слотам Невозможно {actionText} расписание, конфликт значений в сохраненном слоте {slot.Id}: значение поля PractitionerRoleReference в слоте {slot.extension(“https://fhir.by/StructureDefinition/PractitionerRoleReference”).value.reference} должно соответствовать значению поля Actor в расписании {schedule.actor.reference}.
Невозможно {actionText} слот, т.к. значение поля PractitionerRoleReference в слоте {slot.extension(“https://fhir.by/StructureDefinition/PractitionerRoleReference”).value.reference} должно соответствовать значению поля Actor в расписании {schedule.actor.reference}.
Медицинский работник, оказывающий услугу должен, должен присутствовать в списке медицинских работников, указанном в расписании. error
13 При попытке обновить расписание (либо создать или обновить слот в рамках данного расписания) новыми значениями для даты начала расписания в случае, если новые значения не соответствуют сохраненным для данного расписания слотам Невозможно {actionText} расписание, конфликт значений в сохраненном слоте {slot.Id}: дата начала слота {slot.start} должна попадать в диапазон расписания {schedule.planningHorizon.start} - {schedule.planningHorizon.end}.
Невозможно {actionText} слот, т.к. дата начала слота {slot.Start} должна попадать в диапазон расписания {schedule.planningHorizon.start} - {schedule.planningHorizon.end}.
Все даты начала оказания медицинской услуги должны находиться в пределах периода, на который составлено расписание. error
14 При попытке обновить расписание (либо создать или обновить слот в рамках данного расписания) новыми значениями для даты окончания расписания в случае, если новые значения не соответствуют сохраненным для данного расписания слотам Невозможно {actionText} расписание, конфликт значений в сохраненном слоте {slot.Id}: дата окончания слота {slot.end} должна попадать в диапазон расписания {schedule.planningHorizon.start} - {schedule.planningHorizon.end}.
Невозможно {actionText} слот, т.к. дата окончания слота {slot.end} должна попадать в диапазон расписания {schedule.planningHorizon.start} - {schedule.planningHorizon.end}.
Все даты окончания оказания медицинской услуги должны находиться в пределах периода, на который составлено расписание. error
15 При попытке создать или обновить экстренный слот с датой начала или окончания действия слота, отличной от текущей, система выдаст ошибку Невозможно {actionText} экстренный слот на дату, отличающуюся от текущей - {now}. Дата оказания медицинской помощи по экстренным показаниям должна соответствовать текущей дате. error
16 При попытке создать слот со статусом, отличным от ‘free’, система выдаст ошибку Создание слота возможно только со статусом ‘free’. Разрешено импортировать только слоты открытые для записи. error
17 При попытке создать слот с датой начала меньше текущей, система выдаст ошибку Невозможно {actionText} слот. Дата начала слота {slot.start} не должна быть меньше текущей даты {now}. Начало оказания медицинской услуги должна быть не раньше текущей даты. error
18 При попытке создать слот с датой окончания меньше текущей, система выдаст ошибку Невозможно {actionText} слот. Дата окончания слота {slot.end} не должна быть меньше текущей даты {now}. Окончание оказания медицинской услуги должна быть не раньше текущей даты. error
19 При попытке создать слот с датой начала больше либо равной дате окончания, система выдаст ошибку Невозможно {actionText} слот. Дата начала слота {slot.start} должна быть меньше даты окончания слота {slot.end}. Окончание оказания медицинской услуги должна быть позже начала. error
20 При попытке создать платный слот с ценой меньше 0, система выдаст ошибку Сумма платной услуги должна быть больше 0. Предварительная стоимость платной услуги должна быть представлена положительным числом. error
21 При попытке создать слот, ссылающийся на расписание, которое будет удалено в рамках текущей операции, система выдаст ошибку Невозможно {actionText} слот. Слот ссылается на расписание, которое будет удалено в рамках текущей транзакции. {deletedSchedule.fullUrl} - {slot.schedule.reference}. Попытка запланировать оказание медицинской услуги в рамках расписания, которое будет удалено. error
22 При попытке создать слот, ссылающийся на расписание, которое не существует, система выдаст ошибку Невозможно найти расписание для выбранного слота. ScheduleId: {slot.schedule.reference}. Попытка запланировать оказание медицинской услуги в рамках отсутствующего расписания. error
23 При попытке обновить слот со статусом ‘busy-unavailable’ или ‘entered-in-error’, система выдаст ошибку Изменение слота {resource.Id} со статусом {slotFromDb.status} => {slot.status} запрещено. Невозможно обновить статус медицинской услуги. Изменение статуса услуги, введенной по ошибке, запрещено. error
24 При попытке обновить слот c изменением статуса с ‘free’ на ‘busy’ или с ‘busy’ на ‘free’, система выдаст ошибку Невозможно обновить слот {slot.id} со статусом {slotFromDb.status} => {slot.status}. Изменение статуса происходит автоматически при {statusView}.
statusView: slotDbStatus == free => “бронировании” else “отмене бронирования”
Невозможно обновить статус медицинской услуги. Изменение статуса медицинской услуги происходит автоматически при записи или отмене записи на услугу. error
25 При попытке создать или обновить слот, который пересекается с другим слотом по услуге, врачу и времени приема, система выдаст ошибку Невозможно {actionText} слот, т.к. он пересекается с другим слотом по услуге, врачу и времени приема. {slot.start}-{slot.end} попадает в диапазон {savedSlot.start} - {savedSlot.end}. Пересекается со слотом {savedSlot.id}. У одного медицинского работника, оказывающего медицинскую услугу, не должны совпадать значения типа медицинской услуги, дата и время оказания медицинской услуги. error
26 Если указан slot.extension(RequestFromOrganization).value.reference и slot.extension(WithServiceRequest) = false или отсутствует Невозможно {actionText} слот. Слот для приема из других организаций возможен только с направлением. Медицинская услуга может быть оказана только при наличии направления. error
  Запись на медицинские услуги      
27 При попытке создать новое бронирование со статусом, отличным от ‘pending’, система выдаст ошибку Создание нового бронирования возможно только со статусом ‘pending’. Создание нового бронирования возможно только со статусом “в ожидании”. error
28 При попытке обновить бронирование со статусом ‘pending’ на статус ‘booked’ или ‘entered-in-error’, система выдаст ошибку Невозможно изменить статус бронирования {from} => {to}: нет подтверждения о бронировании (‘booked’). Невозможно изменить статус бронирования с “в ожидании” на “забронировано”. Операция выполняется при успешном бронировании автоматически на стороне ЦИСЗ. error
29 При попытке обновить бронирование со статусом ‘booked’ на статус ‘pending’, система выдаст ошибку Невозможно изменить статус бронирования {from} => {to}: бронирование было подтверждено статусом ‘booked’. Невозможно изменить статус бронирования с “забронировано” на “в ожидании”. Операция недопустима. error
30 При попытке забронировать экстренный слот на дату, отличающуюся от текущей, система выдаст ошибку Невозможно забронировать экстренный слот на дату, отличающуюся от текущей - {now}. Бронирование экстренного слота возможно только в день оказания услуги. error
31 При попытке забронировать слот в случае, если дата окончания приема меньше текущей даты и времени, система выдаст ошибку Невозможно забронировать слот. Дата и время окончания приема не должны быть меньше текущей даты и времени. Дата окончания приема: {appointment.end}, время запроса: {now}. Бронирование медицинской услуги с истекшей датой окончания приема недопустимо. error
32 При попытке создать или обновить бронирование со ссылкой на слот со статусом, отличным от ‘free’, система выдаст ошибку Слот недоступен для бронирования, выберите другой слот. Статус слота: {slot.status}. В настоящее время медицинская услуга не доступна для бронирования. error
33 При попытке создать или обновить бронирование со ссылкой на слот в случае, если бронирование включает одно или несколько значений для Speciality, отличных от значений Speciality у слота Значение поля Specialty в Appointment {appointment.specialty.except(slot.specialty).coding.code} не соответствует значению поля Specialty в выбранном слоте {slot.specialty.coding.code}. Специализация, указанная при бронировании, не соответствует ни одной из специализаций медицинской услуги. error
34 При попытке создать или обновить бронирование со ссылкой на слот в случае, если бронирование включает одно или несколько значений для ServiceCategory, отличных от значений ServiceCategory у слота Значение поля ServiceCategory в Appointment {appointment.serviceCategory.except(slot.serviceCategory).coding.code} не соответствует значению поля ServiceCategory в выбранном слоте {slot.serviceCategory.coding.code}. Категория услуг, указанная при бронировании, не соответствует ни одной из категорий услуг медицинской услуги. error
35 При попытке создать или обновить бронирование со ссылкой на слот в случае, если бронирование включает одно или несколько значений для ServiceType, отличных от значений ServiceType у слота Значение поля ServiceType в Appointment {appointment.serviceType.except(slot.serviceType).concept.coding.code} не соответствует значению поля ServiceType в выбранном слоте {slot.serviceType.concept.coding.code}. Типы услуг, указанные при бронировании, не соответствуют типам медицинской услуги. error
36 При попытке создать или обновить бронирование для слота в случае, если тип бронирования отличается от типов бронирования, доступных для данного слота Значение поля AppointmentType {appointment.appointmentType.coding.code} в Appointment не соответствует значению поля AppointmentType в выбранном слоте {slot.appointmentType.coding.code}. Тип бронирования не соответствует ни одному из типов бронирования медицинской услуги. error
37 При попытке создать или обновить бронирование для слота в случае, если дата и время, указанное в бронировании, не соответствуют слоту Дата и время приема, указанные в слоте и бронировании должны совпадать. Время приема из слота: {slot.start} - {slot.end}. Дата и время начала и окончания приема, указанные при бронировании, не соответствуют дате и времени начала и окончания действия медицинской услуги соответственно. error
38 При попытке создать или обновить бронирование для слота в случае, если роль медицинского работника, указанная в бронировании, не соответствует роли медицинского работника в слоте Роль медицинского работника указанная в бронировании не соответствует роли медицинского работника в слоте. Роль медицинского работника указанная в бронировании не соответствует роли медицинского работника, оказывающего медицинскую услугу. error
39 При попытке создать или обновить бронирование для слота в случае, если структурное подразделение, указанное в бронировании, не соответствует структурному подразделению в слоте Структурное подразделение указанное в бронировании не соответствует структурному подразделению в слоте. Структурное подразделение указанное в бронировании не соответствует структурному подразделению, где оказывается медицинская услуга. error
40 При попытке создать или обновить бронирование для слота в случае, если форма оказания медицинских услуг в бронировании не соответствует форме оказания медицинских услуг в слоте Форма оказания медицинских услуг в бронировании не соответствует форме оказания медицинских услуг в слоте. Форма оказания медицинских услуг, указанная при бронировании, не соответствует форме оказания медицинской услуги. error
41 При попытке создать экстренное бронирование для слота, не являющимся экстренным, система выдаст ошибку Невозможно создать экстренную бронь на слот, не являющийся экстренным. Невозможно создать экстренное бронирование медицинской услуги, не являющейся экстренной. error
42 При попытке создать или обновить бронирование для слота, бронирование которого допускается только с направлением, в случае отсутствия направления Бронирование возможно только с направлением. Бронирование медицинской услуги возможно только при наличии направления. error
43 При попытке создать или обновить бронирование с направлением в случае, если код категории из бронирования не соответствует направлению Значение поля ServiceCategory в Appointment {appointment.serviceCategory.except(serviceRequest.category).coding.code} не соответствует значению поля ServiceCategory в направлении {serviceRequest.category.coding.code}. Категория услуг, указанная при бронировании, не соответствует ни одной из категорий услуг, указанных в направлении. error
44 При попытке создать или обновить бронирование с направлением в случае, если код сервиса из бронирования не соответствует направлению Значение поля ServiceType в Appointment {slot.ServiceType.first(concept.coding.system = “https://fhir.by/ValueSet/MedicalServiceType”).concept.coding.code} не соответствует значению поля Code в направлении {serviceRequest.code.concept.coding.code}. Типы услуг, указанные при бронировании, не соответствуют типу услуги в направлении. error
45 При попытке создать или обновить бронирование с направлением в случае, если код специализации из бронирования не соответствует направлению Значение поля Specialty в Appointment {appointment.specialty.except(serviceRequest.extension(“https://fhir.by/StructureDefinition/SpecialtyCode”).value).coding.code} не соответствует значению поля specialty в направлении {serviceRequest.extension(“https://fhir.by/StructureDefinition/SpecialtyCode”).value.coding.code}. Специализация, указанная при бронировании, не соответствует специализации направления. error
46 Указан serviceRequest.Occurrence FhirDateTime: appointment.start > serviceRequest.occurrence or appointment.end < serviceRequest.occurrence Дата и время приема, указанные в направлении и бронировании должны совпадать. Время приема из направления: {serviceRequest.occurrence}. Вы пытаетесь записаться на медицинскую услугу по направлению, срок действия которого уже истек. error
47 Указан serviceRequest.Occurrence Period: appointment.start > serviceRequest.occurrence.start or appointment.end < serviceRequest.occurrence.end Дата и время приема, указанные в направлении и бронировании должны совпадать. Время приема из направления: {serviceRequest.occurrence.start} - {serviceRequest.occurrence.end}. Вы пытаетесь записаться на медицинскую услугу по направлению, срок действия которого уже истек. error
48 При попытке создать или обновить бронирование для пациента, у которого уже имеется бронирование на данное расписание в этот день Пациент уже имеет бронирование на данное расписание в этот день. Расписание: {slot.schedule.reference}. Вы пытаетесь забронировать более одной услуги для пациента на один день из одного и того же расписания. error
49 При попытке создать или обновить бронирование для слота, который не найден Отсутствует информация о слоте. SlotId: {appointment.slot.reference}. Вы пытаетесь забронировать слот, который отсутствует в системе. error
50 Если savedAppointment.status != appointment.status И savedAppointment.status != pending and savedAppointment.status != booked Невозможно изменить статус бронирования {savedAppointment.status} => {appointment.status}: {denyReason}.
denyReason = savedAppointment.status switch
Невозможно изменить статус бронирования, соответствующий следующим значениям: прием или оказание услуги было успешно начато, бронирование было отменено, пациент не явился на прием, бронирование было создано по ошибке. error
51 Если есть slot.extension(“RequestFromOrganization”).reference и ни одно значение не совпало с serviceRequest.extension(“RequestFromOrganization”).reference Направление, указанное в бронировании, выписанной организацией, которая не может бронировать этот слот. Медицинская услуга не может быть оказана по направлению, созданному в этой организации. error
▲ Вверх