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.

Приведенная выше диаграмма иллюстрирует поток. Подробное объяснение каждого компонента вы найдете в блоге .
2. Требования
- Браузер, например Chrome или Firefox.
- Проект Google Cloud с включенной функцией выставления счетов.
- Последняя версия Android Studio
- Настройка эмулятора Android (можно также использовать ваше физическое устройство Android).
Создайте свой проект
- В консоли Google Cloud на странице выбора проекта выберите или создайте проект Google Cloud.
- Убедитесь, что для вашего облачного проекта включена функция выставления счетов. Узнайте, как проверить, включена ли функция выставления счетов для проекта .
- Включите необходимые API (BigQuery, Healthcare API).
Активировать Cloud Shell
- Вы будете использовать Cloud Shell — среду командной строки, работающую в Google Cloud и поставляемую с предустановленным пакетом bq :
В консоли Cloud Console нажмите кнопку «Активировать Cloud Shell» в правом верхнем углу:

- После подключения к Cloud Shell вы увидите, что вы уже авторизованы и что проект уже настроен на ваш идентификатор проекта. Если ваш проект не настроен, используйте следующую команду для его установки:
gcloud config set project <YOUR_PROJECT_ID>
Для получения информации о командах gcloud и их использовании обратитесь к документации .
3. Настройка API для здравоохранения
- Убедитесь, что API для здравоохранения включен: перейдите в библиотеку API в консоли Google Cloud, найдите API для здравоохранения, нажмите «Включить», и API будет активирован. Также добавьте учетную запись службы здравоохранения в проект.
- Предоставление административных прав 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 конфигураций потоковой передачи данных.
- Перейдите в консоль Google Cloud Healthcare, откройте страницу в браузере.
- Щёлкните по только что созданному набору данных.
- Щелкните по только что созданному ХРАНИЛИЩУ ДАННЫХ

- Нажмите «ДОБАВИТЬ НОВУЮ КОНФИГУРАЦИЮ ПОТОКОВОЙ СВЯЗИ».

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

Вот и всё. Теперь вы готовы сохранять данные из хранилища FHIR и передавать их в BigQuery.
5. Облачные функции (запись данных R4 в хранилище данных FHIR с использованием API для здравоохранения)
Cloud Functions позволяет удобно писать код и развертывать его в облаке бессерверным способом. Он масштабируем, работает по принципу оплаты по мере использования, основан на событиях и имеет открытую поддержку технологий и языков программирования. Для получения дополнительной информации о возможностях обратитесь к документации .
Функция, которую мы напишем, предназначена для аутентификации и записи данных, поступающих в формате FHIR R4, в хранилище данных FHIR с использованием API Cloud Healthcare. Для создания облачной функции:
- Перейдите в раздел «Облачные функции» и нажмите «СОЗДАТЬ ФУНКЦИЮ».
- Задайте имя fhir-datastore-proxy, регион us-central1 и параметр аутентификации "Требовать аутентификацию".
- Разверните разделы «Среда выполнения», «Сборка», «Подключения» и «Параметры безопасности». Вам потребуется добавить пять переменных среды выполнения:
Имя: 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.
- Нажмите «Далее», чтобы перейти на следующую страницу, где мы добавим наш код.
- Теперь должно отобразиться встроенное окно редактора. Выберите язык Java 17 и перейдите к классу HelloHttpFunction.java. Переименуйте его в FhirDatastoreProxy.java. Не забудьте также переименовать точку входа в gcfv2.FhirDatastoreProxy.
- Скопируйте код из репозитория и вставьте его во встроенный редактор.
- Перейдите к файлу pom.xml и скопируйте содержимое этого файла из репозитория в встроенный редактор.
- Нажмите кнопку «Развернуть», и ваша функция будет создана и вскоре запущена.
Примечание:
- В этой функции используется API облачных медицинских учреждений, который применяет учетные данные приложения по умолчанию для аутентификации запросов, поступающих к API медицинских учреждений.
- Сохраните URL-адрес развернутой функции, чтобы иметь возможность вызывать ее из Android-приложения. На данный момент мы создали все необходимые компоненты для того, чтобы Android-приложение могло записывать данные FHIR в BigQuery, используя Healthcare API, независимо от приложения. Теперь давайте убедимся, что все компоненты соединены и API вызывается при отправке анкеты.
6. Настройка проекта Android и Firebase
Мы будем использовать последнюю версию Android Studio и настроенный эмулятор Android (вы также можете использовать своё физическое устройство Android). После того, как всё будет готово, выполните следующие шаги:
- Клонируйте репозиторий с примерами приложений FHIR: https://github.com/google/fhir-app-examples
- Откройте 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.
- Откройте файл FhirApplication.kt и установите поле baseUrl на URL-адрес вашей облачной функции.
- Выберите пункт «Синхронизировать проект с файлами Gradle» на панели инструментов Android Studio.
Мы завершили этап настройки и добавления зависимостей в систему.
7. Составление анкеты и ответы на вопросы.
Мы уже настроили анкету в репозитории. Но давайте рассмотрим код:
- Убедитесь, что FragmentContainerView присутствует внутри ConstraintLayout в файле app/src/main/res/layout/activity_main.xml.
- Убедитесь, что QuestionnaireFragment содержит анкету FHIR в формате JSON, чтобы отобразить фрагмент.
В данном случае мы будем использовать JSON-файл " new-patient-registration-paginated.json " для отображения фрагмента. См. файлы MainActivity.kt , AddPatientFragment.kt и AddPatientViewModel.kt.
Теперь, когда мы проверили фрагмент, JSON и модель, запустите приложение и попробуйте ввести ответы в поля анкеты.
Вы заметите проверку строковых, датовых, числовых полей и других условий.
Вы можете запустить приложение и проверить журнал, чтобы увидеть созданную запись.

