How device data capture works, from the edge agent to the EHR

Kymolog has four components: the edge agent, the hub, the FHIR store and the research store. This page follows a glucose reading of 132 mg/dL through each of them and into your EHR.

Four components and your EHR · LOINC and UCUM at the edge · on premises or in a cloud

Fig. 1. The five parts of an on-premises install, numbered in the order a reading passes through them.

Components between the device and the EHR

A reading passes through four Kymolog™ components and your EHR, in the order the drawing numbers them. The edge agent and the hub carry no patient details. The patient is attached at the third, the FHIR store. It keeps each reading as a Fast Healthcare Interoperability Resources (FHIR) R4 record and sends it two ways: to the EHR and to the research store.

The five parts a reading passes throughA bedside CGM reports a reading of 132 mg/dL at 08:02. (1) The edge agent next to the device codes it as a FHIR R4 Observation with LOINC and UCUM and no patient data. (2) The hub checks the agent and forwards the reading, storing nothing. (3) The FHIR store keeps the record and matches the patient by bed. From there the same record goes to (4) the EHR, over FHIR R4 or HL7 v2, where it shows in the chart like a lab result, and to (5) the research store, kept for studies.BEDSIDE DEVICE132 mg/dLCGM at 08:021Edge agentcodes eachreading asFHIR R4, withLOINC and UCUM2Hubchecks the agentand forwards;stores nothing3FHIR storekeeps the recordand matches thepatient by bed4EHRshows the resultin the chart,like a lab result5Research storekeeps the samecoded recordfor studiessame recordFHIR R4 or HL7 v2The device side carries a device id only.The patient is matched at the FHIR store (3).
The five parts a reading passes throughA bedside CGM reports a reading of 132 mg/dL at 08:02. (1) The edge agent next to the device codes it as a FHIR R4 Observation with LOINC and UCUM and no patient data. (2) The hub checks the agent and forwards the reading, storing nothing. (3) The FHIR store keeps the record and matches the patient by bed. From there the same record goes to (4) the EHR, over FHIR R4 or HL7 v2, where it shows in the chart like a lab result, and to (5) the research store, kept for studies.BEDSIDE DEVICE132 mg/dLCGM at 08:021Edge agentcodes each reading as FHIRR4, with LOINC and UCUM2Hubchecks the agent andforwards; stores nothing3FHIR storekeeps the record andmatches the patient by bed4EHRshows theresult in thechart, like alab result5Research storekeeps the samecoded recordfor studiesThe device side carries a device id only.The patient is matched at the FHIR store (3).
Figure 2 as a table
PartWhat it does with the reading
1. Edge agentReads the device and codes each reading as a FHIR R4 Observation with LOINC and UCUM; no patient data
2. HubChecks the agent and forwards the reading; stores nothing
3. FHIR storeKeeps the record and matches the patient by bed
4. EHRReceives the result over FHIR R4 or HL7 v2; it shows in the chart like a lab result
5. Research storeKeeps the same coded record for studies
Fig. 2. The five parts, numbered as in Fig. 1: four Kymolog components and your EHR. The edge agent codes the reading; the hub only forwards it; the FHIR store matches the patient and sends one record two ways, to the chart and to the study.

Device data capture at the edge agent

The agent runs on the same network segment as the devices. It reads each device through that device's own interface: lines on a serial port for most, and an HTTPS listener for devices that push their results.

The device-to-FHIR conversion happens here and nowhere else. Each value becomes a FHIR R4 Observation that names its device and carries no patient. The agent also reports the device's health, such as battery, signal and uptime.

The hub forwards readings without storing them

Every agent connects to the hub over TLS and proves its identity with a signed token that works once; only then does the hub take its readings. The hub acknowledges each reading it receives, and the agent resends any reading until it is acknowledged; the hub drops the duplicates. It passes readings to the FHIR store and keeps no database of its own.

The FHIR store attaches the patient

At the FHIR store, automation finds the device's bed, asks the EHR who was in it at that moment, and links the patient and encounter to the reading.

The same automation sets the reading to final when its device type is on auto-send, and to preliminary when the type is on review. A change to the record adds a version rather than overwriting one. See bed matching on a hospital ward.

Device data to EHR, and the same record to research

