Generalised CR/MPI Integration

Hi all,

Extending and igniting an interesting discussion initiated here by @eudson. Let’s dive in!

OpenMRS has previously been integrated with HIE components, including a CR/MPI. Thus, this thread isn’t about figuring out how to integrate an CR/MPI but rather about implementing generalized support.

Existing O3 CR/MPI integrations:

Various implementations have emerged for CR integration in O3:

KenyaEMR:

KenyaEMR appears to have the simplest use case. The EMR queries for Patients from the registry by an Identifier.

UgandaEMR:

UgandaEMR supports both a simple and advanced mode for patient matching. This should work perfectly; the only issue is the duplication of fields, which forces the registration clerk to capture some fields twice. The UgandaEMR team had to resort to this approach because it was their best option to work within the premises of the supported configuration options within registration.

SIGDEP-4:

Capture demo:


Patient CR review:

We had to fork the Registration ESM to implement the workflow above. The registration clerk captures the demographics, then proceeds with “Next”. A POST search is made to the CR, returning the found matches; the clerk decides whether to start over or submit the drafted patient as is. (We used a modal here, which may not conform to the O3 aesthetics; hopefully, the UX experts will suggest a better paradigm).


Generalizing CR support

Patient Registration: We need to figure out how to accommodate mutual workflows, especially the “advanced mode”. This will help mitigate redundancy in the registration form. It should be possible for me to repopulate the form from a CR search result without navigating to the standard patient search (assuming this support will be added as part of this initiative).

Patient Search: We should support both basic and advanced modes as per the PDQm spec.

Backend CR Client: There are probably many client registries out there, but within the ecosystem, OpenMRS has been integrated with a handful of CRs:

Looks like most MPIs support PDQm or at least FHIR (It’s fair to say that PDQm is a subset of FHIR search) which gives us a landscape of abstraction. We can develop a generic MPI module that basically:

It seems most MPIs support PDQm or at least FHIR (It’s fair to say that PDQm is a subset of FHIR search), giving us a landscape of abstraction for developing a generic MPI module that:

  • Registers the OpenMRS local node to the hub, or simply connects to the MPI for simpler setups.
  • Implements a lightweight API layer that follows the PDQm profile.
  • Defines and exposes necessary endpoints (based on FHIR) in the web layer:
    • Patient Search
    • Patient Creation
    • Patient Matching
    • Patient Linking & Unlinking
    • Patient Deletion
    • Etc

The above is probably not close enough to the ideal approach; that’s why I’m reaching out to you for your thoughts!

cc: @ibacher @mksd @burke @mseaton @aojwang @slubwama @janflowers @caseynth2


In conclusion, the discussion surrounding the integration of CR/MPI in OpenMRS is both intriguing and essential for advancing healthcare systems. By examining existing implementations and considering the generalization of CR support, we pave the way for more efficient workflows and improved patient care.

Cheers!

7 Likes

@samuel34 great topic, nice to see this coming back up.

When you talk about the advanced mode are you talking about the Advanced search results pulling patients from external datasources as per @pauladams designs illustrated here and the implementation done by @OHRI (check screenshot bellow)?

Also the backend support of a generalised integration has been started already by @pmanko and @amugume on this module.

This whole idea is inline with what was discussed during the OPD Workshop a couple of weeks ago which is basically the intention of having a layer that allows OMRS to speak with the different systems in a generalised way (based on the context) - what the @Mekom team has started with ozone.

Happy to be part of this conversation.

4 Likes

When you talk about the advanced mode are you talking about the Advanced search results pulling patients from external datasources

The search functionality can be categorized into two modes:

  1. Basic: This mode allows searching by an Identifier or the patient’s name.
  2. Advanced: In this mode, a refined search is conducted, with additional data points such as names, gender, date of birth (DOB), etc., directly contributing to the score or results.

basically the intention of having a layer that allows OMRS to speak with the different systems in a generalised way (based on the context) - what the @Mekom team has started with ozone.

Interesting! Has the work regarding the CR already commenced? Is there an existing epic? Is this a perfect time to set up a squad?

1 Like

For those interested in this discussion and more, please note that CR integration will be one of the topics to be discussed during this week’s TAC call. The call is scheduled for 15/02 (This Thursday) at 17:00 EAT. You can join the call here.

