---
title: "related_person"
description: "The US Core RelatedPerson Profile inherits from the FHIR [RelatedPerson](https://hl7.org/fhir/R4/relatedperson.html) resource; refer to it for scope and usage definitions."
---
The US Core RelatedPerson Profile inherits from the FHIR [RelatedPerson](https://hl7.org/fhir/R4/relatedperson.html) resource; refer to it for scope and usage definitions. This profile sets minimum expectations for the RelatedPerson resource to record, search, and fetch basic administrative information about persons with a legal or familial relationship to a 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-relatedperson` | 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 | RelatedPerson.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. | — | — |
| `active` | `boolean` | yes | Whether this related person's record is in active use | — | `RelatedPerson.active` |
| `patient_id` | `uuid` | yes | The patient this person is related to | — | `RelatedPerson.patient` |
| `name_text`
`name_prefix`
`name_family`
`name_given`
`name_suffix` | text, text, text, text, text
`text`, `text`, `text`, `text`, `text` | yes | A name associated with the person | — | `RelatedPerson.name` |
| `phone_number`
`phone_use_code`
`email`
`email_use_code` | text, text, text, text
`text`, `text`, `text`, `text` | yes | A contact detail for the person | — | `RelatedPerson.telecom` |
| `address_line`
`address_city`
`address_district`
`address_state`
`address_postal_code`
`address_country`
`address_use_code`
`address_type_code` | text, text, text, text, text, text, text, text
`text`, `text`, `text`, `text`, `text`, `text`, `text`, `text` | yes | Address where the related person can be contacted or visited | — | `RelatedPerson.address` |
| `address_latitude_magnitude`
`address_latitude_units` | quantity
`numeric`, `text` | yes | Latitude | `openEHR-EHR-CLUSTER.address.v1` | `/items[at0007]` |
| `address_longitude_magnitude`
`address_longitude_units` | quantity
`numeric`, `text` | yes | Longitude | `openEHR-EHR-CLUSTER.address.v1` | `/items[at0008]` |
| `address_altitude_magnitude`
`address_altitude_units` | quantity
`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`
`email_comment` | text, text
`text`, `text` | yes | Comment | `openEHR-EHR-CLUSTER.electronic_communication.v1` | `/items[at0004]` |
## 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) | no action |
## Referenced by
- [`care_team_participant`](/docs/tables/care_team_participant) via `member_related_person_id`
- [`coverage`](/docs/tables/coverage) via `payor_related_person_id`
- [`document_reference_author`](/docs/tables/document_reference_author) via `related_person_id`
- [`encounter_participant`](/docs/tables/encounter_participant) via `individual_related_person_id`
- [`person_link`](/docs/tables/person_link) via `target_related_person_id`
- [`related_person_relationship`](/docs/tables/related_person_relationship) via `related_person_id`
- [`related_person_other_name`](/docs/tables/related_person_other_name) via `related_person_id`
- [`related_person_other_telecom`](/docs/tables/related_person_other_telecom) via `related_person_id`
- [`related_person_other_address`](/docs/tables/related_person_other_address) via `related_person_id`
## Indexes
- `related_person_patient_id_idx` on `patient_id`
## Child tables
4 tables hang off `related_person`, one row per repetition.
### `related_person_relationship`
Child table — one row per repetition, deleted with its parent.
| Column | Type | Null | Description | From | Source |
|---|---|---|---|---|---|
| `id` | `uuid primary key` | no | Primary key. | — | — |
| `related_person_id` | `uuid` → [`related_person`](/docs/tables/related_person) | no | — | — | — |
| `relationship`
`relationship_code`
`relationship_system` | text, text, text
`text`, `text`, `text` | yes | The nature of the relationship | — | `RelatedPerson.relationship` |
#### Constraints
```sql
check ((relationship_code is null and relationship_system is null) or (relationship_code is not null and relationship_system is not null))
```
#### References
| Columns | Target | On delete |
|---|---|---|
| `related_person_id` | [`related_person`](/docs/tables/related_person) | cascade |
#### Indexes
- `related_person_relationship_related_person_id_idx` on `related_person_id`
### `related_person_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. | — | — |
| `related_person_id` | `uuid` → [`related_person`](/docs/tables/related_person) | 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 |
|---|---|---|
| `related_person_id` | [`related_person`](/docs/tables/related_person) | cascade |
#### Indexes
- `related_person_other_name_related_person_id_idx` on `related_person_id`
### `related_person_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. | — | — |
| `related_person_id` | `uuid` → [`related_person`](/docs/tables/related_person) | 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 |
|---|---|---|
| `related_person_id` | [`related_person`](/docs/tables/related_person) | cascade |
#### Indexes
- `related_person_other_telecom_related_person_id_idx` on `related_person_id`
### `related_person_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. | — | — |
| `related_person_id` | `uuid` → [`related_person`](/docs/tables/related_person) | 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`
`address_latitude_units` | quantity
`numeric`, `text` | yes | Latitude | `openEHR-EHR-CLUSTER.address.v1` | `/items[at0007]` |
| `address_longitude_magnitude`
`address_longitude_units` | quantity
`numeric`, `text` | yes | Longitude | `openEHR-EHR-CLUSTER.address.v1` | `/items[at0008]` |
| `address_altitude_magnitude`
`address_altitude_units` | quantity
`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 |
|---|---|---|
| `related_person_id` | [`related_person`](/docs/tables/related_person) | cascade |
#### Indexes
- `related_person_other_address_related_person_id_idx` on `related_person_id`