Управляйте данными FHIR из приложения Android с помощью OHS и Google Cloud

1. Введение

В этом практическом занятии мы научимся использовать OHS (Open Health Stack) и Google Cloud Healthcare API для создания инновационных решений в сфере здравоохранения, которые являются безопасными, масштабируемыми и соответствующими требованиям. Сочетание этих мощных инструментов предоставляет медицинским работникам и разработчикам возможность создавать решения, основанные на данных, которые могут значительно улучшить качество и результаты лечения пациентов.

Мы намерены использовать возможности Open Health Stack и Google Cloud Healthcare API в мобильном приложении, которое использует Android-FHIR SDK, чтобы позволить пользователям управлять записями пациентов в формате FHIR в Google Cloud.

Давайте перейдем к этапам реализации.

Что вы построите

В данной реализации,

  • Для создания анкеты мы будем использовать библиотеку Structured Data Capture, а для хранения содержимого FHIR-кода ответов — библиотеку FHIR Engine.
  • Затем данные будут загружены в облачное хранилище FHIR с помощью API Cloud Healthcare.
  • Перед загрузкой мы сначала пройдем аутентификацию с помощью Firebase.

8514f90f016ecfc0.png

Приведенная выше диаграмма иллюстрирует поток. Подробное объяснение каждого компонента вы найдете в блоге .

2. Требования

  • Браузер, например Chrome или Firefox.
  • Проект Google Cloud с включенной функцией выставления счетов.
  • Последняя версия Android Studio
  • Настройка эмулятора Android (можно также использовать ваше физическое устройство Android).

Создайте свой проект

  1. В консоли Google Cloud на странице выбора проекта выберите или создайте проект Google Cloud.
  2. Убедитесь, что для вашего облачного проекта включена функция выставления счетов. Узнайте, как проверить, включена ли функция выставления счетов для проекта .
  3. Включите необходимые API (BigQuery, Healthcare API).

Активировать Cloud Shell

  1. Вы будете использовать Cloud Shell — среду командной строки, работающую в Google Cloud и поставляемую с предустановленным пакетом bq :

В консоли Cloud Console нажмите кнопку «Активировать Cloud Shell» в правом верхнем углу:

51622c00acec2fa.png

  1. После подключения к Cloud Shell вы увидите, что вы уже авторизованы и что проект уже настроен на ваш идентификатор проекта. Если ваш проект не настроен, используйте следующую команду для его установки:
gcloud config set project <YOUR_PROJECT_ID>

Для получения информации о командах gcloud и их использовании обратитесь к документации .

3. Настройка API для здравоохранения

  1. Убедитесь, что API для здравоохранения включен: перейдите в библиотеку API в консоли Google Cloud, найдите API для здравоохранения, нажмите «Включить», и API будет активирован. Также добавьте учетную запись службы здравоохранения в проект.
  2. Предоставление административных прав BigQuery учетной записи службы. Выполните следующую команду gcloud в терминале Cloud Shell, чтобы предоставить права:
gcloud projects add-iam-policy-binding <<YOUR_PROJECT_ID>> \
--member=serviceAccount:service-<<PROJECT_NUMBER>>@gcp-sa-healthcare.iam.gserviceaccount.com  --role=roles/bigquery.admin

Примечание: Идентификатор проекта (PROJECT_ID) и номер проекта (PROJECT_NUMBER) можно найти в консоли; для идентификации обратитесь к документации .

Создание набора данных по здравоохранению

В Cloud Shell выполните следующую команду для создания набора данных по здравоохранению:

gcloud beta healthcare datasets create <<DATASET_ID>> --location=us-central1

Укажите регион в качестве местоположения .

Создание хранилища данных FHIR

В Cloud Shell выполните следующую команду для создания хранилища данных FHIR:

gcloud beta healthcare fhir-stores create <<FHIR_STORE>> \
  --dataset=<<DATASET_ID>> --location=us-central1 --version=r4

Укажите регион в качестве местоположения .

4. Настройка и потоковая обработка BigQuery

В этом разделе рассматривается сохранение данных из хранилища FHIR в набор данных BigQuery, чтобы их можно было запрашивать, программировать и анализировать, используя возможности BigQuery и BQML.

Создание набора данных BigQuery

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

В Cloud Shell выполните следующую команду:

bq mk --location=us-central1 --dataset <<PROJECT_ID>>:<<BQ_DATASET>>

Укажите регион в качестве местоположения .

Создание потоковой обработки данных в BigQuery

