Release 5

This page is part of the FHIR Specification (v5.0.0: R5 - STU). This is the current published version. For a full list of available versions, see the Directory of published versions . Page versions: R5 R4B R4 R3

4.8 Resource CodeSystem - Content

Terminology Infrastructure icon Work GroupMaturity Level: N Normative (from v4.0.0)Security Category: Anonymous Compartments: No 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 the concepts of code system and value set originally defined in HL7 v3 Core Principles icon:

Code 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:

  • Identifying URL and version
  • Description, Copyright, publication date, and other metadata
  • Some key properties of the code system itself - e.g. whether it exhibits concept permanence, whether it defines a compositional grammar, and whether the codes that it defines are case sensitive
  • What filters can be used in value sets that use the code system in a ValueSet.compose element
  • What concept properties are defined by the code system

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.

  • Code systems are used in ValueSet resources
  • The system element in the Coding (i.e. Coding.system) refers to a CodeSystem resource instance by its canonical URL (i.e. CodeSystem.url)
  • The CodeSystem resource design is based, in part, on the code system functionality described in the HL7 CTS 2 icon specification. A CTS2 server can be used to maintain code systems which are then published using the CodeSystem resource
  • The CodeSystem resource documents the inherent structure and capabilities of code system, whereas the TerminologyCapabilities resource documents what a server hosting the code system is capable of

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 icon 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 icon template or HL7 v3 icon 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

NameFlagsCard.TypeDescription & Constraintsdoco
.. CodeSystem NDomainResourceDeclares 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 an explicit hierarchy, a hierarchyMeaning should be provided
+ Warning: If there is an 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 ΣC0..1uriCanonical 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..*IdentifierAdditional identifier for the code system (business identifier)

... version Σ0..1stringBusiness version of the code system (Coding.version)
... versionAlgorithm[x] ΣTU0..1How to compare versions
Binding: Version Algorithm (Extensible)
.... versionAlgorithmStringstring
.... versionAlgorithmCodingCoding
... name ΣC0..1stringName for this code system (computer friendly)
... title ΣT0..1stringName for this code system (human friendly)
... status ?!Σ1..1codedraft | active | retired | unknown
Binding: PublicationStatus (Required)
... experimental Σ0..1booleanFor testing purposes, not real usage
... date Σ0..1dateTimeDate last changed
... publisher ΣT0..1stringName of the publisher/steward (organization or individual)
... contact Σ0..*ContactDetailContact details for the publisher

... description T0..1markdownNatural language description of the code system
... useContext ΣTU0..*UsageContextThe context that the content is intended to support

... jurisdiction ΣXD0..*CodeableConceptIntended jurisdiction for code system (if applicable)
Binding: Jurisdiction ValueSet (Extensible)

... purpose T0..1markdownWhy this code system is defined
... copyright T0..1markdownUse and/or publishing restrictions
... copyrightLabel TTU0..1stringCopyright holder and year(s)
... approvalDate TU0..1dateWhen the CodeSystem was approved by publisher
... lastReviewDate TU0..1dateWhen the CodeSystem was last reviewed by the publisher
... effectivePeriod ΣTU0..1PeriodWhen the CodeSystem is expected to be used
... topic XD0..*CodeableConceptE.g. Education, Treatment, Assessment, etc
Binding: Definition Topic (Example)

... author TU0..*ContactDetailWho authored the CodeSystem

... editor TU0..*ContactDetailWho edited the CodeSystem

... reviewer TU0..*ContactDetailWho reviewed the CodeSystem

... endorser TU0..*ContactDetailWho endorsed the CodeSystem

... relatedArtifact TU0..*RelatedArtifactAdditional documentation, citations, etc

... caseSensitive Σ0..1booleanIf code comparison is case sensitive
... valueSet Σ0..1canonical(ValueSet)Canonical reference to the value set with entire code system
... hierarchyMeaning ΣC0..1codegrouped-by | is-a | part-of | classified-with
Binding: Code System Hierarchy Meaning (Required)
... compositional Σ0..1booleanIf code system defines a compositional grammar
... versionNeeded Σ0..1booleanIf definitions are not stable
... content ΣC1..1codenot-present | example | fragment | complete | supplement
Binding: Code System Content Mode (Required)
... supplements ΣCTU0..1canonical(CodeSystem)Canonical URL of Code System this adds designations and properties to
... count Σ0..1unsignedIntTotal concepts in the code system
... filter Σ0..*BackboneElementFilter that can be used in a value set

.... code Σ1..1codeCode that identifies the filter
.... description Σ0..1stringHow 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
Binding: Filter Operator (Required)

.... value Σ1..1stringWhat to use for the value
... property Σ0..*BackboneElementAdditional information supplied about each concept

.... code Σ1..1codeIdentifies the property on the concepts, and when referred to in operations
.... uri Σ0..1uriFormal identifier for the property
.... description Σ0..1stringWhy the property is defined, and/or what it conveys
.... type Σ1..1codecode | Coding | string | integer | boolean | dateTime | decimal
Binding: Property Type (Required)
... concept C0..*BackboneElementConcepts in the code system

.... code C1..1codeCode that identifies concept
.... display 0..1stringText to display to the user
.... definition 0..1stringFormal definition
.... designation C0..*BackboneElementAdditional representations for the concept
+ Rule: Must have a value for concept.designation.use if concept.designation.additionalUse is present

..... language 0..1codeHuman language of the designation
Binding: All Languages (Required)
Additional BindingsPurpose
Common LanguagesStarter Set

..... use C0..1CodingDetails how this designation would be used
Binding: Designation Use (Extensible)
..... additionalUse CTU0..*CodingAdditional ways how this designation would be used
Binding: Designation Use (Extensible)

..... value 1..1stringThe text value for this designation
.... property 0..*BackboneElementProperty value for the concept

..... code C1..1codeReference to CodeSystem.property.code
..... value[x] 1..1Value of the property for this concept
...... valueCodecode
...... valueCodingCoding
...... valueStringstring
...... valueIntegerinteger
...... valueBooleanboolean
...... valueDateTimedateTime
...... valueDecimaldecimal
.... concept C0..*see conceptChild Concepts (is-a/contains/categorizes)


doco Documentation for this format icon

See the Extensions for this resource

UML Diagram (Legend)

