---
title: "tanner"
description: "A scale to describe the onset and progression of pubertal changes."
---

A scale to describe the onset and progression of pubertal changes.

**Purpose.** To describe progression of pubertal changes in genitals, breasts and pubic hair.

## Source

| Model | Leg | Role |
|---|---|---|
| `openEHR-EHR-OBSERVATION.tanner.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. | — |
| `genitals`<br />`genitals_code`<br />`genitals_system`<br />`genitals_valueset_id` | coded text<br />`text`, `text`, `text`, `text` | yes | Genitals | `/data[at0001]/events[at0002]/data[at0003]/items[at0004]` |
| `breasts`<br />`breasts_code`<br />`breasts_system`<br />`breasts_valueset_id` | coded text<br />`text`, `text`, `text`, `text` | yes | Breasts | `/data[at0001]/events[at0002]/data[at0003]/items[at0005]` |
| `pubic_hair`<br />`pubic_hair_code`<br />`pubic_hair_system`<br />`pubic_hair_valueset_id` | coded text<br />`text`, `text`, `text`, `text` | yes | Pubic hair | `/data[at0001]/events[at0002]/data[at0003]/items[at0006]` |
| `comment` | `text` | yes | Comment | `/data[at0001]/events[at0002]/data[at0003]/items[at0027]` |

## Constraints

```sql
check ((genitals_code is null and genitals_system is null and genitals_valueset_id is null and genitals is null) or (genitals is not null and genitals_code is not null and genitals_system is not null and genitals_valueset_id is not null))
check ((breasts_code is null and breasts_system is null and breasts_valueset_id is null and breasts is null) or (breasts is not null and breasts_code is not null and breasts_system is not null and breasts_valueset_id is not null))
check ((pubic_hair_code is null and pubic_hair_system is null and pubic_hair_valueset_id is null and pubic_hair is null) or (pubic_hair is not null and pubic_hair_code is not null and pubic_hair_system is not null and pubic_hair_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 |
| `genitals_valueset_id, genitals_code, genitals_system, genitals` | [`valueset_code`](/docs/tables/valueset_code) | restrict |
| `breasts_valueset_id, breasts_code, breasts_system, breasts` | [`valueset_code`](/docs/tables/valueset_code) | restrict |
| `pubic_hair_valueset_id, pubic_hair_code, pubic_hair_system, pubic_hair` | [`valueset_code`](/docs/tables/valueset_code) | restrict |

## Indexes

- `tanner_form_id_idx` on `form_id`

## Value sets

| Value set | Codes |
|---|---|
| `org.openehr::openEHR-EHR-OBSERVATION.tanner.v1/breasts` | 5 |
| `org.openehr::openEHR-EHR-OBSERVATION.tanner.v1/genitals` | 5 |
| `org.openehr::openEHR-EHR-OBSERVATION.tanner.v1/pubic_hair` | 5 |

