Monday, April 23, 2012

My Cloverleaf Experience

My first experience with Cloverleaf
and HL7 was when I was hired to work on the Interface team at the
University of Washington and Harborview medical centers.

I was brought in to assist the
conversion of a custom HL7 router over to the Cloverleaf product. My
job was to work with the customers that already had interfaces to get
their requirements, and then implement and test those implementations
with them.

At the same time they were rolling
out a new bedside terminal system that accepted HL7 feeds and I worked
the the Nurses at Harborview and the University of Washington medical
centers in order to give them the data stream they needed. This
involved message conversion and translation in order to change the
messages from the ones the main frame generated into ones that the
bedside terminals could accept.

I ran several rounds of user
acceptance testing. After each round of testing I would go back and
analyze what messages we had sent, why the messages had failed and then
programmed solutions to those problems into the interface. We went live
on schedule with full user acceptance.

I also worked on the custom C and tcl
router that was in-house and ran side by side with Cloverleaf, as well
as the interfaces that accepted and processed HL7 events into the data
ware house systems for both hospitals.

I was solely responsible for
generating the requirements for the sending and receiving interface for
the new lab system. This included adding the interfaces to Cloverleaf,
generating the TrixID, routing the messages to the receiving interfaces
and coding the interfaces on the receiving data warehouse to insert the
messages properly into the database. I worked with the receiving
systems to calculate the impact that the additional message load would
have on the data warehouse systems, including load and disk storage
requirements with weekly, monthly and yearly message storage space
requirements.

I worked with users on the lab system
and the data warehouse to generate the requirements document, program
the implementation, test everything on every interface, and then go live
into production. Several days before the go live we realized that the
HL7 interfaces on the lab system were not escaping sequences in several
fields, that was causing data to be dropped from those fields. I coded a
message intercept in cloverleaf to read that field and rewrite it so
they were property escaped for the down steam systems.

At Virginia Mason my first task was
to perform an upgrade of their Cloverleaf system to a new version. I
took events from the current system from the logs on every current
interface. I wrote a script to generate a shell script that would feed
the messages into each stage of the cloverleaf engine and save each
stage to disk as log files. I then compared the messages the new
version of Cloverleaf generated to the messages that the old system
generated to ensure that there was an exact byte for byte match with no
changes to the way that any message was generated.

I was also solely responsible for
converting the Virginia Mason batch billing system to Cloverleaf,
including writing a new conversion that converted a batch data feed into
an HL7 event feed for one interface. The interfaces on this system
would start, ftp a file, process the file, if needed, and then a sending
interface would start and send the batch file to the receiving system.
Any exceptions to picking up a file, processing it, or sending it would
generate an alert.

I also overhauled the Cloverleaf
alert system with a custom set of Tcl scripts. I configured Cloverleaf
to generate a standard who, what, when, where, why message to a script I
had written. Each alert was logged and then processed in a hierarchy
of system, alert type and level of severity to generate actions. These
actions were finely tuned in the log file so that we could send pages,
email message, or even restart an interface automatically at a low
level.

Every morning just before work the
previous days log file was processed and a report customized for several
interface clients, with a full report of all the interfaces going to
the people on the interface team.

I wrote a variety of tools in Tcl and
Perl at these jobs to start, stop, bounce, and get the status of
various levels of the Cloverleaf system in a more standard way. I wrote
scripts to compare different configuration files and present the
English differences between them. I also wrote tools to rip apart and
compare HL7 in Tcl, Perl and C.

At Virginia Mason I wrote scripts to
package and roll out everything needed to update a Cloverleaf
installation. This allowed controlled and rapid roll out of changes,
with the ability to just as rapidly roll back to a previous update if
anything went wrong.