Product type
Remote patient monitoring software testing
A remote patient monitoring system receives readings continuously from outside the clinic, so a gap in the stream looks the same to the receiver as a patient whose readings are normal. Testing covers what arrives late, twice, out of order or not at all, and what the system does during the silence.
- Speaks
- HL7 v2, FHIR R4
What actually breaks in a remote patient monitoring system?
Nothing arrives, and the screen looks the same. A monitoring product spends most of its life waiting, so its normal state and its failed state render identically: an empty interval on a chart, a dashboard row with no new value, an alert rule that never fires because no reading crossed a threshold.
Every other product class on this site is exercised by someone doing something. A clinician opens a chart, a patient joins a call, a claim is submitted, a file is loaded. A monitoring system is exercised by a device that nobody is watching, in a home nobody has surveyed, over a link the product does not operate. The work arrives on its own or it does not arrive, and the receiving system has the same information in both cases.
The failures that matter come from that asymmetry.
- The stream stops. A hub loses power, a cellular plan lapses, a patient puts the cuff back in a drawer, a paired phone reboots and never pairs again. The receiver has no event for any of it, because an event is something that arrives.
- The stream resumes carrying a backlog. A device that buffered while it was offline uploads a window of readings at once. Whether each one lands at the time it was measured or the time it was received decides what the chart shows for the days nobody could see.
- Readings arrive in the wrong order. Two transports, one of them retrying, and the reading taken second is written first. A tile showing the most recently written value now presents an older measurement as the current one.
- The same reading arrives twice, because a gateway retried after an acknowledgement it never saw. The duplicate moves every value computed across the series.
- The clocks disagree. A device timestamp and a server timestamp are separated by a battery pull, a daylight saving boundary, or an offset that was never sent. The order the system computes is then not the order in which the readings were taken.
- The alert stays quiet on purpose. Suppression rules exist to keep clinicians from drowning in notifications, and the same rules cover the interval where no data existed to notify anyone about.
None of these is a crash, and none produces a stack trace. Each produces a chart that a clinician reads as a description of a patient.
Why does missing data belong in the risk file?
Because a reading that never arrived is a loss the risk standard already covers. ISO 14971 defines harm at clause 3.3 as injury or damage to the health of people, or damage to property or the environment, and its Introduction says the damage to property it means includes objects, data and other equipment. Lost readings are lost data.
That places an entry in the hazard analysis that most software risk files do not carry: the case where the software behaved correctly and received nothing. The usual entries describe something the product did wrongly. This one describes an interval in which the product did nothing at all and reported nothing, and the harm arises from a person acting on the absence as though it were a measurement. How a hazard of that shape reaches a test case, and what the risk file expects back from the run, is set out under ISO 14971 risk management and software testing.
The European route adds a second obligation that reads oddly until you own a monitoring product. Annex I Section 17.4 of the same Regulation requires manufacturers to set out minimum requirements concerning hardware, IT networks characteristics and IT security measures, including protection against unauthorised access, necessary to run the software as intended, and Annex I Section 23.4(ab) puts the same list into the information supplied with the device. For most software the network line is filled in with a shrug. For a product whose clinical function is a continuous feed, it is a written commitment about a connection the manufacturer does not own, and once it is written it is a test matrix: what did you claim the product needs, and what does it do below that.
Classification follows the packaging. Annex VIII implementing rule 3.3 provides that software which drives a device or influences the use of a device shall fall within the same class as the device, and that software independent of any other device shall be classified in its own right. A monitoring platform sold with the patch or the cuff it reads inherits; a platform that ingests readings from whatever the patient already owns is classified on its own terms. Where the answer is the second one, the regime is the one described under testing software that is itself the device. Where the phone is the relay, the hardware carrying your agent belongs to nobody in the regulated chain, which is the subject of testing health apps across real devices and operating system versions.
Which rules reach a monitoring stream?
Four instruments, and the provision most teams read last is the one about availability. 45 CFR 164.306(a)(1) requires a regulated entity to ensure the confidentiality, integrity and availability of all the electronic protected health information it creates, receives, maintains or transmits, and 164.304 makes availability a defined term of the subpart.
| What the product does | Which requirement reaches it |
|---|---|
| Holds readings a clinician relies on being there | 45 CFR 164.306(a)(1), which names availability beside confidentiality and integrity |
| Computes values across a series of readings | 164.312(c)(1) integrity, with the addressable 164.312(c)(2) beneath it |
| Depends on a link and a device it does not operate | 164.308(a)(7) contingency plan, whose (ii)(D) testing and revision procedures is addressable |
| Records who read a value and when | 164.312(b) audit controls, required, with no named event list |
| Is placed on the EU market with a stated operating environment | Annex I Sections 17.1 and 17.4 of Regulation (EU) 2017/745, repeated for the instructions for use at 23.4(ab) |
| Produces a record some other rule already obliges you to keep | 21 CFR 11.10(e), (f) and (h) |
Availability is measured on a service almost everywhere else: the endpoint answered, the page rendered. Here the data whose availability is at stake is data the service never held, so a dashboard of green service checks says nothing about it. The integrity standard covers the other half. section 164.312(c)(1) asks for policies and procedures to protect electronic protected health information from improper alteration or destruction, with no qualifier about who caused it, while the addressable specification beneath it, 164.312(c)(2), asks for electronic mechanisms to corroborate that the information has not been altered or destroyed in an unauthorized manner. A duplicate written by your own gateway is improper without being unauthorized, so it is the standard rather than the specification beneath it that reaches the case. What the Security Rule does and does not oblige a software team to produce is set out under HIPAA testing requirements for software.
One contingency provision is worth naming on its own. section 164.308(a)(7)(ii)(D) covers testing and revision procedures for contingency plans. For a product built around a feed from outside the building, the contingency it points at is the interval in which readings stop reaching your data centre, and that is a state the suite can create on demand and assert against instead of describing in a plan nobody exercises.
Part 11 arrives conditionally and is often either ignored or over-applied. It never decides on its own that a record has to be kept: 21 CFR 11.1(b) applies the part to records maintained under records requirements set out in agency regulations, and FDA's 2003 scope guidance states that records not required to be retained under predicate rules, though kept electronically, are not Part 11 records. Where monitoring data is such a record, for example where the product supplies endpoints in a clinical investigation, three of the 11.10 controls read as though they were drafted for a device stream. 21 CFR 11.10(e) requires secure, computer-generated, time-stamped audit trails that independently record the date and time of operator entries and actions creating, modifying or deleting records, and requires that record changes shall not obscure previously recorded information. section 11.10(f) requires operational system checks to enforce permitted sequencing of steps and events, as appropriate. section 11.10(h) requires device checks to determine, as appropriate, the validity of the source of data input or operational instruction. Sequencing and source validity are exactly the two questions a stream of readings from an unattended device fails on.
A test environment for this class of product holds readings that carry the person they came from, and the interesting defects tend to be the ones that only reproduce against a specific sequence of real arrivals. Whether a captured stream may be replayed at all, and by whom, gets settled before the first replay and not during it. Put that one to us at how we work with protected health information.
How do you drive the states a monitoring system cannot reach on its own?
At the transport, below the interface. A functional suite drives the product through actions a user takes, while the defects in this class come from the absence of an action, from an action that arrives twice, and from two actions arriving in the wrong order. None of the three has a button.
How a monitoring stream is driven
- Stop the stream and hold it stopped past the declared inter-arrival interval. Assert on what the product produces during the silence, before asserting on what it does when data returns.
- Resume with a backlog. Replay a buffered window of readings at once and check where each one lands on the timeline, what the chart shows for the covered days, and whether alert rules evaluate the backfilled values at all.
- Reverse the order. Deliver the later measurement first, then the earlier one, and read every surface that shows a latest value.
- Send the same reading twice with the same device-side identifier, then twice with different identifiers. Read the average, the count, the trend line and any rule counting consecutive readings.
- Move the clocks. Offset the device clock forward and back, strip the zone offset, and cross a daylight saving boundary while readings are in flight.
- Change a threshold while data is in flight, then deliver a reading whose measurement time falls before the change.
- Change the device. Re-pair a replacement unit, reassign a device between two patients, and confirm which readings each of them can now see.
- Read the audit trail after each of the seven runs above, and treat the entry as the assertion.
Steps 1 and 2 find the most, because they are the only two that describe the product in the condition it spends most of its life in. Step 5 is the one teams put off, and it is the one that turns a reproducible defect into an unfalsifiable argument between two engineers holding two different timestamps.
That makes the test record load-bearing here in a way it is not elsewhere. IEC 62304 clause 5.7.5 lists seven things a software system test record has to carry, and gives repeatability as the reason; what those seven are and how a suite emits them is covered with the automation. For a timing defect one of them does the work on its own, and it is the test configuration. A configuration that does not state which clock was offset, by how much, and what delay was injected on which leg cannot be run again, and a timing defect nobody can reproduce is closed as unreproducible.
What happens to a reading when it crosses into the record?
It becomes a message, and the message is where its place in the sequence can be lost. HL7 v2 carries observations in the ORU family, whose chapter describes the transaction set as sending structured patient-oriented clinical data from one system to another, with one OBX segment for each component of a report. FHIR R4 carries the same content as Observation.
The identifier problem comes first. MSH-10, the Message Control ID, contains a number or other identifier that uniquely identifies the message, and the receiving system echoes it back in the MSA segment of the acknowledgement. That is a message identity, so a device gateway that resends a buffered reading in a fresh message produces a new control ID for an observation the receiver already holds. Deduplication keyed on MSH-10 removes replayed messages and leaves replayed readings, which is the shape of the duplicate that survives into a computed average.
Then the acknowledgement itself, because a retry policy is only as good as the signal it retries on. HL7 v2 defines two acknowledgement modes. Under the original processing rules the responder returns MSA-1 of AA on success, AE on an error response, and AR where it rejects the message for reasons unrelated to content or format. Enhanced mode adds an accept layer with CA, CE and CR, and MSH-15 and MSH-16 carry the conditions under which each is required, taking their values from a table of four codes: AL always, NE never, ER on error and reject conditions only, and SU on successful completion only. A gateway pointed at a receiver configured NE for accept acknowledgement never receives a commit signal, so every retry it performs is fired on a timeout it invented for itself. Since version 2.9 the acknowledgement choreography is documented per trigger event, which turns that question from a site negotiation into something a profile can be tested against. The rest of the profile mechanics are in HL7 v2 conformance testing requirements.
On the FHIR side, Observation is one of the eleven resources in R4 carrying the Normative marker, out of 145, so the definition itself is stable and the uncertainty sits in what a server does with it. Two conformance properties decide how absence is handled. Is-Modifier marks an element that cannot be safely ignored because its value, or its meaning if missing, may cause the interpretation of the containing element to stop conforming to the stated definition; the specification writes the meaning of a missing value into the conformance model, and a receiving system that drops such an element while moving data has changed what the data says. Cardinality is the second, and the specification is direct about its limits: setting an element to a minimum cardinality of 1 does not ensure that valid data will be present, and specific FHIRPath constraints are required to ensure that the required data will be present. A profile that raises a timestamp element to 1..1 has therefore bought less than the number suggests.
Where a reading is taken during a live consultation instead of arriving on its own, it belongs to the session that carried it, and the session is a different test object with its own failure modes: telemedicine app testing covers those.
Where does remote patient monitoring testing go wrong?
- No expected inter-arrival interval is written down for any device class, so there is no requirement for gap detection to fail against, and the first measurement of the gap is taken during the incident review.
- The suite asserts on readings that arrive and never on the interval in which none did, which leaves the product's most common state untested.
- Backfilled readings are stored at their receipt time, so a week of buffered data appears as a spike on the day the device came back.
- Alert rules are exercised on live data only, and nobody has decided what a rule should do with a value whose measurement time is six hours old.
- Duplicate suppression is keyed on the message identifier rather than on the observation, so a resent reading passes as new.
- The retry policy assumes an acknowledgement the receiver was configured never to send.
- Device clocks are trusted because they were correct on the bench, and no run crosses a daylight saving boundary or a battery pull.
- Suppression rules are tested for the alerts they prevent and never for the alerts they hide, so the interval with no data is silent for the same reason a healthy interval is.
- The audit trail records that a clinician opened the dashboard and not which values were on it at that moment, which leaves 164.312(b) answered for the application and not for the reading.
- Timing defects are recorded without the clock offsets and injected delays that produced them, so nothing in the record satisfies the configuration item IEC 62304 clause 5.7.5 asks for, and the defect closes as unreproducible.
What do we run against a remote patient monitoring system?
The first artefact is an arrival model: which devices report, how often each of them is expected to, what carries the reading from the device to you, and what the product is supposed to do at the moment an expectation is missed. Teams rarely have it written down, and every case that follows is an assertion against a number in it, so it is produced before any run is designed.
From there the suite is built at the transport, since none of the interesting states can be reached through the interface. Streams are stopped and held, resumed with a backlog, reordered, duplicated and re-clocked, and each run ends on two reads: the clinical surface a user would look at, and the audit entry the run should have produced. Interface work against the receiving system is scoped separately, and its assertions end at the value on the chart, because an accepted message and a stored reading are two different events.
What that produces is a record that survives being questioned: a run per condition, each carrying the software version, the test configuration with its clock offsets and injected delays, the tools, the date and the person responsible, in the seven-item form IEC 62304 clause 5.7.5 sets out. Whether the residual risk that leaves is acceptable is a decision for the organisation placing the product on the market, and so is the compliance position built on top of it. Testing supplies the runs those two decisions are argued from.
What do buyers ask about this?
- How do you write a test for a reading that never arrives?
- By making the expected interval a requirement first. Absence produces no message, so nothing in the product can assert on it until somebody has written down how long a device of a given class may stay quiet before the quiet itself is an event. Once that number exists, the test is ordinary: stop the stream, hold it past the interval, and assert that the system emitted the timeout event, raised whatever the requirement says it raises, and recorded both. Without the number there is nothing to fail against, which is why gap detection is usually found missing during the incident rather than during the release.
- Should a reading that arrives six hours late fire the alert it would have fired?
- That is a product decision, and testing does not make it. What testing does is force the decision to be written down before the code assumes one. A backfilled window can be evaluated against the thresholds in force when the reading was taken, against the thresholds in force now, or not at all, and each choice produces a different clinical record for the same data. Once the choice is recorded, the run is a fixed one: replay a buffered window, then read the alerts, the chart and the audit trail.
- Does the HIPAA Security Rule say anything about data that stops arriving?
- It names availability rather than continuity. 45 CFR 164.306(a)(1) requires a regulated entity to ensure the confidentiality, integrity and availability of all the electronic protected health information it creates, receives, maintains or transmits, and 164.304 makes availability a defined term of the subpart. The nearest thing to a testing obligation is 164.308(a)(7)(ii)(D), testing and revision procedures for contingency plans, and it is addressable, so what you do about it is your own written decision.
- Our gateway retries on timeout. Why is that a test case?
- Because a retry after an acknowledgement that was lost in transit produces a second copy of a reading that was already stored. In HL7 v2 the identifier the receiver echoes back is MSH-10, which uniquely identifies the message, so the same observation resent in a new message carries a new control ID and passes a duplicate check keyed on that field. Every value computed across the series then moves: the average, the count, the trend, and any rule of the form three consecutive readings above a threshold.
Which standards does this touch?
Which of our services test it?
Is this the situation you are in?
How is the work done in practice?
What does validating your product actually involve?
Answer four questions about your markets, your product type and its integrations. You get the standards that reach you, the artefacts each one asks you to produce, and which of them a test supplier delivers.