# Introduction to reading HL7v2

HL7v2 is a set of standards set out to allow healthcare systems to send each other updates on patient-related information. If you’re just starting out in healthcare IT and want a quick primer on these standards please read on.

## Reading the message

HL7v2 messages are a collection of lines, each with their own standards. Each line, referred to as a **segment**, contains a collection of information related to one aspect of a patient’s information. Segments are made up of **fields**, which each contain a particular data point, which may need to be further broken down into **repetitions**, **components**, and **sub-components**. Generally, fields are separated by the pipe character (|), repetitions by a tilde (~), components by a caret (^) and sub-components by an ampersand (&).

Let’s go through an example to see how all this comes together.

Below is the Patient Identification (PID) segment of an HL7v2 message for a patient named "Mickey M Mouse" with multiple EMR medical record numbers, a home address, phone number, and other demographic details:

```plaintext
PID|1||13579^BobsOrtho~2468~StevesHospital||Mouse^Mickey^M||19271118|M|||The Magic Kingdom^1675 North Buena Vista Drive^Lake Buena Vista^FL^32830||8777642539
```

Breakdown of example:

| Field Name | Value | Description |
| --- | --- | --- |
| Segment Header (unofficial name) | `PID` | Indicates the segment is following the **Patient Identification** segment standard. The MSH segment would tell us which version of the Patient Identification standard to use. In this case we’ll assume version 2.3 |
| PID-1 | `1` | This indicates that we are referring to the first patient listed in the message. Generally you won't find a second. |
| PID-2 |  | This isn't filled out in our example, but could contain a single patient ID/medical record number (MRN) |
| PID-3 | `13579^BobsOrtho~2468^StevesHospital` | This PID-3 value uses the repetition indicator (~), meaning that there are two PID-3s here, `13579^BobsOrtho` and `2468^StevesHospital`. These are further broken down by the component separator (^) to show that `13579` is the MRN for the organization `BobsOrtho` and `2468` is the identifier for `StevesHospital` |
| PID-4 |  | This is blank in our example but could contain an alternate ID to what we saw in PID-2 |
| PID-5 | `Mouse^Mickey^M` | PID-5 always contains the patient's name. In this case the name is further broken down to the patient's last name, first name, and middle initial using the component separator (^).<br/><br/>Each component is identified as a sub-item of the overall field by it's position.<br/><br/>In this example: <br>PID-5.1 is "Mouse"<br>PID-5.2 is "Mickey"<br>PID-5.3 is "M" |
| PID-6 |  | This is blank in our example but is where you may put the patient's mother's maiden name |
| PID-7 | `2019271118` | The patient's date of birth. Time may also be added if known using numbers only but otherwise following the ISO 8601 basic standard of `yyyyMMddHHmmss`. |
| PID-8 | `M` | Patient administrative sex. |
| PID-9 |  | Patient Alias |
| PID-10 |  | Patient Race, if known |
| PID-11 | `The Magic Kingdom^1675 North Buena Vista Drive^Lake Buena Vista^FL^32830` | Patient Address<br/><br/>In this example:<br/>PID-11.1: Address line 1<br>PID-11.2: Address line 2<br>PID-11.3: City<br>PID-11.4: State<br>PID-11.5: Postal Code |
| PID-12 |  |  Blank in this example but could contain a County Code|
| PID-13 | `8777642539` | Patient phone number |

You'll need some kind of reference to know what the formatting is for each segment and the versions of that segment. I find [Caristix.com's HL7 Definition site](https://hl7-definition.caristix.com/v2/HL7v2.5.1) to be an invaluable resource in looking up these field definitions.

__<u>PLEASE NOTE:</u>__ The MSH segment uses *whatever* character comes after `MSH` as MSH-1, as the standard needed a way to indicate which character is the field separator. Because of this many people get confused over MSH field names and reference them incorrectly.

# Message Types

Because HL7v2 messages are triggered by events in an electronic medical record system, there is a list of events which may generate a message. Which event was the trigger is listed in MSH-9 (remember from the end of the last section that MSH numbering *appears* to be off due to MSH-1 being the first pipe character). A list of Message Types (MSH-9.1) can be found [here](https://hl7-definition.caristix.com/v2/HL7v2.5.1/Tables/0076), while a list of triggering events may be found [here](https://hl7-definition.caristix.com/v2/HL7v2.5.1/Tables/0003).

Please note that not all message types support all trigger events.

Common message types you'll encounter are:

|Message Type|Description|
|---|---|
|ADT|<u>__A__</u>dmit/<u>__D__</u>ischarge/<u>__T__</u>ransfer messages<br/><br/>Generally used for sharing patient demographic data|
|MDM|<u>__M__</u>edical <u>__D__</u>ocument <u>__M__</u>anagement<br/><br/>Documents from an EMR, usually transcribed notes or reports|
|ORM|<u>__Or__</u>der <u>__M__</u>essage<br/><br/>Information about a new order to a lab, radiology department, etc.|
|ORU|<u>__O__</u>der <u>__R__</u>esults <u>__U__</u>nsolicited<br/><br/>Results for a lab or test|
|SIU|<u>__S__</u>cheduling <u>__I__</u>nformation <u>__U__</u>nsolicited<br/><br/>Information about patient scheduling

# Conclusion

There's a TON more to HL7, such as determining which segments and fields are optional, what the proper order of segments are for a given message type, the differences between versions of HL7v2, custom segments for data outside the standard (those are called "z-segments" if you're curious), but those are beyond the scope of this primer on reading HL7v2 messages.
