-
Notifications
You must be signed in to change notification settings - Fork 2
Description
This ADR is requested for GF Addressing, but it may be applicable to every reference that is made in any (FHIR) resource instance.
Example use-cases:
- An eOverdracht has a target Organization (Task.owner), how to reference to this organization in the Task?
- What if the Task.owner stores a copy of the Task; how to reference the original Task and the ServiceRequest it was basedOn?
Options:
1. By logical identifier, such as URA
Only top-level Organization instances have a URA-number. Not a solution for the majority of the data in a Query Directory. You could provide every instance with a logical identifier, but it lacks a way of knowing where to find this logical identifier. It is possible to use the identifier.assigner element (reference to an Organization), which could also contain an identifier (with, again, an assigner, etc..). This way, references can become huge and clients may not know how to handle/resolve these identifiers. An assigners may not be the organization that publishes the instance (e.g. BSN)
2. By to UUID in the LRZA directory
The LRZa registry is not the authoritative source for (all) Organization-instances; it is only the authoritative source for a top-level Organization identifier (and specifically the URA number). Not a solution for the majority of the data in a Query Directory.
3. By (full-)URL to the original instance
Pro: simple and resolvable
Con: FHIR-base-URL should be stable for the long term (think about e.g. domain-ownership). If FHIR-base-URL must be changed, use the Endpoint.status and Endpoint.extension.replacedBy to publish the change. Other providers should plan to consume these changes (find-and-replace URLs). The instance ID should also be stable for the long term (e.g. avoid ID-collisions when joining/merging databases); use UUIDs.
Fetching data from remote repositories can be challenging (access, time-outs, etc.), but a local copy (cache) of entities with the fullURL to the original in 'meta.source' could help.
4. By local ID to the copied instance (e.g. in a query directory)
Referring to copies of (original) instances is undesirable in general and the Query Directory contains (often) only copies. Referring to (just) an ID won't provide the location of the original; you still need to know where original document is located using, e.g., the fullURL to the original in 'meta.source'. If copied instances are copied again, you risk getting a chain of copied instances (local or remote) that may or may not have been updated; risk for a big mess.
5. By local UUID to the original and copied instance (reusing the UUID of the original instance for the copied instance)
Referring to copies of (original) instances is undesirable in general and the Query Directory contains (often) only copies. Referring to (just) an UUID won't provide the location of the original; you still need to know where original document is located using, e.g., the fullURL to the original in 'meta.source'. If copied instances are copied again, you risk getting a chain of copied instances (local or remote) that may or may not have been updated; risk for a big mess. Additionally, it does require usage of UUIDs at the original instance (which may never happen).
Proposal:
Reference to resources using fullURL to the original instance. An additional logical ID may be provided as well.
NB: if an instance does not exist, a URL (or local ID/UUID) doesn't exist either. A logical ID is the only option.