Versions Compared


  • This line was added.
  • This line was removed.
  • Formatting was changed.


VSD ElementFHIR resource/extension urlCardinality change neededNotesFHIR Action Needed?Action

Value Set Identifier


url or identifierNoIn VSD, the value set identifer is the "globally unique string that characterizes the Value Set Definition". In FHIR the valueset.uri is the "Canonical identifier for this value set, represented as a URI (globally unique)". In FHIR, valueset = the defintion, expansion and metadata.Yes

1) Update VSD to adopt the FHIR URI definition - "A globally unique string for this value set, when it is referenced in a specification, model, design or an instance". 
2) In the description, include statement that this is intended to be the canonical identifier

VSD Changes Identified as Part of VSD-P

To Do: confirm FHIR definition for valueSet.identifier is correct.



Value Set Scope


purpose or description or useContextNoNeither purpose, useContext or any other existing FHIR element represents this VSD definitional element. Yes

1. Add a FHIR JIRA ticket (FHIR-25273) to summarize the gap. Options for resolution: update purpose? Update description and move what is in description currently into purpose?

Note that FHIR-24085 is related.

2. Add a FHIR JIRA ticket (FHIR-25272) to add a new complex element valueSet.scope with sub-elements named clinicalFocus, inclusionCriteria, exclusionCriteria and modelContext. All data types = string.

Definitions from VSD: 

Scope: Description of the semantic space the Value Set Expansion is intended to cover.

Focus: The general focus of the Value Set as it relates to the intended semantic space. This can be the information about clinical relevancy or the statement about the general focus of the Value Set, such as a description of types of messages, payment options, geographic locations, etc.

Model Context: A statement that describes how this Value Set is to be used in an artifact.

Inclusion Criteria: Criteria describing what concepts or codes should be included and why.

Exclusion Criteria: Criteria describing what concepts or codes should be excluded and why.

Still to be decided: core element or extension. This is a required VSD element. 

4Value Set ImmutableimmutableYesVSD requires the immutable element, FHIR does not, but that's OKNoIn the profile, this needs to be required



name or title or valueset-otherNameYes (FHIR is 0...1, VSD is 1...1)In FHIR, supports both a human readable (title) and computable (name) string. Though VSD does not include a computable string for this purpose, that's OK. Would be ideal if the preferred is the FHIR.nameYes

VSD Profile - Note for that fhir.valueset.title is the preferred corresponding name/match to the However, if a language or a preferred indicator is present, then you must use the valuset-otherTitle extension. 

FHIR - the following need to be entered into a ticket:

1) update name of valuset-otherName to otherTitle, as its definition is currently inconsistent with the use of Name (computer friendly) vs Title (Human friendly) within FHIR

2) Update attribute "name" to "title"

3) Add attribute "titleLanguage" to support vsd.preferrednameindicator


gap, but okYesSee item 6
gap, but okYesSee item 6
9Definition URLvalueset-authoritativeSource
VSD definition for this: "a web pointer to where the Value Set Definition may be located." So this is simply a location to find the value set definition and is not an identifier.
This has been resolved in FHIR by the addition of this resource:
10Intellectual Property Informationcopyright
12Source Referencevalueset-sourceReference
Added as an extension in FHIR:
FHIR Extension:
14UseuseContext or valueset-usage
UseContext requires a code-value pair with coddle codable concepts, usage is all text.Yes
15Value Set Definition Version

16ValueSetDefinitionVersion.IdentifierversionYes, requiredThe only version in valueSet is the overall version. This could change based on metadata or compose changes. When an expansion is the only included element in a resource, this is the version used for the expand.NoDiscussed on Jan 14, 2020 - version is critical to understanding a value set definition or expansion.  See notes on ValueSetDefinition.activityStatus. Consider changing cardinality to 1.1

18ValueSetDefinitionVersion.Content Logical Definitioncompose


20ValueSetDefinitionVersion.Activity StatusValueSet.status

Clarification needed in FHIR. 
1) ValueSet.status is the status of the entire valueset resource other than the expansion. This aligns with VSD using the word "definition" to mean the CLD/compose PLUS all the other non-expansion metadata. A valueset expansion is STATELESS.
2) Add an invariant to say that the valueset.status in a resource that is only an expansion SHALL be the valueset.status of the valueset resource when the expansion was created, so it can be any valid status value. 


1) Has been addressed in the defintion of valuset.expansion with the inclusion of an explicit statement around the stateless nature of expansions

2) Upon review on 1/14/2020, group does not believe an invariant is required. Rather, an update to ticket FHIR-22664 (previously entered to address the issue with naked expansions) to state that, if a value set is to be persisted, the instance information recieved on a value set resource must be persisted by the terminology service. In other words, both valueset.status and valueset.version SHALL be populated with the instance information from the resource used for the expansion. See verbiage in as an example. 

