[MED-003] Standard Ebook | Chapter 4 (of 8)
{
"standard": "WIA-MED-003",
"version": "1.0.0",
"signalType": "ECG|SPO2|BP|HRV|TEMP|RESP",
"deviceId": "unique-device-id",
"timestamp": "2025-01-15T10:30:00.000Z",
"data": { ... }
}
{
"signalType": "ECG",
"sampling": {
"rate": 512,
"duration": 10
},
"leads": [
{
"name": "Lead I",
"data": [0.05, 0.12, ...],
"unit": "mV"
}
],
"analysis": {
"heartRate": 72,
"rhythm": "Sinus Rhythm",
"abnormalities": []
}
}
{
"signalType": "SPO2",
"measurement": {
"spo2": 98,
"pulseRate": 72,
"perfusionIndex": 5.2
},
"waveform": {
"ppg": {
"red": [...],
"infrared": [...],
"samplingRate": 125
}
}
}
{
"signalType": "BLOOD_PRESSURE",
"measurement": {
"systolic": 120,
"diastolic": 80,
"mean": 93,
"pulseRate": 72
},
"measurementMethod": {
"type": "oscillometric",
"bodyPosition": "seated"
}
}
{
"signalType": "HRV",
"rrIntervals": [800, 820, 810, ...],
"timeDomain": {
"sdnn": 50,
"rmssd": 42,
"pnn50": 15.2
},
"frequencyDomain": {
"lf": 450,
"hf": 350,
"lfHfRatio": 1.29
}
}
The Phase 1 specification fixes a single canonical frame envelope that wraps any vital signal type. Each frame is the unit of streaming, signing, and replay defence. Required fields: wia_vital_sign_streaming_version, type, stream_id, patient_id, channel, sample_rate_hz, captured_at, samples, encoding, signature. Optional fields include calibration, lead_id, frame_seq, qos, and compression.
{
"wia_vital_sign_streaming_version": "1.0.0",
"type": "frame",
"stream_id": "stream-icu-A-bed-7-ecg",
"patient_id": "did:wia:patient:01HXY",
"channel": "ecg",
"lead_id": "II",
"sample_rate_hz": 500,
"captured_at": "2026-04-27T10:00:00.000Z",
"encoding": "int16",
"calibration": { "lsb": 0.000244, "offset": 0, "unit": "mV" },
"frame_seq": 12483017,
"qos": "assured",
"samples": [3, 4, 5, 4, 3, 2, 1, 0, -1, -2, -1, 0, 1, 2, 3, 4],
"signature": { "alg": "Ed25519", "value": "AY3o..." }
}
For high-rate streams the producer MAY publish a one-shot channel descriptor that the receiver caches; subsequent frames omit the descriptor's fields and inherit them. This optimisation matters for ECG and EEG streams where per-frame metadata overhead would otherwise dominate the wire bandwidth.
{
"wia_vital_sign_streaming_version": "1.0.0",
"type": "channel_descriptor",
"stream_id": "stream-icu-A-bed-7-ecg",
"channel": "ecg",
"default_calibration": { "lsb": 0.000244, "offset": 0, "unit": "mV" },
"default_encoding": "int16",
"default_lead_id": "II",
"issued_at": "2026-04-27T08:00:00Z",
"valid_until": "2026-04-27T20:00:00Z",
"signature": { "alg": "Ed25519", "value": "Bz9A..." }
}
The canonical channel registry includes ecg, ppg, eeg, emg, spo2, hr, sbp, dbp, map, temp, rr, and etco2. Implementations MUST treat unknown channels as unrecognised rather than fail the frame. Future minor versions add channels but never remove them.
snake_case keys.Z suffix; ECG and other ≥ 100 Hz channels MUST encode millisecond precision.A Phase 1 conformant implementation MUST emit and accept the frame envelope above with all required fields, honour the channel descriptor inheritance rules, round-trip every frame byte-identically through encode/decode when no normalisation is requested, reject frames that violate the JSON Schema, and treat unknown optional fields as non-fatal extensions.