IMPORTANT NOTE: Everything on this page is being reviewed and updated by the TSMG. If you have any questions about this page, please bring them to the TSMG or the TSMG Artefact Versioning Policy Task Force group.
This page outlines the approach for versioning in UTG as approved by the Vocabulary Working group. This page only includes APPROVED versioning requirements. Please see UTG Versioning Refinement (Not Yet Approved) for requirements that still require approval. A versioning approach is needed to unify how versions are assigned and maintained going forward in UTG. Currently V2, V3 content etc have used different approaches and syntax. The versioning should provide information to inform users to the severity of the change(s) and if they need to update their content.
The UTG Versioning option detailed below (major/minor/patch) was proposed and approved by the Vocabulary WG (2019-10-21 Vocab WG Call Agenda/Minutes)
SCOPE: "Versioning" here refers to the versioning of UTG Resources (Code System, Value Set, Naming System and Concept Map). Thus, any reference to backwards compatibility is in reference to the content, and is not in reference to any API.
To see a summary of all options considered for versioning, please go to UTG Versioning Planning and Discussions.
Overall Approach
The approved UTG versioning approach is to use three integers to represent the Major.Minor.Patch versioning (such as 2.0.0).
- When a Minor number is incremented, the Patch number is reset to 0.
- When a Major number is incremented, the Minor number and the Patch number are both set to 0
- Newly created objects will have their initial version set to 1.0.0 upon publishing
The version of each object will be maintained in <version>.
The sections below indicate what changes qualify as a major, minor, or patch. Generally, major changes are not backwards compatible, minor changes are backwards compatible, and patches are technical corrections that are backwards compatible.
Code System Versioning
This table outlines the type of change by Code System resource. Full notes can be found below the table.
Element Name | Change Type |
---|---|
CodeSystem.Url | New Code System (for HL7 created CS; externals have different rules; see HTA/Vocab guidance on changing URLs for external code systems) |
CodeSystem.Identifier | New Code System (if an OID or V2 mnemonic; externals have different rules see above) |
CodeSystem.Version | N/A |
CodeSystem.Name | Major |
CodeSystem.Title | Minor |
CodeSystem.Status | Major |
CodeSystem.Experimental | Not Currently In Use for UTG |
CodeSystem.Date | Not Currently In Use for UTG |
CodeSystem.Publisher | Minor |
CodeSystem.Contact | Minor |
CodeSystem.Description | Major unless only change is improved clarity or perform editorial corrections. |
CodeSystem.UseContext | Not Currently In Use for UTG |
CodeSystem.Jurisdiction | Not Currently In Use for UTG |
CodeSystem.Purpose | Not Currently In Use for UTG |
CodeSystem.Copyright | Minor, unless change from unencumbered to encumbered. |
CodeSystem.CaseSensitive | Not Widely Used in UTG (only two objects) |
CodeSystem.ValueSet | Pro-forma in UTG, Cannot Change Value |
CodeSystem.HierarchyMeaning | Major |
CodeSystem.Compositional | Not Currently In Use for UTG |
CodeSystem.VersionNeeded | Not Currently In Use for UTG - but under consideration for ballot-bound code systems |
CodeSystem.Content | N/A (header element) |
CodeSystem.Supplements | Not Currently In Use for UTG |
CodeSystem.Count | Not Currently In Use for UTG |
CodeSystem.Filter (and sub-elements) | Not Currently In Use for UTG |
CodeSystem.Property (including CodeSystem.Concept.Property.Code and .Value) | Major for Concept Status and defining property changes (like isSelectable), status changes to/from Active to Retired, Active→Backwards Compatible, addition of language translations of the text bits (print names, descriptions, etc.). Minor for non-defining property changes (like editorial property value changes). Not sure about Active→Deprecated? or Deprecated→Backward Compatible)? (probably minor) |
CodeSystem.Concept (and all sub-elements) | All changes to concepts by default are an increment of the major number. Any proposed change could include a proposal to change the minor number instead if the change is asserted to be minor in the change proposal. |
concept.code | Code never changes so N/A |
concept.display | Major. Typos are minor. |
concept.definition | Major. Typos are minor. |
concept.designation. | Major |
concept.property | Major. Minor for non-defining property changes (like editorial property value changes). |
Are there special or different rules about certain 'special' code systems, such as UTG concept properties, or concept domains, or V2 Tables? | Yes, handled on a case by case basis. |
- The version for the code system objects will be in <version>
- Note this is for internal code systems, ie those owned, authored, maintained and published by HL7 only. It does include the HL7 CS stubs for external 'hooks'.
- Based on discussions in conference calls and with Lloyd on impact of versioning number assignment for initial versions, we will do the following for Code Systems
- For all v3 code systems, the initial version will be 2.0.0
- At some point in the future, if needed we will figure out how to mine the version information out of the last modified change tracker in the v3 maintenance mdb file, but will NOT be done unless needed
- For all v2 code systems, the initial version will be 2.n.0, where 'n' is the integer of the code system version from the v2 mdb file.
- For all FHIR code systems, the initial version will be 4.2.0. (may be done already as of 1/6) Note this is the CI version in FHIR as of 2/21/2020; we need to discuss in Sydney what we should really use as a starting version for the UTG FHIR code systems.
- Not yet decided what will happen when FHIR R5 is released
- Not sure yet if we need to do something different for the normative code systems in R3 and R4
- Brings up the older versions question for the FHIR code systems
- For all v3 code systems, the initial version will be 2.0.0
- For Code System updates:
Major = Adding, Deleting, and any concept Status changes (to/from Active to Retired, Active→Backwards Compatible, or Deprecated→Backward Compatible) AND any defining Concept changes (hierarchical changes, defining relationships), changes to properties that are defining (to be listed - such as isSelectable), or changes to <name>
Minor = non-defining property changes (like editorial property value changes).
Technical Correction = Encoding changes, typos
Noting anything beyond Major would be a different CodeSystem (such as changes to OID and Defining URI)
Everything here applies to Supplements and Fragments as well
Value Set Versioning
This table outlines the type of change by Value Set resource. Full notes can be found below the table.
Resource Name | Change Type |
RevisionHistory | Does not trigger change |
ValueSetDefinitionNaming.Name | Minor |
ValueSetDefinitionNaming.NameLanguage | Minor |
ValueSetDefinitionNaming.PreferredNameIndicator | Minor |
ValueSetDefinition.ValueSetIdentifier | Change = New value set Addition of secondary = Minor |
ValueSetDefinition.Scope | Change = New value set Editorial change = Minor |
ValueSetDefinition.Immutable | Change = New value set |
ValueSetDefinition.DefinitionUrl | Minor (check with team) |
ValueSetDefinition.IntellectualPropertyInformation | Major Editorial change = Minor |
ValueSetDefinition.Experimental | Major Editorial change = Minor |
ValueSetDefinition.SourceReference | Major Editorial change = Minor |
ValueSetDefinition.Keyword | Minor (check with team) |
ValueSetDefinition.Use | Major (check with team) |
ValueSetDefinitionVersion.Comments | Minor |
ValueSetDefinitionVersion.VersionIdentifier | Change = New value set |
ValueSetDefinitionVersion.Activity Status | Major |
ValueSetDefinitionVersion.ActivityStatusDate | Major |
ValueSetDefinitionVersion.Author | Minor |
ValueSetDefinitionVersion.Steward | Major |
ValueSetDefinitionVersion.TrustedValueSetExpansionSource | Major |
ValueSetDefinitionVersion.Type | Major |
ValueSetDefinitionVersion.WorkflowStatus | Major |
ContentLogicalDefinition.LockedDate | Major |
ContentLogicalDefinition.ActiveOnly | Major |
ContentLogicalDefinition.CLDSyntaxReference | Major |
ContentLogicalDefinition.Content Expression | Scope change = New value set Change to code system basis = New value set (check with team) Modified to improve efficiency of processing but intent unchanged = Major |
ContentLogicalDefinition.NonComputableSyntaxExpression | Change = New value set or Major (depending upon interpretation) |
- The version for the value set objects will be in <version>
- For value sets, we must evaluate all of the attributes defined inn VSD to determine which ones will trigger what kind of version change, ie new object, increment of major number, increment of minor number.
- VSD attribute list:
- All Revision History attributes - updates to these are only from updates to other elements, so do not trigger and version ID things by themselves
- Creation Information - only set once when created with version 1.0.0
- Value Set Definition Naming
- Value Set Definition Naming.Name - update triggers major number increment; new entry for an additional name such as in a different language, triggers minor number increment
- Value Set Definition Naming.Name Language - update triggers minor number increment
- Value Set Definition Naming.Preferred Name Indicator - update triggers minor number increment
- Value Set Definition
- Vaue Set Identifier - change to the identifier triggers new value set; addition of one or more secondary identifiers with no change to primary triggers minor number increment
- Scope - change to the scope triggers new value set, unless just editorial text change to scope text, in which case it triggers minor number increment
- Immutable - change to the flag triggers new value set
- Definition URL - change triggers minor number increment (verify with team)
- Intellectual Property Information - change triggers major number increment unless change is spelling or other editorial corrections in which case it is minor number increment
- Experimental - change to flag triggers major number increment
- Source Reference - change triggers major number increment unless editorial in nature which triggers minor number increment
- Keyword - change triggers minor number increment (verify with team)
- Use - change triggers major number increment (verify with team)
- Value Set Version
- Comments - change or additonal comments trigger minor number increment
- Version Identifier - change triggers new value set
- Activity Status - change triggers major number increment
- Activity Status Date - change triggers major number increment
- Author - change triggers minor number increment
- Steward - change triggers major number increment
- Trusted Value Set Expansion Source - change triggers major number increment
- Type - change triggers major number increment
- Workflow Status - change triggers major number increment
- Content Logical Definition
- Locked Date - change triggers major number increment
- ActiveOnly - change triggers major number increment
- CLD Syntax Reference - change triggers major number increment
- Content Expression - if change supports scope change and the coverage or granularity of the value set is changed, then it is a new value set. If the syntax is modified to improve efficiency of processing or simply the syntax but the intent is unchanged in terms of coverage and granularity then it is a major number increment. Changes to code system basis is a new value set (verify with team).
- Non-computable syntax expression - change is either a new value set or a major change depending upon the interpretation (verify with team)
- Based on discussions in conference calls and with Lloyd on impact of versioning number assignment for initial versions, we will do the following for Value Sets
- All V3 value set definitions (the VS resources we are generating) will be set to version 2.0.0
- All V2 value set definitions will be set to 2.0.0
Naming System Versioning
- Naming System resource instances will be set to 2.0.0 initially
Release 2 Versioning Additions
- HL7 defined versions are to be stored using provenance
- Version for the HL7 V3 code systems imported from the coremif
- Version for the HL7 V3 value sets imported from the coremif
- Version for the naming systems imported from the coremif
- Version for the HL7 code systems imported from the v2 publishing database
- Version for the HL7 value sets imported from the v2 publishing database
- Need to consider Concept Map versioning once content has been approved for/imported to UTG