21ValueSetDefinitionVersion.Activity Status Datevalueset-activityStatusDate
current extensions only address one activity status which means a new resource instance for every status update.<-Agree with ?
22ValueSetDefinitionVersion.Workflow Statusvalueset-workflowStatus
VSD element has broader scope in that it applies to any activity state, not just 'draft' (FHIR 'preliminary') as FHIR does.  extension modification needed; needs change requestmake definition of extension and how used more robust.  Inquire in Baltimore.
23ValueSetDefinitionVersion.Stewardvalueset-steward,  publisher + contact

extension was added as an extension for UTG, 0-* ContactDetail,

Publisher is a string that is intended to be used along with contact where the Publisher is only a string name but actual information for contacting is in contact.

DO we Need a tracker to add text explaining that in FHIR the steward and publisher + contact are assumed to be the same, but if they are different then the steward extension (see above) should be used. 
valueset-author is 0-* ContactDetail 

In FHIR this reflects the jurisdiction where the value set author expects that the value set is intended to be used.  It is not the same as the V3 realm that is part of value set binding in V3.




29ValueSetDefinitionVersion.Trusted Value Set Expansion Sourcevalueset-trusted-expansion
This extension should only be used if the "authoritative source" (valueset-authoritativeSource extension) does not have a FHIR service which is capable of generating a valid FHIR expansion.Add a tracker to add text to the valueset-authoritativeSource extension to state that the designated "authoritative source" is normally expected to be able to generate a valid expansion of the value set, and if for some reason it cannot then the valueset-trusted-expansion should be used.

Change the valueset-trusted-expansion text to:
If the designated "authoritative source" (as specified in the valueset-authoritativeSource extension, if present) is unable to provide a valid expansion, this extension indicates an alternate authoritative source where the value set expansion may be obtained.

Note: this topic is related to the discussion in the August 29, 2019 vocab call. 

authoritative source:  #23784

trusted expansion: #23785

30Derived Elements

31ValueSetDefinitionVersion.Code System Sourcevalueset.compose.include.system
Datatype uri

32Creation Information

33ValueSetDefinitionVersion.Creation DateValueSet.dategap?There is no equivalent currently in FHIR (valueset-effectiveDate is not the same thing). It will be one of the .dates for the various resource "copies" stored.

gap?There is no equivalent currently in FHIR (valueset-author is not the same thing). At best this would require identifying a specific stored resource copy that is "the creation" version.

35Revision History
gapThis might be via linking in Provenance

36ValueSetDefinitionVersion.Revision Date
gapThere is no equivalent currently in FHIR (meta is not sufficient).

37ValueSetDefinitionVersion.Tracking Identifier
gapThere is no equivalent currently in FHIR.

38ValueSetDefinitionVersion.Revised By
gapThere is no equivalent currently in FHIR.

39ValueSetDefinitionVersion.Change Notes
gapThere is no equivalent currently in FHIR.

40ValueSetDefinitionVersion.Revision History - derived
gapThere is no equivalent currently in FHIR.

41ValueSetDefinitionVersion.Revision Version Identifier
gapThere is no equivalent currently in FHIR (meta is not sufficient).

42Content Logical Definition - Definitional?

Ended here on 20180911. Note this is not an element but is a header.

the text in the FHIR defintion is an explanatory usage note, not a definition; must be fixednew tracker item to update the FHIR definiton definition of the element to match the VSD definition tracker 
the semantic matches OK, but note that the flag states are reversed ie VSD.ActiveOnly=TRUE is the same as ValueSet.compose.inactive=FALSE.No change neededShould we add text to implementation notes?


(We are not sure if this is the correct syntax for this)

FHIR does not support multiple defining syntaxes in ValueSet.compose.  

When Valueset.compose is not used, then when the expression is computable - has a syntax - that expression is found in valueset-expression which uses the datatype Expression. Within that datatype the element language would be used to represent the syntax. 

The issue is that element is bound Extensable to ExpressionLanguage which means that whatever syntax is used must be registered at .

This restriction/expectation will be discussed at next SNOMED on FHIR Meeting.

Robert Hausam Was this ever discussed at a SNOMED on FHIR meeting?
46Content Expressions