Потоковая передача данных необходима для экспорта изменений ресурсов в BigQuery каждый раз, когда ресурс FHIR создается, обновляется, исправляется или удаляется в хранилище FHIR. Каждое хранилище может иметь до 10 конфигураций потоковой передачи данных.

  1. Перейдите в консоль Google Cloud Healthcare, откройте страницу в браузере.
  2. Щёлкните по только что созданному набору данных.
  3. Щелкните по только что созданному ХРАНИЛИЩУ ДАННЫХ 7acaa364337086aa.png
  4. Нажмите «ДОБАВИТЬ НОВУЮ КОНФИГУРАЦИЮ ПОТОКОВОЙ СВЯЗИ».

caa2cc881d3406aa.png

  1. Выберите из списка только что созданный набор данных BigQuery, тип схемы «Analytics V2» и тип ресурса «Пациент» (можно выбрать любое количество типов ресурсов) и нажмите «Готово».

1e038c694fcca1ef.png

Вот и всё. Теперь вы готовы сохранять данные из хранилища FHIR и передавать их в BigQuery.

5. Облачные функции (запись данных R4 в хранилище данных FHIR с использованием API для здравоохранения)

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

Функция, которую мы напишем, предназначена для аутентификации и записи данных, поступающих в формате FHIR R4, в хранилище данных FHIR с использованием API Cloud Healthcare. Для создания облачной функции:

  1. Перейдите в раздел «Облачные функции» и нажмите «СОЗДАТЬ ФУНКЦИЮ».
  2. Задайте имя fhir-datastore-proxy, регион us-central1 и параметр аутентификации "Требовать аутентификацию".
  3. Разверните разделы «Среда выполнения», «Сборка», «Подключения» и «Параметры безопасности». Вам потребуется добавить пять переменных среды выполнения:

Имя: CLOUD_FUNCTIONS_ENDPOINT | Значение: URL-адрес конечной точки функции. Вы увидите его в блоке аутентификации выше, и он будет иметь следующий вид: https://us-central1-PROJECT_ID.cloudfunctions.net/fhir-datastore-proxy

Имя: PROJECT_ID | Значение: идентификатор вашего проекта

Имя: DATASET_LOCATION | Значение: местоположение вашего хранилища данных FHIR

Имя: DATASET_ID | Значение: идентификатор хранилища данных о здравоохранении

Имя: FHIR_STORE_ID | Значение: идентификатор магазина FHIR.

  1. Нажмите «Далее», чтобы перейти на следующую страницу, где мы добавим наш код.
  2. Теперь должно отобразиться встроенное окно редактора. Выберите язык Java 17 и перейдите к классу HelloHttpFunction.java. Переименуйте его в FhirDatastoreProxy.java. Не забудьте также переименовать точку входа в gcfv2.FhirDatastoreProxy.
  3. Скопируйте код из репозитория и вставьте его во встроенный редактор.
  4. Перейдите к файлу pom.xml и скопируйте содержимое этого файла из репозитория в встроенный редактор.
  5. Нажмите кнопку «Развернуть», и ваша функция будет создана и вскоре запущена.

Примечание:

  1. В этой функции используется API облачных медицинских учреждений, который применяет учетные данные приложения по умолчанию для аутентификации запросов, поступающих к API медицинских учреждений.
  2. Сохраните URL-адрес развернутой функции, чтобы иметь возможность вызывать ее из Android-приложения. На данный момент мы создали все необходимые компоненты для того, чтобы Android-приложение могло записывать данные FHIR в BigQuery, используя Healthcare API, независимо от приложения. Теперь давайте убедимся, что все компоненты соединены и API вызывается при отправке анкеты.

6. Настройка проекта Android и Firebase

Мы будем использовать последнюю версию Android Studio и настроенный эмулятор Android (вы также можете использовать своё физическое устройство Android). После того, как всё будет готово, выполните следующие шаги:

  1. Клонируйте репозиторий с примерами приложений FHIR: https://github.com/google/fhir-app-examples
  2. Откройте Android Studio, выберите «Импорт проекта» (Gradle, Eclipse ADT и т. д.) и выберите папку cloudfunction/ из исходного кода, который вы скачали ранее. Откройте файл app/google-services.json. Он пуст и его необходимо заполнить.

Сгенерируйте ключ SHA-1 с помощью команды ./gradlew signingReport и запишите значение поля SHA1 в отладочном варианте.

Добавьте приложение в Firebase с помощью консоли Firebase (выполните шаги 1 и 2). В поле "Сертификат отладочной подписи SHA-1" введите значение из предыдущего шага.

Загрузите файл google-services.json и замените содержимое из Firebase в пустом файле в папке приложения.

