Voice2Rx is an Android SDK that allows voice transcription and structured prescription data generation for healthcare applications.
- Prerequisites
- Installation
- Initialization
- Basic Usage
- Working with Sessions
- Advanced Features
- Cleanup
- Links
Before integrating the Voice2Rx SDK, ensure that your Android project meets the following requirements:
-
Android API level 24 or higher
-
Kotlin 1.9.0 or higher
-
Microphone permission in your AndroidManifest.xml:
<uses-permission android:name="android.permission.RECORD_AUDIO" /> <uses-permission android:name="android.permission.INTERNET" />
-
Runtime permission handling for microphone access
Add the following dependency to your app/build.gradle.kts
file:
implementation("com.github.eka-care:eka-v2rx-android:1.0.5")
To initialize the SDK, you need to implement the IOkHttpSetup
interface and provide the necessary configuration:
// Create object implementing IOkHttpSetup interface to provide auth tokens
class OkHttpImpl : IOkHttpSetup {
// Provide headers which are necessary for authentication
override fun getDefaultHeaders(url: String): Map<String, String> {
val headers = HashMap<String, String>()
headers["auth"] = // provide session token here for authentication
return headers
}
override fun refreshAuthToken(url: String): Map<String, String>? {
// refresh auth token here
return null
}
override fun onSessionExpire() {
// handle token expiration
}
}
// Initialize the SDK
Voice2Rx.init(
context = context,
config = Voice2RxInitConfig(
onStart = {
// Code to execute when recording starts
},
onStop = { sessionId, recordedFiles ->
// Code to execute when recording stops
},
onError = { sessionId, errorMsg ->
// Handle errors
},
docOid = "", // Doctor oid
docUuid = "", // Doctor UUID
ownerId = "", // Owner ID
contextData = ContextData(
doctor = null,
patient = null,
visitid = sessionId
),
okHttpSetup = OkHttpImpl(),
callerId = "", // Caller ID
)
)
To start a voice recording session:
// Start a voice session in DICTATION or CONSULTATION mode
Voice2Rx.startVoice2Rx(mode = Voice2RxType.DICTATION)
// The onStart callback (defined in init) will be triggered when the session begins
To stop a voice recording session:
// Stop the current voice session
Voice2Rx.stopVoice2Rx()
// The onStop callback will be triggered with the sessionId
To check if a recording session is currently active:
// Returns true if a recording session is in progress
val isRecording = Voice2Rx.isCurrentlyRecording()
To access previous recording sessions:
// Get all recording sessions
val sessions = Voice2Rx.getSessions()
// Access a specific session (example using the first session)
val session = sessions.firstOrNull()
// Access session data
session?.let {
val transcript = it.transcript // Raw transcript text
val structuredRx = it.structuredRx // Structured prescription data
}
The SDK returns structured prescription data in JSON format:
{
"prescription": {
"advices": [
{
"id": "locale-4f1e59b7c71003546b7bb5aadb89280b",
"parsedText": "Take bedrest for at least 7 days",
"text": "Take bedrest for at least 7 days"
},
{
"id": "locale-b3ca8e9447de58b3738549ec3c8db922",
"parsedText": "Do exercise with physiotherapist",
"text": "Do exercise with physiotherapist"
}
],
"followup": {
"date": "2025-03-09T00:00:00.000000Z"
},
"labTests": [
{
"common_name": "Blood sugar test",
"id": "locale-5686e09a70ffcbc355b372f57b744752",
"name": "Blood sugar test"
},
{
"common_name": "Liver function test",
"id": "locale-9b501b45359316407782679ce7eeabac",
"name": "Liver function test"
},
{
"common_name": "X-ray",
"id": "locale-3c51a99d9bbfefde7ba517f3316899f2",
"name": "X-ray"
}
],
"language": "EN",
"medications": [
{
"duration": {
"custom": "3 Days",
"unit": "Days",
"value": 3
},
"frequency": {
"custom": "1-1-1",
"dose": [
"1",
"1",
"1"
],
"frequency": "3",
"pattern_id": "fp-1",
"period": 1,
"period_unit": "day"
},
"id": "locale-a0fdc63d09d1d255b00796ade40bb3c6",
"name": "Molo 650 tablet",
"original_name": "mdolo 650 tablet",
"linked": {
"eka_id": "b-4974923412"
}
}
],
"symptoms": [
{
"id": "locale-f532fde6e2a357af72b9de6aa1f0e65e",
"name": "Fever",
"status": "preliminary"
},
{
"id": "locale-6a44898c82426d50cb083373d59b155a",
"name": "Headache",
"status": "preliminary"
},
{
"id": "locale-867fc9a3c94474b3c77ee9a0b5aae022",
"name": "Leg pain",
"status": "preliminary"
},
{
"id": "locale-a7033cb31b1991cc8f4c9c751a8452b6",
"name": "Neck pain",
"status": "preliminary"
}
]
}
}
The SDK can also generate a formatted markdown output:
**Chief Complaints**
- Fever
- Headache
- Leg pain
- Neck pain
**Assessment**
- Symptomatic fever with multiple body pains
**Plan**
- Medications:
- Mdolo 650 tablet - TID for 3 days
- Investigations advised:
- Blood test
- Blood sugar test
- Liver function test
- X-ray
- Physiotherapy referral
**Patient Instructions**
- Take complete bed rest for 7 days
- Follow up after 15 days with all investigation reports
- Continue physiotherapy sessions
- Take prescribed medications as directed
To retry processing a session:
Voice2Rx.retrySession(
context = context,
sessionId = sessionId,
onResponse = { responseState ->
// Handle the retry response
// Indicates whether retry was successful or not
}
)
When you're done using the SDK, free up resources:
// Release all resources
Voice2Rx.dispose()