Release 4B 5

This page is part of the FHIR Specification (v4.3.0: R4B (v5.0.0: R5 - STU ). The This is the current published version which supercedes in it's permanent home (it will always be available at this version is 5.0.0 . URL). For a full list of available versions, see the Directory of published versions . Page versions: R5 R4B R5 R4B R4 R3 R2

Operation-valueset-expand.xml

Example OperationDefinition/ValueSet-expand (XML)

Vocabulary Terminology Infrastructure Work Group Maturity Level : N/A Standards Status : Informative

Raw XML ( canonical form + also see XML Format Specification )

Operation Definition

<?xml version="1.0" encoding="UTF-8"?>


  
  
    
    
      
      
      
      
      
        The definition of a value set is used to create a simple collection of codes suitable
           for use for data entry or validation.

        If the operation is not called at the instance level, one of the in parameters url, context
           or valueSet must be provided.  An expanded value set will be returned, or an OperationOutcome
           with an error message.

      
      
      
      
      
        
          
            
          
          
            
          
          
            
          
          
            
          
          
            
          
          
            
          
        
        
          
          
          
          
            
          
          
          
            
              A canonical reference to a value set. The server must know the value set (e.g. it is defined
                 explicitly in the server's value sets, or it is defined implicitly by some code system
                 known to the server

            
          
        
        
          
          
          
          
            
          
          
          
            
              The value set is provided directly as part of the request. Servers may choose not to accept
                 value sets in this fashion

            
          
        
        
          
          
          
          
            
          
          
          
            
              The identifier that is used to identify a specific version of the value set to be used
                 when generating the expansion. 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.

            
          
        
        
          
          
          
          
            
          
          
          
            
              The context of the value set, so that the server can resolve this to a value set to expand.
                 The recommended format for this URI is [Structure Definition URL]#[name or path into structure
                 definition] e.g. http://hl7.org/fhir/StructureDefinition/observation-hspc-height-hspcheight#Observat
                ion.interpretation. Other forms may be used but are not defined. This form is only usable
                 if the terminology server also has access to the conformance registry that the server
                 is using, but can be used to delegate the mapping from an application context to a binding
                 at run-time

            
          
        
        
          
          
          
          
            
          
          
          
            
              

              

                

                

              

              The purpose is to inform the server whether to use the value set associated with the context
                 for reading or writing purposes (note: for most elements, this is the same value set,
                 but there are a few elements where the reading and writing value sets are different)

            
          
        
        
          
          
          
          
            
          
          
          
            
              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 
                ..expansion.textFilter. Typical usage of this parameter includes functionality like:
              

              

                

                

                

                

              


<OperationDefinition xmlns="http://hl7.org/fhir">
  <id value="ValueSet-expand"/> 
  <text> 
    <status value="extensions"/> 
    <div xmlns="http://www.w3.org/1999/xhtml">
      <p> URL: [base]/ValueSet/$expand</p> 
      <p> URL: [base]/ValueSet/[id]/$expand</p> 
      <p> Parameters</p> 
      <table class="grid">
        <tr> 
          <td> 
            <b> Use</b> 
          </td> 
          <td> 
            <b> Name</b> 
          </td> 
          <td> 
            <b> Scope</b> 
          </td> 
          <td> 
            <b> Cardinality</b> 
          </td> 
          <td> 
            <b> Type</b> 
          </td> 
          <td> 
            <b> Binding</b> 
          </td> 
          <td> 
            <b> Documentation</b> 
          </td> 
        </tr> 
        <tr> 
          <td> IN</td> 
          <td> url</td> 
          <td> type</td> 
          <td> 0..1</td> 
          <td> 
            <a href="datatypes.html#uri">uri</a> 
          </td> 
          <td/>  
          <td> 
            <div> 
              <p> A canonical reference to a value set. The server must know the value set (e.g.
                 it is defined explicitly in the server's value sets, or it is defined implicitly
                 by some code system known to the server</p> 
            </div>           </td>         </tr>         <tr>           <td> IN</td>           <td> valueSet</td>           <td> type</td>           <td> 0..1</td>           <td>             <a href="valueset.html">ValueSet</a>           </td>           <td/>            <td>             <div>               <p> The value set is provided directly as part of the request. Servers may choose not

                 to accept value sets in this fashion</p> 
            </div>           </td>         </tr>         <tr>           <td> IN</td>           <td> valueSetVersion</td>           <td> type</td>           <td> 0..1</td>           <td>             <a href="datatypes.html#string">string</a>           </td>           <td/>            <td>             <div>               <p> The identifier that is used to identify a specific version of the value set to

                 be used when generating the expansion. 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.</p> 
            </div>           </td>         </tr>         <tr>           <td> IN</td>           <td> context</td>           <td/>            <td> 0..1</td>           <td>             <a href="datatypes.html#uri">uri</a>           </td>           <td/>            <td>             <div>               <p> The context of the value set, so that the server can resolve this to a value set

                 to expand. The recommended format for this URI is [Structure Definition URL]#[name
                 or path into structure definition] e.g. http://hl7.org/fhir/StructureDefinition/observation-h
                spc-height-hspcheight#Observation.interpretation. Other forms may be used but are
                 not defined. This form is only usable if the terminology server also has access
                 to the conformance registry that the server is using, but can be used to delegate
                 the mapping from an application context to a binding at run-time</p> 
            </div>           </td>         </tr>         <tr>           <td> IN</td>           <td> contextDirection</td>           <td/>            <td> 0..1</td>           <td>             <a href="datatypes.html#code">code</a>           </td>           <td/>            <td>             <div>               <p> If a context is provided, a context direction may also be provided. Valid values

                 are:</p> 
              <ul>                 <li> 'incoming': the codes a client can use for PUT/POST operations,  and</li>                 <li> 'outgoing', the codes a client might receive from the server.</li>               </ul>               <p> The purpose is to inform the server whether to use the value set associated with

                 the context for reading or writing purposes (note: for most elements, this is the
                 same value set, but there are a few elements where the reading and writing value
                 sets are different)</p> 
            </div>           </td>         </tr>         <tr>           <td> IN</td>           <td> filter</td>           <td/>            <td> 0..1</td>           <td>             <a href="datatypes.html#string">string</a>           </td>           <td/>            <td>             <div>               <p> 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 
                <a href="terminologycapabilities.html">TerminologyCapabilities</a> ..expansion.textFilter. Typical usage of this parameter includes functionality

                 like:
              </p>               <ul>                 <li> using left matching e.g. &quot;acut ast&quot;</li>                 <li> allowing for wild cards such as %, &amp;, ?</li>                 <li> searching on definition as well as display(s)</li>                 <li> allowing for search conditions (and / or / exclusions)</li>               </ul> 
              <p> 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

            
          
        
        
          
          
          
          
            
          
          
          
            
              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.

            
          
        
        
          
          
          
          
            
          
          
          
            
              Paging support - where to start if a subset is desired (default = 0). Offset is number
                 of records (not number of pages)

            
          
        
        
          
          
          
          
            
          
          
          
            
              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

            
          
        
        
          
          
          
          
            
          
          
          
            
              

            
          
        
        
          
          
          
          
            
          
          
          
            
              A 
                 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 the server discretion which designations to return
              

            
          
        
        
          
          
          
          
            
          
          
          
            
              

            
          
        
        
          
          
          
          
            
          
          
          
            
              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

            
          
        
        
          
          
          
          
            
          
          
          
            
              Controls whether or not the value set expansion nests codes or not (i.e. ValueSet.expansion.contains
                .contains)

            
          
        
        
          
          
          
          
            
          
          
          
            
              Controls whether or not the value set expansion is assembled for a user interface use
                 or not. Value sets intended for User Interface might include 
                 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 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.
              

            
          
        
        
          
          
          
          
            
          
          
          
            
              

            
          
        
        
          
          
          
          
            
          
          
          
            

                 might also be used. The optional text search might also be code system specific,
                 and servers might have different implementations for different code systems</p> 
            </div>           </td>         </tr>         <tr>           <td> IN</td>           <td> date</td>           <td/>            <td> 0..1</td>           <td>             <a href="datatypes.html#dateTime">dateTime</a>           </td>           <td/>            <td>             <div>               <p> 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.</p> 
            </div>           </td>         </tr>         <tr>           <td> IN</td>           <td> offset</td>           <td/>            <td> 0..1</td>           <td>             <a href="datatypes.html#integer">integer</a>           </td>           <td/>            <td>             <div>               <p> Paging support - where to start if a subset is desired (default = 0). Offset is

                 number of records (not number of pages)</p> 
            </div>           </td>         </tr>         <tr>           <td> IN</td>           <td> count</td>           <td/>            <td> 0..1</td>           <td>             <a href="datatypes.html#integer">integer</a>           </td>           <td/>            <td>             <div>               <p> 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</p> 
            </div>           </td>         </tr>         <tr>           <td> IN</td>           <td> includeDesignations</td>           <td/>            <td> 0..1</td>           <td>             <a href="datatypes.html#boolean">boolean</a>           </td>           <td/>            <td>             <div>               <p> Controls whether concept designations are to be included or excluded in value set

                 expansions</p> 
            </div>           </td>         </tr>         <tr>           <td> IN</td>           <td> designation</td>           <td/>            <td> 0..*</td>           <td>             <a href="datatypes.html#string">string</a>           </td>           <td/>            <td>             <div>               <p> A                 <a href="search.html#token">token</a>  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 the server discretion which designations to return
              </p>             </div>           </td>         </tr>         <tr>           <td> IN</td>           <td> includeDefinition</td>           <td/>            <td> 0..1</td>           <td>             <a href="datatypes.html#boolean">boolean</a>           </td>           <td/>            <td>             <div>               <p> Controls whether the value set definition is included or excluded in value set

                 expansions</p> 
            </div>           </td>         </tr>         <tr>           <td> IN</td>           <td> activeOnly</td>           <td/>            <td> 0..1</td>           <td>             <a href="datatypes.html#boolean">boolean</a>           </td>           <td/>            <td>             <div>               <p> 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</p> 
            </div>           </td>         </tr>         <tr>           <td> IN</td>           <td> useSupplement</td>           <td/>            <td> 0..*</td>           <td>             <a href="datatypes.html#canonical">canonical</a>           </td>           <td/>            <td>             <div>               <p> The supplement must be used when performing an expansion. Use of this parameter

                 should result in $expand behaving the same way as if the supplements were included
                 in the value set definition using the 
                <a href="http://hl7.org/fhir/extensions/StructureDefinition-valueset-supplement.html">http://hl7.org/fhir/StructureDefinition/valueset-supplement</a>               </p>             </div>           </td>         </tr>         <tr>           <td> IN</td>           <td> excludeNested</td>           <td/>            <td> 0..1</td>           <td>             <a href="datatypes.html#boolean">boolean</a>           </td>           <td/>            <td>             <div>               <p> Controls whether or not the value set expansion may nest codes or not (i.e. ValueSet.expansio

                n.contains.contains). If excludeNested is set to true, the expansion MUST be flat
                 (no nesting). If excludeNested is set to false (default),  however, nesting is
                 possible but not required</p> 
            </div>           </td>         </tr>         <tr>           <td> IN</td>           <td> excludeNotForUI</td>           <td/>            <td> 0..1</td>           <td>             <a href="datatypes.html#boolean">boolean</a>           </td>           <td/>            <td>             <div>               <p> Controls whether or not the value set expansion might include</p>               <ul>                 <li> codes from the CodeSystem with a notSelectable property set to true as specified

                   in 
                  <a href="codesystem.html#status">status</a> ] and in                   <a href="codesystem-concept-properties.html">Concept Properties</a>                 </li>                 <li> nested contains with no code (see                   <a href="valueset-definitions.html#ValueSet.expansion.contains.code">Contains</a> )                </li>                 <li> nested contains in the ValueSet with                   <a href="valueset-definitions.html#ValueSet.expansion.contains.abstract">abstract = true</a>                 </li>               </ul>               <p> One purpose of such concepts is helping a user navigate through the list efficiently.

                 If excludeNotForUI is set to true, the concepts as described above will be excluded
                 from the expansion. If excludeNotForUI is set to false (default), all concepts
                 as described above may be part of the expansion. In the FHIR Specification itself,
                 the value set expansions are generated with excludeNotForUI = false, and the expansions
                 used when generating schema / code etc., or performing validation, are all excludeNotForUI
                 = true.</p> 
            </div>           </td>         </tr>         <tr>           <td> IN</td>           <td> excludePostCoordinated</td>           <td/>            <td> 0..1</td>           <td>             <a href="datatypes.html#boolean">boolean</a>           </td>           <td/>            <td>             <div>               <p> Controls whether or not the value set expansion includes post coordinated codes</p>             </div>           </td>         </tr>         <tr>           <td> IN</td>           <td> displayLanguage</td>           <td/>            <td> 0..1</td>           <td>             <a href="datatypes.html#code">code</a>           </td>           <td/>            <td>             <div> 
              <p> Specifies the language to be used for description in the expansions i.e. the language
                 to be used for ValueSet.expansion.contains.display

            
          
        
        
          
          
          
          
            
          
          
          
            
              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.5
                6

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

            
          
        
        
          
          
          
          
            
          
          
          
            
              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

            
          
        
        
          
          
          
          
            
          
          
          
            
              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 result of the expansion. Servers generating expansions SHOULD ensure that all the
                 parameters that affect the contents of the expansion are recorded in the ValueSet.expansion.paramete
                r list

            
          
        
      
      
        The value set expansion returned by this query should be treated as a transient result
           that will change over time (whether it does or not depends on how the value set is specified),
           so applications should repeat the operation each time the value set is used.

        If the expansion is too large (at the discretion of the server), the server MAY return
           an error (OperationOutcome with code too-costly). Clients can work through large flat
           expansions in a set of pages (partial views of the full expansion) instead of just getting
           the full expansion in a single exchange by using offset and count parameters, or use the
           count parameter to request a subset of the expansion for limited purposes. Servers are
           not obliged to support paging, but if they do, SHALL support both the offset and count
           parameters. Hierarchical expansions are not subject to paging and servers simply return
           the entire expansion.

        Different servers may return different results from expanding a value set for the following
           reasons:

        

          The underlying code systems are different (e.g. different versions, possibly with different
             defined behavior)

          

          Servers introduce arbitrary groups to assist a user to navigate the lists based either
             on extensions in the definition, or additional knowledge available to the server

        


                 to be used for ValueSet.expansion.contains.display</p> 
            </div>           </td>         </tr>         <tr>           <td> IN</td>           <td> property</td>           <td/>            <td> 0..*</td>           <td>             <a href="datatypes.html#string">string</a>           </td>           <td/>            <td>             <div>               <p> A request to return a particular property in the expansion. The returned property

                 may include subproperties. May be either a code from the code system definition
                 (convenient) or a the formal URI that refers to the property. Note that property
                 names can clash, so using a URI is recommended. The special value '*' means all
                 properties and their sub-properties known to the server</p> 
            </div>           </td>         </tr>         <tr>           <td> IN</td>           <td> exclude-system</td>           <td/>            <td> 0..*</td>           <td>             <a href="datatypes.html#canonical">canonical</a>           </td>           <td/>            <td>             <div>               <p> 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</p> 
            </div>           </td>         </tr>         <tr>           <td> IN</td>           <td> system-version</td>           <td/>            <td> 0..*</td>           <td>             <a href="datatypes.html#canonical">canonical</a>           </td>           <td/>            <td>             <div>               <p> Specifies a version to use for a system, if the value set does not specify which

                 one to use. The format is the same as a canonical URL: [system]|[version] - e.g.
                 http://loinc.org|2.56</p> 
            </div>           </td>         </tr>         <tr>           <td> IN</td>           <td> check-system-version</td>           <td/>            <td> 0..*</td>           <td>             <a href="datatypes.html#canonical">canonical</a>           </td>           <td/>            <td>             <div>               <p> 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</p> 
            </div>           </td>         </tr>         <tr>           <td> IN</td>           <td> force-system-version</td>           <td/>            <td> 0..*</td>           <td>             <a href="datatypes.html#canonical">canonical</a>           </td>           <td/>            <td>             <div>               <p> 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</p> 
            </div>           </td>         </tr>         <tr>           <td> OUT</td>           <td> return</td>           <td/>            <td> 1..1</td>           <td>             <a href="valueset.html">ValueSet</a>           </td>           <td/>            <td>             <div>               <p> The result of the expansion. Servers generating expansions SHOULD ensure that all

                 the parameters that affect the contents of the expansion are recorded in the ValueSet.expansi
                on.parameter list</p> 
            </div>           </td>         </tr>       </table>       <div>         <p> The value set expansion returned by this query should be treated as a transient

           result that will change over time (whether it does or not depends on how the value
           set is specified), so applications should repeat the operation each time the value
           set is used.</p> 
        <p> When available, ValueSet.status and ValueSet.version from the ValueSet resource

           instance which contains the definition SHALL be persisted to the ValueSet resource
           instance which contains the expansion.</p> 
        <p> If the expansion is too large (at the discretion of the server), the server MAY

           return an error (OperationOutcome with code too-costly). Clients can work through
           large flat expansions in a set of pages (partial views of the full expansion) instead
           of just getting the full expansion in a single exchange by using offset and count
           parameters, or use the count parameter to request a subset of the expansion for
           limited purposes. Servers are not obliged to support paging, but if they do, SHALL
           support both the offset and count parameters. Hierarchical expansions are not subject
           to paging and servers simply return the entire expansion.</p> 
        <p> Different servers may return different results from expanding a value set for the

           following reasons:</p> 
        <ul>           <li> The underlying code systems are different (e.g. different versions, possibly with

             different defined behavior)</li> 
          <li> The server optimizes filter includes differently, such as sorting by code frequency</li>           <li> Servers introduce arbitrary groups to assist a user to navigate the lists based

             either on extensions in the definition, or additional knowledge available to the
             server</li> 
        </ul> 
        <p> When a server cannot correctly expand a value set because it does not fully understand
           the code systems (e.g. it has the wrong version, or incomplete definitions) then it SHALL
           return an error. If the value set itself is unbounded due to the inclusion of post-coordinated
           value sets (e.g. SNOMED CT, UCUM), then the extension 
           can be used to indicate that the expansion is incomplete
        

      
    
  
  
    
  
  
    
  
  
  
  
  
  
  
  
  
  
  
    
      
      
    
    
      
      
    
  

           the code systems (e.g. it has the wrong version, or incomplete definitions) then
           it SHALL return an error. If the value set itself is unbounded due to the inclusion
           of post-coordinated value sets (e.g. SNOMED CT, UCUM), then the extension 
          <a href="http://hl7.org/fhir/extensions/StructureDefinition-valueset-unclosed.html">http://hl7.org/fhir/StructureDefinition/valueset-unclosed</a>  can be used to indicate that the expansion is incomplete        </p>       </div>     </div>   </text>   <extension url="http://hl7.org/fhir/StructureDefinition/structuredefinition-fmm">    <valueInteger value="5"/>   </extension>   <extension url="http://hl7.org/fhir/StructureDefinition/structuredefinition-standards-status">    <valueCode value="normative"/>   </extension>   <url value="http://hl7.org/fhir/OperationDefinition/ValueSet-expand"/>   <version value="5.0.0"/>   <name value="Expand"/>   <title value="Value Set Expansion"/>   <status value="active"/>   <kind value="operation"/>   <experimental value="false"/>   <date value="2023-03-26T15:21:02+11:00"/>   <publisher value="HL7 (FHIR Project)"/>   <contact>     <telecom>       <system value="url"/>       <value value="http://hl7.org/fhir"/>     </telecom>     <telecom>       <system value="email"/>       <value value="fhir@lists.hl7.org"/>     </telecom>   </contact> 
  <description value="The definition of a value set is used to create a simple collection of codes suitable
   for use for data entry or validation. 

