Stream: terminology
Topic: What are 'example' code systems
Lloyd McKenzie (Feb 06 2022 at 06:34):
@Grahame Grieve and I have a disagreement. He believes that if a CodeSystem instance has a content type of 'example' it means that the codes it declares aren't necessarily even real codes of the code system. I don't understand why that would ever make sense. I believe that the codes in a CodeSystem instance (whether complete, fragment, supplement or example are always valid codes. What makes a CodeSystem instance is that it's just a small semi-random subset of valid codes (unlike fragment which is a complete set of codes of a specific subsection of a code system, supplement which only lists the codes its supplementing, and complete which lists everything.
Does anyone else thing that the codes where the content is only 'example' don't have to actually be valid codes from the code system in question?
Peter Jordan (Feb 06 2022 at 08:56):
The definition in the R4 specification states that...
A few representative concepts are included in the code system resource. There is no useful intent in the subset choice and there's no process to make it workable: it's not intended to be workable
That suggests to me that it's the subset of concepts that aren't workable, not that the individual example concepts can be bogus. If the intent is to permit the inclusion of invalid concepts, maybe it should say a 'few random example or bogus concepts', rather than 'representative' which conveys some degree of meaning.
Grahame Grieve (Feb 06 2022 at 20:48):
right. Some degree of meaning, but 'representative' does not require them to be valid
Grahame Grieve (Feb 06 2022 at 20:51):
the core of this issue is that when the validator encounters a code from an example code system (not an example binding), it puts a warning - not an error - against the code saying that because the code system is incomplete, the validator can't be sure that this is a valid code. This is something that we agreed during the UTG development work. I think it's the right thing to do too, but Lloyd strongly disagrees - if it's in the example codes, then it's known to be valid. I don't see that the language says that.
This was caused by the fact that an Hl7 defined code system has content = example in THO. I'm not at all clear what that means if it doesn't mean 'these are the kind of concepts you might see in a code system like this'.
Grahame Grieve (Feb 06 2022 at 20:51):
the code system should not be an example, so I think that the validator is doing the right thing here
Lloyd McKenzie (Feb 06 2022 at 22:06):
We're talking about a real code system here. E.g. SNOMED, LOINC, UCUM, whatever. However, we're not exposing the entire code system, just some examples. Why would we allow them to be invalid codes?
If you're wanting to define fake codes, then define a real code system - with content=complete and flag it as 'experimental' and ideally put "example" in the canonical URL.
Lloyd McKenzie (Feb 06 2022 at 22:08):
There shouldn't ever be an 'example' instance of a code system that doesn't correspond to a real full-fledged code system. The whole point is to expose a limited subset of the 'real' codes when it's not practical to show all of them. Perhaps because of licensing issues, perhaps because of volume issues.
Lloyd McKenzie (Feb 06 2022 at 22:08):
What is the point of a code system whose codes aren't real codes?
Jens Villadsen (Feb 06 2022 at 22:11):
Then why have the content type 'example' in the first place if you have rule that states that if the url of the codesystem starts with http://example.com/...
then some special rule apply?
Jens Villadsen (Feb 06 2022 at 22:18):
to me, the codes can be real or not. It does not matter because:
it's not intended to be workable.
Peter Jordan (Feb 06 2022 at 22:39):
Lloyd McKenzie said:
What is the point of a code system whose codes aren't real codes?
The very first CodeSystem resource that I created was a pure example, with no intention for it to be used for any other purpose. It contained 4 valid concepts - but all identified with fabricated codes and I set the CodeSystem.experimental property to true. However, I didn't set the content type to example as it was conceptually complete (i.e. contained all 4 NZ regions), but perhaps I should have done so?
Grahame Grieve (Feb 06 2022 at 22:41):
no that's an example code system with complete content, not a code system with example content (which implies to me that there's real content out there somewhere)
Grahame Grieve (Feb 06 2022 at 22:41):
though perhaps, with this subject, it's the truth that's out there.
Grahame Grieve (Feb 06 2022 at 22:41):
somewhere
Lloyd McKenzie (Feb 06 2022 at 23:48):
We can create example codes systems with 'complete' content. We do it regularly. And we can strictly validate against those example code systems. We also need CodeSystem instances for validation purposes that don't contain a complete set of codes - or even a complete 'area' of a code system, but which are sufficient to validate a set of examples or to give implementers an idea of the kinds of codes that exist without exposing details of the code system. That is what we defined the 'example' contentType for.
I haven't yet heard a use-case for having a code system that contains codes that can't safely be validated against that code system. Why would we want to do that?
Richard Townley-O'Neill (Feb 07 2022 at 00:15):
Maybe 'sample' is a better name for codesystem-content-mode 'example' under Lloyd's interpretation.
Lloyd McKenzie (Feb 07 2022 at 00:21):
It's normative, so hard to change the name now. Though we can still clarify the definition.
Grahame Grieve (Feb 07 2022 at 00:39):
we can add a code. I'm just pointing out that Lloyd's definition is wishful thinking. Maybe reasonable wishful thinking, but nevertheless, the validator has to go by what's written
Richard Townley-O'Neill (Feb 07 2022 at 00:44):
The text "A few representative concepts are included in the code system resource. " uses concepts rather than codes . A super close reading would say it does not require the codes to be representative, just the concepts.
Lloyd McKenzie (Feb 07 2022 at 01:52):
What's written in no way says that the codes don't have to be valid - that's your interpretation. And it's an interpretation that doesn't seem to be driven by any actual requirement...
Grahame Grieve (Feb 07 2022 at 04:49):
No one has disagreed with your statement of what HL7 wants to do, but no one has agreed with your interpretation of what's allowed.
Bret H (Feb 07 2022 at 05:03):
I think if you profile and wish to have a binding that indicates meaningful codes, then I thought 'preferred' would be used. That would say that the codes are real, and valid, and that you could have other codes used alternatively to the ones provided. It is a tighter binding but allows example to keep example's loose definition (unreliably representing true/valid codes). Seems to be a choice based on the what the profiler is wishing to say.
Lloyd McKenzie (Feb 07 2022 at 15:43):
@Grahame Grieve - I haven't heard anyone agree that the codes in an 'example' content don't have to be valid codes. And I think Peter and Richard have both indicated that they need to be valid codes.
Robert McClure (Feb 07 2022 at 17:09):
To be clear here, we are discussing what does it mean when a code system resource has CodeSyste.content=example. Nothing more.
Understanding that this may be considered by some as revisionist, but I think .content=example has no useful meaning.
- If you are making a "test" or example code system with made up content that you are not doing real work with, then set codesystem.experimental = T. I assume in these cases you would want to see content=complete. I see no additional value in using something different in this case but am open to justifications on how this should not be true. Given we are talking about publisher changes no matter what, saying "that is not how the publisher works" is not sufficient. @Peter Jordan's code system should be one of these.
- I do agree with Lloyd that within the FHIR ecosystem, if you publish a codesystem resource, you have "made" a real code system representation and any concepts included should be considered real concepts in the code system and they should validate normally.
- I disagree with Lloyd's presumption that a content=fragment is expected to be a well-formed subset or sub-hierarchy of the code system. A fragment is what it says, a not-complete set of concepts from the code system. To my mind "example" subsets of code systems maintained elsewhere are not example code systems, they are fragments of a code system defined elsewhere (potentially as a FHIR resource, but not necessary.) Again, if you point to that resource for validation, if the code exists, it validates. If it does not, then warning is appropriate.
- Given the above, Id assume that all existing FHIR code system resources with content=example are likely either experimental plus complete, or are fragments. There is no need for content=example. let's remove the problem by fixing our content.
Grahame Grieve (Feb 07 2022 at 18:29):
Peter and Richard have both indicated that they need to be valid codes
OK. I misread Peter but Richard says:
A super close reading would say it does not require the codes to be representative, just the concepts
Grahame Grieve (Feb 07 2022 at 18:31):
@Robert McClure well, the problem with that is that example is normative. And also, content = example is orthogonal to code system = experimental. The content is an example if (a) the details haven't been worked out yet or (b) we haven't worked out what subset of a real code system are going to be included, so we just putting some 'representative' examples in.
Obviously the key word here is 'representative'.
Lloyd McKenzie (Feb 07 2022 at 18:37):
Let's talk about the use-cases:
- we have a use-case for subsets of codes where the subset represents a logical "partition" of the set of codes. This might be for maintenance reason (different partitions maintained by different groups), size reasons (we only care about procedure codes, not other codes, so want to publish a lighter weight version to save bandwidth/storage/memory), or licensing (we distribute the 'free' codes as a separate distribution so that those can be easily downloaded/used). In all of these cases, for a particular use, the codes in the partition are 'sufficient and useful' for real-world validation
- we have a use-case where we can't/don't want to distribute the whole set of codes (typically size or licensing), but we want to a) give an idea of the kinds of codes that exist in the system and/or b) want to be able to validate the codes in our example instances. However, the set of codes is NOT sufficient to use to validate instances in any real-world production environment. (You might get lucky and be able to validate a few codes you see in production, but you couldn't count on validating many/any
Those are not the same use-case and it's useful to distinguish which you have. The first are useful for production terminology servers to have if they don't have the full code system available. The latter are only useful for 'publication' terminology servers. They have essentially no utility for production servers.
We have no use-case for a code system that represents a subset of codes from another code system, where that subset of codes aren't expected to actually be valid codes from the base code system. It may be that the current wording of 'example' doesn't specifically exclude that scenario, but given that there's zero value in that scenario, it seems reasonable to close that loophole and make it explicit that's not allowed.
Lloyd McKenzie (Feb 07 2022 at 18:39):
If you have a code system where the details aren't worked out yet, then the status is 'draft' and the content is 'complete'. If you haven't worked out what subset of codes you're going to include, that's fine. It can still be 'draft' and can be 'example', but the codes that you've included (for now) darn well better be valid codes.
Jens Villadsen (Feb 07 2022 at 19:21):
There is no need for content=example
I agree. What would it even mean if it ended up in production?
Lloyd McKenzie (Feb 07 2022 at 21:23):
If the only thing you have for a code system is a content='example' instance, then you'd be able to validate a tiny subset of codes. It's not super useful, but it's better than nothing. It's certainly not 'dangerous' to have it in production. (Or at least, it won't be so long as we agree that content=example doesn't mean that the codes can be invalid.)
Lloyd McKenzie (Feb 07 2022 at 21:23):
@Jens Villadsen - are you suggesting that the two use-cases I described aren't useful ones to disambiguate?
Jens Villadsen (Feb 07 2022 at 21:38):
I'm saying that having content=example is a scenario I have never experienced the need for. Your first use case sounds like the use of fragment would fit. The second case I don't get. We're building specs here - hence 'giving and idea' doesn't really make the cut.
Jens Villadsen (Feb 07 2022 at 21:49):
When using the status instead with the value 'draft' you're indicating that you are in the process of finding out what the contents are
Jens Villadsen (Feb 07 2022 at 21:49):
That is a better way to signal the intention, IMHO.
Lloyd McKenzie (Feb 07 2022 at 21:57):
Let me flesh out the second scenario a bit. We have a spec that references X12 codes. X12 requires a license to access their terminologies. However, they give us permission to publish 10 codes that show the breadth and level of detail that implementers can expect, and we can create validatable examples so long as we stick to those 10 codes. A license is till needed to use those codes in real systems. That's the sort of use 'example' was envisioned for.
Jens Villadsen (Feb 07 2022 at 22:11):
It sounds like 'sample' would have been a better pick than 'example' - but my native tounge is not english so I might be wrong. Anyways - I haven't encountered such a case myself before. I see the problem, but I don't think the solution is the right one. If a clientt of mine had made such a request (me defining an interface with such terminology constraints), I would have had the customer to go talk to the X12 guys to find out what the real issue is/was.
Jens Villadsen (Feb 07 2022 at 22:12):
Since you have been given the permission to use 10 of the codes it sounds like you have done exactly that
Lloyd McKenzie (Feb 07 2022 at 22:19):
The issue is real. There's no way X12 will let us expose all of their codes in a FHIR publication. That's not going to change. They could theoretically let us expose 10 or so codes. content=example is only really useful on the publication side of things. It's not something I'd ever expect to see used or sought on the implementation side.
Lloyd McKenzie (Feb 07 2022 at 22:19):
On the implementation side, you'd have to use a terminology server that was licensed and that enforced that its users were licensed. And then you'd have access to a 'complete' code system.
Jens Villadsen (Feb 07 2022 at 22:23):
Have you had the need for any other cases besides X12?
Lloyd McKenzie (Feb 07 2022 at 22:57):
The use-case would hold for any proprietary terminology or situation where the full terminology wasn't available in computable form, but you wanted to expose a subset of it in FHIR to help in the review of a spec.
Jens Villadsen (Feb 08 2022 at 06:36):
Yes, but have you encountered it elsewhere?
Robert McClure (Feb 08 2022 at 13:34):
I agree that the need for a subset of codes made available as a sample subset is definitely real. We are working with a code system used to describe social services - 211LA - where providing a sample we can display and include in specs may be all we get. But identifying this as "Example" is not useful as a content description where as it is exactly the same as a fragment because it is a fragment that happens to also be, in this case, an IP-defined sample of the full set. I agree with Lloyd's use cases but I see no justification for the use of "Example" as a content type, normative or not. The idea that you have a sample set that is restricted due to IP would - must - be noted in the copyright section. So I have not heard a single compelling reason to use "Example" content designation. In fact, it is confusing and burdensome because you have to treat it as a fragment.
John Moehrke (Feb 08 2022 at 14:46):
The need for sample (I like that word for use-case 2 as well), is real for specifications that are more general-use. They would be unacceptable for specifications that are specific to a policy space (like a regional deployment committee). This distinction is what I think is the difference in perspective between Lloyd and Jens.
John Moehrke (Feb 08 2022 at 14:51):
true made-up codes are also equally only going to be useful in higher level specifications, and would be totally unacceptable in a regional deployment specification. But I do think that there are cases where a fully made-up set of codes is used is a very high level specification. Certainly would be true with logical models. But I think this valueSet would need to be very well marked to show that it is not production worthy in any way, and would never be used to validate. This last clause is the hard one, but is important. I am sure we all have seen someone using purely made-up codes in a production system, because that code was part of an example. -- is this type of valueSet part of the discussion?
Lloyd McKenzie (Feb 08 2022 at 15:03):
@Robert McClure The difference is really the scope of the sample. "Example" is a sample of codes intended for human review and to support publishing, but nothing else. "Fragment" is a sample intended to be sufficient for production use where all that's needed is a particular subset. I think that differentiating between those two is useful to real-world systems.
Note that value sets aren't impacted by complete vs. fragment vs. example code systems. ValueSets are defined against the 'system' in general. The terminology server will grab the 'complete' code system if it can. If it can't, it'll grab fragments or, worst case, examples. In the latter two cases, it can determine that codes are valid, but it can't determine that codes are invalid. Value sets are never defined as specifically being against a fragment or example CodeSystem instance. However, the expansions may end up being generated against one.
Lloyd McKenzie (Feb 08 2022 at 15:03):
(or more)
Jens Villadsen (Feb 08 2022 at 19:08):
I get the restricted due to IP
-argument - I just haven't encountered it. Is it a very US-specific thing?
Lloyd McKenzie (Feb 08 2022 at 20:11):
Not necessarily. Organizations anywhere can be pretty sensitive around the use of their IP. Obviously, there are some challenges around restricted IP when its mandated for use in information sharing, but it happens. I'm not familiar with any specific examples in Canada (where I'm from), but that doesn't mean there aren't any. I'm sure there are examples in other corners of the world. Quite frankly, 10 years ago, there could have been similar issues with someone else publishing HL7's v2 codes.
Grahame Grieve (Feb 08 2022 at 20:18):
@Robert McClure it might make it easier for you if you think an 'example' as an unauthorised fragment in your context. But critically, we have not said that the representative codes in the example SHALL be valid codes in the actual code system
Jean Duteau (Feb 08 2022 at 21:04):
MedDRA is international and requires a subscription to access their codes.
Lloyd McKenzie (Feb 08 2022 at 21:51):
@Grahame Grieve We also haven't said they're allowed not to be. You could infer either way from reading the definition. And there's no use-case for them to not be valid codes. So, given that the definition isn't super clear, the use-case we're aware of requires valid codes and we're not aware of a use-case that requires invalid codes, why don't we seek opinions from implementers about whether they ever use content='example' to refer to an existing code system and list codes that aren't actually valid codes? If no-one says they do that, then we can reasonably 'clarify' the description to make clear the expectation that the codes must be valid.
John Moehrke (Feb 08 2022 at 21:52):
I think there are times when there is a need for a ValueSet / CodeSystem that is purely made-up codes. Especially with logical models. The higher the model the more likely.. I think.
Grahame Grieve (Feb 08 2022 at 21:54):
And there's no use-case for them to not be valid codes
You haven't made that case. You've consistently demonstrated that we don't have a use case, not that there is no use case.
why don't we seek opinions from implementers about whether they ever use content='example' to refer to an existing code system and list codes that aren't actually valid codes
I'm good with that. If we say that the intent of 'representative' is that the codes must be valid, not merely illustrative, and that we are aware that this is subject to interpretation, and so we're seeking implementer feedback for whether this would be very widely regarded as a clarification, not a substantive change, then that's procedurally ok, at least.
Lloyd McKenzie (Feb 08 2022 at 21:54):
Sure. But that's a CodeSystem with content=complete.
Grahame Grieve (Feb 08 2022 at 21:54):
and experimental = true too
Lloyd McKenzie (Feb 08 2022 at 21:54):
right.
John Moehrke (Feb 08 2022 at 21:54):
I might be thinking more about example scenarios using purely made-up codes. If that is out-of-scope then I appologize. But I think we even have cases for use of made-up (clearly made-up) organizational structural roles, so that an element can have some binding, because some binding is needed.
Lloyd McKenzie (Feb 08 2022 at 21:55):
And ideally, url containing the word "example"
Lloyd McKenzie (Feb 08 2022 at 21:55):
You can also just use a code system with a URL based in "http://example.org" and the validator will happily take whatever you wish.
John Moehrke (Feb 08 2022 at 21:56):
right, that is what I would tend to do with purely made-up codes. if that is all that is necessary, then fine.
John Moehrke (Feb 08 2022 at 21:58):
when this is all figured out... would be nice if there was a logic diagram drawn up with conclusions for each branch.
Robert McClure (Feb 09 2022 at 17:03):
I think what is going with the desire for Example content is that Fragment is IMO too narrowly defined, yet it is Normative tho so we're stuck.
There are M A N Y code system resource instances out there that are not complete, yet are not "a curated subset released for a specific purpose under the governance of the code system steward, and that the intent, bounds and consequences of the fragmentation are clearly defined in the fragment or the code system documentation." I think the requirement for steward curation of a Fragment is overly demanding and not followed by FHIR server implementers. I'd be very interested in understanding how you all implement code system resources that are not complete. @Grahame Grieve do you have any code system resources in your server that are marked Fragment content but not curated? If so, how is that justified? Are you assuming that anything not officially curated by the authority is an Example?
@Peter Jordan @Rob Hausam @Michael Lawley Is every code system resource you store that is marked as "Fragment" officially curated and defined by the steward?
Rob Hausam (Feb 09 2022 at 17:15):
No, I know of a some where that is not the case - and 'fragment' has intentionally been used in a broader sense (mainly because that was what was needed and there really wasn't any other obvious way to do it). There are some of those in tx.fhir.org. There has been at least a little discussion (somewhere?) about the need to broaden the definition and understanding of 'fragment' to be more realistic for most potential uses.
Lloyd McKenzie (Feb 09 2022 at 17:43):
Even if we broaden the definition of 'fragment', is there utility in differentiating between fragments that are intended for publication purposes only (i.e. a smattering of example codes) vs. fragments that are truly a "curated subset released for a specific purpose with clearly defined intent, bounds and consequences" defined that are intended to support implementation (whether managed by the code system steward or not)? My assumption was that terminology servers would care about that difference. If they don't, I'm happy to deprecate 'example' and clarify that fragment can be broader.
Grahame Grieve (Feb 09 2022 at 20:03):
@Robert McClure I do not know the answers to your question because I only provide infrastructure. it's the code system authors who make those decisions. I have never authored a code system with content = fragment or example.
Grahame Grieve (Feb 09 2022 at 20:04):
but note this:
Are you assuming that anything not officially curated by the authority is an Example?
You switched words there, and it matters. The curation does not have to be by the authority.
Peter Jordan (Feb 09 2022 at 22:01):
Robert McClure said:
Peter Jordan Rob Hausam Michael Lawley Is every code system resource you store that is marked as "Fragment" officially curated and defined by the steward?
There aren't any CodeSystem resources on my server where content=fragment. The closest is UCUM, where content=non present, but it's effectively supporting the subset of common UCUM Codes. My understanding is that it can't be defined as a fragment unless the concepts are in the resource -but happy to be corrected if that's not true. :)
Michael Lawley (Feb 09 2022 at 22:10):
My understanding is that only the CodeSystem owner is allowed to produce a fragment. Hence if you want to produce a snomed CodeSystem resource with just a few codes (IP constraint), then you need to use example.
Michael Lawley (Feb 09 2022 at 22:15):
I am struggling to come up with a use case where you'd have example codes that were not valid codes.
And, I would not be surprised if validation treated all example codes as valid; they are supposed to be representative after all @Richard Townley-O'Neill observation about concept vs code notwithstanding.
Michael Lawley (Feb 09 2022 at 22:18):
Now, having just written this I am recalling the many occasions where I scribble down 'snomed' examples with codes like 12345678.
Still, I might want my validation to say ok, but include an additional warning that the code system itself is "suspect"
Lloyd McKenzie (Feb 09 2022 at 23:39):
Why would you want validation to say 'ok'??
Grahame Grieve (Feb 10 2022 at 01:06):
My understanding is that only the CodeSystem owner is allowed to produce a fragment
no. And this is important, and the language was chosen carefully. A code system can only be labelled a fragment if the code system 'owner' publishes it themselves, or defines a process by which other organisations can do that
John Moehrke (Feb 10 2022 at 15:44):
can a recommendation on how to include in an IG an example codesystem be expressed in detail? Just tried to use content = #example and get errors from the IG publisher. Is there a project that has done this properly?
Lloyd McKenzie (Feb 10 2022 at 16:22):
You don't want content=example for example code systems. If you're making up an example code system, content should be "complete", URL should reflect that it's an example-only (I like "example-do-not-use" as part of the URL), and experimental should be true.
John Moehrke (Feb 10 2022 at 16:49):
so what is content=example used for?
John Moehrke (Feb 10 2022 at 16:53):
in this thread @Robert McClure indicated content=example... so I presumed that was the recommendation.
Robert McClure (Feb 10 2022 at 19:54):
@John Moehrke My position on this is Example as a content type is not needed because, and Lloyd is now coming to the same conclusion, if you make up a code system resource with codes in it to be used as "example ideas", then your "example" code system is "content = complete" and it is my opinion that you should also set "experimental = T". I'd support including "example" in the defining url so its intended use is clear, as Lloyd has requested.
I say this in part because, as others have also noted, "content = fragment" is already used in a broader way, in tx.fhir.org and I suspect other places such as IGs, to mean "just a subset of the full code system." I see no need to identify that that subset is "officially curated by the steward" (@Grahame Grieve , that is the wording and it's pretty restrictive) and have not heard any use case to support keeping it worded that way.
John Moehrke (Feb 10 2022 at 20:06):
so then we should not have any content=example in THO?
John Moehrke (Feb 10 2022 at 20:08):
for example endpoint service type codes that I am trying to use today... but get a constant error from the IG publisher... because in THO it is marked as content=example
https://terminology.hl7.org/3.0.0/CodeSystem-service-type.html
Grahame Grieve (Feb 10 2022 at 20:22):
yes that code system is driving all this because it shouldn't be content = example.
Grahame Grieve (Feb 10 2022 at 20:23):
"officially curated by the steward"
That is not the wording. I've already said that several times. It's "curated by someone, under the rules approved by the code system owner"
So we don't sanction publishing bootleg fragments of SCT, for instance.
Grahame Grieve (Feb 10 2022 at 20:24):
content = example would be for code systems that really exist, but can't be published. X12 code systems, or CPT, where we have permission to publish examples with a few codes
Grahame Grieve (Feb 10 2022 at 20:24):
the code system is not an example, but the concepts provided aare.
Grahame Grieve (Feb 10 2022 at 20:25):
this is a real use case, and I don't see why it should go away. The discussion is about whether, in that case, the 'representative codes' are required to be actually valid codes or whether they can just represent the kind of codes you might find
Rob Hausam (Feb 10 2022 at 20:43):
I think we do need a way to define useful code system 'fragments' that are "user defined" - not only ones that are specifically created by the code system owner. Even if they are created "under the rules approved by the code system owner", that's not particularly helpful if the code system owner hasn't actually created any rules for this - unless there is also a clause that states something like "if the code system owner has not defined rules for the creation and use of fragments of the code system, then users may define and use fragments that meet their specific needs". It seems like this is something that shouldn't be entirely (and probably often unnecessarily) prohibited.
Grahame Grieve (Feb 10 2022 at 21:03):
I think that's taken for granted, in practice, but it would be good to say that somewhere
Lloyd McKenzie (Feb 10 2022 at 21:21):
If we were to have an content=example in THO, it would be something like "here are 10 of the 1000+ codes from X12 codesystem 123" - in the event we were to ask for permission to do that and they gave it. There should never be a CodeSystem where the canonical URL is from hl7.org that has a content other than 'complete'.
John Moehrke (Feb 10 2022 at 21:21):
John Moehrke said:
for example endpoint service type codes that I am trying to use today... but get a constant error from the IG publisher... because in THO it is marked as content=example
https://terminology.hl7.org/3.0.0/CodeSystem-service-type.html
here is one
Lloyd McKenzie (Feb 11 2022 at 01:03):
Right. I've submitted a tracker item for PA to get that one fixed
Robert McClure (Feb 11 2022 at 21:12):
@Grahame Grieve Stamping your feet and saying fragments are special 1) does not make it so in the community of practice, and 2) still has no demonstrated value - you've not proven your point by repeated saying it. There is no value in creating one subset of existing codes as Example, and another as Fragment. You have not made the case. What is a user supposed to do with a code system example that they are not to do with a fragment, or with a fragment that can not be done with an example?
content = example would be for code systems that really exist, but can't be published. X12 code systems, or CPT, where we have permission to publish examples with a few codes
I see no useful distinction in this use case. It is a fragment. The IP dictates the reusability as it aways has, not the content type. If you publish any codes, follow the IP - always.
Grahame Grieve (Feb 11 2022 at 21:18):
what I've been 'stamping my feet about' is that fragments are not necessarily curated by the code system owner, since you keep saying that but the standard is not saying that
Grahame Grieve (Feb 11 2022 at 21:21):
for me, the difference is in intent: a fragment is meant to be useful for some use case, comprehensive. For instance, an edition distribution of SCT. Consult the document, check the intent of the fragment, go ahead and use it for the intent. In production.
An example, on the other hand, makes no claim of suitability for any use in production at all. Here's some example codes for this code system. The intent is clear: if you want to use this code system for anything, you need to go and find usable content.
I think that's a pretty big difference. Of course, people could make a mess of that by mislabelling their intent, but that doesn't mean that we can't differentiate the ideas
Grahame Grieve (Feb 11 2022 at 21:22):
If you publish any codes, follow the IP - always.
Sure. but we have code systems for which the IP is "you can publish a few examples so people understand how it's used, but you can't publish more than that"
Robert McClure (Feb 11 2022 at 21:33):
I understand you are focused on usability in production systems as the value proposition but I'm struggling to understand how that is really useful. Are you are saying that a production server, when given multiple resources to choose from for the same code system would not pick a resource to use that is content example and instead go searching for one that is complete or a fragment, and if there are multiple, pick the one with the largest set of concepts? What if the bigger one is content = example? ignore it? I think the question of what code system resources should production servers copy into their environment is a much more complicated question then this, and example would still have real concepts just like a fragment, ie, it's a distinction without a difference. If the FHIR server is using a TS and wants to know, is the code system you have an example or fragment - why does it matter??
Grahame Grieve (Feb 11 2022 at 21:47):
yes it would ignore it, and I would think that a production server would start with a rule that content = example resources are not loaded.
Grahame Grieve (Feb 11 2022 at 21:48):
but yes, it's in general much more complicated than that. And content = example is a statement of intent, I agree, and so it's less absolute than the difference between not-present, fragment and complete. Sure.
Lloyd McKenzie (Feb 11 2022 at 23:17):
The main difference is that if a TS understands the scope of the fragment and of the value set, it can (in some cases at least) make a positive assertion of "this code is not valid". E.g. if you have a fragment that is all SNOMED procedure codes from the U.S. and you have a value set that is "all U.S. SNOMED codes that are specializations of heart surgery" (forgive the example), then if a code is sent and isn't found in the code system, you know it's not valid against the value set, even if you can't definitively say it's not a valid SNOMED code overall. On the other hand, if you had a content=example code system, you can't make any assertions at all about a code that isn't found because there's no logical organization to the subset of codes you have.
That said, we don't have a computable mechanism right now that expresses the basis for a fragment - that would need to be passed as an extension. So executing this sort of logic would require TS knowledge that isn't represented in the FHIR artifacts. That said, the main place we use fragments right now - SNOMED, the TS servers absolutely have the metadata about what regional edition the fragment represents - and have the same data available when deciding expansions, so they can make exactly the kinds of logical decisions I describe in the previous paragraph.
Grahame Grieve (Feb 12 2022 at 02:16):
That said, we don't have a computable mechanism right now that expresses the basis for a fragment
Grahame Grieve (Feb 12 2022 at 02:17):
ValueSet.useContext
Lloyd McKenzie (Feb 12 2022 at 02:19):
ValueSet.useContext would convey "Procedure codes in Canada" how, exactly?
Robert McClure (Feb 12 2022 at 16:41):
Folks, For a group that frequently evokes "that is not how systems do it now" defense to justify maintaining the use of an approach that we'd like to change, this seems pretty hypocritical to demand alignment with a imagined use case that is not supported by existing systems. I'd like to hear details on existing application designs that use this content type to accomplish something meaningful. If none exist, let's get rid of it.
John Moehrke (Feb 12 2022 at 18:53):
silly you... that rule only applies to those not named Lloyd.
Grahame Grieve (Feb 12 2022 at 20:03):
what about that approach isn't used now? Anyway:
ValueSet.useContext would convey "Procedure codes in Canada" how, exactly?
Jurisdiction = Canada
usage.code = element, usage.valueCodeableConcept = fhir:Procedure.code
Grahame Grieve (Feb 14 2022 at 22:20):
on this subject, @Jens Villadsen has just pointed me at this:
Grahame Grieve (Feb 14 2022 at 22:20):
https://terminology.hl7.org/CodeSystem-icpc-DAN.html
Grahame Grieve (Feb 14 2022 at 22:21):
this is a code system published at http://terminology.hl7.org/CodeSystem/icpc-DAN that claims that it is the authoritative publication, canonical URL http://terminology.hl7.org/CodeSystem/icpc-DAN
Grahame Grieve (Feb 14 2022 at 22:22):
but it also says, Content = not-present. This combination is wrong. The intent of not-present is that you look somewhere else for the content. but there is nowhere else if that's the authoritative source.
note that I'm not saying it's invalid. It meets the definitions, but it's not a useful way for us to use THO.
Grahame Grieve (Feb 14 2022 at 22:23):
and I don't think that should be the right canonical URL anyway for Danish ICPC. I'm proposing that they should ask for this to be removed, and publish it correctly in the danish IG
Jens Villadsen (Feb 14 2022 at 22:27):
I still need a way to refer to the origin as the ICPC I bring to the DK IG is a supplement. It doesn't introduce new codes - but it introduces translations
Jens Villadsen (Feb 14 2022 at 22:27):
So I need a correct canonical URL that I can refer to and I expect that to point to a valid codesystem with ALL the content
Jens Villadsen (Feb 14 2022 at 22:28):
not just the 'dummy' one's that are listed on https://terminology.hl7.org/codesystems.html
Grahame Grieve (Feb 14 2022 at 22:34):
it doesn't need to 'point' to. We could put the base ICPC in tx.fhir.support, for instance, and just put the no-content definition of it in THO. And then it will all just work
Jens Villadsen (Feb 14 2022 at 22:37):
also if the DK codesystem is a supplement?
Jens Villadsen (Feb 14 2022 at 22:46):
I didnt read your entire message
Jens Villadsen (Feb 14 2022 at 22:47):
Your approach sounds like it would work
Jens Villadsen (Feb 14 2022 at 22:47):
I still dont understand why THO just dont fix it
Grahame Grieve (Feb 14 2022 at 22:48):
THO has plenty of governance. you'll need to create a change request and shepherd it through the process
Jens Villadsen (Feb 14 2022 at 22:52):
If it cannot get rid of the current pile of empty (unusable) codesystems im starting to fail in understanding what the governance is good for
Jens Villadsen (Feb 14 2022 at 22:54):
Governance is also deprecating unused items IMHO
Grahame Grieve (Feb 14 2022 at 22:54):
it can get rid of it. But you have to go through the process. That's what governance is good for ;-)
Jens Villadsen (Feb 15 2022 at 20:51):
Dont THO initiate spring cleaning themselves?
Grahame Grieve (Feb 15 2022 at 20:59):
I think the answer is pretty much no. In principle, the committee should, but it's overwhelmed by work as usual
John Moehrke (Feb 15 2022 at 21:06):
note that THO got caught by the great IG purge, as we killed a bunch of ci-builds that were part of their maintenance...
Jens Villadsen (Feb 16 2022 at 07:52):
I'm unsure how to address the start of a cleaning. Would a task directed at HTA at https://jira.hl7.org/projects/HTA/summary be the correct way?
Grahame Grieve (Feb 16 2022 at 07:52):
@Jessica Bota
Jessica Bota (Feb 16 2022 at 14:13):
Given that it relates to an external code system, it should be raised to the HTA. @Jens Villadsen , please enter a task directed at HTA in the Jira project you linked above. I will also follow up with HTA so that it can be discussed on an upcoming call.
Changes related to external content do not fall on the the implementer community, but is handled by the HTA via Pro Forma UTG tickets. Reuben and I have generally been pushing through the changes. HTA just went through a huge process of 'spring cleaning' and retired loads of erroneous entries before the THO 3.0.0 release.
CC: @Reuben Daniels
Jens Villadsen (Feb 16 2022 at 14:45):
@Jessica Bota - here you are: https://jira.hl7.org/browse/HTA-75
Last updated: Apr 12 2022 at 19:14 UTC