---
title: "pulse_oximetry"
description: "Blood oxygen and related measurements, measured by pulse oximetry or pulse CO-oximetry."
---

Blood oxygen and related measurements, measured by pulse oximetry or pulse CO-oximetry.

**Purpose.** To record blood oxygen and related measurements, measured by pulse oximetry or pulse CO-oximetry.

## Source

| Model | Leg | Role |
|---|---|---|
| `openEHR-EHR-OBSERVATION.pulse_oximetry.v1` | openEHR | defines this table |

## Columns

| Column | Type | Null | Description | Source |
|---|---|---|---|---|
| `id` | `uuid primary key` | no | Primary key. | — |
| `form_id` | `uuid` → [`form`](/docs/tables/form) | no | The form this entry was recorded on. | — |
| `form_block_id` | `uuid` | yes | The block within the form, when the entry is bound to one. | — |
| `sp_o2_numerator`<br />`sp_o2_denominator` | numeric, numeric<br />`numeric`, `numeric` | yes | SpO₂ | `/data[at0001]/events[at0002]/data[at0003]/items[at0006]` |
| `sp_oc_magnitude`<br />`sp_oc_units` | quantity<br />`numeric`, `text` | yes | SpOC | `/data[at0001]/events[at0002]/data[at0003]/items[at0044]` |
| `sp_co_numerator`<br />`sp_co_denominator` | numeric, numeric<br />`numeric`, `numeric` | yes | SpCO | `/data[at0001]/events[at0002]/data[at0003]/items[at0045]` |
| `sp_met_numerator`<br />`sp_met_denominator` | numeric, numeric<br />`numeric`, `numeric` | yes | SpMet | `/data[at0001]/events[at0002]/data[at0003]/items[at0046]` |
| `interpretation`<br />`interpretation_code`<br />`interpretation_system`<br />`interpretation_valueset_id` | coded text<br />`text`, `text`, `text`, `text` | yes | Interpretation | `/data[at0001]/events[at0002]/data[at0003]/items[at0058]` |
| `comment` | `text` | yes | Comment | `/data[at0001]/events[at0002]/data[at0003]/items[at0036]` |
| `inspired_oxygen` | `uuid` | yes | Inspired oxygen | `/data[at0001]/events[at0002]/state[at0014]/items[at0015]` |
| `confounding_factors` | `text` | yes | Confounding factors | `/data[at0001]/events[at0002]/state[at0014]/items[at0016]` |
| `sensor_site`<br />`sensor_site_code`<br />`sensor_site_system`<br />`sensor_site_valueset_id` | coded text<br />`text`, `text`, `text`, `text` | yes | Sensor site | `/protocol[at0007]/items[at0009]` |
| `pre_post_ductal`<br />`pre_post_ductal_code`<br />`pre_post_ductal_system`<br />`pre_post_ductal_valueset_id` | coded text<br />`text`, `text`, `text`, `text` | yes | Pre/post-ductal | `/protocol[at0007]/items[at0061]` |
| `oximetry_device` | `uuid` | yes | Oximetry device | `/protocol[at0007]/items[at0018]` |

## Constraints

