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

Метод создания и редактирования пациента

Метод создания и редактирования пациента предназначен для создания и редактирования ресурса Patient.

Правила формирования ресурса Patient

Правила формирования ресурса Patient:

  • ресурс Patient ДОЛЖЕН соответствовать профилю ЦИСЗ, описанному в настоящем руководстве по взаимодействию с ЦИСЗ (Пациент, Пациент без ИН, Анонимный пациент);
  • ресурс Patient ДОЛЖЕН содержать минимум один идентификатор (identifier), соответствующий правилам уникальности ЦИСЗ: INP, UMD, IPA, UIP, ANO, FDN (указанный перечень может быть дополнен в будущем);
  • если не используется идентификатор типа Номер, присвоенный медицинской записи о пациенте, который не был идентифицирован (UIP), то ресурс Patient ДОЛЖЕН содержать фамилию и имя пациента (Patient.name.family и Patient.name.given);
  • идентификаторы типов INP, UMD, FDN, ANO ДОЛЖНЫ быть уникальными в ЦИСЗ;
  • даты начала действия документов и идентификаторов НЕ ДОЛЖНЫ быть позже даты создания ресурса;
  • дата рождения НЕ ДОЛЖНА быть ранее 01.01.1900 и позже текущей даты;
  • для пациентов младше 12 лет НЕ ДОЛЖНЫ указываться сведения о браке;
  • используемый идентификатор должен соответствовать установленным маскам ввода, в зависимости от типа идентификатора (см. описание элемента identifier в профилях ресурсов);
  • если ресурс создается по профилю Пациент и пациент имеет индивидуальный номер (ИН) гражданина РБ, то ФИО, дата рождения и пол пациента должны соответствовать данным из ГИС «Регистр населения» (в случае, если ИН не найден в ГИС «Регистр населения», пациент будет создан на основе данных, введенных клиентом);
  • данные адреса пациента могут быть модифицированы после верификации пациента в ГИС «Регистр населения»;
  • номер телефона ДОЛЖЕН передаваться в международном формате;
  • еmail-адрес ДОЛЖЕН соответствовать формату RFC 5322;
  • при редактировании ресурса в нем необходимо передавать identifier (набор) пациента, полученный из ЦИСЗ, и ресурс должен иметь элемент active = true;
  • при редактировании необходимо передавать актуальный versionId в ресурсе в теле запроса;
  • идентификаторы типов INP, UMD, FDN, ANO нельзя редактировать;
  • элементы в .coding.display будут модифицированы согласно актуальным значениям из НСИ.

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

ЦИСЗ может принимать только ресурс Patient соответствующий профилю, описанному в настоящем руководстве по взаимодействию с ЦИСЗ (Пациент, Пациент без ИН, Анонимный пациент).

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

  • входящего ресурса Patient на соответствие профилю ЦИСЗ;
  • справочных данных на соответствие значениям справочников ЦИСЗ.

Перед созданием ресурса Patient, для оптимизации работы и уменьшения количества ошибок, необходимо убедиться, что в ЦИСЗ ранее не создавался такой ресурс: предварительно выполнить поиск ресурса Patient по известному идентификатору или по ФИО и дате рождения:

GET [FHIR_BASE]/Patient?identifier=[идентификатор]

или

GET [FHIR_BASE]/Patient?name=[полное_ФИО]&birthdate=[дата_рождения]

Если ресурс ранее не создавался, то в ответ ЦИСЗ вернет Bundle типа searchSet, не содержащий ресурса Patient. В этом случае клиент может приступить к созданию нового ресурса Patient.

Если ЦИСЗ вернула Bundle типа searchSet с ресурсом Patient, необходимо сверить информацию, которую вводил пользователь на стороне клиента, с информацией, которую содержит найденный ресурс. В случае, если данные совпадают ПОЛНОСТЬЮ по идентификатору, ФИО и дате рождения, создание нового ресурса не требуется. Если данные не совпадают, необходимо исправить параметры поискового запроса и повторить поиск.

Создание

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

POST [FHIR_BASE]/Patient
HEADERS: content-type:application/fhir+json

Body: ресурс Patient

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

Название Описание
patient ресурс Patient в теле запроса

Ресурс может не содержать элемента id, НО, ЕСЛИ id БУДЕТ УКАЗАН, сервер ЦИСЗ проигнорирует его.

