FHIR Profile Page
Back to FHIR
What can be profiled?
At the moment, messaging events and resource search criteria can only be defined at the Resource level. That means that only HL7 International can define new messaging events (including the base request and response profiles) and only HL7 International can define the search parameters for querying resources.
- JD - The search page says that ...Each FHIR resource type defines a set of applicable search parameters with their meanings, and servers may declare additional parameters in their conformance statements. And the Conformance statement also seems to allow a server to declare additional messaging events.
- LM - Yes. And Grahame just re-iterated that search should be specific to Resources only, never in profiles, so . . .
I think this is problematic. It's going to create extreme strain on the 80% rule. We don't want to end up with events and search criteria for rare/esoteric use-cases cluttering up the main spec. At the same time, if we don't provide a mechanism for those things to be defined elsewhere, stakeholders will be well within their rights to have their content defined by HL7 because the requirement exists and they don't want to be non-conformant.
The risk, of course, is that people go off on their own instead of trying to work through HL7 Int'l on content that *should* be coordinated at an international level. But that's a risk regardless. And I expect there will be strong incentives to have content "blessed" by HL7 (and maintained by HL7). Beyond that risk, the only cost to doing this is supporting profile id as part of the data model when we reference events and search criteria. Events is pretty easy - we just make it a coding instead of a code and use the Profile.id as the system. It's slightly more painful for search criteria because those show up as REST parameters, but URIs in http parameters are hardly new.
... And Grahame wants to know, what are your actual use cases for events that HL7 doesn't need to define, but you need to define. What events are not meaningful enough to influence semenatics, but so meaningful you can't live without them?
- Hard to have examples when I don't know what HL7 will and won't define. The real question is: Does HL7 Int'l commit to define all possible events implementers find a need for? If they won't, what alternatives are there than breaking the spec? We get away with the 80% for resource elements because we define an extension mechanism. That's the safety valve. What's the safety valve on the behavioral side?
As for search, search turns out to need much more specification. But let's wait for more implementation experience before we change it now
Comments from Lloyd
- Profile.resource.purpose: "Why describe this resource" is weak.
- GG: Specially crossed with the other general metadata. Need a good example, which I'll be working on. See FHIR Profile Metadata
- Need to capture the rules about use of "mapping" being a further constraint, not a replacement of. At least when it applies to RIM.
- GG: where? need a RIM Mappings section in methodology - need a better (and linked) methodology page
- LM: I'd like to see RIM mapping called out as "special" in resource with the associated notes. Alternatively just indicate it in notes that mappings do not override, but rather refine mappings from the base resources and higher level profiles. I.e. A profile cannot do anything that causes a higher level mapping to no longer be true.
- still methodology
- Can the same resource be referenced multiple times with different sets of constraints, and if so, what would that mean? I can think of situations where Person might be referenced in different places with different cosntraints, but if you do that, then you need to be able to say for each resource that references person, which constraint set from within the profile did you want to apply?
- GG: see also FHIR managing profile identification
- LM: Profiles now allow the same resource to be profiled in multiple ways, however it's not clear how a particular resource constraint gets referenced when declaring the Type. It could be this is handled as part of the type.profile, but if so, we need to explain how. May be cleaner as a separate (optional) element
- Extension code as the element name won't fly. Can have multiple extensions with the same name. You're going to need to be able to alias names in a profile. And the alias name is what should be used. Element names from codes is a bad scene.
- GG: need to explain this better...
- LM: I really think you want to allow alias names. It should be possible for an implementer to create a profile, specify alias names, and have the object model for their app use the names that make sense to them (possibly even in a different language). Basing names on codes is just a bad idea.
- GG: oh this is about code generation. That's a separate code generation thing then. you don't want that in the profile
- LM: Actually, I do. I want the rendering for a profile to show the alias, as well. That way we can use profiles for translations. And domains can insert their business terms. And it eliminates the concern over collision of extension codes.