Great case of somethin’ ! This is actually a known entity but the change from prior is pretty striking.
This post is the start of chronicle of improvements that can be made with thoughtful introspection into workflow. It is in no way intended to disparage the reading environment, but rather takes a look at the barriers to information transfer and how to overcome them on a personal basis. All of these were my own developments to streamline my reading environment, improve patient care and reduce stress for the radiologist.
The environment uses a RIS that is web based, running on a coldfusion server. The appropriate link activates a java based application that launches from the link. The images are stored on one of two servers and an annotation is there that tells the rad which link to click. Whether clicking the “O” link “B” link is a pseudorandom pattern. Some studies are preferentially on one server but it is inconsistent. I don’t know the reasons, nor do they matter.
While this seems like a trivial matter, over the course of a shift, that is around 100 times of finding the text, clicking the link, and then reading the study.
One of the problems is that because of the presentation of text, which link to use can be in a different spot on every single page.
This is just the first step in optimizing the display of images. More to follow.
The point of this programming exercise is to find outlier words that speech recognition shouldn’t, but does, insert into the dictated reports. By taking a large sample size for a user, the word frequency can be used to remove inappropriate words from the user dictionary.
As an example, I had the word “heber” escape my proofreading at one point and it made it into the list. I’ve removed it now, but the ultimate goal is to check each report for outlier words, and when they fall below a frequency threshold, to flag them for review.
You can see that there are some words that just don’t belong. This frequency analysis allows removal from the lexicon and by doing so, should improve reports AND recognition. There are a few problems with the data that are fixable.
From the radiologist’s perspective, if you are going to give a diagnosis that you’ve never given before, it should not be taken lightly. This follows the axiom that an uncommon presentation of a common disease is more common than a rare disease. If at all possible, try to have another radiologist consult and confirm your suspicions and for heaven’s sake, if there is a differential, please give it.
I have frequently seen radiologists try to hit a “home run” by naming a rare disease, not giving a differential, and flubbing the case because it’s actually a common disease with an unusual presentation.
The point of that aside is that a frequency analysis can prompt the radiologist to ask “do I really mean to use that word” and if you do, it will make you think about whether that is the correct and only differential consideration you want to give.
All too often, technology solutions in medicine increase the burden on the physician rather than facilitate the practice of medicine. EMRs are a perfect example. You spend more time clicking than caring. The eventual goal will be a real time prompt on signing a report that keeps the rad out of trouble and produces a polished professional report. At the end of the day, the report is the indelible work product.
I’ve had a really clunky program to track what I do. It lets me know how much volume I’m reading calculated each 30 min based a logfile.
I’ve decided to get a little more sophisticated with the program because it has grown to the point where it’s painful for me to edit, and if I wrote it, it must be completely abstruse to someone else.
I have never used a class in python but it solves many issues for me:
import re class Parser: """ A class to parse data strings into components USE: from parser_fx import * result = Parser() ## Instantiate class result.parse(study) ## Pass the instance a study string result.XXXXXXX ## Attributes of result now available """ def __init__(self): """ Simply establishes the regex expression""" self.regex = re.compile(r'([\'A-Z\s-]+)(\[.+||\s])\s*' '(CURRENT STUDY:)([A-Z\s/\[\]]+)' '([\d-]+)\s([\d:]+)\s' '(\[DOB:[\s0-9/]+])\s+(\[ID:.+])') def parse(self, study_string=('SIMPSON HOMER J[Prelim report]CURRENT STUDY:' 'CT HEAD 2016-01-01 23:59:59 [DOB: 1111/1/11 ] [ID: 1234567]')): """Parser with failure options""" self.study_string = study_string try: self.matchobj = self.regex.match(self.study_string) ## Attributes: name, prelim/final, study, date, time dob, ID self.name = self.matchobj.group(1) self.type = self.matchobj.group(2)[1:7].rstrip() self.study_name = self.matchobj.group(4) self.date = self.matchobj.group(5) self.time = self.matchobj.group(6) self.DOB = self.matchobj.group(7) self.ID = self.matchobj.group(8)[1:-1] except: print("REGEX Match Failed") """ Leaving here as an example to follow def ID(self): ''' returns study ''' self.ID = self.matchobj.group(8) return self.ID """ """ study= ('SIMPSON HOMER J[Prelim report]CURRENT STUDY:' 'CT HEAD 2016-01-01 23:59:59 [DOB: 1111/1/11 ] [ID: 1234567]') result = Parser() result.parse(study) print("%s | %s | %s | %s | %s | %s" %(result.type, result.name, result.study_name, result.date, result.time, result.ID)) """
After testing for a week, I’ll report back on success or failure.
ER case. Likely unimportant in the current presentation but potentially important down the road.
I think this is the first time I’ve ever seen PIE in without trauma. The patient has bad colitis and I caught the pneumomediastinum on the inferior slices of the chest. Went back and scanned the chest and no visible esophageal perf, but lots of air.
I was not familiar with the term:
The Macklin effect: pulmonary interstitial emphysema and pneumomediastinum
I’m only used to seeing PIE in infants, but this is a rock solid demonstration of it.
An aortic nipple is seen in about 10% of PA chest x-rays on the lateral surface of the aortic arch/aortic knob. It represents the left superior intercostal vein.