Release 4 FHIR CI-Build

This page is part of the Continuous Integration Build of FHIR Specification (v4.0.1: R4 - Mixed Normative and STU ) in it's permanent home (it will always (will be available incorrect/inconsistent at this URL). The current version which supercedes this version is 5.0.0 . For a full list of available versions, see times).
See the Directory of published versions icon . Page versions: R5 R4B R4 R3 R2

Maturity Level : N
Vocabulary Responsible Owner: FHIR Infrastructure icon Work Group   Normative (from v4.0.0) Security Category : Anonymous Compartments : Not linked to any No defined compartments
This page has been approved as part of an ANSI standard. See the Conformance Package for further details.

A ValueSet resource instance specifies a set of codes drawn from one or more code systems, intended Search parameters for use in a particular context. Value sets link between CodeSystem definitions and their use in coded elements . 4.9.1 Scope and Usage The FHIR terminology specification is based on two key concepts, originally defined in HL7 v3 Core Principles : CodeSystem - declares the existence of and describes a code system or code system supplement and its key properties, and optionally defines a part or all of its content. ExampleScenario resource. Also known as Ontology, Terminology, or Enumeration ValueSet - specifies a set of codes drawn from one or more code systems, intended for use in a particular context. Value sets link between CodeSystem definitions and their use in coded elements Value sets have 2 aspects: .compose : A definition of which codes are intended to be in the value set ("intension") .expansion : The list of codes that are actually in the value set under a given set of conditions ("extension") - see Value Set Expansion The ValueSet resource can carry either the .compose or the .expansion , both of them, or neither of them (if only the metadata is being represented). There is an "$expand" operation which can be used to ask a server to generate an expansion given the composition rules, in a particular context, and a "$validate-code" operation which can be used to ask a server to check whether a given code or concept is in the value set in a particular context. 4.9.2 Boundaries and Relationships Value Sets are used by many resources: Value sets use CodeSystem Extensions registry resources by referring to them via their canonical reference. Value sets are used in StructureDefinition , OperationDefinition , Questionnaire , and other resources to specify the allowable contents for coded elements, or business rules for data processing ConceptMap resources describe mappings between value sets DataRequirement data types search parameters on extensions related to specify data processing conditions For a full list of uses, see below. this resource.

The Characteristics of the ValueSet resource are derived from Formal Value Set Definitions: The ValueSet resource design is based on the functionality described in the OMG CTS 2 specification, along with metadata in the HL7 Value Set Definition specification. Value set resources can be converted to CTS2 value set or code system instances. The value set resource is aligned with the Value Set Definition (VSD) project. Not all of the elements defined by the VSD are part of the base resource - some are defined as part of the ValueSet Extensions . In the ValueSet resource, the compose element is the VSD "Content Logical definition". common parameters 4.9.3 Background and Context also apply. See Searching When using 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 for more information about searching in Resources . REST, messaging, and services.

4.9.3.1 ValueSet Identification
ValueSet.identifier : A system/value pair that is used to identify the value set in other contexts (such as an OID in an HL7 v3 specification) In addition, any expansion for the value set also has ValueSet.expansion.identifier which uniquely identifies each expansion. For further information regarding resource identification, see Resource Identity . 4.9.3.2 Intensional vs Extensional Indicates whether or not any change to the content logical definition may occur purpose 0..1 markdown Why this value set is defined copyright Use and/or publishing restrictions compose 0..1 BackboneElement Content logical definition Fixed date for references with no specified version (transitive) inactive Σ 0..1 boolean Whether inactive codes are in the value set include contains I 0..* BackboneElement Codes in the value set + Rule: SHALL have a code or a display + Rule: Must have a code if not abstract + Rule: Must have a system if a code is present system System value for the code abstract 0..1 boolean If user cannot select this entry inactive 0..1 boolean If concept Version in which this code/display is defined A set of criteria that define the contents of the value set by including or excluding codes selected from the specified code system(s) that the value set draws from. Date last changed publisher Σ 0..1 string Name of the publisher (organization or individual) contact Σ Contact details for the publisher description 0..1 markdown Natural language description The context that the content is intended to support jurisdiction Text to display for this code for this value set in this valueset designation 0..* BackboneElement Additional representations for this concept language Human language of the designation Common Languages ( Preferred but limited to AllLanguages ) use 0..1 Coding Types of uses = | is-a | descendent-of | is-not-a | regex | in | not-in | generalizes | exists FilterOperator ( Required ) valueInteger valueDecimal abstract 0..1 boolean If user cannot select this entry 0..1 boolean If concept Version in which this code/display is defined A set of criteria that define the contents of the value set by including or excluding codes selected from the specified code system(s) that the value set draws from. vsd-0 Warning (base) Name should be usable as an identifier for the module by machine processing applications such as code generation name.matches('[A-Z]([A-Za-z0-9_]){0,254}') vsd-1 Using Metathesaurus Filters CPT Filters A value set can be "expanded", where the definition of the value set is used to create a simple collection of codes suitable for use for data entry or validation. There is a defined operation $expand to ask a server to perform this expansion. Expansions are most useful when a value set includes all the codes in a code system, or a set of codes by filter. A resource that represents a value set expansion includes the same identification details as the definition of the value set, and MAY include the definition of the value set ( .compose ). In addition, it has an .expansion element which contains the list of codes that constitute the value set expansion. Each contained code can include nested contained codes - see below for further discussion . When a request for an expansion is received (e.g., for the $expand operation), the following process should be followed: If the value set already has an expansion (e.g., a stored expansion): Check that the parameters associated with the $expand operation are consistent with the parameters recorded in the expansion If the parameters are inconsistent, then either generate a new expansion, or, if there is no definition ( .compose ), return an error Additional parameters may be applied to an existing expansion if the server has validated that the result will be the same as if the expansion was generated directly from the value set definition (e.g. text filter, designations included). Otherwise: For each compose.include : If there is a system, identify the correct version of the code system , and then: If there are no codes or filters, add every code in the code system to the result set. If codes are listed, check that they are valid, and check their active status, and if ok, add them to the result set (the parameters to the $expand operation may be used to control whether active codes are included). If any filters are present, process them in order (as explained above), and add the intersection of their results to the result set. For each valueSet , find the referenced value set by ValueSet.url, expand that (e.g., using the $expand operation: GET [base]/ValueSet/$expand$url=[compose.include.valueSet]), and add it to the result set. Controls whether inactive concepts are included or excluded in value set expansions. Note that if the value set explicitly specifies that inactive codes are included, this parameter can still remove them from a specific expansion, but this parameter cannot include them if the value set excludes them Whether to store expanded value sets, or simply to store their definitions and expand on the fly is a matter for system deployment. Some servers, including public value sets servers, only store expansions. However, any system that stores an expansion must be concerned with how to determine whether the expansion is still current, and this requires deep knowledge of how the expansion was created. A system with a dedicated terminology server that returns expansions on demand avoids this problem, but leaves open the question of how to audit the specific expansion that was used for a particular case. One solution to this is to use a dedicated terminology server, and have the clients ask for expansions on demand based on the value set definitions, and for the server to store (and reuse as appropriate) the returned expansion (when it reuses the expansion, ValueSet.expansion.identifier will be the same). If expansions are shared, users need to be aware of how expansion identifiers (which may be server specific) work. 4.9.8.6 Searching for codes in value sets The search parameters defined on ValueSet include the code parameter. date TU date The value set publication date ValueSet.date description TU The description of the value set ValueSet.description identifier TU token External identifier for the value set ValueSet.identifier version TU token The business version of the value set ValueSet.version
http://hl7.org/fhir/SearchParameter/CanonicalResource-context A value set has 3 identifiers: ValueSet.id : the logical id on the system that holds the value set - this changes as it moves from server to server (this id, with the server address prepended, is called the 'literal identity' of the resource) ValueSet.url : the canonical URL that never changes for this value set - 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. Ideally, it should be a literal URL that is the location of the master version of the value set, though this is not always possible
This means that each value set has 2 different URLs 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). Because it search parameter is common practice to copy (cache) value sets locally, most references to value sets use the canonical URL. For example, the value sets published as part of FHIR all have a location ("literal") URI which is the URL where they may be accessed in the FHIR specification itself. Note, though, that while a new version of the FHIR Specification is being prepared, value sets that are published in the drafts will not be found in the current published FHIR specification at their canonical URL. Alternatively, the identifier and version elements may be used to reference this value set in a design, a profile, a CDA common search parameter CanonicalResource-context template or HL7 v3 message (in the CD data type valueSet and valueSetVersion properties). These different contexts may make additional restrictions on the possible values of these elements. The identifier is generally not needed when using value sets in a FHIR context, where the canonical URL is always the focus.

