---
title: "hirsutism_scales"
description: "A grouping of related assessment scales used to quantify distribution and growth of body hair in women."
---

A grouping of related assessment scales used to quantify distribution and growth of body hair in women.

**Purpose.** To record hair scores for up to thirteen body areas and a total sum of scores, in order to quantify excessive male-pattern hair growth in women.

## Source

| Model | Leg | Role |
|---|---|---|
| `openEHR-EHR-OBSERVATION.hirsutism_scales.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. | — |
| `upper_lip_hair`<br />`upper_lip_hair_code`<br />`upper_lip_hair_system`<br />`upper_lip_hair_numeric`<br />`upper_lip_hair_valueset_id` | coded text<br />`text`, `text`, `text`, `numeric`, `text` | yes | Upper lip hair | `/data[at0001]/events[at0002]/data[at0003]/items[at0005]` |
| `chin_hair`<br />`chin_hair_code`<br />`chin_hair_system`<br />`chin_hair_numeric`<br />`chin_hair_valueset_id` | coded text<br />`text`, `text`, `text`, `numeric`, `text` | yes | Chin hair | `/data[at0001]/events[at0002]/data[at0003]/items[at0019]` |
| `sideburn_hair`<br />`sideburn_hair_code`<br />`sideburn_hair_system`<br />`sideburn_hair_numeric`<br />`sideburn_hair_valueset_id` | coded text<br />`text`, `text`, `text`, `numeric`, `text` | yes | Sideburn hair | `/data[at0001]/events[at0002]/data[at0003]/items[at0082]` |
| `chest_hair`<br />`chest_hair_code`<br />`chest_hair_system`<br />`chest_hair_numeric`<br />`chest_hair_valueset_id` | coded text<br />`text`, `text`, `text`, `numeric`, `text` | yes | Chest hair | `/data[at0001]/events[at0002]/data[at0003]/items[at0025]` |
| `upper_back_hair`<br />`upper_back_hair_code`<br />`upper_back_hair_system`<br />`upper_back_hair_numeric`<br />`upper_back_hair_valueset_id` | coded text<br />`text`, `text`, `text`, `numeric`, `text` | yes | Upper back hair | `/data[at0001]/events[at0002]/data[at0003]/items[at0031]` |
| `lower_back_hair`<br />`lower_back_hair_code`<br />`lower_back_hair_system`<br />`lower_back_hair_numeric`<br />`lower_back_hair_valueset_id` | coded text<br />`text`, `text`, `text`, `numeric`, `text` | yes | Lower back hair | `/data[at0001]/events[at0002]/data[at0003]/items[at0037]` |
| `upper_abdomen_hair`<br />`upper_abdomen_hair_code`<br />`upper_abdomen_hair_system`<br />`upper_abdomen_hair_numeric`<br />`upper_abdomen_hair_valueset_id` | coded text<br />`text`, `text`, `text`, `numeric`, `text` | yes | Upper abdomen hair | `/data[at0001]/events[at0002]/data[at0003]/items[at0043]` |
| `lower_abdomen_hair`<br />`lower_abdomen_hair_code`<br />`lower_abdomen_hair_system`<br />`lower_abdomen_hair_numeric`<br />`lower_abdomen_hair_valueset_id` | coded text<br />`text`, `text`, `text`, `numeric`, `text` | yes | Lower abdomen hair | `/data[at0001]/events[at0002]/data[at0003]/items[at0049]` |
| `upper_arm_hair`<br />`upper_arm_hair_code`<br />`upper_arm_hair_system`<br />`upper_arm_hair_numeric`<br />`upper_arm_hair_valueset_id` | coded text<br />`text`, `text`, `text`, `numeric`, `text` | yes | Upper arm hair | `/data[at0001]/events[at0002]/data[at0003]/items[at0055]` |
| `lower_arm_hair`<br />`lower_arm_hair_code`<br />`lower_arm_hair_system`<br />`lower_arm_hair_numeric`<br />`lower_arm_hair_valueset_id` | coded text<br />`text`, `text`, `text`, `numeric`, `text` | yes | Lower arm hair | `/data[at0001]/events[at0002]/data[at0003]/items[at0061]` |
| `thigh_hair`<br />`thigh_hair_code`<br />`thigh_hair_system`<br />`thigh_hair_numeric`<br />`thigh_hair_valueset_id` | coded text<br />`text`, `text`, `text`, `numeric`, `text` | yes | Thigh hair | `/data[at0001]/events[at0002]/data[at0003]/items[at0067]` |
| `lower_leg_hair`<br />`lower_leg_hair_code`<br />`lower_leg_hair_system`<br />`lower_leg_hair_numeric`<br />`lower_leg_hair_valueset_id` | coded text<br />`text`, `text`, `text`, `numeric`, `text` | yes | Lower leg hair | `/data[at0001]/events[at0002]/data[at0003]/items[at0073]` |
| `perineum_hair`<br />`perineum_hair_code`<br />`perineum_hair_system`<br />`perineum_hair_numeric`<br />`perineum_hair_valueset_id` | coded text<br />`text`, `text`, `text`, `numeric`, `text` | yes | Perineum hair | `/data[at0001]/events[at0002]/data[at0003]/items[at0091]` |
| `total_score` | `integer` | yes | Total score | `/data[at0001]/events[at0002]/data[at0003]/items[at0079]` |
| `ferriman_gallwey_score` | `integer` | yes | Ferriman-Gallwey score | `/data[at0001]/events[at0002]/data[at0003]/items[at0089]` |
| `modified_ferriman_gallwey_score` | `integer` | yes | Modified Ferriman-Gallwey score | `/data[at0001]/events[at0002]/data[at0003]/items[at0090]` |

## Constraints

```sql
check ((upper_lip_hair_code is null and upper_lip_hair_system is null and upper_lip_hair_numeric is null and upper_lip_hair is null) or (upper_lip_hair_valueset_id is not null and upper_lip_hair_code is not null and upper_lip_hair_system is not null and upper_lip_hair_numeric is not null and upper_lip_hair is not null))
check ((chin_hair_code is null and chin_hair_system is null and chin_hair_numeric is null and chin_hair is null) or (chin_hair_valueset_id is not null and chin_hair_code is not null and chin_hair_system is not null and chin_hair_numeric is not null and chin_hair is not null))
check ((sideburn_hair_code is null and sideburn_hair_system is null and sideburn_hair_numeric is null and sideburn_hair is null) or (sideburn_hair_valueset_id is not null and sideburn_hair_code is not null and sideburn_hair_system is not null and sideburn_hair_numeric is not null and sideburn_hair is not null))
check ((chest_hair_code is null and chest_hair_system is null and chest_hair_numeric is null and chest_hair is null) or (chest_hair_valueset_id is not null and chest_hair_code is not null and chest_hair_system is not null and chest_hair_numeric is not null and chest_hair is not null))
check ((upper_back_hair_code is null and upper_back_hair_system is null and upper_back_hair_numeric is null and upper_back_hair is null) or (upper_back_hair_valueset_id is not null and upper_back_hair_code is not null and upper_back_hair_system is not null and upper_back_hair_numeric is not null and upper_back_hair is not null))
check ((lower_back_hair_code is null and lower_back_hair_system is null and lower_back_hair_numeric is null and lower_back_hair is null) or (lower_back_hair_valueset_id is not null and lower_back_hair_code is not null and lower_back_hair_system is not null and lower_back_hair_numeric is not null and lower_back_hair is not null))
check ((upper_abdomen_hair_code is null and upper_abdomen_hair_system is null and upper_abdomen_hair_numeric is null and upper_abdomen_hair is null) or (upper_abdomen_hair_valueset_id is not null and upper_abdomen_hair_code is not null and upper_abdomen_hair_system is not null and upper_abdomen_hair_numeric is not null and upper_abdomen_hair is not null))
check ((lower_abdomen_hair_code is null and lower_abdomen_hair_system is null and lower_abdomen_hair_numeric is null and lower_abdomen_hair is null) or (lower_abdomen_hair_valueset_id is not null and lower_abdomen_hair_code is not null and lower_abdomen_hair_system is not null and lower_abdomen_hair_numeric is not null and lower_abdomen_hair is not null))
check ((upper_arm_hair_code is null and upper_arm_hair_system is null and upper_arm_hair_numeric is null and upper_arm_hair is null) or (upper_arm_hair_valueset_id is not null and upper_arm_hair_code is not null and upper_arm_hair_system is not null and upper_arm_hair_numeric is not null and upper_arm_hair is not null))
check ((lower_arm_hair_code is null and lower_arm_hair_system is null and lower_arm_hair_numeric is null and lower_arm_hair is null) or (lower_arm_hair_valueset_id is not null and lower_arm_hair_code is not null and lower_arm_hair_system is not null and lower_arm_hair_numeric is not null and lower_arm_hair is not null))
check ((thigh_hair_code is null and thigh_hair_system is null and thigh_hair_numeric is null and thigh_hair is null) or (thigh_hair_valueset_id is not null and thigh_hair_code is not null and thigh_hair_system is not null and thigh_hair_numeric is not null and thigh_hair is not null))
check ((lower_leg_hair_code is null and lower_leg_hair_system is null and lower_leg_hair_numeric is null and lower_leg_hair is null) or (lower_leg_hair_valueset_id is not null and lower_leg_hair_code is not null and lower_leg_hair_system is not null and lower_leg_hair_numeric is not null and lower_leg_hair is not null))
check ((perineum_hair_code is null and perineum_hair_system is null and perineum_hair_numeric is null and perineum_hair is null) or (perineum_hair_valueset_id is not null and perineum_hair_code is not null and perineum_hair_system is not null and perineum_hair_numeric is not null and perineum_hair is not null))
check (total_score is null or total_score between 0 and 52)
check (ferriman_gallwey_score is null or ferriman_gallwey_score between 0 and 44)
check (modified_ferriman_gallwey_score is null or modified_ferriman_gallwey_score between 0 and 36)
```

## 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 |
| `upper_lip_hair_valueset_id, upper_lip_hair_code, upper_lip_hair_system, upper_lip_hair, upper_lip_hair_numeric` | [`valueset_code`](/docs/tables/valueset_code) | restrict |
| `chin_hair_valueset_id, chin_hair_code, chin_hair_system, chin_hair, chin_hair_numeric` | [`valueset_code`](/docs/tables/valueset_code) | restrict |
| `sideburn_hair_valueset_id, sideburn_hair_code, sideburn_hair_system, sideburn_hair, sideburn_hair_numeric` | [`valueset_code`](/docs/tables/valueset_code) | restrict |
| `chest_hair_valueset_id, chest_hair_code, chest_hair_system, chest_hair, chest_hair_numeric` | [`valueset_code`](/docs/tables/valueset_code) | restrict |
| `upper_back_hair_valueset_id, upper_back_hair_code, upper_back_hair_system, upper_back_hair, upper_back_hair_numeric` | [`valueset_code`](/docs/tables/valueset_code) | restrict |
| `lower_back_hair_valueset_id, lower_back_hair_code, lower_back_hair_system, lower_back_hair, lower_back_hair_numeric` | [`valueset_code`](/docs/tables/valueset_code) | restrict |
| `upper_abdomen_hair_valueset_id, upper_abdomen_hair_code, upper_abdomen_hair_system, upper_abdomen_hair, upper_abdomen_hair_numeric` | [`valueset_code`](/docs/tables/valueset_code) | restrict |
| `lower_abdomen_hair_valueset_id, lower_abdomen_hair_code, lower_abdomen_hair_system, lower_abdomen_hair, lower_abdomen_hair_numeric` | [`valueset_code`](/docs/tables/valueset_code) | restrict |
| `upper_arm_hair_valueset_id, upper_arm_hair_code, upper_arm_hair_system, upper_arm_hair, upper_arm_hair_numeric` | [`valueset_code`](/docs/tables/valueset_code) | restrict |
| `lower_arm_hair_valueset_id, lower_arm_hair_code, lower_arm_hair_system, lower_arm_hair, lower_arm_hair_numeric` | [`valueset_code`](/docs/tables/valueset_code) | restrict |
| `thigh_hair_valueset_id, thigh_hair_code, thigh_hair_system, thigh_hair, thigh_hair_numeric` | [`valueset_code`](/docs/tables/valueset_code) | restrict |
| `lower_leg_hair_valueset_id, lower_leg_hair_code, lower_leg_hair_system, lower_leg_hair, lower_leg_hair_numeric` | [`valueset_code`](/docs/tables/valueset_code) | restrict |
| `perineum_hair_valueset_id, perineum_hair_code, perineum_hair_system, perineum_hair, perineum_hair_numeric` | [`valueset_code`](/docs/tables/valueset_code) | restrict |

## Indexes

- `hirsutism_scales_form_id_idx` on `form_id`

## Value sets

| Value set | Codes |
|---|---|
| `org.openehr::openEHR-EHR-OBSERVATION.hirsutism_scales.v1/chest_hair` | 5 |
| `org.openehr::openEHR-EHR-OBSERVATION.hirsutism_scales.v1/chin_hair` | 5 |
| `org.openehr::openEHR-EHR-OBSERVATION.hirsutism_scales.v1/lower_abdomen_hair` | 5 |
| `org.openehr::openEHR-EHR-OBSERVATION.hirsutism_scales.v1/lower_arm_hair` | 5 |
| `org.openehr::openEHR-EHR-OBSERVATION.hirsutism_scales.v1/lower_back_hair` | 5 |
| `org.openehr::openEHR-EHR-OBSERVATION.hirsutism_scales.v1/lower_leg_hair` | 5 |
| `org.openehr::openEHR-EHR-OBSERVATION.hirsutism_scales.v1/perineum_hair` | 5 |
| `org.openehr::openEHR-EHR-OBSERVATION.hirsutism_scales.v1/sideburn_hair` | 5 |
| `org.openehr::openEHR-EHR-OBSERVATION.hirsutism_scales.v1/thigh_hair` | 5 |
| `org.openehr::openEHR-EHR-OBSERVATION.hirsutism_scales.v1/upper_abdomen_hair` | 5 |
| `org.openehr::openEHR-EHR-OBSERVATION.hirsutism_scales.v1/upper_arm_hair` | 5 |
| `org.openehr::openEHR-EHR-OBSERVATION.hirsutism_scales.v1/upper_back_hair` | 5 |
| `org.openehr::openEHR-EHR-OBSERVATION.hirsutism_scales.v1/upper_lip_hair` | 5 |

