ConfidenceApp
- ConfidenceApp
- Overview
- Requirements
- Reduced Profiles
- Device Component (CGM Sensor)
- Miscellaneous Observation (CGM Session)
- Vital signs Observation (CGM Measurement data)
- Blood Glucose Observation
- Carbohydrate(nutritional value) Observation
- Medication Adminstration
- Calibration Observation
- EWM Observation
- DM- careplan
- Target ranges careplan
- Goal
- Bolus advice careplan (Time block settings)
- Reduced Examples
- CGM Sensor - reduced FHIR
- CGM Session - reduced FHIR
- CGM measurement data - reduced FHIR
- BG data - reduced FHIR
- Carbs data - reduced FHIR
- Insulin data - reduced FHIR
- Calibration BG - reduced FHIR
- EMWR - reduced FHIR
- Notes - reduced FHIR
- DM Careplan - reduced FHIR
- Target settings - reduced FHIR
- Time block settings - reduced FHIR
- Mobile device - reduced FHIR
- Edited and Deleted approach
- Expanded Examples (relevant for FHIRSTACK Facade)
- CGM Sensor - expanded FHIR
- CGM Session - expanded FHIR
- CGM measurement data - expanded FHIR
- BG data - expanded FHIR
- carbs data - expanded FHIR
- Insulin data - expanded FHIR
- Calibration BG - expanded FHIR
- EMWR - expanded FHIR
- Notes - expanded FHIR
- Default resources to be created
- DM careplan - expanded FHIR
- Target settings - expanded FHIR
- Time block settings - expanded FHIR
- Mobile device - expanded FHIR
Overview
ConfidenceApp integration project aims to integrate all data available from Confidence CGM App to RDCP Platform using IPP for data ingestion and consumption process.
Confidence need all the data points integrated to provide a benefit for the patient in using all the other solutions offered and connected with IPP. Furthermore to improve our algorithm and product in future iterations.
There are three main blocks of this integration depending on the platform services as follows:
- Roche Diabetes id & Consent management services: related to the user registration, authentication and consent management offered by the CIAM/CM team
- Health Data Hub services: related to the storage of the Health Data and the operations needed to ingest, access and edit data offered by the FHIR Stack team
- Other services to be identified: like backup services for mobile apps, product reporting (if needed) or requirements related to complaint handling.
Requirements
SCOPE of FHIRSTACK:
ConfidenceApp doesn't have its own backend to store all the data from the app. The main objective for FHIRSTACK is to enable FHIRServer to be able serve as backend for ConfidenceApp.
Confidence has a feature to allow users to edit and delete specific data group entries from ConfidenceApp. So FHIRSTACK shall support edit, delete actions available for BG, Carbs and Insulin group related data points. To achieve the primary objective that FHIRServer as backend for confidence, FHIRSTACK team shall expose synchronous Restful FHIR API for Confidence App to use for data ingestion and consumption. FHIRSTACK has existing mechanism to send the data to datalake which can be supported for only bundle type related integration. So FHIR API is synchronous which means confidence will share the data as soon as it created in the CGM app. In order to send the data to datalake, FHIRSTACK shall implement new mechanism to support to send individual resources to DataLake for analytics purposes Synchronous RESTful FHIR API consider the data ingestion and consumption with in specified timeframe so it shall support defined NFRs with respect to Performance.
Confidence shares data in the reduced FHIR format with minimum information and the FHIR Facade on FHIRSTACK expands these resources further before storing and sending to DataLake. When Confidence requests a restore, the facade sends back the reduced FHIR format to Confidence.
Data Points
Note: If all the columns of the table are not visible, please reduce the zoom % of the browser
| Data Point | Description | Remarks (Editable) | FHIR Resource & Element | FHIR Sample |
|---|---|---|---|---|
| BG -> Timestamp | timestamp of an entry in the App diary, connected to a manual entry | true/false (editable false if used for calibration, otherwise true) |
Observation.effectiveDateTime | Sample |
| BG -> Blood Glucose Value | a manual entry of BG taken from Roche or 3rd party meter which is used for documentation of therapy | true | Observation.valueQuantity | Sample |
| BG -> Notes | a notes field where a patient can store additional information along with the entry for BG | true | Observation.comment | Sample |
| CARB -> Timestamp | timestamp of an entry in the App diary, connected to a manual entry | true | Observation.effectiveDateTime | Sample |
| CARB -> Carbs Value | a manual entry of carbs for food, estimated by the patient when eating | true | Observation.valueQuantity | Sample |
| INSULIN -> Timestamp | timestamp of an entry in the App diary, connected to a manual entry | true | MedicationAdministration.effectiveDateTime | Sample |
| INSULIN -> Bolus | a manual entry of bolus insulin as administered by the patient | true | MedicationAdministration.dosage.dose | Sample |
| INSULIN -> Basal | a manual entry of basal insulin as administered by the patient | true | MedicationAdministration.dosage.dose | Sample |
| CGM Sensor -> SessionId | ID of the session | false | DeviceComponent.ext session-id | Sample |
| CGM Sensor -> Type | type of sample | false | DeviceComponent.ext sample-type | Sample |
| CGM Sensor -> Sample Location | location of the sample | false | DeviceComponent.ext sample-location | Sample |
| CGM Sensor -> Sample Interval | Time interval between samples in mins | false | DeviceComponent.ext sample-interval (in case of expanded FHIR this has to be also stored on the DeviceMetric resource) |
Sample |
| CGM Sensor -> Lot Number | Lot number of the sensor | false | DeviceComponent.productionSpec | Sample |
| CGM Sensor -> SystemID | Organizationally Unique Identifier (OUI) followed by a manufacturer-defined identifier | false | DeviceComponent.productionSpec | Sample |
| CGM Sensor -> Manufacturer Name | Name of the manufacturer of the device | false | DeviceComponent.productionSpec | Sample |
| CGM Sensor -> Model Number | number that is assigned by the device vendor | false | DeviceComponent.productionSpec | Sample |
| CGM Sensor -> Serial Number | serial number for a particular instance of the device | false | DeviceComponent.productionSpec | Sample |
| CGM Sensor -> HW Revision | hardware revision for the hardware within the device | false | DeviceComponent.productionSpec | Sample |
| CGM Sensor -> FW Revision | firmware revision for the firmware within the device | false | DeviceComponent.productionSpec | Sample |
| CGM Sensor -> SW Revision | software revision for the firmware within the device | false | DeviceComponent.productionSpec | Sample |
| CGM Sensor -> Model Name | Name of the device | false | DeviceComponent.productionSpec | Sample |
| CGM Sensor -> Appearance | defines the representation of the external appearance of the device | false | DeviceComponent.productionSpec | Sample |
| CGM Sensor -> Mac address | media access control address | false | DeviceComponent.productionSpec | Sample |
| CGM Session -> SessionId | Unique ID for the session | false | Observation.identifier.value | Sample |
| CGM Session -> SessionStatus | Status of the session | false | Observation.ext (session-status) | Sample |
| CGM Session -> Calculated Session start time | Calculated session start time from app requirements, legacy Aero SysSD req FUN21.2.2.2.3.1 | false | Observation.ext calculated-session-start-time | Sample |
| CGM Session -> SessionStartTime | stores the start of the session for this CGM patch received from the sensor. | false | Observation.effectivePeriod.startTime | Sample |
| CGM Session -> CGM Session Run Time | the time a CGM patch will be able to operate and gather data (in hours) | false | Observation.ext session-run-time | Sample |
| CGM Session -> CGM session end time | the timestamp when the CGM session has ended | false | Observation.effectivePeriod.endTime | Sample |
| CGM Session -> NotificationAlreadyScheduled | This is a boolean to track whether or not the user notifications about the end time of the session have been scheduled already at the OS level. The user gets reminders prior to the session ending as well as one when the session ends. | false | Observation.ext (notification-scheduled-status) | Sample |
| CGM data -> CGM UUID | Unique identifier forthe CGM reading | false | Observation.identifier.value | Sample |
| CGM data -> SessionId | Identifier of the session to which this CGM reading belongs to | false | Observation.related (derived-from) | Sample |
| CGM data -> CGM Glucose Concentration | Continuous Glucose Concentration value in mg/dL | false | Observation.valueQuantity | Sample |
| CGM data -> CGM Trend Information | Continuous Glucose Concentration trend in mg/dL/min | false | Observation.component.valueQuantity | Sample |
| CGM data -> CGM quality | Continuous Glucose Concentration quality in % | false | Observation.component.valueQuantity | Sample |
| CGM data -> Time offset | Time offset in min from the session start | false | Observation.ext - time-offset | Sample |
| CGM data -> timestamp | timestamp of CGM in UTC | false | Observation.effectiveDateTime | Sample |
| CGM data -> Flags | Flags related to the CGM | false | Observation.ext - flags (In case of expanded FHIR, relevant EWM observation is also generated) |
Sample |
| CALIBRATION -> SessionId | ID of a CGM session | false | Observation.related (derived-from) | Sample |
| CALIBRATION -> GlucoseConcentration (BG) | BG value measured by a patient for calibaration | true | Observation.valueQuantity | Sample |
| CALIBRATION -> CalibrationTime | time of the calibration value used to calibrate the CGM patch | false | Observation.effectiveDateTime | Sample |
| CALIBRATION -> CalibrationType | Type of calibaration performed to take sample, type can be: Capillary Plasma, Venous Whole blood, Arterial Whole blood, Arterial Plasma and many others | false | Observation.ext sample-type | Sample |
| CALIBRATION -> CalibrationSampleLocation | Location on which the Calibration Sample is taken, location can be:Finger, Earlobe, Control solution and many others. | false | Observation.bodysite | Sample |
| CALIBRATION -> NextCalibrationTime | information about when the next calibration will be necessary | false | Observation.ext next-calibration-time | Sample |
| CALIBRATION -> CalibrationDataRecordNumber | counter for the calibration data | false | Observation.ext calibration-count | Sample |
| CALIBRATION -> CalibrationStatus | status of the calibration | false | Observation.ext calibration-action | Sample |
| EMWR-> SessionId | Foreign key from SessionInfoDbItem | false | Observation.related (derived-from) | Sample |
| EMWR-> InstanceId | unique identifier for the EMWR item | false | Observation.identifier.value | Sample |
| EMWR-> MessageSource | The origin of the message | false | Observation.device | Sample |
| EMWR-> EventName | This is the name of the EMWR, such as SENSOR_CALIBRATION_NEEDED | false | Observation.valueCodeableConcept | Sample |
| EMWR-> TimeOffsetOccurance | This is the time the EMWR occurred in relation to the CGM session start time | false | Observation.ext time-offset | Sample |
| EMWR-> acknowledged | EMWR acknowledgment. | false | Observation.ext ewm-acknowledged | Sample |
| EMWR-> SnoozeWakeupTime | If the EWMR event is snoozed, this field was the time at which the EMWR would fire again. | false | Observation.ext snooze-wakeup-time | Sample |
| EMWR-> TimeWhenProcessed | Time at which the EMWR was processed by the user | false | Observation.ext time-when-processed | Sample |
| EMWR-> Type | This is the type of EMWR | false | Observation.code | Sample |
| Notes | a notes field where a patient can store additional information along with the log entry | true | Observation.valueString | Sample |
| medianCurrent10pA | Median Filter Current | false | Observation.valueQuantity | Sample |
| stdDevCurrent10pA | Standard Deviation Filter Current | false | Observation.valueQuantity | Sample |
| medianTempExternNTC100mDeg | Confidence has 2 temperature sensors. This is the "external" one measuring the patch cover | false | Observation.valueQuantity | Sample |
| medianTempInternNTC100mDeg | This is the "internal" one measuring the base plate against the human body. | false | Observation.valueQuantity | Sample |
| medianVpolCEWEmV | These are the Median Voltage Counter Electrode Working Electrode CE WE on the sensor component itself. Electrodes are the small surfaces which are inside the human tissue. | false | Observation.valueQuantity | Sample |
| stdDevVpolCEWE100uV | These are the Standard Deviation Voltage Counter Electrode Working Electrode CE WE on the sensor component itself. Electrodes are the small surfaces which are inside the human tissue. | false | Observation.valueQuantity | Sample |
| medianVbat10mVplus1200 | This is the remaining voltage of the battery. | false | Observation.valueQuantity | Sample |
| medianImped1stOhm | Impedance is a value used for safety purpose measured on 3 different point on the Confidence board. | false | Observation.valueQuantity | Sample |
| medianImped2ndOhm | Impedance is a value used for safety purpose measured on 3 different point on the Confidence board. | false | Observation.valueQuantity | Sample |
| medianImped3rdOhm | Impedance is a value used for safety purpose measured on 3 different point on the Confidence board. | false | Observation.valueQuantity | Sample |
| stdDevImped1stOhm | Impedance is a value used for safety purpose measured on 3 different point on the Confidence board. | false | Observation.valueQuantity | Sample |
| medianTempExternNTC100mDeg | Median Temperature External | false | Observation.valueQuantity | Sample |
| medianTempInternNTC100mDeg | Median Temperature Internal | false | Observation.valueQuantity | Sample |
| errorStatus | Signals an error state to be present or absent (1 or 0). | false | Observation.ext.error-status | Sample |
| timestampMinutes | Timestamp in minutes relative to the start of the patch | false | Observation.ext.timestamp-minutes | Sample |
| CRC16 | Integrity value over this data set. | false | Observation.ext.crc | Sample |
| Time Block-> Status | status of time block set to enabled or disabled | false | careplan.ext.careplanTimeblockOptions.ext:TimeblockStatus | Sample |
| Time Block-> Start Time | start time of the time block | false | careplan.ext.careplanTimeblockOptions.ext:startTime | Sample |
| Time Block-> End Time | End time of the time block | false | careplan.ext.careplanTimeblockOptions.ext: endTime | Sample |
| Time Block-> Hyper limit | Hyper limit value for the time block | false | careplan.ext.careplanTimeblockOptions.ext: UpperLimit | Sample |
| Time Block-> Hypo limit | Hypo limit value for the time block | false | careplan.ext.careplanTimeblockOptions.ext: LowerLimit | Sample |
| Time Block-> Urgent Hypo limit | Urgent Hypo limit value for the time block | false | careplan.ext.careplanTimeblockOptions.ext: UrgentLowerLimit | Sample |
| Time Block-> Urgent Hypo Alert | Urgent Hypo Alert status for the time block | false | careplan.ext.careplanTimeblockOptions.ext: UrgentHypoAlert | Sample |
| Time Block-> Hypo Alert | Urgent Hypo limit value for the time block | false | careplan.ext.careplanTimeblockOptions.ext: HypoAlert | Sample |
| Time Block-> Hyper Alert | Urgent Hypo limit value for the time block | false | careplan.ext.careplanTimeblockOptions.ext: HyperAlert | Sample |
| Target ranges-> Lower Target | Lower target range set for Hypoglycemia | false | goal.detailQuantity.value | Sample |
| Target ranges-> Higher Target | Higher target range set for Hyperglycemia | false | goal.detailQuantity.value | Sample |
| Diabetes Type | Diabetes Type of the patient | false | Condition.code.coding | Sample |
| [TBD]Mobile device -> Mobile model | Mobile model number | false | DeviceComponent.productionSpec | Sample |
| Mobile device -> Mobile operating system | Mobile OS version | false | DeviceComponent.productionSpec | Sample |
| CGM Sensor -> Pairing Date | This will same as session start time | false | Observation.effectivePeriod.startTime | Sample |
Reduced Profiles
- Reduced Profiles
- Device Component (CGM Sensor)
- Miscellaneous Observation (CGM Session)
- Vital signs Observation (CGM Measurement data)
- Blood Glucose Observation
- Carbohydrate(nutritional value) Observation
- Medication Adminstration
- Calibration Observation
- EWM Observation
- DM- careplan
- Target ranges careplan
- Goal
- Bolus advice careplan (Time block settings)
Reduced Examples
- Reduced Examples
- CGM Sensor - reduced FHIR
- CGM Session - reduced FHIR
- CGM measurement data - reduced FHIR
- Case 1 - With valid CGM, trend and quality values
- Case 2 - With NaN for CGM value and NULL for trend and quality
- BG data - reduced FHIR
- Carbs data - reduced FHIR
- Insulin data - reduced FHIR
- Calibration BG - reduced FHIR
- EMWR - reduced FHIR
- Notes - reduced FHIR
- DM Careplan - reduced FHIR
- Target settings - reduced FHIR
- Time block settings - reduced FHIR
- Mobile device - reduced FHIR
Edited and Deleted approach
Expanded Examples (relevant for FHIRSTACK Facade)
- Expanded Examples (relevant for FHIRSTACK Facade)
- CGM Sensor - expanded FHIR
- CGM Session - expanded FHIR
- CGM measurement data - expanded FHIR
- Case 1 - With valid CGM, trend and quality values
- Case 2 - With NaN for CGM value and NULL for trend and quality
- CGM flags
- BG data - expanded FHIR
- carbs data - expanded FHIR
- Insulin data - expanded FHIR
- Calibration BG - expanded FHIR
- EMWR - expanded FHIR
- Notes - expanded FHIR
- Default resources to be created
- DM careplan - expanded FHIR
- Target settings - expanded FHIR
- Time block settings - expanded FHIR
- Mobile device - expanded FHIR