2009 Implementers Group Meeting Program Importing External Observations

Importing External Observations to OpenMRS

In the room

  • Carl
  • Win
  • Ben
  • Paolo
  • Pinkie
  • Burke
  • Russell
  • Nicholas
  • Wayne
  • Claudio
  • James
  • Roger
  • Ignatio
  • Chris
  • Saira

Ideas

  • Migration: legacy systems to OpenMRS
  • Other systems (lab system) that output a certain type of data to OpenMRS
    • Carl thinks that the second one is more of a interoperability
    • This is not synch topics
  • There is an hl7 example on the wiki on how to import obs
  • There is an hl7 processor in OpenMRS to do export / import data from and to OpenMRS
  • XAware system to create a set of xml format that might be able to be used as a data import tool
  • Another alternative is the mapforce from xml spy
  • How would you map legacy data:
    • Build concept dictionary based on the legacy system
    • Get the concept and the structure in the legacy system
    • The import is not general enough. The import will be specific to the legacy system
  • Carl proposed to create a module to do the import
  • Burke (as always) proposed Groovy module to solve the import, he loves Groovy. See his archive:groovy example below.
  • Burke showed some examples on how to import data using Groovy. The Groovy module is out there in the modules repos http://modules.openmrs.org
    • import the legacy system database to flat file and use Groovy to load it to the OpenMRS database
  • Mirth server is another option to go. Check the interoperability notes on the wiki and there will be a topic slot on Mirth
  • eKapa system:
    • Take the front end the system and put OpenMRS as the backend of the eKapa
    • Another topic is how to sync several remote site
    • Another issue is eKapa datamodel is slightly different with OpenMRS datamodel
      • Mirth as an option to perform the backend migration and perform the datamodel translation using Mirth
  • Using XStream serialize your data from legacy database to xml format

Groovy Example

import org.openmrs.*

def createPatient(identifier, givenName, middleName, familyName, gender, birthdate) {

p = new Patient()
type = new PatientIdentifierType(1)
location = new Location(1)
pid = new PatientIdentifier(identifier, type, location)
p.addIdentifier(pid)
name = new PersonName()
name.familyName = familyName
name.givenName = givenName
name.middleName = middleName
p.addName(name)
p.gender = gender
p.birthdate = Date.parse('yyyy-MMM-dd', birthdate)
patient.savePatient(p)

}

def data = """4-2,Susan,D.,Schnoggenlocher,F,1994-Jul-04
5-0,James,Knox,Polk,M,1795-Nov-02"""

def patients = data.split("\n").collect{ it.split(",") }

patients.each { p ->

createPatient(p0, p1, p2, p3, p4, p5)

}