Stream: terminology
Topic: Compose ValueSet with all versions of a CodeSystem
Simone Heckmann (Apr 23 2018 at 13:52):
Is there a way to specify a ValueSet that includes all known versions of a CodeSystem?
e.g. we have yearly editions of ICD-10 and would like to define a ValueSet whose expansion automatically includes any new edition of the CodeSystem once it's published. So we don't have to update the valueSet binding or the valueSet definition every year to explicitly include the new CodeSystem version.
Grahame Grieve (Apr 23 2018 at 13:56):
haven't we had this question before?
Simone Heckmann (Apr 23 2018 at 17:48):
Yes, but I lost track... I failed to enter a CR back then, so I'm not sure if there's been any progress...
Simone Heckmann (Apr 23 2018 at 17:50):
Ah! There's the old thread: https://chat.fhir.org/#narrow/stream/48-terminology/topic/Defining.20a.20ValueSet.20including.20all.20versions.20of.20a.20CodeSystem
Rob Hausam (Apr 23 2018 at 18:14):
Thanks for digging up the old topic, @Simone Heckmann. I'm not aware of any further progress on this. We left it back in November and hadn't really come to a conclusion at that time. The [canonicalUrl]|*
syntax proposed by @Lloyd McKenzie is still on the table. And it sounds like you (and probably others) still have the need. Do you want to create a tracker for it now?
Simone Heckmann (Apr 23 2018 at 18:18):
Michael Lawley (Aug 03 2018 at 03:57):
@Simone Heckmann Can you provide further clarification on your use-case here? Leaving the CodeSystem's version empty in a ValueSet definition is normally interpreted as "use the latest available version", and this seems to be the semantics you want in the example above. But what you've asked for is "all known versions", and I'm stuck trying to understand what this would mean.
Grahame Grieve (Aug 03 2018 at 04:11):
the use case is where you have multiple different releases of a billing code system, and they are not bringing codes forward, so you don't have a single code system version with all the codes in it. And you'll accept any billing code that was ever valid
Grahame Grieve (Aug 03 2018 at 04:11):
its' a validation use case
Michael Lawley (Aug 03 2018 at 04:20):
So it's not needed for ValueSet at all then, only CodeSystem/$validate-code
?
Grahame Grieve (Aug 03 2018 at 04:22):
no needed in value set - use binding + value set for that use case
Michael Lawley (Aug 03 2018 at 04:25):
So semantics for this would be satisfied with a Union of all the expansions with respect to each (known/available) CodeSystem version?
Grahame Grieve (Aug 03 2018 at 04:29):
pretty much. some problems in the corners, but that's the intent
Michael Lawley (Aug 03 2018 at 04:54):
it's the corners that I worry about - are you saying there are cases where (efficiency aside), defining this as the actual semantics would not work?
Grahame Grieve (Aug 03 2018 at 05:22):
well, we documented 2 that we are aware of, around coherency of meaning when changes happen, and whether a server has the relevant versions
Simone Heckmann (Aug 03 2018 at 06:07):
Our primary use case is the german ICD-10-GM. We have new editions every year and whenever a code is documented, the year of the edition has to be documented with it ("versionNeeded") a simple validator can not decide if the proper edition has been used for a specific case/patient, because there are complex rules that determine what catalogue can be used depending on admissionDate and whatnot. So a simple validator will only be able to determine wether a given code is valid in the given catalogue. Also, we don't want to change our profiles every year, so we need a binding semantinc to say: this element binds to ICD-10-GM in all known editions.
We can't simply update the CodeSystem with a new release, because multiple versions may be valid at the same time (as said, it depends on admissionDate), so especially early in the year, two catalogues are needed simultaneously. There are plenty of other billing code systems with the same logic.
Our most important issue is to keep the national profiles stable, even if the underlying vocabulary sometimes changes mutiples times a year.
Simone Heckmann (Aug 03 2018 at 06:09):
By definition, ICD is a classification, so the meaning of every "...not otherwise specified"-code changes, whenever a new code is introduced into the class. Hence, new edition= new CodeSystem
Michael Lawley (Aug 03 2018 at 21:22):
Thanks Simone, that all makes sense, but still doesn't explain the need for the all versions semantic.
If the binding is to a valueset that omits the CodeSystem version then you get the desired result of not needing to update the version with every new ICD10 release (which would be wrong anyway, since your version constraint depends on external context).
A decent terminology service will allow multiple versions of a CodeSystem to exist at the same time (as different CodeSystem instances), and use the codesystemversion passed to $validate-code to help choose the right one when the referencing ValueSet doesn't itself constrain the version.
TLDR - the requirements given fit within the current spec without the need for an "all versions" version statement.
Grahame Grieve (Aug 03 2018 at 21:26):
I don't agree with this. The definitions are clear: in the absence of a specified version, you use the latest version
Michael Lawley (Aug 03 2018 at 21:28):
I would argue the version is specified - it's the one associated with the code being validated
Michael Lawley (Aug 03 2018 at 21:30):
Regardless, I don't understand how the all versions notion helps here - it would instead behave as an "any version", no?
Grahame Grieve (Aug 03 2018 at 21:32):
I might agree with this
Grahame Grieve (Aug 03 2018 at 21:33):
the difference becomes germane if the version is not specified in the instance
Lloyd McKenzie (Aug 03 2018 at 21:37):
Right. You want to ask the question "Is this code valid against any of the versions of this code system?" We need a syntax to do that. (It'd be nice to also have "Is this code valid against any of this enumerated set or range of versions of this code system?" too.
Grahame Grieve (Aug 03 2018 at 21:43):
second is easy- just add all the versions in a value set
Michael Lawley (Aug 04 2018 at 07:08):
Either would be simple if we had a solution to "pipe" the results of one operation (in this case a search on CodeSystem) into another - $validate-code
Grahame Grieve (Aug 04 2018 at 09:01):
I've had a look at piping but it's really quite unclear waht that means
Grahame Grieve (Aug 04 2018 at 09:01):
in the general case
Last updated: Apr 12 2022 at 19:14 UTC