Site icon Hay on FHIR

Talking with a Clinician

So I was talking with one of my colleagues at Orion Health today – a clinician who has just joined us and wanted to understand what FHIR was – to a reasonable degree of detail. I thought I’d summarize our conversation here as it’s useful to record what a clinician found interesting, and wanted to know about.

We mostly covered the content side of FHIR, rather than the API/Exchange side. Highlights were:

We talked a bit about clinical safety and governance – especially with regard to extensions.

The whole concept of ‘profiling’ – adapting the core resources for real world use – was really the most interesting part of the conversation, and we agreed that it was important that clinicians need to be deeply involved in this process – it’s an integral part of the practice of medicine (at least the recording, reporting and sharing parts) so it’s important that those of us who are going to be the most affected (the clinicians) get involved early on. While there will be tooling to make this easier, it is important to understand the underlying concepts – and it’s not that hard (when expressed the right way 🙂 ).

We talked about how you could divide the resources into 2 main groups.

When it comes to profiling (or ‘tweaking’ as my colleague called it), it is useful to understand the ‘definitional’ resources. These are resources (just like the ‘real things’ ones) and are stored and retrieved from a server (just like the ‘real things’). The ones that people are most likely to need to understand are:

(There are others – but these are enough for the moment)

The following diagram shows how these relate to each other (the ‘definitional’ resources are in yellow).

From this you can see that the profile (a StructureDefinition resource) is the conductor of the whole system.

And other resources, in turn, refer to the Profile.

And finally note that the extension in the resource instance still points to the extension definition. It’s important to be able to process a resource even without knowing what profile (or profiles) a resource instance is conformant to.

You can see this working using clinFHIR. Start the application then select the Resource builder. After selecting a patient, choose a resource type – say ‘Condition’ – and clinFHIR will display all the elements of Condition. Now, behind the scenes clinFHIR has loaded the profile (StructureDefinition) for the core Condition resource from the registry server, then parsed that resource to produce the display you see. There is enough information in the profile to create the complete rendering – the datatypes, descriptions, multiplicity, required fields and so forth.

Select the ‘code’ element (by clicking on the CodeableConcept datatype) and enter a search term into the text box on the right side – say ‘asthma’. After a short delay you get a list of matching elements and you can make your selection from the list. To do this, clinFHIR examines the profile entry for this element which has a reference to the ValueSet that has been bound to it. It then calls the Terminology server which uses the ValueSet to retrieve the list of matching values to present to the user.

All of this can be done programmatically by examining information in the Profile.

What’s really cool is that because profiling uses the same mechanism, it works just as well for ‘tweaked’ (profiled) resources.

In the top bar, select the radio button ‘profiled resources’ then click the ‘Find New’ link that appears just to the right. In the dialog that is presented, select the patient resource as the resource type and click search. The profile ‘US Data Access Framework (DAF) Patient Profile should appear. Click on it, and then click Select in the upper right hand corner. (Behind the scenes clinFHIR is performing a query against the registry for all Profiles that have been made against Patient).

When the elements of the profile are displayed, note that some parts of the resource shows quickly while other parts have a delay. What’s happening is that clinFHIR first loads the profile you selected, and then for each extension described in the profile loads the extension definition for that extension from the registry. It can then use that information to build the display in exactly the same way as for the ‘normal’ elements. And notice that most of the extensions are in red – they are required. So, to be conformant with this profile you need to provide values for those extensions.

Oh, and take a look at the resource instance that is being created:

See how the extension ‘mothers maiden name’ has the value (Smith), but also has a url that points to the extension definition? The recipient can always find out what an extension means.

So – an enjoyable conversation worth recording!

Oh – we’ve been referring to the ‘Terminology Server’ and the ‘Registry’. These are the ‘roles’ that a server can assume, we we discussed in the last post.

Exit mobile version