Подробнее об использовании фрагментов можно узнать здесь . На этом, в принципе, всё, что касается создания фрагментов анкеты и настройки ответов.
8. Отображение результатов поиска в FHIRStore и BigQuery
Теперь, когда все настройки и обновления завершены, нажмите «Синхронизировать проект с файлами Gradle». После завершения...
- Запустите приложение в эмуляторе Android и посмотрите, как загрузится ваша анкета.
- Ответьте на вопросы и нажмите кнопку «Отправить» вверху страницы.
- В приложении должно отобразиться сообщение «Пациент сохранен».
Посмотреть результаты поиска магазинов FHIR
Перейдите в консоль Google Cloud Healthcare FHIRVViewer.

Выберите ваше хранилище FHIR, выполните запрос и нажмите «Выполнить поиск». Результаты поиска должны отобразиться прямо под ним. 
Просмотреть результаты поиска по набору данных BigQuery
Перейдите в консоль Google Cloud BigQuery и в панели «Проводник» найдите набор данных, который вы создали для этого проекта.

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

Теперь вы можете выполнять SQL-запросы BigQuery, аналитику и машинное обучение с данными FHIR, которые вы только что сохранили в облачном наборе данных.
9. Поиск и возможность работы в автономном режиме.
Для обеспечения работы в автономном режиме в приложении Android FHIR SDK на базе OHS обязательно следуйте рекомендациям по проектированию , которые необходимо включить в обсуждаемую здесь реализацию.
Для поиска ресурсов FHIR у нас есть два способа:
- FHIR Viewer в консоли Google Cloud
- Метод поиска FHIR с использованием запросов GET или POST
10. Демонстрация приложения
Теперь, когда наше приложение разработано, давайте поэкспериментируем с ним и посмотрим на результат в облаке.
11. Уборка
Чтобы избежать списания средств с вашего аккаунта Google Cloud за ресурсы, использованные в этой статье, выполните следующие действия:
- В консоли Google Cloud перейдите на страницу «Управление ресурсами» .
- В списке проектов выберите проект, который хотите удалить, и нажмите «Удалить».
- В диалоговом окне введите идентификатор проекта, а затем нажмите «Завершить», чтобы удалить проект.
12. Поздравляем!
Поздравляем! В этом проекте мы успешно создали Android-приложение для хранения и запроса данных о пациентах в формате FHIR из облачного хранилища FHIR и набора данных BigQuery с использованием Cloud Healthcare API всего за 7 шагов:
- Настройка приложения для Android
- Настройка API Google Cloud Healthcare
- Создан набор данных по здравоохранению и хранилище данных FHIR.
- Создан набор данных BigQuery
- Настроил поток BigQuery для записи данных из хранилища данных FHIR в набор данных BigQuery.
- Развернута облачная функция для записи данных R4 в хранилище данных FHIR.
- Функции Cloud Functions запускаются из приложения Android при отправке ответа на анкету.
Теперь, когда шаги понятны, можете смело попробовать выполнить те же действия для синхронизации редактирования данных пациента в формате FHIR с облаком.