Getting EMIS Immunisations into Exeter

This short blog is one of those really frustrating scenarios where one service exports in a certain format but imports for a 2nd service only accept a different format. Welcome to the world of disjointed healthcare!

Before I explain further this might be hitting a sledgehammer with a walnut and please let me know if there is an easier way from EMIS

Exeter is a services which manages our claims, payments, immunisations and other operational aspects of the surgery. It’s a connection between us and other providers who want to receive or give data.

One of the many tasks we have to do is to export childhood immunisations from EMIS and import them into Exeter. Unfortunately though the export from EMIS isn’t quite in the format required to import into Exeter and I’ve heard of some surgeries having to manually import each immunisation in!


I’ve created a simple mapper which takes the EMIS export and converts this into a format which is importable into Exeter

For non-techies

You can find the files you need below. Simply extract the zip file into a folder and run the files. There are 2 executable files, one for the 2 year olds and one for the 5 year olds. Choose the relevant file for the list you are converting. The resulting Exeter ready file will appear on the desktop for you to upload.

For Techies

This is a simple mapping application using MVVM with WPF with a sprinking of the onion architecture although this is all in one assembly, the folders are positioned to separate the code out. This is ok as the codebase is so small.

The main meat of the app happens when you click on the Export to Exeter Button. This fires of an async wait which fetches the data and imports it into an in memory Repo then exports the csv to the desktop

The Repo object imports the data, the ExportCSV exports the data

This code imports the Emis File using CsvHelper. CsvHelper has evovled into an amazing library to facilitate csv to models mapping and models to csv and is brilliant.

Noticed I’ve used an interface in the core assembly, in case in the future I want to do something extra like import the data into a persistent store or separate out the code into assemblies but to be honest I’m don’t think this is needed with this code.

Once the emisData is imported in (in the form of EmisModels) they are then converted to ModelExeter Objects conforming to the Exeter required input csv format

We then use our old friend CsvHelper to export the Models to csv

Nice and simple!

I thought about having both 2 and 5 year olds as one application but I didn’t want to confuse users so left them as 2 separate projects. For future refactoring they should be in one project to avoid unnecessary duplication.

You can find the 2 year code here on GitHub

You can find the 5 year code here on GitHub