CodeSystem (DomainResource) +MetadataResourceAn absolute URI that is used to identify this code system when it is referenced in a specification, model, design or an instance; also called its canonical identifier. This SHOULD be globally unique and SHOULD be a literal address at which an authoritative instance of this code system is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the code system is stored on different servers. This is used in [Coding](datatypes.html#Coding).systemurl : uri [0..1]A formal identifier that is used to identify this code system when it is represented in other formats, or referenced in a specification, model, design or an instanceidentifier : Identifier [0..*]The identifier that is used to identify this version of the code system when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the code system author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions can be placed in a lexicographical sequence. This is used in [Coding](datatypes.html#Coding).versionversion : string [0..1]Indicates the mechanism used to compare versions to determine which CodeSystem is more currentversionAlgorithm[x] : DataType [0..1] « string|Coding; null (Strength=Extensible) VersionAlgorithm+ »A natural language name identifying the code system. This name should be usable as an identifier for the module by machine processing applications such as code generationname : string [0..1] « This element has or is affected by some invariantsC »A short, descriptive, user-friendly title for the code systemtitle : string [0..1]The status of this code system. Enables tracking the life-cycle of the content (this element modifies the meaning of other elements)status : code [1..1] « null (Strength=Required)PublicationStatus! »A Boolean value to indicate that this code system is authored for testing purposes (or education/evaluation/marketing) and is not intended to be used for genuine usageexperimental : boolean [0..1]The date (and optionally time) when the code system was last significantly changed. The date must change when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the code system changesdate : dateTime [0..1]The name of the organization or individual responsible for the release and ongoing maintenance of the code systempublisher : string [0..1]Contact details to assist a user in finding and communicating with the publishercontact : ContactDetail [0..*]A free text natural language description of the code system from a consumer's perspectivedescription : markdown [0..1]The content was developed with a focus and intent of supporting the contexts that are listed. These contexts may be general categories (gender, age, ...) or may be references to specific programs (insurance plans, studies, ...) and may be used to assist with indexing and searching for appropriate code system instancesuseContext : UsageContext [0..*]A legal or geographic region in which the code system is intended to be usedjurisdiction : CodeableConcept [0..*] « null (Strength=Extensible)JurisdictionValueSet+ »Explanation of why this code system is needed and why it has been designed as it haspurpose : markdown [0..1]A copyright statement relating to the code system and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the code systemcopyright : markdown [0..1]A short string (<50 characters), suitable for inclusion in a page footer that identifies the copyright holder, effective period, and optionally whether rights are resctricted. (e.g. 'All rights reserved', 'Some rights reserved')copyrightLabel : string [0..1]The date on which the resource content was approved by the publisher. Approval happens once when the content is officially approved for usageapprovalDate : date [0..1]The date on which the resource content was last reviewed. Review happens periodically after approval but does not change the original approval datelastReviewDate : date [0..1]The period during which the CodeSystem content was or is planned to be in active useeffectivePeriod : Period [0..1]Descriptions related to the content of the CodeSystem. Topics provide a high-level categorization as well as keywords for the CodeSystem that can be useful for filtering and searchingtopic : CodeableConcept [0..*] « null (Strength=Example)DefinitionTopic?? »An individiual or organization primarily involved in the creation and maintenance of the CodeSystemauthor : ContactDetail [0..*]An individual or organization primarily responsible for internal coherence of the CodeSystemeditor : ContactDetail [0..*]An individual or organization asserted by the publisher to be primarily responsible for review of some aspect of the CodeSystemreviewer : ContactDetail [0..*]An individual or organization asserted by the publisher to be responsible for officially endorsing the CodeSystem for use in some settingendorser : ContactDetail [0..*]Related artifacts such as additional documentation, justification, dependencies, bibliographic references, and predecessor and successor artifactsrelatedArtifact : RelatedArtifact [0..*]If code comparison is case sensitive when codes within this system are compared to each othercaseSensitive : boolean [0..1]Canonical reference to the value set that contains all codes in the code system independent of code statusvalueSet : canonical [0..1] « ValueSet »The meaning of the hierarchy of concepts as represented in this resourcehierarchyMeaning : code [0..1] « null (Strength=Required)CodeSystemHierarchyMeaning! » « This element has or is affected by some invariantsC »The code system defines a compositional (post-coordination) grammarcompositional : boolean [0..1]This flag is used to signify that the code system does not commit to concept permanence across versions. If true, a version must be specified when referencing this code systemversionNeeded : boolean [0..1]The extent of the content of the code system (the concepts and codes it defines) are represented in this resource instancecontent : code [1..1] « null (Strength=Required)CodeSystemContentMode! » « This element has or is affected by some invariantsC »The canonical URL of the code system that this code system supplement is adding designations and properties tosupplements : canonical [0..1] « CodeSystem » « This element has or is affected by some invariantsC »The total number of concepts defined by the code system. Where the code system has a compositional grammar, the basis of this count is defined by the system stewardcount : unsignedInt [0..1]FilterThe code that identifies this filter when it is used as a filter in [ValueSet](valueset.html#).compose.include.filtercode : code [1..1]A description of how or why the filter is useddescription : string [0..1]A list of operators that can be used with the filteroperator : code [1..*] « null (Strength=Required)FilterOperator! »A description of what the value for the filter should bevalue : string [1..1]PropertyA code that is used to identify the property. The code is used internally (in CodeSystem.concept.property.code) and also externally, such as in property filterscode : code [1..1]Reference to the formal meaning of the property. One possible source of meaning is the [Concept Properties](codesystem-concept-properties.html) code systemuri : uri [0..1]A description of the property- why it is defined, and how its value might be useddescription : string [0..1]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)type : code [1..1] « null (Strength=Required)PropertyType! »ConceptDefinitionA code - a text symbol - that uniquely identifies the concept within the code systemcode : code [1..1] « This element has or is affected by some invariantsC »A human readable string that is the recommended default way to present this concept to a userdisplay : string [0..1]The formal definition of the concept. The code system resource does not make formal definitions required, because of the prevalence of legacy systems. However, they are highly recommended, as without them there is no formal meaning associated with the conceptdefinition : string [0..1]DesignationThe language this designation is defined forlanguage : code [0..1] « null (Strength=Required)AllLanguages! »A code that details how this designation would be useduse : Coding [0..1] « null (Strength=Extensible)DesignationUse+ » « This element has or is affected by some invariantsC »Additional codes that detail how this designation would be used, if there is more than one useadditionalUse : Coding [0..*] « null (Strength=Extensible)DesignationUse+ » « This element has or is affected by some invariantsC »The text value for this designationvalue : string [1..1]ConceptPropertyA code that is a reference to CodeSystem.property.codecode : code [1..1] « This element has or is affected by some invariantsC »The value of this propertyvalue[x] : DataType [1..1] « code|Coding|string|integer|boolean| dateTime|decimal »A filter that can be used in a value set compose statement when selecting concepts using a filterfilter[0..*]A property defines an additional slot through which additional information can be provided about a conceptproperty[0..*]Additional representations for the concept - other languages, aliases, specialized purposes, used for particular purposes, etcdesignation[0..*]A property value for this conceptproperty[0..*]Defines children of a concept to produce a hierarchy of concepts. The nature of the relationships is variable (is-a/contains/categorizes) - see hierarchyMeaningconcept[0..*]Concepts that are in the code system. The concept definitions are inherently hierarchical, but the definitions must be consulted to determine what the meanings of the hierarchical relationships areconcept[0..*]

XML Template

<CodeSystem xmlns="http://hl7.org/fhir"> doco
 <!-- 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) -->
 <versionAlgorithm[x]><!-- 0..1 string|Coding How to compare versions --></versionAlgorithm[x]>
 <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 -->
 <copyrightLabel value="[string]"/><!-- 0..1 Copyright holder and year(s) -->
 <approvalDate value="[date]"/><!-- 0..1 When the CodeSystem was approved by publisher -->
 <lastReviewDate value="[date]"/><!-- 0..1 When the CodeSystem was last reviewed by the publisher -->
 <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]"/><!-- I 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]"/><!-- I 1..1 not-present | example | fragment | complete | supplement -->
 <supplements><!-- I 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>  <!-- I 0..* Concepts in the code system -->
  <code value="[code]"/><!-- I 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><!-- I 0..1 Coding Details how this designation would be used --></use>
   <additionalUse><!-- I 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]"/><!-- I 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><!-- I 0..* Content as for CodeSystem.concept Child Concepts (is-a/contains/categorizes) --></concept>
 </concept>
