Friday, March 20, 2015

HL7 FHIR and Radiology

I am working on a project where we need to display radiology reports received via HL7 v2.x along side the DICOM Images.  Given that few systems support querying via HL7, the way this is usually solved is by listening to incoming HL7 messages and storing them in a database.  This kind of solution is not hard to do - you can use the excellent Mirth Connect open source project to receive the HL7 messages, transform them and then store them in a database.  While I could simply add a few tables to our existing SQL database and have mirth file directly to it, such a solution would result in unnecessary coupling between the report module and the rest of the system.  What feels right is to create a standalone "Report Repository" which would expose a REST interface to store, get and update reports.

The idea behind this "Report Repository" seemed like something that HL7 FHIR would support, but every time I tried to understand it, I got lost in the sea of healthcare informatics that is not directly related to radiology imaging.  I was fortunate enough to get some time from Brad Genereaux today and he gave me a quick 10 minute bootstrap on HL7 FHIR from a radiology perspective.  We left the conversation both saying that we should blog about this and wondered which of us would do it first. I guess I win!

Anyway, here are some of my notes:

The HL7 FHIR has a resource type named Diagnostic Report which is used to store radiology reports as well as other reports (labs, etc).

There is a publicly accessible FHIR server named Spark which you can access to see examples of resources.  Spark is open source and written in C#, you can find the github repo here.

You can find an example of a Radiology Report with resource id 102 in XML format:

http://spark.furore.com/fhir/DiagnosticReport/102

If you want the report in JSON format, add the following query parameter:

http://spark.furore.com/fhir/DiagnosticReport/102?_format=application%2fjson%2bfhir

A radiology report has a few key properties:

The report text itself - this can be found in the text.div property.  The text seems to be formatted as HTML.  Brad mentioned that there may be a way to access the report text unformatted but couldn't remember how to do it.

The patient the report is for can be found in the subject.reference property.  This is a link to a Patient resource.  Brad mentioned that there may be a way to make a FHIR request where the links are replaced with the actual data reducing the number of HTTP requests to get what you want.  If this works, you could get the actual patient info (name, id, etc) along with the report in one request

The status of the report (final, preliminary, addendum) can be found in the status field (in this case it is final)

According to the Diagnostic Report schema, there should be a link to the interpreting radiologist, but that isn't present in this specific example.

In this specific example, it appears that there is a structure measurement as well (bone density).  This isn't an immediate concern of mine so I am not going to explore it much further, but it would be interesting to see how this maps to DICOM SR.

A big thanks to Brad for his time today, hopefully others will find this information helpful.

1 comment:

  1. One thing that is missing from this blog post and the example is what the identifier for this report is. Usually this is an accession number and that seems to be present in the imagingStudy resource which is unfortunately not part of this example

    ReplyDelete