Часто задаваемые вопросы по формированию заказа
Есть исследование, его можно делать по разным БМ (или по всем сразу)?
По одному, если нужно 2 исследования, то добавляете в корзину 2 разных исследования с разным БМ.
Для связи сущностей в fhir/$CreateDiagnosticRequest используются ссылки "reference" : "urn:uuid:d5437d23-e414-4ab3-ad00-9367f15a3d00". Где взять эти uuid?
Эти ссылки создает контрагент при создании Bundle. Коды должны представлять из себя Guid (Uuid) и быть согласованными в рамках Bundle. При сохранении ресурсов им будут присвоены другие идентификаторы. Данные идентификаторы используются только для построения связей внутри одного Bundle.
Как выглядят локальные ссылки внутри Bundle и как получить идентификатор в сервере для внешнего взаимодействия?
Ссылки вида:
"subject": {
"reference": "urn:uuid:c853bd9a-f12d-4d65-bed7-51dade65ac77"
}
являются по стандарту ЛОКАЛЬНЫМИ для bundle. Они задают ссылки только внутри Bundle и нужны для восстановления реальных связей между сущностями. Вы не можете задать id на сервере снаружи из соображений безопасности, но можете заполнять поле Identifier (идентификатор во внешних системах) и опираться на него.
Как получить идентификатор в сервере? После успешного выполнения запроса вам в ответ возвращается Bundle у которого заполнены все Id ресурсов, по этим Id вы в т.ч. можете обращаться на сервер по запросам вида procedurerequest/{Id}.
В сервисе fhir/$CreateDiagnosticRequest - specimenQuantity - что за атрибут, чем его заполнять?
Поле отображается количество биоматериала, взятого в рамках данного образца. Необходимое количество биоматериала приходит по запросу преаналитики в блоке:
"collection": {
"quantity": 30,
"method": "Протокол взятия крови из вены"
}
Что означает параметр specimenQuantity в элементе Specimen? Количество собранного биоматериала или количество требуемого, полученного от сервиса преаналитики?
Требуемого.
Quantity в заявке - это то количество, которое реально было взято у пациента? Если я передам то же значение, что получилось из преаналитики, будет нормально?
Да, будет нормально.
Для чего нужен параметр requisition в ProcedureRequest при том, что есть OrderProcessingTask, который объединяет все исследования в логическую сущность Заказ. Или я неправильно понимаю суть requisition в ProcedureRequest?
Requisition - требования стандарта для объединения заявок (товарных позиций) в заказ. Task - по стандарту сущность для отслеживания workflow выполнения, ее применение отдается на откуп разработчикам. В нашем случае разработчики используют Task типа OrderProcessingTask для отслеживания статуса всего заказа. Фактически Requisition - требование стандарта, OrderProcessingTask - требование medlinx. Можно привести примеры, когда в стандарте возможна ситуация, где OrderProcessingTask содержат одни и те же заявки. В medlinx пока такой подход не поддерживается.
ProcedureRequest.occurrenceDateTime - что это должна быть за дата?
Дата создания запроса на исследование.
Как заполнить значение поля "subject": { в QuestionnaireResponce
"reference": "procedurerequest/<guid>", как определить guid?
Должен быть тот же гуид procedurerequest-а, который отправляется в bundle для связи опросника с исследованием. Если procedurerequest несколько, можно указать любой (на каждый procedurerequest есть requisition, который связывает их в заказе).
Как обновить ресурс (в т.ч. пациента)?
Сервер поддерживает обновление с указанием версии ресурса. В момент получения ресурса в заголовках HTTP приходит поле ETag
(например, W/"1"
). Для обновления ресурса необходимо выполнить метод:
PUT <Resource>/<id>
Указав заголовок If-Match
с версией, полученной в поле ETag: If-Match: W/"1"
Ресурс обновляется целиком.
Вызвал fhir/patient по вашей инструкции с if-none-exists возвращает ошибку 412 Precondition failed, как получилось два пациента с одинаковым идентификатором?
Ошибка 412 возникает, если пациентов с заданым критерием поиска больше одного.
Какие-то запросы были без if-none-exist это вы нарушили требование обеспечить уникальность с вашей стороны.
Пытаюсь обновить данные пациента. Вызываю POST /fhir/patient, в body указал ваш id пациента, в ответ получаю ошибку, в чем проблема?
В документации fhir написано, что такой запрос, если поддерживается сервером, создаст нового пациента с нужным id, мы такой запрос не поддерживаем, необходимо делать запрос на POST /fhir/patient/{id}. По стандарту обновление делается через метод PUT.
Зачем нужен If-Match header в методе PUT?
Для версии ресурса используется optimistic concurrency подход, это требование стандарта.
Если в запросе на обновление отсутствуют "identifier": [{ "value": "", "system": "" они будут уничтожены у ресурса?
Ресурс перезаписывается целиком. Да, будут уничтожены.
Для обновления пациента можно взять ETag из ответа POST fhir/patient? Можно брать ETag из POST для последующего PUT, не вызывая GET?
Можно. Версия возвращается в момент получения ресурса, т.е. кто-то может успеть обновить ресурс раньше и старая версия не примется. Etag можно получить в заголовке либо методом GET fhir/patient/id, либо в ответе POST fhir/patient.