Microsoft 365 Insider’s guide to ISTELive 25 and ASCD Annual 25
June 28, 2025Prompt of the Day
June 28, 2025Information presented in this article does not constitute product guidance. It provides a point of view (a potential approach) to facilitate the integration of a remote patient monitoring solution with healthcare data solutions in Microsoft Fabric.
Co-Authors: Kemal Kepenek, Mustafa Al-Durra PhD, Matt Dearing, Jason Foerch, Manoj Kumar
Introduction
Remote patient monitoring solutions rely on connected devices, wearable technology, and advanced software platforms to collect and transmit patient health data. They facilitate monitoring of vital signs, chronic conditions, and behavioral patterns. Healthcare data solutions in Microsoft Fabric offers a secure, scalable, and interoperable data platform as part of Microsoft for Healthcare. Such a unified data platform is crucial for integrating disparate data sources and generating actionable health insights.
This article provides a reference architecture and the steps to integrate remote patient monitoring solutions with healthcare data solutions in Fabric. The integration is aimed at satisfying low data resolution use cases. With low data resolution, we address infrequent (hourly, daily, or less) transfer of aggregated or point-in-time-snapshot device data into healthcare data solutions in Fabric to be used in a batch fashion to generate analytical insights. Integration steps for high data resolution use cases, which necessitate high frequency transfer of highly granular medical device data (for example, data from EKGs or ECGs) to become input to either batch or (near) real-time analytics processing and consumption, is a candidate for a future article.
There are several methods, solutions and partners available in the marketplace today that will allow you to integrate a remote patient monitoring solution with the healthcare data solutions in Fabric. In this article, we leveraged the solution from Life365 (a Microsoft partner). The integration approach discussed here is applicable to most remote patient monitoring solutions whose integration logic (code) can be run inside a platform that can programmatically access (for example, through REST API calls) Microsoft Fabric. In our approach, the integration platform chosen is the Function App service within Microsoft Azure.
In the subsequent sections of this article, we cover the integration approach in two phases:
- Interoperability phase, which illustrates how the data from medical devices (used by the remote patient monitoring solution) can be converted into format suitable for transferring into healthcare data solutions in Fabric.
- Analytical processing and consumption phase, which provides the steps to turn the medical device data into insights that can be easily accessed through Fabric.
Integration Approach
Interoperability Phase
Step 1 of this phase performs the transfer of proprietary device data. As part of this step, datasets are collected from medical devices and transferred (typically, in the form of files) to an integration platform or service. In our reference architecture, the datasets are transferred to the Function App (inside an Azure Resource Group) that is responsible for the integration function. It is important for these datasets to contain information about (at least) three concepts or entities:
- Medical device(s) from which the datasets are collected.
- Patient(s) to whom the datasets belong.
- Reading(s) obtained from the medical device(s) throughout the time that the patients utilize these devices. Medical device readings data may be point-in-time data capture, metrics, measures, calculations, collections, or similar data points.
Information about the entities listed above will be used in the later step of interoperability phase (discussed below) when we will convert this information into resources to be transferred to the second phase that will perform analytical processing and consumption.
In step 2, to maintain mapping between proprietary device data and FHIR® resources, you can use transformation templates, or follow a programmatic approach, to convert datasets received from medical devices into appropriate FHIR® resources. Using the entities mentioned in the previous step, the conversion takes place as follows:
- Medical device information is converted to Device resource in FHIR®*.
- Patient information is converted to Patient resource in FHIR®.
- Device reading information is converted to Observation resource in FHIR®.
* Currently, healthcare data solutions in Fabric supports FHIR® Release 4 (R4) standard. Consequently, the FHIR® resources that are created as part of this step should follow the same standard.
Transformation and mapping activities are under the purview of each specific remote patient monitoring integration solution and are not reviewed in detail in this article. As an example, we provided below the high-level steps that one of the Microsoft partners (Life365) followed to integrate their remote patient monitoring solution with healthcare data solutions in Fabric:
Life365 team developed a cloud-based transformation service that translates internal device data into standardized FHIR® (Fast Healthcare Interoperability Resources) Observations to enable compatibility with healthcare data solutions in Microsoft Fabric and other health data ecosystems.
This service is implemented in Microsoft Azure Cloud and designed to ingest structured payloads from Life365-connected medical devices —including blood pressure monitors, weight scales, and pulse oximeters— and convert them into FHIR®-compliant formats in real time.
When a reading is received:
- The service identifies relevant clinical metrics (e.g., systolic/diastolic blood pressure, heart rate, weight, SpO₂).
- These metrics are mapped to FHIR® Observation resources using industry-standard LOINC codes and units.
- Each Observation is enriched with references to the associated patient and device, formatted in NDJSON to meet the ingestion requirements in healthcare data solutions in Fabric.
- The resulting FHIR®-compliant data is securely transmitted to the Fabric instance using token-based authentication.
This implementation provides a consistent, standards-aligned pathway for Life365 device data to integrate with downstream FHIR®-based platforms while abstracting the proprietary structure of the original device payloads.
For examples from the public domain, you can use the following open-source projects as references:
- https://github.com/microsoft/fit-on-FHIR®
- https://github.com/microsoft/healthkit-to-FHIR®
- https://github.com/microsoft/FitbitOnFHIR®
- https://github.com/microsoft/FHIR®-Converter
Please note that above open-source repositories might not be up to date. While they may not provide a complete (end to end) solution to map medical device data to FHIR®, they may still be helpful as a starting point. If you decide to incorporate them into your remote patient monitoring integration solution, validate their functionality and make necessary changes to meet your solution’s requirements.
For the resulting FHIR® resources to be successfully consumed by the analytics processing later (within healthcare data solutions in Fabric), they need to satisfy the requisites listed below.
- Each FHIR® resource, in its entirety, needs to be saved as a single row into an NDJSON-formatted file. We recommend creating one NDJSON file per FHIR® resource type. That means creating Device.ndjson, Patient.ndjson, and Observation.ndjson files for the three entities we reviewed above.
- Each FHIR® resource needs to have a meta segment populated with inclusion of lastUpdated value. As an example:
“meta”:{“lastUpdated”:”2025-05-15T15:35:04.218Z”, “profile”:[“http://hl7.org/FHIR®/us/core/StructureDefinition/us-core-documentreference”]}
- Cross references between Observation and Patient, as well as between Observation and Device FHIR® resources need to be represented correctly, either through formal FHIR® identifiers or logical identifiers. As an example, the subject and device attributes of Observation FHIR® resource need to refer to Patient and Device FHIR® resources, respectively, in this manner:
“subject”:{“reference”:”Patient/d3281621-1584-4631-bc82-edcaf49fda96″}
“device”:{“reference”:”Device/5a934020-c2c4-4e92-a0c5-2116e29e757d”}
- For Patient FHIR® resource, if MRN is used as the identifier, it is important to represent the MRN value according to the FHIR® standard. Patient identifier is a critical attribute that it is used to establish cross-FHIR®-resource relationships throughout the analytics processing and consumption phase. We will review that phase later in this article. At a minimum, a Patient identifier, which uses MRN coding as its identifier type, needs to have its value, system, type.coding.system, and type.coding.code (with value “MR”) attributes populated correctly. See an example below. You can also refer to a Patient FHIR® resource example from hl7.org.
“reference”: null,
“type”: “Patient”,
“identifier”: {
“extension”: null,
“use”: null,
“value”: “4e7e5bf8-2823-8ec1-fe37-eba9c9d69463”,
“system”: “urn:oid: 1.2.36.146.595.217.0.1”,
“type”: {
“extension”: null,
“id”: null,
“coding”: [
{
“extension”: null,
“id”: null,
“system”: “http://terminology.h17.org/CodeSystem/v2-0203”,
“version”: null,
“code”: “MR”,
“display”: null,
“userSelected”: null
}
“text”: null
},
…
With Step 3, to perform the transfer of FHIR® resource NDJSON files to healthcare data solutions in Fabric:
- Ensure that the integration platform (Azure Function App, in our case) has permission to transfer (upload) files to the healthcare data solutions in Fabric:
- Find the managed identity or the service principal that the Azure Function App is running under:
- Navigate to the Azure portal and find your Function App within your resource group.
- In the Function App’s navigation pane, under “Settings,” select “Identity”.
- Identify the Managed Identity (if enabled): If System-assigned managed identity is enabled, you’ll see information about the system-assigned managed identity, including its object ID and principal ID. If User-assigned managed identity is linked, the details of that identity will be displayed. You can also add user-assigned identities here if needed.
- Service Principal (if applicable): If the Function App is configured to use a service principal, you’ll need to look for the service principal within the Azure Active Directory (a.k.a. Microsoft Entra ID). You can find this by searching for “Enterprise Applications” within Azure Active Directory and looking for the application associated with the Function App.
- Grant Azure Function App’s identity access to upload files:
- Having been logged into Fabric with an administrator account, navigate to the Fabric workspace where your healthcare data solutions instance is deployed. Click on the “Manage Access” button on the top right.
- Click on “Add People or Groups”
- Add the managed identity or the service principal, which is associated with your Azure Function App, with Contributor access by selecting “Contributor” from the dropdown list.
- Find the managed identity or the service principal that the Azure Function App is running under:
- Using a coding environment, similar to the Python example provided below, you can manage the OneLake content programmatically. This includes the ability to transfer (upload) the NDJSON-formatted files, which have been created earlier, to the destination OneLake folder.
from azure.identity import DefaultAzureCredential
from azure.storage.filedatalake import DataLakeFileClient, DataLakeFileSystemClient
# Replace with your OneLake URI
onelake_uri = “https://your-account-name.dfs.core.windows.net”
# Replace with the destination path to your file
file_path = “//.ndjson”
# Get the credential
credential = DefaultAzureCredential()
# Create a DataLakeFileClient
file_client = DataLakeFileClient(
url=f”{onelake_uri}{file_path}”,
credential=credential
)
# Upload the file
with open(“.ndjson”, “rb”) as f:
file_client.upload_data(f, overwrite=True)
print(f”File uploaded successfully: {file_path}”)
The destination OneLake folder to use for the remote patient monitoring solution integration into healthcare data solutions in Fabric is determined as follows:
- Navigate to the bronze lakehouse created with the healthcare data solutions instance inside the Fabric workspace. The lakehouse is named as “healthcare1_msft_bronze”. “healthcare1” segment in the name of the lakehouse points to the name of the healthcare data solutions instance deployed in the workspace. You might see a different name in your Fabric workspace; however, the rest of the lakehouse name (“_msft_bronze”) remains unchanged.
- Unified folder structure of healthcare data solutions is located inside the bronze lakehouse. Within that folder structure, create a subfolder named with the name of the remote patient monitoring solution you are integration with. See the screenshot below. This subfolder is referred to as namespace in healthcare data solutions documentation, and is used to uniquely identify the source of incoming (to-be-uploaded) data. NDJSON files, which have been generated during the previous interoperability phase, will be transferred (uploaded) into that subfolder. The full path of the destination OneLake folder to use in your file transfer (upload) code is:
healthcare1_msft_bronze.LakehouseFilesIngestClinicalFHIR®-NDJSON
Analytics Processing and Consumption Phase
Step 1 of this phase connects the interoperability phase discussed earlier with the analytics processing and consumption phase. As part of this step, you can simply verify that the NDJSON files have been uploaded to the remote patient monitoring solution subfolder inside the unified folder structure in bronze lakehouse of healthcare data solutions in Fabric. The path to that subfolder is provided earlier in this article.
After the upload of the files has been completed, you are ready to run the data pipeline that will perform data ingestion and transformation so that the device readings data may be used for analytics purposes. In the Fabric workspace, where healthcare data solutions instance is deployed, find and open the data pipeline named “healthcare1_msft_omop_analytics”. As is the case with the bronze lakehouse name, “healthcare1” segment in the name of the data pipeline points to the name of the healthcare data solutions instance deployed in the workspace. You might see a different name in your Fabric workspace depending on your own instance.
This data pipeline will execute four activities, first of which will copy the transferred files into another subfolder within unified folder structure so that they can be input to the ingestion step next. Then, the subsequent pipeline activities perform steps 2 through 4 as illustrated in the analytics processing and consumption phase diagram further above.
Step 2 ingests the content from the transferred (NDJSON) file(s) to the ClinicalFHIR delta table of the bronze lakehouse.
Step 3 transforms the content from the ClinicalFHIR delta table of the bronze lakehouse into flattened FHIR® data model content inside silver lakehouse.
Step 4 transforms the flattened FHIR® content of silver lakehouse into OMOP data model content inside gold lakehouse.
As part of step 5, you can develop your own gold lakehouse(s) through transforming content from the silver lakehouse into data model(s) best suited for your custom analytics use cases.
Device data, once transformed into a gold lakehouse, may be used for analytics or reporting through several ways some of which are discussed briefly below.
In step 6, Power BI reports and dashboards can be built inside Fabric that offer a visual and interactive canvas to analyze the data in detail. (Overview of Power BI – Microsoft Fabric | Microsoft Learn)
As part of step 7, Fabric data share feature can be used to grant teams within external organizations (that you collaborate with) access to the data (External data sharing in Microsoft Fabric – Microsoft Fabric | Microsoft Learn).
Finally, step 8 enables you to utilize the discover and build cohorts capability of healthcare data solutions in Fabric. With this capability, you can submit natural language queries to explore the data and build patient cohorts that fit the criteria that your use cases are aiming for. (Build patient cohorts with generative AI in discover and build cohorts (preview) – Microsoft Cloud for Healthcare | Microsoft Learn)
Conclusion
When integrated with healthcare data solutions in Fabric, remote patient monitoring solutions can enable transformative potential in enhancing patient outcomes, optimizing care coordination, and streamlining healthcare system operations. If your organization would like to explore the next steps in such a journey, please contact your Microsoft account team.
Microsoft products and services (1) are not designed, intended or made available as a medical device, and (2) are not designed or intended to be a substitute for professional medical advice, diagnosis, treatment, or judgment and should not be used to replace or as a substitute for professional medical advice, diagnosis, treatment, or judgment. Customers/partners are responsible for ensuring solutions comply with applicable laws and regulations.
FHIR® is a registered trademark of Health Level Seven International, registered in the U.S. Trademark Office, and is used with their permission.