47Syntax-based Content ExpressionsValueSet.extension(

This uses the valueset-expression extension as noted above. When this extension is used and the syntax is intended to be computable, ValueSet.compose should NOT exist (although technically it is allowed.) Use the rules-text extension for a non-computable description.


The expression may be a reference or the actual expression, and is expected to be a computable format.

(note: Nov 21, 2019 WG conf call reviewed cpg-expressionvalueset)

See action for row 50
48Non-computable Content ExpressionValueSet.extension(

Use the rules-text extension for a non-computable description.

(note: Nov 21, 2019 WG conf call reviewed cpg-cachedvalueset - definition that act like expansion because of a HAPI and other basic terminology server limitation)  

49Content Defining Element Types



There are two instances of DrawnFromCodeSystem.  This instance corresponds with in VSD.

compose.include.system is equivalent to VSD DrawnFromCodeSystem. Only change is to review/remove valueset-system.


Removing the the valueset-system extension to ValueSet.compose.include.system.  This extension requires review, as it seems to be redundant and doesn't provide any additional semantics.



VSD separates out valueset and code based valuesets, the compose.include is equivalent as it can apply to both

VSD separates out valueset and code based valuesets, the compose.include is equivalent as it can apply to both

54ContentSystemElement.CodeBasedContent.codecompose.include.concept.code or compose.include.filter.value

VSD defines the CodeBasedContent.code to be the code included on its own or it may define a header code. In FHIR, the former is equivalent to compose.include.concept.code and the latter is equivalent to compose.include.filter.value in combination of the compose.include.filter.op = is-a and = concept

This is the collection of lines 56-58
Similar to the above description, for IncludeRelatedCodes, the FHIR equivalent is compose.include.filter where value = code, op is = and property = relationshipName


The operation is equivalent to compose.include.filter.op. However it has a required binding to the FilterOperator value set. When compared, we have the following:

VSD TransitiveClosure = descendant-of

VSD DirectRelationsOnly = GAP

VSD TransitiveClosureLeaves = GAP

Also, it should be noted in the result VSD profile that the VSD considers the above an "exhaustive list for this item" and therefore the FilterOperator valueset will need to be constrained, assuming new values are added to cover the gaps above

Yessee item 58
58ContentSystemElement.CodeBasedContent.IncludeRelatedCodes.IncludeHeadCodeif true: compose.include.filter.op = is-a

As noted above, there is a gap in the FilterOperator valueset. There is not boolean operation in FHIR for inclusion or exclusion of head codes. When combined with above, we have the following:

VSD TransitiveClosure w/head code (FALSE) = descendant-of

VSD TransitiveClosure w/head code (TRUE) = is-a

VSD DirectRelationsOnly w/head code (FALSE) = GAP

VSD DirectRelationsOnly w/head code (TRUE) = GAP

VSD TransitiveClosureLeaves w/head code (FALSE) = GAP

VSD TransitiveClosureLeaves w/head code (TRUE) = GAP

YesgForge ticket requesting additions to the FilterOperator valueset to cover the gaps noted.  #23783
This is the collection of lines 60-63

This is the group of possibly repeating elements, See lines 61-63

In this group of elements, only this one ( is required (if the group exists).

compose. = Name' 

Per VSD, either Value or Expression must be present

If Value is provided and expression not: 

  • compose.include.filter.op = '='
  • compose.include.filter.value = Value

If Expression is provided and Value is not

  • compose.include.filter.op = 'regex'
  • compose.include.filter.value = Expression

see line 61

see line 61


This is the group of possibly repeating elements,

Per VSD, either RelationshipType = string uniquely identifying the relationship being used to filter the content.

In FHIR: = RelationshipType

The Data Type in VSD = STR while FHIR's Data Type = code. However code includes "a set of constrained strings", in which the relationship types are constrained by the code system. 

Where FHIR is used, to determine absence or presence: = '='

Further, where FHIR is used, to specify the presence or absence or of a specific target of the relationship: =  a code defined by the code system

For example, to find all concepts in Code System A with the SNOMED CT 'laterality' relationship to the SNOMED CT Concept 'Left', the following combination would be used: = '272741003' = '=' = '7771000'


For WGM - discuss use of Regex to fill this gap. 

Decision 9/16/2019: add TRACKER extensions to cover minimum and maximum multiplicity


Yes. FHIRPath? Issues w/An extension might be more straight forward to use rather than requiring implementers intepret regex

See note above


compose.include.filter.op = in

compose.include.filter.value =

comma separated list of concept identifiers (this should be clearly stated)

9/16/2019 Discussion: change value to a choice element to allow a value set uri?  Cannot change the normative resource.  Implementers cannot set value = value set uri as the value of "in" is documented as being a comma separated list.  An extension isn't feasible as it would be a sibling of filter. 


This is the group of possibly repeating elements,

9/16/2019 Discussed: value-set.expression extension. Rejected. This extension is at the resource level. 

There is an extensible value set called "Expression Language". 

We have the construct to represent what we need - through the value-set.expression extension.  The extension provides an alternative to compose. 


See above - supported in the value-set.expression extension. 

TRACKER:  change the language to allow one or the other, compose or value-set.expression extension. 

Robert Hausam  Add action item: Investigate creating an invariant to force what is described above. 


This is the group of possibly repeating elements, 

Need to look at this on 10/8, why was it skipped?Should this be 'No'?
Because this is now a canonical data type, version is supported.

75ContentSystemElement.ValueSetReference.NameValueSet.title for the compose.include.valueSet


Reminder to attendees:  valueSet.title is the human readable "name", not ""

Tracker:  4 options discussed

  1. The referenced value set may have an optional title. Depend on the referenced value set to have a name, (extension = otherName exists with context of use = root of value set - otherName definition does not align with or title), (con: cannot see the name of the value set that is included) or
  2. Add a 2 component extension to support pairing the value set reference ID with a value set title. Sibling to ValueSet.reference (compose.include.valueSet)
  3. Add best practice recommendations 
  4. Value ValueSet.description with information about the value set itself, and any included value sets.


Question: is the goal of this project to create a profile that supports all of VSD? Yes. 

Yes - add text in the profile indicating how ValueSet.description should be used. 

Quick review, group thinks the spirit of these CombinedContent items are captures through the compose.includes and compose.excludes when combined with $expansion operationNo

See comment on line 76 AND

compose.include.valueset in FHIR states "If multiple value sets are specified this includes the union of the contents of all of the referenced value sets."


Per the definition of compose.include.valueset, multiple valuesets listed in an include.valueset reference results in a UNION of members. However, composition rules here, indicate that within compose.include, multiple criterion result in the intersection of the criterion...which appears to be contradictory. Thus, the group is unaware of how existing elements can be used to result in the intersection of two references value sets. 

Update:10/27/19: Grahame has confirmed that the definition of compose.include.valueset appears to be erroneous, when it was moved under compose.include (previously it was under compose), the definition was supposed to be updated FROM:

"If multiple value sets are specified this includes the union of the contents of all of the referenced value sets."


"If multiple value sets are specified this includes the intersection of the contents of all of the referenced value sets."


Tracker should be opened to state the issue.

Grahame has indicated that there are two possible paths

1) Correct the error in R5

2) Update the valueset-filter-operator valueset (bound to compose.include.filter.op) to include an "in valueset" option.

General initial survey of implementers (Peter and Michael) is that #1 is optimal.

Additionally, looking at VSAC, who is using FHIR 3.0.1) to determine if correcting the include.valuset definition would have an impact, it appears that the Grouping valuesets (example of union) use multiple include statements for union (e.g. here), not multiple include..valueset instances to perform a union. Thus, would not be impacted by the proposed change.

