[MED-003] Standard Ebook | Chapter 4 (of 8)

Chapter 4: Phase 1 - Signal Format Standard

4.1 Common Metadata

{
  "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": { ... }
}

4.2 ECG Signal Format

{
  "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": []
  }
}

4.3 SpO2 Signal Format

{
  "signalType": "SPO2",
  "measurement": {
    "spo2": 98,
    "pulseRate": 72,
    "perfusionIndex": 5.2
  },
  "waveform": {
    "ppg": {
      "red": [...],
      "infrared": [...],
      "samplingRate": 125
    }
  }
}

4.4 Blood Pressure Format

{
  "signalType": "BLOOD_PRESSURE",
  "measurement": {
    "systolic": 120,
    "diastolic": 80,
    "mean": 93,
    "pulseRate": 72
  },
  "measurementMethod": {
    "type": "oscillometric",
    "bodyPosition": "seated"
  }
}

4.5 HRV Format

{
  "signalType": "HRV",
  "rrIntervals": [800, 820, 810, ...],
  "timeDomain": {
    "sdnn": 50,
    "rmssd": 42,
    "pnn50": 15.2
  },
  "frequencyDomain": {
    "lf": 450,
    "hf": 350,
    "lfHfRatio": 1.29
  }
}

4.6 Frame Envelope (canonical)

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..." }
}

4.7 Channel Descriptor

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..." }
}

4.8 Reserved Channels

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.

4.9 Encoding Rules

4.10 Conformance

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.