[MED-003] Standard Ebook | Chapter 6 (of 8)
Service UUID: 00001820-0000-1000-8000-00805f9b34fb
Characteristics:
// TLS Socket Connection
const client = tls.connect(8883, deviceIP, {
ca: [caCertificate],
checkServerIdentity: verifyDeviceCertificate
});
client.on('data', (packet) => {
const data = decodeWIA(packet);
processVitalSignData(data);
});
Topic Structure:
wia-med-003/
├─ {deviceId}/
│ ├─ data/ecg
│ ├─ data/spo2
│ ├─ alerts
│ └─ control
└─ broadcast/discovery
const ws = new WebSocket('wss://api.example.com/stream');
ws.onopen = () => {
ws.send(JSON.stringify({
command: 'start',
signalType: 'ECG'
}));
};
ws.onmessage = (event) => {
const data = JSON.parse(event.data);
updateECGChart(data);
};
| Protocol | Best For | Pros | Cons |
|---|---|---|---|
| BLE | Wearables | Low power | Limited range |
| WiFi/TCP | Home devices | High bandwidth | Higher power |
| MQTT | IoT devices | Lightweight | Needs broker |
| WebSocket | Web apps | Browser support | Firewall issues |
Multiple WIA Vital Sign Streaming hosts (a hospital ICU, an ambulance, a remote monitoring service) federate so a patient's signal can follow the patient across care boundaries without re-instrumentation. The roles and handshake state machine are defined in the Phase 3 specification; this chapter walks through how those mechanics surface to integrators.
{
"wia_vital_sign_streaming_version": "1.0.0",
"type": "patient_consent",
"patient_id": "did:wia:patient:01HXY",
"custodian_id": "did:wia:custodian:hospital-A",
"scope": ["icu", "remote_monitoring"],
"valid_from": "2026-04-27T00:00:00Z",
"valid_until": "2026-05-27T00:00:00Z",
"consent_artefact_url": "https://omni.example/consent/01HXY/2026-04-27.pdf",
"signature": { "alg": "Ed25519", "value": "AY3o..." }
}
Producers and consumers MUST refuse subscription requests whose patient identifier lacks an active consent envelope from the custodian, except in declared emergency scope (scope = ["emergency"]) which auto-expires after 24 hours and triggers a mandatory custodian review.
Each signed envelope (frame, descriptor, alert, subscribe, replay request) carries a 96-bit nonce and an RFC 3339 timestamp. Receivers MUST reject envelopes with skew > ±300 s, reject envelopes whose (signer, nonce) tuple has been seen within the last 600 s, and maintain the seen-nonce cache for at least 600 s. For high-rate frame streams the cache MAY be a Bloom filter; false positives MUST trigger a replay-segment fetch rather than a silent drop.
| Audience | Visibility |
|---|---|
clinician | full waveform + identifying metadata |
nurse_station | full waveform, redacted identifier |
ehr_bridge | summary samples (per-minute aggregates) |
research | de-identified waveform per HIPAA Safe Harbor §164.514(b)(2) |
family | snapshot only (most recent value per channel) |
emergency_service | full waveform + identifying metadata under emergency consent |