Final readings go to the EHR over FHIR R4 or as HL7 v2 results, and appear among the chart's results the way a lab value does. The research store keeps the same coded record for studies, linked to the same encounter. A study dataset and the chart then hold the same values. For research on the rest of the patient record, such as diagnoses, labs and medications, we built Clinical Extract.

Device data normalization, field by field

A continuous glucose monitor (CGM) writes one line per reading: the time, the word glucose, 132 and mg/dL. A metadata line before it names the sensor as device 7f3a. The agent maps each field to a standard code once, at capture.

The measure becomes LOINC 99504-3, Glucose [Mass/volume] in Interstitial fluid, and the unit becomes the UCUM code mg/dL. The local time becomes an ISO 8601 timestamp with its UTC offset, and the device id a reference to the Device record. The EHR and the research store read the same code and unit, so no system downstream recodes them.

One CGM reading, normalized to LOINC and UCUMThe CGM writes one line per reading: 08:02:00, glucose, 132, mg/dL, after a metadata line naming device 7f3a. The edge agent codes each field. The measure name glucose becomes LOINC 99504-3, Glucose [Mass/volume] in Interstitial fluid, in the Observation’s code. The value 132, in red, stays a number in valueQuantity.value. The unit mg/dL becomes the UCUM code mg/dL, with the system http://unitsofmeasure.org. The time 08:02:00 becomes effectiveDateTime 2026-10-03T08:02:00-04:00. The device id 7f3a becomes the reference Device/7f3a.DEVICE OUTPUT, ONE LINE PER READINGM:{"id":"7f3a","type":"cgm"}08:02:00,glucose,132,mg/dLthe edge agent parses the line and codes each fieldFROM THE DEVICECODED ASOBSERVATION FIELDglucoseLOINC 99504-3Glucose [Mass/volume]in Interstitial fluidcode.coding132132a number, not textvalueQuantity.valuemg/dLUCUM mg/dLsystem unitsofmeasure.orgvalueQuantity.code08:02:002026-10-03T08:02:00-04:00date, time and zoneeffectiveDateTime7f3aDevice/7f3athe device that sent itdevice
One CGM reading, normalized to LOINC and UCUMThe CGM writes one line per reading: 08:02:00, glucose, 132, mg/dL, after a metadata line naming device 7f3a. The edge agent codes each field. The measure name glucose becomes LOINC 99504-3, Glucose [Mass/volume] in Interstitial fluid, in the Observation’s code. The value 132, in red, stays a number in valueQuantity.value. The unit mg/dL becomes the UCUM code mg/dL, with the system http://unitsofmeasure.org. The time 08:02:00 becomes effectiveDateTime 2026-10-03T08:02:00-04:00. The device id 7f3a becomes the reference Device/7f3a.DEVICE OUTPUT, ONE LINE PER READINGM:{"id":"7f3a","type":"cgm"}08:02:00,glucose,132,mg/dLthe edge agent parses theline and codes each fieldglucoseLOINC 99504-3Glucose [Mass/volume]in Interstitial fluidfield code.coding132132a number, not textfield valueQuantity.valuemg/dLUCUM mg/dLsystem unitsofmeasure.orgfield valueQuantity.code08:02:002026-10-03T08:02:00-04:00date, time and zonefield effectiveDateTime7f3aDevice/7f3athe device that sent itfield device
Figure 3 as a table
Device fieldCoded asIn the Observation
glucoseLOINC 99504-3, Glucose [Mass/volume] in Interstitial fluidcode.coding
132132 (a number)valueQuantity.value
mg/dLUCUM mg/dLvalueQuantity.code
08:02:002026-10-03T08:02:00-04:00effectiveDateTime
7f3aDevice/7f3adevice
Fig. 3. Normalization at the edge: the device’s own words for the measure, the unit and the time become LOINC 99504-3, UCUM mg/dL and an ISO timestamp, so every system downstream reads the reading the same way.

LOINC device mapping from a manifest

Each device type has a manifest that maps its fields to LOINC codes and UCUM units, with normal ranges and any panel structure. Onboarding a new device type means writing its manifest. That takes 2–4 hours for a simple device, and 4–8 for a panel such as blood pressure.

Where the install runs, and where the research store sits