Если тело запроса включает элемент meta, и в базе данных ЦИСЗ НЕТ ресурса с указанным identifier, то сервер ПРОИГНОРИРУЕТ существующие значения versionId и lastUpdated. Сервер ЗАПОЛНИТ id, meta.versionId и meta.lastUpdated новыми корректными значениями.

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

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

Успешный ответ:

Название Описание
result ресурс Parameters в теле ответа

Таблица статусов операции:

Код Описание статуса
Created Ресурс успешно создан
Updated Ресурс успешно отредактирован
Failed Ошибка при создании или редактировании ресурса
HTTP/1.1 201 Created Content-Type: application/fhir+json Body: { "resourceType": "Parameters", "parameter": [ { "name": "ProcessingStatus", "valueString": "Created" }, { "name": "ResourceId", "valueString": "pa-123" }, { "name": "Patient", "resource": {ресурс Patient} } ] }

При создании ресурса будут проигнорированы следующие элементы:

  • id;
  • meta.versionId;
  • meta.lastUpdated;
  • text;
  • extension:archive;
  • extension:personalDataVerified;
  • generalPractitioner;
  • link;
  • все элементы .coding.display.

Значения в этих элементах будут присвоены в ЦИСЗ.

В случае, если часть данных (например: адрес пациента) будет модифицирована в ЦИСЗ после верификации в интегрированных системах, ответ будет содержать предупреждения об изменении этой информации:

HTTP/1.1 201 Created Content-Type: application/fhir+json Body: { "resourceType": "Parameters", "parameter": [ { "name": "ProcessingStatus", "valueString": "Created" }, { "name": "ResourceId", "valueString": "pa-123" }, { "name": "Patient", "resource": {ресурс Patient} }, { "name": "OperationOutcome", "resource": { "resourceType": "OperationOutcome", "issue": [ { "severity": "warning", "code": "business-rule", "details": { "coding": [ { "system": "entry.fullUrl", "code": "Patient/pa-123" } ], "text": "Незначимые поля: Адрес не совпадает с данными из ГИС «Регистр населения»." }, "diagnostics": "DateTime: 01/01/2026 01:00:12 AM" } ] } } ] }

Важно! Клиент должен обрабатывать ресурсы OperationOutcome при ответах ЦИСЗ с HTTP 201 Created для того, чтобы пользователи систем могли быть уведомлены об изменениях при создании ресурсов.

Ошибки при создании

HTTP статус серии 4xx:

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

Когда синтаксис или данные ресурса некорректны или недействительны и не могут быть использованы для создания нового ресурса, сервер возвращает код состояния HTTP 400 Bad Request. В этом случае сервер возвращает тело ответа, содержащее OperationOutcome с подробными сообщениями об ошибке, описывающими причину сбоя.

Клиентам следует проверять все возвращенные данные, чтобы убедиться, что они соответствуют ожиданиям.

Распространенные коды состояния HTTP, возвращаемые при ошибках, связанных с FHIR (в дополнение к обычным HTTP-ошибкам, связанным с безопасностью, согласованием заголовков и типа содержимого):

  • 400 Bad Request - ресурс не может быть обработан или не прошел базовые правила валидации FHIR, а также не соответствует профилю FHIR, указанному в Patient.meta.profile. Такой код также будут иметь ошибки, связанные с верификацией персональных данных в ГИС “Регистр населения”.

Пример:

HTTP/1.1 400 Bad Request Content-Type: application/fhir+json Body: { "resourceType": "OperationOutcome", "id": "9f938132-d0cf-479d-b8c3-ed6bdd48ad5d", "issue": [ { "severity": "error", "code": "invalid", "details": { "coding": [ { "system": "http://hl7.org/fhir/dotnet-api-operation-outcome", "code": "Код ошибки" } ], "text": "Суть ошибки" }, "diagnostics": "Детали ошибки", "expression": "Путь к элементу, где возникла ошибка (если возможно)" } ] }
  • 401 Unauthorised и 403 Forbidden - ошибки авторизации и аутентификации:
    • неавторизованный пользователь;
    • у пользователя нет прав на создание ресурсов.
  • 409 Conflict - в системе уже есть ресурс с таким же идентификатором (INP, UMD, FDN, ANO - необходимо соблюдение правила уникальности идентификатора).

Редактирование (Update) ресурса Patient

При редактировании ресурса Patient создается новая версия для существующего ресурса или, если ресурс с заданными meta.versionId и identifier еще не существует, создается начальная версия.

