Site icon Hay on FHIR

FHIR enabling an Immunization registry – part 4

So we’ve talked about how to represent an immunization program both in the abstract (the overall definition of a national plan) and the specific (the plan applied to an individual). In addition, we discussed how to submit the actual administrations to the registry.

What we haven’t really talked about is how to measure the performance of an individual against the plan.

There are (at least) a couple of ways that we could do that. Note that both do assume that the patients record of administrations is available – which is kinda obvious really.

First off, recall from the last post that the PlanDefinition described the administration of a number of specific ‘series’ of administrations (e.g. a specific vaccine) over a period of time, with a set of ‘doses’ represented as a dose number within the series.  That series/dose was copied into the ImmunizationRecommendation and eventually into the actual record of administration – the Immunization. (Incidentally, we didn’t mention this, but an Immunization can also say why a particular does wasn’t done – e.g. because of allergy or refusal to allow administration)

It seems logical that if we have the series/dose information in both plan and administration, then determining if someone is up to date is a simple matter of checking whether there are the right number of Immunizations that the person should have given their age, right?

But that won’t work quite so well, as the immunization plan will change over time as new vaccines become available and new diseases need coverage (and others don’t). And we can’t really assume that all Immunizations will have this information anyway.

An alternative way is to think of this in terms of the disease being covered, rather than what has been administered. Here’s how it might work.

The way that we report the differences could also be done in a number of ways.

Another consideration is timing of the ‘catch-ups’ – when should they be given, especially as the child still has to complete the remainder of the plan. I’m going to duck on this one – I suspect that it could be complicated to get right for an individual so it may be better to report on what is needed, provide guidelines to how to do it, and leave it to the user to work it out.

So let’s assume that we can figure out the catch up vaccines the child needs, but are going to let the client figure out the timing (with guidance) – how to report that back to the client? The most obvious way is to add this to the ImmunizationRecommendation resource. We can set the recommendation.forecastStatus to ‘overdue’ and the forecastReason to a code of some sort that indicates there is a missing vaccine in the sequence. But, there may be other ways…

To wrap up this post, let’s take a look at a sample app I created that allows you to look at this in real time – you can find at clinFHIR.com/immRegistry.html.  It’s a simple thing that shows how a client app might interact with the information from the registry.

There are a couple of tabs.

The first shows the plan as a tree. Clicking any of the elements displays the details (as json) to the right. If it’s a ‘top level’ action (representing the age of administration) then the action from the plan is shown. If it’s a detail action (an actual vaccine) then the ActivityDefinition is shown as well. If you need to, refer to the post where we discussed this.

The second view shows the details of a sample patient and is a bit more interesting.

In the yellow bar across the top is the patients current age. Changing that will update the display below, which has 4 main parts.

This is really intended to show the sort of functionality that a client could implement, if the data and functionality were available. You could imagine the immunization nurse using a tool like this to plan out the catch up programme – perhaps saving the output as a customized ImmunizationRecommendation on the registry so anyone can see it. You’d want some way to allow the user to set the dates due as well of course.

And finally, a list of the API calls needed for this.

If you were going to save the catchup as an ImmunizationRecommendation, then you’d need to PUT that as well (There’s a bit more thought needed about the best way to manage these if they are to be persisted).

And we’ll also need an API for the disease analysis if not done on the client – haven’t quite worked that out yet either.

Exit mobile version