---
title: "patient"
description: "The US Core Patient Profile inherits from the FHIR [Patient](https://hl7.org/fhir/R4/patient.html) resource; refer to it for scope and usage definitions."
---

The US Core Patient Profile inherits from the FHIR [Patient](https://hl7.org/fhir/R4/patient.html) resource; refer to it for scope and usage definitions. This profile meets the requirements of the [U.S. Core Data for Interoperability (USCDI)](https://www.healthit.gov/isp/united-states-core-data-interoperability-uscdi) *Patient Demographics/Information* Data Class. It sets minimum expectations for the Patient resource to record, search, and fetch basic demographics and other administrative information about an individual patient. It specifies which core elements, extensions, vocabularies, and value sets **SHALL** be present and constrains how the elements are used. Providing the floor for standards development for specific use cases promotes interoperability and adoption.

## Source

| Model | Leg | Role |
|---|---|---|
| `us-core-patient` | FHIR | defines this table |
| `openEHR-EHR-CLUSTER.address.v1` | openEHR | merged in — Address |
| `openEHR-EHR-CLUSTER.electronic_communication.v1` | openEHR | merged in — Electronic communication |

> This table is the union of 3 source models. Columns carrying a **From** value came from a model that merged into it, so the same row satisfies both specifications.

## Columns

| Column | Type | Null | Description | From | Source |
|---|---|---|---|---|---|
| `id` | `uuid primary key` | no | Patient.id | — | — |
| `created_at` | `timestamptz` | no | Row creation timestamp. | — | — |
| `updated_at` | `timestamptz` | no | Row update timestamp; maintained by the application. | — | — |
| `created_by` | `text` | no | Actor who created the row. | — | — |
| `updated_by` | `text` | no | Actor who last updated the row. | — | — |
| `race`<br />`race_code`<br />`race_system`<br />`race_valueset_id`<br />`race_text` | coded text<br />`text`, `text`, `text`, `text`, `text` | yes | 𝗔𝗗𝗗𝗜𝗧𝗜𝗢𝗡𝗔𝗟 𝗨𝗦𝗖𝗗𝗜: US Core Race Extension. (multiple races are supported in the extension) | — | `Patient.extension` |
| `ethnicity`<br />`ethnicity_code`<br />`ethnicity_system`<br />`ethnicity_valueset_id`<br />`ethnicity_text` | coded text<br />`text`, `text`, `text`, `text`, `text` | yes | 𝗔𝗗𝗗𝗜𝗧𝗜𝗢𝗡𝗔𝗟 𝗨𝗦𝗖𝗗𝗜: US Core ethnicity Extension (multiple ethnicities are supported in the extension) | — | `Patient.extension` |
| `sex`<br />`sex_code`<br />`sex_system`<br />`sex_valueset_id` | coded text<br />`text`, `text`, `text`, `text` | yes | 𝗔𝗗𝗗𝗜𝗧𝗜𝗢𝗡𝗔𝗟 𝗨𝗦𝗖𝗗𝗜: Sex Extension | — | `Patient.extension` |
| `interpreter_required`<br />`interpreter_required_code`<br />`interpreter_required_system`<br />`interpreter_required_valueset_id` | coded text<br />`text`, `text`, `text`, `text` | yes | 𝗔𝗗𝗗𝗜𝗧𝗜𝗢𝗡𝗔𝗟 𝗨𝗦𝗖𝗗𝗜: Whether the patient needs an interpreter | — | `Patient.extension` |
| `identifier_value`<br />`identifier_system` | text, text<br />`text`, `text` | yes | An identifier for this patient | — | `Patient.identifier` |
| `name_text`<br />`name_prefix`<br />`name_family`<br />`name_given`<br />`name_suffix` | text, text, text, text, text<br />`text`, `text`, `text`, `text`, `text` | yes | A name associated with the patient | — | `Patient.name` |
| `phone_number`<br />`phone_use_code`<br />`email`<br />`email_use_code` | text, text, text, text<br />`text`, `text`, `text`, `text` | yes | 𝗔𝗗𝗗𝗜𝗧𝗜𝗢𝗡𝗔𝗟 𝗨𝗦𝗖𝗗𝗜: A contact detail for the individual | — | `Patient.telecom` |
| `birth_date` | `date` | yes | The date of birth for the individual | — | `Patient.birthDate` |
| `deceased_boolean`<br />`deceased_datetime` | boolean, timestamptz<br />`boolean`, `timestamptz` | yes | 𝗔𝗗𝗗𝗜𝗧𝗜𝗢𝗡𝗔𝗟 𝗨𝗦𝗖𝗗𝗜: Indicates if the individual is deceased or not | — | `Patient.deceased[x]` |
| `address_line`<br />`address_city`<br />`address_district`<br />`address_state`<br />`address_postal_code`<br />`address_country`<br />`address_use_code`<br />`address_type_code` | text, text, text, text, text, text, text, text<br />`text`, `text`, `text`, `text`, `text`, `text`, `text`, `text` | yes | An address for the individual | — | `Patient.address` |
| `address_latitude_magnitude`<br />`address_latitude_units` | quantity<br />`numeric`, `text` | yes | Latitude | `openEHR-EHR-CLUSTER.address.v1` | `/items[at0007]` |
| `address_longitude_magnitude`<br />`address_longitude_units` | quantity<br />`numeric`, `text` | yes | Longitude | `openEHR-EHR-CLUSTER.address.v1` | `/items[at0008]` |
| `address_altitude_magnitude`<br />`address_altitude_units` | quantity<br />`numeric`, `text` | yes | Altitude | `openEHR-EHR-CLUSTER.address.v1` | `/items[at0009]` |
| `address_comment` | `text` | yes | Comment | `openEHR-EHR-CLUSTER.address.v1` | `/items[at0018]` |
| `address_map_url` | `text` | yes | Map URL | `openEHR-EHR-CLUSTER.address.v1` | `/items[at0019]` |
| `address_geolocation_code` | `text` | yes | Geolocation code | `openEHR-EHR-CLUSTER.address.v1` | `/items[at0021]` |
| `phone_comment`<br />`email_comment` | text, text<br />`text`, `text` | yes | Comment | `openEHR-EHR-CLUSTER.electronic_communication.v1` | `/items[at0004]` |

## Constraints

```sql
check ((race is null and race_code is null and race_system is null and race_valueset_id is null) or (race is not null and race_code is not null and race_system is not null and race_valueset_id is not null))
check ((ethnicity is null and ethnicity_code is null and ethnicity_system is null and ethnicity_valueset_id is null) or (ethnicity is not null and ethnicity_code is not null and ethnicity_system is not null and ethnicity_valueset_id is not null))
check ((sex is null and sex_code is null and sex_system is null and sex_valueset_id is null) or (sex is not null and sex_code is not null and sex_system is not null and sex_valueset_id is not null))
check ((interpreter_required is null and interpreter_required_code is null and interpreter_required_system is null and interpreter_required_valueset_id is null) or (interpreter_required is not null and interpreter_required_code is not null and interpreter_required_system is not null and interpreter_required_valueset_id is not null))
check (identifier_system is null or identifier_value is not null)
check (num_nonnulls(deceased_boolean, deceased_datetime) <= 1)
check ((address_latitude_magnitude is null and address_latitude_units is null) or (address_latitude_magnitude is not null and address_latitude_units is not null))
check (address_latitude_magnitude is null or (address_latitude_units = 'deg' and address_latitude_magnitude between -90 and 90))
check ((address_longitude_magnitude is null and address_longitude_units is null) or (address_longitude_magnitude is not null and address_longitude_units is not null))
check (address_longitude_magnitude is null or (address_longitude_units = 'deg' and address_longitude_magnitude between -180 and 180))
check ((address_altitude_magnitude is null and address_altitude_units is null) or (address_altitude_magnitude is not null and address_altitude_units is not null))
```

## References

| Columns | Target | On delete |
|---|---|---|
| `race_valueset_id, race_code, race_system, race` | [`valueset_code`](/docs/tables/valueset_code) | restrict |
| `ethnicity_valueset_id, ethnicity_code, ethnicity_system, ethnicity` | [`valueset_code`](/docs/tables/valueset_code) | restrict |
| `sex_valueset_id, sex_code, sex_system, sex` | [`valueset_code`](/docs/tables/valueset_code) | restrict |
| `interpreter_required_valueset_id, interpreter_required_code, interpreter_required_system, interpreter_required` | [`valueset_code`](/docs/tables/valueset_code) | restrict |

## Referenced by

16 tables reference `patient`, via `patient_id`. The first 15 alphabetically:

- [`care_team`](/docs/tables/care_team) via `patient_id`
- [`care_team_participant`](/docs/tables/care_team_participant) via `member_patient_id`
- [`coverage`](/docs/tables/coverage) via `patient_id`
- [`coverage`](/docs/tables/coverage) via `payor_patient_id`
- [`device`](/docs/tables/device) via `patient_id`
- [`document_reference`](/docs/tables/document_reference) via `subject_patient_id`
- [`document_reference_author`](/docs/tables/document_reference_author) via `patient_id`
- [`encounter`](/docs/tables/encounter) via `patient_id`
- [`patient_tribal_affiliation`](/docs/tables/patient_tribal_affiliation) via `patient_id`
- [`patient_other_identifier`](/docs/tables/patient_other_identifier) via `patient_id`
- [`patient_other_name`](/docs/tables/patient_other_name) via `patient_id`
- [`patient_other_telecom`](/docs/tables/patient_other_telecom) via `patient_id`
- [`patient_other_address`](/docs/tables/patient_other_address) via `patient_id`
- [`patient_communication`](/docs/tables/patient_communication) via `patient_id`
- [`person_link`](/docs/tables/person_link) via `target_patient_id`

## Child tables

6 tables hang off `patient`, one row per repetition.

### `patient_tribal_affiliation`

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

| Column | Type | Null | Description | From | Source |
|---|---|---|---|---|---|
| `id` | `uuid primary key` | no | Primary key. | — | — |
| `patient_id` | `uuid` → [`patient`](/docs/tables/patient) | no | — | — | — |
| `tribal_affiliation`<br />`tribal_affiliation_code`<br />`tribal_affiliation_system` | text, text, text<br />`text`, `text`, `text` | yes | 𝗔𝗗𝗗𝗜𝗧𝗜𝗢𝗡𝗔𝗟 𝗨𝗦𝗖𝗗𝗜: Tribal Affiliation Extension | — | `Patient.extension` |

#### Constraints

```sql
check ((tribal_affiliation_code is null and tribal_affiliation_system is null) or (tribal_affiliation_code is not null and tribal_affiliation_system is not null))
```

#### References

| Columns | Target | On delete |
|---|---|---|
| `patient_id` | [`patient`](/docs/tables/patient) | cascade |

#### Indexes

- `patient_tribal_affiliation_patient_id_idx` on `patient_id`

### `patient_other_identifier`

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

| Column | Type | Null | Description | From | Source |
|---|---|---|---|---|---|
| `id` | `uuid primary key` | no | Primary key. | — | — |
| `patient_id` | `uuid` → [`patient`](/docs/tables/patient) | no | — | — | — |
| `identifier_value` | `text` | no | — | — | — |
| `identifier_system` | `text` | yes | — | — | — |
| `identifier_use` | `text` | yes | — | — | — |
| `valid_from` | `timestamptz` | yes | — | — | — |
| `valid_until` | `timestamptz` | yes | — | — | — |

#### Unique

- `patient_id, identifier_system, identifier_value`

#### References

| Columns | Target | On delete |
|---|---|---|
| `patient_id` | [`patient`](/docs/tables/patient) | cascade |

### `patient_other_name`

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

| Column | Type | Null | Description | From | Source |
|---|---|---|---|---|---|
| `id` | `uuid primary key` | no | Primary key. | — | — |
| `patient_id` | `uuid` → [`patient`](/docs/tables/patient) | no | — | — | — |
| `use_code` | `text` | yes | — | — | — |
| `name_text` | `text` | yes | — | — | — |
| `name_prefix` | `text` | yes | — | — | — |
| `name_family` | `text` | yes | — | — | — |
| `name_given` | `text` | yes | — | — | — |
| `name_suffix` | `text` | yes | — | — | — |
| `valid_from` | `timestamptz` | yes | — | — | — |
| `valid_until` | `timestamptz` | yes | — | — | — |

#### References

| Columns | Target | On delete |
|---|---|---|
| `patient_id` | [`patient`](/docs/tables/patient) | cascade |

#### Indexes

- `patient_other_name_patient_id_idx` on `patient_id`

### `patient_other_telecom`

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

| Column | Type | Null | Description | From | Source |
|---|---|---|---|---|---|
| `id` | `uuid primary key` | no | Primary key. | — | — |
| `patient_id` | `uuid` → [`patient`](/docs/tables/patient) | no | — | — | — |
| `system` | `text` | no | — | — | — |
| `value` | `text` | no | — | — | — |
| `use_code` | `text` | yes | — | — | — |
| `rank` | `integer` | yes | — | — | — |
| `valid_from` | `timestamptz` | yes | — | — | — |
| `valid_until` | `timestamptz` | yes | — | — | — |
| `comment` | `text` | yes | Comment | `openEHR-EHR-CLUSTER.electronic_communication.v1` | `/items[at0004]` |

#### References

| Columns | Target | On delete |
|---|---|---|
| `patient_id` | [`patient`](/docs/tables/patient) | cascade |

#### Indexes

- `patient_other_telecom_patient_id_idx` on `patient_id`

### `patient_other_address`

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

| Column | Type | Null | Description | From | Source |
|---|---|---|---|---|---|
| `id` | `uuid primary key` | no | Primary key. | — | — |
| `patient_id` | `uuid` → [`patient`](/docs/tables/patient) | no | — | — | — |
| `address_line` | `text` | yes | newline-delimited for multiple lines | — | — |
| `address_city` | `text` | yes | — | — | — |
| `address_district` | `text` | yes | — | — | — |
| `address_state` | `text` | yes | — | — | — |
| `address_postal_code` | `text` | yes | — | — | — |
| `address_country` | `text` | yes | — | — | — |
| `use_code` | `text` | yes | — | — | — |
| `type_code` | `text` | yes | — | — | — |
| `valid_from` | `timestamptz` | yes | — | — | — |
| `valid_until` | `timestamptz` | yes | — | — | — |
| `address_latitude_magnitude`<br />`address_latitude_units` | quantity<br />`numeric`, `text` | yes | Latitude | `openEHR-EHR-CLUSTER.address.v1` | `/items[at0007]` |
| `address_longitude_magnitude`<br />`address_longitude_units` | quantity<br />`numeric`, `text` | yes | Longitude | `openEHR-EHR-CLUSTER.address.v1` | `/items[at0008]` |
| `address_altitude_magnitude`<br />`address_altitude_units` | quantity<br />`numeric`, `text` | yes | Altitude | `openEHR-EHR-CLUSTER.address.v1` | `/items[at0009]` |
| `address_comment` | `text` | yes | Comment | `openEHR-EHR-CLUSTER.address.v1` | `/items[at0018]` |
| `address_map_url` | `text` | yes | Map URL | `openEHR-EHR-CLUSTER.address.v1` | `/items[at0019]` |
| `address_geolocation_code` | `text` | yes | Geolocation code | `openEHR-EHR-CLUSTER.address.v1` | `/items[at0021]` |

#### Constraints

```sql
check ((address_latitude_magnitude is null and address_latitude_units is null) or (address_latitude_magnitude is not null and address_latitude_units is not null))
check (address_latitude_magnitude is null or (address_latitude_units = 'deg' and address_latitude_magnitude between -90 and 90))
check ((address_longitude_magnitude is null and address_longitude_units is null) or (address_longitude_magnitude is not null and address_longitude_units is not null))
check (address_longitude_magnitude is null or (address_longitude_units = 'deg' and address_longitude_magnitude between -180 and 180))
check ((address_altitude_magnitude is null and address_altitude_units is null) or (address_altitude_magnitude is not null and address_altitude_units is not null))
```

#### References

| Columns | Target | On delete |
|---|---|---|
| `patient_id` | [`patient`](/docs/tables/patient) | cascade |

#### Indexes

- `patient_other_address_patient_id_idx` on `patient_id`

### `patient_communication`

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

| Column | Type | Null | Description | From | Source |
|---|---|---|---|---|---|
| `id` | `uuid primary key` | no | Primary key. | — | — |
| `patient_id` | `uuid` → [`patient`](/docs/tables/patient) | no | — | — | — |
| `language`<br />`language_code`<br />`language_system`<br />`language_valueset_id` | coded text<br />`text`, `text`, `text`, `text` | yes | The language which can be used to communicate with the patient about his or her health | — | `Patient.communication.language` |

#### Constraints

```sql
check ((language is null and language_code is null and language_system is null and language_valueset_id is null) or (language is not null and language_code is not null and language_system is not null and language_valueset_id is not null))
```

#### References

| Columns | Target | On delete |
|---|---|---|
| `patient_id` | [`patient`](/docs/tables/patient) | cascade |
| `language_valueset_id, language_code, language_system, language` | [`valueset_code`](/docs/tables/valueset_code) | restrict |

#### Indexes

- `patient_communication_patient_id_idx` on `patient_id`

## Value sets

| Value set | Codes |
|---|---|
| `http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1021.121` | 0 |
| `http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1267.16` | 0 |
| `http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.4.642.2.575` | 0 |
| `http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.4.642.40.2.48.3` | 0 |
| `http://terminology.hl7.org/ValueSet/Languages` | 0 |

