Clinical data exchange PoC

Clinical data exchange PoC

We delivered a PoC of a Flutter-based application for ambulance doctors and paramedics to securely store and exchange clinical data, which has passed the beta testing phase and attracted 30+ new clients.

Table of contents

Context

Our customer is a provider of software solutions for the healthcare industry. They had a clinical data exchange application intended to help ambulance doctors and paramedics quickly assess patients’ complaints and react to them by adding all the clinical data (including cardiograms from ECG devices) to the patient information form on their devices during patient examination. 

The app was developed for medical centers, hospitals, and other health institutions and was available only for Windows tablets. The company planned to expand and increase the number of users, so they wanted to build a solution for all platforms to reach a wider audience. The solution would also have secure record access and storage features to safeguard patient privacy and comply with HIPAA. To help bring their vision to life, the customer hired Itransition to develop their medical app.

Solution

Discovery phase

To identify the project’s context, validate requirements, and choose the right tech stack, we offered the customer to start with a discovery phase. The customer provided us with access to the current system and additional materials to get a better understanding of the project, like .zol files from ECG, anonymized insurance card samples, etc. We also conducted discovery interviews. Based on this information, we prepared a vision and scope document with all the solution requirements, such as:

  • Functionality for attaching files (e.g., files from ECG devices, photos of OCR insurance cards) and transferring these files from/to any device regardless of the OS they are stored at
  • Strong text and images encryption/decryption to protect solution against data leaks
  • Location determination features so that paramedics don’t have to input manually the address of the medical examination

The customer prioritized optimized TCO, simplicity of system maintenance and support, stable performance, and flexibility in the future solution. Having considered all these aspects, we recommended opting for cross-platform application development. Due to the industry and technology specifics, we suggested PoC development to evaluate the solution's technical feasibility and test the idea and then gradually scale the solution’s functionality. We opted for Flutter as it is the most suitable option for PoC development and other cross-platform technologies cannot be used for web app development.

Clinical data exchange PoC

Itransition delivered a clinical data exchange PoC available on iOS, Android, and Windows devices.

We chose the BloC (Business Logic Component) Pattern with a Clean Architecture approach, which allowed us to build a flexible solution with easily customizable platform-specific functionality. The solution also proved easier to test because of the separation between the business logic and key features.

Solution architecture

Parsing .zol files from the ECG device

As the customer wanted to attach files from ECG devices, we had to implement parsing .zol files and used Zoll SDKs for each platform. To deliver custom platform-specific functionality, we built the layer with Flutter plugins and then a layer of calls from the Flutter application. We also customized Android, iOS, and Windows source code to ensure smooth file transferring to Flutter plugins.

Data encryption and decryption

We created a solution for data encryption and decryption to ensure the app’s HIPAA compliance. To be encrypted and decrypted, attached files should first be uploaded to the local data storage, so we used Hive as key-value storage with a built-in encryption mechanism.

To encrypt data, we used a crypto library with a unique device ID/value that was generated by the backend as a private key. The encrypted file is securely transferred to the other device, and then the file is decrypted with the Hive tools. Then the app shows a preview (if it is possible) or just the icon and name of the file, which can be opened with the standard OS functionality.

We also prepared steps and instructions for secure information extraction from iOS-, Android-, and Windows-operated devices with broken screens. For example, when users know the private key and the data from the iOS device is synchronized with iTunes and Mac, they can access and recover the necessary data.

Attaching files and taking photos

We used Flutter capabilities to enable onsite doctors to take photos and upload related documents in one click. For selecting images from the Android and iOS image library and taking new pictures, we implemented the Flutter Camera plugin.

Flutter has no limitations or restrictions for attaching files of any size and for any platform. Thus, we utilized Flutter’s packages to simplify finding files in the device's file system and creating attachments.

Data transfer with BLE

For file transfer, we used BLE as it consumes far less battery power than classic Bluetooth and offers a connection that is both robust and reliable. To transfer data between two devices, one should be acting as a Bluetooth central and the other as a peripheral. But since there is no solution in Flutter for switching the device to the peripheral mode, we used a native development layer for all the platforms. After that, the data was proxied to the FlutterBlue plugin and transferred using BLE directly to another device.

Medical records recognition

The customer wanted to develop functionality that would read a patient’s name and medical number from the insurance card, take a photo of the card, detect the necessary data, and add it to patient info. The customer provided us with various insurance card samples and we recognized the following implementation challenges:

  • Horizontal alignment problem (e.g., if there are no visible edges of the card, the alignment quality drops)
  • Dataset problem (patient name can be placed differently on patient cards)
  • Model quality problem (with a significant horizontal shift, the text may turn upside down and decrease the quality of recognition)

To overcome them, we implemented an ML model using PyTorch. First, with the CRAFT text detector, the model detects the text area by exploring each character's place and affinity between characters, finding the bounding box of the text, and recognizing the text location based on the coordinates calculated on the grounds of analyzed insurance cards. To recognize text from its placement on the image, we used SATRN. After that, the ML model adds recognized data to the relevant field in the app.

Geolocation

The Flutter Location plugin handles identifying a location on Android and iOS and provides callbacks when the location is changed. With the Flutter Location plugin, the app:

  • Determines user location with latitude and longitude
  • Allows a user to adjust the map to point at the exact spot where they picked up the patient
  • Calculates and displays the address based on the determined latitude and longitude

For obtaining coordinates and then saving them, we also used Hive as a local data storage for creating a NoSQL database.

Dynamic UI

The customer wanted to show the first version of the app to their clients and let them test it on their devices. Thus, we offered Dynamic UI implementation to allow clients to customize the app’s UI based on the definition of an existing page or Java portlet definition. We have generated an example JSON file that allows us to arrange UI elements using certain rules in Flutter. 

To create a fully dynamic UI, we implemented features that allow for applying masks to certain fields and displaying field validation error messages. The customer also shared with us their style guidelines, which we used to create wireframes with a screen map and clickable menu items.

Patient information
Event information
Status summary with submenu
Network status popup

Results

Itransition delivered a PoC of a Flutter-based application for ambulance doctors and paramedics to securely store and exchange clinical data. The solution has successfully passed the beta testing phase and helped the customer attract 30+ new healthcare institution clients. Our developers have become an integral part of the customer’s in-house team, and after the PoC delivery phase, they continue working with us on developing a full-featured app.