If the operation is not called at the instance level, one of the in parameters url, context
   or valueSet must be provided.  An expanded value set will be returned, or an OperationOutcome
   with an error message.
  
  
  The value set expansion returned by this query should be treated as a transient result
   that will change over time (whether it does or not depends on how the value set is specified),
   so applications should repeat the operation each time the value set is used.  

If the expansion is too large (at the discretion of the server), the server MAY return
   an error (OperationOutcome with code too-costly). Clients can work through large flat
   expansions in a set of pages (partial views of the full expansion) instead of just getting
   the full expansion in a single exchange by using offset and count parameters, or use the
   count parameter to request a subset of the expansion for limited purposes. Servers are
   not obliged to support paging, but if they do, SHALL support both the offset and count
   parameters. Hierarchical expansions are not subject to paging and servers simply return
   the entire expansion.  

Different servers may return different results from expanding a value set for the following
   reasons:  

* The underlying code systems are different (e.g. different versions, possibly with different
   defined behavior) 

   for use for data entry or validation. 
If the operation is not called at the instance level, one of the in parameters
   url, context or valueSet must be provided.  An expanded value set will be returned,
   or an OperationOutcome with an error message."/> 
  <jurisdiction>     <coding>       <system value="http://unstats.un.org/unsd/methods/m49/m49.htm"/>       <code value="001"/>       <display value="World"/>     </coding>   </jurisdiction>   <affectsState value="false"/>   <code value="expand"/>   <comment value="The value set expansion returned by this query should be treated as a transient

   result that will change over time (whether it does or not depends on how the value
   set is specified), so applications should repeat the operation each time the value
   set is used.  