Generated Narrative: SearchParameter CanonicalResource-context

A value set may be described as intensional or extensional. The terms intensional and extensional come from the fields of mathematical logic and set theory. An intensional value set is typically algorithmically defined. That is, the code group is defined as a rule e.g. all codes with the word diabetes in their description). The key benefit of intensional code groups is that they can be dynamically updated. Dynamic updating helps healthcare organizations keep current when new drugs (and their associated codes) become available or codes for diseases and other clinical concepts change. An intensional value set designed to contain all of the drugs in the beta blocker category can automatically receive a new beta blocker’s code as soon as it hits the market. Extensional value sets, meanwhile, are enumerated lists of codes where each code is listed individually. This gives the author and user of the value set more control over the which codes are in the value set, but there is a greater maintenance burden to ensure that the value set is kept up to date. This resource is referenced by DataRequirement , ElementDefinition , CodeSystem , ConceptMap , ObservationDefinition , OperationDefinition , Questionnaire , ResearchElementDefinition and itself Structure UML XML JSON Turtle R3 Diff All

Structure Parameter context : token

Name Flags Card. Type Description & Constraints ValueSet I N DomainResource

ExampleScenario : A set of codes drawn from one or more code systems + Warning: Name should be usable as an identifier for the module by machine processing applications such as code generation Elements defined in Ancestors: id , meta , implicitRules , language , text , contained , extension , modifierExtension url Σ 0..1 uri Canonical identifier for this value set, represented as a URI (globally unique) identifier Σ 0..* Identifier Additional identifier for the value set (business identifier) version Σ 0..1 string Business version of use context assigned to the value set name Σ I 0..1 string Name for this value set (computer friendly) title Σ example scenario

0..1 Name for this value set (human friendly) status ?! Σ 1..1 code draft | active | retired | unknown PublicationStatus ( Required ) experimental Σ 0..1 date Σ 0..1 dateTime Date last changed publisher Σ 0..1 immutable Σ 0..1
Resource string ExampleScenario
Expression boolean (ExampleScenario.useContext.value.ofType(CodeableConcept)) For testing purposes, not real usage
Processing Mode Normal
Multiples string
    Name of
  • multipleAnd: It's up to the publisher (organization or individual) contact Σ 0..* ContactDetail Contact details for server whether the publisher description 0..1 markdown parameter may repeat in order to specify multiple values that must all be true
  • Natural language description of
  • multipleOr: It's up to the value set useContext Σ TU 0..* UsageContext The context that server whether the content is intended to support jurisdiction Σ 0..* CodeableConcept Intended jurisdiction for value set (if applicable) parameter can have multiple values (separated by comma) where at least one must be true
  • Jurisdiction ( Extensible )
boolean
 
0..1 http://hl7.org/fhir/SearchParameter/CanonicalResource-context-quantity markdown
This search parameter is part of the value set (CLD) lockedDate Σ 0..1 date common search parameter CanonicalResource-context-quantity

Generated Narrative: SearchParameter CanonicalResource-context-quantity Σ

I 1..* BackboneElement Include one or more codes from a code system or other value set(s) + Rule: A value set include/exclude SHALL have a value set or a system + Rule: A value set with concepts or filters SHALL include a system

Parameter context-quantity : quantity BackboneElement

ExampleScenario : A concept defined in the system code 1..1 code Code quantity- or expression from system display 0..1 string Text range-valued use context assigned to display for this code for this value set in this valueset designation 0..* BackboneElement Additional representations for this concept language 0..1 code Human language of the designation Common Languages ( Preferred but limited to AllLanguages ) use 0..1 Coding Types of uses of designations Designation Use ( Extensible ) value 1..1 string The text value for this designation filter Σ I 0..* BackboneElement Select codes/concepts by their properties (including relationships) property Σ example scenario

1..1 A property/filter defined by the code system op Σ 1..1 code expansion 0..1 BackboneElement Used when the value set is "expanded" identifier 0..1 valueCode code valueDateTime dateTime
Resource code ExampleScenario
Expression = | is-a | descendent-of | is-not-a | regex | in | not-in | generalizes (ExampleScenario.useContext.value.ofType(Quantity)) | exists FilterOperator ( Required ) value Σ 1..1 string Code from the system, or regex criteria, or boolean value for exists valueSet Σ I 0..* canonical ( ValueSet ) Select the contents included in this value set exclude I 0..* see include Explicitly exclude codes from a code system or other value sets (ExampleScenario.useContext.value.ofType(Range))
Processing Mode Normal
Multiples uri
    Identifies
  • multipleAnd: It's up to the value set expansion (business identifier) timestamp 1..1 dateTime Time ValueSet expansion happened total 0..1 integer Total number of codes in server whether the expansion offset 0..1 integer Offset at which this resource starts parameter 0..* BackboneElement Parameter may repeat in order to specify multiple values that controlled the expansion process name 1..1 string must all be true
  • Name as assigned by
  • multipleOr: It's up to the client or server value[x] 0..1 Value of whether the named parameter valueString string valueBoolean boolean valueInteger integer valueDecimal decimal valueUri uri can have multiple values (separated by comma) where at least one must be true
Comparators Allowed: eq, ne, gt, ge, lt, le, sa, eb, ap
 
0..1 http://hl7.org/fhir/SearchParameter/CanonicalResource-context-type uri
This search parameter is inactive in part of the code system version 0..1 string common search parameter CanonicalResource-context-type
code

Generated Narrative: SearchParameter CanonicalResource-context-type

I 0..1 code Code - if blank, this is not a selectable code

Parameter context-type : token string

User display for ExampleScenario : A type of use context assigned to the concept designation example scenario

