DevDays presentations

Here are the presentations from the recent Developer days in Amsterdam

There are some great presentations here…

Should I use FHIR in production?

A question was asked today on the Implementer’s chat that has been asked many times before: “Should I be using FHIR in production today?”

There are a number of answers to this – ranging from the fact that quite a lot of people actually are, through to some comments in Grahame’s keynote at the Amsterdam devdays concerning “Working Interoperability” and talking about the resource maturity model.

But I thought the most succinct one was this from James (HAPI creator)

the point that i’ve always made when trying to make the “net benefit” argument is that even if you’re using FHIR in a completely closed environment, the alternative is to do your own data modeling and API design. no matter how good a job you do of that, you still have to do the work, and you’ll still never come up with something as robust as FHIR since FHIR has many peoples’ implementation experience baked into it. add to that the fact that FHIR is well documented (so you don’t need to do that part either) and you have a very compelling case.

Posted here so I can find it when the question is next asked!

Slicing extensions with FHIR

So recently I wrote about a simple ‘extensions editor’ that we created to allow our Orion Health developers to create Extension Definitions (actually StructureDefinition resources of course) to describe the extensions they were creating when developing FHIR interfaces. I assumed that they were all ‘simple’ extensions – that is an extension that just had a single value – rather than extensions that were nested inside other extensions. Wrong!

These are  defined using ‘Slicing’, – so I needed to find out more about that works, and then implement it.

Read more of this post

Uncertain dates in FHIR

There are a lot of date properties in FHIR resources, but sometimes you don’t have the exact date. For example AllergyIntolerance has an ‘onset’ property which is a dateTime – but what if all we’re told is that they have been allergic to peanuts since childhood?

Well, assuming that a string is not as an option (as it is for Condition.onset for example) then one way is to use an extension. We’d add an onset property, but leave the value blank and just add the extension.

Here's what is looks like in JSON:
 "_onsetDateTime": {
   "extension": [
       "url": "",
       "valueString": "Since early childhood"

And in XML:

  <extension url="">
    <valueString value="Since childhood" />

Just for fun, let’s think about how we’d create an extension definition that describes that (remember that extension definitions are actually StructureDefinition resources).

Read more of this post

Resource Maturity Model

Blog post from Russ Leftwich on the FHIR resource Maturity Model …  Here’s the HL7 wiki page describing it, and the level for each resource is displayed in the resource list of the spec and also on the page for each resource.

And I’ll take the opportunity to promote the connectathon that is an integral part of the maturity process – here’s the proposed process for deciding what tracks we can support at each one…

The next official one is in January, but there’s also one at the dev days next week (it’s not too late!) …

Mapping v2 to FHIR: JUTE

And another little snippet from the Implementers chat about a declarative mapping language for v2 mapping. It’s just a work in progress, but anything that helps with v2 -> FHIR conversion is interesting!

Organizations as CarePlan participant…

This conversation is from the Implementers Chat. It describes what is likely to be quite a common scenario, so I’m sticking it where for when I need to remember it.


We have a usecase where a Practitioner in small practice creates a CarePlan for a Patient and assigns himself as a Participant, and sends out this CarePlan using FHIR messaging to another Application. Over time, he creates CarePlans for hundreds of Patients. Now at one point in time he hires another MD to provide care to the same Patients. This would required sending out all CarePlans that are still active with the second MD being also mentioned as a Participant.

In order to avoid these massive retransmits, we would like to use a Group resource to group all active Practitioners and assign that Group as Practitioner to all CarePlan, and only send out the Group when a member has been added or is removed.

Now the problem is: CarePlan.particpant.member is defined as Reference(Practitioner | RelatedPerson | Patient | Organization)

This is actually just an example of a bigger issue, namely, if a Group of X is allowed, each Reference( X ) should ideally also allow Reference(Group)

Any feedback from the group?

Answer from Ewout:

Hi Theo, in this case, the group of MD’s are actually acting collectively and towards the same goal (taking care of the patient), so this informal group is actually an organization (note that the definition of Organization in FHIR is broader than in normal life):

“A formally or informally recognized grouping of people or organizations formed for the purpose of achieving some form of collective action. Includes companies, institutions, corporations, departments, community groups, healthcare practice groups, etc.”

I think organization matches your purpose, so the Organization becomes the “Participant”!

Thanks guys!

Creating (and finding) FHIR Extension definitions

We’ve talked on quite a few occasions about profiling in FHIR, and creating extensions when we need to represent elements that aren’t in the core resources. At Orion Health, we’re putting a fair amount of effort into FHIR (as are all forward looking vendors in this space) so we needed a way to more easily manage the extensions we need to create. Forge is an option – but our extensions are quite simple. clinFHIR has always been able to create extensions, but the process is klunky and we needed a better way.  So I’ve added an ‘Extension Editor’ to make this a bit easier.

Read more of this post