As Valueset is normative, Vocab would need to query "all" implementers and get agreement that the definition was wrong to begin with and should be fixed.

If that were done, Grahame has indicated, as product manager, he would accept the requested change for inclusion into R5.  


Tracker to be added: (CC) (minutes updated)

  1. Fix the definition of compose.include.valueset to reference intersection, not union.
  2. Add guidance on how to accomplish union - following the method used by VSAC


See comment on line 76


Set of parameters that lay out a series of constraints relative to Code Systems


This is the group of possibly repeating elements, 


VSD allows for the specification of versionlockeddate to a particular code system. FHIR only allows for compose.lockeddate to be set for the entire compose statement, i.e., FHIR allows you to specify compose.include.system and compose.include.version, it does not allow you to pass a date per code systemNo tracker item needed, consider inclusion in future documentation regarding alignment of VSD with FHIR
VSD allows for the specification of versionlockeddate to a particular code system. FHIR only allows for compose.lockeddate to be set for the entire compose statement, i.e., FHIR allows you to specify compose.include.system and compose.include.version, it does not allow you to pass a date per code systemNo tracker item needed, consider inclusion in future documentation regarding alignment of VSD with FHIR
85DrawnFromCodeSystem.DescriptiveNameextension valueset-systemName
present as an extensionNo

Not present, only extension avaialble is valueset-supplement, which indicates when a expansion is dependent upon a supplement, no current way to indicate when a partition is required. Not deemed to require further actionNo
87DrawnFromCodeSystem.UsedCodeSystemSupplementextension valuset-supplement

To do this, you would pass a name = AllowedRepresentation (or the codesystem defined name for the representation)  for then value = as defined by the codesystem, the representation you intend to retrieveNo


Does not appear possible to restrict qualifiers. Is that correct?Yesenter tracker item to pose the question and confirm if there is a way to restrict qualifiers





97CodeSystemPartitions and Supplements??