When available, ValueSet.status and ValueSet.version from the ValueSet resource
   instance which contains the definition SHALL be persisted to the ValueSet resource
   instance which contains the expansion.   
If the expansion is too large (at the discretion of the server), the server MAY
   return an error (OperationOutcome with code too-costly). Clients can work through
   large flat expansions in a set of pages (partial views of the full expansion) instead
   of just getting the full expansion in a single exchange by using offset and count
   parameters, or use the count parameter to request a subset of the expansion for
   limited purposes. Servers are not obliged to support paging, but if they do, SHALL
   support both the offset and count parameters. Hierarchical expansions are not subject
   to paging and servers simply return the entire expansion.  
Different servers may return different results from expanding a value set for the
   following reasons:  
* The underlying code systems are different (e.g. different versions, possibly
   with different defined behavior) 

* The server optimizes filter includes differently, such as sorting by code frequency
   
* Servers introduce arbitrary groups to assist a user to navigate the lists based either
   on extensions in the definition, or additional knowledge available to the server


   
* Servers introduce arbitrary groups to assist a user to navigate the lists based
   either on extensions in the definition, or additional knowledge available to the
   server

When a server cannot correctly expand a value set because it does not fully understand
   the code systems (e.g. it has the wrong version, or incomplete definitions) then it SHALL
   return an error. If the value set itself is unbounded due to the inclusion of post-coordinated
   value sets (e.g. SNOMED CT, UCUM), then the extension [http://hl7.org/fhir/StructureDefinition/value
  set-unclosed](extension-valueset-unclosed.html) can be used to indicate that the expansion
   is incomplete
  
  
  
  
  
    
    
    
    
    A canonical reference to a value set. The server must know the value set (e.g. it is defined
     explicitly in the server's value sets, or it is defined implicitly by some code system
     known to the server
    
  
  
    
    
    
    
    The value set is provided directly as part of the request. Servers may choose not to accept
     value sets in this fashion
    
  
  
    
    
    
    
    The identifier that is used to identify a specific version of the value set to be used
     when generating the expansion. 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.
    
  
  
    
    
    
    
    The context of the value set, so that the server can resolve this to a value set to expand.
     The recommended format for this URI is [Structure Definition URL]#[name or path into structure
     definition] e.g. http://hl7.org/fhir/StructureDefinition/observation-hspc-height-hspcheight#Observat
    ion.interpretation. Other forms may be used but are not defined. This form is only usable
     if the terminology server also has access to the conformance registry that the server
     is using, but can be used to delegate the mapping from an application context to a binding
     at run-time
    
  
  
    
    
    
    
    If a context is provided, a context direction may also be provided. Valid values are:
     