</CodeSystem>

JSON Template

{doco
  "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)
  // versionAlgorithm[x]: How to compare versions. One of these 2:
  "versionAlgorithmString" : "<string>",
  "versionAlgorithmCoding" : { Coding },
  "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
  "copyrightLabel" : "<string>", // Copyright holder and year(s)
  "approvalDate" : "<date>", // When the CodeSystem was approved by publisher
  "lastReviewDate" : "<date>", // When the CodeSystem was last reviewed by the publisher
  "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>", // I 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>", // I R!  not-present | example | fragment | complete | supplement
  "supplements" : "<canonical(CodeSystem)>", // I 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" : [{ // I Concepts in the code system
    "code" : "<code>", // I 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 }, // I Details how this designation would be used
      "additionalUse" : [{ Coding }], // I 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>", // I 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 }] // I Child Concepts (is-a/contains/categorizes)
  }]
}

Turtle Template

@prefix fhir: <http://hl7.org/fhir/> .doco


[ 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:url [ uri ] ; # 0..1 Canonical identifier for this code system, represented as a URI (globally unique) (Coding.system)
  fhir:identifier  ( [ Identifier ] ... ) ; # 0..* Additional identifier for the code system (business identifier)
  fhir:version [ string ] ; # 0..1 Business version of the code system (Coding.version)
  # versionAlgorithm[x] : 0..1 How to compare versions. One of these 2
    fhir:versionAlgorithm [  a fhir:string ; string ]
    fhir:versionAlgorithm [  a fhir:Coding ; Coding ]
  fhir:name [ string ] ; # 0..1 I Name for this code system (computer friendly)
  fhir:title [ string ] ; # 0..1 Name for this code system (human friendly)
  fhir:status [ code ] ; # 1..1 draft | active | retired | unknown
  fhir:experimental [ boolean ] ; # 0..1 For testing purposes, not real usage
  fhir:date [ dateTime ] ; # 0..1 Date last changed
  fhir:publisher [ string ] ; # 0..1 Name of the publisher/steward (organization or individual)
  fhir:contact  ( [ ContactDetail ] ... ) ; # 0..* Contact details for the publisher
  fhir:description [ markdown ] ; # 0..1 Natural language description of the code system
  fhir:useContext  ( [ UsageContext ] ... ) ; # 0..* The context that the content is intended to support
  fhir:jurisdiction  ( [ CodeableConcept ] ... ) ; # 0..* Intended jurisdiction for code system (if applicable)
  fhir:purpose [ markdown ] ; # 0..1 Why this code system is defined
  fhir:copyright [ markdown ] ; # 0..1 Use and/or publishing restrictions
  fhir:copyrightLabel [ string ] ; # 0..1 Copyright holder and year(s)
  fhir:approvalDate [ date ] ; # 0..1 When the CodeSystem was approved by publisher
  fhir:lastReviewDate [ date ] ; # 0..1 When the CodeSystem was last reviewed by the publisher
  fhir:effectivePeriod [ Period ] ; # 0..1 When the CodeSystem is expected to be used
  fhir:topic  ( [ CodeableConcept ] ... ) ; # 0..* E.g. Education, Treatment, Assessment, etc
  fhir:author  ( [ ContactDetail ] ... ) ; # 0..* Who authored the CodeSystem
  fhir:editor  ( [ ContactDetail ] ... ) ; # 0..* Who edited the CodeSystem
  fhir:reviewer  ( [ ContactDetail ] ... ) ; # 0..* Who reviewed the CodeSystem
  fhir:endorser  ( [ ContactDetail ] ... ) ; # 0..* Who endorsed the CodeSystem
  fhir:relatedArtifact  ( [ RelatedArtifact ] ... ) ; # 0..* Additional documentation, citations, etc
  fhir:caseSensitive [ boolean ] ; # 0..1 If code comparison is case sensitive
  fhir:valueSet [ canonical(ValueSet) ] ; # 0..1 Canonical reference to the value set with entire code system
  fhir:hierarchyMeaning [ code ] ; # 0..1 I grouped-by | is-a | part-of | classified-with
  fhir:compositional [ boolean ] ; # 0..1 If code system defines a compositional grammar
  fhir:versionNeeded [ boolean ] ; # 0..1 If definitions are not stable
  fhir:content [ code ] ; # 1..1 I not-present | example | fragment | complete | supplement
  fhir:supplements [ canonical(CodeSystem) ] ; # 0..1 I Canonical URL of Code System this adds designations and properties to
  fhir:count [ unsignedInt ] ; # 0..1 Total concepts in the code system
  fhir:filter ( [ # 0..* Filter that can be used in a value set
    fhir:code [ code ] ; # 1..1 Code that identifies the filter
    fhir:description [ string ] ; # 0..1 How or why the filter is used
    fhir:operator  ( [ code ] ... ) ; # 1..* = | is-a | descendent-of | is-not-a | regex | in | not-in | generalizes | child-of | descendent-leaf | exists
    fhir:value [ string ] ; # 1..1 What to use for the value
  ] ... ) ;
  fhir:property ( [ # 0..* Additional information supplied about each concept
    fhir:code [ code ] ; # 1..1 Identifies the property on the concepts, and when referred to in operations
    fhir:uri [ uri ] ; # 0..1 Formal identifier for the property
    fhir:description [ string ] ; # 0..1 Why the property is defined, and/or what it conveys
    fhir:type [ code ] ; # 1..1 code | Coding | string | integer | boolean | dateTime | decimal
  ] ... ) ;
  fhir:concept ( [ # 0..* I Concepts in the code system
    fhir:code [ code ] ; # 1..1 I Code that identifies concept
    fhir:display [ string ] ; # 0..1 Text to display to the user
    fhir:definition [ string ] ; # 0..1 Formal definition
    fhir:designation ( [ # 0..* Additional representations for the concept
      fhir:language [ code ] ; # 0..1 Human language of the designation
      fhir:use [ Coding ] ; # 0..1 I Details how this designation would be used
      fhir:additionalUse  ( [ Coding ] ... ) ; # 0..* I Additional ways how this designation would be used
      fhir:value [ string ] ; # 1..1 The text value for this designation
    ] ... ) ;
    fhir:property ( [ # 0..* Property value for the concept
      fhir:code [ code ] ; # 1..1 I Reference to CodeSystem.property.code
      # value[x] : 1..1 Value of the property for this concept. One of these 7
        fhir:value [  a fhir:code ; code ]
        fhir:value [  a fhir:Coding ; Coding ]
        fhir:value [  a fhir:string ; string ]
        fhir:value [  a fhir:integer ; integer ]
        fhir:value [  a fhir:boolean ; boolean ]
        fhir:value [  a fhir:dateTime ; dateTime ]
        fhir:value [  a fhir:decimal ; decimal ]
    ] ... ) ;
    fhir:concept  ( [ See CodeSystem.concept ] ... ) ; # 0..* I Child Concepts (is-a/contains/categorizes)
  ] ... ) ;
]

