Skip to content

ikram-shah/iris-fhir-transcribe-summarize-export

Repository files navigation

IRIS FHIR Transcribe-Summarize-Export

Gitter Quality Gate Status

💻 Contributors - Ikram Shah and Sowmiya Nagarajan.

🚀 Built with IRIS FHIR, OpenAI, Langchain, Vue.js, Google Docs/Sheets API.

Demo

iris.demo.2.mp4

Overview

This is a full-stack application that allows practitioners and other clinicians to record voice notes linked to a subject and also export them to Google Docs/Sheets.

  1. The UI enables voice recording and the audio is transcribed to text using Open AI Whisper API.
  2. Then the notes are summarized using Open AI text-davinci-003 model and stored as Document References in FHIR server.
  3. Finally, there is an option to export the stored documents to Google Docs in an account of user's choice through OAuth2. Other data like Observations can be exported to Google Sheets.

Note - This implements a Community idea💡. Docs and Sheets export is directly handled via REST api in IRIS now. It's not an interoperability adapter yet and it's WIP.

The application also acts as a dashboard to view patient and other information like observations and encounters.

The frontend UI is built as a Vue.js app. The backend is powered by IRIS REST api and there is an underlying FHIR server running to store all data. The application uses embedded-python to connect to FHIR api via fhirpy module.

Folder Structure

iris-fhir-transcribe-summarize-export/
├──src
│   ├── fhir/
│   │   └── ...
│   ├── python/                  //backend
│   │   └── ...
│   ├── vue/                     //frontend
│   │   ├── src/
│   │   ├── .env                 //environment file to add the openai_api_key and google_client_id
│   │   └── ...
├── Other/
│   └── IRIS-FHIR-...            //postman collection
├── Scripts/
│   ├── iris.script
│   ├── rebuild.sh
│   └── synthea-loader.sh
├── Scripts/
├── docker-compose.yml
├── Dockerfile
├── README.md
└── LICENSE

Build and run

  1. Refer here to create an OpenAI API key. This is used in the transcription and summarizing the voice notes features. Set the key in .env for frontend.
  2. Follow steps in following section to configure OAuth Client ID for Google docs/sheets export. Set it in .env.
  3. Run below script to start frontend and backend apps. UI hot reloads, so no need to rebuild for every change. But backend needs a rebuild every time.
    ./scripts/rebuild.sh

Useful Links

  1. UI - http://localhost:8080
  2. Backend - http://localhost:52773/fhir/api/patient/all
  3. FHIR server - http://localhost:52773/fhir/r4/Patient

Configure Google OAuth Client ID

❗The below steps take only a few minutes to get a new Client ID for testing. But, feel free to raise an issue to add specific mail IDs to our existing client ID to test quickly.❗

  1. Follow steps here to create a OAuth consent screen and client ID for a test project.
  2. Add scope required for docs and sheets export - https://www.googleapis.com/auth/documents, https://www.googleapis.com/auth/spreadsheets
  3. Configure authorized javascript origin and authorized redirect URI as http://localhost:8080 or whichever port you run the frontend vue app on.
  4. Add some test user email IDs to allow testing. Only these users can authorize via the OAuth flow. If you need to open it up for more users, then a mandatory review process is required. More details here.
  5. Set the obtained client ID in .env

Test FHIR REST API

Find the full list of APIs in Postman Collection.

Run in Postman

Basic Auth credentials, username - SuperUser, password - SYS.

Test IRIS commands

Uncomment print(rows) in irisfhirclient to view results

  1. Exec into container
    docker-compose exec iris iris session iris
  2. IRIS commands
    do ##class(fhir.dc.FhirClient).GetResource("Patient")
    do ##class(fhir.dc.FhirClient).GetPatientResources("Observation","1")

Run Unit Tests

  1. Exec into container
    docker-compose exec iris iris session iris
  2. IRIS commands
    zn "FHIRSERVER"
    Set ^UnitTestRoot = "/irisdev/app/src"
    Do ##class(%UnitTest.Manager).RunTest("fhir","/loadudl")

License

This project is licensed under the MIT License.

You can find the full text of the license in the LICENSE file.