```sql
check ((sp_o2_numerator is null and sp_o2_denominator is null) or (sp_o2_numerator is not null and sp_o2_denominator is not null))
check (sp_o2_denominator is null or sp_o2_denominator <> 0)
check (sp_o2_denominator is null or sp_o2_denominator = 100)
check (sp_o2_numerator is null or sp_o2_numerator between 0 and 100)
check ((sp_oc_magnitude is null and sp_oc_units is null) or (sp_oc_magnitude is not null and sp_oc_units is not null))
check (sp_oc_magnitude is null or (sp_oc_units = 'ml/dl' and sp_oc_magnitude >= 0))
check ((sp_co_numerator is null and sp_co_denominator is null) or (sp_co_numerator is not null and sp_co_denominator is not null))
check (sp_co_denominator is null or sp_co_denominator <> 0)
check (sp_co_denominator is null or sp_co_denominator = 100)
check (sp_co_numerator is null or sp_co_numerator between 0 and 100)
check ((sp_met_numerator is null and sp_met_denominator is null) or (sp_met_numerator is not null and sp_met_denominator is not null))
check (sp_met_denominator is null or sp_met_denominator <> 0)
check (sp_met_denominator is null or sp_met_denominator = 100)
check (sp_met_numerator is null or sp_met_numerator between 0 and 100)
check ((interpretation_code is null and interpretation_system is null and interpretation_valueset_id is null) or (interpretation is not null and interpretation_code is not null and interpretation_system is not null and interpretation_valueset_id is not null))
check ((sensor_site_code is null and sensor_site_system is null and sensor_site_valueset_id is null) or (sensor_site is not null and sensor_site_code is not null and sensor_site_system is not null and sensor_site_valueset_id is not null))
check ((pre_post_ductal_code is null and pre_post_ductal_system is null and pre_post_ductal_valueset_id is null and pre_post_ductal is null) or (pre_post_ductal is not null and pre_post_ductal_code is not null and pre_post_ductal_system is not null and pre_post_ductal_valueset_id is not null))
```

## Unique

- `form_block_id`

## References

| Columns | Target | On delete |
|---|---|---|
| `form_id` | [`form`](/docs/tables/form) | cascade |
| `form_id, form_block_id` | [`form_block`](/docs/tables/form_block) | cascade |
| `interpretation_valueset_id, interpretation_code, interpretation_system, interpretation` | [`valueset_code`](/docs/tables/valueset_code) | restrict |
| `sensor_site_valueset_id, sensor_site_code, sensor_site_system, sensor_site` | [`valueset_code`](/docs/tables/valueset_code) | restrict |
| `pre_post_ductal_valueset_id, pre_post_ductal_code, pre_post_ductal_system, pre_post_ductal` | [`valueset_code`](/docs/tables/valueset_code) | restrict |
| `inspired_oxygen` | [`inspired_oxygen`](/docs/tables/inspired_oxygen) | no action |
| `oximetry_device` | [`device`](/docs/tables/device) | no action |

## Referenced by

- [`pulse_oximetry_multimedia_image`](/docs/tables/pulse_oximetry_multimedia_image) via `pulse_oximetry_id`

## Indexes

- `pulse_oximetry_form_id_idx` on `form_id`
- `pulse_oximetry_inspired_oxygen_idx` on `inspired_oxygen`
- `pulse_oximetry_oximetry_device_idx` on `oximetry_device`

## Child tables

1 table hang off `pulse_oximetry`, one row per repetition.

### `pulse_oximetry_multimedia_image`

Child table — one row per repetition, deleted with its parent.

| Column | Type | Null | Description | Source |
|---|---|---|---|---|
| `id` | `uuid primary key` | no | Primary key. | — |
| `pulse_oximetry_id` | `uuid` → [`pulse_oximetry`](/docs/tables/pulse_oximetry) | no | — | — |
| `position` | `integer` | no | Order of this row within its parent, from zero. | — |
| `attachment_id` | `uuid` | no | Multimedia image | `/data[at0001]/events[at0002]/data[at0003]/items[at0060]` |

#### Unique

- `pulse_oximetry_id, position`
- `pulse_oximetry_id, attachment_id`

#### References

| Columns | Target | On delete |
|---|---|---|
| `pulse_oximetry_id` | [`pulse_oximetry`](/docs/tables/pulse_oximetry) | cascade |
| `attachment_id` | [`attachment`](/docs/tables/attachment) | restrict |

#### Indexes

- `pulse_oximetry_multimedia_image_attachment_id_idx` on `attachment_id`

## Value sets

| Value set | Codes |
|---|---|
| `org.openehr::openEHR-EHR-OBSERVATION.pulse_oximetry.v1/pre_post_ductal` | 3 |