0..* Additional representations for this item contains see contains Codes contained under this entry Documentation for this format [1..*]
Resource see designation ExampleScenario
Expression ExampleScenario.useContext.code 0..*
Processing Mode Normal
Multiples UML Diagram ( Legend ) ValueSet ( DomainResource ) An absolute URI that is used to identify this value set 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 at which an authoritative instance of this value set is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the value set is stored on different servers url : uri [0..1] A formal identifier that is used to identify this value set when it is represented in other formats, or referenced in a specification, model, design or an instance identifier : Identifier [0..*] The identifier that is used to identify this version of the value set when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the value set 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 version : string [0..1] A natural language name identifying the value set. This name should be usable as an identifier for the module by machine processing applications such as code generation name : string [0..1] A short, descriptive, user-friendly title for the value set title : string [0..1] The status of this value set. Enables tracking the life-cycle of the content. The status of the value set applies to the value set definition (ValueSet.compose) and the associated ValueSet metadata. Expansions do not have a state (this element modifies the meaning of other elements) status : code [1..1] « The lifecycle status of an artifact. (Strength=Required) PublicationStatus ! » A Boolean value to indicate that this value set is authored for testing purposes (or education/evaluation/marketing) and is not intended to be used for genuine usage experimental : boolean [0..1] The date (and optionally time) when the value set was created or revised (e.g. the 'content logical definition') date : dateTime [0..1] The name of the organization or individual that published the value set publisher : string [0..1] Contact details to assist a user in finding and communicating with the publisher contact : ContactDetail [0..*]
    A free text natural language description of the value set from a consumer's perspective. The textual description specifies the span of meanings for concepts
  • multipleAnd: It's up to be included within the Value Set Expansion, and also may specify the intended use and limitations of the Value Set description : markdown [0..1] The content was developed with a focus and intent of supporting server whether the contexts that are listed. These contexts may be general categories (gender, age, ...) or may be references to specific programs (insurance plans, studies, ...) and parameter may be used to assist with indexing and searching for appropriate value set instances useContext : UsageContext [0..*] A legal or geographic region in which the value set is intended to be used jurisdiction : CodeableConcept [0..*] « Countries and regions within which this artifact is targeted for use. (Strength=Extensible) Jurisdiction ValueSet + » If this is set to 'true', then no new versions of the content logical definition can be created. Note: Other metadata might still change immutable : boolean [0..1] Explanation of why this value set is needed and why it has been designed as it has purpose : markdown [0..1] A copyright statement relating to the value set and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the value set copyright : markdown [0..1] Compose The Locked Date is the effective date that is used to determine the version of all referenced Code Systems and Value Set Definitions included in the compose that are not already tied to a specific version lockedDate : date [0..1] Whether inactive codes - codes that are not approved for current use - are in the value set. If inactive = true, inactive codes are to be included in the expansion, if inactive = false, the inactive codes will not be included in the expansion. If absent, the behavior is determined by the implementation, or by the applicable $expand parameters (but generally, inactive codes would be expected to be included) inactive : boolean [0..1] ConceptSet An absolute URI which is the code system from which the selected codes come from system : uri [0..1] The version of the code system that the codes are selected from, or the special version '*' for all versions version : string [0..1] Selects the concepts found repeat in this value set (based on its value set definition). This is an absolute URI that is a reference order to ValueSet.url. If specify multiple value sets are specified this includes the union of the contents of all of the referenced value sets valueSet : canonical [0..*] « ValueSet » ConceptReference Specifies a code for the concept to be included or excluded code : code [1..1] The text to display to the user for this concept in the context of this valueset. If no display is provided, then applications using the value set use the display specified for the code by the system display : string [0..1] Designation The language this designation is defined for language : code [0..1] « A human language. (Strength=Preferred) CommonLanguages ? » A code that represents types of uses of designations use : Coding [0..1] « Details of how a designation would be used. (Strength=Extensible) DesignationUse + » The text value for this designation value : string [1..1] Filter A code that identifies a property or a filter defined in the code system property : code [1..1] The kind of operation to perform as a part of the filter criteria op : code [1..1] « The kind of operation to perform as a part of a property based filter. (Strength=Required) FilterOperator ! » The match value may be either a code defined by the system, or a string value, which is a regex match on the literal string of the property value (if the filter represents a property defined in CodeSystem) or of the system filter value (if the filter represents a filter defined in CodeSystem) when the operation is 'regex', or one of the values (true and false), when the operation is 'exists' value : string [1..1] Expansion An identifier that uniquely identifies this expansion of the valueset, based on a unique combination of the provided parameters, the system default parameters, and the underlying system code system versions etc. Systems may re-use the same identifier as long as those factors remain the same, and the expansion is the same, but are not required to do so. This is a business identifier identifier : uri [0..1] The time at which the expansion was produced by the expanding system timestamp : dateTime [1..1] The total number of concepts in the expansion. If the number of concept nodes in this resource is less than the stated number, then the server can return more using the offset parameter total : integer [0..1] If paging is being used, the offset at which this resource starts. I.e. this resource is a partial view into the expansion. If paging is not being used, this element SHALL NOT be present offset : integer [0..1] Parameter Name of the input parameter to the $expand operation; may must all be a server-assigned name for additional default or other server-supplied parameters used to control the expansion process name : string [1..1] The value of the parameter value[x] : Type [0..1] « string | boolean | integer | decimal | uri | code | dateTime » Contains An absolute URI which is the code system in which the code for this item in the expansion is defined system : uri [0..1] If true, this entry is included in the expansion for navigational purposes, and the user cannot select the code directly as a proper value abstract : boolean [0..1] true
  • If the concept is inactive in the code system that defines it. Inactive codes are those that are no longer
  • multipleOr: It's up to be used, but are maintained by the code system for understanding legacy data. It might not be known or specified server whether an concept is inactive (and it may depend on the context of use) inactive : boolean [0..1] The version of the code system from this code was taken. Note that a well-maintained code system does not need the version reported, because the meaning of codes is consistent across versions. However this cannot consistently be assured, and when the meaning is not guaranteed to be consistent, the version SHOULD be exchanged version : string [0..1] The code for this item in the expansion hierarchy. If this code is missing the entry in the hierarchy is a place holder (abstract) and does not represent a valid code in the value set code : code [0..1] The recommended display for this item in the expansion display : string [0..1] Additional representations for this concept when used in this value set - other languages, aliases, specialized purposes, used for particular purposes, etc designation [0..*] Specifies a concept to be included or excluded concept [0..*] Select concepts by specify a matching criterion based on the properties (including relationships) defined by the system, or on filters defined by the system. If parameter can have multiple filters are specified, they SHALL all values (separated by comma) where at least one must be true filter [0..*]
Include one or more codes from a code system or other value set(s) include
 
http://hl7.org/fhir/SearchParameter/CanonicalResource-context-type-quantity Exclude one or more codes from the value set based on code system filters and/or other value sets exclude [0..*]
This is also known as the Content Logical Definition (CLD) compose [0..1] A search parameter that controlled the expansion process. These parameters may be used by users of expanded value sets to check whether the expansion is suitable for a particular purpose, or to pick part of the correct expansion common search parameter CanonicalResource-context-type-quantity [0..*]

Generated Narrative: SearchParameter CanonicalResource-context-type-quantity

Additional representations for this item - other languages, aliases, specialized purposes, used for particular purposes, etc. These are relevant when the conditions of the expansion do not fix to a single correct representation designation [0..*] Other codes and entries contained under this entry in the hierarchy contains [0..*]

XML Template < <!-- from --> <!-- from --> < <</identifier> < < < < < < < <</contact> < <</useContext> <</jurisdiction> < < < < < < < < < < < < < < <</use> < </designation> </concept> < < < < </filter> <</valueSet> </include> <</exclude> </compose> < < < < < < < <</value[x]> </parameter> < < < < < < < <</designation> <</contains> </contains> </expansion> </ValueSet> JSON Template Parameter context-type-quantity : composite