Для редактирования ресурса клиент обязан указать актуальный meta.versionId и ключевой identifier ресурса (INP, UMD, IPA, UIP, ANO, FDN, в зависимости от профиля пациента), полученный при предыдущем чтении. Для оптимизации работы и уменьшения количества ошибок, необходимо предварительно выполнить поиск ресурса Patient по идентификатору или по ФИО и дате рождения:

GET [FHIR_BASE]/Patient?identifier=[идентификатор]

или

GET [FHIR_BASE]/Patient?name=[полное_ФИО]&birthdate=[дата_рождения]

Если ожидается, что данный пациент уже есть в ЦИСЗ, но в ответ ЦИСЗ вернула Bundle типа searchSet, не содержащий искомого ресурса, то необходимо убедиться, что введенные при поиске данные не содержат ошибок. Если поисковые параметры введены верно, то клиент должен считать, что ресурс пациента ранее не создавался в ЦИСЗ, и в этом случае может приступить к созданию нового ресурса Patient.

Поля в ресурсе, которые игнорируются при редактировании ресурса Пациент:

  • id;
  • meta.lastUpdated;
  • text;
  • extension:archive;
  • extension:personalDataVerified;
  • identifier:PersonIdentifier - игнорируется при редактировании пациента - невозможно изменить;
  • identifier:UnspecifiedMedicalDocumentNumber - игнорируется при редактировании пациента - невозможно изменить;
  • все элементы .coding.display.

Поля в ресурсе, которые игнорируются при создании и редактировании ресурса Пациент без ИН:

  • id;
  • meta.lastUpdated;
  • text;
  • extension:archive;
  • identifier:UnidentifiedPerson - игнорируется при редактировании пациента - невозможно изменить;
  • identifier:UnspecifiedMedicalDocumentNumber - игнорируется при редактировании пациента - невозможно изменить;
  • все элементы .coding.display.

Поля в ресурсе, которые игнорируются при создании и редактировании ресурса Анонимный пациент:

  • id;
  • meta.lastUpdated;
  • text;
  • extension:archive;
  • identifier - игнорируется при редактировании пациента - невозможно изменить;
  • все элементы .coding.display.

Редактирование выполняется с помощью HTTP POST команды:

POST [FHIR_BASE]/Patient
HEADERS: content-type:application/fhir+json

Body: ресурс Patient (обязательно указание versionId и identifier)

Проверка версии: ЦИСЗ проверяет, есть ли в базе данных ресурс с указанным identifier. Если такой ресурс найден, выполняется проверка версии ресурса по значению meta.versionId в сравнении с текущей версией ресурса в системе.

Для элементов в meta сервер ПРОИГНОРИРУЕТ существующие значения lastUpdated. Сервер ЗАПОЛНИТ meta.versionId и meta.lastUpdated новыми корректными значениями.

Сервер изменит или дополнит значения в элементах .coding.display согласно актуальной информации из справочников НСИ ЦИСЗ.

Редактирование изменяет ВСЕ содержимое ресурса.

Если взаимодействие успешно и ресурс был отредактирован, сервер ВЕРНЕТ код состояния HTTP 200 OK.

HTTP/1.1 200 Ok Content-Type: application/fhir+json Body: { "resourceType": "Parameters", "parameter": [ { "name": "ProcessingStatus", "valueString": "Updated" }, { "name": "ResourceId", "valueString": "pa-123" }, { "name": "Patient", "resource": {ресурс Patient} } ] }

Распространенные коды состояния HTTP, возвращаемые при ошибках, связанных с FHIR (в дополнение к обычным HTTP-ошибкам, связанным с безопасностью, согласованием заголовков и типа содержимого):

  • 400 Bad Request — ресурс не может быть обработан или не прошел базовые правила валидации FHIR, а также не соответствует профилю FHIR, указанному в Patient.meta.profile. Такой код также будут иметь ошибки, связанные с верификацией персональных данных в ГИС “Регистр населения”;

  • 401 Unauthorised и 403 Forbidden — ошибки авторизации и аутентификации:
    • неавторизованный пользователь;
    • у пользователя нет прав на создание ресурсов.
  • 404 Not Found — тип ресурса не поддерживается или происходит обращение в неверный эндпоинт;

  • 409 Conflict — конфликт версий ресурса:
    • не указан versionId;
    • versionId не является актуальным, ресурс мог быть изменен до начала операции изменения ресурса.

Каждая из этих ошибок сопровождается ресурсом OperationOutcome, предоставляющим дополнительные детали по проблеме.

▲ Вверх