Changes from both R4 and R4B

CodeSystem
CodeSystem.versionAlgorithm[x]
  • Added Element
CodeSystem.copyrightLabel
  • Added Element
CodeSystem.approvalDate
  • Added Element
CodeSystem.lastReviewDate
  • Added Element
CodeSystem.effectivePeriod
  • Added Element
CodeSystem.topic
  • Added Element
CodeSystem.author
  • Added Element
CodeSystem.editor
  • Added Element
CodeSystem.reviewer
  • Added Element
CodeSystem.endorser
  • Added Element
CodeSystem.relatedArtifact
  • Added Element
CodeSystem.filter.operator
  • Add codes child-of, descendent-leaf
CodeSystem.concept.designation.language
CodeSystem.concept.designation.additionalUse
  • Added Element

See the Full Difference for further information

This analysis is available for R4 as XML or JSON and for R4B as XML or JSON.

See R4 <--> R5 Conversion Maps (status = See Conversions Summary.)

Structure

NameFlagsCard.TypeDescription & Constraintsdoco
.. CodeSystem NDomainResourceDeclares 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 an explicit hierarchy, a hierarchyMeaning should be provided
+ Warning: If there is an 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 ΣC0..1uriCanonical 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..*IdentifierAdditional identifier for the code system (business identifier)

... version Σ0..1stringBusiness version of the code system (Coding.version)
... versionAlgorithm[x] ΣTU0..1How to compare versions
Binding: Version Algorithm (Extensible)
.... versionAlgorithmStringstring
.... versionAlgorithmCodingCoding
... name ΣC0..1stringName for this code system (computer friendly)
... title ΣT0..1stringName for this code system (human friendly)
... status ?!Σ1..1codedraft | active | retired | unknown
Binding: PublicationStatus (Required)
... experimental Σ0..1booleanFor testing purposes, not real usage
... date Σ0..1dateTimeDate last changed
... publisher ΣT0..1stringName of the publisher/steward (organization or individual)
... contact Σ0..*ContactDetailContact details for the publisher

... description T0..1markdownNatural language description of the code system
... useContext ΣTU0..*UsageContextThe context that the content is intended to support

... jurisdiction ΣXD0..*CodeableConceptIntended jurisdiction for code system (if applicable)
Binding: Jurisdiction ValueSet (Extensible)

... purpose T0..1markdownWhy this code system is defined
... copyright T0..1markdownUse and/or publishing restrictions
... copyrightLabel TTU0..1stringCopyright holder and year(s)
... approvalDate TU0..1dateWhen the CodeSystem was approved by publisher
... lastReviewDate TU0..1dateWhen the CodeSystem was last reviewed by the publisher
... effectivePeriod ΣTU0..1PeriodWhen the CodeSystem is expected to be used
... topic XD0..*CodeableConceptE.g. Education, Treatment, Assessment, etc
Binding: Definition Topic (Example)

... author TU0..*ContactDetailWho authored the CodeSystem

... editor TU0..*ContactDetailWho edited the CodeSystem

... reviewer TU0..*ContactDetailWho reviewed the CodeSystem

... endorser TU0..*ContactDetailWho endorsed the CodeSystem

... relatedArtifact TU0..*RelatedArtifactAdditional documentation, citations, etc

... caseSensitive Σ0..1booleanIf code comparison is case sensitive
... valueSet Σ0..1canonical(ValueSet)Canonical reference to the value set with entire code system
... hierarchyMeaning ΣC0..1codegrouped-by | is-a | part-of | classified-with
Binding: Code System Hierarchy Meaning (Required)
... compositional Σ0..1booleanIf code system defines a compositional grammar
... versionNeeded Σ0..1booleanIf definitions are not stable
... content ΣC1..1codenot-present | example | fragment | complete | supplement
Binding: Code System Content Mode (Required)
... supplements ΣCTU0..1canonical(CodeSystem)Canonical URL of Code System this adds designations and properties to
... count Σ0..1unsignedIntTotal concepts in the code system
... filter Σ0..*BackboneElementFilter that can be used in a value set

.... code Σ1..1codeCode that identifies the filter
.... description Σ0..1stringHow 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
Binding: Filter Operator (Required)

.... value Σ1..1stringWhat to use for the value
... property Σ0..*BackboneElementAdditional information supplied about each concept

.... code Σ1..1codeIdentifies the property on the concepts, and when referred to in operations
.... uri Σ0..1uriFormal identifier for the property
.... description Σ0..1stringWhy the property is defined, and/or what it conveys
.... type Σ1..1codecode | Coding | string | integer | boolean | dateTime | decimal
Binding: Property Type (Required)
... concept C0..*BackboneElementConcepts in the code system

.... code C1..1codeCode that identifies concept
.... display 0..1stringText to display to the user
.... definition 0..1stringFormal definition
.... designation C0..*BackboneElementAdditional representations for the concept
+ Rule: Must have a value for concept.designation.use if concept.designation.additionalUse is present

..... language 0..1codeHuman language of the designation
Binding: All Languages (Required)
Additional BindingsPurpose
Common LanguagesStarter Set

..... use C0..1CodingDetails how this designation would be used
Binding: Designation Use (Extensible)
..... additionalUse CTU0..*CodingAdditional ways how this designation would be used
Binding: Designation Use (Extensible)

..... value 1..1stringThe text value for this designation
.... property 0..*BackboneElementProperty value for the concept

..... code C1..1codeReference to CodeSystem.property.code
..... value[x] 1..1Value of the property for this concept
...... valueCodecode
...... valueCodingCoding
...... valueStringstring
...... valueIntegerinteger
...... valueBooleanboolean
...... valueDateTimedateTime
...... valueDecimaldecimal
.... concept C0..*see conceptChild Concepts (is-a/contains/categorizes)


doco Documentation for this format icon

See the Extensions for this resource

UML Diagram (Legend)

