On this page:

11.0Enterprise Master Person Index (EMPI)

 

<cdr:fail cdr:afterVersion="2020.08"/>

This is a new feature introduced in Smile CDR 2020.08 and HAPI FHIR 5.1.0. Feedback is welcome. Please get in touch to discuss if you are interested in implementing EMPI during the early availability of this new feature.

Smile CDR EMPI works for both Patient resources and Practitioner resources, but independently for each. (Patients are never compared to Practitioners.) In the EMPI documentation, we use "Patient" to refer to either a Patient or Practitioner.

EMPI maintains links between Person and Patient resources, keeping track of when two Patient resources refer to the same Person. The FHIR id of this Person plays the role of a unique identifier for that person across all of the different source systems. For example, if the FHIR repository consolidates lab data, medication data, claims data etc from disparate systems that all maintain their own Patient records, all of those records are tied together as belonging to the same Person via the Person resource they link to.

Smile EMPI is designed to be flexible to work on different kinds of enterprise environments. Below are some example EMPI scenarios.

Create-only EID mode and multiple EID mode

Some enterprises have a strict intake process that identifies all patients with a uniquely assigned Enterprise Identifier (EID) and all interactions with the different that enterprise provide this EID. Smile EMPI has EID management configuration options to support this scenario. By default, the EMPI system does not allow updates to an EID. This can be disabled via property. There is a similar property which controls the ability for a Patient or Person to hold multiple EIDs simultaneously; this is disabled by default.

Rule-based matching

Other enterprises, however, need to consolidate patient records from different systems where it is not known beforehand which patient records refer to the same person. To support this scenario, Smile EMPI provides a rich set of EMPI Matching Rules to algorithmically detect when to Patient records refer to the same person. Based on the rule configuration, some patients will be identified as exact matches and automatically linked. Others may be flagged as possible matches or may identify that two Person records in the system may be duplicates. Smile CDR provides an EMPI User Interface to manually resolve these possible matches and duplicates. See Sample EMPI Rules below for an example of a rules file.

Analytics

Smile EMPI can also be used to support business analytics, automatically linking batch data from different systems. In this scenario, the FHIR repository might be reset before each load, or it may link to external records maintained in a data warehouse.

11.0.1Enabling and Configuring EMPI

 

To enable EMPI on a FHIR repository, several modules must be used together. The following diagram shows how these modules relate to each other.

EMPI Components

This diagram shows the following modules:

Cluster Manager Module

The Cluster Manager Module contains the configuration used to connect to the selected message broker.

See Message Broker for information on how to select and configure a message broker. By default an embedded Apache ActiveMQ server will be used, and this is acceptable for testing purposes but an external broker should be used in a production scenario.

FHIR Storage Module

The FHIR Storage Module must be a relational database (EMPI on Mongo is not currently supported). EMPI uses a Subscription Module to process incoming resources asynchronously. EMPI uses the FHIR Storage Module specified by the Subscription Matching Module it depends on.

Subscription Matching Module

A Subscription Matching module should be created, with a module dependency on the chosen FHIR Storage module. When EMPI starts up, it will create two subscriptions: one to match all incoming Patient resources and the other to match all incoming Provider resources. These subscriptions have a "message" channel type and submit the incoming Patient and Provider resources on the "empi" channel.

EMPI Module

The EMPI Module subscribes to the "empi" channel and processes the incoming Patient and Practitioner resources, creating EMPI links according to the rules configured in this module. See HAPI FHIR EMPI for details on how to EMPI rules are configured.

11.0.2Troubleshooting

 

The EMPI Troubleshooting Log can be helpful in diagnosing issues relating to empi processing.

11.0.3EMPI User Interface

 

The EMPI User Interface is under active development. See EMPI Operations for a description of the back-end operations that support this user interface.

Sample EMPI Rules

{
   "candidateSearchParams": [
      {
         "resourceType": "Patient",
         "searchParams": ["birthdate"]
      },
      {
         "resourceType": "*",
         "searchParams": ["identifier"]
      }
   ],
   "candidateFilterSearchParams": [
      {
         "resourceType": "*",
         "searchParam": "active",
         "fixedValue": "true"
      }
   ],
   "matchFields": [
      {
         "name": "family-name-double-metaphone",
         "resourceType": "*",
         "resourcePath": "name.family",
         "metric": "DOUBLE_METAPHONE"
      },
      {
         "name": "given-name-double-metaphone",
         "resourceType": "*",
         "resourcePath": "name.given",
         "metric": "DOUBLE_METAPHONE"
      },
      {
         "name": "given-name",
         "resourceType": "*",
         "resourcePath": "name.given",
         "metric": "LEVENSCHTEIN",
         "matchThreshold": 0.8
      },
      {
         "name": "family-name",
         "resourceType": "*",
         "resourcePath": "name.family",
         "metric": "LEVENSCHTEIN",
         "matchThreshold": 0.8
      },
      {
         "name": "birthdate",
         "resourceType": "*",
         "resourcePath": "birthDate",
         "metric": "DATE"
      },
      {
         "name": "gender",
         "resourceType": "*",
         "resourcePath": "gender",
         "metric": "STRING",
         "exact": true
      },
      {
         "name": "family-name-soundex",
         "resourceType": "*",
         "resourcePath": "name.family",
         "metric": "SOUNDEX"
      },
      {
         "name": "given-name-soundex",
         "resourceType": "*",
         "resourcePath": "name.given",
         "metric": "SOUNDEX"
      },
      {
         "name": "city",
         "resourceType": "*",
         "resourcePath": "address.city",
         "metric": "LEVENSCHTEIN",
         "matchThreshold": 0.8
      },
      {
         "name": "address-line",
         "resourceType": "*",
         "resourcePath": "address.line",
         "metric": "LEVENSCHTEIN",
         "matchThreshold": 0.8
      },
      {
         "name": "state",
         "resourceType": "*",
         "resourcePath": "address.state",
         "metric": "LEVENSCHTEIN",
         "matchThreshold": 0.8
      },
      {
         "name": "postal-code",
         "resourceType": "*",
         "resourcePath": "address.postalCode",
         "metric": "LEVENSCHTEIN",
         "matchThreshold": 0.8
      },
      {
         "name": "family-name-caverphone2",
         "resourceType": "*",
         "resourcePath": "name.family",
         "metric": "CAVERPHONE2"
      },
      {
         "name": "family-name-caverphone1",
         "resourceType": "*",
         "resourcePath": "name.family",
         "metric": "CAVERPHONE1"
      },
      {
         "name": "name-prefix",
         "resourceType": "*",
         "resourcePath": "name.prefix",
         "metric": "STRING"
      },
      {
         "name": "family-name-normalize-substring",
         "resourceType": "*",
         "resourcePath": "name.family",
         "metric": "SUBSTRING"
      },
      {
         "name": "given-name-normalize-substring",
         "resourceType": "*",
         "resourcePath": "name.given",
         "metric": "SUBSTRING"
      }
   ],
   "matchResultMap": {
      "given-name-double-metaphone,family-name,birthdate,gender,address-line,city,state,postal-code": "MATCH",
      "given-name-double-metaphone,family-name,birthdate,gender": "POSSIBLE_MATCH"
   },
   "eidSystem": "http://hl7.org/fhir/sid/us-ssn"
}