Stream: terminology
Topic: Multiple bindings
Chris Grenz (Sep 19 2016 at 16:15):
GF#9195 has been deferred and active for a couple meetings now...need to make a decision!? @Lloyd McKenzie @Grahame Grieve
Grahame Grieve (Sep 19 2016 at 16:16):
I'd happily make a decision not to do this ;-). I think it's on the agenda this week
Lloyd McKenzie (Sep 19 2016 at 22:49):
What quarter? Current MonQ1 is from Montreal obviously
Robert McClure (Sep 20 2016 at 20:02):
If I may, I'd like the discussion to be based, in part at least, on how a solution can align with the information noted here: http://wiki.hl7.org/index.php?title=Binding_Syntax#Current_Working_Material. Vocab will be officially discussing this on Thursday Q2 (with CGIT). If desired, we can discuss for a constrained time during the Vocab/FHIR Wed Q1.
Grahame Grieve (Oct 15 2019 at 17:14):
so I think it's time to go back to this subject. We have a single binding that has a binding strength that controls what can go in the element. But as use cases unfold, we're seeing that a single binding doesn't satisfy all the use cases.
For instance, over on the argonaut list, they're trying to wrangle between regulation which says "use snomed ct" and all the legacy data out there that uses ICD-9 / 10 etc. What they really need to do as say 'these codes are approved for new use, and this much wider set of codes are allowed'. Then there's the must-support part of the code set as applied to the non-must support.
As things stand now we have 3 bindings:
- (unnamed) - the main binding which specifies what must be in an instance
- min binding - I think this is the must-support binding ... naming is misleading?
- max binding - an overloading list of codes that can be used if you have an extensible binding
Can we clarify the name as terms of those?
I want to define a new binding type: A useable extensional value set for systems where we have a max value set that is intensional (we are using extensible for this, but that's confusing)
Grahame Grieve (Oct 15 2019 at 17:14):
I'd like to tidy this up....
Lloyd McKenzie (Oct 15 2019 at 17:58):
"Useable" is a tricky term. What would be your definition for it?
Grahame Grieve (Oct 15 2019 at 18:17):
one that you could use to look up a common subset of the value set (since it can't be enumerated)
Lloyd McKenzie (Oct 15 2019 at 18:20):
So that's what we use the regular extensible binding for now - works fine so long as the value set is extensional and doesn't contain high level codes
Grahame Grieve (Oct 15 2019 at 18:26):
well.... I think that we do that now, but it's not really what extensible is actually for
Lloyd McKenzie (Oct 15 2019 at 19:52):
Not sure what you mean. Extensible says "this set of codes if any apply, but you can use others if none of these fit". That's what we're saying here - the 'max' binding just constraints what's allowed for the extensions
Grahame Grieve (Oct 15 2019 at 20:59):
but we always come back to what 'fit' means, which requires human interpretation. where as a straight required intentional binding with a 'here's a convenient list' doesn't have that problem at all.
Rob Hausam (Oct 15 2019 at 21:47):
I'd like to have a little more detail on the proposed new binding type, but I do think we need to have the ability to specify multiple bindings in the cases where they are needed (as with the Argonaut discussion).
Grahame Grieve (Oct 15 2019 at 21:57):
types, not type. I'm looking to figure out what types we need. So far I think we have or need:
- min (not happy with the name)
- max (not entirely happy with the name)
- common-subset (usually for if required is intensional)
- regulated (a subset with a date, required for data created from that date)
- additional (means that the translations must include something from this subset)
- language/jurisdiction variant (use this for this context, must be a subset / sameset)
Michael Lawley (Oct 15 2019 at 22:49):
+1 for multiple bindings, but I think we need to be clear how all these variants interact for various use-cases.
- generic client that needs to provide a UI for code selection
- $validate
Not sure I understand additional
, but for language/jurisdictional variant
, are these cross-cutting? i.e., can apply to min, max, regulated etc (is date
just another dimension of context?)
Michael Lawley (Oct 15 2019 at 22:50):
I'm also wary of the risk that lots of variation is counterproductive to interoperability
Grahame Grieve (Oct 15 2019 at 22:55):
I don't know whether they are cross-cutting.
Grahame Grieve (Oct 15 2019 at 22:55):
additional is tricky but came out of a requirement for people who wanted to say 'you need 2 codes here, a SNOMED CT code and LOINC code'
Grahame Grieve (Oct 15 2019 at 22:56):
of course complexity is a problem, but all these are real use cases
Michael Lawley (Oct 16 2019 at 01:37):
I'm tempted to say "wants are not needs" :-)
And I suspect if ppl want both an SCT code and a LOINC code then they'll also want to constrain the pairings (via a ConceptMap?).
But mostly, how do we assess whether these requirements fall in the 80% space?
Grahame Grieve (Oct 16 2019 at 02:26):
well, we should be clear about the methodology - the "core" thing (sometimes called 80:20) is about deciding what is left to extensions or not. I am not, at this point, discussing what is extensions or not, only how we describe what is possible.
Richard Townley-O'Neill (Oct 16 2019 at 07:18):
additional is tricky but came out of a requirement for people who wanted to say 'you need 2 codes here, a SNOMED CT code and LOINC code'
Mandating that each instance will contain at least one value from LOINC and at least one from SNOMED CT can be done at the moment by slicing CodeableConcept on system.
But that works for distinct code systems, not for value sets that share code systems.
Grahame Grieve (Oct 16 2019 at 10:42):
the question is whether slicing is the only way. Slicing has a cost...
Rob Hausam (Oct 16 2019 at 10:47):
yes, it does
there will be a cost with alternative approach(es), too - and how best to measure that isn't necessarily obvious
Richard Kavanagh (Oct 24 2019 at 11:52):
Has this discussion progressed?
At the moment we are attempting to implement against profiles that have a single VS binding on a CodeableConcept element - which I understand means that all of the codes within that element have to abide by the single VS in the binding.
So we have the SNOMED and LOINC issue, but we also have issues where we want to use SNOMED but also retain any original code from the source system (Read2, CTV3, ICD10 etc). If the binding strength is "Required" then this prohibits us (and you have to question why have a CodeableConcept?). If it is extensible, then as the codes are "mapped" then they are equivalent and that does not seem to be permitted.
Is there any further guidance on this available?
Joel Schneider (Oct 24 2019 at 15:39):
By my reading, a required binding on a CodeableConcept says that one, but not necessarily all, of the Coding values must be from the specified value set.
There may also be unusual (and non-interoperable) cases where a code data type with a required binding transmits a "non-allowed" code using an extension.
https://chat.fhir.org/#narrow/stream/179202-terminology/topic/GF.2316474.3A.20CodeSystem.2Efilter.2Eoperator.20-.20required.20binding
Grahame Grieve (Oct 24 2019 at 18:57):
which I understand means that all of the codes within that element have to abide by the single VS in the binding.
Right. no. only one does.
Grahame Grieve (Oct 24 2019 at 18:58):
we also have issues where we want to use SNOMED but also retain any original code from the source system
The easiest way to do this is to make a required binding (though you can't always actually make it required because of underlying concept issues), and simply state in the narrative that any original code is also required.
Grahame Grieve (Oct 24 2019 at 19:06):
If you want to do more than that, you can, say, set the min cardinality of coding to 2, but what do you do if the original is the snomed code (which is what you want, right?).
Or you can have the snomed binding, and make an invariant that says that one of the codings (either the snomed one or another one) has to have the extension http://hl7.org/fhir/StructureDefinition/iso21090-CD-codingRationale with a valueCode = O (or OR)
Grahame Grieve (Oct 24 2019 at 19:11):
note that no one has ever used that extension before, so we haven't formally defined it
Grahame Grieve (Oct 24 2019 at 20:02):
And I personally think that there's lot of cases where you don't know which is original (translating CDA or v2) nor do i think that labelling the original code has practical value, so I recommend simply having a required/extensible binding and making the note about the original code in narrative
Grahame Grieve (Oct 29 2019 at 22:46):
original methodology question continued here:
Grahame Grieve (Oct 29 2019 at 22:46):
https://chat.fhir.org/#narrow/stream/211987-methodology/topic/Multiple.20Bindings
Richard Kavanagh (Oct 30 2019 at 17:10):
which I understand means that all of the codes within that element have to abide by the single VS in the binding.
Right. no. only one does.
That's handy :-) Is this documented somewhere?
Grahame Grieve (Oct 31 2019 at 11:02):
sure. see http://hl7.org/fhir/terminologies.html#required
Last updated: Apr 12 2022 at 19:14 UTC