Skip to main content

Healthcare — medical-device fleet

The problem. A hospital runs thousands of connected devices — infusion pumps, ventilators, monitors — and two things must never slip: a critical device must be available when a clinician reaches for it, and when a recall or fault pattern hits a device model, every affected unit must be found and pulled today, before it reaches a patient. Tracking that across wards by spreadsheet is how units get missed.

What we solve here is device availability and fast, complete recall tracing.

Set up demo data​

New workspace? Run this once (Python) to create three pumps of the same model in a ward — so the recall walk in step 2 returns the full pull list. Safe to re-run.

import intellistream_datahub_sdk

client = intellistream_datahub_sdk.DataHubClient.from_env()

nodes = [intellistream_datahub_sdk.Resource(external_id="model_acme_x200", name="Acme X200 infusion pump", labels=["PumpModel"]),
intellistream_datahub_sdk.Resource(external_id="ward_icu", name="Intensive care", labels=["Ward"])]
edges = []
for u in ["3391", "3392", "3401"]:
nodes.append(intellistream_datahub_sdk.Resource(external_id=f"pump_icu_{u}", name=f"Infusion pump {u}", labels=["Pump"]))
edges += [intellistream_datahub_sdk.RelForm.by_external_ids(f"pump_icu_{u}", "ward_icu", "located_in"),
intellistream_datahub_sdk.RelForm.by_external_ids(f"pump_icu_{u}", "model_acme_x200", "is_model")]
client.resources.create(nodes, edges)

1. Model the fleet and watch availability​

A hospital contains wards, a ward contains devices, and each device is a model. Device status is a series; a unit that faults or drops offline raises a device_down event for biomedical engineering.

ResourceForm pump = new ResourceForm();
pump.setExternalId("pump_icu_3391");
pump.setName("Infusion pump 3391");
pump.setLabels(List.of("Pump"));

RelForm inWard = new RelForm();
inWard.setName("located_in");
inWard.setFromExternalId("pump_icu_3391");
inWard.setToExternalId("ward_icu");

RelForm isModel = new RelForm();
isModel.setName("is_model");
isModel.setFromExternalId("pump_icu_3391");
isModel.setToExternalId("model_acme_x200");

client.resources().create(List.of(pump), List.of(inWard, isModel));

2. A recall lands — find every affected unit​

When model_acme_x200 is recalled, walk the graph out from the model node: every device that is_model of it, and the ward each sits in, is the exact pull list. This is the blast-radius traversal — the same shape as an aerospace part recall, applied to hospital equipment.

ResourceNetwork affected = client.resources().fetchRelated("model_acme_x200", 3);

affected.nodes().stream()
.filter(n -> n.getExternalId().startsWith("pump_"))
.forEach(d -> System.out.println("pull from service: " + d.getExternalId()));

3. Predict failures before they strand a clinician​

Pump and battery health are series; rolling them up surfaces units trending toward failure for planned swap-out — and the XGBoost failure predictor does it properly.

See the result​

The recall walk returns every unit of the model to pull:

pull from service: pump_icu_3391
pull from service: pump_icu_3392
pull from service: pump_icu_3401

See also​