It's been a while since I last posted and I have been up to quite a bit. One of the areas I have dug into is Healthcare Information Systems. In the past I mainly interacted at the facilities level so to gain visibility into what happens on the clinical and surgical side of the business has been quite interesting. In this post I am going to pull back the curtains on HL7 (think XML for Healthcare) and describe the various aspects of healthcare informatics! Are you ready to learn all you need to know about HL7 and Healthcare Informatics?
Let's get started!
Key Terms
The terminology in healthcare is quite different let's begin by describing some key terms!
- ACA- Afforable Care Act, also know as Obama Care.
- ADT- Admit Discharge Transfer-> This is one of the trigger codes in HL7 that imitates use cases within the Healthcare Informatics System. (See Appendix for ADT code References)
- CDA- Clinical Document Architecture-> This is a XML based standard for transferring clinical data.
- EHR/PHR- Electronic Health Record and Personal Health Record-> These store records on your health and all things related to your health. Mandated now in the US by the ACA.
- HDF- HL7 Development Framework - One of the frameworks on which CDA messaging communicates.
- RIM- Reference Information Model-
What is HL7?
HL7 stands for Health Level 7 it is the work of a non-profit organization called, surprise surprise, HL7. There have been a few versions of HL7 this article will be focused on version 3.0. The purpose of HL7 is for the "exchange, integration, sharing, and retrieval of electronic health information." The reason we are focused on version 3.0 is that version 3.0 is actually more programmer friendly. It follows a structured methodology and is more consistent with the parent - child relationships found in Object Oriented Programming.
How Does it Work?
HL& pulls from a multitude of different frameworks and consolidates those messaging frameworks into a single messaging format. This leads to one of the complaints around HL7, namely that the formatting and layout of HL7 if done wrong can be very confusing and ineffective. The large amount of frameworks, a few examples of which are CCOW, CDA, EHR, and PHR , require the HL7 implementer to make sure that each schema is properly following HL7 standards.
For example if there are two Patient Health Record (PHR) inputs and they are referring to different segment codes, then a message can produce conflicting outputs. This is usually solved by performing an integration review in which the schemas, message types, and message flows are mapped out. This issue is not as common today as it was in the past.
What does a message look like?
MSH|^~&|MegaReg|XYZHospC|SuperOE|XYZImgCtr|20060529090131-0500||ADT^A01^ADT_A01|01052901|P|2.5
EVN||200605290901||||200605290900
PID|||56782445^^^UAReg^PI||KLEINSAMPLE^BARRY^Q^JR||19620910|M||2028-9^^HL70005^RA99113^^XYZ|260 GOODWIN CREST DRIVE^^BIRMINGHAM^AL^35
209^^M~NICKELL’S PICKLES^10000 W 100TH AVE^BIRMINGHAM^AL^35200^^O
|||||||0105I30001^^^99DEF^AN
PV1||I|W^389^1^UABH^^^^3||||12345^MORGAN^REX^J^^^MD^0010^UAMC^L||678
90^GRAINGER^LUCY^X^^^MD^0010^UAMC^L|MED|||||A0||13579^POTTER^SHER
MAN^T^^^MD^0010^UAMC^L|||||||||||||||||||||||||||200605290900
OBX|1|NM|^Body Height||1.80|m^Meter^ISO+|||||F
OBX|2|NM|^Body Weight||79|kg^Kilogram^ISO+|||||F
AL1|1||^ASPIRIN
DG1|1||786.50^CHEST PAIN, UNSPECIFIED^I9|||A
WOW!, If you're not accustom to reading a HL7 message that message can be about as legible as my blog writing skills. Let's break down this message and see if we can get our creative juices flowing...
First things first we have the MSH or Message Header. This will start the message. We can see that this message is telling us several important things.
MSH|^~&|MegaReg|XYZHospC|SuperOE|XYZImgCtr|20060529090131-0500||ADT^A01^ADT_A01|01052901|P|2.5
Location of the facility and the data, time, and UTC code of the message. Additionally we have our ADT code AO1 which stands for Patient Admit. So we know at 20060529090131-0500 or UTC-0500 29th May 2006 @ 0901:31 the patient was admitted.
Now we move onto the next line of the message
EVN||200605290901||||200605290900
Here we have the EVN Message code. EVN stands for event type. So what event was happening on this day?? Weird it doesn't say? Why could that be? At the end of this message we see that the patient was admitted for unspecified chest pain. In this case the admit doesn't have a specific event so only the date and time was recorded and that date/time correlates with the admit time on the first line of the message.
Don't worry if at this point the message isn't making sense it takes some time to be able to read through these documents. I have included some links in the appendix that will really help you digest the messages.
PID|||56782445^^^UAReg^PI||KLEINSAMPLE^BARRY^Q^JR||19620910|M||2028-9^^HL70005^RA99113^^XYZ|260 GOODWIN CREST DRIVE^^BIRMINGHAM^AL^35209^^M~NICKELL’S PICKLES^10000 W 100TH AVE^BIRMINGHAM^AL^35200^^O|||||||0105I30001^^^99DEF^ANPID stands for Patient Identifier. We can see that several key pieces of information exist around the patient identifier. We first have the PID code which will follow the patient as he moves through the healthcare workflow. Next we have the PI which is patient identification. Key points here are the patient name (Last, First, M.i. Suffix), Date of Birth, Sex, race (indicated by HL70005) with the preceding race code of "2028-9" which stands for Asian.
Following along we have the patient's address and we have
PV1||I|W^389^1^UABH^^^^3||||12345^MORGAN^REX^J^^^MD^0010^UAMC^L||67890^GRAINGER^LUCY^X^^^MD^0010^UAMC^L|MED|||||A0||13579^POTTER^SHERMAN^T^^^MD^0010^UAMC^L|||||||||||||||||||||||||||200605290900
PV1 stands for patient visit information. Under this line of code we can see the three doctors who visited the patient and the date and time of the visit.
OBX|1|NM|^Body Height||1.80|m^Meter^ISO+|||||F
OBX|2|NM|^Body Weight||79|kg^Kilogram^ISO+|||||F
OBX stands for Observation/Result and NM stands for probability. The pertinent pieces of info in this line of code are the Body Weight and Body Height both measured in metric according to ISO standards.
AL1|1||^ASPIRIN
AL1 stands for Patient allergy information. As we can see the patient is allergic to aspirin, which is good to know considering the patient's concern is "chest pain".
DG1|1||786.50^CHEST PAIN, UNSPECIFIED^I9|||A
DG1 stands for diagnosis. You can see the diagnosis code 786.50 which stands for Chest Pain Unspecified.
Why does this matter to Building Automation?
I guess this could have gone at the front of the article. It may have kept people reading longer if I had told you what this has to do with the building automation field. HL7 can give critical information to a building automation system. Patient as well as doctor preferences can be attached to a message. This can ensure that your BAS if it can receive HL7 messages controls to the correct environmental settings based on the needs of the patient.
Furthermore, it is known that by cooling down the body you slow the die off of cells. Utilizing HL7 BAS systems can adjust the temperature and humidity in spaces to help increase the healing factors of a room.
Conclusion
This was a long article but I hope it opened up a world that my readers don't get to peak into very often. I am interested in hearing about your experiences with healthcare informatics and with HL7 in particular.
What unique things are you doing within the healthcare space? Sound off in the comments below!