rdejournett wrote on Thursday, January 22, 2015:
Rod, I do not, but the source is available. I think if the project were not to use an existing interface engine then code would have to be written to handle troubleshooting and maintenance of HL7 data streams. The advantages of Mirth are that it is free & open source, and already there is a bunch of work to create the necessary infrastructure for viewing and replaying messages. Without this, interface engines become very difficult to maintain and troubleshoot.
For example, Allscripts PM uses AIE, their homebrew solution. The GUI contains configurable items but all the troubleshooting data are in SQL tables. As a result, it’s impossible for any practice staff user to figure out, and for support personnel they must have good understanding of the table schema and good enough SQL background. (and of course now you are twiddling directly in the database with a minimally trained person)
Another company I worked for used iguana (interfaceware) for another home brew, but the traffic needs were pretty light (it’s a radiology app, so they get a few orders and some ADT from different vendors). This is a possibility too, but what I saw there was every time they added a vendor it got more and more difficult to write code.
The good thing about using an interface engine like Mirth (or Egate or Rhapsody or Cloverleaf), is that it’s modular and scalable. We can write one interface to connect to Cerner, another to connect to Epic, and a third to write to Allscripts PM or EHR.
Anyway that’s my two cents from being in that field. It may be possible to import directly parts of the mirth app directly into your project, but probably this would be painful, since they use Java.
Working with PHP is fine but you’d need to consider things like 1) how do you know the service is running. 2) What happened to message X, did it even come through? 3) Can we replay message Y, but just that one. These things are trivial with a good interface engine like Mirth.
Lastly in settings that have critical data coming in like labs, having them fail is not really an option. Failures typically are due to demographic mismataches or a mis-sync in lab compendiums. In a situation where there is no outbound ORM feed, the former arises, but also if the source of truth from the lab system is different, it’s a moot point anyway. (Ie if the patient has to re-register at the lab). Anyway. In those cases, especially with the demographics issue, if that occurs, one thing to think about would be code to handle patient bridging like Allscripts EEHR does (most interface engines do not support this concept, even Epic just says there is a failure because XYZ and here is the message, do what you want with it).
I’m hoping this info is useful! Good discussion. I will download the Ubuntu appliance and see if can get bidirectional ADT working.