6 Likes

Here are some links for the dev work we were doing on the client registry module:

https://openmrs.atlassian.net/jira/software/c/projects/HIE/issues/?filter=allissues

2 Likes

@rugute - This may interest you given the work you are doing in migrating to o3 and the need to hit CR when registering a patient. This may be helpful for patient registration and patient search.

2 Likes

Hey @samuel34, do you have consensus on what an MVP would look like? Does it make sense to aim for the simplest use case and then iterate further? As there’s overlap in what Palladium (and now AMPATH) already have, should we adopt what’s common in both as a first draft?

2 Likes

Let’s consider what I-TECH CIV and UW have already existing in Côte d’Ivoire as well for the overlap. Maybe it’s a matter of quick consensus among the groups here that have existing work? I absolutely agree with the simplest use case to start!

PS - I think I was on task to outline some use cases, but have been in a retreat and swamped since then. I’ll do that today and tomorrow. Please hold me accountable for that! :slight_smile:

2 Likes

I would break this down into two tiers:

  1. Backend - A generalised backend solution (An OpenMRS module)
  2. Frontend - Configurable UI components ie. Registration and Search

For the backend tier, we need to ascertain whether all the common registries at least support FHIR; If not do we want to natively support transformers or depend on mediators like OpenHIM? For the frontend, the common use cases will also be our yardstick for defining the configuration options.

In summary, I agree with you! We should base on existing implementations to derive general use cases for the MVP. We can then evolve with future iterations. I tried to paint a picture of CR integration for a few implementations within registration from a UI POV but not overwhelmingly.

Will be glad to learn about your experience.

2 Likes

So: it’s time for us all to hop on a call about this MPI/CR feature, so we can move this forward.

It’s surprising this feature has gotten stuck half-way to the refapp given it’s already used in production for over 6 months in Kenya and Uganda. :wink:

@dkigen and @samuel34 can we get together this Thursday immediately after the O3 squad call to unblock / make the next steps painfully clear? (5pm EAT?) Or maybe at the end of the O3 Squad call itself?

1 Like

Sorry for the delayed response. We are meeting today with @pmanko, @dkigen, @eudson, and possibly @alaboso at 6:00 PM EAT; Zoom link.

3 Likes

@grace and I worked on user stories yesterday for you all @samuel34! She’ll go through those today with you. :slight_smile:

I missed the call but is the recording available ? @grace

@tendomart here is the recording => https://youtu.be/WrtyeWiP3rY

Next steps:

A slack channel was created, join here.

5 Likes

Thanks alot @samuel34

Can we also add another possible use case for Cervical Cancer Patient screening, though I believe this would be a re-write as the implementation of the workflow was different and and done in 2.X

@tendomart what is the connection btwn Cervical CA Screening and MPI patient lookup? Please write some user stories to communicate this :slight_smile:

I don’t really know what would be special about Cervical CA Screening that would not apply to other conditions - so I believe all the current user stories and registration workflows should be the same, right? Or maybe there’s something I’m missing?

Hi @grace

Well, I just wanted to share this as something we implemented at the UCI,

  1. It is an HIE that has OpenCR as registry, HapiFhir as MPI and OpenMRS 2.12.0.

  2. It has other systems (HIE)plugged into the HIE to communicate with OpenMRS, there may arise need to plug other clients like Lab and radiology and hence need to harness this client-registry module and CR/MPI integration so patient search and matching burden may be taken from the EMR .

Due to absence of this client-registry module we had to do alot of work to get all these components to work together.

Hi all,

Quick update: We merged the existing skeleton code implementation here. As a next step, I’ve filed a couple of tickets to track the next tasks. The tickets are under a “curation phase” so feel free to validate the requirements.

  1. Consolidate CR Service => [HIE-3] - OpenMRS Issues
  2. Implement a RESTful API => [HIE-6] - OpenMRS Issues
  3. Support OAuth2 and Token-based auth => [HIE-4] - OpenMRS Issues
  4. Make the Patient Interceptor configurable => [HIE-5] - OpenMRS Issues
3 Likes

Hot off the press! Demo video from @reagan showing an OpenMRS isntance connecting to an MPI/Client Registry:

4 Likes