* 'incoming': the codes a client can use for PUT/POST operations,  and 
* 'outgoing', the codes a client might receive from the server.

The purpose is to inform the server whether to use the value set associated with the context
     for reading or writing purposes (note: for most elements, this is the same value set,
     but there are a few elements where the reading and writing value sets are different)
    
  
  
    
    
    
    
    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](terminologycapabilities.html)..expansion.t
    extFilter. Typical usage of this parameter includes functionality like:

   the code systems (e.g. it has the wrong version, or incomplete definitions) then
   it SHALL return an error. If the value set itself is unbounded due to the inclusion
   of post-coordinated value sets (e.g. SNOMED CT, UCUM), then the extension [http://hl7.org/fhi
  r/StructureDefinition/valueset-unclosed](http://hl7.org/fhir/extensions/StructureDefinition-va
  lueset-unclosed.html) can be used to indicate that the expansion is incomplete"/> 
  <resource value="ValueSet"/>   <system value="false"/>   <type value="true"/>   <instance value="true"/>   <parameter>     <name value="url"/>     <use value="in"/>     <scope value="type"/>     <min value="0"/>     <max value="1"/>     <documentation value="A canonical reference to a value set. The server must know the value set (e.g.

     it is defined explicitly in the server's value sets, or it is defined implicitly
     by some code system known to the server"/> 
    <type value="uri"/>   </parameter>   <parameter>     <name value="valueSet"/>     <use value="in"/>     <scope value="type"/>     <min value="0"/>     <max value="1"/>     <documentation value="The value set is provided directly as part of the request. Servers may choose not

     to accept value sets in this fashion"/> 
    <type value="ValueSet"/>   </parameter>   <parameter>     <name value="valueSetVersion"/>     <use value="in"/>     <scope value="type"/>     <min value="0"/>     <max value="1"/>     <documentation value="The identifier that is used to identify a specific version of the value set to

     be used when generating the expansion. 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."/> 
    <type value="string"/>   </parameter>   <parameter>     <name value="context"/>     <use value="in"/>     <min value="0"/>     <max value="1"/>     <documentation value="The context of the value set, so that the server can resolve this to a value set

     to expand. The recommended format for this URI is [Structure Definition URL]#[name
     or path into structure definition] e.g. http://hl7.org/fhir/StructureDefinition/observation-h
    spc-height-hspcheight#Observation.interpretation. Other forms may be used but are
     not defined. This form is only usable if the terminology server also has access
     to the conformance registry that the server is using, but can be used to delegate
     the mapping from an application context to a binding at run-time"/> 
    <type value="uri"/>   </parameter>   <parameter>     <name value="contextDirection"/>     <use value="in"/>     <min value="0"/>     <max value="1"/>     <documentation value="If a context is provided, a context direction may also be provided. Valid values

     are: 