CodeSystem (DomainResource) +MetadataResourceAn absolute URI that is used to identify this code system when it is referenced in a specification, model, design or an instance; also called its canonical identifier. This SHOULD be globally unique and SHOULD be a literal address at which an authoritative instance of this code system is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the code system is stored on different servers. This is used in [Coding](datatypes.html#Coding).systemurl : uri [0..1]A formal identifier that is used to identify this code system when it is represented in other formats, or referenced in a specification, model, design or an instanceidentifier : Identifier [0..*]The identifier that is used to identify this version of the code system when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the code system author and is not expected to be globally unique. For example, it might be a timestamp (e.g. yyyymmdd) if a managed version is not available. There is also no expectation that versions can be placed in a lexicographical sequence. This is used in [Coding](datatypes.html#Coding).versionversion : string [0..1]Indicates the mechanism used to compare versions to determine which CodeSystem is more currentversionAlgorithm[x] : DataType [0..1] « string|Coding; null (Strength=Extensible) VersionAlgorithm+ »A natural language name identifying the code system. This name should be usable as an identifier for the module by machine processing applications such as code generationname : string [0..1] « This element has or is affected by some invariantsC »A short, descriptive, user-friendly title for the code systemtitle : string [0..1]The status of this code system. Enables tracking the life-cycle of the content (this element modifies the meaning of other elements)status : code [1..1] « null (Strength=Required)PublicationStatus! »A Boolean value to indicate that this code system is authored for testing purposes (or education/evaluation/marketing) and is not intended to be used for genuine usageexperimental : boolean [0..1]The date (and optionally time) when the code system was last significantly changed. The date must change when the business version changes and it must change if the status code changes. In addition, it should change when the substantive content of the code system changesdate : dateTime [0..1]The name of the organization or individual responsible for the release and ongoing maintenance of the code systempublisher : string [0..1]Contact details to assist a user in finding and communicating with the publishercontact : ContactDetail [0..*]A free text natural language description of the code system from a consumer's perspectivedescription : markdown [0..1]The content was developed with a focus and intent of supporting the contexts that are listed. These contexts may be general categories (gender, age, ...) or may be references to specific programs (insurance plans, studies, ...) and may be used to assist with indexing and searching for appropriate code system instancesuseContext : UsageContext [0..*]A legal or geographic region in which the code system is intended to be usedjurisdiction : CodeableConcept [0..*] « null (Strength=Extensible)JurisdictionValueSet+ »Explanation of why this code system is needed and why it has been designed as it haspurpose : markdown [0..1]A copyright statement relating to the code system and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the code systemcopyright : markdown [0..1]A short string (<50 characters), suitable for inclusion in a page footer that identifies the copyright holder, effective period, and optionally whether rights are resctricted. (e.g. 'All rights reserved', 'Some rights reserved')copyrightLabel : string [0..1]The date on which the resource content was approved by the publisher. Approval happens once when the content is officially approved for usageapprovalDate : date [0..1]The date on which the resource content was last reviewed. Review happens periodically after approval but does not change the original approval datelastReviewDate : date [0..1]The period during which the CodeSystem content was or is planned to be in active useeffectivePeriod : Period [0..1]Descriptions related to the content of the CodeSystem. Topics provide a high-level categorization as well as keywords for the CodeSystem that can be useful for filtering and searchingtopic : CodeableConcept [0..*] « null (Strength=Example)DefinitionTopic?? »An individiual or organization primarily involved in the creation and maintenance of the CodeSystemauthor : ContactDetail [0..*]An individual or organization primarily responsible for internal coherence of the CodeSystemeditor : ContactDetail [0..*]An individual or organization asserted by the publisher to be primarily responsible for review of some aspect of the CodeSystemreviewer : ContactDetail [0..*]An individual or organization asserted by the publisher to be responsible for officially endorsing the CodeSystem for use in some settingendorser : ContactDetail [0..*]Related artifacts such as additional documentation, justification, dependencies, bibliographic references, and predecessor and successor artifactsrelatedArtifact : RelatedArtifact [0..*]If code comparison is case sensitive when codes within this system are compared to each othercaseSensitive : boolean [0..1]Canonical reference to the value set that contains all codes in the code system independent of code statusvalueSet : canonical [0..1] « ValueSet »The meaning of the hierarchy of concepts as represented in this resourcehierarchyMeaning : code [0..1] « null (Strength=Required)CodeSystemHierarchyMeaning! » « This element has or is affected by some invariantsC »The code system defines a compositional (post-coordination) grammarcompositional : boolean [0..1]This flag is used to signify that the code system does not commit to concept permanence across versions. If true, a version must be specified when referencing this code systemversionNeeded : boolean [0..1]The extent of the content of the code system (the concepts and codes it defines) are represented in this resource instancecontent : code [1..1] « null (Strength=Required)CodeSystemContentMode! » « This element has or is affected by some invariantsC »The canonical URL of the code system that this code system supplement is adding designations and properties tosupplements : canonical [0..1] « CodeSystem » « This element has or is affected by some invariantsC »The total number of concepts defined by the code system. Where the code system has a compositional grammar, the basis of this count is defined by the system stewardcount : unsignedInt [0..1]FilterThe code that identifies this filter when it is used as a filter in [ValueSet](valueset.html#).compose.include.filtercode : code [1..1]A description of how or why the filter is useddescription : string [0..1]A list of operators that can be used with the filteroperator : code [1..*] « null (Strength=Required)FilterOperator! »A description of what the value for the filter should bevalue : string [1..1]PropertyA code that is used to identify the property. The code is used internally (in CodeSystem.concept.property.code) and also externally, such as in property filterscode : code [1..1]Reference to the formal meaning of the property. One possible source of meaning is the [Concept Properties](codesystem-concept-properties.html) code systemuri : uri [0..1]A description of the property- why it is defined, and how its value might be useddescription : string [0..1]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)type : code [1..1] « null (Strength=Required)PropertyType! »ConceptDefinitionA code - a text symbol - that uniquely identifies the concept within the code systemcode : code [1..1] « This element has or is affected by some invariantsC »A human readable string that is the recommended default way to present this concept to a userdisplay : string [0..1]The formal definition of the concept. The code system resource does not make formal definitions required, because of the prevalence of legacy systems. However, they are highly recommended, as without them there is no formal meaning associated with the conceptdefinition : string [0..1]DesignationThe language this designation is defined forlanguage : code [0..1] « null (Strength=Required)AllLanguages! »A code that details how this designation would be useduse : Coding [0..1] « null (Strength=Extensible)DesignationUse+ » « This element has or is affected by some invariantsC »Additional codes that detail how this designation would be used, if there is more than one useadditionalUse : Coding [0..*] « null (Strength=Extensible)DesignationUse+ » « This element has or is affected by some invariantsC »The text value for this designationvalue : string [1..1]ConceptPropertyA code that is a reference to CodeSystem.property.codecode : code [1..1] « This element has or is affected by some invariantsC »The value of this propertyvalue[x] : DataType [1..1] « code|Coding|string|integer|boolean| dateTime|decimal »A filter that can be used in a value set compose statement when selecting concepts using a filterfilter[0..*]A property defines an additional slot through which additional information can be provided about a conceptproperty[0..*]Additional representations for the concept - other languages, aliases, specialized purposes, used for particular purposes, etcdesignation[0..*]A property value for this conceptproperty[0..*]Defines children of a concept to produce a hierarchy of concepts. The nature of the relationships is variable (is-a/contains/categorizes) - see hierarchyMeaningconcept[0..*]Concepts that are in the code system. The concept definitions are inherently hierarchical, but the definitions must be consulted to determine what the meanings of the hierarchical relationships areconcept[0..*]

XML Template

<CodeSystem xmlns="http://hl7.org/fhir"> doco
 <!-- 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) -->
 <versionAlgorithm[x]><!-- 0..1 string|Coding How to compare versions --></versionAlgorithm[x]>
 <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 -->
 <copyrightLabel value="[string]"/><!-- 0..1 Copyright holder and year(s) -->
 <approvalDate value="[date]"/><!-- 0..1 When the CodeSystem was approved by publisher -->
 <lastReviewDate value="[date]"/><!-- 0..1 When the CodeSystem was last reviewed by the publisher -->
 <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]"/><!-- I 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]"/><!-- I 1..1 not-present | example | fragment | complete | supplement -->
 <supplements><!-- I 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>  <!-- I 0..* Concepts in the code system -->
  <code value="[code]"/><!-- I 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><!-- I 0..1 Coding Details how this designation would be used --></use>
   <additionalUse><!-- I 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]"/><!-- I 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><!-- I 0..* Content as for CodeSystem.concept Child Concepts (is-a/contains/categorizes) --></concept>
 </concept>
