Clinical data is hard to get right. One problem is to handle the unknown and/or uncertain semantic. I assume you all have met the challenge to model a value list of
yes
no
uncertain
unknown
not applicable
Norway is currently implementing a screening program for colorectal cancer. There will be #fhir messages with the data and extensively use of #snomed-ct. DIPS is developing #openehr models (templates and archetypes) to be used within our systems. We need to map these value sets into openehr somehow.
The straight forward solution is a DV_BOOLEAN element with some usage of null flavours.
OpenEHR has unknown as a null flavour. Some argue that unknown and uncertain are different statements.
I believe null flavour codes can be extended by the implementation, then harmonized with the openEHR terminology, because we need first the examples from the use cases to start defining new codes.
Current codes are few âŚ
⌠and semantics are not well defined in the specs AFAIK:
Data values are connected to spatial structures via the value attribute of the ELEMENT class of the representation cluster. This class also carries the attribute null_flavour, whose value indicates how to read the contents of the value attribute. Values from the openEHR null flavours vocabulary, including 253|unknown|, 271|no information|, 272|masked|, and 273|not applicable| are used to populate it. Only a small number of generic codes are defined, in order to avoid complex processing for most data instances, for which this simple classification of null is sufficient.
In some circumstances however, additional detail is required in addition to the null flavour code. Examples include reporting and where specific reasons for lack of data have medico-legal ramifications, e.g. âpatient was unconsciousâ, âpatient refused to tell meâ, âno reason providedâ. For these situations, the optional null_reason field may be used to record a specific reason.
@bna What does âuncertainâ mean? In what context - data presence/absence or clinical certainty. Serious question. We probably all use it differently unless itâs attached to a value set.
In the archetype modelling we only use Boolean data types when we are sure there is only a Yes/No or True/false clinical answer. Then the null flavours are related to whether data is available or not.
In clinical modelling reality we hardly ever use Booleans, because there are hardly any clinical situations where there is a clear black and white answer. Too often there are subtle shades of grey, which I suspect might be one of the reasons driving your request for âuncertainâ. In those âgreyâ situations in archetypes, we tend to use the pattern of CODED_TEXT with a codable value set âPresent/Absent/Indeterminateâ. In this context âindeterminateâ means âwe looked but we couldnât tellâ - and that could be because of inexperience or simply that it could not be discerned even by the most experienced clinician, but it is still a very important and valid clinical finding that needs to be recorded in its own right, not as a RM âflavourâ.
Just throwing this into the mix and stirring the soup
Having through this journey repeatedly, and going through it again with another âreigistry-typeâ dataset, Iâm definitely with Heather on this.
I avoid DV_BOOLEN almost everywhere and always prefer to use a DV_CODED_TEXT even if there are only Present/Absent type answers, partly for similar reasons to Heather boolean have a nasty habit if not staying that way â grey Booleansâ and also, at least the UK the present/ absents are often carried as SNOMED terms. It is also very hard to come up with standard terms for the unknown/indeterminate/equivocal variants, and right now mix and null_flavours are tricky to use (if mixed with non-null options) and I think should mostly be reserved for essentially technical gotchas, not for normal clinical recording.
Having said all that, I wonder if there is an opportunity to see if we can work out some standard patterns and usage, and make use of SNOMED terms as either the primary terms or mappings. That would require a conversation with SCT International about licensing but I sense there is a change in their approach with the Global Patient Set, so perhaps there is conversation to be had there.
First: Sorry for leading the discussion into DV_BOOLEAN We prefer DV_CODED_TEXT or DV_ORDINAL for most such use-cases. The boolean track is a rabbit hole we want to avoidâŚ
The issue I want to discuss is if we should do some work to find patterns to be used for there use-cases. I think it is of interest to have a shared way to express such statements. It would benefit the data for secondary use.
I donât have a clear idea on how to to this. Some options:
DV_BOOLEAN with an extended NULL_FLAVOUR
DV_CODED_TEXT with value set defined in archetype
DV_TEXT specialized with external terminologies to reuse the value set between elements
Archetype some ELEMENTS be reused
Other options?
The most common pattern we follow is DV_TEXT in archetype which we specialize into DV_CODED_TEXT with terminologies. It works somehow great.
The reason why I revisit this topic now is the work with coloscopy report where the national program develop FHIR resources. Here they use a combination of HL7 FHIR null flavour and/or absent terminologies combined with local value sets for the specific resource or quality registry. This is why I had an idea of making such value sets a part of the reference model.
I am not sure if it is a good idea. I can see pros and cons.
Pros:
Make such statements semantically defined
Suited for international models
Cons:
Many of the statements we find is not semantically well-defined. And as such it makes no sense to put them in a small box of terminologies
What about the use of DV_BOOLEAN in the context of deceased? Whether a patient is deceased is a yes/no clinical answer, but what if the information is stored ambiguously - e.g. âdeath or major disabilityâ in source?
Welcome to our world. Firstly I agree that you should avoid booleans, precisely because someone always wants to add a third option.
Specifically, your example of âdeath or major disabilityâ is a classic example of some designing a really badd questionnaire without any thought of if/how the data might be originally captured or used.
âDeath or major disabilityâ is a nonsense question about the patient unless you are really only interested if âreally bad stuff happenedâ perhaps as a part of pharmaceutical research. From a direct patient care perspective this makes no sense!!
However, this kind of mixed semantics is not uncommon when working at the registry/reporting end of data capture, or indeed at the very early stages of data capture , which is why there are number of âscreeningâ observation archetypes that recognise that this is not âprimary semantic dataâ
Thanks for that! I couldnât agree more. Weâre also having the conversation about the value vs. the reason for the value (e.g. value is unknown, because it wasnât captured or because it is stored ambiguously)
I am curious as to how it would work in this scenario if deceased is DV_BOOLEAN where allowable values are true or false. Does this mean deceased is false, the null flavour is âunknownâ and the null reason is something like âambiguous in sourceâ or is deceased null, with null flavour âunknownâ and null reason âambiguous in sourceâ?
Null Flavours are designed to be used when there is no value for âdeceasedâ at all, you cannot have a value AND a null_flavour - you have to choose between one or another
I think most of us try to avoid using null_flavours for âroutineâ expressions of âunknownâ i.e where we can expect âunknownâ to be a reasonable answer - I would be explicitly adding that to a coded_text list.
I would only use null_flavour for genuinely unexpected âunknownsâ, particularly where the element is mandatory i.e you canât get the information but the archetype insists - using null_flavour is the get out clause.
Remember too, that unless an element is mandatory, it can always be left empty.
Of course this is (I hope!!) good advice if you have a clean room to work in but sometimes you have no option but to replicate exactly what is already established, perhaps after a small battle to persuade them of the error of their ways!!
I have a question mostly for @birger.haarbrandt
Is null flavour supported by EHRBase?
What is the syntax then?
If it is not supported how you account for compulsory field whose information is unknown?
Well. The question was incomplete. What I would like to know is how you can treat data that can be unknown both from the template and the composition point of view. When I talk about the template I mean both the opt and the webtemplate (json for flat composition).
In fewer words can you write some example lines of what I have to put in both opt and webtemplate files and what I have to put in a composition in order to account in EHRBase for unknown data?
Ah, in this case its quite a general openEHR question. Unfortunately, Iâm âon the roadâ until the weekend. I hope that somebody can provide an example in the meantime. Otherwise, I will be able to provide an example next week.
thank you @birger.haarbrandt ,
Iâll appreciate very much the examples.
Itâs quite a general openEHR question but Iâm mostly interested in what EHRBase supports
thanks Ian. And for the same example do I have to do something in the template?
I try to explain better. Do I have to know beforehand what data can be absent and declare them in some way in the template (this data may be present or not) or it is something that must be done only at composition level?
I assume it is the latter. I donât always know in advance which data will be more susceptible to absence.
It would nearly always be a run-time âdecisionâ but occasionally (as per the example above) be a case where the archetype enforces mandation on a sub-score which is not recorded, only the total score. Iâm not sure TBH if you can constrain that in templates.