--- type: "datatype" title: "Identifier" datatype: "Identifier" --- # Identifier - [Datatypes](/datatypes) - [Definitions](/datatypes-definitions#Identifier) - [Examples](/datatypes-examples#Identifier) - [Mappings](/datatypes-mappings#Identifier) - [Profiles](/datatypes-profiles#Identifier) ## Overview See also [Examples](datatypes-examples#Identifier), [Detailed Descriptions](datatypes-definitions#Identifier), [Mappings](datatypes-mappings#Identifier), [Profiles](datatypes-profiles#Identifier) and [Extensions]([%extensions-location%]extensions-datatypes#Identifier) A string, typically numeric or alphanumeric, that is associated with a single object or entity within a given system. Typically, identifiers are used to connect content in resources to external content available in other frameworks or protocols. Identifiers are associated with objects and may be changed or retired due to human or system process and errors. \[%dt Identifier 9%\] The `system` is an absolute URI that defines a set of identifiers (i.e., how the `value` is made unique). It might be a specific application or a recognized standard/specification for a set of identifiers or a way of making identifiers unique. FHIR defines [some useful or important system URIs directly](identifier-registry). Here are some example identifier namespaces: - `http://hl7.org/fhir/sid/us-ssn` for United States Social Security Number (SSN) values - `http://ns.electronichealth.net.au/id/hi/ihi/1.0` for Australian Individual Healthcare Identifier (IHI) numbers - `urn:ietf:rfc:3986` for when the value of the identifier is itself a globally unique URI If the system is a URL, it SHOULD resolve. Resolution might be to a web page that describes the identifier system and/or supports look-up of identifiers. Alternatively, it could be to a [NamingSystem](namingsystem) resource instance. Resolvable URLs are generally preferred by implementers over non-resolvable URNs, particularly opaque URNs such as OIDs (urn:oid:) or UUIDs (urn:uuid:). If being exchanged across institutional boundaries, OIDs and UUIDs SHOULD be available to communicating participants in a shared registry. The [HL7 OID registry](http://hl7.org/oid) may be used for this purpose for OIDs. [terminology.hl7.org](https://terminology.hl7.org) may also be used to register [NamingSystems](namingsystem) for identifiers of broad international or national interest. It is up to the implementer organization to determine an appropriate URL or URN structure that will avoid collisions and to manage that space (and the resolvability of URLs) over time. Note that the scope of a given identifier system may extend beyond identifiers that might be captured by a single resource. For example, some systems might draw all "order" identifiers from a single namespace, though some might be used on [MedicationRequest](medicationrequest) while others would appear on [ServiceRequest](servicerequest). The `value` SHALL be unique within the defined `system` and have a consistent meaning wherever it appears. Identifier.system is always case sensitive. `Identifier.value` is to be treated as case sensitive unless knowledge of the `Identifier.system` allows the processer to be confident that non-case-sensitive processing is safe. Identifiers are expected to be globally unique by nature of the combination of system and value. In some cases, the 'value' element is already globally unique independent of Identifier.system. Typically, these are absolute URIs of some kind (e.g., an OID, a UUID, or a URI with no trailing local part). In such a case, an `Identifier.system` value [may be established](identifier-registry) by the assigner or community to identify that collection of identifiers When using globally unique identifiers that are expressible as URIs as a value, a system SHALL be provided. If there is no assigned system, then the system SHALL be `urn:ietf:rfc:3986` and the value is expressed as a URI (OIDs and UUIDs using `urn:oid:` and `urn:uuid:` - see [note on the V3 mapping](datatypes-mappings#ii) and the [examples](datatypes-examples#Identifier). In some cases, the system might not be known - only the value is known (e.g., a simple device that scans a barcode), or the system is known implicitly (simple exchange in a limited context, often driven by barcode readers). In this case, no useful matching may be performed using the value unless the system can be safely inferred by the context. Applications should provide a `system` wherever possible, as information sharing in a wider context is very likely to arise eventually, and values without a system are inherently limited in use. Whether or not the proper `Identifier.system` is known, the human-readable label for the `Identifier.value` typically appears in `Identifier.type.text`. e.g., 'BC provincial health number'. In addition to the `system` (which provides a uniqueness scope) and the `value`, identifiers may also have a `type`, which may be useful when a system encounters identifiers with unknown system values. Note, however, that the type of an identifier is not a well-controlled vocabulary with wide variations in practice. The `type` deals only with general categories of identifiers and SHOULD not be used for codes that correspond 1..1 with the Identifier.system. Some identifiers may fall into multiple categories due to variations in common usage. The `assigner` is used to indicate what registry/state/facility/etc. assigned the identifier. As a [Reference](references), the assigner can include just a text description in the `display`. **Constraints** \[%dt.constraints Identifier%\] \[%tx Identifier%\] Identifier is used in the following places: \[%dtusage Identifier%\] ## Elements - **[Identifier.use](/datatypes-definitions#Identifier.use)** [0..1]: [code](/code) The purpose of this identifier - **[Identifier.type](/datatypes-definitions#Identifier.type)** [0..1]: [CodeableConcept](/CodeableConcept) A coded type for the identifier that can be used to determine which identifier to use for a specific purpose - **[Identifier.system](/datatypes-definitions#Identifier.system)** [0..1]: [uri](/uri) Establishes the namespace for the value - that is, an absolute URL that describes a set values that are unique. - **[Identifier.value](/datatypes-definitions#Identifier.value)** [0..1]: [string](/string) The portion of the identifier typically relevant to the user and which is unique within the context of the system - **[Identifier.period](/datatypes-definitions#Identifier.period)** [0..1]: [Period](/Period) Time period during which identifier is/was valid for use - **[Identifier.assigner](/datatypes-definitions#Identifier.assigner)** [0..1]: Reference(Organization) Organization that issued/manages the identifier ## Bindings - **Identifier.use**: `IdentifierUse` | strength: code list | reference: #identifier-use - **Identifier.type**: `IdentifierType` ## Modifiers - **Identifier.use**: Is modifier ## Invariants - **Identifier.value**: `ident-1` | warning | Identifier with no value has limited utility. If communicating that an identifier value has been suppressed or missing, the value element SHOULD be present with an extension indicating the missing semantic - e.g. data-absent-reason | XPath: exists(f:value) ## Examples - **Identifier.system**: http://www.acme.com/identifiers/patient ## Requirements - **Identifier.use**: Allows the appropriate identifier for a particular context of use to be selected from among a set of identifiers - **Identifier.type**: Allows users to make use of identifiers when the identifier system is not known - **Identifier.system**: There are many sets of identifiers. To perform matching of two identifiers, we need to know what set we're dealing with. The system identifies a particular set of unique identifiers ## Comments - **Identifier.use**: Applications can assume that an identifier is permanent unless it explicitly says that it is temporary - **Identifier.type**: This element deals only with general categories of identifiers. It SHOULD not be used for codes that correspond 1..1 with the Identifier.system. Some identifiers may fall into multiple categories due to common usage. Where the system is known, a type is unnecessary because the type is always part of the system definition. However systems often need to handle identifiers where the system is not known. There is not a 1:1 relationship between type and system, since many different systems have the same type - **Identifier.system**: Identifier.system is always case sensitive. The FHIR specification, terminology.hl7.org and HL7 affiliates (for identifiers specific to their jurisdiction) define identifier systems that SHALL be used for certain types of identifiers. Specific rules can be found [here](identifier-registry.html) - **Identifier.value**: If the value is a full URI, then the system SHALL be urn:ietf:rfc:3986. The value's primary purpose is computational mapping. As a result, it may be normalized for comparison purposes (e.g. removing non-significant whitespace, dashes, etc.) A value formatted for human display can be conveyed using the [[[http://hl7.org/fhir/StructureDefinition/rendered-value]]]). Identifier.value is to be treated as case sensitive unless knowledge of the Identifier.system allows the processer to be confident that non-case-sensitive processing is safe - **Identifier.assigner**: The Identifier.assigner may omit the .reference element and only contain a .display element reflecting the name or other textual information about the assigning organization ## Mappings - **Identifier.use**: RIM Mapping: Role.code or implied by context - **Identifier.use**: v2 Mapping: N/A - **Identifier.type**: RIM Mapping: Role.code or implied by context - **Identifier.type**: v2 Mapping: CX.5 - **Identifier.system**: RIM Mapping: II.root or Role.id.root - **Identifier.system**: v2 Mapping: CX.4 / EI-2-4 - **Identifier.system**: ServD Mapping: ./IdentifierType - **Identifier.value**: RIM Mapping: II.extension or II.root if system indicates OID or GUID (Or Role.id.extension or root) - **Identifier.value**: v2 Mapping: CX.1 / EI.1 - **Identifier.value**: ServD Mapping: ./Value - **Identifier.period**: RIM Mapping: Role.effectiveTime or implied by context - **Identifier.period**: v2 Mapping: CX.7 + CX.8 - **Identifier.period**: ServD Mapping: ./StartDate and ./EndDate - **Identifier.assigner**: RIM Mapping: II.assigningAuthorityName but note that this is an improper use by the definition of the field. Also Role.scoper - **Identifier.assigner**: v2 Mapping: CX.4 / (CX.4,CX.9,CX.10) - **Identifier.assigner**: ServD Mapping: ./IdentifierIssuingAuthority