Measurement field catalog
measurementFieldCatalog is exported from @ovok/native/bt-management. It is the
canonical field vocabulary used by custom Bluetooth declarations and the optional UI
components. Each field records its unit and decode bounds; some fields also include
adult, resting reference ranges for non-diagnostic UI feedback:
| Field | Unit | Normal range |
|---|---|---|
| Blood pressure systolic | mmHg | 90–120 |
| Blood pressure diastolic | mmHg | 60–80 |
| Heart rate / pulse rate | bpm | 60–100 |
| Body temperature | °C | 36.5–37.3 |
| Blood oxygen | % | 95–100 |
| Respiratory rate | /min | 12–20 |
These are display hints, not diagnostic thresholds. Body weight, blood glucose, perfusion index, and RR interval remain unset because their expected values depend on context such as height, fasting state, device, activity, altitude, or clinical history.
Field shape
interface CatalogField {
unit: string;
min: number;
max: number;
required?: boolean;
display?: string;
normalMin?: number;
normalMax?: number;
}
min and max are protocol/decode bounds. A decoded value outside those bounds
is treated as a malformed reading by declaration validation. required identifies
fields needed for a complete result case. normalMin and normalMax are optional
presentation hints and must not be used as diagnosis or alarm thresholds.
import { MeasurementTypeKey } from "@ovok/core";
import {
measurementFieldCatalog,
} from "@ovok/native/bt-management";
const fields = measurementFieldCatalog[MeasurementTypeKey.bloodPressure];
const systolicUnit = fields?.systolic.unit; // "mmHg"
The catalog includes blood pressure, body weight, temperature, blood glucose, blood oxygen/pulse rate, heart rate, respiratory rate, urine analysis, and uric acid fields. ECG and other multi-notification streams are handled by their protocol implementations rather than a simple declarative field map.
Sources: MedlinePlus vital signs, American Heart Association blood pressure, and FDA pulse oximeter basics.