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.
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.
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:
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.
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.
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.
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.
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.
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.
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:
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.
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:
For obtaining coordinates and then saving them, we also used Hive as a local data storage for creating a NoSQL database.
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.
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.