{ "resourceType" : "", // from // from " " " " " " " " " " " " " " " " " " " " " " " " " " " " " }] }], " " " " }], " }], " }, " " " " " " " ">" "> "> "> ">" ">" ">" }], " " " " " " " " " }] } } Turtle Template
@prefix fhir: <http://hl7.org/fhir/> . [ a fhir:; fhir:nodeRole fhir:treeRoot; # if this is the parser root # from # from fhir: fhir: fhir: fhir: fhir: fhir: fhir: fhir: fhir: fhir: fhir: fhir: fhir: fhir: fhir: fhir: fhir: fhir: fhir: fhir: fhir: fhir: fhir: fhir: fhir: fhir: fhir: fhir: fhir: ], ...; ], ...; fhir: fhir: fhir: fhir: ], ...; fhir: ], ...; fhir: ]; fhir: fhir: fhir: fhir: fhir: fhir: fhir: # . One of these 7 fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] ], ...; fhir: fhir: fhir: fhir: fhir: fhir: fhir: fhir: fhir: ], ...; ]; ]

Changes since R3 ValueSet ValueSet.status Change value set from http://hl7.org/fhir/ValueSet/publication-status to http://hl7.org/fhir/ValueSet/publication-status|4.0.1 ValueSet.experimental No longer marked as Modifier ValueSet.compose.include.concept.designation.language Change binding strength from extensible to preferred ValueSet.compose.include.filter No longer marked as Modifier ValueSet.compose.include.filter.op Change ExampleScenario : A use context type and quantity- or range-based value set from http://hl7.org/fhir/ValueSet/filter-operator to http://hl7.org/fhir/ValueSet/filter-operator|4.0.1 ValueSet.compose.include.filter.value Type changed from code to string ValueSet.compose.include.valueSet Type changed from uri to canonical(ValueSet) ValueSet.expansion.identifier Min Cardinality changed from 1 assigned to 0 ValueSet.expansion.parameter.value[x] Add Type dateTime ValueSet.expansion.contains.abstract Default Value "false" removed ValueSet.expansion.contains.inactive Default Value "false" removed ValueSet.extensible deleted See the Full Difference for further information This analysis is available as XML or JSON . See R3 <--> R4 Conversion Maps (status = 8 tests that all execute ok. All tests pass round-trip testing and 8 r3 resources are invalid (0 errors). ) example scenario

Structure Name Flags Card. Type Description & Constraints ValueSet I N DomainResource A set of codes drawn from one or more code systems + Warning: Name should be usable as an identifier for the module by machine processing applications such as code generation url Σ 0..1 identifier Σ 0..* Identifier Additional identifier for the value set (business identifier) version Σ 0..1
Resource Elements defined in Ancestors: id , meta , implicitRules , language , text , contained , extension , modifierExtension ExampleScenario
Expression uri ExampleScenario.useContext Canonical identifier for this value set, represented as a URI (globally unique)
Processing Mode Normal
Multiples string
    Business version of
  • multipleAnd: It's up to the value set name Σ I 0..1 string server whether the parameter may repeat in order to specify multiple values that must all be true
  • Name for this
  • multipleOr: The parameter may only have one value set (computer friendly) title Σ 0..1 string (no comma separators)
Name for this value set (human friendly)
status

Comparators

?! 1..1 experimental date Σ 0..1
Σ context-type code draft | active | retired | unknown PublicationStatus ( Required )
Σ context-quantity 0..1 boolean value.ofType(Quantity) | value.ofType(Range) For testing purposes, not real usage
dateTime
 
0..* http://hl7.org/fhir/SearchParameter/CanonicalResource-context-type-value ContactDetail
This search parameter is part of the value set useContext Σ TU 0..* UsageContext common search parameter CanonicalResource-context-type-value
Σ

0..* Generated Narrative: SearchParameter CanonicalResource-context-type-value

CodeableConcept Intended jurisdiction for value set (if applicable) Jurisdiction ( Extensible )

Parameter context-type-value : composite boolean

Indicates whether or not any change ExampleScenario : A use context type and value assigned to the content logical definition may occur purpose 0..1 markdown Why this value set is defined copyright example scenario

0..1 Use and/or publishing restrictions compose 0..1 lockedDate Σ 0..1 date Fixed date for references with no specified version (transitive) inactive Σ 0..1
Resource markdown ExampleScenario
Expression BackboneElement ExampleScenario.useContext Content logical definition of the value set (CLD)
Processing Mode Normal
Multiples boolean
    Whether inactive codes are in
  • multipleAnd: It's up to the value set include Σ I 1..* BackboneElement Include one or more codes from a code system or other value set(s) server whether the parameter may repeat in order to specify multiple values that must all be true
  • + Rule: A value set include/exclude SHALL
  • multipleOr: The parameter may only have a value set or a system + Rule: A one value set with concepts or filters SHALL include a system + Rule: Cannot have both concept and filter system Σ I 0..1 uri (no comma separators)
The system the codes come from

version Comparators

0..1 string code display 0..1
Σ context-type Specific version of the code system referred to concept I 0..* BackboneElement A concept defined in the system
context 1..1 code value.ofType(CodeableConcept) Code or expression from system
string
 
0..1 http://hl7.org/fhir/SearchParameter/CanonicalResource-date code
This search parameter is part of designations Designation Use ( Extensible ) value 1..1 string The text value for this designation filter Σ I 0..* BackboneElement Select codes/concepts by their properties (including relationships) property Σ 1..1 code A property/filter defined by the code system op Σ 1..1 code common search parameter CanonicalResource-date
value

Generated Narrative: SearchParameter CanonicalResource-date

Σ 1..1 string Code from the system, or regex criteria, or boolean value for exists

Parameter date : date

Σ

I ExampleScenario : The example scenario publication date

0..* exclude I 0..* see include expansion 0..1 BackboneElement Used when the value set is "expanded" identifier 0..1 valueBoolean boolean
Resource canonical ( ValueSet ExampleScenario ) Select the contents included in this value set
Expression Explicitly exclude codes from a code system or other value sets ExampleScenario.date
Processing Mode Normal
Multiples uri
    Identifies
  • multipleAnd: It's up to the value set expansion (business identifier) timestamp 1..1 dateTime Time ValueSet expansion happened total 0..1 integer Total number of codes in server whether the expansion offset 0..1 integer Offset at which this resource starts parameter 0..* BackboneElement Parameter may repeat in order to specify multiple values that controlled the expansion process name 1..1 string must all be true
  • Name as assigned by
  • multipleOr: It's up to the client or server value[x] 0..1 Value of whether the named parameter valueString string can have multiple values (separated by comma) where at least one must be true
Comparators Allowed: eq, ne, gt, ge, lt, le, sa, eb, ap
 
http://hl7.org/fhir/SearchParameter/ExampleScenario-experimental integer

Generated Narrative: SearchParameter ExampleScenario-experimental

decimal

Parameter experimental : token

Whether the ExampleScenario is experimental

valueDateTime dateTime contains I 0..* system 0..1 uri
Resource code ExampleScenario
Expression ExampleScenario.experimental
Processing Mode Normal
Multiples BackboneElement
    Codes in
  • multipleAnd: It's up to the value set + Rule: SHALL have a code or a display + Rule: Must have a code if not abstract server whether the parameter may repeat in order to specify multiple values that must all be true
  • + Rule: Must
  • multipleOr: It's up to the server whether the parameter can have a system if a code is present multiple values (separated by comma) where at least one must be true
System value for the code
 
http://hl7.org/fhir/SearchParameter/CanonicalResource-identifier inactive
This search parameter is inactive in part of the code system version 0..1 string common search parameter CanonicalResource-identifier
code

Generated Narrative: SearchParameter CanonicalResource-identifier

I 0..1 code Code - if blank, this is not a selectable code

Parameter identifier : token string

User display ExampleScenario : External identifier for the concept designation example scenario

0..* Additional representations for this item contains see contains Codes contained under this entry Documentation for this format [1..*]
Resource see designation ExampleScenario
Expression ExampleScenario.identifier 0..*
Processing Mode Normal
Multiples UML Diagram ( Legend ) ValueSet ( DomainResource ) An absolute URI that is used to identify this value set 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 at which an authoritative instance of this value set is (or will be) published. This URL can be the target of a canonical reference. It SHALL remain the same when the value set is stored on different servers url : uri [0..1] A formal identifier that is used to identify this value set when it is represented in other formats, or referenced in a specification, model, design or an instance identifier : Identifier [0..*] The identifier that is used to identify this version of the value set when it is referenced in a specification, model, design or instance. This is an arbitrary value managed by the value set 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 version : string [0..1] A natural language name identifying the value set. This name should be usable as an identifier for the module by machine processing applications such as code generation name : string [0..1] A short, descriptive, user-friendly title for the value set title : string [0..1] The status of this value set. Enables tracking the life-cycle of the content. The status of the value set applies to the value set definition (ValueSet.compose) and the associated ValueSet metadata. Expansions do not have a state (this element modifies the meaning of other elements) status : code [1..1] « The lifecycle status of an artifact. (Strength=Required) PublicationStatus ! » A Boolean value to indicate that this value set is authored for testing purposes (or education/evaluation/marketing) and is not intended to be used for genuine usage experimental : boolean [0..1] The date (and optionally time) when the value set was created or revised (e.g. the 'content logical definition') date : dateTime [0..1] The name of the organization or individual that published the value set publisher : string [0..1] Contact details to assist a user in finding and communicating with the publisher contact : ContactDetail [0..*]
    A free text natural language description of the value set from a consumer's perspective. The textual description specifies the span of meanings for concepts
  • multipleAnd: It's up to be included within the Value Set Expansion, and also may specify the intended use and limitations of the Value Set description : markdown [0..1] The content was developed with a focus and intent of supporting server whether the contexts that are listed. These contexts may be general categories (gender, age, ...) or may be references to specific programs (insurance plans, studies, ...) and parameter may be used to assist with indexing and searching for appropriate value set instances useContext : UsageContext [0..*] A legal or geographic region in which the value set is intended to be used jurisdiction : CodeableConcept [0..*] « Countries and regions within which this artifact is targeted for use. (Strength=Extensible) Jurisdiction ValueSet + » If this is set to 'true', then no new versions of the content logical definition can be created. Note: Other metadata might still change immutable : boolean [0..1] Explanation of why this value set is needed and why it has been designed as it has purpose : markdown [0..1] A copyright statement relating to the value set and/or its contents. Copyright statements are generally legal restrictions on the use and publishing of the value set copyright : markdown [0..1] Compose The Locked Date is the effective date that is used to determine the version of all referenced Code Systems and Value Set Definitions included in the compose that are not already tied to a specific version lockedDate : date [0..1] Whether inactive codes - codes that are not approved for current use - are in the value set. If inactive = true, inactive codes are to be included in the expansion, if inactive = false, the inactive codes will not be included in the expansion. If absent, the behavior is determined by the implementation, or by the applicable $expand parameters (but generally, inactive codes would be expected to be included) inactive : boolean [0..1] ConceptSet An absolute URI which is the code system from which the selected codes come from system : uri [0..1] The version of the code system that the codes are selected from, or the special version '*' for all versions version : string [0..1] Selects the concepts found repeat in this value set (based on its value set definition). This is an absolute URI that is a reference order to ValueSet.url. If specify multiple value sets are specified this includes the union of the contents of all of the referenced value sets valueSet : canonical [0..*] « ValueSet » ConceptReference Specifies a code for the concept to be included or excluded code : code [1..1] The text to display to the user for this concept in the context of this valueset. If no display is provided, then applications using the value set use the display specified for the code by the system display : string [0..1] Designation The language this designation is defined for language : code [0..1] « A human language. (Strength=Preferred) CommonLanguages ? » A code that represents types of uses of designations use : Coding [0..1] « Details of how a designation would be used. (Strength=Extensible) DesignationUse + » The text value for this designation value : string [1..1] Filter A code that identifies a property or a filter defined in the code system property : code [1..1] The kind of operation to perform as a part of the filter criteria op : code [1..1] « The kind of operation to perform as a part of a property based filter. (Strength=Required) FilterOperator ! » The match value may be either a code defined by the system, or a string value, which is a regex match on the literal string of the property value (if the filter represents a property defined in CodeSystem) or of the system filter value (if the filter represents a filter defined in CodeSystem) when the operation is 'regex', or one of the values (true and false), when the operation is 'exists' value : string [1..1] Expansion An identifier that uniquely identifies this expansion of the valueset, based on a unique combination of the provided parameters, the system default parameters, and the underlying system code system versions etc. Systems may re-use the same identifier as long as those factors remain the same, and the expansion is the same, but are not required to do so. This is a business identifier identifier : uri [0..1] The time at which the expansion was produced by the expanding system timestamp : dateTime [1..1] The total number of concepts in the expansion. If the number of concept nodes in this resource is less than the stated number, then the server can return more using the offset parameter total : integer [0..1] If paging is being used, the offset at which this resource starts. I.e. this resource is a partial view into the expansion. If paging is not being used, this element SHALL NOT be present offset : integer [0..1] Parameter Name of the input parameter to the $expand operation; may must all be a server-assigned name for additional default or other server-supplied parameters used to control the expansion process name : string [1..1] The value of the parameter value[x] : Type [0..1] « string | boolean | integer | decimal | uri | code | dateTime » Contains An absolute URI which is the code system in which the code for this item in the expansion is defined system : uri [0..1] If true, this entry is included in the expansion for navigational purposes, and the user cannot select the code directly as a proper value abstract : boolean [0..1] true
  • If the concept is inactive in the code system that defines it. Inactive codes are those that are no longer
  • multipleOr: It's up to be used, but are maintained by the code system for understanding legacy data. It might not be known or specified server whether an concept is inactive (and it may depend on the context of use) inactive : boolean [0..1] The version of the code system from this code was taken. Note that a well-maintained code system does not need the version reported, because the meaning of codes is consistent across versions. However this cannot consistently be assured, and when the meaning is not guaranteed to be consistent, the version SHOULD be exchanged version : string [0..1] The code for this item in the expansion hierarchy. If this code is missing the entry in the hierarchy is a place holder (abstract) and does not represent a valid code in the value set code : code [0..1] The recommended display for this item in the expansion display : string [0..1] Additional representations for this concept when used in this value set - other languages, aliases, specialized purposes, used for particular purposes, etc designation [0..*] Specifies a concept to be included or excluded concept [0..*] Select concepts by specify a matching criterion based on the properties (including relationships) defined by the system, or on filters defined by the system. If parameter can have multiple filters are specified, they SHALL all values (separated by comma) where at least one must be true filter [0..*]
Include one or more codes from a code system or other value set(s) include
 
http://hl7.org/fhir/SearchParameter/CanonicalResource-jurisdiction Exclude one or more codes from the value set based on code system filters and/or other value sets exclude [0..*]
This is also known as the Content Logical Definition (CLD) compose [0..1] A search parameter that controlled the expansion process. These parameters may be used by users of expanded value sets to check whether the expansion is suitable for a particular purpose, or to pick the correct expansion parameter [0..*] Additional representations for this item - other languages, aliases, specialized purposes, used for particular purposes, etc. These are relevant when the conditions part of the expansion do not fix to a single correct representation designation common search parameter CanonicalResource-jurisdiction [0..*]

Generated Narrative: SearchParameter CanonicalResource-jurisdiction

Other codes and entries contained under this entry in the hierarchy contains [0..*] The codes that are contained in the value set expansion contains [0..*]

JSON Template Parameter jurisdiction : token

{ "resourceType" : "", // from // from " " " " " " " " " " " " " " " " " " " " " " " " " " " " " }] }], " " " " }], " }], " }, " " " " " " " ">" "> "> "> ">" ">" ">" }], " " " " " " " " " }] } } Turtle Template
@prefix fhir: <http://hl7.org/fhir/> . [ a fhir:; fhir:nodeRole fhir:treeRoot; # if this is the parser root # from # from fhir: fhir: fhir: fhir: fhir: fhir: fhir: fhir: fhir: fhir: fhir: fhir: fhir: fhir: fhir: fhir: fhir: fhir: fhir: fhir: fhir: fhir: fhir: fhir: fhir: fhir: fhir: fhir: fhir: ], ...; ], ...; fhir: fhir: fhir: fhir: ], ...; fhir: ], ...; fhir: ]; fhir: fhir: fhir: fhir: fhir: fhir: fhir: # . One of these 7 fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] fhir: ] ], ...; fhir: fhir: fhir: fhir: fhir: fhir: fhir: fhir: fhir: ], ...; ]; ]

Changes since Release 3 ValueSet ValueSet.status Change value set from http://hl7.org/fhir/ValueSet/publication-status to http://hl7.org/fhir/ValueSet/publication-status|4.0.1 ValueSet.experimental No longer marked as Modifier ValueSet.compose.include.concept.designation.language Change binding strength from extensible to preferred ValueSet.compose.include.filter No longer marked as Modifier ValueSet.compose.include.filter.op Change value set from http://hl7.org/fhir/ValueSet/filter-operator to http://hl7.org/fhir/ValueSet/filter-operator|4.0.1 ValueSet.compose.include.filter.value Type changed from code to string ValueSet.compose.include.valueSet Type changed from uri to canonical(ValueSet) ValueSet.expansion.identifier Min Cardinality changed from 1 to 0 ValueSet.expansion.parameter.value[x] Add Type dateTime ValueSet.expansion.contains.abstract Default Value "false" removed ValueSet.expansion.contains.inactive Default Value "false" removed ValueSet.extensible deleted See ExampleScenario : Jurisdiction of the Full Difference for further information This analysis is available as XML or JSON . See R3 <--> R4 Conversion Maps (status = 8 tests authority that all execute ok. All tests pass round-trip testing and 8 r3 resources are invalid (0 errors). )   See the Profiles & Extensions and the alternate definitions: Master Definition XML + JSON , XML Schema / Schematron + JSON Schema , ShEx (for Turtle ) + see maintains the extensions & the dependency analysis example scenario

4.9.4.1 Terminology Bindings
Path Definition Type Reference ValueSet.status The lifecycle status of an artifact. Jurisdiction ValueSet ValueSet.compose.include.concept.designation.language A human language. DesignationUse ValueSet.compose.include.filter.op The kind of operation to perform as a part of a property based filter. FilterOperator 4.9.4.2 Constraints id Expression
Required PublicationStatus ValueSet.jurisdiction Countries and regions within which this artifact is targeted for use. Resource Extensible ExampleScenario
Preferred , but limited to AllLanguages CommonLanguages ValueSet.compose.include.concept.designation.use Details of how a designation would be used. Expression Extensible ExampleScenario.jurisdiction
Processing Mode Required Normal
Level Multiples Location
  • multipleAnd: It's up to the server whether the parameter may repeat in order to specify multiple values that must all be true
  • multipleOr: It's up to the server whether the parameter can have multiple values (separated by comma) where at least one must be true
  • Description
 
http://hl7.org/fhir/SearchParameter/CanonicalResource-name Rule ValueSet.compose.include A value set include/exclude SHALL have a value set or a system valueSet.exists() or system.exists()
vsd-2 Rule This search parameter is part of the common search parameter CanonicalResource-name ValueSet.compose.include A value set with concepts or filters SHALL include a system (concept.exists() or filter.exists()) implies system.exists()
vsd-3

Generated Narrative: SearchParameter CanonicalResource-name Rule

ValueSet.compose.include Cannot have both concept and filter

Parameter name : string code.exists() or display.exists()

ExampleScenario : Computationally friendly name of the example scenario

ValueSet.expansion.contains RxNorm Filters
vsd-9 Resource Rule ExampleScenario ValueSet.expansion.contains
Must have a code if not abstract Expression code.exists() or abstract = true ExampleScenario.name
vsd-10 Processing Mode Rule Normal
Must have a system if a code is present Multiples code.empty() or system.exists() 4.9.5 Composition Rules A value set can be a simple list of included codes, or it can be some kind of general selection criteria using the facilities provided by the code system . For these value sets:
    Multiple include statements are cumulative - e.g. the value set contains the union of all the includes Within an include , all the criterion apply -e.g. the value set contains the intersection of the criterion Within an include , a single system with selection criteria may be listed, and/or one or more value sets may be listed valueSet (s) only : Codes are 'selected' for inclusion if they are in all the referenced value sets If a System only is specified, the following rules apply: no concept or filter : All codes in the system are included concept : Only the enumerated codes are selected
  • filter : Any codes meeting the filter criteria are selected valueSet and System : Codes are 'selected' for inclusion if they are selected by the code system selection (after checking for concept and filter ) and if they are in all the referenced value sets If the system reference is not version specific and filters are present, then the contents of the value set are open and change over time as the underlying code systems are updated The version reference may be the special value ' * ', which indicates that the value set includes codes from all versions of the code system. how multipleAnd: It's up to handle provision of the required versions and generation of expansions is at server discretion, including for poorly behaved code systems where a code changes in meaning). Implementation Note: Use of this capability is subject to future clarification and conformance requirements based on implementation experience . Using the property filters is only possible where the code system in use defines the relevant properties. Note that in some cases the underlying code system defines the logical concepts but not the syntax for exercising them. In such cases, the literal definitions may be provided by a third party In addition to include rules, codes may be excluded. Rules for interpretation of exclude statements match those for includes, but codes in the exclude statements are never in whether the value set Value sets parameter may include abstract codes - that is, codes designated by the underlying code system as not for use as a selectable concept in a particular context. These abstract codes are typically used as a grouping/searching mechanism, and can be included either by enumerating them, or by using a filter. Any compose.exclude SHALL be processed such that excluded codes are not found in the expansion 4.9.6 Display and Designations Concepts used in ValueSets can have a display , which is a short text that represents the meaning of the concept to human users in the context of the value set (which often has narrower meaning and therefore is amenable to shorter displays. If a display is not provided, the value set uses the display from the code system (which is the preferred approach, because overriding the display can lead to very unsafe outcomes). When a value set enumerates codes, it is sometimes useful to define an alternative display for the code that is to be used wherever the value set is expanded and used in a UI. This facility is provided to cover the following circumstances: The system that defines the code or expression doesn't provide a display for this code (or any codes). The system that defines the code or expression defines multiple choices for display. The system provides a very long display name that is unnecessary or inappropriate in the context of this value set (e.g. a display name of "Glucose [Mass/volume] in Serum or Plasma --10 PM specimen" for LOINC code 48991-4, when the value set only includes Glucose mass/vol in serum/plasma codes). As the display names get longer, this becomes more important. Note that care must be taken repeat in order to avoid "changing the meaning" of the concept by implying that it means something other than the explicit definition of the concept in the underlying code system (e.g., in the case above, using a display of "Glucose Concentration at 10pm"). For this reason, some contexts of use do not allow a display to be associated with a specific code in a value set. Any display name for a concept provided in the value set is for display to a human user. The display in the Coding specify multiple values that results from a user selecting a concept from the expansion must all be taken from the underlying code system definition, even if a value set is referenced explicitly in the Coding (e.g. by an extension ). The correct display for a code can be determined by a $lookup operation . Any alternative display specified in the value set would go in CodeableConcept .text, perhaps appended to the UI label for the matching data element. As an example, the LOINC code 55423-8 true
  • has a display value of "Number of steps in unspecified time Pedometer". A value set for a pick list in a patient generated data form might choose a simpler name: { "resourceType" : "ValueSet", "compose" : { "include" : [{ "system" : "http://loinc.org", "concept" : [{ "code" : "55423-8", "display" : "Step Count" }] }] } } The expansion generated by a terminology server will have this: { "resourceType" : "ValueSet", "expansion" : { "contains" : [{ "system" : "http://loinc.org", "code" : "55423-8", "display" : "Step Count" }] } } The expansion display is taken from the value set, and this is what is displayed in the pick list. Once the user picks the code, it will appear in the Observation.code like this: { "resourceType" : "Observation", "code" : { "coding" : [{ "system" : "http://loinc.org", "code" : "55423-8", "display" : "Number of steps in unspecified time Pedometer" }], "text" : "Step Count" } } Note that the correct value for the display is not in the expansion above. The client can either omit the display, look it
  • multipleOr: It's up using $lookup , or to the server might pre-populate it in the expansion: { "resourceType" : "ValueSet", "expansion" : { "contains" : [{ "system" : "http://loinc.org", "code" : "55423-8", "display" : "Step Count", "designation" : [{ "use" : { "system" : "http://snomed.info/sct", "code" : "900000000000003001" }, "value" : "Number of steps in unspecified time Pedometer" }] }] } } Irrespective of this, the display in the expansion always goes in CodeableConcept.text . In addition to whether the display, a concept parameter can have one or more designation elements. The display is equivalent to a special designation with an implied designation.use of "primary code" and a language equal to the Resource Language . The designations can provide additional displays for other languages, as well as designations for other purposes. When using concepts, applications use the display unless the language or usage in context provides a reason to use one of the designations. 4.9.7 Value Sets with multiple code systems Value sets may select codes from multiple code systems - either by including codes from different systems, or importing other value sets that include them. A typical use for crossing code systems is when including a set of codes, and adding a few additional codes to cover cases not catered to values (separated by the included codes (e.g. Data missing or workflow error codes). Best Practice Note: Mixing definitional systems offers the potential for confusing, overlapping, and inconsistent definitions. Creating value sets that cross code systems should be done with care to avoid creating definitional confusion. Value sets should only include well differentiated concepts, but many value sets and code systems do not have well differentiated concepts because of various real world constraints. 4.9.7.1 Code systems Note Each Code System defines which filters can comma) where at least one must be used in ValueSet.compose.include.filter . All code systems have base filters and any additional filters defined in ( CodeSystem.filter) . This specification also defines filters for various published code systems: LOINC Filters true
  • Using CT Filters
UCUM Filters
 
NDF-RT Filters http://hl7.org/fhir/SearchParameter/CanonicalResource-publisher 4.9.8 Value Set Expansion
This means that expansion across imports is a recursive process. Add the intersection of the result set from the system and the result sets from the value sets to the expansion For each compose.exclude , follow the same process as for compose.include , but remove any codes from the result set, instead of adding them. The final "result set" is then represented in expansion . Note that the expansion structure search parameter is inherently ordered; this specification does not fix the meaning of use part of the order. The conceptual approach described should not be understood to prohibit any implementation approach in these regards. In addition, note that the method described above is a conceptual approach; individual servers may choose to follow alternative approaches that are more efficient, as long as the outcome is the same. 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.   common search parameter CanonicalResource-publisher 4.9.8.1 Hierarchical Expansions

Generated Narrative: SearchParameter CanonicalResource-publisher The expansion MAY be hierarchical - that is, it may have contains element that contain their own sub-elements, to any level of depth. This specification does not fix the meaning of the hierarchy: there is no implication about the logical relationship between the nested contain elements, and the structure cannot be used for logical inferencing. The structure exists to provide navigational assistance for helping human users to locate codes in the expansion. There is an example of use of a hierarchical expansion .

Note that the CodeSystem resource and ValueSet.compose offer no direct support for defining hierarchies and groups; applications may want to take advantage of the expand-rules and expand-group extensions as an implementation feature. An expansion may include entries in the expansion that only serve an arbitrary grouping purpose, to make it easier for a human to use the list. These entries have no system or code, and must be marked as abstract. 4.9.8.2 Uniqueness of Concepts in Expansions Value set definitions may lead to more than one instruction to include a given concept in the value set across the includes and imports. No matter how many times the definitions include a concept, it is only present in the value set once, and will only appear once in a flat expansion of the value set. Note, however, that a concept may appear more than once in a nested hierarchy when the expansion is prepared for UI use (irrespective of how many times it is included in the definitions). Note that uniqueness is based on system/version/code; it is possible to include the same concept from different versions of a code system in the same expansion, though this is generally confusing for users and should be avoided. The codes in the expansion should be treated as case sensitive - implementers should use the correct case. Implementers can consult the definition of the underlying code systems to determine whether the code system that defines the code is case sensitive or not.

It is important that expansions be identified properly. Any value set definition may produce an infinite number of expansions, depending on the operation parameters. Any expansions produced must be clearly identified so that there is no confusion. The following rules apply: The canonical URL for the expansion is the same as the value set it was expanded from Each expansion SHALL have a unique identifier in Parameter ValueSet.expansion.identifier publisher : string The result of an $expand operation may use the same identifier in ValueSet.expansion.identifier as a previous expansion, but if it does, the canonical representation of the value set expansion SHALL be identical (e.g. a cached response) 4.9.8.4 Expansion Parameters

The expansion contains a set of parameters in ValueSet.expansion.parameter that record what controlled the expansion process. These parameters may be used by users of expanded value sets to check whether the expansion is suitable for a particular purpose, or to pick the correct expansion. The server decides which parameters to include here, but at a minimum, the list SHOULD include all ExampleScenario : Name of the parameters that affect the $expand operation. If the expansion will be persisted all publisher of these parameters SHALL be included. If the codeSystem on the server has a specified version then this version SHALL be provided as a parameter in the expansion (note that not all code systems have a version). The following parameters are predefined by the $expand operation, and are suitable for use in the expansion parameters: example scenario

Paging support - where to start if a subset is desired (default = 0). Offset is number of records (not number of pages)
filter Resource A text filter that is applied to restrict the codes that are returned (this is useful in a UI context). The interpretation of this is delegated to the server in order to allow to determine the most optimal search approach for the context. The server can document the way this parameter works in TerminologyCapabilities ..expansion.textFilter. Typical usage of this parameter includes functionality like: using left matching e.g. "acut ast" allowing for wild cards such as %, &, ? searching on definition as well as display(s) allowing for search conditions (and / or / exclusions) Text Search engines such as Lucene or Solr, long with their considerable functionality, might also be used. The optional text search might also be code system specific, and servers might have different implementations for different code systems ExampleScenario
date The date for which the expansion should be generated. if a date is provided, it means that the server should use the value set / code system definitions as they were on the given date, or return an error if this is not possible. Normally, the date is the current conditions (which is the default value) but under some circumstances, systems need to generate an expansion as it would have been in the past. A typical example of this would be where code selection is constrained to the set of codes that were available when the patient was treated, not when the record is being edited. Note that which date is appropriate is a matter for implementation policy. Expression offset ExampleScenario.publisher
count Processing Mode Paging support - how many codes should be provided in a partial page view. Paging only applies to flat expansions - servers ignore paging if the expansion is not flat. If count = 0, the client is asking how large the expansion is. Servers SHOULD honor this request for hierarchical expansions as well, and simply return the overall count Normal
includeDesignations Multiples Controls
  • multipleAnd: It's up to the server whether concept designations are the parameter may repeat in order to specify multiple values that must all be included or excluded in value set expansions designation true
  • A token that specifies a system+code that is either a use or a language. Designations that match by language or use are included in the expansion. If no designation is specified, it is at
  • multipleOr: It's up to the server discretion which designations to return includeDefinition Controls whether the value set definition is included or excluded in value set expansions parameter can have multiple values (separated by comma) where at least one must be true
activeOnly
 
excludeNested http://hl7.org/fhir/SearchParameter/CanonicalResource-status Controls whether or not the value set expansion nests codes or not (i.e. ValueSet.expansion.contains.contains)
excludeNotForUI Controls whether or not the value set expansion This search parameter is assembled for a user interface use or not. Value sets intended for User Interface might include 'abstract' codes or have nested contains with items with no code or abstract = true, with the sole purpose of helping a user navigate through the list efficiently, where as a value set not generated for UI use might be flat, and only contain the selectable codes in the value set. The exact implications part of 'for UI' depend on the code system, and what properties it exposes for a terminology server to use. In the FHIR Specification itself, the value set expansions are generated with excludeNotForUI = false, and the expansions used when generated schema / code etc, or performing validation, are all excludeNotForUI = true. common search parameter CanonicalResource-status
excludePostCoordinated

Generated Narrative: SearchParameter CanonicalResource-status Controls whether or not the value set expansion includes post coordinated codes

displayLanguage

Code system, or a particular version of a code system to be excluded from the value set expansion. The format is the same as a canonical URL: [system]|[version] - e.g. http://loinc.org|2.56 Parameter system-version status : token

Specifies a version to use for a system, if the value set does not specify which one to use. ExampleScenario : The format is current status of the same as a canonical URL: [system]|[version] - e.g. http://loinc.org|2.56 example scenario

Edge Case: Specifies a version to use for a system. This parameter overrides any specified version in the value set (and any it depends on). The format is the same as a canonical URL: [system]|[version] - e.g. http://loinc.org|2.56. Note that this has obvious safety issues, in that it may result in a value set expansion giving a different list of codes that is both wrong and unsafe, and implementers should only use this capability reluctantly. It primarily exists to deal with situations where specifications have fallen into decay as time passes. If the value is override, the version used SHALL explicitly be represented in the expansion parameters The count and offset parameters are important. If the expansion is a page out of the whole expansion, the offset and count parameters SHALL be populated. Clients can reliably use the count/offset parameters to determine whether the whole expansion is returned. Other parameters that servers may be required to use:
check-system-version Resource Edge Case: Specifies a version to use for a system. If a value set specifies a different version, an error is returned instead of the expansion. The format is the same as a canonical URL: [system]|[version] - e.g. http://loinc.org|2.56 ExampleScenario
Expression force-system-version ExampleScenario.status
[canonical]#CodeSystem.content Processing Mode [content] : The content value for the code system for the canonical URL. Applications generating expansions SHALL use this parameter if the CodeSystem.content value is "fragment" or " Normal
[canonical1]#supplement Multiples [canonical2] : Indicates that the specified supplement (canonical2) contributed
  • multipleAnd: It's up to the content of the expansion for server whether the code system canonical1 (by influencing selection, or providing designations). Applications generating expansions SHALL use this parameter may repeat in order to record specify multiple values that a supplement was used during the expansion process must all be true
  • Beyond this, servers MAY define their own parameters, though Terminology server authors are requested to bring additional parameters
  • multipleOr: It's up to HL7 (via 'Propose a change' link below) in the interests of interoperability. Servers can also create and store Provenance statements about the expansion, or AuditEvent records of server whether the expansion process if further transparency is required. These resources parameter can contain considerable detail about the various inputs to the process, and any significant decisions have multiple values (separated by the expansion engine. Further details around this (and profiles on the relevant resources) may be provided in future versions of this specification or related implementation guides. Request for Feedback: The existing set of parameters are intended to cover the vast majority of use cases, but there are some cases comma) where the parameters do not provide enough control to a client, particularly with regard to combinations of parameters, and the interplay between code system versions and other parameters. Implementers may need to define their own value sets to meet these requirements. Ongoing feedback is welcome at [link to least one must be provided] true
4.9.8.5 Storing Expansions
 
http://hl7.org/fhir/SearchParameter/CanonicalResource-url
This is intended to allow a consumer to find all the value sets that include a particular code. However, fully evaluating this search parameter is extremely onerous for a server. Further, whether a code is in a value set depends on the context in which expansions are performed (see the $expand operation). For this reason, the degree to which part of the common search parameter is supported can be declared in the Terminology Capability CanonicalResource-url statement. 4.9.9 Combinations of .compose and .expansion

Generated Narrative: SearchParameter CanonicalResource-url Use cases for the different combinations:

.compose only: Provides the value set definition (CLD). This is the expected format from the value set publisher. .expansion only: Provides the value set expansion, which might or might not be persisted (see 4.8.7 Value Set Expansion above). The "expansion only" format may be returned in the $expand operation output (at the terminology server's discretion). Both .compose and .expansion : The terminology server often may include the definition as well as the expansion in the $expand operation output. The resource instance including the expansion might or might not be persisted. Neither .compose nor .expansion : This is a valid format for ValueSet resource instances. A primary use case is the return from a summary search (i.e. _summary=true). This may be especially useful to reduce the performance overhead when returning a summary of extensionally defined value sets (which may include a large number of concepts in the value set definition). Search parameters for this resource. The common parameters also apply. See Searching for more information about searching in REST, messaging, and services. Name Type Description Expression

Parameter url : uri

In Common

ExampleScenario : The uri that identifies the example scenario

This special parameter searches for codes in the value set. See additional notes on the ValueSet resource ValueSet.expansion.contains.code | ValueSet.compose.include.concept.code context-type-value TU composite A use context type and value assigned to the value set On ValueSet.useContext:   context-type: code   context: value.as(CodeableConcept)
code TU Resource token ExampleScenario
context TU token A use context assigned to the value set Expression (ValueSet.useContext.value as CodeableConcept) ExampleScenario.url
context-quantity TU quantity A quantity- or range-valued use context assigned to the value set (ValueSet.useContext.value as Quantity) | (ValueSet.useContext.value as Range) Processing Mode Normal
context-type TU Multiples token
    A type of use context assigned
  • multipleAnd: It's up to the value set ValueSet.useContext.code context-type-quantity TU composite server whether the parameter may repeat in order to specify multiple values that must all be true
  • A use context type and quantity- or range-based value assigned
  • multipleOr: It's up to the value set On ValueSet.useContext:   context-type: code   context-quantity: value.as(Quantity) | value.as(Range) server whether the parameter can have multiple values (separated by comma) where at least one must be true
 
http://hl7.org/fhir/SearchParameter/CanonicalResource-version string
expansion TU uri Identifies This search parameter is part of the value set expansion (business identifier) ValueSet.expansion.identifier common search parameter CanonicalResource-version

Generated Narrative: SearchParameter CanonicalResource-version

jurisdiction TU token Intended jurisdiction for the value set

Parameter version : token string

Computationally friendly name ExampleScenario : The business version of the value set ValueSet.name example scenario

Name of the publisher of the value set ValueSet.publisher url TU uri The uri that identifies the value set ValueSet.url
publisher TU Resource string ExampleScenario
reference TU uri A code system included or excluded in the value set or an imported value set Expression ValueSet.compose.include.system ExampleScenario.version
status TU token The current status of the value set ValueSet.status Processing Mode Normal
title TU Multiples string
    The human-friendly name of
  • multipleAnd: It's up to the value set server whether the parameter may repeat in order to specify multiple values that must all be true
  • ValueSet.title
  • multipleOr: It's up to the server whether the parameter can have multiple values (separated by comma) where at least one must be true