Gerencie dados FHIR do app Android com OHS e o Google Cloud

1. Introdução

Neste codelab, vamos aprender a usar o OHS (Open Health Stack) e a API Cloud Healthcare do Google Cloud para criar soluções inovadoras de saúde que sejam seguras, escalonáveis e em conformidade. A combinação dessas ferramentas poderosas oferece aos profissionais de saúde e desenvolvedores a capacidade de criar soluções orientadas a dados que podem melhorar significativamente o atendimento e os resultados dos pacientes.

Pretendemos aproveitar o poder do Open Health Stack e da API Cloud Healthcare do Google Cloud em um app para dispositivos móveis que usa o SDK Android-FHIR para permitir que os usuários gerenciem registros de pacientes FHIR no Google Cloud.

Vamos analisar as etapas de implementação.

O que você vai criar

Nesta implementação,

  • Vamos usar a biblioteca de captura de dados estruturados para renderizar um questionário e a biblioteca do FHIR Engine para armazenar o conteúdo FHIR da resposta.
  • Os dados serão enviados para o armazenamento FHIR do Cloud usando a API Cloud Healthcare.
  • Antes de fazer o upload, vamos nos autenticar usando o Firebase.

8514f90f016ecfc0.png

O diagrama acima representa o fluxo. Leia o blog para uma explicação detalhada de cada componente.

2. Requisitos

  • Use um navegador, como o Chrome ou o Firefox.
  • Tenha um projeto na nuvem do Google Cloud com o faturamento ativado.
  • Uma versão recente do Android Studio.
  • Um Android Emulator configurado (também é possível usar seu dispositivo Android físico).

Criar seu projeto

  1. No console do Google Cloud, na página de seletor de projetos, selecione ou crie um projeto do Google Cloud.
  2. Confira se o faturamento está ativado para seu projeto do Cloud. Saiba como verificar se o faturamento está ativado em um projeto.
  3. Ative as APIs necessárias (BigQuery, API Healthcare).

Ativar o Cloud Shell

  1. Você vai usar Cloud Shell, um ambiente de linha de comando executado no Google Cloud que vem pré-carregado com bq:

No console do Cloud, clique em "Ativar o Cloud Shell" no canto superior direito:

51622c00acec2fa.png

  1. Depois de se conectar ao Cloud Shell, você vai ver que sua conta já está autenticada e que o projeto já está definido com o ID do seu projeto. Se o projeto não estiver definido, use o comando a seguir para defini-lo:
gcloud config set project <YOUR_PROJECT_ID>

Consulte a documentação para ver o uso e os comandos gcloud.

3. Configuração da API Healthcare

  1. Verifique se a API Healthcare está ativada: acesse a biblioteca de APIs do console do Google Cloud, pesquise a API Healthcare, clique em ATIVAR. A API será ativada e a conta de serviço Healthcare será adicionada ao projeto.
  2. Conceder permissões de administrador do BigQuery à conta de serviço. Execute o comando gcloud abaixo no terminal do Cloud Shell para conceder permissão:
gcloud projects add-iam-policy-binding <<YOUR_PROJECT_ID>> \
--member=serviceAccount:service-<<PROJECT_NUMBER>>@gcp-sa-healthcare.iam.gserviceaccount.com  --role=roles/bigquery.admin

Observação: é possível encontrar o PROJECT_ID e o PROJECT_NUMBER no console. Consulte o documento para identificação.

Criar um conjunto de dados de saúde

No Cloud Shell, execute o comando abaixo para criar o conjunto de dados de saúde:

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

Defina o local como uma região.

Criar um repositório de dados FHIR

No Cloud Shell, execute o comando abaixo para criar o repositório de dados FHIR:

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

Defina o local como uma região.

4. Configuração e streaming do BigQuery

Isso abrange como salvar dados do repositório FHIR no conjunto de dados do BigQuery para que eles possam ser consultados, programados e analisados, aproveitando o poder do BigQuery e do BQML.

Criar um conjunto de dados do BigQuery

Um conjunto de dados do BigQuery é uma coleção de tabelas. Todas as tabelas em um conjunto de dados são armazenadas no mesmo local de dados location. Também é possível anexar controles de acesso personalizados para limitar o acesso a um conjunto de dados e às tabelas dele.

No Cloud Shell, execute o comando abaixo:

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

Defina o local como uma região.

Criar streaming do BigQuery

