💻 Contributors - Ikram Shah and Sowmiya Nagarajan.
🚀 Built with IRIS FHIR, OpenAI, Langchain, Vue.js, Google Docs/Sheets API.
iris.demo.2.mp4
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.
- The UI enables voice recording and the audio is transcribed to text using Open AI Whisper API.
- Then the notes are summarized using Open AI text-davinci-003 model and stored as Document References in FHIR server.
- 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.
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
- 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.
- Follow steps in following section to configure OAuth Client ID for Google docs/sheets export. Set it in .env.
- 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
- UI - http://localhost:8080
- Backend - http://localhost:52773/fhir/api/patient/all
- FHIR server - http://localhost:52773/fhir/r4/Patient
❗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.❗
- Follow steps here to create a OAuth consent screen and client ID for a test project.
- Add scope required for docs and sheets export -
https://www.googleapis.com/auth/documents, https://www.googleapis.com/auth/spreadsheets
- Configure authorized javascript origin and authorized redirect URI as
http://localhost:8080
or whichever port you run the frontend vue app on. - 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.
- Set the obtained client ID in .env
Find the full list of APIs in Postman Collection.
Basic Auth credentials, username - SuperUser
, password - SYS
.
Uncomment print(rows)
in irisfhirclient to view results
- Exec into container
docker-compose exec iris iris session iris
- IRIS commands
do ##class(fhir.dc.FhirClient).GetResource("Patient") do ##class(fhir.dc.FhirClient).GetPatientResources("Observation","1")
- Exec into container
docker-compose exec iris iris session iris
- IRIS commands
zn "FHIRSERVER" Set ^UnitTestRoot = "/irisdev/app/src" Do ##class(%UnitTest.Manager).RunTest("fhir","/loadudl")
This project is licensed under the MIT License.
You can find the full text of the license in the LICENSE file.