</CodeSystem>

JSON Template

{doco
  "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)
  // versionAlgorithm[x]: How to compare versions. One of these 2:
  "versionAlgorithmString" : "<string>",
  "versionAlgorithmCoding" : { Coding },
  "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
  "copyrightLabel" : "<string>", // Copyright holder and year(s)
  "approvalDate" : "<date>", // When the CodeSystem was approved by publisher
  "lastReviewDate" : "<date>", // When the CodeSystem was last reviewed by the publisher
  "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>", // I 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>", // I R!  not-present | example | fragment | complete | supplement
  "supplements" : "<canonical(CodeSystem)>", // I 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" : [{ // I Concepts in the code system
    "code" : "<code>", // I 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 }, // I Details how this designation would be used
      "additionalUse" : [{ Coding }], // I 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>", // I 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 }] // I Child Concepts (is-a/contains/categorizes)
  }]
}

Turtle Template

@prefix fhir: <http://hl7.org/fhir/> .doco


[ 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:url [ uri ] ; # 0..1 Canonical identifier for this code system, represented as a URI (globally unique) (Coding.system)
  fhir:identifier  ( [ Identifier ] ... ) ; # 0..* Additional identifier for the code system (business identifier)
  fhir:version [ string ] ; # 0..1 Business version of the code system (Coding.version)
  # versionAlgorithm[x] : 0..1 How to compare versions. One of these 2
    fhir:versionAlgorithm [  a fhir:string ; string ]
    fhir:versionAlgorithm [  a fhir:Coding ; Coding ]
  fhir:name [ string ] ; # 0..1 I Name for this code system (computer friendly)
  fhir:title [ string ] ; # 0..1 Name for this code system (human friendly)
  fhir:status [ code ] ; # 1..1 draft | active | retired | unknown
  fhir:experimental [ boolean ] ; # 0..1 For testing purposes, not real usage
  fhir:date [ dateTime ] ; # 0..1 Date last changed
  fhir:publisher [ string ] ; # 0..1 Name of the publisher/steward (organization or individual)
  fhir:contact  ( [ ContactDetail ] ... ) ; # 0..* Contact details for the publisher
  fhir:description [ markdown ] ; # 0..1 Natural language description of the code system
  fhir:useContext  ( [ UsageContext ] ... ) ; # 0..* The context that the content is intended to support
  fhir:jurisdiction  ( [ CodeableConcept ] ... ) ; # 0..* Intended jurisdiction for code system (if applicable)
  fhir:purpose [ markdown ] ; # 0..1 Why this code system is defined
  fhir:copyright [ markdown ] ; # 0..1 Use and/or publishing restrictions
  fhir:copyrightLabel [ string ] ; # 0..1 Copyright holder and year(s)
  fhir:approvalDate [ date ] ; # 0..1 When the CodeSystem was approved by publisher
  fhir:lastReviewDate [ date ] ; # 0..1 When the CodeSystem was last reviewed by the publisher
  fhir:effectivePeriod [ Period ] ; # 0..1 When the CodeSystem is expected to be used
  fhir:topic  ( [ CodeableConcept ] ... ) ; # 0..* E.g. Education, Treatment, Assessment, etc
  fhir:author  ( [ ContactDetail ] ... ) ; # 0..* Who authored the CodeSystem
  fhir:editor  ( [ ContactDetail ] ... ) ; # 0..* Who edited the CodeSystem
  fhir:reviewer  ( [ ContactDetail ] ... ) ; # 0..* Who reviewed the CodeSystem
  fhir:endorser  ( [ ContactDetail ] ... ) ; # 0..* Who endorsed the CodeSystem
  fhir:relatedArtifact  ( [ RelatedArtifact ] ... ) ; # 0..* Additional documentation, citations, etc
  fhir:caseSensitive [ boolean ] ; # 0..1 If code comparison is case sensitive
  fhir:valueSet [ canonical(ValueSet) ] ; # 0..1 Canonical reference to the value set with entire code system
  fhir:hierarchyMeaning [ code ] ; # 0..1 I grouped-by | is-a | part-of | classified-with
  fhir:compositional [ boolean ] ; # 0..1 If code system defines a compositional grammar
  fhir:versionNeeded [ boolean ] ; # 0..1 If definitions are not stable
  fhir:content [ code ] ; # 1..1 I not-present | example | fragment | complete | supplement
  fhir:supplements [ canonical(CodeSystem) ] ; # 0..1 I Canonical URL of Code System this adds designations and properties to
  fhir:count [ unsignedInt ] ; # 0..1 Total concepts in the code system
  fhir:filter ( [ # 0..* Filter that can be used in a value set
    fhir:code [ code ] ; # 1..1 Code that identifies the filter
    fhir:description [ string ] ; # 0..1 How or why the filter is used
    fhir:operator  ( [ code ] ... ) ; # 1..* = | is-a | descendent-of | is-not-a | regex | in | not-in | generalizes | child-of | descendent-leaf | exists
    fhir:value [ string ] ; # 1..1 What to use for the value
  ] ... ) ;
  fhir:property ( [ # 0..* Additional information supplied about each concept
    fhir:code [ code ] ; # 1..1 Identifies the property on the concepts, and when referred to in operations
    fhir:uri [ uri ] ; # 0..1 Formal identifier for the property
    fhir:description [ string ] ; # 0..1 Why the property is defined, and/or what it conveys
    fhir:type [ code ] ; # 1..1 code | Coding | string | integer | boolean | dateTime | decimal
  ] ... ) ;
  fhir:concept ( [ # 0..* I Concepts in the code system
    fhir:code [ code ] ; # 1..1 I Code that identifies concept
    fhir:display [ string ] ; # 0..1 Text to display to the user
    fhir:definition [ string ] ; # 0..1 Formal definition
    fhir:designation ( [ # 0..* Additional representations for the concept
      fhir:language [ code ] ; # 0..1 Human language of the designation
      fhir:use [ Coding ] ; # 0..1 I Details how this designation would be used
      fhir:additionalUse  ( [ Coding ] ... ) ; # 0..* I Additional ways how this designation would be used
      fhir:value [ string ] ; # 1..1 The text value for this designation
    ] ... ) ;
    fhir:property ( [ # 0..* Property value for the concept
      fhir:code [ code ] ; # 1..1 I Reference to CodeSystem.property.code
      # value[x] : 1..1 Value of the property for this concept. One of these 7
        fhir:value [  a fhir:code ; code ]
        fhir:value [  a fhir:Coding ; Coding ]
        fhir:value [  a fhir:string ; string ]
        fhir:value [  a fhir:integer ; integer ]
        fhir:value [  a fhir:boolean ; boolean ]
        fhir:value [  a fhir:dateTime ; dateTime ]
        fhir:value [  a fhir:decimal ; decimal ]
    ] ... ) ;
    fhir:concept  ( [ See CodeSystem.concept ] ... ) ; # 0..* I Child Concepts (is-a/contains/categorizes)
  ] ... ) ;
]

