This page is part of the FHIR Specification (v5.0.0-ballot: FHIR R5 Ballot Preview). The current version which supercedes this version is 5.0.0. For a full list of available versions, see the Directory of published versions . Page versions: R5 R4B R4 R3
Vocabulary Work Group | Maturity Level: N | Normative (from v4.0.0) | Security Category: Anonymous | Compartments: Not linked to any defined compartments |
The CodeSystem resource is used to declare the existence of and describe a code system or code system supplement and its key properties, and optionally define a part or all of its content.
The FHIR terminology specification is based on two key concepts, originally defined in HL7 v3 Core Principles :
CodeSystem
definitions and their use in coded elementsCode systems define which codes (symbols and/or expressions) exist, and how they are understood. Value sets select a set of codes from one or more code systems to specify which codes can be used in a particular context.
The CodeSystem resource is used to declare the existence of a code system, and its key properties:
In addition, the CodeSystem resource may list some or all of the concepts in the code system, along with their basic properties (code, display, definition), designations, and additional properties. Code System resources may also be used to define supplements, which extend an existing code system with additional designations and properties.
The CodeSystem resource is not intended to support the process of maintaining code systems. Instead, the focus is on publishing the properties and optionally the content of a code system for use throughout the FHIR eco-system, such as to support value set expansion and validation. Note that the important existing (large) code systems (SNOMED CT, LOINC, RxNorm, ICD family, etc.) all have their own maintenance systems and distribution formats, and CodeSystem is generally not an efficient way to distribute their content, though it is used as one way of declaring the filters and properties associated with those code systems.
The CodeSystem
resource declares the existence of a code system and its key properties including its preferred identifier.
The NamingSystem
resource identifies the existence of a code or identifier system, and its possible and preferred identifiers.
The key difference between the resources is who creates and manages them - CodeSystem
resources are managed
by the owner or publisher of the code system, who can properly define the code system features and content.
NamingSystem
resources, on the other hand, are frequently defined by 3rd parties that encounter the
code system in use, and need to describe the use, but do not have the authority to define the features and content.
Additionally, there may be multiple authoritative NamingSystem
resources for a code system, but ideally there
would be only one authoritative CodeSystem
resource (identified by its canonical URL) that is provided by the code system publisher, with multiple copies distributed on additional FHIR servers or elsewhere and used where needed.
Both Code System supplements and Concept Maps may be used to define relationships between concepts in different systems. ConceptMaps are assertions of the relationships between different concepts that are associated with particular contexts of use, while CodeSystem supplements are used to define inherent properties and semantics of the concepts in the code system
When using code systems and value sets, proper differentiation between a code system and a value set is important. This is one very common area where significant clinical safety risks occur in practice. Implementers should be familiar with the content in Using Codes in Resources.
A code system has three identifiers. The first two can be used to reference the code system in the FHIR context:
CodeSystem.id
: The logical id on the system that holds the CodeSystem resource instance - this typically is expected to change as the resource moves from server to server. The location URI is constructed by appending the logical id to the server base address where the instance is found and the resource type. This URI should be a resolvable URL by which the resource instance may be retrieved, usually from a FHIR server, and it may be a relative reference typically to the server base URL.
CodeSystem.url
: The canonical URL that never changes for this code system - it is the same in every copy. The element is named url
rather than uri
for legacy reasons and to strongly encourage providing a resolvable URL as the identifier whenever possible. This canonical URL is used to refer to all instances of this particular code system across all servers and systems. Ideally, this URI should be a URL which resolves to the location of the master version of the code system, though this is not always possible.
For example, for CodeSystems that are part of the FHIR specification, CodeSystem.url is the url where the CodeSystem may be accessed in the FHIR specification. However, while a new version of the FHIR specification is being prepared, new code systems that are published in CI build versions will not be found in the released FHIR specification version.
The third code system identifier is used typically for external references to the code system outside of FHIR:
CodeSystem.identifier
: A system/value pair that is used to identify the code system in other contexts (such as an OID in an HL7 v3 specification)For further information regarding resource identification, see Resource Identity.
This means that each code system has 2 different URIs that can be used to reference it -
its canonical URL (the url
element), and its local location from which it may be retrieved (which includes the id
element).
Most references to code systems use the canonical URL because it is stable and does not change from one FHIR server instance to another.
Alternatively, the identifier
and version
elements may be used to reference this code system in a
design, a profile, a CDA template
or HL7 v3 message (in the CD data
type codeSystem and codeSystemVersion properties). These different contexts may make additional restrictions on the
possible values of these elements. The identifier
is generally not needed when using code systems in
a FHIR context, where the canonical URL is always the focus.
Structure
Name | Flags | Card. | Type | Description & Constraints |
---|---|---|---|---|
CodeSystem | N | DomainResource | Declares the existence of and describes a code system or code system supplement + Warning: Name should be usable as an identifier for the module by machine processing applications such as code generation + Rule: Within a code system definition, all the codes SHALL be unique + Warning: If there is a explicit hierarchy, a hierarchyMeaning should be provided + Warning: If there is a implicit hierarchy, a hierarchyMeaning should be provided + Rule: If the code system content = supplement, it must nominate what it's a supplement for Elements defined in Ancestors: id, meta, implicitRules, language, text, contained, extension, modifierExtension Interfaces Implemented: MetadataResource | |
url | ΣC | 0..1 | uri | Canonical identifier for this code system, represented as a URI (globally unique) (Coding.system) + Warning: URL should not contain | or # - these characters make processing canonical references problematic |
identifier | Σ | 0..* | Identifier | Additional identifier for the code system (business identifier) |
version | Σ | 0..1 | string | Business version of the code system (Coding.version) |
name | ΣC | 0..1 | string | Name for this code system (computer friendly) |
title | Σ | 0..1 | string | Name for this code system (human friendly) |
status | ?!Σ | 1..1 | code | draft | active | retired | unknown PublicationStatus (Required) |
experimental | Σ | 0..1 | boolean | For testing purposes, not real usage |
date | Σ | 0..1 | dateTime | Date last changed |
publisher | Σ | 0..1 | string | Name of the publisher/steward (organization or individual) |
contact | Σ | 0..* | ContactDetail | Contact details for the publisher |
description | 0..1 | markdown | Natural language description of the code system | |
useContext | ΣTU | 0..* | UsageContext | The context that the content is intended to support |
jurisdiction | Σ | 0..* | CodeableConcept | Intended jurisdiction for code system (if applicable) Jurisdiction (Extensible) |
purpose | 0..1 | markdown | Why this code system is defined | |
copyright | 0..1 | markdown | Use and/or publishing restrictions | |
approvalDate | TU | 0..1 | date | When the CodeSystem was approved by publisher |
lastReviewDate | TU | 0..1 | date | When the CodeSystem was last reviewed |
effectivePeriod | ΣTU | 0..1 | Period | When the CodeSystem is expected to be used |
topic | TU | 0..* | CodeableConcept | E.g. Education, Treatment, Assessment, etc. DefinitionTopic (Example) |
author | TU | 0..* | ContactDetail | Who authored the CodeSystem |
editor | TU | 0..* | ContactDetail | Who edited the CodeSystem |
reviewer | TU | 0..* | ContactDetail | Who reviewed the CodeSystem |
endorser | TU | 0..* | ContactDetail | Who endorsed the CodeSystem |
relatedArtifact | TU | 0..* | RelatedArtifact | Additional documentation, citations, etc. |
caseSensitive | Σ | 0..1 | boolean | If code comparison is case sensitive |
valueSet | Σ | 0..1 | canonical(ValueSet) | Canonical reference to the value set with entire code system |
hierarchyMeaning | Σ | 0..1 | code | grouped-by | is-a | part-of | classified-with CodeSystemHierarchyMeaning (Required) |
compositional | Σ | 0..1 | boolean | If code system defines a compositional grammar |
versionNeeded | Σ | 0..1 | boolean | If definitions are not stable |
content | Σ | 1..1 | code | not-present | example | fragment | complete | supplement CodeSystemContentMode (Required) |
supplements | ΣTU | 0..1 | canonical(CodeSystem) | Canonical URL of Code System this adds designations and properties to |
count | Σ | 0..1 | unsignedInt | Total concepts in the code system |
filter | Σ | 0..* | BackboneElement | Filter that can be used in a value set |
code | Σ | 1..1 | code | Code that identifies the filter |
description | Σ | 0..1 | string | How or why the filter is used |
operator | Σ | 1..* | code | = | is-a | descendent-of | is-not-a | regex | in | not-in | generalizes | child-of | descendent-leaf | exists FilterOperator (Required) |
value | Σ | 1..1 | string | What to use for the value |
property | Σ | 0..* | BackboneElement | Additional information supplied about each concept |
code | Σ | 1..1 | code | Identifies the property on the concepts, and when referred to in operations |
uri | Σ | 0..1 | uri | Formal identifier for the property |
description | Σ | 0..1 | string | Why the property is defined, and/or what it conveys |
type | Σ | 1..1 | code | code | Coding | string | integer | boolean | dateTime | decimal PropertyType (Required) |
concept | 0..* | BackboneElement | Concepts in the code system | |
code | 1..1 | code | Code that identifies concept | |
display | 0..1 | string | Text to display to the user | |
definition | 0..1 | string | Formal definition | |
designation | C | 0..* | BackboneElement | Additional representations for the concept + Rule: Must have a value for concept.designation.use if concept.designation.additionalUse is present |
language | 0..1 | code | Human language of the designation Common Languages (Preferred but limited to AllLanguages) | |
use | 0..1 | Coding | Details how this designation would be used Designation Use (Extensible) | |
additionalUse | 0..* | Coding | Additional ways how this designation would be used Designation Use (Extensible) | |
value | 1..1 | string | The text value for this designation | |
property | 0..* | BackboneElement | Property value for the concept | |
code | 1..1 | code | Reference to CodeSystem.property.code | |
value[x] | 1..1 | Value of the property for this concept | ||
valueCode | code | |||
valueCoding | Coding | |||
valueString | string | |||
valueInteger | integer | |||
valueBoolean | boolean | |||
valueDateTime | dateTime | |||
valueDecimal | decimal | |||
concept | 0..* | see concept | Child Concepts (is-a/contains/categorizes) | |
Documentation for this format |
See the Extensions for this resource
UML Diagram (Legend)
XML Template
<CodeSystem xmlns="http://hl7.org/fhir"> <!-- from Resource: id, meta, implicitRules, and language --> <!-- from DomainResource: text, contained, extension, and modifierExtension --> <url value="[uri]"/><!-- 0..1 Canonical identifier for this code system, represented as a URI (globally unique) (Coding.system) --> <identifier><!-- 0..* Identifier Additional identifier for the code system (business identifier) --></identifier> <version value="[string]"/><!-- 0..1 Business version of the code system (Coding.version) --> <name value="[string]"/><!-- I 0..1 Name for this code system (computer friendly) --> <title value="[string]"/><!-- 0..1 Name for this code system (human friendly) --> <status value="[code]"/><!-- 1..1 draft | active | retired | unknown --> <experimental value="[boolean]"/><!-- 0..1 For testing purposes, not real usage --> <date value="[dateTime]"/><!-- 0..1 Date last changed --> <publisher value="[string]"/><!-- 0..1 Name of the publisher/steward (organization or individual) --> <contact><!-- 0..* ContactDetail Contact details for the publisher --></contact> <description value="[markdown]"/><!-- 0..1 Natural language description of the code system --> <useContext><!-- 0..* UsageContext The context that the content is intended to support --></useContext> <jurisdiction><!-- 0..* CodeableConcept Intended jurisdiction for code system (if applicable) --></jurisdiction> <purpose value="[markdown]"/><!-- 0..1 Why this code system is defined --> <copyright value="[markdown]"/><!-- 0..1 Use and/or publishing restrictions --> <approvalDate value="[date]"/><!-- 0..1 When the CodeSystem was approved by publisher --> <lastReviewDate value="[date]"/><!-- 0..1 When the CodeSystem was last reviewed --> <effectivePeriod><!-- 0..1 Period When the CodeSystem is expected to be used --></effectivePeriod> <topic><!-- 0..* CodeableConcept E.g. Education, Treatment, Assessment, etc. --></topic> <author><!-- 0..* ContactDetail Who authored the CodeSystem --></author> <editor><!-- 0..* ContactDetail Who edited the CodeSystem --></editor> <reviewer><!-- 0..* ContactDetail Who reviewed the CodeSystem --></reviewer> <endorser><!-- 0..* ContactDetail Who endorsed the CodeSystem --></endorser> <relatedArtifact><!-- 0..* RelatedArtifact Additional documentation, citations, etc. --></relatedArtifact> <caseSensitive value="[boolean]"/><!-- 0..1 If code comparison is case sensitive --> <valueSet><!-- 0..1 canonical(ValueSet) Canonical reference to the value set with entire code system --></valueSet> <hierarchyMeaning value="[code]"/><!-- 0..1 grouped-by | is-a | part-of | classified-with --> <compositional value="[boolean]"/><!-- 0..1 If code system defines a compositional grammar --> <versionNeeded value="[boolean]"/><!-- 0..1 If definitions are not stable --> <content value="[code]"/><!-- 1..1 not-present | example | fragment | complete | supplement --> <supplements><!-- 0..1 canonical(CodeSystem) Canonical URL of Code System this adds designations and properties to --></supplements> <count value="[unsignedInt]"/><!-- 0..1 Total concepts in the code system --> <filter> <!-- 0..* Filter that can be used in a value set --> <code value="[code]"/><!-- 1..1 Code that identifies the filter --> <description value="[string]"/><!-- 0..1 How or why the filter is used --> <operator value="[code]"/><!-- 1..* = | is-a | descendent-of | is-not-a | regex | in | not-in | generalizes | child-of | descendent-leaf | exists --> <value value="[string]"/><!-- 1..1 What to use for the value --> </filter> <property> <!-- 0..* Additional information supplied about each concept --> <code value="[code]"/><!-- 1..1 Identifies the property on the concepts, and when referred to in operations --> <uri value="[uri]"/><!-- 0..1 Formal identifier for the property --> <description value="[string]"/><!-- 0..1 Why the property is defined, and/or what it conveys --> <type value="[code]"/><!-- 1..1 code | Coding | string | integer | boolean | dateTime | decimal --> </property> <concept> <!-- 0..* Concepts in the code system --> <code value="[code]"/><!-- 1..1 Code that identifies concept --> <display value="[string]"/><!-- 0..1 Text to display to the user --> <definition value="[string]"/><!-- 0..1 Formal definition --> <designation> <!-- 0..* Additional representations for the concept --> <language value="[code]"/><!-- 0..1 Human language of the designation --> <use><!-- 0..1 Coding Details how this designation would be used --></use> <additionalUse><!-- 0..* Coding Additional ways how this designation would be used --></additionalUse> <value value="[string]"/><!-- 1..1 The text value for this designation --> </designation> <property> <!-- 0..* Property value for the concept --> <code value="[code]"/><!-- 1..1 Reference to CodeSystem.property.code --> <value[x]><!-- 1..1 code|Coding|string|integer|boolean|dateTime|decimal Value of the property for this concept --></value[x]> </property> <concept><!-- 0..* Content as for CodeSystem.concept Child Concepts (is-a/contains/categorizes) --></concept> </concept> </CodeSystem>
JSON Template
{ "resourceType" : "CodeSystem", // from Resource: id, meta, implicitRules, and language // from DomainResource: text, contained, extension, and modifierExtension "url" : "<uri>", // Canonical identifier for this code system, represented as a URI (globally unique) (Coding.system) "identifier" : [{ Identifier }], // Additional identifier for the code system (business identifier) "version" : "<string>", // Business version of the code system (Coding.version) "name" : "<string>", // I Name for this code system (computer friendly) "title" : "<string>", // Name for this code system (human friendly) "status" : "<code>", // R! draft | active | retired | unknown "experimental" : <boolean>, // For testing purposes, not real usage "date" : "<dateTime>", // Date last changed "publisher" : "<string>", // Name of the publisher/steward (organization or individual) "contact" : [{ ContactDetail }], // Contact details for the publisher "description" : "<markdown>", // Natural language description of the code system "useContext" : [{ UsageContext }], // The context that the content is intended to support "jurisdiction" : [{ CodeableConcept }], // Intended jurisdiction for code system (if applicable) "purpose" : "<markdown>", // Why this code system is defined "copyright" : "<markdown>", // Use and/or publishing restrictions "approvalDate" : "<date>", // When the CodeSystem was approved by publisher "lastReviewDate" : "<date>", // When the CodeSystem was last reviewed "effectivePeriod" : { Period }, // When the CodeSystem is expected to be used "topic" : [{ CodeableConcept }], // E.g. Education, Treatment, Assessment, etc. "author" : [{ ContactDetail }], // Who authored the CodeSystem "editor" : [{ ContactDetail }], // Who edited the CodeSystem "reviewer" : [{ ContactDetail }], // Who reviewed the CodeSystem "endorser" : [{ ContactDetail }], // Who endorsed the CodeSystem "relatedArtifact" : [{ RelatedArtifact }], // Additional documentation, citations, etc. "caseSensitive" : <boolean>, // If code comparison is case sensitive "valueSet" : "<canonical(ValueSet)>", // Canonical reference to the value set with entire code system "hierarchyMeaning" : "<code>", // grouped-by | is-a | part-of | classified-with "compositional" : <boolean>, // If code system defines a compositional grammar "versionNeeded" : <boolean>, // If definitions are not stable "content" : "<code>", // R! not-present | example | fragment | complete | supplement "supplements" : "<canonical(CodeSystem)>", // Canonical URL of Code System this adds designations and properties to "count" : "<unsignedInt>", // Total concepts in the code system "filter" : [{ // Filter that can be used in a value set "code" : "<code>", // R! Code that identifies the filter "description" : "<string>", // How or why the filter is used "operator" : ["<code>"], // R! = | is-a | descendent-of | is-not-a | regex | in | not-in | generalizes | child-of | descendent-leaf | exists "value" : "<string>" // R! What to use for the value }], "property" : [{ // Additional information supplied about each concept "code" : "<code>", // R! Identifies the property on the concepts, and when referred to in operations "uri" : "<uri>", // Formal identifier for the property "description" : "<string>", // Why the property is defined, and/or what it conveys "type" : "<code>" // R! code | Coding | string | integer | boolean | dateTime | decimal }], "concept" : [{ // Concepts in the code system "code" : "<code>", // R! Code that identifies concept "display" : "<string>", // Text to display to the user "definition" : "<string>", // Formal definition "designation" : [{ // Additional representations for the concept "language" : "<code>", // Human language of the designation "use" : { Coding }, // Details how this designation would be used "additionalUse" : [{ Coding }], // Additional ways how this designation would be used "value" : "<string>" // R! The text value for this designation }], "property" : [{ // Property value for the concept "code" : "<code>", // R! Reference to CodeSystem.property.code // value[x]: Value of the property for this concept. One of these 7: "valueCode" : "<code>", "valueCoding" : { Coding }, "valueString" : "<string>", "valueInteger" : <integer>, "valueBoolean" : <boolean>, "valueDateTime" : "<dateTime>", "valueDecimal" : <decimal> }], "concept" : [{ Content as for CodeSystem.concept }] // Child Concepts (is-a/contains/categorizes) }] }
Turtle Template
@prefix fhir: <http://hl7.org/fhir/> . [ a fhir:CodeSystem; fhir:nodeRole fhir:treeRoot; # if this is the parser root # from Resource: .id, .meta, .implicitRules, and .language # from DomainResource: .text, .contained, .extension, and .modifierExtension fhir:CodeSystem.url [ uri ]; # 0..1 Canonical identifier for this code system, represented as a URI (globally unique) (Coding.system) fhir:CodeSystem.identifier [ Identifier ], ... ; # 0..* Additional identifier for the code system (business identifier) fhir:CodeSystem.version [ string ]; # 0..1 Business version of the code system (Coding.version) fhir:CodeSystem.name [ string ]; # 0..1 I Name for this code system (computer friendly) fhir:CodeSystem.title [ string ]; # 0..1 Name for this code system (human friendly) fhir:CodeSystem.status [ code ]; # 1..1 draft | active | retired | unknown fhir:CodeSystem.experimental [ boolean ]; # 0..1 For testing purposes, not real usage fhir:CodeSystem.date [ dateTime ]; # 0..1 Date last changed fhir:CodeSystem.publisher [ string ]; # 0..1 Name of the publisher/steward (organization or individual) fhir:CodeSystem.contact [ ContactDetail ], ... ; # 0..* Contact details for the publisher fhir:CodeSystem.description [ markdown ]; # 0..1 Natural language description of the code system fhir:CodeSystem.useContext [ UsageContext ], ... ; # 0..* The context that the content is intended to support fhir:CodeSystem.jurisdiction [ CodeableConcept ], ... ; # 0..* Intended jurisdiction for code system (if applicable) fhir:CodeSystem.purpose [ markdown ]; # 0..1 Why this code system is defined fhir:CodeSystem.copyright [ markdown ]; # 0..1 Use and/or publishing restrictions fhir:CodeSystem.approvalDate [ date ]; # 0..1 When the CodeSystem was approved by publisher fhir:CodeSystem.lastReviewDate [ date ]; # 0..1 When the CodeSystem was last reviewed fhir:CodeSystem.effectivePeriod [ Period ]; # 0..1 When the CodeSystem is expected to be used fhir:CodeSystem.topic [ CodeableConcept ], ... ; # 0..* E.g. Education, Treatment, Assessment, etc. fhir:CodeSystem.author [ ContactDetail ], ... ; # 0..* Who authored the CodeSystem fhir:CodeSystem.editor [ ContactDetail ], ... ; # 0..* Who edited the CodeSystem fhir:CodeSystem.reviewer [ ContactDetail ], ... ; # 0..* Who reviewed the CodeSystem fhir:CodeSystem.endorser [ ContactDetail ], ... ; # 0..* Who endorsed the CodeSystem fhir:CodeSystem.relatedArtifact [ RelatedArtifact ], ... ; # 0..* Additional documentation, citations, etc. fhir:CodeSystem.caseSensitive [ boolean ]; # 0..1 If code comparison is case sensitive fhir:CodeSystem.valueSet [ canonical(ValueSet) ]; # 0..1 Canonical reference to the value set with entire code system fhir:CodeSystem.hierarchyMeaning [ code ]; # 0..1 grouped-by | is-a | part-of | classified-with fhir:CodeSystem.compositional [ boolean ]; # 0..1 If code system defines a compositional grammar fhir:CodeSystem.versionNeeded [ boolean ]; # 0..1 If definitions are not stable fhir:CodeSystem.content [ code ]; # 1..1 not-present | example | fragment | complete | supplement fhir:CodeSystem.supplements [ canonical(CodeSystem) ]; # 0..1 Canonical URL of Code System this adds designations and properties to fhir:CodeSystem.count [ unsignedInt ]; # 0..1 Total concepts in the code system fhir:CodeSystem.filter [ # 0..* Filter that can be used in a value set fhir:CodeSystem.filter.code [ code ]; # 1..1 Code that identifies the filter fhir:CodeSystem.filter.description [ string ]; # 0..1 How or why the filter is used fhir:CodeSystem.filter.operator [ code ], ... ; # 1..* = | is-a | descendent-of | is-not-a | regex | in | not-in | generalizes | child-of | descendent-leaf | exists fhir:CodeSystem.filter.value [ string ]; # 1..1 What to use for the value ], ...; fhir:CodeSystem.property [ # 0..* Additional information supplied about each concept fhir:CodeSystem.property.code [ code ]; # 1..1 Identifies the property on the concepts, and when referred to in operations fhir:CodeSystem.property.uri [ uri ]; # 0..1 Formal identifier for the property fhir:CodeSystem.property.description [ string ]; # 0..1 Why the property is defined, and/or what it conveys fhir:CodeSystem.property.type [ code ]; # 1..1 code | Coding | string | integer | boolean | dateTime | decimal ], ...; fhir:CodeSystem.concept [ # 0..* Concepts in the code system fhir:CodeSystem.concept.code [ code ]; # 1..1 Code that identifies concept fhir:CodeSystem.concept.display [ string ]; # 0..1 Text to display to the user fhir:CodeSystem.concept.definition [ string ]; # 0..1 Formal definition fhir:CodeSystem.concept.designation [ # 0..* Additional representations for the concept fhir:CodeSystem.concept.designation.language [ code ]; # 0..1 Human language of the designation fhir:CodeSystem.concept.designation.use [ Coding ]; # 0..1 Details how this designation would be used fhir:CodeSystem.concept.designation.additionalUse [ Coding ], ... ; # 0..* Additional ways how this designation would be used fhir:CodeSystem.concept.designation.value [ string ]; # 1..1 The text value for this designation ], ...; fhir:CodeSystem.concept.property [ # 0..* Property value for the concept fhir:CodeSystem.concept.property.code [ code ]; # 1..1 Reference to CodeSystem.property.code # CodeSystem.concept.property.value[x] : 1..1 Value of the property for this concept. One of these 7 fhir:CodeSystem.concept.property.valueCode [ code ] fhir:CodeSystem.concept.property.valueCoding [ Coding ] fhir:CodeSystem.concept.property.valueString [ string ] fhir:CodeSystem.concept.property.valueInteger [ integer ] fhir:CodeSystem.concept.property.valueBoolean [ boolean ] fhir:CodeSystem.concept.property.valueDateTime [ dateTime ] fhir:CodeSystem.concept.property.valueDecimal [ decimal ] ], ...; fhir:CodeSystem.concept.concept [ See CodeSystem.concept ], ... ; # 0..* Child Concepts (is-a/contains/categorizes) ], ...; ]
Changes since R4
CodeSystem | |
CodeSystem.approvalDate |
|
CodeSystem.lastReviewDate |
|
CodeSystem.effectivePeriod |
|
CodeSystem.topic |
|
CodeSystem.author |
|
CodeSystem.editor |
|
CodeSystem.reviewer |
|
CodeSystem.endorser |
|
CodeSystem.relatedArtifact |
|
CodeSystem.concept.designation.additionalUse |
|
See the Full Difference for further information
This analysis is available as XML or JSON.
See R3 <--> R4 Conversion Maps (status = 4 tests that all execute ok. All tests pass round-trip testing and 3 r3 resources are invalid (0 errors).)
Structure
Name | Flags | Card. | Type | Description & Constraints |
---|---|---|---|---|
CodeSystem | N | DomainResource | Declares the existence of and describes a code system or code system supplement + Warning: Name should be usable as an identifier for the module by machine processing applications such as code generation + Rule: Within a code system definition, all the codes SHALL be unique + Warning: If there is a explicit hierarchy, a hierarchyMeaning should be provided + Warning: If there is a implicit hierarchy, a hierarchyMeaning should be provided + Rule: If the code system content = supplement, it must nominate what it's a supplement for Elements defined in Ancestors: id, meta, implicitRules, language, text, contained, extension, modifierExtension Interfaces Implemented: MetadataResource | |
url | ΣC | 0..1 | uri | Canonical identifier for this code system, represented as a URI (globally unique) (Coding.system) + Warning: URL should not contain | or # - these characters make processing canonical references problematic |
identifier | Σ | 0..* | Identifier | Additional identifier for the code system (business identifier) |
version | Σ | 0..1 | string | Business version of the code system (Coding.version) |
name | ΣC | 0..1 | string | Name for this code system (computer friendly) |
title | Σ | 0..1 | string | Name for this code system (human friendly) |
status | ?!Σ | 1..1 | code | draft | active | retired | unknown PublicationStatus (Required) |
experimental | Σ | 0..1 | boolean | For testing purposes, not real usage |
date | Σ | 0..1 | dateTime | Date last changed |
publisher | Σ | 0..1 | string | Name of the publisher/steward (organization or individual) |
contact | Σ | 0..* | ContactDetail | Contact details for the publisher |
description | 0..1 | markdown | Natural language description of the code system | |
useContext | ΣTU | 0..* | UsageContext | The context that the content is intended to support |
jurisdiction | Σ | 0..* | CodeableConcept | Intended jurisdiction for code system (if applicable) Jurisdiction (Extensible) |
purpose | 0..1 | markdown | Why this code system is defined | |
copyright | 0..1 | markdown | Use and/or publishing restrictions | |
approvalDate | TU | 0..1 | date | When the CodeSystem was approved by publisher |
lastReviewDate | TU | 0..1 | date | When the CodeSystem was last reviewed |
effectivePeriod | ΣTU | 0..1 | Period | When the CodeSystem is expected to be used |
topic | TU | 0..* | CodeableConcept | E.g. Education, Treatment, Assessment, etc. DefinitionTopic (Example) |
author | TU | 0..* | ContactDetail | Who authored the CodeSystem |
editor | TU | 0..* | ContactDetail | Who edited the CodeSystem |
reviewer | TU | 0..* | ContactDetail | Who reviewed the CodeSystem |
endorser | TU | 0..* | ContactDetail | Who endorsed the CodeSystem |
relatedArtifact | TU | 0..* | RelatedArtifact | Additional documentation, citations, etc. |
caseSensitive | Σ | 0..1 | boolean | If code comparison is case sensitive |
valueSet | Σ | 0..1 | canonical(ValueSet) | Canonical reference to the value set with entire code system |
hierarchyMeaning | Σ | 0..1 | code | grouped-by | is-a | part-of | classified-with CodeSystemHierarchyMeaning (Required) |
compositional | Σ | 0..1 | boolean | If code system defines a compositional grammar |
versionNeeded | Σ | 0..1 | boolean | If definitions are not stable |
content | Σ | 1..1 | code | not-present | example | fragment | complete | supplement CodeSystemContentMode (Required) |
supplements | ΣTU | 0..1 | canonical(CodeSystem) | Canonical URL of Code System this adds designations and properties to |
count | Σ | 0..1 | unsignedInt | Total concepts in the code system |
filter | Σ | 0..* | BackboneElement | Filter that can be used in a value set |
code | Σ | 1..1 | code | Code that identifies the filter |
description | Σ | 0..1 | string | How or why the filter is used |
operator | Σ | 1..* | code | = | is-a | descendent-of | is-not-a | regex | in | not-in | generalizes | child-of | descendent-leaf | exists FilterOperator (Required) |
value | Σ | 1..1 | string | What to use for the value |
property | Σ | 0..* | BackboneElement | Additional information supplied about each concept |
code | Σ | 1..1 | code | Identifies the property on the concepts, and when referred to in operations |
uri | Σ | 0..1 | uri | Formal identifier for the property |
description | Σ | 0..1 | string | Why the property is defined, and/or what it conveys |
type | Σ | 1..1 | code | code | Coding | string | integer | boolean | dateTime | decimal PropertyType (Required) |
concept | 0..* | BackboneElement | Concepts in the code system | |
code | 1..1 | code | Code that identifies concept | |
display | 0..1 | string | Text to display to the user | |
definition | 0..1 | string | Formal definition | |
designation | C | 0..* | BackboneElement | Additional representations for the concept + Rule: Must have a value for concept.designation.use if concept.designation.additionalUse is present |
language | 0..1 | code | Human language of the designation Common Languages (Preferred but limited to AllLanguages) | |
use | 0..1 | Coding | Details how this designation would be used Designation Use (Extensible) | |
additionalUse | 0..* | Coding | Additional ways how this designation would be used Designation Use (Extensible) | |
value | 1..1 | string | The text value for this designation | |
property | 0..* | BackboneElement | Property value for the concept | |
code | 1..1 | code | Reference to CodeSystem.property.code | |
value[x] | 1..1 | Value of the property for this concept | ||
valueCode | code | |||
valueCoding | Coding | |||
valueString | string | |||
valueInteger | integer | |||
valueBoolean | boolean | |||
valueDateTime | dateTime | |||
valueDecimal | decimal | |||
concept | 0..* | see concept | Child Concepts (is-a/contains/categorizes) | |
Documentation for this format |
See the Extensions for this resource
XML Template
<CodeSystem xmlns="http://hl7.org/fhir"> <!-- from Resource: id, meta, implicitRules, and language --> <!-- from DomainResource: text, contained, extension, and modifierExtension --> <url value="[uri]"/><!-- 0..1 Canonical identifier for this code system, represented as a URI (globally unique) (Coding.system) --> <identifier><!-- 0..* Identifier Additional identifier for the code system (business identifier) --></identifier> <version value="[string]"/><!-- 0..1 Business version of the code system (Coding.version) --> <name value="[string]"/><!-- I 0..1 Name for this code system (computer friendly) --> <title value="[string]"/><!-- 0..1 Name for this code system (human friendly) --> <status value="[code]"/><!-- 1..1 draft | active | retired | unknown --> <experimental value="[boolean]"/><!-- 0..1 For testing purposes, not real usage --> <date value="[dateTime]"/><!-- 0..1 Date last changed --> <publisher value="[string]"/><!-- 0..1 Name of the publisher/steward (organization or individual) --> <contact><!-- 0..* ContactDetail Contact details for the publisher --></contact> <description value="[markdown]"/><!-- 0..1 Natural language description of the code system --> <useContext><!-- 0..* UsageContext The context that the content is intended to support --></useContext> <jurisdiction><!-- 0..* CodeableConcept Intended jurisdiction for code system (if applicable) --></jurisdiction> <purpose value="[markdown]"/><!-- 0..1 Why this code system is defined --> <copyright value="[markdown]"/><!-- 0..1 Use and/or publishing restrictions --> <approvalDate value="[date]"/><!-- 0..1 When the CodeSystem was approved by publisher --> <lastReviewDate value="[date]"/><!-- 0..1 When the CodeSystem was last reviewed --> <effectivePeriod><!-- 0..1 Period When the CodeSystem is expected to be used --></effectivePeriod> <topic><!-- 0..* CodeableConcept E.g. Education, Treatment, Assessment, etc. --></topic> <author><!-- 0..* ContactDetail Who authored the CodeSystem --></author> <editor><!-- 0..* ContactDetail Who edited the CodeSystem --></editor> <reviewer><!-- 0..* ContactDetail Who reviewed the CodeSystem --></reviewer> <endorser><!-- 0..* ContactDetail Who endorsed the CodeSystem --></endorser> <relatedArtifact><!-- 0..* RelatedArtifact Additional documentation, citations, etc. --></relatedArtifact> <caseSensitive value="[boolean]"/><!-- 0..1 If code comparison is case sensitive --> <valueSet><!-- 0..1 canonical(ValueSet) Canonical reference to the value set with entire code system --></valueSet> <hierarchyMeaning value="[code]"/><!-- 0..1 grouped-by | is-a | part-of | classified-with --> <compositional value="[boolean]"/><!-- 0..1 If code system defines a compositional grammar --> <versionNeeded value="[boolean]"/><!-- 0..1 If definitions are not stable --> <content value="[code]"/><!-- 1..1 not-present | example | fragment | complete | supplement --> <supplements><!-- 0..1 canonical(CodeSystem) Canonical URL of Code System this adds designations and properties to --></supplements> <count value="[unsignedInt]"/><!-- 0..1 Total concepts in the code system --> <filter> <!-- 0..* Filter that can be used in a value set --> <code value="[code]"/><!-- 1..1 Code that identifies the filter --> <description value="[string]"/><!-- 0..1 How or why the filter is used --> <operator value="[code]"/><!-- 1..* = | is-a | descendent-of | is-not-a | regex | in | not-in | generalizes | child-of | descendent-leaf | exists --> <value value="[string]"/><!-- 1..1 What to use for the value --> </filter> <property> <!-- 0..* Additional information supplied about each concept --> <code value="[code]"/><!-- 1..1 Identifies the property on the concepts, and when referred to in operations --> <uri value="[uri]"/><!-- 0..1 Formal identifier for the property --> <description value="[string]"/><!-- 0..1 Why the property is defined, and/or what it conveys --> <type value="[code]"/><!-- 1..1 code | Coding | string | integer | boolean | dateTime | decimal --> </property> <concept> <!-- 0..* Concepts in the code system --> <code value="[code]"/><!-- 1..1 Code that identifies concept --> <display value="[string]"/><!-- 0..1 Text to display to the user --> <definition value="[string]"/><!-- 0..1 Formal definition --> <designation> <!-- 0..* Additional representations for the concept --> <language value="[code]"/><!-- 0..1 Human language of the designation --> <use><!-- 0..1 Coding Details how this designation would be used --></use> <additionalUse><!-- 0..* Coding Additional ways how this designation would be used --></additionalUse> <value value="[string]"/><!-- 1..1 The text value for this designation --> </designation> <property> <!-- 0..* Property value for the concept --> <code value="[code]"/><!-- 1..1 Reference to CodeSystem.property.code --> <value[x]><!-- 1..1 code|Coding|string|integer|boolean|dateTime|decimal Value of the property for this concept --></value[x]> </property> <concept><!-- 0..* Content as for CodeSystem.concept Child Concepts (is-a/contains/categorizes) --></concept> </concept> </CodeSystem>
JSON Template
{ "resourceType" : "CodeSystem", // from Resource: id, meta, implicitRules, and language // from DomainResource: text, contained, extension, and modifierExtension "url" : "<uri>", // Canonical identifier for this code system, represented as a URI (globally unique) (Coding.system) "identifier" : [{ Identifier }], // Additional identifier for the code system (business identifier) "version" : "<string>", // Business version of the code system (Coding.version) "name" : "<string>", // I Name for this code system (computer friendly) "title" : "<string>", // Name for this code system (human friendly) "status" : "<code>", // R! draft | active | retired | unknown "experimental" : <boolean>, // For testing purposes, not real usage "date" : "<dateTime>", // Date last changed "publisher" : "<string>", // Name of the publisher/steward (organization or individual) "contact" : [{ ContactDetail }], // Contact details for the publisher "description" : "<markdown>", // Natural language description of the code system "useContext" : [{ UsageContext }], // The context that the content is intended to support "jurisdiction" : [{ CodeableConcept }], // Intended jurisdiction for code system (if applicable) "purpose" : "<markdown>", // Why this code system is defined "copyright" : "<markdown>", // Use and/or publishing restrictions "approvalDate" : "<date>", // When the CodeSystem was approved by publisher "lastReviewDate" : "<date>", // When the CodeSystem was last reviewed "effectivePeriod" : { Period }, // When the CodeSystem is expected to be used "topic" : [{ CodeableConcept }], // E.g. Education, Treatment, Assessment, etc. "author" : [{ ContactDetail }], // Who authored the CodeSystem "editor" : [{ ContactDetail }], // Who edited the CodeSystem "reviewer" : [{ ContactDetail }], // Who reviewed the CodeSystem "endorser" : [{ ContactDetail }], // Who endorsed the CodeSystem "relatedArtifact" : [{ RelatedArtifact }], // Additional documentation, citations, etc. "caseSensitive" : <boolean>, // If code comparison is case sensitive "valueSet" : "<canonical(ValueSet)>", // Canonical reference to the value set with entire code system "hierarchyMeaning" : "<code>", // grouped-by | is-a | part-of | classified-with "compositional" : <boolean>, // If code system defines a compositional grammar "versionNeeded" : <boolean>, // If definitions are not stable "content" : "<code>", // R! not-present | example | fragment | complete | supplement "supplements" : "<canonical(CodeSystem)>", // Canonical URL of Code System this adds designations and properties to "count" : "<unsignedInt>", // Total concepts in the code system "filter" : [{ // Filter that can be used in a value set "code" : "<code>", // R! Code that identifies the filter "description" : "<string>", // How or why the filter is used "operator" : ["<code>"], // R! = | is-a | descendent-of | is-not-a | regex | in | not-in | generalizes | child-of | descendent-leaf | exists "value" : "<string>" // R! What to use for the value }], "property" : [{ // Additional information supplied about each concept "code" : "<code>", // R! Identifies the property on the concepts, and when referred to in operations "uri" : "<uri>", // Formal identifier for the property "description" : "<string>", // Why the property is defined, and/or what it conveys "type" : "<code>" // R! code | Coding | string | integer | boolean | dateTime | decimal }], "concept" : [{ // Concepts in the code system "code" : "<code>", // R! Code that identifies concept "display" : "<string>", // Text to display to the user "definition" : "<string>", // Formal definition "designation" : [{ // Additional representations for the concept "language" : "<code>", // Human language of the designation "use" : { Coding }, // Details how this designation would be used "additionalUse" : [{ Coding }], // Additional ways how this designation would be used "value" : "<string>" // R! The text value for this designation }], "property" : [{ // Property value for the concept "code" : "<code>", // R! Reference to CodeSystem.property.code // value[x]: Value of the property for this concept. One of these 7: "valueCode" : "<code>", "valueCoding" : { Coding }, "valueString" : "<string>", "valueInteger" : <integer>, "valueBoolean" : <boolean>, "valueDateTime" : "<dateTime>", "valueDecimal" : <decimal> }], "concept" : [{ Content as for CodeSystem.concept }] // Child Concepts (is-a/contains/categorizes) }] }
Turtle Template
@prefix fhir: <http://hl7.org/fhir/> . [ a fhir:CodeSystem; fhir:nodeRole fhir:treeRoot; # if this is the parser root # from Resource: .id, .meta, .implicitRules, and .language # from DomainResource: .text, .contained, .extension, and .modifierExtension fhir:CodeSystem.url [ uri ]; # 0..1 Canonical identifier for this code system, represented as a URI (globally unique) (Coding.system) fhir:CodeSystem.identifier [ Identifier ], ... ; # 0..* Additional identifier for the code system (business identifier) fhir:CodeSystem.version [ string ]; # 0..1 Business version of the code system (Coding.version) fhir:CodeSystem.name [ string ]; # 0..1 I Name for this code system (computer friendly) fhir:CodeSystem.title [ string ]; # 0..1 Name for this code system (human friendly) fhir:CodeSystem.status [ code ]; # 1..1 draft | active | retired | unknown fhir:CodeSystem.experimental [ boolean ]; # 0..1 For testing purposes, not real usage fhir:CodeSystem.date [ dateTime ]; # 0..1 Date last changed fhir:CodeSystem.publisher [ string ]; # 0..1 Name of the publisher/steward (organization or individual) fhir:CodeSystem.contact [ ContactDetail ], ... ; # 0..* Contact details for the publisher fhir:CodeSystem.description [ markdown ]; # 0..1 Natural language description of the code system fhir:CodeSystem.useContext [ UsageContext ], ... ; # 0..* The context that the content is intended to support fhir:CodeSystem.jurisdiction [ CodeableConcept ], ... ; # 0..* Intended jurisdiction for code system (if applicable) fhir:CodeSystem.purpose [ markdown ]; # 0..1 Why this code system is defined fhir:CodeSystem.copyright [ markdown ]; # 0..1 Use and/or publishing restrictions fhir:CodeSystem.approvalDate [ date ]; # 0..1 When the CodeSystem was approved by publisher fhir:CodeSystem.lastReviewDate [ date ]; # 0..1 When the CodeSystem was last reviewed fhir:CodeSystem.effectivePeriod [ Period ]; # 0..1 When the CodeSystem is expected to be used fhir:CodeSystem.topic [ CodeableConcept ], ... ; # 0..* E.g. Education, Treatment, Assessment, etc. fhir:CodeSystem.author [ ContactDetail ], ... ; # 0..* Who authored the CodeSystem fhir:CodeSystem.editor [ ContactDetail ], ... ; # 0..* Who edited the CodeSystem fhir:CodeSystem.reviewer [ ContactDetail ], ... ; # 0..* Who reviewed the CodeSystem fhir:CodeSystem.endorser [ ContactDetail ], ... ; # 0..* Who endorsed the CodeSystem fhir:CodeSystem.relatedArtifact [ RelatedArtifact ], ... ; # 0..* Additional documentation, citations, etc. fhir:CodeSystem.caseSensitive [ boolean ]; # 0..1 If code comparison is case sensitive fhir:CodeSystem.valueSet [ canonical(ValueSet) ]; # 0..1 Canonical reference to the value set with entire code system fhir:CodeSystem.hierarchyMeaning [ code ]; # 0..1 grouped-by | is-a | part-of | classified-with fhir:CodeSystem.compositional [ boolean ]; # 0..1 If code system defines a compositional grammar fhir:CodeSystem.versionNeeded [ boolean ]; # 0..1 If definitions are not stable fhir:CodeSystem.content [ code ]; # 1..1 not-present | example | fragment | complete | supplement fhir:CodeSystem.supplements [ canonical(CodeSystem) ]; # 0..1 Canonical URL of Code System this adds designations and properties to fhir:CodeSystem.count [ unsignedInt ]; # 0..1 Total concepts in the code system fhir:CodeSystem.filter [ # 0..* Filter that can be used in a value set fhir:CodeSystem.filter.code [ code ]; # 1..1 Code that identifies the filter fhir:CodeSystem.filter.description [ string ]; # 0..1 How or why the filter is used fhir:CodeSystem.filter.operator [ code ], ... ; # 1..* = | is-a | descendent-of | is-not-a | regex | in | not-in | generalizes | child-of | descendent-leaf | exists fhir:CodeSystem.filter.value [ string ]; # 1..1 What to use for the value ], ...; fhir:CodeSystem.property [ # 0..* Additional information supplied about each concept fhir:CodeSystem.property.code [ code ]; # 1..1 Identifies the property on the concepts, and when referred to in operations fhir:CodeSystem.property.uri [ uri ]; # 0..1 Formal identifier for the property fhir:CodeSystem.property.description [ string ]; # 0..1 Why the property is defined, and/or what it conveys fhir:CodeSystem.property.type [ code ]; # 1..1 code | Coding | string | integer | boolean | dateTime | decimal ], ...; fhir:CodeSystem.concept [ # 0..* Concepts in the code system fhir:CodeSystem.concept.code [ code ]; # 1..1 Code that identifies concept fhir:CodeSystem.concept.display [ string ]; # 0..1 Text to display to the user fhir:CodeSystem.concept.definition [ string ]; # 0..1 Formal definition fhir:CodeSystem.concept.designation [ # 0..* Additional representations for the concept fhir:CodeSystem.concept.designation.language [ code ]; # 0..1 Human language of the designation fhir:CodeSystem.concept.designation.use [ Coding ]; # 0..1 Details how this designation would be used fhir:CodeSystem.concept.designation.additionalUse [ Coding ], ... ; # 0..* Additional ways how this designation would be used fhir:CodeSystem.concept.designation.value [ string ]; # 1..1 The text value for this designation ], ...; fhir:CodeSystem.concept.property [ # 0..* Property value for the concept fhir:CodeSystem.concept.property.code [ code ]; # 1..1 Reference to CodeSystem.property.code # CodeSystem.concept.property.value[x] : 1..1 Value of the property for this concept. One of these 7 fhir:CodeSystem.concept.property.valueCode [ code ] fhir:CodeSystem.concept.property.valueCoding [ Coding ] fhir:CodeSystem.concept.property.valueString [ string ] fhir:CodeSystem.concept.property.valueInteger [ integer ] fhir:CodeSystem.concept.property.valueBoolean [ boolean ] fhir:CodeSystem.concept.property.valueDateTime [ dateTime ] fhir:CodeSystem.concept.property.valueDecimal [ decimal ] ], ...; fhir:CodeSystem.concept.concept [ See CodeSystem.concept ], ... ; # 0..* Child Concepts (is-a/contains/categorizes) ], ...; ]
Changes since Release 4
CodeSystem | |
CodeSystem.approvalDate |
|
CodeSystem.lastReviewDate |
|
CodeSystem.effectivePeriod |
|
CodeSystem.topic |
|
CodeSystem.author |
|
CodeSystem.editor |
|
CodeSystem.reviewer |
|
CodeSystem.endorser |
|
CodeSystem.relatedArtifact |
|
CodeSystem.concept.designation.additionalUse |
|
See the Full Difference for further information
This analysis is available as XML or JSON.
See R3 <--> R4 Conversion Maps (status = 4 tests that all execute ok. All tests pass round-trip testing and 3 r3 resources are invalid (0 errors).)
Additional definitions: Master Definition XML + JSON, XML Schema/Schematron + JSON Schema, ShEx (for Turtle) , the spreadsheet version & the dependency analysis
Path | Definition | Type | Reference |
---|---|---|---|
CodeSystem.status | The lifecycle status of an artifact. | Required | PublicationStatus |
CodeSystem.jurisdiction | This value set defines a base set of codes for country, country subdivision and region for indicating where a resource is intended to be used. Note: The codes for countries and country subdivisions are taken from ISO 3166 while the codes for "supra-national" regions are from UN Standard country or area codes for statistical use (M49) . | Extensible | Jurisdiction ValueSet |
CodeSystem.topic | High-level categorization of the definition, used for searching, sorting, and filtering. | Example | DefinitionTopic |
CodeSystem.hierarchyMeaning | The meaning of the hierarchy of concepts in a code system. | Required | CodeSystemHierarchyMeaning |
CodeSystem.content | The extent of the content of the code system (the concepts and codes it defines) are represented in a code system resource. | Required | CodeSystemContentMode |
CodeSystem.filter.operator | The kind of operation to perform as a part of a property based filter. | Required | FilterOperator |
CodeSystem.property.type | The type of a property value. | Required | PropertyType |
CodeSystem.concept.designation.language | This value set includes common codes from BCP-47 (http://tools.ietf.org/html/bcp47) | Preferred, but limited to AllLanguages | CommonLanguages |
CodeSystem.concept.designation.use | Details of how a designation would be used | Extensible | DesignationUse |
CodeSystem.concept.designation.additionalUse | Details of how a designation would be used | Extensible | DesignationUse |
UniqueKey | Level | Location | Description | Expression |
cnl-0 | Warning | (base) | Name should be usable as an identifier for the module by machine processing applications such as code generation | name.exists() implies name.matches('[A-Z]([A-Za-z0-9_]){1,254}') |
csd-1 | Rule | (base) | Within a code system definition, all the codes SHALL be unique | concept.exists() implies concept.code.combine(%resource.concept.descendants().concept.code).isDistinct() |
cnl-1 | Warning | CodeSystem.url | URL should not contain | or # - these characters make processing canonical references problematic | url.matches('([^|#])*') |
csd-2 | Warning | (base) | If there is a explicit hierarchy, a hierarchyMeaning should be provided | concept.concept.exists() implies hierarchyMeaning.exists() |
csd-3 | Warning | (base) | If there is a implicit hierarchy, a hierarchyMeaning should be provided | concept.where(property.code = 'parent' or property.code = 'child').exists() implies hierarchyMeaning.exists() |
csd-4 | Rule | (base) | If the code system content = supplement, it must nominate what it's a supplement for | CodeSystem.content = 'supplement' implies CodeSystem.supplements.exists() |
csd-5 | Rule | CodeSystem.concept.designation | Must have a value for concept.designation.use if concept.designation.additionalUse is present | additionalUse.exists() implies use.exists() |
Most code systems evolve over time, due to corrections, clarifications, and changes to approach or underlying knowledge or reality. If these changes lead to the meanings of existing codes changing significantly, then the interpretation of the code system becomes version dependent. This significantly complicates implementation based on the code system, to the point where it is not clear that safety can be assured, so changing the meaning of an existing code SHOULD be avoided whenever possible. It is preferable to assign a new identifier to a code system when any concepts in it have a significant change in meaning (for example, the German diagnostic classification code system ICD10GM2009 has a different system to ICD10GM2008), but this also can have substantial impact on implementation, so is often not practical - for instance, SNOMED CT has a complex version release framework, which may lead to variations in meaning of concepts, but there is only one identifier for SNOMED CT.
For this reason, a code system MAY provide a version identifier which can be specified in CodeSystem.version
. The version specific identifier SHOULD be
provided whenever there are potentially significant changes in meaning across multiple releases of a code system.
There is no particular format requirement for the version identifier, though HL7 recommends a date-based approach.
When the CodeSystem.versionNeeded
is 'true', then the version identifier SHALL be used in Coding instances that refer to the code system.
Where the terminology does not clearly define what string should be used to identify code system versions, the recommendation is to use as the version string the date (expressed in FHIR date format) on which the version of the code system that is being used was officially published.
The simple case for a code system is that the entire code system - all the concepts and their codes, designations and properties
are distributed in a single CodeSystem
resource. However, for a variety of reasons, code systems may be distributed
by the code system authority in a set of fragments, and other authorities may issue additional designations and properties
in supplements.
If the CodeSystem.content
value is fragment
, then the resource
describes part of a code system.
Code Systems may be distributed in fragments for the following reasons:
The following rules apply to code system fragments:
If the CodeSystem.content
value is supplement
, then the resource
describes a code system supplement. The following rules apply to code system supplements:
CodeSystem.supplements
element SHALL have a value, which is the URL of the code system being supplementedCodeSystem.url
for a supplement SHALL never appear in a Coding.systemCodeSystem.url
for a supplement must be under the control of the authority creating or publishing the supplement
(e.g. not in the same space as the code system being supplemented, unless the supplement is being issued by the same authority as the original code system
If a supplement needs to define new concepts/codes to use as property values, it can be paired with a new (possibly contained)
Code System and use the Coding
type for the property values.
The impact of Code System supplements on value set expansion - and therefore value set validation - is subject to ongoing experimentation and implementation testing, and further clarification and additional rules might be proposed in future versions of this specification.
Concepts have both a display
and a definition
. The display is a short text that represents the meaning
of the concept to human users, while the definition is a more formal statement of the meaning of the concept, which
is often longer. All concepts SHOULD have a display
and a definition
, though it is not
mandatory because there are many cases where no such properties are provided, in spite of their utility and importance
for clear and safe communication.
In addition to the display and definition, a concept can have one or more designation
elements.
The display is equivalent to a special designation with an implied designation.use
meaning "primary code/designation"
and a language equal to the Resource Language. The designations can provide additional displays
for other language, as well as designations for other purposes.
When using concepts, applications use the display
and designation
unless the language or usage in context provides a reason
to use one of the designations.
Each code system can define one or more concept properties. Each concept defined by the code system may have one or more values for each concept property defined by the code system. Typical uses for properties include:
Properties are identified by their master URI (CodeSystem.property.uri
), and then, by their
code (CodeSystem.property.code
), which is used both internally within the
code system resource (CodeSystem.concept.property.code
) and also externally, in the following
places:
ConceptMap.element.target.dependsOn.property
and ConceptMap.element.target.product.property
ValueSet.compose.include.filter.property
can refer to any defined code system propertyParameters.parameter.name
when returning information about a codeParameters.parameter.part.name
for dependencies and productsParameters.parameter.name
when providing codes, and in Parameters.parameter.name
when asking for codesProperties are defined using the following elements:
Name | Details | Description |
code | code | Used to identify the property, in the places shown in the list immediately above this table |
uri | optional uri | Reference to the formal meaning of the property. One possible source of meaning is the Concept Properties code system. This part of the definition is optional, but is recommended to provide an additional level of definitional consistency |
description | optional string | A description of the property- why it is defined, and how its value might be used |
type | code | Coding | string | integer | boolean | dateTime | The type of the property value. Properties of type "code" contain a code defined by the code system (e.g. a reference to another defined concept) |
Note that properties provide a common view of concept relationships that is common across all code systems. Some code systems define properties with more sophistication, such as groups of properties, or subsumption relationships between properties (e.g. SNOMED CT). Servers providing support for these code systems will need to know full details about the underlying relationships in order to provide the correct information about concepts and their properties, but this information does not surface in the resources or operations defined by the FHIR specification.
Many Code Systems have a 'status' associated with the concept. This may categorize the concept as:
There is wide variation in the life cycles supported by the different code systems, the words they use to describe the various status values they use, and some code systems have additional status values. HL7 uses Active and Retired. In addition to these status codes, concepts may also be labeled as "Abstract' (not to be used in some circumstances), and have dates associated with their retirement or deprecation. All this information is represented as properties of the concepts. In order to assist with consistency between code systems, the following basic property URIs are defined:
http://hl7.org/fhir/concept-properties#status : code | A property that indicates the status of the concept. If the property is identified by this URL, then it SHALL use at least these status values (where appropriate):
|
http://hl7.org/fhir/concept-properties#inactive : boolean | True if the concept is not considered active - e.g. not a valid concept any more. Property type is boolean, default value is false. Note that the status property may also be used to indicate that a concept is inactive |
http://hl7.org/fhir/concept-properties#effectiveDate : date | The date at which the concept was status was last changed |
http://hl7.org/fhir/concept-properties#deprecationDate : date | Date Concept was deprecated |
http://hl7.org/fhir/concept-properties#retirementDate : date | Date Concept was retired |
http://hl7.org/fhir/concept-properties#notSelectable : boolean | This concept is a grouping concept and not intended to be used in the normal use of the code system (though may be used for filters etc.). This is also known as 'Abstract' |
http://hl7.org/fhir/concept-properties#parent : code | An immediate parent of the concept in the hierarchy |
http://hl7.org/fhir/concept-properties#child : code | An immediate child of the concept in the hierarchy |
http://hl7.org/fhir/concept-properties#partOf : code | The concept identified in this property (by it's code) contains this concept as a component |
http://hl7.org/fhir/concept-properties#synonym : code | This property contains an alternative code that may be used to identify this concept instead of the primary code |
http://hl7.org/fhir/concept-properties#comment : code | A string that provides additional detail pertinent to the use or understanding of the concept |
The parent and child properties are used when performing concept lookup (using the $lookup operation), and when using properties to indicate parent/child relationships (see below).
Code systems may be presented hierarchically, using nested concept
elements, where the
hierarchy has a defined meaning specified in hierarchyMeaning
.
The code system hierarchy is a single tree, where concepts have only one parent.
Some code systems define concepts that have multiple parents. If a code system has concepts like this (typically, concepts that are subsumed by more than one other concept), the code system SHOULD NOT be represented using the hierarchy structure in the Code System resource, and the relationships between concepts should be defined using properties. If the hierarchy is used, implementers SHALL use a property to indicate additional parents that are not represented in the structural (nested concepts) hierarchy.
Operations based on the codeSystem resource SHALL have the same result whether or not the relationships are represented explicitly as properties or implicitly using the CodeSystem resource hierarchy.
The words 'subsume', 'subsumes', 'subsumed' and 'subsumption' are defined in relation to the type of hierarchy (i.e. the value of CodeSystem.hierarchyMeaning) identified for the code system that is being represented by the CodeSystem resource. Concept A is considered to be subsumed by Concept B if it comes under Concept B in the hierarchy, or if a parent/child relationship is declared in the properties, and the hierarchyMeaning is "is-a").
Where a CodeSystem does not declare its hierarchy meaning directly, then the code system documentation must be consulted manually to determine how subsumption is determined. If there is no definition, none of the subsumption based features can be used with the code system.
Subsumption based logic arises explicitly or implicitly in the following places in the FHIR specification:
The following filters are defined for all code systems:
Property Name | Operation | Value | Definition | Notes |
---|---|---|---|---|
[property] | = | [string] | Includes all codes that have a property value equal to the specified string, where [property] is the code for any defined property | |
[property] | in | [string,string...] | Includes all codes that have a property value equal to one of the specified strings, where [property] is the code for any defined property | The values cannot include ",", since it is being used as a delimiter |
Note to Balloters: Ballot feedback is sought in relation to the additional concept filters for code systems supporting is-a relationships included in the table below, which has been added for R5.
The following filters are defined for all code systems that support "is-a" relationships between concepts. (The filters can be used regardless of whether the "is-a" relationships are conveyed as concept properties or as concept nesting):
Property Name | Operation | Value | Definition | Notes |
---|---|---|---|---|
concept | is-a | [string] concept code | Includes all concept ids that have a transitive is-a relationship with the concept Id provided as the value, including the provided concept itself (include descendant codes and self). | |
concept | descendent-of | [string] concept code | Includes all concept ids that have a transitive is-a relationship with the concept Id provided as the value, excluding the provided concept itself i.e. include descendant codes only). | |
concept | is-not-a | [string] concept code | The specified property of the code does not have an is-a relationship with the provided value. | |
concept | generalizes | [string] concept code | Includes all concept ids that have a transitive is-a relationship from the concept Id provided as the value, including the provided concept itself (i.e. include ancestor codes and self). | |
concept | child-of | [string] concept code | Only concepts with a direct hierarchical relationship to the index code and no other concepts. This does not include the index code in the output. | |
concept | descendent-leaf | [string] concept code | Includes concept ids that have a transitive is-a relationship with the concept Id provided as the value, but which do not have any concept ids with transitive is-a relationships with themselves. |
This draft section about the relationships between rich terminologies and structured content is still undergoing review.
Some other parts of the FHIR infrastructure define set of concepts that may also be treated as code systems. This is most useful when mapping between systems using Concept Maps. This table summarizes how to treat these items as a terminology:
StructureDefinition | The StructureDefinition.url (canonical URL) is the system . Each .snapshot.element.id in the snapshot is a code in the code system |
Questionnaire | The Questionnaire.url (canonical URL) is the system . Each .item.linkId in the snapshot is a code in the code system. Items with no linkId cannot be addressed |
Medication | Medication resources are a bit different, since they don't have a canonical URL, and there are not multiple items in a resource. So to refer to a medication resource, the system is [base]/Medication, where base is the server address. The Logical Id of the resource is the code |
The use of these implicit code systems is not yet well tested, so this section remains informative.
For medications, the relationship between the code system and the medication resource is complex. Many medication related code systems (e.g. RxNorm, DM+D, AMT, etc.) represent more complex information than just code, display name and code system. These often contain information about the content of the medication A similar principle applies to observation definitions, which overlap significantly with LOINC and other related code systems, which contain a set of observation definitions, that contain methods, units, etc. Other similar arrangements exist for Location and many other kinds of resource.
In FHIR, these are handled by splitting the concept into two distinct parts - the
Terminology, (Code System & ValueSet
resources) is used to
manage the codes, display names and relationships. A separate "detail"
resource (e.g., Medication resource instances for RxNorm code details,
ObservationDefinition instances for LOINC code details, or
Location, etc.) is used to convey detailed
information (dose form & strength, allowed data type or permitted values, address &
hours of operation, etc.). One "detail" resource instance is created for each code.
This division accomplishes several things:
CodeSystem
/ValueSet
.Note that this division in FHIR does not imply that a similar division is required in the internal representation used by systems exposing a FHIR interface. Similarly, some systems may choose to only expose or maintain one aspect of such information types (i.e. only the discrete resource instances or only the value set).
The linkage between the "detail" resource and the Terminology resources is accomplished via the
code
element (or equivalent) on the detail resource. As well, the "name" or
"title" on the detail resource generally corresponds with the display name on the matching
code. Most detail resources will also have an "identifier" element. This can be
set to the same value and namespace as the code, but if the only identifier a resource has
is its defining code, it may be better to omit the identifier entirely. .
Search parameters for this resource. The common parameters also apply. See Searching for more information about searching in REST, messaging, and services.
Name | Type | Description | Expression | In Common |
code | token | A code defined in the code system | CodeSystem.concept.code | |
content-mode | token | not-present | example | fragment | complete | supplement | CodeSystem.content | |
context TU | token | A use context assigned to the code system | (CodeSystem.useContext.value as CodeableConcept) | |
context-quantity TU | quantity | A quantity- or range-valued use context assigned to the code system | (CodeSystem.useContext.value as Quantity) | (CodeSystem.useContext.value as Range) | |
context-type TU | token | A type of use context assigned to the code system | CodeSystem.useContext.code | |
context-type-quantity TU | composite | A use context type and quantity- or range-based value assigned to the code system | On CodeSystem.useContext: context-type: code context-quantity: value.ofType(Quantity) | value.ofType(Range) | |
context-type-value TU | composite | A use context type and value assigned to the code system | On CodeSystem.useContext: context-type: code context: value.ofType(CodeableConcept) | |
date | date | The code system publication date | CodeSystem.date | |
derived-from | reference | A resource that the CodeSystem is derived from | CodeSystem.relatedArtifact.where(type='derived-from').resource (Any) | |
description | string | The description of the code system | CodeSystem.description | |
effective TU | date | The time during which the CodeSystem is intended to be in use | CodeSystem.effectivePeriod | |
identifier TU | token | External identifier for the code system | CodeSystem.identifier | |
jurisdiction TU | token | Intended jurisdiction for the code system | CodeSystem.jurisdiction | |
language | token | A language in which a designation is provided | CodeSystem.concept.designation.language | |
name | string | Computationally friendly name of the code system | CodeSystem.name | |
predecessor | reference | The predecessor of the CodeSystem | CodeSystem.relatedArtifact.where(type='predecessor').resource (Any) | |
publisher | string | Name of the publisher of the code system | CodeSystem.publisher | |
status | token | The current status of the code system | CodeSystem.status | |
supplements | reference | Find code system supplements for the referenced code system | CodeSystem.supplements (CodeSystem) | |
system | uri | The system for any codes defined by this code system (same as 'url') | CodeSystem.url | |
title | string | The human-friendly name of the code system | CodeSystem.title | |
topic | token | Topics associated with the CodeSystem | CodeSystem.topic | |
url | uri | The uri that identifies the code system | CodeSystem.url | |
version | token | The business version of the code system | CodeSystem.version |