Migrating OIDs to FHIR
Purpose
This page collects input from people looking into implementing FHIR and have vested interest in OIDs. The input will lead to 'best practice' guidance and 'things to consider' in order to help people make informed decisions.
Background
FHIR just like V2 and V3 before that has a way to identify objects. It normally uses a system/value or a system/code pair where the system determines the context for value or code. A system could be viewed as a namespace and is expressed using a uri. A URI could be a URN and a URL [1]. In FHIR the preferred system URI is a URL for readability reasons and the potential for resolving, i.e. a URL could 'lead somewhere'.
In V3 the only option for identifying instances, and code systems has always been an OID. Realms/countries that have ever been involved V3 will have a given number of OIDs for various things they need to identify, some of which would need to be exposed in FHIR as well.
(Best) Practices
First of all a check list:
- Has the OID already been assigned a URI -- check: [2] for a nice checklist
- Does the OID or object(s) it represents have to be used in FHIR?
- if not: consider not assigning anything
- Create a strategy for assigning URLs for what the OIDs represent. Valid strategies include:
- Use symbolicNames from the branches and leaves leading to the OID: [base]/identifiers/ssn where [base] could be http://www.hl7.br
- To resolve or not to resolve. The system URI http://loinc.org resolves directly into the code system and is likely to be stable. This seems lees likely for http://www2a.cdc.gov/vaccines/iis/iisstandards/vaccines.asp?rpt=cvx. System URI SHALL be stable however. If you want resolving URLs, you could consider letting it resolve to a NamingSystem instead of the real system and let the NamingSystem get to you to the source, wherever that may be. If you want to resolve into a NamingSystem, this limits your ability to branch the URL as the part after NamingSystem would be the id of the NamingSystem instance that represents the system URI + OID. Example:
<NamingSystem> <id value="1"/> <text> <status value="generated"/> <div xmlns="http://www.w3.org/1999/xhtml"> Code System: Anatomical Therapeutic Chemical Classification System (WHO) is known by: <ol>
<li>OID: 2.16.840.1.113883.6.73 <li>URI: http://www.whocc.no/atc </ol> </div> </text> <type value="codesystem"/> <name value="Anatomical Therapeutic Chemical Classification System (WHO)"/> <status value="active"/> <uniqueId> <type value="oid"/> <value value="2.16.840.1.113883.6.73"/> </uniqueId> <uniqueId> <type value="uri"/> <value value="http://www.whocc.no/atc"/> <preferred value="true"/> <period> <start value="2015-01-01"/> </period> </uniqueId> </NamingSystem> <NamingSystem> <id value="1"/> <text> <status value="generated"/> <div xmlns="http://www.w3.org/1999/xhtml"> Root: Burgerservicenummer (Dutch National Patient Identifier) is known by: <ol> <li>OID: 2.16.840.1.113883.2.4.6.3 <li>URI: http://fhir.nl/fhir/NamingSystem/bsn </ol> More information: <ol> <li>English: <a href="http://www.government.nl/issues/identification-documents/the-citizen-service-number">http://www.government.nl/issues/identification-documents/the-citizen-service-number</a></li> <li>Nederlands: <a href="http://www.rijksoverheid.nl/onderwerpen/persoonsgegevens/burgerservicenummer-bsn">http://www.rijksoverheid.nl/onderwerpen/persoonsgegevens/burgerservicenummer-bsn</a></li> </ol> </div> </text> <type value="root"/> <name value="Burgerservicenummer (Dutch National Patient Identifier)"/> <status value="active"/> <uniqueId> <type value="oid"/> <value value="2.16.840.1.113883.2.4.6.3"/> </uniqueId> <uniqueId> <type value="uri"/> <value value="http://fhir.nl/fhir/NamingSystem/bsn"/> <preferred value="true"/> <period> <start value="2015-01-01"/> </period> </uniqueId> </NamingSystem>
- Use a number of branches for types of identifiers and add any sensible name as a leaf under that:
- [base]/id/ssn
- [base]/vs/AdministrativeGender
- [base]/cs/AdministrativeGender
- Use a number of branches for types of identifiers and add any sensible name as a leaf under that:
- If you work from an OID Registry that contains OIDs that have been assigned elsewhere, but that you reregistered for convenience, work with the originator for assigning URLs if you need to.
- Under ISO 13582 you may register additional information like a URL under Reference. Unfortunately the mandatory ReferenceType has a closed list that doesn't seem to fit. The other place to connect the URL in your OID Registry is in AdditionalProperty, but then a type (in attribute/@value) would need to be agreed on. A tiny detail: both type and value support @validTimeLow/High. It seems reasonable to put it on the value to capture when the URL came into being/was deprecated.
<additionalProperty>
<attribute value="systemuri"/>
<value value="http://www.sil.org/iso639-3/codes.asp" validTimeLow="20150513000000"/>
</additionalProperty>
<reference>
Cite error: Invalid <ref>
tag;
invalid names, e.g. too many
<type code="LINK"/>
</reference>
Example table (Netherlands)
# | OID | URI | Description | URI Creation Date | Type |
---|---|---|---|---|---|
1 | 2.16.840.1.113883.2.4.6.3 | http://fhir.nl/fhir/NamingSystem/bsn | Burgerservicenummer (National Patient ID) | 2014-12-16 | Identification |
2 | 2.16.528.1.1007.3.1 | http://fhir.nl/fhir/NamingSystem/uzi-nr-pers | Uniek Zorgverlener Identificatienummer Personen (National Care Provider ID Persons) | 2014-12-16 | Identifier |
3 | 2.16.528.1.1007.3.2 | http://fhir.nl/fhir/NamingSystem/uzi-nr-sys | Uniek Zorgverlener Identificatienummer System (National Care Provider ID Systems) | 2014-12-16 | Identifier |
4 | 2.16.528.1.1007.3.3 | http://fhir.nl/fhir/NamingSystem/ura | UZI-register abonneenummer (National Care Provider ID Organizations) | 2014-12-16 | Identifier |
5 | 2.16.840.1.113883.2.4.6.1 | http://fhir.nl/fhir/NamingSystem/agb-z | Vektis AGB-z zorgverlener tabel (National Care Provider ID Persons/Organizations; context insurance) | 2014-12-16 | Identifier |