Changes from both R4 and R4B

CodeSystem
CodeSystem.versionAlgorithm[x]
  • Added Element
CodeSystem.copyrightLabel
  • Added Element
CodeSystem.approvalDate
  • Added Element
CodeSystem.lastReviewDate
  • Added Element
CodeSystem.effectivePeriod
  • Added Element
CodeSystem.topic
  • Added Element
CodeSystem.author
  • Added Element
CodeSystem.editor
  • Added Element
CodeSystem.reviewer
  • Added Element
CodeSystem.endorser
  • Added Element
CodeSystem.relatedArtifact
  • Added Element
CodeSystem.filter.operator
  • Add codes child-of, descendent-leaf
CodeSystem.concept.designation.language
CodeSystem.concept.designation.additionalUse
  • Added Element

See the Full Difference for further information

This analysis is available for R4 as XML or JSON and for R4B as XML or JSON.

See R4 <--> R5 Conversion Maps (status = See Conversions Summary.)

 

Additional definitions: Master Definition XML + JSON, XML Schema/Schematron + JSON Schema, ShEx (for Turtle) , the spreadsheet version & the dependency analysis

PathValueSetTypeDocumentation
CodeSystem.versionAlgorithm[x] VersionAlgorithm Extensible

Indicates the mechanism used to compare versions to determine which is more current.

CodeSystem.status PublicationStatus Required

The lifecycle status of an artifact.

CodeSystem.jurisdiction JurisdictionValueSet Extensible

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 icon while the codes for "supra-national" regions are from UN Standard country or area codes for statistical use (M49) icon.

CodeSystem.topic DefinitionTopic Example

High-level categorization of the definition, used for searching, sorting, and filtering.

CodeSystem.hierarchyMeaning CodeSystemHierarchyMeaning Required

The meaning of the hierarchy of concepts in a code system.

CodeSystem.content CodeSystemContentMode Required

The extent of the content of the code system (the concepts and codes it defines) are represented in a code system resource.

CodeSystem.filter.operator FilterOperator Required

The kind of operation to perform as a part of a property based filter.

CodeSystem.property.type PropertyType Required

The type of a property value.

CodeSystem.concept.designation.language AllLanguages (a valid code from Tags for the Identification of Languages icon)Required

This value set includes all possible codes from BCP-47 (see http://tools.ietf.org/html/bcp47)

  Common Languages starter
CodeSystem.concept.designation.use DesignationUse Extensible

Details of how a designation would be used

CodeSystem.concept.designation.additionalUse DesignationUse Extensible

Details of how a designation would be used

UniqueKeyLevelLocationDescriptionExpression
img cnl-0Warning (base)Name should be usable as an identifier for the module by machine processing applications such as code generationname.exists() implies name.matches('^[A-Z]([A-Za-z0-9_]){1,254}$')
img csd-1Rule (base)Within a code system definition, all the codes SHALL be uniqueconcept.exists() implies concept.code.combine(%resource.concept.descendants().concept.code).isDistinct()
img cnl-1Warning CodeSystem.urlURL should not contain | or # - these characters make processing canonical references problematicexists() implies matches('^[^|# ]+$')
img csd-2Warning (base)If there is an explicit hierarchy, a hierarchyMeaning should be providedconcept.concept.exists() implies hierarchyMeaning.exists()
img csd-3Warning (base)If there is an implicit hierarchy, a hierarchyMeaning should be providedconcept.where(property.code = 'parent' or property.code = 'child').exists() implies hierarchyMeaning.exists()
img csd-4Rule (base)If the code system content = supplement, it must nominate what it's a supplement forCodeSystem.content = 'supplement' implies CodeSystem.supplements.exists()
img csd-5Rule CodeSystem.concept.designationMust have a value for concept.designation.use if concept.designation.additionalUse is presentadditionalUse.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 icon 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 which can be specified in CodeSystem.version. The version 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, though HL7 recommends a date-based approach, or sem-ver icon.

When the CodeSystem.versionNeeded is 'true', then the CodeSystem.version value 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:

  • Different IP distribution rules for different parts of the code system
  • Special purpose modules for specific purposes
  • Distribution of proposed content for evaluation

The following rules apply to code system fragments:

  • All fragments SHALL have the same CodeSystem.url
  • Fragments can only be published by the code system authority, or according to a process defined by the authority, if they have defined one
  • Fragments cannot contain any codes, concepts or properties that would not be found in a complete representation of the code system, if one exists. Implementers should note that a "complete representation" of the code system might not exist in a single authoritative publication (e.g., SNOMED International with all modules/extensions)
  • Publishing a code system in multiple fragments can create confusion for terminology servers and terminology service consumers. Code System authorities that publish fragments should be careful and communicate their intent clearly

If the CodeSystem.content value is supplement, then the resource describes a code system supplement. The following rules apply to code system supplements:

  • The CodeSystem.supplements element SHALL have a value, which is the URL of the code system being supplemented
  • The CodeSystem.url for a supplement SHALL never appear in a Coding.system
  • The CodeSystem.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
  • A codesystem supplement cannot define any new CodeSystem.concept.code. i.e.: all CodeSystem.concept.code in the supplement must be a code from the "supplemented" 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:

  • Tracking administrative status (inactive, deprecation date)
  • Providing additional statements about the meaning of the concept
  • Defining structured relationships with other concepts in the code system
  • Assigning scoring values to the concepts

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: ConceptMap.element.target.dependsOn.property and ConceptMap.element.target.product.property
  • ValueSet: ValueSet.compose.include.filter.property can refer to any defined code system property
  • $lookup operation: In Parameters.parameter.name when returning information about a code
  • $translate operation: In Parameters.parameter.part.name for dependencies and products
  • $find-matches operation: In Parameters.parameter.name when providing codes, and in Parameters.parameter.name when asking for codes

Properties 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.

In order to assist with consistency between code systems, the following basic property URIs are defined in the Concept Properties code system:

http://hl7.org/fhir/concept-properties#status : codeA 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):
  • active - the concept is for normal use
  • experimental - provided for trial, but may be removed in the future
  • deprecated - the concept is outdated and planned to be withdrawn from use
  • retired - still present for historical reasons, but no longer allowed to be used
http://hl7.org/fhir/concept-properties#inactive : booleanTrue if the concept is not considered active - e.g. not a valid concept any more. Property type is boolean, default value is false
http://hl7.org/fhir/concept-properties#effectiveDate : dateThe date at which the concept status was last changed
http://hl7.org/fhir/concept-properties#deprecationDate : dateDate Concept was deprecated
http://hl7.org/fhir/concept-properties#retirementDate : dateDate Concept was retired
http://hl7.org/fhir/concept-properties#notSelectable : booleanThis 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 : codeAn immediate parent of the concept in the hierarchy
http://hl7.org/fhir/concept-properties#child : codeAn immediate child of the concept in the hierarchy
http://hl7.org/fhir/concept-properties#partOf : codeThe concept identified in this property (by its code) contains this concept as a component
http://hl7.org/fhir/concept-properties#synonym : codeThis 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 : codeA string that provides additional detail pertinent to the use or understanding of the concept
http://hl7.org/fhir/concept-properties#itemWeight : decimalA numeric value that allows the comparison (less than, greater than) or other numerical manipulation of a concept (e.g. Adding up components of a score). Scores are usually a whole number, but occasionally decimals are encountered in scores

Code System representations SHOULD use these properties where possible.

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).