The edge agent always sits beside the devices, and your EHR remains the hospital's own system. The hub and the FHIR store run on your own servers or in your own private cloud, or in a device maker's cloud when the maker runs them for you; patient data then travels to that cloud, and results come back to your EHR. The agents and the hub hold device ids and values only. The patient is attached at the FHIR store, which feeds your EHR.

The research store sits inside the same boundary, or in our cloud. Any reading bound for our cloud is de-identified first, inside the boundary, so a hosted research store never holds identified data. Sites that join the data network, a separate add-on service we run, send it consented, de-identified readings the same way. More on the install's security model.

The deployment boundaryThree dashed boundaries. The hospital holds the bedside device, the edge agent, part 1, and your EHR, part 4: these are at the hospital in every deployment. Below it, the install’s back end holds the hub, part 2, the FHIR store, part 3, which matches the patient by bed, the research store, part 5, when it is kept beside the install, and a de-identify step that applies an allowlist. The back end runs on the hospital’s premises, in its private cloud, or in a device maker’s cloud. An arrow crosses from the edge agent down to the hub, carrying a device id and no patient data; a two-way arrow joins the FHIR store and the EHR, carrying patient data. Under the back end is Saga’s cloud, holding the research store when Saga hosts it and the optional data network. Dashed lines run to both from the de-identify step: de-identified readings only.THE HOSPITAL1Edge agentcodes thereading4Your EHRone of the sevenwe deliver toAlways at the hospital,whoever runs the back end.2Hubforwards it3FHIR storematches thepatient by bedDe-identifyallowlist, tokens,shifted dates5Research storebeside theinstall: thesame record,for studiesOn the hospital’s premises,in its private cloud, orin a device maker’s cloud.THE INSTALL’S BACK ENDa device id,no patient datapatient data: bed look-upsin, results to the chartSAGA’S CLOUD5Research storehosted by Saga:de-identifiedreadings onlyData networkoptional add-on:licensing, royaltiesde-identifiedreadings only
The deployment boundaryThree dashed boundaries. The hospital holds the bedside device, the edge agent, part 1, and your EHR, part 4: these are at the hospital in every deployment. Below it, the install’s back end holds the hub, part 2, the FHIR store, part 3, which matches the patient by bed, the research store, part 5, when it is kept beside the install, and a de-identify step that applies an allowlist. The back end runs on the hospital’s premises, in its private cloud, or in a device maker’s cloud. An arrow crosses from the edge agent down to the hub, carrying a device id and no patient data; a two-way arrow joins the FHIR store and the EHR, carrying patient data. Under the back end is Saga’s cloud, holding the research store when Saga hosts it and the optional data network. Dashed lines run to both from the de-identify step: de-identified readings only.THE HOSPITAL1Edge agentcodes thereading4Your EHRone of theseven wedeliver toAlways at thehospital.3FHIR storematches thepatient by bed2Hubforwards it5Researchstorebeside theinstall: thesame record,for studiesDe-identifyallowlist, tokens,shifted datesOn the hospital’s premises,in its private cloud, orin a device maker’s cloud.THE INSTALL’S BACK ENDa device id,no patient datapatientdataSAGA’S CLOUD5Research storehosted by Saga:de-identifiedreadings onlyData networkoptional add-on:licensing,royaltiesde-identifiedreadings only
Figure 4 as a table
WhereWhat runs therePatient data
The hospital, in every deploymentBedside device, edge agent (1), your EHR (4)A device id only at the agent; the chart in the EHR
The back end: the hospital’s premises or private cloud, or a device maker’s cloudHub (2), FHIR store (3), research store kept beside it (5), de-identify (allowlist, tokens, shifted dates)Matched by bed at the FHIR store; the hub carries a device id only
Saga’s cloudResearch store hosted by Saga (5); data network (optional add-on)De-identified readings only
Fig. 4. The device, the edge agent and your EHR are always at the hospital. The back end runs on its premises, in its private cloud, or in a device maker’s cloud; when a maker runs it, patient data travels between the hospital and the maker’s cloud. De-identification happens in the back end, so only de-identified readings reach Saga.

Ask for a walkthrough with your devices

Tell us one device class and the EHR it should reach. The demo runs a reading from that class through all five parts, into a test chart and the research store. We reply within one business day with times to talk.

Request a demo