O streaming é necessário para exportar alterações de recursos para o BigQuery sempre que um recurso FHIR for criado, atualizado, receber patch ou for excluído em um repositório de FHIR. Cada armazenamento pode ter até 10 configurações de streaming.

  1. Acesse a página do console do Google Cloud Healthcare, browser.
  2. Clique no CONJUNTO DE DADOS recém-criado.
  3. Clique no ARMAZENAMENTO DE DADOS recém-criado. 7acaa364337086aa.png
  4. Clique em ADICIONAR NOVA CONFIGURAÇÃO DE STREAMING.

caa2cc881d3406aa.png

  1. Selecione o conjunto de dados do BigQuery recém-criado na lista, o tipo de esquema como "Analytics V2" e o tipo de recurso "Paciente" na lista (é possível escolher quantos tipos de recursos quiser) e clique em Concluído.

1e038c694fcca1ef.png

Pronto. Agora você pode salvar os dados do armazenamento FHIR e transmiti-los para o BigQuery.

5. Cloud Functions (gravar dados R4 no repositório de dados FHIR usando a API Healthcare)

O Cloud Functions permite escrever seu código e implantar na nuvem de maneira sem servidor. Ele é escalonável, pagamento por uso, orientado a eventos e aberto em termos de tecnologia e suporte a idiomas. Consulte a documentação para mais recursos.

A função que vamos escrever pretende autenticar e gravar dados que estão no formato FHIR R4 no repositório de dados FHIR usando a API Cloud Healthcare. Para criar a função do Cloud:

  1. Acesse o Cloud Functions e clique em CRIAR FUNÇÃO.
  2. Defina o nome como fhir-datastore-proxy, a região como us-central1 e a opção de autenticação como "Exigir autenticação".
  3. Expanda as configurações de ambiente de execução, build, conexões e segurança. Você vai adicionar cinco variáveis de ambiente de execução:

Nome: CLOUD_FUNCTIONS_ENDPOINT | Valor: o endpoint de URL da função do Cloud. Ele vai aparecer no bloco de autenticação acima e será do formulário: https://us-central1-PROJECT_ID.cloudfunctions.net/fhir-datastore-proxy

Nome: PROJECT_ID | Valor: o ID do projeto

Nome: DATASET_LOCATION | Valor: o local do repositório de dados FHIR

Nome: DATASET_ID | Valor: o ID do repositório de dados de saúde

Nome: FHIR_STORE_ID | Valor: o ID do repositório FHIR

  1. Clique em Próxima para acessar a próxima página, em que vamos adicionar nosso código.
  2. Um editor in-line será exibido. Selecione Java 17 como o idioma e acesse a classe HelloHttpFunction.java. Renomeie-o para FhirDatastoreProxy.java. Não se esqueça de renomear também o ponto de entrada para gcfv2.FhirDatastoreProxy.
  3. Copie o código do repositório e cole-o no editor in-line.
  4. Acesse o arquivo pom.xml e copie o arquivo pom no repositório para o editor in-line.
  5. Clique em IMPLANTAR. Sua função será criada e executada em breve.

Observação:

  1. A API Cloud Healthcare usada nessa função usa as credenciais padrão do aplicativo para autenticar as solicitações recebidas pela API Healthcare.
  2. Salve o URL da função implantada para poder invocar o aplicativo Android. Até agora, criamos todas as partes necessárias para que o app Android grave dados FHIR no BigQuery usando a API Healthcare de forma independente. Agora, vamos garantir que todas as partes estejam conectadas e que a API seja invocada em um envio de questionário.

6. Configuração do projeto do Android e do Firebase

Vamos usar uma versão recente do Android Studio e um Android Emulator configurado (também é possível usar seu dispositivo Android físico). Quando estiver tudo pronto, siga as etapas abaixo:

  1. Clone o repositório de exemplos de apps FHIR: https://github.com/google/fhir-app-examples
  2. Abra o Android Studio, selecione Import Project (Gradle, Eclipse ADT, etc.) e escolha a pasta cloudfunction/ no código-fonte que você baixou anteriormente.Abra app/google-services.json. Ele está vazio e precisa ser preenchido.

Gere uma chave SHA-1 usando ./gradlew signingReport e anote o campo SHA1 na variante de depuração.

Adicione o app ao Firebase usando o console do Firebase (siga as etapas 1 e 2). No campo "Certificado de assinatura de depuração SHA-1", preencha o valor da etapa anterior.

Faça o download do google-services.json e substitua o conteúdo do Firebase pelo arquivo vazio na pasta do app.