* 'incoming': the codes a client can use for PUT/POST operations,  and 
* 'outgoing', the codes a client might receive from the server.
The purpose is to inform the server whether to use the value set associated with
     the context for reading or writing purposes (note: for most elements, this is the
     same value set, but there are a few elements where the reading and writing value
     sets are different)"/> 
    <type value="code"/>   </parameter>   <parameter>     <name value="filter"/>     <use value="in"/>     <min value="0"/>     <max value="1"/>     <documentation value="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](terminology
    capabilities.html)..expansion.textFilter. Typical usage of this parameter includes
     functionality like:
* using left matching e.g. &quot;acut ast&quot;
* allowing for wild cards such as %, &amp;, ?
* 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"/> 
    <type value="string"/>   </parameter>   <parameter>     <name value="date"/>     <use value="in"/>     <min value="0"/>     <max value="1"/>     <documentation value="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."/> 
    <type value="dateTime"/>   </parameter>   <parameter>     <name value="offset"/>     <use value="in"/>     <min value="0"/>     <max value="1"/>     <documentation value="Paging support - where to start if a subset is desired (default = 0). Offset is

     number of records (not number of pages)"/> 
    <type value="integer"/>   </parameter>   <parameter>     <name value="count"/>     <use value="in"/>     <min value="0"/>     <max value="1"/>     <documentation value="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"/> 
    <type value="integer"/>   </parameter>   <parameter>     <name value="includeDesignations"/>     <use value="in"/>     <min value="0"/>     <max value="1"/>     <documentation value="Controls whether concept designations are to be included or excluded in value set

     expansions"/> 
    <type value="boolean"/>   </parameter>   <parameter>     <name value="designation"/>     <use value="in"/>     <min value="0"/>     <max value="*"/>     <documentation value="A [token](search.html#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 the server discretion which designations
     to return"/> 
    <type value="string"/>   </parameter>   <parameter>     <name value="includeDefinition"/>     <use value="in"/>     <min value="0"/>     <max value="1"/>     <documentation value="Controls whether the value set definition is included or excluded in value set

     expansions"/> 
    <type value="boolean"/>   </parameter>   <parameter>     <name value="activeOnly"/>     <use value="in"/>     <min value="0"/>     <max value="1"/>     <documentation value="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"/> 
    <type value="boolean"/>   </parameter>   <parameter>     <name value="useSupplement"/>     <use value="in"/>     <min value="0"/>     <max value="*"/>     <documentation value="The supplement must be used when performing an expansion. Use of this parameter

     should result in $expand behaving the same way as if the supplements were included
     in the value set definition using the [http://hl7.org/fhir/StructureDefinition/valueset-suppl
    ement](http://hl7.org/fhir/extensions/StructureDefinition-valueset-supplement.html)"/> 
    <type value="canonical"/>   </parameter>   <parameter>     <name value="excludeNested"/>     <use value="in"/>     <min value="0"/>     <max value="1"/>     <documentation value="Controls whether or not the value set expansion may nest codes or not (i.e. ValueSet.expansio

    n.contains.contains). If excludeNested is set to true, the expansion MUST be flat
     (no nesting). If excludeNested is set to false (default),  however, nesting is
     possible but not required"/> 
    <type value="boolean"/>   </parameter>   <parameter>     <name value="excludeNotForUI"/>     <use value="in"/>     <min value="0"/>     <max value="1"/>     <documentation value="Controls whether or not the value set expansion might include

