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.

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
- No console do Google Cloud, na página de seletor de projetos, selecione ou crie um projeto do Google Cloud.
- Confira se o faturamento está ativado para seu projeto do Cloud. Saiba como verificar se o faturamento está ativado em um projeto.
- Ative as APIs necessárias (BigQuery, API Healthcare).
Ativar o Cloud Shell
- 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:

- 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
- 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.
- 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.
- Acesse a página do console do Google Cloud Healthcare, browser.
- Clique no CONJUNTO DE DADOS recém-criado.
- Clique no ARMAZENAMENTO DE DADOS recém-criado.

- Clique em ADICIONAR NOVA CONFIGURAÇÃO DE STREAMING.

- 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.

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:
- Acesse o Cloud Functions e clique em CRIAR FUNÇÃO.
- Defina o nome como fhir-datastore-proxy, a região como us-central1 e a opção de autenticação como "Exigir autenticação".
- 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
- Clique em Próxima para acessar a próxima página, em que vamos adicionar nosso código.
- 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.
- Copie o código do repositório e cole-o no editor in-line.
- Acesse o arquivo pom.xml e copie o arquivo pom no repositório para o editor in-line.
- Clique em IMPLANTAR. Sua função será criada e executada em breve.
Observação:
- A API Cloud Healthcare usada nessa função usa as credenciais padrão do aplicativo para autenticar as solicitações recebidas pela API Healthcare.
- 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:
- Clone o repositório de exemplos de apps FHIR: https://github.com/google/fhir-app-examples
- 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.
- Abra o FhirApplication.kt e defina o campo baseUrl como o URL da função do Cloud.
- 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:
- Verifique se a FragmentContainerView está presente dentro da ConstraintLayout no arquivo app/src/main/res/layout/activity_main.xml.
- 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.

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,
- Execute o app no Android Emulator e assista ao carregamento do questionário.
- Responda às perguntas e clique em "Enviar" na parte de cima.
- A mensagem "Paciente salvo" vai aparecer no app.
Conferir o resultado do repositório FHIR
Acesse o console do FHIRViewer do Google Cloud Healthcare.

Selecione o repositório FHIR, faça uma consulta e clique em EXECUTAR PESQUISA. Os resultados da pesquisa vão aparecer logo abaixo. 
Conferir o resultado do conjunto de dados do BigQuery

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.

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:
- FHIR Viewer no console do Google Cloud
- 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:
- No console do Google Cloud, acesse a página Gerenciar recursos.
- Na lista de projetos, selecione o projeto que você quer excluir e clique em Excluir.
- 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:
- Configurar o app para Android
- Configurar a API Cloud Healthcare
- Criar um conjunto de dados de saúde e um repositório de dados FHIR
- Criar um conjunto de dados do BigQuery
- Configurar um stream do BigQuery para gravar dados do repositório de dados FHIR no conjunto de dados do BigQuery
- Implantar uma função do Cloud para gravar dados R4 no repositório de dados FHIR
- 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.