HL7 (Health Level Seven) is an ANSI standard for the exchange, integration, sharing and retrieval of electronic health information between disparate systems. Each HL7 message defines the purpose for the message being sent, for example, a “patient admit,” “patient discharge,” “update patient information” or “patient merge” message. Clients such as healthcare providers will typically transmit different types of HL7 messages to be ingested by a data store.
A data store that ingests HL7 messages in an order other than they were sent by clients is at risk of falling out of synchronization with the clients, and/or containing incorrect or out-of-date data. Accordingly, conventional data stores perform ingestion of HL7 messages in a serial fashion, establishing a separate, stand-alone process for each combination of a client and a message type that is dedicated to ingesting the HL7 messages of that type from that client in the order that that client created them.
The inventors have recognized that conventional approaches to the ingestion of HL7 messages have significant disadvantages. For example, where ingestion is being performed on behalf of a large number of clients, the computing resources needed to maintain a separate process for serialized ingestion of each type of each client's messages is very large. Also, in order to maintain the integrity of the data store contents across hardware outages, rigorous, specialized fail-over mechanisms must be employed. The approach is also poorly-suited for parallel processing, multi-tenant environments, such as cloud computing environments.
In response to recognizing the foregoing disadvantages, the inventors have conceived and reduced to practice a software and/or hardware facility for safe parallelized ingestion of data update messages, such as HL7 messages (“the facility”).
The facility uses a load-balanced software process within a multi-tenant environment to simultaneously process different types of messages from different source systems. In some embodiments, the facility performs this processing using parallel processing techniques, in which the same or equivalent programs are executed simultaneously by multiple units of execution, such as separate machines, processors, cores, virtual machines, processes, threads, and/or other such resources. In some embodiments, the facility applies different processing rules for each tenant and ensures that the processed tenant data is stored within the tenant specific operational data store. This stored data can be accessed directly by the tenant, and/or programmatically accessed and analyzed by analytical applications on the tenant's behalf.
An HL7 “update” message contains a trigger event requiring that the receiving application extract additional patient demographic data elements and include them in the existing patient's record. The facility extracts and updates the demographic data for existing patient records without loss and/or misinterpretation of data despite the use of more efficient load-balancing techniques.
A typical hospital organization has multiple locations. Each location may have its own systems for Admissions, Medications, Labs, etc. When a patient visits a location, a visit number is generated. Multiple visits for the same patient may be grouped into a billing entity, usually an “Account”. Each location maintains a “folder” per patient. This folder contains all the accounts for the patient and assigns a unique number called “Medical Record Number” (MRN). The healthcare organization as a whole may maintain a single identifier for the person across all locations. This identifier is usually called the “Enterprise Master Patient Identifier” (EMPI). Treatment for the patient may precede the admissions process, such as in the case of a patient having a cardiac arrest or a patient involved in an accident. As a result, patient identification may not be accurate. Multiple identifiers may be created for the same visit by different systems within the same location. All of these issues result in persons, patients, accounts and visits being merged or moved. Patient safety is often dependent on correct data being surfaced to physicians, and this in turn depends on correct identification of the patient. Accordingly, In some embodiments, the facility accommodates a fluid patient identification process. An HL7 “merge person” message or “unmerge person” message contains a trigger event that requires the receiving application to merge/unmerge the records for a patient that was incorrectly filed under two different internal IDs. The facility merges/unmerges records for an existing patient across different institutions without loss and/or misinterpretation of data despite the use of load-balanced and probable out of order message processing techniques.
HL7 distinguishes between two modes of update. Both modes apply to repeating segments and repeating segment groups:
Each HL7 field can have one of three states: (a) populated, (b) not populated/blank/empty, or (c) null. In some embodiments, the facility applies incremental updates based on the three states without loss and/or misinterpretation:
A load-balanced environment is one where there are a cluster of computers all with the same software process(es) running on them so that the work can be shared by multiple computers and more work can get done within the same amount of time. Processing data in parallel means that data can be received and processed out-of-order.
The facility performs out-of-order processing of HL7 message data in a load-balanced environment by assigning and operating in accordance with message sequence numbers to enable the correct sequence of processing. Sequence numbers are unique across all tenants and their incoming tenant feeds, and message types. The facility generates sequence numbers based on a tenant-specific synchronized resource to guarantee uniqueness. In some embodiments, each tenant has its own data store which maintains the last issued sequence number. When a HL7 message or a batch of HL7 messages is received, the facility assigns the next sequence number ensuring the correct order of messages is maintained.
Once the sequence number is assigned, the facility extracts the required patient demographic data elements and includes them in the existing patient record in the correct order.
Another significant problem that the facility solves is the problem of how to process merge and move messages out of sequence. When a HL7 “merge person” message or “unmerge person” message is received, the facility merges/unmerges the records for a patient that were incorrectly filed under the wrong identifier(s).
By performing some or all of the ways described above, the facility allows the ingestion of data update messages, such as HL7 messages, to be performed efficiently and securely.
HL7 Messages are used to transfer electronic data between disparate healthcare systems. Each HL7 message sends information about a particular event such as a patient admission. The parser processes HL7 data. Each HL7 message consists of one or more segments. A “carriage return” character separates one segment from another. Each segment is displayed on a different line of text as seen in the sample HL7 message below. Each segment, when configured, represents a table with the data ingestion pipeline data store:
This term refers to data that is updated when it already exists and inserted when it does not. It is the antithesis of an insert-only data storage strategy.
As an example, the two messages shown below in Tables 2 and 3 are being processed at a time when the collapse key has been configured as the value of the data element PID_3 (000001971):
The resulting PID table, shown below in Table 4, has only one row, with an updated address:
A collapse key uniquely identifies a row of data. The sample message shown below in Table 5, contains the following segments: MSH (message header), PID (patient identification), and PV1 (patient visit information).
The process of configuring a collapse key involves identifying which field or combination of fields will uniquely identify the HL7 segment data. It also configures which “collapsed” data will be stored within the system. If the collapse key is not configured for a segment, then that segment's data will not be stored within the system as a separate “table” of “collapsed” data. While the facility in some embodiments always stores the raw message, it only collapses data that has been configured as a collapsed key. The same segment can be used to configure multiple collapse keys—this results in different “collapsed views” of the data.
In act 1004, if the target entity determined for the message by the facility exists in the data model, then the facility continues in act 1006, else the facility continues in act 1005. In act 1005, the facility creates in the data model a placeholder for the target entity determined for the message. In act 1006, the facility applies the message to the target entity. In act 1007, the facility copies the sequence number of the message to be the new last-processed sequence number for the field. After 1007, this process concludes.
A typical hospital organization has multiple locations. Each location may have its own systems for Admissions, Medications, labs, etc. When a patient visits a location, a visit number is generated. Multiple visits for the same patient may be grouped into a billing entity, usually an “Account”. Each location maintains a “folder” per patient. This folder contains all the accounts for the patient and assigns a unique number called “Medical Record Number” (MRN). The healthcare organization as a whole may maintain a single identifier for the person across all facilities. This identifier is usually called the “Enterprise Master Patient Identifier” (EMPI). Treatment for the patient may precede the admissions process for example: a patient having a cardiac arrest or a patient involved in an accident. As a result, patient identification may not be accurate. Multiple identifiers may be created for the same visit by different systems within the same facility. All of these issues result in persons, patients, accounts and visits being merged or moved. Patient safety is dependent on correct data being surfaced to physicians, and this in turn depends on correct identification of the patient. Storage of data must account for the fact that patient identification is a fluid process. An HL7 “merge person” message or “unmerge person” message contains a trigger event that requires the receiving application to merge/unmerge the records for a patient that was incorrectly filed under two different internal IDs. Correlation is the process of merging/unmerging records for an existing patient across different institutions.
In some embodiments, the facility uses five correlation types:—Provider, Person, Patient, Encounter set and Encounter.
The facility's operation in a number of scenarios is discussed below.
Scenario 1: Move encounter to different patient on explicit instruction triggered by new HL7 message (explicit handling)
1—Sequence Number 3 is processed first→Encounter X contains a reference to D and sequence number is 3. If patient D does not exist the message is either placed back in the processing queue or a “placeholder” identifier for patient D is created.
2—Sequence number 1 is processed next. Because it is a “re-parent/move” instruction and sequence number 3 has already been processed this is a no-operation as it pertains to correlation software process.
3—Sequence number 2 is processed next. Because it is a “re-parent/move” instruction and sequence number 3 has already been processed this is a no-operation as it pertains to correlation software process.
Scenario 2: Move encounter to different patient due to data inconsistency (implicit handling)
It is the responsibility of the correlation software process to guard against inconsistent data. For purpose of explanation assume Account is mapped to EncounterSet and “Medical Record Number” (MRN) is mapped to Patient:
An “Identifier Consistency Conflict” occurs if the 2 implied parents in the correlation type hierarchy each have a different source identifier. Sample HL7 message 2 detects a conflict because Account123 was previously assigned a different correlation parent. Conflicts like these are logged and may be resolved automatically based on policies configured by the tenant. The following scenarios provide details of how this works.
Scenario 2(a): The tenant has configured a policy to re-parent the identifier when a data inconsistency occurs (keep latest):
Step 1—Sequence Number 3 is processed first->Encounter X contains a reference to C and sequence number is 3. If patient C does not exist the message is either placed back in the processing queue or a “placeholder” identifier for patient C is created.
Step 2—Sequence number 1 is processed next. Because it is a “re-parent” instruction and sequence number 3 has already been processed this is a no-operation as it pertains to correlation software process.
Step 3—Sequence number 2 is processed next. Because the software process was configured to “re-parent” and sequence number 3 has already been processed this is a no-operation as it pertains to correlation software process.
Scenario 2(b): The tenant has configured a policy to Ignore the data inconsistency (keep first):
1—Sequence Number 3 is processed first->Encounter X contains a reference to patient C and sequence number is 3.
2—Sequence number 1 is processed next. Because it's an “ignore” instruction and sequence number 1 is smaller than 3->Encounter X replaces the reference and now references patient A.
3—Sequence number 2 is processed next. Because it is an “ignore” instruction and sequence number 3 has already been processed this is a no-operation as it pertains to correlation software process.
When sequence is in correct order:
Result after first execution
Result after second execution
When sequence is out of order:
Result after first execution
Result after second execution
the facility also solves the problem of processing out-of-order snapshot or incrementally changing data based on the three states described above when so configured.
Out-of-sequence processing of data that needs to be removed is achieved by using a technique known as “soft delete”. This means the data is not permanently deleted but only flagged as “removed”. If a record with a higher sequence number has been “soft deleted” a transaction with a lower sequence number containing changes to the “soft deleted” record becomes a no-operation.
Processing incrementally changing data that is out of sequence requires data to be separately stored for each HL7 field in the message. Each field maintains the last sequence number to be processed.
It will be appreciated by those skilled in the art that the above-described facility may be straightforwardly adapted or extended in various ways. While the foregoing description makes reference to particular embodiments, the scope of the invention is defined solely by the claims that follow and the elements recited therein.
The present application claims the benefit of U.S. Provisional Patent Application No. 62/412,166, filed on Oct. 24, 2016, and U.S. Provisional Patent Application No. 62/421,145, filed on Nov. 11, 2016, which are each hereby incorporated by reference in their entireties. In cases where an application incorporated by reference and the present application conflict, the present application controls.
Number | Date | Country | |
---|---|---|---|
62412166 | Oct 2016 | US | |
62421145 | Nov 2016 | US |