The description ID and display term for a SNOMED CT concept. The descriptionId and its associated display term are important to enable the representation of the exact term that was entered by the clinician that recorded the data, or the exact term that a legacy code e.g. a Read v2 code has been translated to using an assured mapping table.
Purpose
This extension extends the Coding datatype to support the exchange of the selected description ID and display term for a SNOMED CT concept, which is currently not supported by the FHIR standard.
Guidance
This extension is NOT hardcoded in any UK Core profiles due to technical issues as this extension is only used when the terminology used is SNOMED CT. This makes the hardcoding in the profiles as not desirable and liable to cause confusion on Extensible coded data elements without adding multiple slices and therefore was deemed as not a good technical solution.
May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
Comments
There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.
There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.
ele-1:All FHIR elements must have a @value or children hasValue() or (children().count() > id.count())
ext-1:Must have either extensions or value[x], not both extension.exists() != value.exists()
Mappings
rim:n/a
rim:N/A
url
1..1
System.StringFixed Value
Element Id
Extension.extension:descriptionId.url
Short description
identifies the meaning of the extension
Definition
Source of the definition for the extension code - a logical name or a URL.
Comments
The definition may point directly to a computable or human-readable definition of the extensibility codes, or it may be a logical URI as declared in some other specification. The definition SHALL be a URI for the Structure Definition defining the extension.
Data Type
System.String
Fixed Value
descriptionId
Mappings
rim:N/A
value[x]
1..1
Element Id
Extension.extension:descriptionId.value[x]
Short description
SNOMED CT description ID
Definition
The SNOMED CT description ID
Constraints
ele-1:All FHIR elements must have a @value or children hasValue() or (children().count() > id.count())
There are no (further) constraints on this element
Element Id
Extension.extension:descriptionId.value[x].type
Short description
Description of identifier
Definition
A coded type for the identifier that can be used to determine which identifier to use for a specific purpose.
Requirements
Allows users to make use of identifiers when the identifier system is not known.
Comments
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.
There are no (further) constraints on this element
Element Id
Extension.extension:descriptionId.value[x].system
Short description
The namespace for the identifier value
Definition
Establishes the namespace for the value - that is, a URL that describes a set values that are unique.
Requirements
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.
There are no (further) constraints on this element
Element Id
Extension.extension:descriptionId.value[x].value
Short description
The value that is unique
Definition
The portion of the identifier typically relevant to the user and which is unique within the context of the system.
Comments
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 Rendered Value extension. 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.
There are no (further) constraints on this element
Element Id
Extension.extension:descriptionId.value[x].period
Short description
Time period when id is/was valid for use
Definition
Time period during which identifier is/was valid for use.
Comments
A Period specifies a range of time; the context of use will specify whether the entire range applies (e.g. "the patient was an inpatient of the hospital for this time range") or one value from the range applies (e.g. "give to the patient between these two times").
Period is not used for a duration (a measure of elapsed time). See Duration.
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.
ele-1:All FHIR elements must have a @value or children hasValue() or (children().count() > id.count())
ref-1:SHALL have a contained resource if a local reference is provided reference.startsWith('#').not() or (reference.substring(1).trace('url') in %rootResource.contained.id.trace('ids'))
Mappings
rim:n/a
rim:The target of a resource reference is a RIM entry point (Act, Role, or Entity)
v2:CX.4 / (CX.4,CX.9,CX.10)
rim:II.assigningAuthorityName but note that this is an improper use by the definition of the field. Also Role.scoper
There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.
ele-1:All FHIR elements must have a @value or children hasValue() or (children().count() > id.count())
ext-1:Must have either extensions or value[x], not both extension.exists() != value.exists()
Mappings
rim:n/a
rim:N/A
url
1..1
System.StringFixed Value
Element Id
Extension.extension:descriptionDisplay.url
Short description
identifies the meaning of the extension
Definition
Source of the definition for the extension code - a logical name or a URL.
Comments
The definition may point directly to a computable or human-readable definition of the extensibility codes, or it may be a logical URI as declared in some other specification. The definition SHALL be a URI for the Structure Definition defining the extension.
Data Type
System.String
Fixed Value
descriptionDisplay
Mappings
rim:N/A
value[x]
1..1
Element Id
Extension.extension:descriptionDisplay.value[x]
Short description
SNOMED CT display term
Definition
The SNOMED CT display term
Constraints
ele-1:All FHIR elements must have a @value or children hasValue() or (children().count() > id.count())
Source of the definition for the extension code - a logical name or a URL.
Comments
The definition may point directly to a computable or human-readable definition of the extensibility codes, or it may be a logical URI as declared in some other specification. The definition SHALL be a URI for the Structure Definition defining the extension.
May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
Comments
There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.
There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.
ele-1:All FHIR elements must have a @value or children hasValue() or (children().count() > id.count())
ext-1:Must have either extensions or value[x], not both extension.exists() != value.exists()
Mappings
rim:n/a
rim:N/A
url
1..1
System.StringFixed Value
Element Id
Extension.extension:descriptionId.url
Short description
identifies the meaning of the extension
Definition
Source of the definition for the extension code - a logical name or a URL.
Comments
The definition may point directly to a computable or human-readable definition of the extensibility codes, or it may be a logical URI as declared in some other specification. The definition SHALL be a URI for the Structure Definition defining the extension.
Data Type
System.String
Fixed Value
descriptionId
Mappings
rim:N/A
value[x]
1..1
Element Id
Extension.extension:descriptionId.value[x]
Short description
SNOMED CT description ID
Definition
The SNOMED CT description ID
Constraints
ele-1:All FHIR elements must have a @value or children hasValue() or (children().count() > id.count())
There are no (further) constraints on this element
Element Id
Extension.extension:descriptionId.value[x].type
Short description
Description of identifier
Definition
A coded type for the identifier that can be used to determine which identifier to use for a specific purpose.
Requirements
Allows users to make use of identifiers when the identifier system is not known.
Comments
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.
There are no (further) constraints on this element
Element Id
Extension.extension:descriptionId.value[x].system
Short description
The namespace for the identifier value
Definition
Establishes the namespace for the value - that is, a URL that describes a set values that are unique.
Requirements
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.
There are no (further) constraints on this element
Element Id
Extension.extension:descriptionId.value[x].value
Short description
The value that is unique
Definition
The portion of the identifier typically relevant to the user and which is unique within the context of the system.
Comments
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 Rendered Value extension. 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.
There are no (further) constraints on this element
Element Id
Extension.extension:descriptionId.value[x].period
Short description
Time period when id is/was valid for use
Definition
Time period during which identifier is/was valid for use.
Comments
A Period specifies a range of time; the context of use will specify whether the entire range applies (e.g. "the patient was an inpatient of the hospital for this time range") or one value from the range applies (e.g. "give to the patient between these two times").
Period is not used for a duration (a measure of elapsed time). See Duration.
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.
ele-1:All FHIR elements must have a @value or children hasValue() or (children().count() > id.count())
ref-1:SHALL have a contained resource if a local reference is provided reference.startsWith('#').not() or (reference.substring(1).trace('url') in %rootResource.contained.id.trace('ids'))
Mappings
rim:n/a
rim:The target of a resource reference is a RIM entry point (Act, Role, or Entity)
v2:CX.4 / (CX.4,CX.9,CX.10)
rim:II.assigningAuthorityName but note that this is an improper use by the definition of the field. Also Role.scoper
There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.
ele-1:All FHIR elements must have a @value or children hasValue() or (children().count() > id.count())
ext-1:Must have either extensions or value[x], not both extension.exists() != value.exists()
Mappings
rim:n/a
rim:N/A
url
1..1
System.StringFixed Value
Element Id
Extension.extension:descriptionDisplay.url
Short description
identifies the meaning of the extension
Definition
Source of the definition for the extension code - a logical name or a URL.
Comments
The definition may point directly to a computable or human-readable definition of the extensibility codes, or it may be a logical URI as declared in some other specification. The definition SHALL be a URI for the Structure Definition defining the extension.
Data Type
System.String
Fixed Value
descriptionDisplay
Mappings
rim:N/A
value[x]
1..1
Element Id
Extension.extension:descriptionDisplay.value[x]
Short description
SNOMED CT display term
Definition
The SNOMED CT display term
Constraints
ele-1:All FHIR elements must have a @value or children hasValue() or (children().count() > id.count())
Source of the definition for the extension code - a logical name or a URL.
Comments
The definition may point directly to a computable or human-readable definition of the extensibility codes, or it may be a logical URI as declared in some other specification. The definition SHALL be a URI for the Structure Definition defining the extension.
May be used to represent additional information that is not part of the basic definition of the element. To make the use of extensions safe and manageable, there is a strict set of governance applied to the definition and use of extensions. Though any implementer can define an extension, there is a set of requirements that SHALL be met as part of the definition of the extension.
Comments
There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.
There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.
ele-1:All FHIR elements must have a @value or children hasValue() or (children().count() > id.count())
ext-1:Must have either extensions or value[x], not both extension.exists() != value.exists()
Mappings
rim:n/a
rim:N/A
url
1..1
System.StringFixed Value
Element Id
Extension.extension:descriptionId.url
Short description
identifies the meaning of the extension
Definition
Source of the definition for the extension code - a logical name or a URL.
Comments
The definition may point directly to a computable or human-readable definition of the extensibility codes, or it may be a logical URI as declared in some other specification. The definition SHALL be a URI for the Structure Definition defining the extension.
Data Type
System.String
Fixed Value
descriptionId
Mappings
rim:N/A
value[x]
1..1
Element Id
Extension.extension:descriptionId.value[x]
Short description
SNOMED CT description ID
Definition
The SNOMED CT description ID
Constraints
ele-1:All FHIR elements must have a @value or children hasValue() or (children().count() > id.count())
There are no (further) constraints on this element
Element Id
Extension.extension:descriptionId.value[x].type
Short description
Description of identifier
Definition
A coded type for the identifier that can be used to determine which identifier to use for a specific purpose.
Requirements
Allows users to make use of identifiers when the identifier system is not known.
Comments
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.
There are no (further) constraints on this element
Element Id
Extension.extension:descriptionId.value[x].system
Short description
The namespace for the identifier value
Definition
Establishes the namespace for the value - that is, a URL that describes a set values that are unique.
Requirements
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.
There are no (further) constraints on this element
Element Id
Extension.extension:descriptionId.value[x].value
Short description
The value that is unique
Definition
The portion of the identifier typically relevant to the user and which is unique within the context of the system.
Comments
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 Rendered Value extension. 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.
There are no (further) constraints on this element
Element Id
Extension.extension:descriptionId.value[x].period
Short description
Time period when id is/was valid for use
Definition
Time period during which identifier is/was valid for use.
Comments
A Period specifies a range of time; the context of use will specify whether the entire range applies (e.g. "the patient was an inpatient of the hospital for this time range") or one value from the range applies (e.g. "give to the patient between these two times").
Period is not used for a duration (a measure of elapsed time). See Duration.
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.
ele-1:All FHIR elements must have a @value or children hasValue() or (children().count() > id.count())
ref-1:SHALL have a contained resource if a local reference is provided reference.startsWith('#').not() or (reference.substring(1).trace('url') in %rootResource.contained.id.trace('ids'))
Mappings
rim:n/a
rim:The target of a resource reference is a RIM entry point (Act, Role, or Entity)
v2:CX.4 / (CX.4,CX.9,CX.10)
rim:II.assigningAuthorityName but note that this is an improper use by the definition of the field. Also Role.scoper
There can be no stigma associated with the use of extensions by any application, project, or standard - regardless of the institution or jurisdiction that uses or defines the extensions. The use of extensions is what allows the FHIR specification to retain a core level of simplicity for everyone.
ele-1:All FHIR elements must have a @value or children hasValue() or (children().count() > id.count())
ext-1:Must have either extensions or value[x], not both extension.exists() != value.exists()
Mappings
rim:n/a
rim:N/A
url
1..1
System.StringFixed Value
Element Id
Extension.extension:descriptionDisplay.url
Short description
identifies the meaning of the extension
Definition
Source of the definition for the extension code - a logical name or a URL.
Comments
The definition may point directly to a computable or human-readable definition of the extensibility codes, or it may be a logical URI as declared in some other specification. The definition SHALL be a URI for the Structure Definition defining the extension.
Data Type
System.String
Fixed Value
descriptionDisplay
Mappings
rim:N/A
value[x]
1..1
Element Id
Extension.extension:descriptionDisplay.value[x]
Short description
SNOMED CT display term
Definition
The SNOMED CT display term
Constraints
ele-1:All FHIR elements must have a @value or children hasValue() or (children().count() > id.count())
Source of the definition for the extension code - a logical name or a URL.
Comments
The definition may point directly to a computable or human-readable definition of the extensibility codes, or it may be a logical URI as declared in some other specification. The definition SHALL be a URI for the Structure Definition defining the extension.
<StructureDefinitionxmlns="http://hl7.org/fhir"><idvalue="Extension-UKCore-CodingSCTDescId" /><urlvalue="https://fhir.hl7.org.uk/StructureDefinition/Extension-UKCore-CodingSCTDescId" /><versionvalue="2.1.0" /><namevalue="ExtensionUKCoreCodingSCTDescId" /><titlevalue="Extension UK Core Coding SCT DescId" /><statusvalue="active" /><datevalue="2021-09-10" /><publishervalue="HL7 UK" /><contact><namevalue="HL7 UK" /><telecom><systemvalue="email" /><valuevalue="secretariat@hl7.org.uk" /><usevalue="work" /><rankvalue="1" /></telecom></contact><contact><namevalue="NHS Digital" /><telecom><systemvalue="email" /><valuevalue="interoperabilityteam@nhs.net" /><usevalue="work" /><rankvalue="2" /></telecom></contact><descriptionvalue="The description ID and display term for a SNOMED CT concept. The descriptionId and its associated display term are important to enable the representation of the exact term that was entered by the clinician that recorded the data, or the exact term that a legacy code e.g. a Read v2 code has been translated to using an assured mapping table." /><purposevalue="This extension extends the Coding datatype to support the exchange of the selected description ID and display term for a SNOMED CT concept, which is currently not supported by the FHIR standard." /><copyrightvalue="Copyright © 2021+ HL7 UK Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. HL7® FHIR® standard Copyright © 2011+ HL7 The HL7® FHIR® standard is used under the FHIR license. You may obtain a copy of the FHIR license at https://www.hl7.org/fhir/license.html." /><fhirVersionvalue="4.0.1" /><mapping><identityvalue="rim" /><urivalue="http://hl7.org/v3" /><namevalue="RIM Mapping" /></mapping><kindvalue="complex-type" /><abstractvalue="false" /><context><typevalue="element" /><expressionvalue="Coding" /></context><typevalue="Extension" /><baseDefinitionvalue="http://hl7.org/fhir/StructureDefinition/Extension" /><derivationvalue="constraint" /><differential><elementid="Extension"><pathvalue="Extension" /><shortvalue="SNOMED CT description ID and display term" /><definitionvalue="The SNOMED CT description ID and display term" /></element><elementid="Extension.extension"><pathvalue="Extension.extension" /><slicing><discriminator><typevalue="value" /><pathvalue="url" /></discriminator><rulesvalue="open" /></slicing></element><elementid="Extension.extension:descriptionId"><pathvalue="Extension.extension" /><sliceNamevalue="descriptionId" /><shortvalue="SNOMED CT description ID" /><definitionvalue="The SNOMED CT description ID" /><maxvalue="1" /></element><elementid="Extension.extension:descriptionId.url"><pathvalue="Extension.extension.url" /><fixedUrivalue="descriptionId" /></element><elementid="Extension.extension:descriptionId.value[x]"><pathvalue="Extension.extension.value[x]" /><shortvalue="SNOMED CT description ID" /><definitionvalue="The SNOMED CT description ID" /><minvalue="1" /><type><codevalue="Identifier" /></type></element><elementid="Extension.extension:descriptionId.value[x].assigner"><pathvalue="Extension.extension.value[x].assigner" /><type><codevalue="Reference" /><targetProfilevalue="https://fhir.hl7.org.uk/StructureDefinition/UKCore-Organization" /></type></element><elementid="Extension.extension:descriptionDisplay"><pathvalue="Extension.extension" /><sliceNamevalue="descriptionDisplay" /><shortvalue="SNOMED CT display term" /><definitionvalue="The SNOMED CT display term" /><maxvalue="1" /></element><elementid="Extension.extension:descriptionDisplay.url"><pathvalue="Extension.extension.url" /><fixedUrivalue="descriptionDisplay" /></element><elementid="Extension.extension:descriptionDisplay.value[x]"><pathvalue="Extension.extension.value[x]" /><shortvalue="SNOMED CT display term" /><definitionvalue="The SNOMED CT display term" /><minvalue="1" /><type><codevalue="string" /></type></element><elementid="Extension.url"><pathvalue="Extension.url" /><fixedUrivalue="https://fhir.hl7.org.uk/StructureDefinition/Extension-UKCore-CodingSCTDescId" /></element><elementid="Extension.value[x]"><pathvalue="Extension.value[x]" /><maxvalue="0" /></element></differential></StructureDefinition>
This extension to the base CodeableConcept data type has been introduced to carry information chosen by the end user (or held in the end user’s system) that originated from the SNOMED CT terminology and cannot be expressed using just the SNOMED CT preferred term and concept id.
Aimed at FHIR developers, this guidance will show how to process the CodeableConcept, including:
How to populate the code
How to receive the code
How to render the code to a user
How to deal with multiple codes
What to do if the coded data is not understood by receiving systems
The extent of the CodeableConcept data type (including the Extension-coding-sctdescid extension) is as follows:
The wrapper element for the coded part of the CodeableConcept.
extension
The wrapper element for the SNOMED description extension.
extension url="descriptionId"
The wrapper for the SNOMED CT description identifier.
valueId
Holds the SNOMED CT description identifier.
extension url="descriptionDisplay"
The wrapper for the SNOMED CT description display.
valueString
Holds the SNOMED CT description display.
code
Holds the SNOMED CT concept identifier.
display
Holds the SNOMED CT concept display.
system
Holds the SNOMED CT system identifier http://snomed.info/sct
version
Is not used for SNOMED CT.
userSelected
Indicates that this concept was chosen by the user.
text
Represents the text that was originally displayed to the user when the code was recorded.
Populating the CodeableConcept
This section shows you how to populate each field where the code carried is a SNOMED CT code and where it’s not a SNOMED CT code. It also includes population scenarios with examples.
Field by field population guidance
Level
Element
Directions
1
coding (SNOMED CT)
Populate this group if a SNOMED CT concept id is stored for the item.
2
system
Set to http://snomed.info/sct.
2
code
The SNOMED CT concept id stored for the item.
2
display
The text of the current preferred term of the SNOMED CT concept id according to the current NHS Realm Language Reference Sets. The text of the preferred term of the SNOMED CT concept id. The preferred term is the description specified for the concept in the NHS realm description subset. The preferred term for a concept may change over time. The sending system should determine the current preferred term for the concept.
2
extension url="descriptionId"
The SNOMED CT descriptionId recorded with the item. Only populated if a descriptionId exists.
2
extension url="descriptionDisplay"
The text of the description id. Only populated if a descriptionId exists and there is no need to populate this field if the text is lexically identical to the text in coding.display.
2
userSelected
Set to true if a user selected the SNOMED CT Code when creating/updating this item. If this is false then this element MUST not be populated by the supplying system. For consuming systems the absence of this element therefore indicates that it is false.
1
coding (other)
Populate this group if a clinical code other than SNOMED CT is stored for the item. If there are multiple codes (that is,. the item has been translated multiple times) there is a group entry per code.
2
system
The identification of the code system that defines the meaning of the symbol in the code.
2
code
The clinical code associated with the item.
2
display
The longest character length variant text associated with the current preferred term for the clinical code.
2
extension url="descriptionId"
Do not populate (SNOMED CT only).
2
extension url="descriptionDisplay"
Do not populate (SNOMED CT only).
2
userSelected
Set to true if a user selected this code when creating/updating this item. If this is false then this element MUST not be populated by the supplying system. For consuming systems the absence of this element therefore indicates that it is false.
1
text
The original text selected/manually entered by the user for the item. Only populate when there is no user selected translation set with a display or descriptionDisplay recorded. If the text displayed to the user when they entered the code on the system is not lexically identical to the term of the code then the displayed text must be populated here. Note: This occurs when either the original entry was not coded or the original coding has been lost.
Sending dm+d codes
Where a supplier is using the dm+d codes which does not contain any data at the descriptionId level, then we would not expect the descriptionId extension to be populated.
Where the descriptionId is available then this SHALL be included.
The example below demonstrates how a dm+d code should be sent where there is no descriptionId available.
Sending a SNOMED CT concept with its associated preferred term
When sending a SNOMED CT concept id with its preferred term and the descriptionId is known, then code.coding.code, code.coding.system and code.coding.extension.descriptionId SHALL be populated. Where the descriptionId is not known then the codeable concept MAY be sent without the descriptionId.
In the example below, the descriptionId is populated with the descriptionId for the preferred term, but there is no descriptionDisplay as the concept id was entered by the user and the preferred term was displayed to them when it was added.
Sending a concept where the coding system and code is unknown
In the exceptional case that the code is not known, then the code.text element can be populated without the need to populate a coding element.
XML
<code><text>Myocardial infarction</text></code>
JSON
{
"code": {
"text": "Myocardial infarction"
}
}
Sending a description id that is not the preferred term
In this case, the description id represents a term that is different from the preferred term and therefore the description will be different from that used to populate the code.coding.display element. Therefore the extension for descriptionDisplay shall be populated with the term corresponding to the descriptionId.
In the case where the code was entered into the clinical system using a legacy coding system, the code will have been mapped to a SNOMED CT translation.
However, in SNOMED CT, all concept ids always have more than one associated description: all have at least one fully specified name and at least one additional associated synonym. Of these, exactly one fully specified name and one synonym will be declared to be “preferred” at any point in time within a Realm Language Reference Set, but which terms are designated “preferred” can and does change over time.
Therefore, in most cases where such mappings have been created, they will have been mapped to an explicit pairing of one SNOMED CT concept id and one of its legitimate description ids. The particular descriptionId selected may also correspond to the preferred term but often does not.
Exceptionally, mappings may correspond to a SNOMED CT concept id only and so no particular description is declared in the map. In these cases the description originally entered by the clinician in the legacy coding system is considered to be the clinically relevant text.
XML
<code><coding><codevalue="44I4.00"/><displayvalue="Serum potassium"/><systemvalue="http://read.info/readv2"/><userSelectedvalue="true"/><!--flags the coding originally actually selected by the user --></coding><coding><extensionurl="https://fhir.hl7.org.uk/StructureDefinition/Extension-UKCore-CodingSCTDescId"><extensionurl="descriptionId"><valueIdvalue="2573011000000117"/></extension></extension><systemvalue="http://snomed.info/sct"/>
<code value="1000651000000109”/>
<displayvalue="Serum potassium level"/></coding><text>Serum potassium</text><!-- what the user saw on screen, from a data entry template --></code>
<code><coding><codevalue="B76..14"/> <!— term code = 14 ie not V2 Preferred term -->
<displayvalue="Mole of skin"/> <!— text for V2 term code = 14 -->
<systemvalue="http://read.info/readv2"/><userSelectedvalue="true"/><!-- coding actually selected by user --></coding><coding><codevalue="X78Uv"/> <!— no term code, so CTV3 PT is implied? -->
<displayvalue="Benign melanocytic naevus of skin"/> <!— text of V3 PT -->
<systemvalue="http://read.info/ctv3"/></coding><coding><extensionurl="https://fhir.hl7.org.uk/StructureDefinition/Extension-UKCore-CodingSCTDescId"><extensionurl="descriptionId"><valueIdvalue="1787065011"/> <!— not the SNOMED PT -->
</extension><extensionurl="descriptionDisplay"><valueStringvalue="Mole of skin"/> <!— text for id = 1787065011 -->
</extension></extension><systemvalue="http://snomed.info/sct"/>
<code value="400010006”/> <!— SNOMED conceptId -->
<displayvalue="Melanocytic naevus of skin"/> <!— text of SNOMED PT -->
</coding><text>Moles</text><!-- what user saw on screen, from data entry template --></code>
All Read Codes should be represented using a full five characters.
Where 4-byte codes are used these must be preceded by a full-stop as in the NHS Clinical Terms superset (e.g. 4-byte code "6521" is represented as ".6521").
Trailing full-stops are significant and must be included (e.g. "H43" is not a valid Read Code and must be represented in full as "H43..").
Care should be taken in any environment where a Read Code may have been subjected to auto-correction because:
Upper/lower case is significant
Conversion of a sequence of three full-stops "..." to a single "…" (ASCII Hex "85" Unicode Hex "2026") special character occurs in some environments and creates invalid Read Codes.
Read Code version 2 term code
Read Codes Version 2 uses a "Term Code" to distinguish between some alternative terms associated with the same Read Code. A Term Code is represented as a two digit string and is only unique within the context of a single Read Code.
It is now widely recognised that many of the terms associated with a Read Code are not true synonyms. This issue was partially resolved in NHS Clinical Terms Version 3 and further disambiguation has occurred in development of SNOMED Clinical Terms. However, in the meantime where Term Codes are stored these should be communicated with the Read Code.
A Read Code + Term Code combination is communicated as a single seven character code. Thus the code "7001200" represents the Term Code "00" associated with the Read Code "70012".
Note that this specification requires the term to be conveyed in the message in addition to any coded representation. Therefore, safe communication is not dependent on use of the Term Code in all systems. Therefore, a sending system that does not support Term Codes for a particular item of information should not send a Term Code. Similarly a receiving system that does not support Term Code storage may ignore the Term Code when constructing a record entry. However, where a sending system stores the Term Code this should be included in the message and where a receiving system stores the Term Code this should be retrieved from the message.
NHS Clinical Terms Version 3 – Term Id
In NHS Clinical Terms Version 3 the TermId is a five character string that uniquely identifies an associated term (or set of two or three terms of alternative lengths). Although it is globally unique it says nothing about the associated concept and thus must be combined with the Read Code. There are no plans to use the TermID in NHS Clinical Terms Version 3 and thus inclusion of TermId is not permitted.
Sending a description id NOT in the UK Edition, but for a concept id that IS in the UK Edition
Includes the case where the description id is locally declared to be the preferred term.
XML
<code><coding><extensionurl="https://fhir.hl7.org.uk/StructureDefinition/Extension-UKCore-CodingSCTDescId">
<extension url="descriptionId”>
<valueIdvalue="787121000006116"/><!-- descriptionId from EMIS namespace --></extension><extensionurl="descriptionDisplay"><valueStringvalue="Ideal weight"/></extension></extension><codevalue="170804003"/><!-- conceptId from SNOMED International CORE --><displayvalue="Ideal body weight"/><systemvalue="http://snomed.info/sct"/><userSelectedvalue="true"/></coding></code>
Sending a description id and concept id where NEITHER is in the UK Edition
XML
<code><coding><extensionurl="https://fhir.hl7.org.uk/StructureDefinition/Extension-UKCore-CodingSCTDescId"><extensionurl="descriptionId"><valueIdvalue="253790221000087110"/>
<!— from Canadian extension -->
</extension>
<extension url="descriptionDisplay”>
<valueStringvalue="Use of illicit drugs unknown"/><!-- synonym from Canadian extension --></extension></extension><codevalue="186782131000087106"/><!-- conceptId from Canadian extension --><displayvalue="Use of illicit type drug unknown"/><!-- preferred term from Canadian extension --><systemvalue="http://snomed.info/sct"/><userSelectedvalue="true"/></coding><text> Not known whether uses illicit drugs</text><!-- what the user saw on screen, from a data entry template --></code>
JSON
{
"code": {
"coding": {
"extension": {
"url": "https://fhir.hl7.org.uk/StructureDefinition/Extension-UKCore-CodingSCTDescId",
"extension": [
{
"url": "descriptionId",
"valueId": "253790221000087110"
},
{
"url": "descriptionDisplay",
"valueString": "Use of illicit drugs unknown"
}
]
},
"code": "186782131000087106",
"display": "Use of illicit type drug unknown",
"system": "http://snomed.info/sct",
"userSelected": "true"
},
"text": " Not known whether uses illicit drugs"
}
}
Processing data from a CodeableConcept
Degradation
Degradation is a process used in clinical systems' interoperability for dealing with codes that are not understood by receiving systems. When codes are degraded the original text entered by a user is then associated with an appropriate degrade code. For example, a drug allergy code that is not understood will be associated with a code for ‘Degraded drug allergy’.
Why and how does it happen?
When clinical codes move between systems, sometimes the receiving system may not understand all the clinical codes that it was sent. This can be for a number of reasons:
The receiving system may use a different terminology than the sending system. An example of a place in which this happens is in primary care where TPP SystmOne uses Clinical Terms Version 3 and EMIS Web uses Read version 2.
Clinical systems may be using different releases of the same terminology. In the UK, terminologies are updated regularly, usually 6 monthly. When they are updated new codes are added and old codes deprecated. If one system updates before another then for a period it may contain new codes that systems using an older version do not understand.
SNOMED CT has an extension mechanism that allows SNOMED CT to be customized usually be adding additional concepts and descriptions. So sending systems may have added content that is not available on the receiving system. See examples 6 and 7 on how messages are populated with extension data.
There may be many other reasons that codes are not understood between systems but the above are some of the most common reasons. Here they are intended to illustrate that degrades happen but are not intended to be an exhaustive list.
Why do we need a process to deal with it?
Where codes are not understood by clinical systems, having a degrade process enables us to improve interoperability and related functionality. Having appropriate degrade codes enables us to retain the structure and semantics. For example, degraded allergies appear in allergies view, medication degrades appear in medication module.
Some examples of how this can work are:
Where allergies are degraded, associating the item that was not understood with an allergy degrade code that the clinical system understands can enable it to trigger (for example) additional prescribing safety decision support systems and workflows.
Where medication codes are not understood and the data item is associated with a medication degrade code, the information can be displayed alongside all other medications in the clinical system.
What do degrades look like?
Where items are degraded, how they appear can vary depending on how a clinical system chooses to display them to a user. In many cases, depending on whether the actual code is displayed to the user, the degrade may appear to be similar to any code natively added in a system.
When they are then exported into a FHIR resource they will be exported as a degrade code with the text originally entered by the user in the code.text element.
<code><coding><display>Transfer-degraded drug allergy</display><code>196461000000101</code><system>http://snomed.info/sct</system></coding><text>Amoxicillin 250mg capsules</text></code>
When storing the item, the receiving system may choose to store any or all of the clinical codes associated with the item.
However, where the system supports SNOMED CT codes it MUST store any SNOMED CT codes associated with the item.
Where the receiving system does not understand any of the supplied coding.systems which a coding has been associated with the item (or no clinical codes were supplied), it may choose to record the item under a degraded code. The appropriate SNOMED degrade code should be used within the system to store the code.
The following codes are available in SNOMED to represent degraded items and can be used when populating FHIR resources.
Where an item that is being degraded is contained within a resource that infers a particular type of degrade then the appropriate code shall be used e.g. a code in a FHIR medication resource shall use the ‘Degraded medication’ code.
Clinical systems MUST NOT attempt to infer a particular type of degrade code where there is no clear indication that a specific type of data has been degraded. In these scenarios the ‘Transfer degraded record entry’ code shall be used.
Display
When displaying the item to end users, it is the choice of the receiving system to design their system and user experience in a safe manner that best suits their users.
Propagation
When propagating coded data to another system, the system which received the item may choose which clinical codes to include when sending the item.
If a receiving system receives a SNOMED code that it does not understand it COULD store this code and propagate it onwards if the data is exported. If systems decide to do this they should consider what would happen if the data item is changed/edited.
Note: Whilst it is the receiving system’s decision which clinical codes are appropriate for it to store, NHS England requires that SNOMED CT is supported across the entire NHS estate by April 2020.
Original term text
Storage
When processing an item, the receiving system MUST always store the original term text of the item. That is, the text chosen/manually entered by the clinician/user to describe the item they are recording. Failure to do this could result in the intended meaning of the item being altered.
The original term text will be available in one of the following fields in order of descending priority:
text
coding.descriptionDisplay where userSelected = TRUE (or is unpopulated, and only one coding element is present)
coding.display where userSelected = TRUE (or is unpopulated, and only one coding element is present)
Where the receiving system can derive the original term text from the clinical code and the derived text is lexically identical to the original term text, then the receiving system is not required to store the text separately.
However, where the system supports SNOMED CT codes it MUST store any SNOMED CT codes associated with the item where the userSelected is set to ‘TRUE’ and propagate these onward in any future export of the data. As noted in section 3.1, some SNOMED CT codes received may be from a release or extension of SNOMED not available on the receiving system.
Display
When displaying an item to end users, the receiving system MUST always display the original term text of the item.
Propagation
When propagating an item to another system, the receiving system MUST always include the original term text of the item.