O SDK do Firebase já foi adicionado aos arquivos Gradle de build.

  1. Abra o FhirApplication.kt e defina o campo baseUrl como o URL da função do Cloud.
  2. Selecione "Sincronizar seu projeto com arquivos Gradle" na barra de ferramentas do Android Studio.

Concluímos a configuração e a inclusão de dependências da implementação.

7. Configuração e resposta do questionário

Já configuramos o questionário no repositório. Mas vamos analisar o código:

  1. Verifique se a FragmentContainerView está presente dentro da ConstraintLayout no arquivo app/src/main/res/layout/activity_main.xml.
  2. Verifique se o QuestionnaireFragment tem um questionário FHIR codificado em JSON para renderizar o fragmento.

Nesse caso, vamos usar o json - "new-patient-registration-paginated.json" para renderizar o fragmento. Verifique os arquivos MainActivity.kt, AddPatientFragment.kt e AddPatientViewModel.kt

Agora que verificamos o fragmento, o json e o modelo, execute o app e tente inserir respostas para os campos no questionário.

Você vai notar a validação de campos de string, data, numéricos e outras condições.

É possível executar o app e verificar o registro criado no log.

9e1bb440074f1a88.png

Saiba mais sobre como usar fragmentos aqui. Isso é tudo para a configuração do fragmento e da resposta do questionário.

8. Exibição do resultado do conjunto de dados do FHIRStore e do BigQuery

Agora que tudo está configurado e atualizado, clique em "Sincronizar projeto com arquivos Gradle". Depois de concluído,

  1. Execute o app no Android Emulator e assista ao carregamento do questionário.
  2. Responda às perguntas e clique em "Enviar" na parte de cima.
  3. A mensagem "Paciente salvo" vai aparecer no app.

Conferir o resultado do repositório FHIR

Acesse o console do FHIRViewer do Google Cloud Healthcare.

1064f03b4e1e45f5.png

Selecione o repositório FHIR, faça uma consulta e clique em EXECUTAR PESQUISA. Os resultados da pesquisa vão aparecer logo abaixo. 37a070480a06362c.png

Conferir o resultado do conjunto de dados do BigQuery

Acesse o console do Google Cloud BigQuery e, no painel do Explorer, acesse o conjunto de dados criado para este projeto.

7c483ec6d578b8cd.png

Clique em Visualizar e você verá o mesmo número e os dados resultantes encontrados no armazenamento FHIR do Healthcare no conjunto de dados do BigQuery.

faafeae4a837a41c.png

Agora é possível executar SQL, Analytics e ML do BigQuery nos dados FHIR que você acabou de salvar no conjunto de dados da nuvem.

9. Pesquisa e capacidade off-line

Para garantir a capacidade off-line no app do SDK Android FHIR com tecnologia OHS, siga a diretriz de design que precisa ser ativada na implementação que discutimos aqui.

Para pesquisar recursos FHIR, temos duas maneiras:

  1. FHIR Viewer no console do Google Cloud
  2. Método de pesquisa FHIR usando solicitações GET ou POST

10. Demonstração do app

Agora que nosso app foi desenvolvido, vamos testá-lo e conferir o resultado na nuvem.

11. Liberar espaço

Para evitar cobranças na sua conta do Google Cloud pelos recursos usados nesta postagem, siga estas etapas:

  1. No console do Google Cloud, acesse a página Gerenciar recursos.
  2. Na lista de projetos, selecione o projeto que você quer excluir e clique em Excluir.
  3. Na caixa de diálogo, digite o ID do projeto e clique em desligar para excluir o projeto.

12. Parabéns

Parabéns! Neste projeto, criamos um app Android para armazenar e consultar dados FHIR de pacientes no armazenamento FHIR do Cloud Healthcare e no conjunto de dados do BigQuery usando a API Cloud Healthcare em apenas sete etapas:

  1. Configurar o app para Android
  2. Configurar a API Cloud Healthcare
  3. Criar um conjunto de dados de saúde e um repositório de dados FHIR
  4. Criar um conjunto de dados do BigQuery
  5. Configurar um stream do BigQuery para gravar dados do repositório de dados FHIR no conjunto de dados do BigQuery
  6. Implantar uma função do Cloud para gravar dados R4 no repositório de dados FHIR
  7. Acionar funções do Cloud no app Android no envio de respostas do questionário

Agora que as etapas estão claras, tente as mesmas etapas para a sincronização de edição do FHIR do paciente com a nuvem.