* using left matching e.g. &quot;acut ast&quot;
* allowing for wild cards such as %, &amp;, ?
* searching on definition as well as display(s)
* allowing for search conditions (and / or / exclusions)

* codes from the CodeSystem with a notSelectable property set to true as specified
     in [status](codesystem.html#status)] and in [Concept Properties](codesystem-concept-propertie
    s.html)
* nested contains with no code (see [Contains](valueset-definitions.html#ValueSet.expansion.c
    ontains.code))
* nested contains in the ValueSet with [abstract = true](valueset-definitions.html#ValueSet.e
    xpansion.contains.abstract)


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
    
  
  
    
    
    
    
    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.
    
  
  
    
    
    
    
    Paging support - where to start if a subset is desired (default = 0). Offset is number
     of records (not number of pages)
    
  
  
    
    
    
    
    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
    
  
  
    
    
    
    
    
    
  
  
    
    
    
    
    A [token](search.html#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 the server discretion which designations to return
    
  
  
    
    
    
    
    
    
  
  
    
    
    
    
    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
    
  
  
    
    
    
    
    Controls whether or not the value set expansion nests codes or not (i.e. ValueSet.expansion.contains
    .contains)
    
  
  
    
    
    
    
    Controls whether or not the value set expansion is assembled for a user interface use
     or not. Value sets intended for User Interface might include ['abstract' codes](codesystem.html#stat
    us) 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 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.
    
  
  
    
    
    
    
    
    
  
  
    
    
    
    

One purpose of such concepts is helping a user navigate through the list efficiently.
     If excludeNotForUI is set to true, the concepts as described above will be excluded
     from the expansion. If excludeNotForUI is set to false (default), all concepts
     as described above may be part of the expansion. In the FHIR Specification itself,
     the value set expansions are generated with excludeNotForUI = false, and the expansions
     used when generating schema / code etc., or performing validation, are all excludeNotForUI
     = true."/> 
    <type value="boolean"/>   </parameter>   <parameter>     <name value="excludePostCoordinated"/>     <use value="in"/>     <min value="0"/>     <max value="1"/>     <documentation value="Controls whether or not the value set expansion includes post coordinated codes"/>     <type value="boolean"/>   </parameter>   <parameter>     <name value="displayLanguage"/>     <use value="in"/>     <min value="0"/>     <max value="1"/> 
    <documentation value="Specifies the language to be used for description in the expansions i.e. the language
     to be used for ValueSet.expansion.contains.display
    
  
  
    
    
    
    
    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.5
    6
    
  
  
    
    
    
    
    Specifies a version to use for a system, if the value set does not specify which one to
     use. The format is the same as a canonical URL: [system]|[version] - e.g. http://loinc.org|2.56
    
  
  
    
    
    
    
    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
    
  
  
    
    
    
    
    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 result of the expansion. Servers generating expansions SHOULD ensure that all the
     parameters that affect the contents of the expansion are recorded in the ValueSet.expansion.paramete
    r list
    
  

     to be used for ValueSet.expansion.contains.display"/> 
    <type value="code"/>   </parameter>   <parameter>     <name value="property"/>     <use value="in"/>     <min value="0"/>     <max value="*"/>     <documentation value="A request to return a particular property in the expansion. The returned property

     may include subproperties. May be either a code from the code system definition
     (convenient) or a the formal URI that refers to the property. Note that property
     names can clash, so using a URI is recommended. The special value '*' means all
     properties and their sub-properties known to the server"/> 
    <type value="string"/>   </parameter>   <parameter>     <name value="exclude-system"/>     <use value="in"/>     <min value="0"/>     <max value="*"/>     <documentation value="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"/> 
    <type value="canonical"/>   </parameter>   <parameter>     <name value="system-version"/>     <use value="in"/>     <min value="0"/>     <max value="*"/>     <documentation value="Specifies a version to use for a system, if the value set does not specify which

     one to use. The format is the same as a canonical URL: [system]|[version] - e.g.
     http://loinc.org|2.56"/> 
    <type value="canonical"/>   </parameter>   <parameter>     <name value="check-system-version"/>     <use value="in"/>     <min value="0"/>     <max value="*"/>     <documentation value="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"/> 
    <type value="canonical"/>   </parameter>   <parameter>     <name value="force-system-version"/>     <use value="in"/>     <min value="0"/>     <max value="*"/>     <documentation value="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"/> 
    <type value="canonical"/>   </parameter>   <parameter>     <name value="return"/>     <use value="out"/>     <min value="1"/>     <max value="1"/>     <documentation value="The result of the expansion. Servers generating expansions SHOULD ensure that all

     the parameters that affect the contents of the expansion are recorded in the ValueSet.expansi
    on.parameter list"/> 
    <type value="ValueSet"/>   </parameter> 


</

OperationDefinition

>



Usage note: every effort has been made to ensure that the examples are correct and useful, but they are not a normative part of the specification.