Welcome unknown traveller of the Cyberspace! This is Gunther Schadow's World Wide Web node. You will find interesting things about medical informatics (HL7), a unit converter, an object oriented DBMS interface, free software in general, and the FreeBSD operating system. Pragmatic Data, LLC provides services related to the contents of this site.
ProtoGen/HL7 - an implementation of HL7 in C++
My project for my doctoral thesis, that started out in 1993, is to develop and gain experience with a communication server. HL7 was chosen as the basic protocol to be used (since there is in effect no choice at all). No freely available implementation was available at that time and I decided to develop one myself. An outline of my Ph.D. Project
ProtoGen/HL7 is essentially a parser/builder generator that extracts it's rules from the HL7 standard document. The interface to the parser/builder is C++. Thus, the result of the generator is a C++ class library for the HL7 protocol. With the library you can build HL7 client/server applications or batch processors very easily. With the generator you can easily extend and customize the HL7 standard in order to fit the needs and customs of the systems you want to interface... current ProtoGen/HL7 release notes
There are a few papers on ProtoGen/HL7 that are written in german language. Unfortunately I have to use german language for certain writings including my Ph.D. thesis itself. I would rather share them with more people than just those who happen to speak german.
Thanks to the Regenstrief Institute, Indianapolis, I was able to hold a workshop at the HL7 plenary meeting '97 in San Francisco. The workshop was entitled ``Developing Standard-Complient Applications with ProtoGen/HL7''. Please have a look at the announcement and slides.
Unfortunately the documentation of ProtoGen/HL7 is still in a bad state. This loads some burdon on the new user of the system, since (s)he must figure out how things work by hunting for information all over the system. However, there are a few documents that might serve as an introduction.
PLEASE NOTE: This Text is not up to date, it was written more than a year before. However, even though a lot of details have changed since then, it gives at least some introduction to the concepts of ProtoGen/HL7.
Since there are enough words now, here is the Code of the complete ProtoGen/HL7 system: It is offered to you under the terms of the GNU General Public License. Please click through the source code tree of the latest ProtoGen/HL7 release (1.3) or get it in whole as a gzip compressed TAR file (about 2 MB) You should also check if you have the required software packages
There is now an update for release 1.3 to a more recent version. Due to a cronic lack of time I am currently unable to package a new major release, even though it is high time to do this.
There are some of the nice features of ProtoGen/HL7 that I want to invite you to try right here: Documentation is always an issue in interface implementation (DICOM formally calls this ``Conformance Statements''). ProtoGen/HL7 now generates hypertext documentation about the HL7 class library that it is about to build. This documentation is always in sync with the library and shows:
Unfortunately this feature is broken in the current 1.3 release but will be back in soon!The unit converter is a feature of ProtoGen/HL7 that greatly faciliates the communication of observation results in OBX segments. The important features are:
(Did you know that a solution of pH 4 has about 60 free protons per atto-liter? Try it: convert ``4 ph'' to``/al''!)
The class Unit inherits from class Code and shows impressingly that a code can be more than a mere list of allowed values. Other ``active'' codes should be: ICD 9/10, SNOMED, etc...
An other example for a more ``intelligent'' code is the LOINC database. .
There is a HL7 test server to which you can send HL7 messages via e-mail. The server does nothing else than acknowledging your messages. The reply message will report any message format or contents errors it had detected. Just put your HL7 message (using HL7 encoding rules) into an e-mail addressed to hl7@uks3p.ukbf.fu-berlin.de. You can now send MIME encoded HL7 messages to this server too. The server is conformant to RFC 1767, the new internet standard for MIME encapsulation of EDI objects. Send single or multi-part messages with content type: ``application/edi-consent'' or ``application/edi-hl7'' in whatever transfer encoding you like.
THIS SERVICE HAS BEEN DISCONTINUED
Certainly, it is impossible to just implement a standard without reflecting it. And it is nearly impossible to reflect a standard without coming up with Ideas about how to improve it. There are two writings that I posted to the HL7 e-mail list but which I want to bring further to the state of a proposal. First there is the problem of Ambiguity in HL7 Messages.
Here is my proposal for An Improved HL7 Query Processing Method. Even though the latter was written before the first version 2.3 ballot draft was published I do think that this is still a better approach to querying, since it is more straight forward. Unfortunately there is currently an inflation of different querying protocols for HL7 but this might reflect the fact, that the optimal solution to this problem is not yet found. While my proposal is quite similar to the ``Event Replay'' method of receiving Answers it still improves the way of posing queries.
HL7 v3.0 does extensive data modeling work in order to make the standard more consistent. However, process modeling is still a somewhat open issue and probably much less understood as data modeling. But as process modeling is as important for protocol standardization, there is still some work to do. Here is my paper on Petri Nets, which can be helpful in understanding the issues involved.
See also The World of Petri Nets.
Frank Oemig has compiled an awesome database that contains all the HL7 specifications from version 2.1 up to 2.3. You can browse through the HTML that he produced from this database here.
Finally, it is important to note that I was able to do all the developement work on my ProtoGen/HL7 project using not a single bit of proprietary software! Thanks to all the people working on the GNU project and on FreeBSD. Thus it was only natural for me to give away my work as free software as well. It is worthwhile to consider the alternative that free software adds to the software industry. Please read Free Software -- the solution to the Open Systems dilemma.
Please note the following interesting software developments. They are dealing with object oriented communication, database interfacing and distributed multiprocessing. I consider using them for my comunication project.