Many Code Systems have a 'status' associated with the concept. This may categorize the concept as:

  • Experimental - provided for trial, but may be removed in the future
  • Active - in normal use
  • Deprecated - planned to be removed from use
  • Retired - still present for historical reasons, but no longer allowed to be used

There is wide variation in the life cycles supported by the different code systems and the words they use to describe the various status values they use, and some code systems have additional status values. HL7 uses Active, Deprecated and Retired. These ideas overlap with setting the concept to 'inactive'. In addition, concepts have dates associated with their retirement or deprecation and some code systems imply the status by providing dates.

In addition to these status codes, concepts may also be labeled 'notSelectable' (aka 'Abstract'), which means "not to be used in some circumstances", though the exact circumstances need to be clarified somewhere. This is sometimes also considered a status, though it's usually dependent on the context of use (e.g. set in a ValueSet).

Code systems may be presented hierarchically using either nested concept elements or properties. When exclusively using nested concept elements the code system hierarchy is a single tree, and concepts have only one parent. When using properties, polyhierarchies are allowed (e.g. concepts may have more than one parent).

If a code system hierarchy is represented using properties (typically, concepts that are subsumed by more than one other concept), nested concepts SHOULD NOT be used to represent any parts of the hierarchy structure in the Code System resource; the relationships between concepts should be defined using properties.

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
code regex [string] Matches any concept with the code matching the supplied string The regex flavor is determined by the server
[property] = [string] Includes all codes that have a property value equal to the specified string, where [property] is the code for any defined property. Where the type of the property is on of integer, dateTime or decimal, the FHIR search prefixes and semantics apply (see below)
[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
[property] regex [string] Includes all codes that have a property value matching the specified regex
[property] exists true or false When value is "true", includes all codes that have the specified property. When value is "false", includes all codes that lack the specified property
designation = [string] Matches any concept with a designation equal to the supplied string Designations considered include the concept.display, which counts as a designation
designation regex [string] Matches any concept with a designation matching the supplied string Designations considered include the concept.display, which counts as a designation

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.

If the = filter is used with a property that is defined on the CodeSystem, and if the property has a type of integer, dateTime or decimal, then the FHIR search rules apply. This means that the following prefixes may be used in the value of the filter:

  • eq: the code has a value for the property on the code and it is equal to the provided value
  • ne: the code has a value for the property on the code and it is not equal to the provided value
  • gt: the code has a value for the property on the code and it is greater than the provided value
  • lt: the code has a value for the property on the code and it is less than the provided value
  • ge: the code has a value for the property on the code and it is greater or equal to the provided value
  • le: the code has a value for the property on the code and it is less or equal to the provided value
  • sa: the code has a value for the property on the code and it is starts after the provided value
  • eb: the code has a value for the property on the code and it is ends before the provided value
  • ap: the code has a value for the property on the code and it is approximately the same to the provided value

The semantics of prefixes are as explained on the search page with regard to precision and range considerations, particularly on dates and decimals. Note that eq is not redundant - in it's absence, the semantics are for a direct string match, not a smart match as defined by the search semantics.

Some Examples:

{ "property": "retiredDate", "operator": "=", "value": "lt2021-01-01" }

Any code that was retired before 2021. Regarding precision:

{ "property": "retiredDate", "operator": "=", "value": "eq2022" }

would match a concept with a retiredDate of 2022-09-12. However:

{ "property": "retiredDate", "operator": "=", "value": "2022" }

would not match a concept with a retiredDate of 2022-09-12.

Search parameters for this resource. See also the full list of search parameters for this resource, and check the Extensions registry for search parameters on extensions related to this resource. The common parameters also apply. See Searching for more information about searching in REST, messaging, and services.

NameTypeDescriptionExpressionIn Common
codetokenA code defined in the code systemCodeSystem.concept.code
content-modetokennot-present | example | fragment | complete | supplementCodeSystem.content
contexttokenA use context assigned to the code system(CodeSystem.useContext.value.ofType(CodeableConcept))30 Resources
context-quantityquantityA quantity- or range-valued use context assigned to the code system(CodeSystem.useContext.value.ofType(Quantity)) | (CodeSystem.useContext.value.ofType(Range))30 Resources
context-type TUtokenA type of use context assigned to the code systemCodeSystem.useContext.code30 Resources
context-type-quantity TUcompositeA use context type and quantity- or range-based value assigned to the code systemOn CodeSystem.useContext:
  context-type: code
  context-quantity: value.ofType(Quantity) | value.ofType(Range)
30 Resources
context-type-value TUcompositeA use context type and value assigned to the code systemOn CodeSystem.useContext:
  context-type: code
  context: value.ofType(CodeableConcept)
30 Resources
datedateThe code system publication dateCodeSystem.date30 Resources
derived-from TUreferenceA resource that the CodeSystem is derived fromCodeSystem.relatedArtifact.where(type='derived-from').resource
(Any)
10 Resources
descriptionstringThe description of the code systemCodeSystem.description28 Resources
effective TUdateThe time during which the CodeSystem is intended to be in useCodeSystem.effectivePeriod12 Resources
identifiertokenExternal identifier for the code systemCodeSystem.identifier34 Resources
jurisdictiontokenIntended jurisdiction for the code systemCodeSystem.jurisdiction26 Resources
languagetokenA language in which a designation is providedCodeSystem.concept.designation.language
namestringComputationally friendly name of the code systemCodeSystem.name26 Resources
predecessor TUreferenceThe predecessor of the CodeSystemCodeSystem.relatedArtifact.where(type='predecessor').resource
(Any)
10 Resources
publisherstringName of the publisher of the code systemCodeSystem.publisher30 Resources
statustokenThe current status of the code systemCodeSystem.status35 Resources
supplements TUreferenceFind code system supplements for the referenced code systemCodeSystem.supplements
(CodeSystem)
systemuriThe system for any codes defined by this code system (same as 'url')CodeSystem.url
titlestringThe human-friendly name of the code systemCodeSystem.title27 Resources
topic TUtokenTopics associated with the CodeSystemCodeSystem.topic10 Resources
urluriThe uri that identifies the code systemCodeSystem.url34 Resources
versiontokenThe business version of the code systemCodeSystem.version30 Resources