SDK Firebase уже добавлен в файлы сборки Gradle.

  1. Откройте файл FhirApplication.kt и установите поле baseUrl на URL-адрес вашей облачной функции.
  2. Выберите пункт «Синхронизировать проект с файлами Gradle» на панели инструментов Android Studio.

Мы завершили этап настройки и добавления зависимостей в систему.

7. Составление анкеты и ответы на вопросы.

Мы уже настроили анкету в репозитории. Но давайте рассмотрим код:

  1. Убедитесь, что FragmentContainerView присутствует внутри ConstraintLayout в файле app/src/main/res/layout/activity_main.xml.
  2. Убедитесь, что QuestionnaireFragment содержит анкету FHIR в формате JSON, чтобы отобразить фрагмент.

В данном случае мы будем использовать JSON-файл " new-patient-registration-paginated.json " для отображения фрагмента. См. файлы MainActivity.kt , AddPatientFragment.kt и AddPatientViewModel.kt.

Теперь, когда мы проверили фрагмент, JSON и модель, запустите приложение и попробуйте ввести ответы в поля анкеты.

Вы заметите проверку строковых, датовых, числовых полей и других условий.

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

9e1bb440074f1a88.png

Подробнее об использовании фрагментов можно узнать здесь . На этом, в принципе, всё, что касается создания фрагментов анкеты и настройки ответов.

8. Отображение результатов поиска в FHIRStore и BigQuery

Теперь, когда все настройки и обновления завершены, нажмите «Синхронизировать проект с файлами Gradle». После завершения...

  1. Запустите приложение в эмуляторе Android и посмотрите, как загрузится ваша анкета.
  2. Ответьте на вопросы и нажмите кнопку «Отправить» вверху страницы.
  3. В приложении должно отобразиться сообщение «Пациент сохранен».

Посмотреть результаты поиска магазинов FHIR

Перейдите в консоль Google Cloud Healthcare FHIRVViewer.

1064f03b4e1e45f5.png

Выберите ваше хранилище FHIR, выполните запрос и нажмите «Выполнить поиск». Результаты поиска должны отобразиться прямо под ним. 37a070480a06362c.png

Просмотреть результаты поиска по набору данных BigQuery

Перейдите в консоль Google Cloud BigQuery и в панели «Проводник» найдите набор данных, который вы создали для этого проекта.

7c483ec6d578b8cd.png

Нажмите «Предварительный просмотр», и вы увидите то же число и полученные данные, что и в хранилище FHIR для здравоохранения, в наборе данных BigQuery.

faafeae4a837a41c.png

Теперь вы можете выполнять SQL-запросы BigQuery, аналитику и машинное обучение с данными FHIR, которые вы только что сохранили в облачном наборе данных.

9. Поиск и возможность работы в автономном режиме.

Для обеспечения работы в автономном режиме в приложении Android FHIR SDK на базе OHS обязательно следуйте рекомендациям по проектированию , которые необходимо включить в обсуждаемую здесь реализацию.

Для поиска ресурсов FHIR у нас есть два способа:

  1. FHIR Viewer в консоли Google Cloud
  2. Метод поиска FHIR с использованием запросов GET или POST

10. Демонстрация приложения

Теперь, когда наше приложение разработано, давайте поэкспериментируем с ним и посмотрим на результат в облаке.

11. Уборка

Чтобы избежать списания средств с вашего аккаунта Google Cloud за ресурсы, использованные в этой статье, выполните следующие действия:

  1. В консоли Google Cloud перейдите на страницу «Управление ресурсами» .
  2. В списке проектов выберите проект, который хотите удалить, и нажмите «Удалить».
  3. В диалоговом окне введите идентификатор проекта, а затем нажмите «Завершить», чтобы удалить проект.

12. Поздравляем!

Поздравляем! В этом проекте мы успешно создали Android-приложение для хранения и запроса данных о пациентах в формате FHIR из облачного хранилища FHIR и набора данных BigQuery с использованием Cloud Healthcare API всего за 7 шагов:

  1. Настройка приложения для Android
  2. Настройка API Google Cloud Healthcare
  3. Создан набор данных по здравоохранению и хранилище данных FHIR.
  4. Создан набор данных BigQuery
  5. Настроил поток BigQuery для записи данных из хранилища данных FHIR в набор данных BigQuery.
  6. Развернута облачная функция для записи данных R4 в хранилище данных FHIR.
  7. Функции Cloud Functions запускаются из приложения Android при отправке ответа на анкету.

Теперь, когда шаги понятны, можете смело попробовать выполнить те же действия для синхронизации редактирования данных пациента в формате FHIR с облаком.