Stream: implementers
Topic: Required binding strength
Joel Francis (Jul 13 2018 at 01:08):
The documentation here https://www.hl7.org/fhir/terminologies.html#code states that "When an element is bound to a required value set, derived profiles may state rules on which codes can be used, but cannot select new or additional codes for these elements" . Does this mean that codes can be excluded by profiling the ValueSet? Example: Patient.gender. Definitely no codes can be added.
Lloyd McKenzie (Jul 13 2018 at 01:11):
Correct. If your system only allows "female", you're free to impose that as a constraint.
Joel Francis (Jul 13 2018 at 01:36):
Correct. If your system only allows "female", you're free to impose that as a constraint.
I think it would be worth while making this clear in the documentation. It was also not apparent that codes could be excluded. The way the documentation phrases it makes one assume (at least in my case) that when an element is bound to a ValueSet as required it means it has to be used as is. @Lloyd McKenzie Thanks.
Lloyd McKenzie (Jul 13 2018 at 02:21):
If you have a recommendation for altered wording that would be clearer, feel free to submit a change request :)
Vadim Peretokin (Jul 13 2018 at 07:25):
I agree the wording is tricky, it took me some thinking to come to that conclusion but there was something in the docs that tipped it for me. I've posted a clear table here: https://simplifier.net/guide/ProfilingAcademy/Terminology#profiling-terminology
Joel Francis (Jul 17 2018 at 13:25):
Thanks @Vadim Peretokin .
I agree the wording is tricky, it took me some thinking to come to that conclusion but there was something in the docs that tipped it for me. I've posted a clear table here: https://simplifier.net/guide/ProfilingAcademy/Terminology#profiling-terminology
Joel Francis (Jul 17 2018 at 14:11):
If you have a recommendation for altered wording that would be clearer, feel free to submit a change request :)
@Lloyd McKenzie . @Vadim Peretokin
Also is there any protocol to be followed if a system were to send a message with an excluded code? Strictly speaking in the case where the element is bound by a "required" strength to a valueset. Ex: if I have excluded "unknown" but I received a message with Patieint.gender = unknown.
Lloyd McKenzie (Jul 17 2018 at 14:19):
If an element is bound as extensible, there's no runtime test you can make to determine that an out-of-valueset code is invalid unless your system is aware of a subsumption relationship between the specified code and one of the value set codes. (And that won't be a common capability.) In general, 'extensible' needs to be verified by a human.
Robert McClure (Jul 17 2018 at 17:13):
@Vadim Peretokin Just looked at the link you provided and I think you need to clarify two things:
1 Where ever you say "valueset" you should change this to "value set expansion" because valueset is ambiguous and your 'Meaning' column is focused on what the user gets to choose from.
2 The 'Extensible' Meaning column should be changed to say: "You must select codes from this value set expansion, but you can use other codes if the expansion doesn't have a code that matches, or is a generalization of, the code needed."
Joel Francis (Jul 18 2018 at 14:33):
@Robert McClure can you please clarify the difference between a value set expansion and value set. Is it not common to think that a ValueSet may/may not be expanded and it is unambiguous?
Lloyd McKenzie (Jul 18 2018 at 17:40):
If a value set is defined as an explicit list of codes, then the expansion will generally always be the same (though if the underlying code system removes codes, then the expansion could shrink over time). But lots of value sets are defined as expressions. E.g. "All NDC codes" or "All SNOMED surgical procedure codes". And the specific set of codes that fall within those expressions change over time, and in the case of SNOMED, they also change by jurisdiction. So it's possible to have a fixed binding to "All NDC Codes" - meaning you have to have an NDC code and can't have anything else, but still have the set of allowed codes change every few weeks as the FDA changes the list of registered drugs.
Joel Francis (Jul 18 2018 at 17:48):
ahhhh.....i see.... :thumbs_up: @Lloyd McKenzie
Robert McClure (Jul 19 2018 at 19:34):
A value set is comprised of metadata, a version-specific value set definition (called the CLD and represented as valueset.compose in FHIR). Implementers need the member list of the value set that is generated based on the value definition version used and the code system version(s) the definition is applied against. We call the result of this operation ($expand) the value set expansion. Because some definitions are not enumerations (see Procedure Codes (SNOMED CT)) and the usable expansion is dependent on the code system version used, a single "value set" can have both multiple versions and any version can result in multiple expansions (based on the code system version used.)
Joel Francis (Jul 26 2018 at 13:53):
@Lloyd McKenzie just an after thought about this. The fact that excluding codes is possible, means its quite a bit of work other implementers to make a change to not send a message with an excluded code.
"In the standard, this is generally used for elements where the value needs to be strictly controlled so that everyone can interpret it with confidence" - if someone receives a message with an excluded code hen the line above is a bit misleading or am I missing something.
Lloyd McKenzie (Jul 26 2018 at 18:32):
Well, the notion of "I only accept x" should be driven by business rules that would make it an error if it's not x. For example, if you're a system that only processes patient's of a particular gender or particular age, etc. It's legitimate for you to throw an error if someone sends you the wrong data. Whether the systems that provide you the data just accept the errors and ignore them or correct their systems to not send data that you're not prepared to process is up to them. Presumably the server throws an error because they want the client to act on it or to know that the desired function isn't going to happen. If the fact the record's going to be ignored doesn't matter to anyone, it's fine if the server just silently ignores records that falls outside its scope.
Last updated: Apr 12 2022 at 19:14 UTC