Basic FHIR Terminology Services - Home - FHIR DevDays · 2019-03-19 · Terminology: why...

43
Basic FHIR Terminology Services AUSTRALIAN E-HEALTH RESEARCH CENTRE, HEALTH & BIOSECURITY Jim Steel, PhD| Senior Software Engineer 16 November 2017 FHIR® is the registered trademark of HL7 and is used with the permission of HL7. The Flame Design mark is the registered trademark of HL7 and is used with the permission of HL7.

Transcript of Basic FHIR Terminology Services - Home - FHIR DevDays · 2019-03-19 · Terminology: why...

Page 1: Basic FHIR Terminology Services - Home - FHIR DevDays · 2019-03-19 · Terminology: why •Terminology is the basis of shared meaning between different systems •StructureDefinitions

Basic FHIR Terminology Services

AUSTRALIAN E-HEALTH RESEARCH CENTRE HEALTH amp BIOSECURITY

Jim Steel PhD| Senior Software Engineer16 November 2017

FHIRreg is the registered trademark of HL7 and is used with the permission of HL7 The Flame Design mark is the registered trademark of HL7 and is used with the permission of HL7

Terminology Basicsbull Why terminology Why a terminology servicebull Brief FHIR recap SCRUD Operationsbull Terminology Resources amp Operations

bull CodeSystem structure $lookup $expandbull ValueSet structure $expand $validate-codebull Standardised terminologies (brief overview)bull ConceptMap structure $translate

bull Tips amp Tricksbull Terminology in search

bull Codeabovebelow codeinnot-in

bull Use Cases

Basic Terminology Services | Jim Steel3 |

Terminology whybull Terminology is the basis of shared meaning between different

systemsbull StructureDefinitions are the bones but terminology defines what goes on

them

bull Terminology (especially ValueSets) is a very important part of defining FHIR profiles

bull Especially in a large integrated system having a single reference for terminology is very valuable for interoperability

bull Externalized terminology makes it much easier to update terminology when it is updatedchanges

Basic Terminology Services | Jim Steel4 |

FHIR Basicsbull SCRUD

bull Search GET ResourcesearchParams or POST Resource_searchbull Create POST Resourcebull Read GET Resourceid (or Resourceid_historyn for VRead)bull Update PUT Resourceidbull Delete DELETE Resourceid

bull Operationsbull GETPOST $operation or Resource$operation or Resourceid$operation

ndash Any parameters go in a lsquoParametersrsquo resource in the request bodybull GET only for idempotent (all can POST)

ndash Can be cached using HTTP cachingbull Servertypeinstance-level depending on the operation

Basic Terminology Services | Jim Steel5 |

CodeSystembull Collection of terms

bull Identified by a URI (and version)

bull Typically in some kind of hierarchy

bull Properties filters

bull Can be infinite

bull Standardised (SNOMED-CT LOINC RxNorm ICD etc) or custom

Basic Terminology Services | Jim Steel6 |

CodeSystem Structure

Basic Terminology Services | Jim Steel7 |

CodeSystem Structure (cont)

Basic Terminology Services | Jim Steel8 |

CodeSystem Structure (cont)

Basic Terminology Services | Jim Steel9 |

CodeSystem example

Basic Terminology Services | Jim Steel10 |

Basic Terminology Services | Jim Steel11 |

CodeSystem example (cont)

Basic Terminology Services | Jim Steel12 |

CodeSystem example (cont)

CodeSystem operations $lookupbull Type level only idempotent (GETPOST CodeSystem$lookup)

bull Retrieve details about a code (as codesystemversion or Coding)

bull Can be used to determine whether a code exists in the CodeSystem

bull Can be used to retrieve specificall propertiesdesignations

Basic Terminology Services | Jim Steel13 |

$lookup exampleGET httpsontoservercsiroaustu3-latestCodeSystem$lookupsystem=httpcsiroaucsau-jurisdictionsampcode=WAampproperty=displayampproperty=capital

Basic Terminology Services | Jim Steel14 |

CodeSystem operations $subsumesbull Type or instance level idempotent

bull GET CodeSystemid$subsumes

bull POST CodeSystem$subsumes (must have lsquosystemrsquo parameter)

bull Check what (if any) subsumption relationship exists between two codesbull codeA and codeB as codesystemversion or codingA and codingB

bull Result will be lsquoequivalentrsquo lsquosubsumesrsquo lsquosubsumed_byrsquo lsquonot_subsumedrsquo

bull Depends on the code systemrsquos lsquohierarchyMeaningrsquo

bull Can also use $closure see the advanced talk

Basic Terminology Services | Jim Steel15 |

$subsumes exampleGET httpsontoservercsiroaustu3-latestCodeSystem$subsumessystem=httpcsiroaucsau-jurisdictionsampcodeA=AUampcodeB=QLD

Basic Terminology Services | Jim Steel16 |

ValueSetbull A set of codes drawn from one or more CodeSystems

bull Can be used to define a set of codes (rsquocomposersquo)

bull Can be used to represent the result of an expansion of a ValueSet(lsquoexpansionrsquo)

Basic Terminology Services | Jim Steel17 |

ValueSet Structure

Basic Terminology Services | Jim Steel18 |

ValueSet Structure (cont)

Basic Terminology Services | Jim Steel19 |

ValueSet Structure (cont)

Basic Terminology Services | Jim Steel20 |

ValueSet example definition

Basic Terminology Services | Jim Steel21 |

Valueset operations $expandbull Type or instance level idempotent

bull GETPOST ValueSet$expand (must have rsquourlrsquo or lsquovalueSetrsquo)

bull GETPOST ValueSetid$expand

bull Retrieve the expansion of the ValueSet subject to a number of parametersbull Result is a ValueSet with an lsquoexpansionrsquo element

bull Parameters include filter count offset includeDesignations includeDefinition activeOnly excludeNested excludeNotForUI excludePostCoordinated displayLanguage limitedExpansion profile

bull This is the mainbest way to search for a code

Basic Terminology Services | Jim Steel22 |

$expand examplePOST httpsontoservercsiroaustu3-latestValueSet$expand (with the resource in the body)

Basic Terminology Services | Jim Steel23 |

ValueSet operations $validate-codebull Type or instance level idempotent

bull GETPOST ValueSet$validate-code (must have rsquourlrsquo or lsquovalueSetrsquo)

bull GETPOST ValueSetid$validate-code

bull Validate a code (and display text) against a ValueSetbull Determine whether the code is included in the ValueSet

bull (optionally) Determine whether the provided display text is the correct display text for the code

bull Code as codesystemversion or coding or CodeableConcept (multiple)

bull This is the main method for validating coded data

Basic Terminology Services | Jim Steel24 |

$validate-code examplePOST httpsontoservercsiroaustu3-latestValueSet$validate-code

Basic Terminology Services | Jim Steel25 |

Basic Terminology Services | Jim Steel26 |

$validate-code example (cont)

Well-known Terminologiesbull Terminologies such as SNOMED-CT LOINC RxNorm have specific

mappings into FHIR terminology resources with standardisedCodeSystemsbull Standard CodeSystem filtersproperties

bull Implicit ValueSets

bull Implicit ConceptMaps

Basic Terminology Services | Jim Steel27 |

Well-known Terminologies SNOMED-CTbull httpsnomedinfosct([edition](version[date]))bull Filters by subsumption by refset by ECL expressionbull Implicit ValueSets

bull All codes httpsnomedinfosctfhir_vs

bull By subsumption httpsnomedinfosctfhir_vs=isa404684003

bull List of refsets httpsnomedinfosctfhir_vs=refset

bull All codes in a refset httpsnomedinfosctfhir_vs=refset734138000

bull Implicit ConceptMapsbull Historical associations httpsnomedinfosctfhir_cm=900000000000527005

bull For more detail see the advanced session

Basic Terminology Services | Jim Steel28 |

Well-known Terminologies LOINCbull httploincorg

bull Filters parts copyright status multi-axial hierarchy

bull Implicit ValueSetsbull All LOINC codes httploincorgvs

bull Answer Lists httploincorgvsLL715-4

bull Hierarchy httploincorgvsLP29693-6

Basic Terminology Services | Jim Steel29 |

ConceptMapbull Represents a code-to-code mapping typically from a source

ValueSet to a target ValueSet

Basic Terminology Services | Jim Steel30 |

ConceptMap Structure

Basic Terminology Services | Jim Steel31 |

ConceptMap Structure (cont)

Basic Terminology Services | Jim Steel32 |

ConceptMap example

Basic Terminology Services | Jim Steel33 |

ConceptMap operations $translatebull Translate a code from one ValueSet to another according to the

serverrsquos resources andor other knowledge available to the server

bull Typically this means look up a ConceptMap resource and show the corresponding map entries (but not always)

bull Code as codesystemversion or coding or CodeableConcept

bull Specify source ValueSet and target ValueSet (or targetSystem)

bull Can be run in reverse (given target show source)

bull Results come back as Parameters with lsquomatchrsquo elements

Basic Terminology Services | Jim Steel34 |

$translate exampleGET httpsontoservercsiroaustu3-latestConceptMapau-jurisdictions$translatecode=QLDampsystem=httpcsiroaucsau-jurisdictionsamptarget=httpsnomedinfosctfhir_vs

Basic Terminology Services | Jim Steel35 |

Terminology Servicebull A server that implements all these can claim to be a terminology

server by instantiating httphl7orgfhirCapabilityStatementterminology-server in its CapabilityStatementbull CodeSystem ValueSet ConceptMap readsearch

bull $expand $validate-code $lookup $translate $closure

Basic Terminology Services | Jim Steel36 |

Terminology in FHIR Searchbull A lot of search parameters in FHIR are of type lsquotokenrsquo

bull These can leverage terminology services

bull abovebelowbull Eg Conditionbody-sitebelow=httpsnomedinfosct|272673000 (all

Conditions where the finding site is a descendent of Bone Structure

bull innot-inbull Eg

ProcedureRequestcodein=httpsnomedinfosctfhir_vs=refset32570361000036108 (all ProcedureRequests in the Imagine Procedure refset

Basic Terminology Services | Jim Steel37 |

Tips and tricksbull Paging

bull Search results can be paged (httphl7orgfhirsearchhtml see _count parameter)

bull $expand results have a separate paging mechanism (count offset)

bull Can reduce bandwidthresponse times by requesting the specific elements you wantbull includeDefinition includeDesignations on $expand

bull property on $lookup

bull _elements on searchreadoperation results

Basic Terminology Services | Jim Steel38 |

Tips and Tricks (cont)bull Batch

bull A lot of terminology operations are small ndash it can often be more efficient to send them as a batch (httphl7orgfhirhttphtmltransaction) then deal with the result when it comes back

bull Manage content types (Content-Type Accept _format)bull JSON XML

bull Accept-Encoding gzipbull More tips in the advanced session

Warning A lot of these can be server-dependent Theyrsquore not proprietary but you should check support for them by your terminology server

Basic Terminology Services | Jim Steel39 |

What if I am hellipbull Designing interfaces for data entry

bull Choose your CodeSystems (ideally standardized ones)

bull Choose or define your ValueSets

bull If your ValueSet is small a picklist can be populated using $expand

bull If your ValueSet is large a typeahead widget can use $expandfilter=xxx

Basic Terminology Services | Jim Steel40 |

bull Making a profilebull Choosedefine which code systems you want to allow

bull Make ValueSets with lists of codes you want to allow

ndash Make sure you respect the binding strength

bull Set up some processes for maintainingupdating them

ndash Concepts can become deprecated over time you can sometimes use ConceptMaps to find which concepts have changed

Basic Terminology Services | Jim Steel41 |

What if I amhellip

What if I am hellipbull Analyzingvalidating coded data

bull Choose your CodeSystemValueSets

bull Use $validate-code to check whether the codes are valid in the context in which yoursquore using them and whether the display text is correct (many clinical systems allow users to override the display text for the term)

bull Use $translate to map lsquoforeignrsquo coded data into a normalized CodeSystemValueSet for analysis

bull Use $subsumes $closure or $validate-code with an inline ValueSet to categorize data

Basic Terminology Services | Jim Steel42 |

What if I am hellipbull Exploring a set of concepts and how they relate to one another

bull Use $lookup to retrieve their properties and display them in a table

bull Use the lsquochildrsquo and lsquoparentrsquo properties or $subsumes$closure to explore the hierarchy that exists between concepts

Basic Terminology Services | Jim Steel43 |

Obligatory plugs

Terminology server httpsontoservercsiroau

Terminology browser httpsontoservercsiroaushrimp

Terminology resource editorhttpsontoservercsiroausnapper2-dev

Basic Terminology Services | Jim Steel44 |

Page 2: Basic FHIR Terminology Services - Home - FHIR DevDays · 2019-03-19 · Terminology: why •Terminology is the basis of shared meaning between different systems •StructureDefinitions

Terminology Basicsbull Why terminology Why a terminology servicebull Brief FHIR recap SCRUD Operationsbull Terminology Resources amp Operations

bull CodeSystem structure $lookup $expandbull ValueSet structure $expand $validate-codebull Standardised terminologies (brief overview)bull ConceptMap structure $translate

bull Tips amp Tricksbull Terminology in search

bull Codeabovebelow codeinnot-in

bull Use Cases

Basic Terminology Services | Jim Steel3 |

Terminology whybull Terminology is the basis of shared meaning between different

systemsbull StructureDefinitions are the bones but terminology defines what goes on

them

bull Terminology (especially ValueSets) is a very important part of defining FHIR profiles

bull Especially in a large integrated system having a single reference for terminology is very valuable for interoperability

bull Externalized terminology makes it much easier to update terminology when it is updatedchanges

Basic Terminology Services | Jim Steel4 |

FHIR Basicsbull SCRUD

bull Search GET ResourcesearchParams or POST Resource_searchbull Create POST Resourcebull Read GET Resourceid (or Resourceid_historyn for VRead)bull Update PUT Resourceidbull Delete DELETE Resourceid

bull Operationsbull GETPOST $operation or Resource$operation or Resourceid$operation

ndash Any parameters go in a lsquoParametersrsquo resource in the request bodybull GET only for idempotent (all can POST)

ndash Can be cached using HTTP cachingbull Servertypeinstance-level depending on the operation

Basic Terminology Services | Jim Steel5 |

CodeSystembull Collection of terms

bull Identified by a URI (and version)

bull Typically in some kind of hierarchy

bull Properties filters

bull Can be infinite

bull Standardised (SNOMED-CT LOINC RxNorm ICD etc) or custom

Basic Terminology Services | Jim Steel6 |

CodeSystem Structure

Basic Terminology Services | Jim Steel7 |

CodeSystem Structure (cont)

Basic Terminology Services | Jim Steel8 |

CodeSystem Structure (cont)

Basic Terminology Services | Jim Steel9 |

CodeSystem example

Basic Terminology Services | Jim Steel10 |

Basic Terminology Services | Jim Steel11 |

CodeSystem example (cont)

Basic Terminology Services | Jim Steel12 |

CodeSystem example (cont)

CodeSystem operations $lookupbull Type level only idempotent (GETPOST CodeSystem$lookup)

bull Retrieve details about a code (as codesystemversion or Coding)

bull Can be used to determine whether a code exists in the CodeSystem

bull Can be used to retrieve specificall propertiesdesignations

Basic Terminology Services | Jim Steel13 |

$lookup exampleGET httpsontoservercsiroaustu3-latestCodeSystem$lookupsystem=httpcsiroaucsau-jurisdictionsampcode=WAampproperty=displayampproperty=capital

Basic Terminology Services | Jim Steel14 |

CodeSystem operations $subsumesbull Type or instance level idempotent

bull GET CodeSystemid$subsumes

bull POST CodeSystem$subsumes (must have lsquosystemrsquo parameter)

bull Check what (if any) subsumption relationship exists between two codesbull codeA and codeB as codesystemversion or codingA and codingB

bull Result will be lsquoequivalentrsquo lsquosubsumesrsquo lsquosubsumed_byrsquo lsquonot_subsumedrsquo

bull Depends on the code systemrsquos lsquohierarchyMeaningrsquo

bull Can also use $closure see the advanced talk

Basic Terminology Services | Jim Steel15 |

$subsumes exampleGET httpsontoservercsiroaustu3-latestCodeSystem$subsumessystem=httpcsiroaucsau-jurisdictionsampcodeA=AUampcodeB=QLD

Basic Terminology Services | Jim Steel16 |

ValueSetbull A set of codes drawn from one or more CodeSystems

bull Can be used to define a set of codes (rsquocomposersquo)

bull Can be used to represent the result of an expansion of a ValueSet(lsquoexpansionrsquo)

Basic Terminology Services | Jim Steel17 |

ValueSet Structure

Basic Terminology Services | Jim Steel18 |

ValueSet Structure (cont)

Basic Terminology Services | Jim Steel19 |

ValueSet Structure (cont)

Basic Terminology Services | Jim Steel20 |

ValueSet example definition

Basic Terminology Services | Jim Steel21 |

Valueset operations $expandbull Type or instance level idempotent

bull GETPOST ValueSet$expand (must have rsquourlrsquo or lsquovalueSetrsquo)

bull GETPOST ValueSetid$expand

bull Retrieve the expansion of the ValueSet subject to a number of parametersbull Result is a ValueSet with an lsquoexpansionrsquo element

bull Parameters include filter count offset includeDesignations includeDefinition activeOnly excludeNested excludeNotForUI excludePostCoordinated displayLanguage limitedExpansion profile

bull This is the mainbest way to search for a code

Basic Terminology Services | Jim Steel22 |

$expand examplePOST httpsontoservercsiroaustu3-latestValueSet$expand (with the resource in the body)

Basic Terminology Services | Jim Steel23 |

ValueSet operations $validate-codebull Type or instance level idempotent

bull GETPOST ValueSet$validate-code (must have rsquourlrsquo or lsquovalueSetrsquo)

bull GETPOST ValueSetid$validate-code

bull Validate a code (and display text) against a ValueSetbull Determine whether the code is included in the ValueSet

bull (optionally) Determine whether the provided display text is the correct display text for the code

bull Code as codesystemversion or coding or CodeableConcept (multiple)

bull This is the main method for validating coded data

Basic Terminology Services | Jim Steel24 |

$validate-code examplePOST httpsontoservercsiroaustu3-latestValueSet$validate-code

Basic Terminology Services | Jim Steel25 |

Basic Terminology Services | Jim Steel26 |

$validate-code example (cont)

Well-known Terminologiesbull Terminologies such as SNOMED-CT LOINC RxNorm have specific

mappings into FHIR terminology resources with standardisedCodeSystemsbull Standard CodeSystem filtersproperties

bull Implicit ValueSets

bull Implicit ConceptMaps

Basic Terminology Services | Jim Steel27 |

Well-known Terminologies SNOMED-CTbull httpsnomedinfosct([edition](version[date]))bull Filters by subsumption by refset by ECL expressionbull Implicit ValueSets

bull All codes httpsnomedinfosctfhir_vs

bull By subsumption httpsnomedinfosctfhir_vs=isa404684003

bull List of refsets httpsnomedinfosctfhir_vs=refset

bull All codes in a refset httpsnomedinfosctfhir_vs=refset734138000

bull Implicit ConceptMapsbull Historical associations httpsnomedinfosctfhir_cm=900000000000527005

bull For more detail see the advanced session

Basic Terminology Services | Jim Steel28 |

Well-known Terminologies LOINCbull httploincorg

bull Filters parts copyright status multi-axial hierarchy

bull Implicit ValueSetsbull All LOINC codes httploincorgvs

bull Answer Lists httploincorgvsLL715-4

bull Hierarchy httploincorgvsLP29693-6

Basic Terminology Services | Jim Steel29 |

ConceptMapbull Represents a code-to-code mapping typically from a source

ValueSet to a target ValueSet

Basic Terminology Services | Jim Steel30 |

ConceptMap Structure

Basic Terminology Services | Jim Steel31 |

ConceptMap Structure (cont)

Basic Terminology Services | Jim Steel32 |

ConceptMap example

Basic Terminology Services | Jim Steel33 |

ConceptMap operations $translatebull Translate a code from one ValueSet to another according to the

serverrsquos resources andor other knowledge available to the server

bull Typically this means look up a ConceptMap resource and show the corresponding map entries (but not always)

bull Code as codesystemversion or coding or CodeableConcept

bull Specify source ValueSet and target ValueSet (or targetSystem)

bull Can be run in reverse (given target show source)

bull Results come back as Parameters with lsquomatchrsquo elements

Basic Terminology Services | Jim Steel34 |

$translate exampleGET httpsontoservercsiroaustu3-latestConceptMapau-jurisdictions$translatecode=QLDampsystem=httpcsiroaucsau-jurisdictionsamptarget=httpsnomedinfosctfhir_vs

Basic Terminology Services | Jim Steel35 |

Terminology Servicebull A server that implements all these can claim to be a terminology

server by instantiating httphl7orgfhirCapabilityStatementterminology-server in its CapabilityStatementbull CodeSystem ValueSet ConceptMap readsearch

bull $expand $validate-code $lookup $translate $closure

Basic Terminology Services | Jim Steel36 |

Terminology in FHIR Searchbull A lot of search parameters in FHIR are of type lsquotokenrsquo

bull These can leverage terminology services

bull abovebelowbull Eg Conditionbody-sitebelow=httpsnomedinfosct|272673000 (all

Conditions where the finding site is a descendent of Bone Structure

bull innot-inbull Eg

ProcedureRequestcodein=httpsnomedinfosctfhir_vs=refset32570361000036108 (all ProcedureRequests in the Imagine Procedure refset

Basic Terminology Services | Jim Steel37 |

Tips and tricksbull Paging

bull Search results can be paged (httphl7orgfhirsearchhtml see _count parameter)

bull $expand results have a separate paging mechanism (count offset)

bull Can reduce bandwidthresponse times by requesting the specific elements you wantbull includeDefinition includeDesignations on $expand

bull property on $lookup

bull _elements on searchreadoperation results

Basic Terminology Services | Jim Steel38 |

Tips and Tricks (cont)bull Batch

bull A lot of terminology operations are small ndash it can often be more efficient to send them as a batch (httphl7orgfhirhttphtmltransaction) then deal with the result when it comes back

bull Manage content types (Content-Type Accept _format)bull JSON XML

bull Accept-Encoding gzipbull More tips in the advanced session

Warning A lot of these can be server-dependent Theyrsquore not proprietary but you should check support for them by your terminology server

Basic Terminology Services | Jim Steel39 |

What if I am hellipbull Designing interfaces for data entry

bull Choose your CodeSystems (ideally standardized ones)

bull Choose or define your ValueSets

bull If your ValueSet is small a picklist can be populated using $expand

bull If your ValueSet is large a typeahead widget can use $expandfilter=xxx

Basic Terminology Services | Jim Steel40 |

bull Making a profilebull Choosedefine which code systems you want to allow

bull Make ValueSets with lists of codes you want to allow

ndash Make sure you respect the binding strength

bull Set up some processes for maintainingupdating them

ndash Concepts can become deprecated over time you can sometimes use ConceptMaps to find which concepts have changed

Basic Terminology Services | Jim Steel41 |

What if I amhellip

What if I am hellipbull Analyzingvalidating coded data

bull Choose your CodeSystemValueSets

bull Use $validate-code to check whether the codes are valid in the context in which yoursquore using them and whether the display text is correct (many clinical systems allow users to override the display text for the term)

bull Use $translate to map lsquoforeignrsquo coded data into a normalized CodeSystemValueSet for analysis

bull Use $subsumes $closure or $validate-code with an inline ValueSet to categorize data

Basic Terminology Services | Jim Steel42 |

What if I am hellipbull Exploring a set of concepts and how they relate to one another

bull Use $lookup to retrieve their properties and display them in a table

bull Use the lsquochildrsquo and lsquoparentrsquo properties or $subsumes$closure to explore the hierarchy that exists between concepts

Basic Terminology Services | Jim Steel43 |

Obligatory plugs

Terminology server httpsontoservercsiroau

Terminology browser httpsontoservercsiroaushrimp

Terminology resource editorhttpsontoservercsiroausnapper2-dev

Basic Terminology Services | Jim Steel44 |

Page 3: Basic FHIR Terminology Services - Home - FHIR DevDays · 2019-03-19 · Terminology: why •Terminology is the basis of shared meaning between different systems •StructureDefinitions

Terminology whybull Terminology is the basis of shared meaning between different

systemsbull StructureDefinitions are the bones but terminology defines what goes on

them

bull Terminology (especially ValueSets) is a very important part of defining FHIR profiles

bull Especially in a large integrated system having a single reference for terminology is very valuable for interoperability

bull Externalized terminology makes it much easier to update terminology when it is updatedchanges

Basic Terminology Services | Jim Steel4 |

FHIR Basicsbull SCRUD

bull Search GET ResourcesearchParams or POST Resource_searchbull Create POST Resourcebull Read GET Resourceid (or Resourceid_historyn for VRead)bull Update PUT Resourceidbull Delete DELETE Resourceid

bull Operationsbull GETPOST $operation or Resource$operation or Resourceid$operation

ndash Any parameters go in a lsquoParametersrsquo resource in the request bodybull GET only for idempotent (all can POST)

ndash Can be cached using HTTP cachingbull Servertypeinstance-level depending on the operation

Basic Terminology Services | Jim Steel5 |

CodeSystembull Collection of terms

bull Identified by a URI (and version)

bull Typically in some kind of hierarchy

bull Properties filters

bull Can be infinite

bull Standardised (SNOMED-CT LOINC RxNorm ICD etc) or custom

Basic Terminology Services | Jim Steel6 |

CodeSystem Structure

Basic Terminology Services | Jim Steel7 |

CodeSystem Structure (cont)

Basic Terminology Services | Jim Steel8 |

CodeSystem Structure (cont)

Basic Terminology Services | Jim Steel9 |

CodeSystem example

Basic Terminology Services | Jim Steel10 |

Basic Terminology Services | Jim Steel11 |

CodeSystem example (cont)

Basic Terminology Services | Jim Steel12 |

CodeSystem example (cont)

CodeSystem operations $lookupbull Type level only idempotent (GETPOST CodeSystem$lookup)

bull Retrieve details about a code (as codesystemversion or Coding)

bull Can be used to determine whether a code exists in the CodeSystem

bull Can be used to retrieve specificall propertiesdesignations

Basic Terminology Services | Jim Steel13 |

$lookup exampleGET httpsontoservercsiroaustu3-latestCodeSystem$lookupsystem=httpcsiroaucsau-jurisdictionsampcode=WAampproperty=displayampproperty=capital

Basic Terminology Services | Jim Steel14 |

CodeSystem operations $subsumesbull Type or instance level idempotent

bull GET CodeSystemid$subsumes

bull POST CodeSystem$subsumes (must have lsquosystemrsquo parameter)

bull Check what (if any) subsumption relationship exists between two codesbull codeA and codeB as codesystemversion or codingA and codingB

bull Result will be lsquoequivalentrsquo lsquosubsumesrsquo lsquosubsumed_byrsquo lsquonot_subsumedrsquo

bull Depends on the code systemrsquos lsquohierarchyMeaningrsquo

bull Can also use $closure see the advanced talk

Basic Terminology Services | Jim Steel15 |

$subsumes exampleGET httpsontoservercsiroaustu3-latestCodeSystem$subsumessystem=httpcsiroaucsau-jurisdictionsampcodeA=AUampcodeB=QLD

Basic Terminology Services | Jim Steel16 |

ValueSetbull A set of codes drawn from one or more CodeSystems

bull Can be used to define a set of codes (rsquocomposersquo)

bull Can be used to represent the result of an expansion of a ValueSet(lsquoexpansionrsquo)

Basic Terminology Services | Jim Steel17 |

ValueSet Structure

Basic Terminology Services | Jim Steel18 |

ValueSet Structure (cont)

Basic Terminology Services | Jim Steel19 |

ValueSet Structure (cont)

Basic Terminology Services | Jim Steel20 |

ValueSet example definition

Basic Terminology Services | Jim Steel21 |

Valueset operations $expandbull Type or instance level idempotent

bull GETPOST ValueSet$expand (must have rsquourlrsquo or lsquovalueSetrsquo)

bull GETPOST ValueSetid$expand

bull Retrieve the expansion of the ValueSet subject to a number of parametersbull Result is a ValueSet with an lsquoexpansionrsquo element

bull Parameters include filter count offset includeDesignations includeDefinition activeOnly excludeNested excludeNotForUI excludePostCoordinated displayLanguage limitedExpansion profile

bull This is the mainbest way to search for a code

Basic Terminology Services | Jim Steel22 |

$expand examplePOST httpsontoservercsiroaustu3-latestValueSet$expand (with the resource in the body)

Basic Terminology Services | Jim Steel23 |

ValueSet operations $validate-codebull Type or instance level idempotent

bull GETPOST ValueSet$validate-code (must have rsquourlrsquo or lsquovalueSetrsquo)

bull GETPOST ValueSetid$validate-code

bull Validate a code (and display text) against a ValueSetbull Determine whether the code is included in the ValueSet

bull (optionally) Determine whether the provided display text is the correct display text for the code

bull Code as codesystemversion or coding or CodeableConcept (multiple)

bull This is the main method for validating coded data

Basic Terminology Services | Jim Steel24 |

$validate-code examplePOST httpsontoservercsiroaustu3-latestValueSet$validate-code

Basic Terminology Services | Jim Steel25 |

Basic Terminology Services | Jim Steel26 |

$validate-code example (cont)

Well-known Terminologiesbull Terminologies such as SNOMED-CT LOINC RxNorm have specific

mappings into FHIR terminology resources with standardisedCodeSystemsbull Standard CodeSystem filtersproperties

bull Implicit ValueSets

bull Implicit ConceptMaps

Basic Terminology Services | Jim Steel27 |

Well-known Terminologies SNOMED-CTbull httpsnomedinfosct([edition](version[date]))bull Filters by subsumption by refset by ECL expressionbull Implicit ValueSets

bull All codes httpsnomedinfosctfhir_vs

bull By subsumption httpsnomedinfosctfhir_vs=isa404684003

bull List of refsets httpsnomedinfosctfhir_vs=refset

bull All codes in a refset httpsnomedinfosctfhir_vs=refset734138000

bull Implicit ConceptMapsbull Historical associations httpsnomedinfosctfhir_cm=900000000000527005

bull For more detail see the advanced session

Basic Terminology Services | Jim Steel28 |

Well-known Terminologies LOINCbull httploincorg

bull Filters parts copyright status multi-axial hierarchy

bull Implicit ValueSetsbull All LOINC codes httploincorgvs

bull Answer Lists httploincorgvsLL715-4

bull Hierarchy httploincorgvsLP29693-6

Basic Terminology Services | Jim Steel29 |

ConceptMapbull Represents a code-to-code mapping typically from a source

ValueSet to a target ValueSet

Basic Terminology Services | Jim Steel30 |

ConceptMap Structure

Basic Terminology Services | Jim Steel31 |

ConceptMap Structure (cont)

Basic Terminology Services | Jim Steel32 |

ConceptMap example

Basic Terminology Services | Jim Steel33 |

ConceptMap operations $translatebull Translate a code from one ValueSet to another according to the

serverrsquos resources andor other knowledge available to the server

bull Typically this means look up a ConceptMap resource and show the corresponding map entries (but not always)

bull Code as codesystemversion or coding or CodeableConcept

bull Specify source ValueSet and target ValueSet (or targetSystem)

bull Can be run in reverse (given target show source)

bull Results come back as Parameters with lsquomatchrsquo elements

Basic Terminology Services | Jim Steel34 |

$translate exampleGET httpsontoservercsiroaustu3-latestConceptMapau-jurisdictions$translatecode=QLDampsystem=httpcsiroaucsau-jurisdictionsamptarget=httpsnomedinfosctfhir_vs

Basic Terminology Services | Jim Steel35 |

Terminology Servicebull A server that implements all these can claim to be a terminology

server by instantiating httphl7orgfhirCapabilityStatementterminology-server in its CapabilityStatementbull CodeSystem ValueSet ConceptMap readsearch

bull $expand $validate-code $lookup $translate $closure

Basic Terminology Services | Jim Steel36 |

Terminology in FHIR Searchbull A lot of search parameters in FHIR are of type lsquotokenrsquo

bull These can leverage terminology services

bull abovebelowbull Eg Conditionbody-sitebelow=httpsnomedinfosct|272673000 (all

Conditions where the finding site is a descendent of Bone Structure

bull innot-inbull Eg

ProcedureRequestcodein=httpsnomedinfosctfhir_vs=refset32570361000036108 (all ProcedureRequests in the Imagine Procedure refset

Basic Terminology Services | Jim Steel37 |

Tips and tricksbull Paging

bull Search results can be paged (httphl7orgfhirsearchhtml see _count parameter)

bull $expand results have a separate paging mechanism (count offset)

bull Can reduce bandwidthresponse times by requesting the specific elements you wantbull includeDefinition includeDesignations on $expand

bull property on $lookup

bull _elements on searchreadoperation results

Basic Terminology Services | Jim Steel38 |

Tips and Tricks (cont)bull Batch

bull A lot of terminology operations are small ndash it can often be more efficient to send them as a batch (httphl7orgfhirhttphtmltransaction) then deal with the result when it comes back

bull Manage content types (Content-Type Accept _format)bull JSON XML

bull Accept-Encoding gzipbull More tips in the advanced session

Warning A lot of these can be server-dependent Theyrsquore not proprietary but you should check support for them by your terminology server

Basic Terminology Services | Jim Steel39 |

What if I am hellipbull Designing interfaces for data entry

bull Choose your CodeSystems (ideally standardized ones)

bull Choose or define your ValueSets

bull If your ValueSet is small a picklist can be populated using $expand

bull If your ValueSet is large a typeahead widget can use $expandfilter=xxx

Basic Terminology Services | Jim Steel40 |

bull Making a profilebull Choosedefine which code systems you want to allow

bull Make ValueSets with lists of codes you want to allow

ndash Make sure you respect the binding strength

bull Set up some processes for maintainingupdating them

ndash Concepts can become deprecated over time you can sometimes use ConceptMaps to find which concepts have changed

Basic Terminology Services | Jim Steel41 |

What if I amhellip

What if I am hellipbull Analyzingvalidating coded data

bull Choose your CodeSystemValueSets

bull Use $validate-code to check whether the codes are valid in the context in which yoursquore using them and whether the display text is correct (many clinical systems allow users to override the display text for the term)

bull Use $translate to map lsquoforeignrsquo coded data into a normalized CodeSystemValueSet for analysis

bull Use $subsumes $closure or $validate-code with an inline ValueSet to categorize data

Basic Terminology Services | Jim Steel42 |

What if I am hellipbull Exploring a set of concepts and how they relate to one another

bull Use $lookup to retrieve their properties and display them in a table

bull Use the lsquochildrsquo and lsquoparentrsquo properties or $subsumes$closure to explore the hierarchy that exists between concepts

Basic Terminology Services | Jim Steel43 |

Obligatory plugs

Terminology server httpsontoservercsiroau

Terminology browser httpsontoservercsiroaushrimp

Terminology resource editorhttpsontoservercsiroausnapper2-dev

Basic Terminology Services | Jim Steel44 |

Page 4: Basic FHIR Terminology Services - Home - FHIR DevDays · 2019-03-19 · Terminology: why •Terminology is the basis of shared meaning between different systems •StructureDefinitions

FHIR Basicsbull SCRUD

bull Search GET ResourcesearchParams or POST Resource_searchbull Create POST Resourcebull Read GET Resourceid (or Resourceid_historyn for VRead)bull Update PUT Resourceidbull Delete DELETE Resourceid

bull Operationsbull GETPOST $operation or Resource$operation or Resourceid$operation

ndash Any parameters go in a lsquoParametersrsquo resource in the request bodybull GET only for idempotent (all can POST)

ndash Can be cached using HTTP cachingbull Servertypeinstance-level depending on the operation

Basic Terminology Services | Jim Steel5 |

CodeSystembull Collection of terms

bull Identified by a URI (and version)

bull Typically in some kind of hierarchy

bull Properties filters

bull Can be infinite

bull Standardised (SNOMED-CT LOINC RxNorm ICD etc) or custom

Basic Terminology Services | Jim Steel6 |

CodeSystem Structure

Basic Terminology Services | Jim Steel7 |

CodeSystem Structure (cont)

Basic Terminology Services | Jim Steel8 |

CodeSystem Structure (cont)

Basic Terminology Services | Jim Steel9 |

CodeSystem example

Basic Terminology Services | Jim Steel10 |

Basic Terminology Services | Jim Steel11 |

CodeSystem example (cont)

Basic Terminology Services | Jim Steel12 |

CodeSystem example (cont)

CodeSystem operations $lookupbull Type level only idempotent (GETPOST CodeSystem$lookup)

bull Retrieve details about a code (as codesystemversion or Coding)

bull Can be used to determine whether a code exists in the CodeSystem

bull Can be used to retrieve specificall propertiesdesignations

Basic Terminology Services | Jim Steel13 |

$lookup exampleGET httpsontoservercsiroaustu3-latestCodeSystem$lookupsystem=httpcsiroaucsau-jurisdictionsampcode=WAampproperty=displayampproperty=capital

Basic Terminology Services | Jim Steel14 |

CodeSystem operations $subsumesbull Type or instance level idempotent

bull GET CodeSystemid$subsumes

bull POST CodeSystem$subsumes (must have lsquosystemrsquo parameter)

bull Check what (if any) subsumption relationship exists between two codesbull codeA and codeB as codesystemversion or codingA and codingB

bull Result will be lsquoequivalentrsquo lsquosubsumesrsquo lsquosubsumed_byrsquo lsquonot_subsumedrsquo

bull Depends on the code systemrsquos lsquohierarchyMeaningrsquo

bull Can also use $closure see the advanced talk

Basic Terminology Services | Jim Steel15 |

$subsumes exampleGET httpsontoservercsiroaustu3-latestCodeSystem$subsumessystem=httpcsiroaucsau-jurisdictionsampcodeA=AUampcodeB=QLD

Basic Terminology Services | Jim Steel16 |

ValueSetbull A set of codes drawn from one or more CodeSystems

bull Can be used to define a set of codes (rsquocomposersquo)

bull Can be used to represent the result of an expansion of a ValueSet(lsquoexpansionrsquo)

Basic Terminology Services | Jim Steel17 |

ValueSet Structure

Basic Terminology Services | Jim Steel18 |

ValueSet Structure (cont)

Basic Terminology Services | Jim Steel19 |

ValueSet Structure (cont)

Basic Terminology Services | Jim Steel20 |

ValueSet example definition

Basic Terminology Services | Jim Steel21 |

Valueset operations $expandbull Type or instance level idempotent

bull GETPOST ValueSet$expand (must have rsquourlrsquo or lsquovalueSetrsquo)

bull GETPOST ValueSetid$expand

bull Retrieve the expansion of the ValueSet subject to a number of parametersbull Result is a ValueSet with an lsquoexpansionrsquo element

bull Parameters include filter count offset includeDesignations includeDefinition activeOnly excludeNested excludeNotForUI excludePostCoordinated displayLanguage limitedExpansion profile

bull This is the mainbest way to search for a code

Basic Terminology Services | Jim Steel22 |

$expand examplePOST httpsontoservercsiroaustu3-latestValueSet$expand (with the resource in the body)

Basic Terminology Services | Jim Steel23 |

ValueSet operations $validate-codebull Type or instance level idempotent

bull GETPOST ValueSet$validate-code (must have rsquourlrsquo or lsquovalueSetrsquo)

bull GETPOST ValueSetid$validate-code

bull Validate a code (and display text) against a ValueSetbull Determine whether the code is included in the ValueSet

bull (optionally) Determine whether the provided display text is the correct display text for the code

bull Code as codesystemversion or coding or CodeableConcept (multiple)

bull This is the main method for validating coded data

Basic Terminology Services | Jim Steel24 |

$validate-code examplePOST httpsontoservercsiroaustu3-latestValueSet$validate-code

Basic Terminology Services | Jim Steel25 |

Basic Terminology Services | Jim Steel26 |

$validate-code example (cont)

Well-known Terminologiesbull Terminologies such as SNOMED-CT LOINC RxNorm have specific

mappings into FHIR terminology resources with standardisedCodeSystemsbull Standard CodeSystem filtersproperties

bull Implicit ValueSets

bull Implicit ConceptMaps

Basic Terminology Services | Jim Steel27 |

Well-known Terminologies SNOMED-CTbull httpsnomedinfosct([edition](version[date]))bull Filters by subsumption by refset by ECL expressionbull Implicit ValueSets

bull All codes httpsnomedinfosctfhir_vs

bull By subsumption httpsnomedinfosctfhir_vs=isa404684003

bull List of refsets httpsnomedinfosctfhir_vs=refset

bull All codes in a refset httpsnomedinfosctfhir_vs=refset734138000

bull Implicit ConceptMapsbull Historical associations httpsnomedinfosctfhir_cm=900000000000527005

bull For more detail see the advanced session

Basic Terminology Services | Jim Steel28 |

Well-known Terminologies LOINCbull httploincorg

bull Filters parts copyright status multi-axial hierarchy

bull Implicit ValueSetsbull All LOINC codes httploincorgvs

bull Answer Lists httploincorgvsLL715-4

bull Hierarchy httploincorgvsLP29693-6

Basic Terminology Services | Jim Steel29 |

ConceptMapbull Represents a code-to-code mapping typically from a source

ValueSet to a target ValueSet

Basic Terminology Services | Jim Steel30 |

ConceptMap Structure

Basic Terminology Services | Jim Steel31 |

ConceptMap Structure (cont)

Basic Terminology Services | Jim Steel32 |

ConceptMap example

Basic Terminology Services | Jim Steel33 |

ConceptMap operations $translatebull Translate a code from one ValueSet to another according to the

serverrsquos resources andor other knowledge available to the server

bull Typically this means look up a ConceptMap resource and show the corresponding map entries (but not always)

bull Code as codesystemversion or coding or CodeableConcept

bull Specify source ValueSet and target ValueSet (or targetSystem)

bull Can be run in reverse (given target show source)

bull Results come back as Parameters with lsquomatchrsquo elements

Basic Terminology Services | Jim Steel34 |

$translate exampleGET httpsontoservercsiroaustu3-latestConceptMapau-jurisdictions$translatecode=QLDampsystem=httpcsiroaucsau-jurisdictionsamptarget=httpsnomedinfosctfhir_vs

Basic Terminology Services | Jim Steel35 |

Terminology Servicebull A server that implements all these can claim to be a terminology

server by instantiating httphl7orgfhirCapabilityStatementterminology-server in its CapabilityStatementbull CodeSystem ValueSet ConceptMap readsearch

bull $expand $validate-code $lookup $translate $closure

Basic Terminology Services | Jim Steel36 |

Terminology in FHIR Searchbull A lot of search parameters in FHIR are of type lsquotokenrsquo

bull These can leverage terminology services

bull abovebelowbull Eg Conditionbody-sitebelow=httpsnomedinfosct|272673000 (all

Conditions where the finding site is a descendent of Bone Structure

bull innot-inbull Eg

ProcedureRequestcodein=httpsnomedinfosctfhir_vs=refset32570361000036108 (all ProcedureRequests in the Imagine Procedure refset

Basic Terminology Services | Jim Steel37 |

Tips and tricksbull Paging

bull Search results can be paged (httphl7orgfhirsearchhtml see _count parameter)

bull $expand results have a separate paging mechanism (count offset)

bull Can reduce bandwidthresponse times by requesting the specific elements you wantbull includeDefinition includeDesignations on $expand

bull property on $lookup

bull _elements on searchreadoperation results

Basic Terminology Services | Jim Steel38 |

Tips and Tricks (cont)bull Batch

bull A lot of terminology operations are small ndash it can often be more efficient to send them as a batch (httphl7orgfhirhttphtmltransaction) then deal with the result when it comes back

bull Manage content types (Content-Type Accept _format)bull JSON XML

bull Accept-Encoding gzipbull More tips in the advanced session

Warning A lot of these can be server-dependent Theyrsquore not proprietary but you should check support for them by your terminology server

Basic Terminology Services | Jim Steel39 |

What if I am hellipbull Designing interfaces for data entry

bull Choose your CodeSystems (ideally standardized ones)

bull Choose or define your ValueSets

bull If your ValueSet is small a picklist can be populated using $expand

bull If your ValueSet is large a typeahead widget can use $expandfilter=xxx

Basic Terminology Services | Jim Steel40 |

bull Making a profilebull Choosedefine which code systems you want to allow

bull Make ValueSets with lists of codes you want to allow

ndash Make sure you respect the binding strength

bull Set up some processes for maintainingupdating them

ndash Concepts can become deprecated over time you can sometimes use ConceptMaps to find which concepts have changed

Basic Terminology Services | Jim Steel41 |

What if I amhellip

What if I am hellipbull Analyzingvalidating coded data

bull Choose your CodeSystemValueSets

bull Use $validate-code to check whether the codes are valid in the context in which yoursquore using them and whether the display text is correct (many clinical systems allow users to override the display text for the term)

bull Use $translate to map lsquoforeignrsquo coded data into a normalized CodeSystemValueSet for analysis

bull Use $subsumes $closure or $validate-code with an inline ValueSet to categorize data

Basic Terminology Services | Jim Steel42 |

What if I am hellipbull Exploring a set of concepts and how they relate to one another

bull Use $lookup to retrieve their properties and display them in a table

bull Use the lsquochildrsquo and lsquoparentrsquo properties or $subsumes$closure to explore the hierarchy that exists between concepts

Basic Terminology Services | Jim Steel43 |

Obligatory plugs

Terminology server httpsontoservercsiroau

Terminology browser httpsontoservercsiroaushrimp

Terminology resource editorhttpsontoservercsiroausnapper2-dev

Basic Terminology Services | Jim Steel44 |

Page 5: Basic FHIR Terminology Services - Home - FHIR DevDays · 2019-03-19 · Terminology: why •Terminology is the basis of shared meaning between different systems •StructureDefinitions

CodeSystembull Collection of terms

bull Identified by a URI (and version)

bull Typically in some kind of hierarchy

bull Properties filters

bull Can be infinite

bull Standardised (SNOMED-CT LOINC RxNorm ICD etc) or custom

Basic Terminology Services | Jim Steel6 |

CodeSystem Structure

Basic Terminology Services | Jim Steel7 |

CodeSystem Structure (cont)

Basic Terminology Services | Jim Steel8 |

CodeSystem Structure (cont)

Basic Terminology Services | Jim Steel9 |

CodeSystem example

Basic Terminology Services | Jim Steel10 |

Basic Terminology Services | Jim Steel11 |

CodeSystem example (cont)

Basic Terminology Services | Jim Steel12 |

CodeSystem example (cont)

CodeSystem operations $lookupbull Type level only idempotent (GETPOST CodeSystem$lookup)

bull Retrieve details about a code (as codesystemversion or Coding)

bull Can be used to determine whether a code exists in the CodeSystem

bull Can be used to retrieve specificall propertiesdesignations

Basic Terminology Services | Jim Steel13 |

$lookup exampleGET httpsontoservercsiroaustu3-latestCodeSystem$lookupsystem=httpcsiroaucsau-jurisdictionsampcode=WAampproperty=displayampproperty=capital

Basic Terminology Services | Jim Steel14 |

CodeSystem operations $subsumesbull Type or instance level idempotent

bull GET CodeSystemid$subsumes

bull POST CodeSystem$subsumes (must have lsquosystemrsquo parameter)

bull Check what (if any) subsumption relationship exists between two codesbull codeA and codeB as codesystemversion or codingA and codingB

bull Result will be lsquoequivalentrsquo lsquosubsumesrsquo lsquosubsumed_byrsquo lsquonot_subsumedrsquo

bull Depends on the code systemrsquos lsquohierarchyMeaningrsquo

bull Can also use $closure see the advanced talk

Basic Terminology Services | Jim Steel15 |

$subsumes exampleGET httpsontoservercsiroaustu3-latestCodeSystem$subsumessystem=httpcsiroaucsau-jurisdictionsampcodeA=AUampcodeB=QLD

Basic Terminology Services | Jim Steel16 |

ValueSetbull A set of codes drawn from one or more CodeSystems

bull Can be used to define a set of codes (rsquocomposersquo)

bull Can be used to represent the result of an expansion of a ValueSet(lsquoexpansionrsquo)

Basic Terminology Services | Jim Steel17 |

ValueSet Structure

Basic Terminology Services | Jim Steel18 |

ValueSet Structure (cont)

Basic Terminology Services | Jim Steel19 |

ValueSet Structure (cont)

Basic Terminology Services | Jim Steel20 |

ValueSet example definition

Basic Terminology Services | Jim Steel21 |

Valueset operations $expandbull Type or instance level idempotent

bull GETPOST ValueSet$expand (must have rsquourlrsquo or lsquovalueSetrsquo)

bull GETPOST ValueSetid$expand

bull Retrieve the expansion of the ValueSet subject to a number of parametersbull Result is a ValueSet with an lsquoexpansionrsquo element

bull Parameters include filter count offset includeDesignations includeDefinition activeOnly excludeNested excludeNotForUI excludePostCoordinated displayLanguage limitedExpansion profile

bull This is the mainbest way to search for a code

Basic Terminology Services | Jim Steel22 |

$expand examplePOST httpsontoservercsiroaustu3-latestValueSet$expand (with the resource in the body)

Basic Terminology Services | Jim Steel23 |

ValueSet operations $validate-codebull Type or instance level idempotent

bull GETPOST ValueSet$validate-code (must have rsquourlrsquo or lsquovalueSetrsquo)

bull GETPOST ValueSetid$validate-code

bull Validate a code (and display text) against a ValueSetbull Determine whether the code is included in the ValueSet

bull (optionally) Determine whether the provided display text is the correct display text for the code

bull Code as codesystemversion or coding or CodeableConcept (multiple)

bull This is the main method for validating coded data

Basic Terminology Services | Jim Steel24 |

$validate-code examplePOST httpsontoservercsiroaustu3-latestValueSet$validate-code

Basic Terminology Services | Jim Steel25 |

Basic Terminology Services | Jim Steel26 |

$validate-code example (cont)

Well-known Terminologiesbull Terminologies such as SNOMED-CT LOINC RxNorm have specific

mappings into FHIR terminology resources with standardisedCodeSystemsbull Standard CodeSystem filtersproperties

bull Implicit ValueSets

bull Implicit ConceptMaps

Basic Terminology Services | Jim Steel27 |

Well-known Terminologies SNOMED-CTbull httpsnomedinfosct([edition](version[date]))bull Filters by subsumption by refset by ECL expressionbull Implicit ValueSets

bull All codes httpsnomedinfosctfhir_vs

bull By subsumption httpsnomedinfosctfhir_vs=isa404684003

bull List of refsets httpsnomedinfosctfhir_vs=refset

bull All codes in a refset httpsnomedinfosctfhir_vs=refset734138000

bull Implicit ConceptMapsbull Historical associations httpsnomedinfosctfhir_cm=900000000000527005

bull For more detail see the advanced session

Basic Terminology Services | Jim Steel28 |

Well-known Terminologies LOINCbull httploincorg

bull Filters parts copyright status multi-axial hierarchy

bull Implicit ValueSetsbull All LOINC codes httploincorgvs

bull Answer Lists httploincorgvsLL715-4

bull Hierarchy httploincorgvsLP29693-6

Basic Terminology Services | Jim Steel29 |

ConceptMapbull Represents a code-to-code mapping typically from a source

ValueSet to a target ValueSet

Basic Terminology Services | Jim Steel30 |

ConceptMap Structure

Basic Terminology Services | Jim Steel31 |

ConceptMap Structure (cont)

Basic Terminology Services | Jim Steel32 |

ConceptMap example

Basic Terminology Services | Jim Steel33 |

ConceptMap operations $translatebull Translate a code from one ValueSet to another according to the

serverrsquos resources andor other knowledge available to the server

bull Typically this means look up a ConceptMap resource and show the corresponding map entries (but not always)

bull Code as codesystemversion or coding or CodeableConcept

bull Specify source ValueSet and target ValueSet (or targetSystem)

bull Can be run in reverse (given target show source)

bull Results come back as Parameters with lsquomatchrsquo elements

Basic Terminology Services | Jim Steel34 |

$translate exampleGET httpsontoservercsiroaustu3-latestConceptMapau-jurisdictions$translatecode=QLDampsystem=httpcsiroaucsau-jurisdictionsamptarget=httpsnomedinfosctfhir_vs

Basic Terminology Services | Jim Steel35 |

Terminology Servicebull A server that implements all these can claim to be a terminology

server by instantiating httphl7orgfhirCapabilityStatementterminology-server in its CapabilityStatementbull CodeSystem ValueSet ConceptMap readsearch

bull $expand $validate-code $lookup $translate $closure

Basic Terminology Services | Jim Steel36 |

Terminology in FHIR Searchbull A lot of search parameters in FHIR are of type lsquotokenrsquo

bull These can leverage terminology services

bull abovebelowbull Eg Conditionbody-sitebelow=httpsnomedinfosct|272673000 (all

Conditions where the finding site is a descendent of Bone Structure

bull innot-inbull Eg

ProcedureRequestcodein=httpsnomedinfosctfhir_vs=refset32570361000036108 (all ProcedureRequests in the Imagine Procedure refset

Basic Terminology Services | Jim Steel37 |

Tips and tricksbull Paging

bull Search results can be paged (httphl7orgfhirsearchhtml see _count parameter)

bull $expand results have a separate paging mechanism (count offset)

bull Can reduce bandwidthresponse times by requesting the specific elements you wantbull includeDefinition includeDesignations on $expand

bull property on $lookup

bull _elements on searchreadoperation results

Basic Terminology Services | Jim Steel38 |

Tips and Tricks (cont)bull Batch

bull A lot of terminology operations are small ndash it can often be more efficient to send them as a batch (httphl7orgfhirhttphtmltransaction) then deal with the result when it comes back

bull Manage content types (Content-Type Accept _format)bull JSON XML

bull Accept-Encoding gzipbull More tips in the advanced session

Warning A lot of these can be server-dependent Theyrsquore not proprietary but you should check support for them by your terminology server

Basic Terminology Services | Jim Steel39 |

What if I am hellipbull Designing interfaces for data entry

bull Choose your CodeSystems (ideally standardized ones)

bull Choose or define your ValueSets

bull If your ValueSet is small a picklist can be populated using $expand

bull If your ValueSet is large a typeahead widget can use $expandfilter=xxx

Basic Terminology Services | Jim Steel40 |

bull Making a profilebull Choosedefine which code systems you want to allow

bull Make ValueSets with lists of codes you want to allow

ndash Make sure you respect the binding strength

bull Set up some processes for maintainingupdating them

ndash Concepts can become deprecated over time you can sometimes use ConceptMaps to find which concepts have changed

Basic Terminology Services | Jim Steel41 |

What if I amhellip

What if I am hellipbull Analyzingvalidating coded data

bull Choose your CodeSystemValueSets

bull Use $validate-code to check whether the codes are valid in the context in which yoursquore using them and whether the display text is correct (many clinical systems allow users to override the display text for the term)

bull Use $translate to map lsquoforeignrsquo coded data into a normalized CodeSystemValueSet for analysis

bull Use $subsumes $closure or $validate-code with an inline ValueSet to categorize data

Basic Terminology Services | Jim Steel42 |

What if I am hellipbull Exploring a set of concepts and how they relate to one another

bull Use $lookup to retrieve their properties and display them in a table

bull Use the lsquochildrsquo and lsquoparentrsquo properties or $subsumes$closure to explore the hierarchy that exists between concepts

Basic Terminology Services | Jim Steel43 |

Obligatory plugs

Terminology server httpsontoservercsiroau

Terminology browser httpsontoservercsiroaushrimp

Terminology resource editorhttpsontoservercsiroausnapper2-dev

Basic Terminology Services | Jim Steel44 |

Page 6: Basic FHIR Terminology Services - Home - FHIR DevDays · 2019-03-19 · Terminology: why •Terminology is the basis of shared meaning between different systems •StructureDefinitions

CodeSystem Structure

Basic Terminology Services | Jim Steel7 |

CodeSystem Structure (cont)

Basic Terminology Services | Jim Steel8 |

CodeSystem Structure (cont)

Basic Terminology Services | Jim Steel9 |

CodeSystem example

Basic Terminology Services | Jim Steel10 |

Basic Terminology Services | Jim Steel11 |

CodeSystem example (cont)

Basic Terminology Services | Jim Steel12 |

CodeSystem example (cont)

CodeSystem operations $lookupbull Type level only idempotent (GETPOST CodeSystem$lookup)

bull Retrieve details about a code (as codesystemversion or Coding)

bull Can be used to determine whether a code exists in the CodeSystem

bull Can be used to retrieve specificall propertiesdesignations

Basic Terminology Services | Jim Steel13 |

$lookup exampleGET httpsontoservercsiroaustu3-latestCodeSystem$lookupsystem=httpcsiroaucsau-jurisdictionsampcode=WAampproperty=displayampproperty=capital

Basic Terminology Services | Jim Steel14 |

CodeSystem operations $subsumesbull Type or instance level idempotent

bull GET CodeSystemid$subsumes

bull POST CodeSystem$subsumes (must have lsquosystemrsquo parameter)

bull Check what (if any) subsumption relationship exists between two codesbull codeA and codeB as codesystemversion or codingA and codingB

bull Result will be lsquoequivalentrsquo lsquosubsumesrsquo lsquosubsumed_byrsquo lsquonot_subsumedrsquo

bull Depends on the code systemrsquos lsquohierarchyMeaningrsquo

bull Can also use $closure see the advanced talk

Basic Terminology Services | Jim Steel15 |

$subsumes exampleGET httpsontoservercsiroaustu3-latestCodeSystem$subsumessystem=httpcsiroaucsau-jurisdictionsampcodeA=AUampcodeB=QLD

Basic Terminology Services | Jim Steel16 |

ValueSetbull A set of codes drawn from one or more CodeSystems

bull Can be used to define a set of codes (rsquocomposersquo)

bull Can be used to represent the result of an expansion of a ValueSet(lsquoexpansionrsquo)

Basic Terminology Services | Jim Steel17 |

ValueSet Structure

Basic Terminology Services | Jim Steel18 |

ValueSet Structure (cont)

Basic Terminology Services | Jim Steel19 |

ValueSet Structure (cont)

Basic Terminology Services | Jim Steel20 |

ValueSet example definition

Basic Terminology Services | Jim Steel21 |

Valueset operations $expandbull Type or instance level idempotent

bull GETPOST ValueSet$expand (must have rsquourlrsquo or lsquovalueSetrsquo)

bull GETPOST ValueSetid$expand

bull Retrieve the expansion of the ValueSet subject to a number of parametersbull Result is a ValueSet with an lsquoexpansionrsquo element

bull Parameters include filter count offset includeDesignations includeDefinition activeOnly excludeNested excludeNotForUI excludePostCoordinated displayLanguage limitedExpansion profile

bull This is the mainbest way to search for a code

Basic Terminology Services | Jim Steel22 |

$expand examplePOST httpsontoservercsiroaustu3-latestValueSet$expand (with the resource in the body)

Basic Terminology Services | Jim Steel23 |

ValueSet operations $validate-codebull Type or instance level idempotent

bull GETPOST ValueSet$validate-code (must have rsquourlrsquo or lsquovalueSetrsquo)

bull GETPOST ValueSetid$validate-code

bull Validate a code (and display text) against a ValueSetbull Determine whether the code is included in the ValueSet

bull (optionally) Determine whether the provided display text is the correct display text for the code

bull Code as codesystemversion or coding or CodeableConcept (multiple)

bull This is the main method for validating coded data

Basic Terminology Services | Jim Steel24 |

$validate-code examplePOST httpsontoservercsiroaustu3-latestValueSet$validate-code

Basic Terminology Services | Jim Steel25 |

Basic Terminology Services | Jim Steel26 |

$validate-code example (cont)

Well-known Terminologiesbull Terminologies such as SNOMED-CT LOINC RxNorm have specific

mappings into FHIR terminology resources with standardisedCodeSystemsbull Standard CodeSystem filtersproperties

bull Implicit ValueSets

bull Implicit ConceptMaps

Basic Terminology Services | Jim Steel27 |

Well-known Terminologies SNOMED-CTbull httpsnomedinfosct([edition](version[date]))bull Filters by subsumption by refset by ECL expressionbull Implicit ValueSets

bull All codes httpsnomedinfosctfhir_vs

bull By subsumption httpsnomedinfosctfhir_vs=isa404684003

bull List of refsets httpsnomedinfosctfhir_vs=refset

bull All codes in a refset httpsnomedinfosctfhir_vs=refset734138000

bull Implicit ConceptMapsbull Historical associations httpsnomedinfosctfhir_cm=900000000000527005

bull For more detail see the advanced session

Basic Terminology Services | Jim Steel28 |

Well-known Terminologies LOINCbull httploincorg

bull Filters parts copyright status multi-axial hierarchy

bull Implicit ValueSetsbull All LOINC codes httploincorgvs

bull Answer Lists httploincorgvsLL715-4

bull Hierarchy httploincorgvsLP29693-6

Basic Terminology Services | Jim Steel29 |

ConceptMapbull Represents a code-to-code mapping typically from a source

ValueSet to a target ValueSet

Basic Terminology Services | Jim Steel30 |

ConceptMap Structure

Basic Terminology Services | Jim Steel31 |

ConceptMap Structure (cont)

Basic Terminology Services | Jim Steel32 |

ConceptMap example

Basic Terminology Services | Jim Steel33 |

ConceptMap operations $translatebull Translate a code from one ValueSet to another according to the

serverrsquos resources andor other knowledge available to the server

bull Typically this means look up a ConceptMap resource and show the corresponding map entries (but not always)

bull Code as codesystemversion or coding or CodeableConcept

bull Specify source ValueSet and target ValueSet (or targetSystem)

bull Can be run in reverse (given target show source)

bull Results come back as Parameters with lsquomatchrsquo elements

Basic Terminology Services | Jim Steel34 |

$translate exampleGET httpsontoservercsiroaustu3-latestConceptMapau-jurisdictions$translatecode=QLDampsystem=httpcsiroaucsau-jurisdictionsamptarget=httpsnomedinfosctfhir_vs

Basic Terminology Services | Jim Steel35 |

Terminology Servicebull A server that implements all these can claim to be a terminology

server by instantiating httphl7orgfhirCapabilityStatementterminology-server in its CapabilityStatementbull CodeSystem ValueSet ConceptMap readsearch

bull $expand $validate-code $lookup $translate $closure

Basic Terminology Services | Jim Steel36 |

Terminology in FHIR Searchbull A lot of search parameters in FHIR are of type lsquotokenrsquo

bull These can leverage terminology services

bull abovebelowbull Eg Conditionbody-sitebelow=httpsnomedinfosct|272673000 (all

Conditions where the finding site is a descendent of Bone Structure

bull innot-inbull Eg

ProcedureRequestcodein=httpsnomedinfosctfhir_vs=refset32570361000036108 (all ProcedureRequests in the Imagine Procedure refset

Basic Terminology Services | Jim Steel37 |

Tips and tricksbull Paging

bull Search results can be paged (httphl7orgfhirsearchhtml see _count parameter)

bull $expand results have a separate paging mechanism (count offset)

bull Can reduce bandwidthresponse times by requesting the specific elements you wantbull includeDefinition includeDesignations on $expand

bull property on $lookup

bull _elements on searchreadoperation results

Basic Terminology Services | Jim Steel38 |

Tips and Tricks (cont)bull Batch

bull A lot of terminology operations are small ndash it can often be more efficient to send them as a batch (httphl7orgfhirhttphtmltransaction) then deal with the result when it comes back

bull Manage content types (Content-Type Accept _format)bull JSON XML

bull Accept-Encoding gzipbull More tips in the advanced session

Warning A lot of these can be server-dependent Theyrsquore not proprietary but you should check support for them by your terminology server

Basic Terminology Services | Jim Steel39 |

What if I am hellipbull Designing interfaces for data entry

bull Choose your CodeSystems (ideally standardized ones)

bull Choose or define your ValueSets

bull If your ValueSet is small a picklist can be populated using $expand

bull If your ValueSet is large a typeahead widget can use $expandfilter=xxx

Basic Terminology Services | Jim Steel40 |

bull Making a profilebull Choosedefine which code systems you want to allow

bull Make ValueSets with lists of codes you want to allow

ndash Make sure you respect the binding strength

bull Set up some processes for maintainingupdating them

ndash Concepts can become deprecated over time you can sometimes use ConceptMaps to find which concepts have changed

Basic Terminology Services | Jim Steel41 |

What if I amhellip

What if I am hellipbull Analyzingvalidating coded data

bull Choose your CodeSystemValueSets

bull Use $validate-code to check whether the codes are valid in the context in which yoursquore using them and whether the display text is correct (many clinical systems allow users to override the display text for the term)

bull Use $translate to map lsquoforeignrsquo coded data into a normalized CodeSystemValueSet for analysis

bull Use $subsumes $closure or $validate-code with an inline ValueSet to categorize data

Basic Terminology Services | Jim Steel42 |

What if I am hellipbull Exploring a set of concepts and how they relate to one another

bull Use $lookup to retrieve their properties and display them in a table

bull Use the lsquochildrsquo and lsquoparentrsquo properties or $subsumes$closure to explore the hierarchy that exists between concepts

Basic Terminology Services | Jim Steel43 |

Obligatory plugs

Terminology server httpsontoservercsiroau

Terminology browser httpsontoservercsiroaushrimp

Terminology resource editorhttpsontoservercsiroausnapper2-dev

Basic Terminology Services | Jim Steel44 |

Page 7: Basic FHIR Terminology Services - Home - FHIR DevDays · 2019-03-19 · Terminology: why •Terminology is the basis of shared meaning between different systems •StructureDefinitions

CodeSystem Structure (cont)

Basic Terminology Services | Jim Steel8 |

CodeSystem Structure (cont)

Basic Terminology Services | Jim Steel9 |

CodeSystem example

Basic Terminology Services | Jim Steel10 |

Basic Terminology Services | Jim Steel11 |

CodeSystem example (cont)

Basic Terminology Services | Jim Steel12 |

CodeSystem example (cont)

CodeSystem operations $lookupbull Type level only idempotent (GETPOST CodeSystem$lookup)

bull Retrieve details about a code (as codesystemversion or Coding)

bull Can be used to determine whether a code exists in the CodeSystem

bull Can be used to retrieve specificall propertiesdesignations

Basic Terminology Services | Jim Steel13 |

$lookup exampleGET httpsontoservercsiroaustu3-latestCodeSystem$lookupsystem=httpcsiroaucsau-jurisdictionsampcode=WAampproperty=displayampproperty=capital

Basic Terminology Services | Jim Steel14 |

CodeSystem operations $subsumesbull Type or instance level idempotent

bull GET CodeSystemid$subsumes

bull POST CodeSystem$subsumes (must have lsquosystemrsquo parameter)

bull Check what (if any) subsumption relationship exists between two codesbull codeA and codeB as codesystemversion or codingA and codingB

bull Result will be lsquoequivalentrsquo lsquosubsumesrsquo lsquosubsumed_byrsquo lsquonot_subsumedrsquo

bull Depends on the code systemrsquos lsquohierarchyMeaningrsquo

bull Can also use $closure see the advanced talk

Basic Terminology Services | Jim Steel15 |

$subsumes exampleGET httpsontoservercsiroaustu3-latestCodeSystem$subsumessystem=httpcsiroaucsau-jurisdictionsampcodeA=AUampcodeB=QLD

Basic Terminology Services | Jim Steel16 |

ValueSetbull A set of codes drawn from one or more CodeSystems

bull Can be used to define a set of codes (rsquocomposersquo)

bull Can be used to represent the result of an expansion of a ValueSet(lsquoexpansionrsquo)

Basic Terminology Services | Jim Steel17 |

ValueSet Structure

Basic Terminology Services | Jim Steel18 |

ValueSet Structure (cont)

Basic Terminology Services | Jim Steel19 |

ValueSet Structure (cont)

Basic Terminology Services | Jim Steel20 |

ValueSet example definition

Basic Terminology Services | Jim Steel21 |

Valueset operations $expandbull Type or instance level idempotent

bull GETPOST ValueSet$expand (must have rsquourlrsquo or lsquovalueSetrsquo)

bull GETPOST ValueSetid$expand

bull Retrieve the expansion of the ValueSet subject to a number of parametersbull Result is a ValueSet with an lsquoexpansionrsquo element

bull Parameters include filter count offset includeDesignations includeDefinition activeOnly excludeNested excludeNotForUI excludePostCoordinated displayLanguage limitedExpansion profile

bull This is the mainbest way to search for a code

Basic Terminology Services | Jim Steel22 |

$expand examplePOST httpsontoservercsiroaustu3-latestValueSet$expand (with the resource in the body)

Basic Terminology Services | Jim Steel23 |

ValueSet operations $validate-codebull Type or instance level idempotent

bull GETPOST ValueSet$validate-code (must have rsquourlrsquo or lsquovalueSetrsquo)

bull GETPOST ValueSetid$validate-code

bull Validate a code (and display text) against a ValueSetbull Determine whether the code is included in the ValueSet

bull (optionally) Determine whether the provided display text is the correct display text for the code

bull Code as codesystemversion or coding or CodeableConcept (multiple)

bull This is the main method for validating coded data

Basic Terminology Services | Jim Steel24 |

$validate-code examplePOST httpsontoservercsiroaustu3-latestValueSet$validate-code

Basic Terminology Services | Jim Steel25 |

Basic Terminology Services | Jim Steel26 |

$validate-code example (cont)

Well-known Terminologiesbull Terminologies such as SNOMED-CT LOINC RxNorm have specific

mappings into FHIR terminology resources with standardisedCodeSystemsbull Standard CodeSystem filtersproperties

bull Implicit ValueSets

bull Implicit ConceptMaps

Basic Terminology Services | Jim Steel27 |

Well-known Terminologies SNOMED-CTbull httpsnomedinfosct([edition](version[date]))bull Filters by subsumption by refset by ECL expressionbull Implicit ValueSets

bull All codes httpsnomedinfosctfhir_vs

bull By subsumption httpsnomedinfosctfhir_vs=isa404684003

bull List of refsets httpsnomedinfosctfhir_vs=refset

bull All codes in a refset httpsnomedinfosctfhir_vs=refset734138000

bull Implicit ConceptMapsbull Historical associations httpsnomedinfosctfhir_cm=900000000000527005

bull For more detail see the advanced session

Basic Terminology Services | Jim Steel28 |

Well-known Terminologies LOINCbull httploincorg

bull Filters parts copyright status multi-axial hierarchy

bull Implicit ValueSetsbull All LOINC codes httploincorgvs

bull Answer Lists httploincorgvsLL715-4

bull Hierarchy httploincorgvsLP29693-6

Basic Terminology Services | Jim Steel29 |

ConceptMapbull Represents a code-to-code mapping typically from a source

ValueSet to a target ValueSet

Basic Terminology Services | Jim Steel30 |

ConceptMap Structure

Basic Terminology Services | Jim Steel31 |

ConceptMap Structure (cont)

Basic Terminology Services | Jim Steel32 |

ConceptMap example

Basic Terminology Services | Jim Steel33 |

ConceptMap operations $translatebull Translate a code from one ValueSet to another according to the

serverrsquos resources andor other knowledge available to the server

bull Typically this means look up a ConceptMap resource and show the corresponding map entries (but not always)

bull Code as codesystemversion or coding or CodeableConcept

bull Specify source ValueSet and target ValueSet (or targetSystem)

bull Can be run in reverse (given target show source)

bull Results come back as Parameters with lsquomatchrsquo elements

Basic Terminology Services | Jim Steel34 |

$translate exampleGET httpsontoservercsiroaustu3-latestConceptMapau-jurisdictions$translatecode=QLDampsystem=httpcsiroaucsau-jurisdictionsamptarget=httpsnomedinfosctfhir_vs

Basic Terminology Services | Jim Steel35 |

Terminology Servicebull A server that implements all these can claim to be a terminology

server by instantiating httphl7orgfhirCapabilityStatementterminology-server in its CapabilityStatementbull CodeSystem ValueSet ConceptMap readsearch

bull $expand $validate-code $lookup $translate $closure

Basic Terminology Services | Jim Steel36 |

Terminology in FHIR Searchbull A lot of search parameters in FHIR are of type lsquotokenrsquo

bull These can leverage terminology services

bull abovebelowbull Eg Conditionbody-sitebelow=httpsnomedinfosct|272673000 (all

Conditions where the finding site is a descendent of Bone Structure

bull innot-inbull Eg

ProcedureRequestcodein=httpsnomedinfosctfhir_vs=refset32570361000036108 (all ProcedureRequests in the Imagine Procedure refset

Basic Terminology Services | Jim Steel37 |

Tips and tricksbull Paging

bull Search results can be paged (httphl7orgfhirsearchhtml see _count parameter)

bull $expand results have a separate paging mechanism (count offset)

bull Can reduce bandwidthresponse times by requesting the specific elements you wantbull includeDefinition includeDesignations on $expand

bull property on $lookup

bull _elements on searchreadoperation results

Basic Terminology Services | Jim Steel38 |

Tips and Tricks (cont)bull Batch

bull A lot of terminology operations are small ndash it can often be more efficient to send them as a batch (httphl7orgfhirhttphtmltransaction) then deal with the result when it comes back

bull Manage content types (Content-Type Accept _format)bull JSON XML

bull Accept-Encoding gzipbull More tips in the advanced session

Warning A lot of these can be server-dependent Theyrsquore not proprietary but you should check support for them by your terminology server

Basic Terminology Services | Jim Steel39 |

What if I am hellipbull Designing interfaces for data entry

bull Choose your CodeSystems (ideally standardized ones)

bull Choose or define your ValueSets

bull If your ValueSet is small a picklist can be populated using $expand

bull If your ValueSet is large a typeahead widget can use $expandfilter=xxx

Basic Terminology Services | Jim Steel40 |

bull Making a profilebull Choosedefine which code systems you want to allow

bull Make ValueSets with lists of codes you want to allow

ndash Make sure you respect the binding strength

bull Set up some processes for maintainingupdating them

ndash Concepts can become deprecated over time you can sometimes use ConceptMaps to find which concepts have changed

Basic Terminology Services | Jim Steel41 |

What if I amhellip

What if I am hellipbull Analyzingvalidating coded data

bull Choose your CodeSystemValueSets

bull Use $validate-code to check whether the codes are valid in the context in which yoursquore using them and whether the display text is correct (many clinical systems allow users to override the display text for the term)

bull Use $translate to map lsquoforeignrsquo coded data into a normalized CodeSystemValueSet for analysis

bull Use $subsumes $closure or $validate-code with an inline ValueSet to categorize data

Basic Terminology Services | Jim Steel42 |

What if I am hellipbull Exploring a set of concepts and how they relate to one another

bull Use $lookup to retrieve their properties and display them in a table

bull Use the lsquochildrsquo and lsquoparentrsquo properties or $subsumes$closure to explore the hierarchy that exists between concepts

Basic Terminology Services | Jim Steel43 |

Obligatory plugs

Terminology server httpsontoservercsiroau

Terminology browser httpsontoservercsiroaushrimp

Terminology resource editorhttpsontoservercsiroausnapper2-dev

Basic Terminology Services | Jim Steel44 |

Page 8: Basic FHIR Terminology Services - Home - FHIR DevDays · 2019-03-19 · Terminology: why •Terminology is the basis of shared meaning between different systems •StructureDefinitions

CodeSystem Structure (cont)

Basic Terminology Services | Jim Steel9 |

CodeSystem example

Basic Terminology Services | Jim Steel10 |

Basic Terminology Services | Jim Steel11 |

CodeSystem example (cont)

Basic Terminology Services | Jim Steel12 |

CodeSystem example (cont)

CodeSystem operations $lookupbull Type level only idempotent (GETPOST CodeSystem$lookup)

bull Retrieve details about a code (as codesystemversion or Coding)

bull Can be used to determine whether a code exists in the CodeSystem

bull Can be used to retrieve specificall propertiesdesignations

Basic Terminology Services | Jim Steel13 |

$lookup exampleGET httpsontoservercsiroaustu3-latestCodeSystem$lookupsystem=httpcsiroaucsau-jurisdictionsampcode=WAampproperty=displayampproperty=capital

Basic Terminology Services | Jim Steel14 |

CodeSystem operations $subsumesbull Type or instance level idempotent

bull GET CodeSystemid$subsumes

bull POST CodeSystem$subsumes (must have lsquosystemrsquo parameter)

bull Check what (if any) subsumption relationship exists between two codesbull codeA and codeB as codesystemversion or codingA and codingB

bull Result will be lsquoequivalentrsquo lsquosubsumesrsquo lsquosubsumed_byrsquo lsquonot_subsumedrsquo

bull Depends on the code systemrsquos lsquohierarchyMeaningrsquo

bull Can also use $closure see the advanced talk

Basic Terminology Services | Jim Steel15 |

$subsumes exampleGET httpsontoservercsiroaustu3-latestCodeSystem$subsumessystem=httpcsiroaucsau-jurisdictionsampcodeA=AUampcodeB=QLD

Basic Terminology Services | Jim Steel16 |

ValueSetbull A set of codes drawn from one or more CodeSystems

bull Can be used to define a set of codes (rsquocomposersquo)

bull Can be used to represent the result of an expansion of a ValueSet(lsquoexpansionrsquo)

Basic Terminology Services | Jim Steel17 |

ValueSet Structure

Basic Terminology Services | Jim Steel18 |

ValueSet Structure (cont)

Basic Terminology Services | Jim Steel19 |

ValueSet Structure (cont)

Basic Terminology Services | Jim Steel20 |

ValueSet example definition

Basic Terminology Services | Jim Steel21 |

Valueset operations $expandbull Type or instance level idempotent

bull GETPOST ValueSet$expand (must have rsquourlrsquo or lsquovalueSetrsquo)

bull GETPOST ValueSetid$expand

bull Retrieve the expansion of the ValueSet subject to a number of parametersbull Result is a ValueSet with an lsquoexpansionrsquo element

bull Parameters include filter count offset includeDesignations includeDefinition activeOnly excludeNested excludeNotForUI excludePostCoordinated displayLanguage limitedExpansion profile

bull This is the mainbest way to search for a code

Basic Terminology Services | Jim Steel22 |

$expand examplePOST httpsontoservercsiroaustu3-latestValueSet$expand (with the resource in the body)

Basic Terminology Services | Jim Steel23 |

ValueSet operations $validate-codebull Type or instance level idempotent

bull GETPOST ValueSet$validate-code (must have rsquourlrsquo or lsquovalueSetrsquo)

bull GETPOST ValueSetid$validate-code

bull Validate a code (and display text) against a ValueSetbull Determine whether the code is included in the ValueSet

bull (optionally) Determine whether the provided display text is the correct display text for the code

bull Code as codesystemversion or coding or CodeableConcept (multiple)

bull This is the main method for validating coded data

Basic Terminology Services | Jim Steel24 |

$validate-code examplePOST httpsontoservercsiroaustu3-latestValueSet$validate-code

Basic Terminology Services | Jim Steel25 |

Basic Terminology Services | Jim Steel26 |

$validate-code example (cont)

Well-known Terminologiesbull Terminologies such as SNOMED-CT LOINC RxNorm have specific

mappings into FHIR terminology resources with standardisedCodeSystemsbull Standard CodeSystem filtersproperties

bull Implicit ValueSets

bull Implicit ConceptMaps

Basic Terminology Services | Jim Steel27 |

Well-known Terminologies SNOMED-CTbull httpsnomedinfosct([edition](version[date]))bull Filters by subsumption by refset by ECL expressionbull Implicit ValueSets

bull All codes httpsnomedinfosctfhir_vs

bull By subsumption httpsnomedinfosctfhir_vs=isa404684003

bull List of refsets httpsnomedinfosctfhir_vs=refset

bull All codes in a refset httpsnomedinfosctfhir_vs=refset734138000

bull Implicit ConceptMapsbull Historical associations httpsnomedinfosctfhir_cm=900000000000527005

bull For more detail see the advanced session

Basic Terminology Services | Jim Steel28 |

Well-known Terminologies LOINCbull httploincorg

bull Filters parts copyright status multi-axial hierarchy

bull Implicit ValueSetsbull All LOINC codes httploincorgvs

bull Answer Lists httploincorgvsLL715-4

bull Hierarchy httploincorgvsLP29693-6

Basic Terminology Services | Jim Steel29 |

ConceptMapbull Represents a code-to-code mapping typically from a source

ValueSet to a target ValueSet

Basic Terminology Services | Jim Steel30 |

ConceptMap Structure

Basic Terminology Services | Jim Steel31 |

ConceptMap Structure (cont)

Basic Terminology Services | Jim Steel32 |

ConceptMap example

Basic Terminology Services | Jim Steel33 |

ConceptMap operations $translatebull Translate a code from one ValueSet to another according to the

serverrsquos resources andor other knowledge available to the server

bull Typically this means look up a ConceptMap resource and show the corresponding map entries (but not always)

bull Code as codesystemversion or coding or CodeableConcept

bull Specify source ValueSet and target ValueSet (or targetSystem)

bull Can be run in reverse (given target show source)

bull Results come back as Parameters with lsquomatchrsquo elements

Basic Terminology Services | Jim Steel34 |

$translate exampleGET httpsontoservercsiroaustu3-latestConceptMapau-jurisdictions$translatecode=QLDampsystem=httpcsiroaucsau-jurisdictionsamptarget=httpsnomedinfosctfhir_vs

Basic Terminology Services | Jim Steel35 |

Terminology Servicebull A server that implements all these can claim to be a terminology

server by instantiating httphl7orgfhirCapabilityStatementterminology-server in its CapabilityStatementbull CodeSystem ValueSet ConceptMap readsearch

bull $expand $validate-code $lookup $translate $closure

Basic Terminology Services | Jim Steel36 |

Terminology in FHIR Searchbull A lot of search parameters in FHIR are of type lsquotokenrsquo

bull These can leverage terminology services

bull abovebelowbull Eg Conditionbody-sitebelow=httpsnomedinfosct|272673000 (all

Conditions where the finding site is a descendent of Bone Structure

bull innot-inbull Eg

ProcedureRequestcodein=httpsnomedinfosctfhir_vs=refset32570361000036108 (all ProcedureRequests in the Imagine Procedure refset

Basic Terminology Services | Jim Steel37 |

Tips and tricksbull Paging

bull Search results can be paged (httphl7orgfhirsearchhtml see _count parameter)

bull $expand results have a separate paging mechanism (count offset)

bull Can reduce bandwidthresponse times by requesting the specific elements you wantbull includeDefinition includeDesignations on $expand

bull property on $lookup

bull _elements on searchreadoperation results

Basic Terminology Services | Jim Steel38 |

Tips and Tricks (cont)bull Batch

bull A lot of terminology operations are small ndash it can often be more efficient to send them as a batch (httphl7orgfhirhttphtmltransaction) then deal with the result when it comes back

bull Manage content types (Content-Type Accept _format)bull JSON XML

bull Accept-Encoding gzipbull More tips in the advanced session

Warning A lot of these can be server-dependent Theyrsquore not proprietary but you should check support for them by your terminology server

Basic Terminology Services | Jim Steel39 |

What if I am hellipbull Designing interfaces for data entry

bull Choose your CodeSystems (ideally standardized ones)

bull Choose or define your ValueSets

bull If your ValueSet is small a picklist can be populated using $expand

bull If your ValueSet is large a typeahead widget can use $expandfilter=xxx

Basic Terminology Services | Jim Steel40 |

bull Making a profilebull Choosedefine which code systems you want to allow

bull Make ValueSets with lists of codes you want to allow

ndash Make sure you respect the binding strength

bull Set up some processes for maintainingupdating them

ndash Concepts can become deprecated over time you can sometimes use ConceptMaps to find which concepts have changed

Basic Terminology Services | Jim Steel41 |

What if I amhellip

What if I am hellipbull Analyzingvalidating coded data

bull Choose your CodeSystemValueSets

bull Use $validate-code to check whether the codes are valid in the context in which yoursquore using them and whether the display text is correct (many clinical systems allow users to override the display text for the term)

bull Use $translate to map lsquoforeignrsquo coded data into a normalized CodeSystemValueSet for analysis

bull Use $subsumes $closure or $validate-code with an inline ValueSet to categorize data

Basic Terminology Services | Jim Steel42 |

What if I am hellipbull Exploring a set of concepts and how they relate to one another

bull Use $lookup to retrieve their properties and display them in a table

bull Use the lsquochildrsquo and lsquoparentrsquo properties or $subsumes$closure to explore the hierarchy that exists between concepts

Basic Terminology Services | Jim Steel43 |

Obligatory plugs

Terminology server httpsontoservercsiroau

Terminology browser httpsontoservercsiroaushrimp

Terminology resource editorhttpsontoservercsiroausnapper2-dev

Basic Terminology Services | Jim Steel44 |

Page 9: Basic FHIR Terminology Services - Home - FHIR DevDays · 2019-03-19 · Terminology: why •Terminology is the basis of shared meaning between different systems •StructureDefinitions

CodeSystem example

Basic Terminology Services | Jim Steel10 |

Basic Terminology Services | Jim Steel11 |

CodeSystem example (cont)

Basic Terminology Services | Jim Steel12 |

CodeSystem example (cont)

CodeSystem operations $lookupbull Type level only idempotent (GETPOST CodeSystem$lookup)

bull Retrieve details about a code (as codesystemversion or Coding)

bull Can be used to determine whether a code exists in the CodeSystem

bull Can be used to retrieve specificall propertiesdesignations

Basic Terminology Services | Jim Steel13 |

$lookup exampleGET httpsontoservercsiroaustu3-latestCodeSystem$lookupsystem=httpcsiroaucsau-jurisdictionsampcode=WAampproperty=displayampproperty=capital

Basic Terminology Services | Jim Steel14 |

CodeSystem operations $subsumesbull Type or instance level idempotent

bull GET CodeSystemid$subsumes

bull POST CodeSystem$subsumes (must have lsquosystemrsquo parameter)

bull Check what (if any) subsumption relationship exists between two codesbull codeA and codeB as codesystemversion or codingA and codingB

bull Result will be lsquoequivalentrsquo lsquosubsumesrsquo lsquosubsumed_byrsquo lsquonot_subsumedrsquo

bull Depends on the code systemrsquos lsquohierarchyMeaningrsquo

bull Can also use $closure see the advanced talk

Basic Terminology Services | Jim Steel15 |

$subsumes exampleGET httpsontoservercsiroaustu3-latestCodeSystem$subsumessystem=httpcsiroaucsau-jurisdictionsampcodeA=AUampcodeB=QLD

Basic Terminology Services | Jim Steel16 |

ValueSetbull A set of codes drawn from one or more CodeSystems

bull Can be used to define a set of codes (rsquocomposersquo)

bull Can be used to represent the result of an expansion of a ValueSet(lsquoexpansionrsquo)

Basic Terminology Services | Jim Steel17 |

ValueSet Structure

Basic Terminology Services | Jim Steel18 |

ValueSet Structure (cont)

Basic Terminology Services | Jim Steel19 |

ValueSet Structure (cont)

Basic Terminology Services | Jim Steel20 |

ValueSet example definition

Basic Terminology Services | Jim Steel21 |

Valueset operations $expandbull Type or instance level idempotent

bull GETPOST ValueSet$expand (must have rsquourlrsquo or lsquovalueSetrsquo)

bull GETPOST ValueSetid$expand

bull Retrieve the expansion of the ValueSet subject to a number of parametersbull Result is a ValueSet with an lsquoexpansionrsquo element

bull Parameters include filter count offset includeDesignations includeDefinition activeOnly excludeNested excludeNotForUI excludePostCoordinated displayLanguage limitedExpansion profile

bull This is the mainbest way to search for a code

Basic Terminology Services | Jim Steel22 |

$expand examplePOST httpsontoservercsiroaustu3-latestValueSet$expand (with the resource in the body)

Basic Terminology Services | Jim Steel23 |

ValueSet operations $validate-codebull Type or instance level idempotent

bull GETPOST ValueSet$validate-code (must have rsquourlrsquo or lsquovalueSetrsquo)

bull GETPOST ValueSetid$validate-code

bull Validate a code (and display text) against a ValueSetbull Determine whether the code is included in the ValueSet

bull (optionally) Determine whether the provided display text is the correct display text for the code

bull Code as codesystemversion or coding or CodeableConcept (multiple)

bull This is the main method for validating coded data

Basic Terminology Services | Jim Steel24 |

$validate-code examplePOST httpsontoservercsiroaustu3-latestValueSet$validate-code

Basic Terminology Services | Jim Steel25 |

Basic Terminology Services | Jim Steel26 |

$validate-code example (cont)

Well-known Terminologiesbull Terminologies such as SNOMED-CT LOINC RxNorm have specific

mappings into FHIR terminology resources with standardisedCodeSystemsbull Standard CodeSystem filtersproperties

bull Implicit ValueSets

bull Implicit ConceptMaps

Basic Terminology Services | Jim Steel27 |

Well-known Terminologies SNOMED-CTbull httpsnomedinfosct([edition](version[date]))bull Filters by subsumption by refset by ECL expressionbull Implicit ValueSets

bull All codes httpsnomedinfosctfhir_vs

bull By subsumption httpsnomedinfosctfhir_vs=isa404684003

bull List of refsets httpsnomedinfosctfhir_vs=refset

bull All codes in a refset httpsnomedinfosctfhir_vs=refset734138000

bull Implicit ConceptMapsbull Historical associations httpsnomedinfosctfhir_cm=900000000000527005

bull For more detail see the advanced session

Basic Terminology Services | Jim Steel28 |

Well-known Terminologies LOINCbull httploincorg

bull Filters parts copyright status multi-axial hierarchy

bull Implicit ValueSetsbull All LOINC codes httploincorgvs

bull Answer Lists httploincorgvsLL715-4

bull Hierarchy httploincorgvsLP29693-6

Basic Terminology Services | Jim Steel29 |

ConceptMapbull Represents a code-to-code mapping typically from a source

ValueSet to a target ValueSet

Basic Terminology Services | Jim Steel30 |

ConceptMap Structure

Basic Terminology Services | Jim Steel31 |

ConceptMap Structure (cont)

Basic Terminology Services | Jim Steel32 |

ConceptMap example

Basic Terminology Services | Jim Steel33 |

ConceptMap operations $translatebull Translate a code from one ValueSet to another according to the

serverrsquos resources andor other knowledge available to the server

bull Typically this means look up a ConceptMap resource and show the corresponding map entries (but not always)

bull Code as codesystemversion or coding or CodeableConcept

bull Specify source ValueSet and target ValueSet (or targetSystem)

bull Can be run in reverse (given target show source)

bull Results come back as Parameters with lsquomatchrsquo elements

Basic Terminology Services | Jim Steel34 |

$translate exampleGET httpsontoservercsiroaustu3-latestConceptMapau-jurisdictions$translatecode=QLDampsystem=httpcsiroaucsau-jurisdictionsamptarget=httpsnomedinfosctfhir_vs

Basic Terminology Services | Jim Steel35 |

Terminology Servicebull A server that implements all these can claim to be a terminology

server by instantiating httphl7orgfhirCapabilityStatementterminology-server in its CapabilityStatementbull CodeSystem ValueSet ConceptMap readsearch

bull $expand $validate-code $lookup $translate $closure

Basic Terminology Services | Jim Steel36 |

Terminology in FHIR Searchbull A lot of search parameters in FHIR are of type lsquotokenrsquo

bull These can leverage terminology services

bull abovebelowbull Eg Conditionbody-sitebelow=httpsnomedinfosct|272673000 (all

Conditions where the finding site is a descendent of Bone Structure

bull innot-inbull Eg

ProcedureRequestcodein=httpsnomedinfosctfhir_vs=refset32570361000036108 (all ProcedureRequests in the Imagine Procedure refset

Basic Terminology Services | Jim Steel37 |

Tips and tricksbull Paging

bull Search results can be paged (httphl7orgfhirsearchhtml see _count parameter)

bull $expand results have a separate paging mechanism (count offset)

bull Can reduce bandwidthresponse times by requesting the specific elements you wantbull includeDefinition includeDesignations on $expand

bull property on $lookup

bull _elements on searchreadoperation results

Basic Terminology Services | Jim Steel38 |

Tips and Tricks (cont)bull Batch

bull A lot of terminology operations are small ndash it can often be more efficient to send them as a batch (httphl7orgfhirhttphtmltransaction) then deal with the result when it comes back

bull Manage content types (Content-Type Accept _format)bull JSON XML

bull Accept-Encoding gzipbull More tips in the advanced session

Warning A lot of these can be server-dependent Theyrsquore not proprietary but you should check support for them by your terminology server

Basic Terminology Services | Jim Steel39 |

What if I am hellipbull Designing interfaces for data entry

bull Choose your CodeSystems (ideally standardized ones)

bull Choose or define your ValueSets

bull If your ValueSet is small a picklist can be populated using $expand

bull If your ValueSet is large a typeahead widget can use $expandfilter=xxx

Basic Terminology Services | Jim Steel40 |

bull Making a profilebull Choosedefine which code systems you want to allow

bull Make ValueSets with lists of codes you want to allow

ndash Make sure you respect the binding strength

bull Set up some processes for maintainingupdating them

ndash Concepts can become deprecated over time you can sometimes use ConceptMaps to find which concepts have changed

Basic Terminology Services | Jim Steel41 |

What if I amhellip

What if I am hellipbull Analyzingvalidating coded data

bull Choose your CodeSystemValueSets

bull Use $validate-code to check whether the codes are valid in the context in which yoursquore using them and whether the display text is correct (many clinical systems allow users to override the display text for the term)

bull Use $translate to map lsquoforeignrsquo coded data into a normalized CodeSystemValueSet for analysis

bull Use $subsumes $closure or $validate-code with an inline ValueSet to categorize data

Basic Terminology Services | Jim Steel42 |

What if I am hellipbull Exploring a set of concepts and how they relate to one another

bull Use $lookup to retrieve their properties and display them in a table

bull Use the lsquochildrsquo and lsquoparentrsquo properties or $subsumes$closure to explore the hierarchy that exists between concepts

Basic Terminology Services | Jim Steel43 |

Obligatory plugs

Terminology server httpsontoservercsiroau

Terminology browser httpsontoservercsiroaushrimp

Terminology resource editorhttpsontoservercsiroausnapper2-dev

Basic Terminology Services | Jim Steel44 |

Page 10: Basic FHIR Terminology Services - Home - FHIR DevDays · 2019-03-19 · Terminology: why •Terminology is the basis of shared meaning between different systems •StructureDefinitions

Basic Terminology Services | Jim Steel11 |

CodeSystem example (cont)

Basic Terminology Services | Jim Steel12 |

CodeSystem example (cont)

CodeSystem operations $lookupbull Type level only idempotent (GETPOST CodeSystem$lookup)

bull Retrieve details about a code (as codesystemversion or Coding)

bull Can be used to determine whether a code exists in the CodeSystem

bull Can be used to retrieve specificall propertiesdesignations

Basic Terminology Services | Jim Steel13 |

$lookup exampleGET httpsontoservercsiroaustu3-latestCodeSystem$lookupsystem=httpcsiroaucsau-jurisdictionsampcode=WAampproperty=displayampproperty=capital

Basic Terminology Services | Jim Steel14 |

CodeSystem operations $subsumesbull Type or instance level idempotent

bull GET CodeSystemid$subsumes

bull POST CodeSystem$subsumes (must have lsquosystemrsquo parameter)

bull Check what (if any) subsumption relationship exists between two codesbull codeA and codeB as codesystemversion or codingA and codingB

bull Result will be lsquoequivalentrsquo lsquosubsumesrsquo lsquosubsumed_byrsquo lsquonot_subsumedrsquo

bull Depends on the code systemrsquos lsquohierarchyMeaningrsquo

bull Can also use $closure see the advanced talk

Basic Terminology Services | Jim Steel15 |

$subsumes exampleGET httpsontoservercsiroaustu3-latestCodeSystem$subsumessystem=httpcsiroaucsau-jurisdictionsampcodeA=AUampcodeB=QLD

Basic Terminology Services | Jim Steel16 |

ValueSetbull A set of codes drawn from one or more CodeSystems

bull Can be used to define a set of codes (rsquocomposersquo)

bull Can be used to represent the result of an expansion of a ValueSet(lsquoexpansionrsquo)

Basic Terminology Services | Jim Steel17 |

ValueSet Structure

Basic Terminology Services | Jim Steel18 |

ValueSet Structure (cont)

Basic Terminology Services | Jim Steel19 |

ValueSet Structure (cont)

Basic Terminology Services | Jim Steel20 |

ValueSet example definition

Basic Terminology Services | Jim Steel21 |

Valueset operations $expandbull Type or instance level idempotent

bull GETPOST ValueSet$expand (must have rsquourlrsquo or lsquovalueSetrsquo)

bull GETPOST ValueSetid$expand

bull Retrieve the expansion of the ValueSet subject to a number of parametersbull Result is a ValueSet with an lsquoexpansionrsquo element

bull Parameters include filter count offset includeDesignations includeDefinition activeOnly excludeNested excludeNotForUI excludePostCoordinated displayLanguage limitedExpansion profile

bull This is the mainbest way to search for a code

Basic Terminology Services | Jim Steel22 |

$expand examplePOST httpsontoservercsiroaustu3-latestValueSet$expand (with the resource in the body)

Basic Terminology Services | Jim Steel23 |

ValueSet operations $validate-codebull Type or instance level idempotent

bull GETPOST ValueSet$validate-code (must have rsquourlrsquo or lsquovalueSetrsquo)

bull GETPOST ValueSetid$validate-code

bull Validate a code (and display text) against a ValueSetbull Determine whether the code is included in the ValueSet

bull (optionally) Determine whether the provided display text is the correct display text for the code

bull Code as codesystemversion or coding or CodeableConcept (multiple)

bull This is the main method for validating coded data

Basic Terminology Services | Jim Steel24 |

$validate-code examplePOST httpsontoservercsiroaustu3-latestValueSet$validate-code

Basic Terminology Services | Jim Steel25 |

Basic Terminology Services | Jim Steel26 |

$validate-code example (cont)

Well-known Terminologiesbull Terminologies such as SNOMED-CT LOINC RxNorm have specific

mappings into FHIR terminology resources with standardisedCodeSystemsbull Standard CodeSystem filtersproperties

bull Implicit ValueSets

bull Implicit ConceptMaps

Basic Terminology Services | Jim Steel27 |

Well-known Terminologies SNOMED-CTbull httpsnomedinfosct([edition](version[date]))bull Filters by subsumption by refset by ECL expressionbull Implicit ValueSets

bull All codes httpsnomedinfosctfhir_vs

bull By subsumption httpsnomedinfosctfhir_vs=isa404684003

bull List of refsets httpsnomedinfosctfhir_vs=refset

bull All codes in a refset httpsnomedinfosctfhir_vs=refset734138000

bull Implicit ConceptMapsbull Historical associations httpsnomedinfosctfhir_cm=900000000000527005

bull For more detail see the advanced session

Basic Terminology Services | Jim Steel28 |

Well-known Terminologies LOINCbull httploincorg

bull Filters parts copyright status multi-axial hierarchy

bull Implicit ValueSetsbull All LOINC codes httploincorgvs

bull Answer Lists httploincorgvsLL715-4

bull Hierarchy httploincorgvsLP29693-6

Basic Terminology Services | Jim Steel29 |

ConceptMapbull Represents a code-to-code mapping typically from a source

ValueSet to a target ValueSet

Basic Terminology Services | Jim Steel30 |

ConceptMap Structure

Basic Terminology Services | Jim Steel31 |

ConceptMap Structure (cont)

Basic Terminology Services | Jim Steel32 |

ConceptMap example

Basic Terminology Services | Jim Steel33 |

ConceptMap operations $translatebull Translate a code from one ValueSet to another according to the

serverrsquos resources andor other knowledge available to the server

bull Typically this means look up a ConceptMap resource and show the corresponding map entries (but not always)

bull Code as codesystemversion or coding or CodeableConcept

bull Specify source ValueSet and target ValueSet (or targetSystem)

bull Can be run in reverse (given target show source)

bull Results come back as Parameters with lsquomatchrsquo elements

Basic Terminology Services | Jim Steel34 |

$translate exampleGET httpsontoservercsiroaustu3-latestConceptMapau-jurisdictions$translatecode=QLDampsystem=httpcsiroaucsau-jurisdictionsamptarget=httpsnomedinfosctfhir_vs

Basic Terminology Services | Jim Steel35 |

Terminology Servicebull A server that implements all these can claim to be a terminology

server by instantiating httphl7orgfhirCapabilityStatementterminology-server in its CapabilityStatementbull CodeSystem ValueSet ConceptMap readsearch

bull $expand $validate-code $lookup $translate $closure

Basic Terminology Services | Jim Steel36 |

Terminology in FHIR Searchbull A lot of search parameters in FHIR are of type lsquotokenrsquo

bull These can leverage terminology services

bull abovebelowbull Eg Conditionbody-sitebelow=httpsnomedinfosct|272673000 (all

Conditions where the finding site is a descendent of Bone Structure

bull innot-inbull Eg

ProcedureRequestcodein=httpsnomedinfosctfhir_vs=refset32570361000036108 (all ProcedureRequests in the Imagine Procedure refset

Basic Terminology Services | Jim Steel37 |

Tips and tricksbull Paging

bull Search results can be paged (httphl7orgfhirsearchhtml see _count parameter)

bull $expand results have a separate paging mechanism (count offset)

bull Can reduce bandwidthresponse times by requesting the specific elements you wantbull includeDefinition includeDesignations on $expand

bull property on $lookup

bull _elements on searchreadoperation results

Basic Terminology Services | Jim Steel38 |

Tips and Tricks (cont)bull Batch

bull A lot of terminology operations are small ndash it can often be more efficient to send them as a batch (httphl7orgfhirhttphtmltransaction) then deal with the result when it comes back

bull Manage content types (Content-Type Accept _format)bull JSON XML

bull Accept-Encoding gzipbull More tips in the advanced session

Warning A lot of these can be server-dependent Theyrsquore not proprietary but you should check support for them by your terminology server

Basic Terminology Services | Jim Steel39 |

What if I am hellipbull Designing interfaces for data entry

bull Choose your CodeSystems (ideally standardized ones)

bull Choose or define your ValueSets

bull If your ValueSet is small a picklist can be populated using $expand

bull If your ValueSet is large a typeahead widget can use $expandfilter=xxx

Basic Terminology Services | Jim Steel40 |

bull Making a profilebull Choosedefine which code systems you want to allow

bull Make ValueSets with lists of codes you want to allow

ndash Make sure you respect the binding strength

bull Set up some processes for maintainingupdating them

ndash Concepts can become deprecated over time you can sometimes use ConceptMaps to find which concepts have changed

Basic Terminology Services | Jim Steel41 |

What if I amhellip

What if I am hellipbull Analyzingvalidating coded data

bull Choose your CodeSystemValueSets

bull Use $validate-code to check whether the codes are valid in the context in which yoursquore using them and whether the display text is correct (many clinical systems allow users to override the display text for the term)

bull Use $translate to map lsquoforeignrsquo coded data into a normalized CodeSystemValueSet for analysis

bull Use $subsumes $closure or $validate-code with an inline ValueSet to categorize data

Basic Terminology Services | Jim Steel42 |

What if I am hellipbull Exploring a set of concepts and how they relate to one another

bull Use $lookup to retrieve their properties and display them in a table

bull Use the lsquochildrsquo and lsquoparentrsquo properties or $subsumes$closure to explore the hierarchy that exists between concepts

Basic Terminology Services | Jim Steel43 |

Obligatory plugs

Terminology server httpsontoservercsiroau

Terminology browser httpsontoservercsiroaushrimp

Terminology resource editorhttpsontoservercsiroausnapper2-dev

Basic Terminology Services | Jim Steel44 |

Page 11: Basic FHIR Terminology Services - Home - FHIR DevDays · 2019-03-19 · Terminology: why •Terminology is the basis of shared meaning between different systems •StructureDefinitions

Basic Terminology Services | Jim Steel12 |

CodeSystem example (cont)

CodeSystem operations $lookupbull Type level only idempotent (GETPOST CodeSystem$lookup)

bull Retrieve details about a code (as codesystemversion or Coding)

bull Can be used to determine whether a code exists in the CodeSystem

bull Can be used to retrieve specificall propertiesdesignations

Basic Terminology Services | Jim Steel13 |

$lookup exampleGET httpsontoservercsiroaustu3-latestCodeSystem$lookupsystem=httpcsiroaucsau-jurisdictionsampcode=WAampproperty=displayampproperty=capital

Basic Terminology Services | Jim Steel14 |

CodeSystem operations $subsumesbull Type or instance level idempotent

bull GET CodeSystemid$subsumes

bull POST CodeSystem$subsumes (must have lsquosystemrsquo parameter)

bull Check what (if any) subsumption relationship exists between two codesbull codeA and codeB as codesystemversion or codingA and codingB

bull Result will be lsquoequivalentrsquo lsquosubsumesrsquo lsquosubsumed_byrsquo lsquonot_subsumedrsquo

bull Depends on the code systemrsquos lsquohierarchyMeaningrsquo

bull Can also use $closure see the advanced talk

Basic Terminology Services | Jim Steel15 |

$subsumes exampleGET httpsontoservercsiroaustu3-latestCodeSystem$subsumessystem=httpcsiroaucsau-jurisdictionsampcodeA=AUampcodeB=QLD

Basic Terminology Services | Jim Steel16 |

ValueSetbull A set of codes drawn from one or more CodeSystems

bull Can be used to define a set of codes (rsquocomposersquo)

bull Can be used to represent the result of an expansion of a ValueSet(lsquoexpansionrsquo)

Basic Terminology Services | Jim Steel17 |

ValueSet Structure

Basic Terminology Services | Jim Steel18 |

ValueSet Structure (cont)

Basic Terminology Services | Jim Steel19 |

ValueSet Structure (cont)

Basic Terminology Services | Jim Steel20 |

ValueSet example definition

Basic Terminology Services | Jim Steel21 |

Valueset operations $expandbull Type or instance level idempotent

bull GETPOST ValueSet$expand (must have rsquourlrsquo or lsquovalueSetrsquo)

bull GETPOST ValueSetid$expand

bull Retrieve the expansion of the ValueSet subject to a number of parametersbull Result is a ValueSet with an lsquoexpansionrsquo element

bull Parameters include filter count offset includeDesignations includeDefinition activeOnly excludeNested excludeNotForUI excludePostCoordinated displayLanguage limitedExpansion profile

bull This is the mainbest way to search for a code

Basic Terminology Services | Jim Steel22 |

$expand examplePOST httpsontoservercsiroaustu3-latestValueSet$expand (with the resource in the body)

Basic Terminology Services | Jim Steel23 |

ValueSet operations $validate-codebull Type or instance level idempotent

bull GETPOST ValueSet$validate-code (must have rsquourlrsquo or lsquovalueSetrsquo)

bull GETPOST ValueSetid$validate-code

bull Validate a code (and display text) against a ValueSetbull Determine whether the code is included in the ValueSet

bull (optionally) Determine whether the provided display text is the correct display text for the code

bull Code as codesystemversion or coding or CodeableConcept (multiple)

bull This is the main method for validating coded data

Basic Terminology Services | Jim Steel24 |

$validate-code examplePOST httpsontoservercsiroaustu3-latestValueSet$validate-code

Basic Terminology Services | Jim Steel25 |

Basic Terminology Services | Jim Steel26 |

$validate-code example (cont)

Well-known Terminologiesbull Terminologies such as SNOMED-CT LOINC RxNorm have specific

mappings into FHIR terminology resources with standardisedCodeSystemsbull Standard CodeSystem filtersproperties

bull Implicit ValueSets

bull Implicit ConceptMaps

Basic Terminology Services | Jim Steel27 |

Well-known Terminologies SNOMED-CTbull httpsnomedinfosct([edition](version[date]))bull Filters by subsumption by refset by ECL expressionbull Implicit ValueSets

bull All codes httpsnomedinfosctfhir_vs

bull By subsumption httpsnomedinfosctfhir_vs=isa404684003

bull List of refsets httpsnomedinfosctfhir_vs=refset

bull All codes in a refset httpsnomedinfosctfhir_vs=refset734138000

bull Implicit ConceptMapsbull Historical associations httpsnomedinfosctfhir_cm=900000000000527005

bull For more detail see the advanced session

Basic Terminology Services | Jim Steel28 |

Well-known Terminologies LOINCbull httploincorg

bull Filters parts copyright status multi-axial hierarchy

bull Implicit ValueSetsbull All LOINC codes httploincorgvs

bull Answer Lists httploincorgvsLL715-4

bull Hierarchy httploincorgvsLP29693-6

Basic Terminology Services | Jim Steel29 |

ConceptMapbull Represents a code-to-code mapping typically from a source

ValueSet to a target ValueSet

Basic Terminology Services | Jim Steel30 |

ConceptMap Structure

Basic Terminology Services | Jim Steel31 |

ConceptMap Structure (cont)

Basic Terminology Services | Jim Steel32 |

ConceptMap example

Basic Terminology Services | Jim Steel33 |

ConceptMap operations $translatebull Translate a code from one ValueSet to another according to the

serverrsquos resources andor other knowledge available to the server

bull Typically this means look up a ConceptMap resource and show the corresponding map entries (but not always)

bull Code as codesystemversion or coding or CodeableConcept

bull Specify source ValueSet and target ValueSet (or targetSystem)

bull Can be run in reverse (given target show source)

bull Results come back as Parameters with lsquomatchrsquo elements

Basic Terminology Services | Jim Steel34 |

$translate exampleGET httpsontoservercsiroaustu3-latestConceptMapau-jurisdictions$translatecode=QLDampsystem=httpcsiroaucsau-jurisdictionsamptarget=httpsnomedinfosctfhir_vs

Basic Terminology Services | Jim Steel35 |

Terminology Servicebull A server that implements all these can claim to be a terminology

server by instantiating httphl7orgfhirCapabilityStatementterminology-server in its CapabilityStatementbull CodeSystem ValueSet ConceptMap readsearch

bull $expand $validate-code $lookup $translate $closure

Basic Terminology Services | Jim Steel36 |

Terminology in FHIR Searchbull A lot of search parameters in FHIR are of type lsquotokenrsquo

bull These can leverage terminology services

bull abovebelowbull Eg Conditionbody-sitebelow=httpsnomedinfosct|272673000 (all

Conditions where the finding site is a descendent of Bone Structure

bull innot-inbull Eg

ProcedureRequestcodein=httpsnomedinfosctfhir_vs=refset32570361000036108 (all ProcedureRequests in the Imagine Procedure refset

Basic Terminology Services | Jim Steel37 |

Tips and tricksbull Paging

bull Search results can be paged (httphl7orgfhirsearchhtml see _count parameter)

bull $expand results have a separate paging mechanism (count offset)

bull Can reduce bandwidthresponse times by requesting the specific elements you wantbull includeDefinition includeDesignations on $expand

bull property on $lookup

bull _elements on searchreadoperation results

Basic Terminology Services | Jim Steel38 |

Tips and Tricks (cont)bull Batch

bull A lot of terminology operations are small ndash it can often be more efficient to send them as a batch (httphl7orgfhirhttphtmltransaction) then deal with the result when it comes back

bull Manage content types (Content-Type Accept _format)bull JSON XML

bull Accept-Encoding gzipbull More tips in the advanced session

Warning A lot of these can be server-dependent Theyrsquore not proprietary but you should check support for them by your terminology server

Basic Terminology Services | Jim Steel39 |

What if I am hellipbull Designing interfaces for data entry

bull Choose your CodeSystems (ideally standardized ones)

bull Choose or define your ValueSets

bull If your ValueSet is small a picklist can be populated using $expand

bull If your ValueSet is large a typeahead widget can use $expandfilter=xxx

Basic Terminology Services | Jim Steel40 |

bull Making a profilebull Choosedefine which code systems you want to allow

bull Make ValueSets with lists of codes you want to allow

ndash Make sure you respect the binding strength

bull Set up some processes for maintainingupdating them

ndash Concepts can become deprecated over time you can sometimes use ConceptMaps to find which concepts have changed

Basic Terminology Services | Jim Steel41 |

What if I amhellip

What if I am hellipbull Analyzingvalidating coded data

bull Choose your CodeSystemValueSets

bull Use $validate-code to check whether the codes are valid in the context in which yoursquore using them and whether the display text is correct (many clinical systems allow users to override the display text for the term)

bull Use $translate to map lsquoforeignrsquo coded data into a normalized CodeSystemValueSet for analysis

bull Use $subsumes $closure or $validate-code with an inline ValueSet to categorize data

Basic Terminology Services | Jim Steel42 |

What if I am hellipbull Exploring a set of concepts and how they relate to one another

bull Use $lookup to retrieve their properties and display them in a table

bull Use the lsquochildrsquo and lsquoparentrsquo properties or $subsumes$closure to explore the hierarchy that exists between concepts

Basic Terminology Services | Jim Steel43 |

Obligatory plugs

Terminology server httpsontoservercsiroau

Terminology browser httpsontoservercsiroaushrimp

Terminology resource editorhttpsontoservercsiroausnapper2-dev

Basic Terminology Services | Jim Steel44 |

Page 12: Basic FHIR Terminology Services - Home - FHIR DevDays · 2019-03-19 · Terminology: why •Terminology is the basis of shared meaning between different systems •StructureDefinitions

CodeSystem operations $lookupbull Type level only idempotent (GETPOST CodeSystem$lookup)

bull Retrieve details about a code (as codesystemversion or Coding)

bull Can be used to determine whether a code exists in the CodeSystem

bull Can be used to retrieve specificall propertiesdesignations

Basic Terminology Services | Jim Steel13 |

$lookup exampleGET httpsontoservercsiroaustu3-latestCodeSystem$lookupsystem=httpcsiroaucsau-jurisdictionsampcode=WAampproperty=displayampproperty=capital

Basic Terminology Services | Jim Steel14 |

CodeSystem operations $subsumesbull Type or instance level idempotent

bull GET CodeSystemid$subsumes

bull POST CodeSystem$subsumes (must have lsquosystemrsquo parameter)

bull Check what (if any) subsumption relationship exists between two codesbull codeA and codeB as codesystemversion or codingA and codingB

bull Result will be lsquoequivalentrsquo lsquosubsumesrsquo lsquosubsumed_byrsquo lsquonot_subsumedrsquo

bull Depends on the code systemrsquos lsquohierarchyMeaningrsquo

bull Can also use $closure see the advanced talk

Basic Terminology Services | Jim Steel15 |

$subsumes exampleGET httpsontoservercsiroaustu3-latestCodeSystem$subsumessystem=httpcsiroaucsau-jurisdictionsampcodeA=AUampcodeB=QLD

Basic Terminology Services | Jim Steel16 |

ValueSetbull A set of codes drawn from one or more CodeSystems

bull Can be used to define a set of codes (rsquocomposersquo)

bull Can be used to represent the result of an expansion of a ValueSet(lsquoexpansionrsquo)

Basic Terminology Services | Jim Steel17 |

ValueSet Structure

Basic Terminology Services | Jim Steel18 |

ValueSet Structure (cont)

Basic Terminology Services | Jim Steel19 |

ValueSet Structure (cont)

Basic Terminology Services | Jim Steel20 |

ValueSet example definition

Basic Terminology Services | Jim Steel21 |

Valueset operations $expandbull Type or instance level idempotent

bull GETPOST ValueSet$expand (must have rsquourlrsquo or lsquovalueSetrsquo)

bull GETPOST ValueSetid$expand

bull Retrieve the expansion of the ValueSet subject to a number of parametersbull Result is a ValueSet with an lsquoexpansionrsquo element

bull Parameters include filter count offset includeDesignations includeDefinition activeOnly excludeNested excludeNotForUI excludePostCoordinated displayLanguage limitedExpansion profile

bull This is the mainbest way to search for a code

Basic Terminology Services | Jim Steel22 |

$expand examplePOST httpsontoservercsiroaustu3-latestValueSet$expand (with the resource in the body)

Basic Terminology Services | Jim Steel23 |

ValueSet operations $validate-codebull Type or instance level idempotent

bull GETPOST ValueSet$validate-code (must have rsquourlrsquo or lsquovalueSetrsquo)

bull GETPOST ValueSetid$validate-code

bull Validate a code (and display text) against a ValueSetbull Determine whether the code is included in the ValueSet

bull (optionally) Determine whether the provided display text is the correct display text for the code

bull Code as codesystemversion or coding or CodeableConcept (multiple)

bull This is the main method for validating coded data

Basic Terminology Services | Jim Steel24 |

$validate-code examplePOST httpsontoservercsiroaustu3-latestValueSet$validate-code

Basic Terminology Services | Jim Steel25 |

Basic Terminology Services | Jim Steel26 |

$validate-code example (cont)

Well-known Terminologiesbull Terminologies such as SNOMED-CT LOINC RxNorm have specific

mappings into FHIR terminology resources with standardisedCodeSystemsbull Standard CodeSystem filtersproperties

bull Implicit ValueSets

bull Implicit ConceptMaps

Basic Terminology Services | Jim Steel27 |

Well-known Terminologies SNOMED-CTbull httpsnomedinfosct([edition](version[date]))bull Filters by subsumption by refset by ECL expressionbull Implicit ValueSets

bull All codes httpsnomedinfosctfhir_vs

bull By subsumption httpsnomedinfosctfhir_vs=isa404684003

bull List of refsets httpsnomedinfosctfhir_vs=refset

bull All codes in a refset httpsnomedinfosctfhir_vs=refset734138000

bull Implicit ConceptMapsbull Historical associations httpsnomedinfosctfhir_cm=900000000000527005

bull For more detail see the advanced session

Basic Terminology Services | Jim Steel28 |

Well-known Terminologies LOINCbull httploincorg

bull Filters parts copyright status multi-axial hierarchy

bull Implicit ValueSetsbull All LOINC codes httploincorgvs

bull Answer Lists httploincorgvsLL715-4

bull Hierarchy httploincorgvsLP29693-6

Basic Terminology Services | Jim Steel29 |

ConceptMapbull Represents a code-to-code mapping typically from a source

ValueSet to a target ValueSet

Basic Terminology Services | Jim Steel30 |

ConceptMap Structure

Basic Terminology Services | Jim Steel31 |

ConceptMap Structure (cont)

Basic Terminology Services | Jim Steel32 |

ConceptMap example

Basic Terminology Services | Jim Steel33 |

ConceptMap operations $translatebull Translate a code from one ValueSet to another according to the

serverrsquos resources andor other knowledge available to the server

bull Typically this means look up a ConceptMap resource and show the corresponding map entries (but not always)

bull Code as codesystemversion or coding or CodeableConcept

bull Specify source ValueSet and target ValueSet (or targetSystem)

bull Can be run in reverse (given target show source)

bull Results come back as Parameters with lsquomatchrsquo elements

Basic Terminology Services | Jim Steel34 |

$translate exampleGET httpsontoservercsiroaustu3-latestConceptMapau-jurisdictions$translatecode=QLDampsystem=httpcsiroaucsau-jurisdictionsamptarget=httpsnomedinfosctfhir_vs

Basic Terminology Services | Jim Steel35 |

Terminology Servicebull A server that implements all these can claim to be a terminology

server by instantiating httphl7orgfhirCapabilityStatementterminology-server in its CapabilityStatementbull CodeSystem ValueSet ConceptMap readsearch

bull $expand $validate-code $lookup $translate $closure

Basic Terminology Services | Jim Steel36 |

Terminology in FHIR Searchbull A lot of search parameters in FHIR are of type lsquotokenrsquo

bull These can leverage terminology services

bull abovebelowbull Eg Conditionbody-sitebelow=httpsnomedinfosct|272673000 (all

Conditions where the finding site is a descendent of Bone Structure

bull innot-inbull Eg

ProcedureRequestcodein=httpsnomedinfosctfhir_vs=refset32570361000036108 (all ProcedureRequests in the Imagine Procedure refset

Basic Terminology Services | Jim Steel37 |

Tips and tricksbull Paging

bull Search results can be paged (httphl7orgfhirsearchhtml see _count parameter)

bull $expand results have a separate paging mechanism (count offset)

bull Can reduce bandwidthresponse times by requesting the specific elements you wantbull includeDefinition includeDesignations on $expand

bull property on $lookup

bull _elements on searchreadoperation results

Basic Terminology Services | Jim Steel38 |

Tips and Tricks (cont)bull Batch

bull A lot of terminology operations are small ndash it can often be more efficient to send them as a batch (httphl7orgfhirhttphtmltransaction) then deal with the result when it comes back

bull Manage content types (Content-Type Accept _format)bull JSON XML

bull Accept-Encoding gzipbull More tips in the advanced session

Warning A lot of these can be server-dependent Theyrsquore not proprietary but you should check support for them by your terminology server

Basic Terminology Services | Jim Steel39 |

What if I am hellipbull Designing interfaces for data entry

bull Choose your CodeSystems (ideally standardized ones)

bull Choose or define your ValueSets

bull If your ValueSet is small a picklist can be populated using $expand

bull If your ValueSet is large a typeahead widget can use $expandfilter=xxx

Basic Terminology Services | Jim Steel40 |

bull Making a profilebull Choosedefine which code systems you want to allow

bull Make ValueSets with lists of codes you want to allow

ndash Make sure you respect the binding strength

bull Set up some processes for maintainingupdating them

ndash Concepts can become deprecated over time you can sometimes use ConceptMaps to find which concepts have changed

Basic Terminology Services | Jim Steel41 |

What if I amhellip

What if I am hellipbull Analyzingvalidating coded data

bull Choose your CodeSystemValueSets

bull Use $validate-code to check whether the codes are valid in the context in which yoursquore using them and whether the display text is correct (many clinical systems allow users to override the display text for the term)

bull Use $translate to map lsquoforeignrsquo coded data into a normalized CodeSystemValueSet for analysis

bull Use $subsumes $closure or $validate-code with an inline ValueSet to categorize data

Basic Terminology Services | Jim Steel42 |

What if I am hellipbull Exploring a set of concepts and how they relate to one another

bull Use $lookup to retrieve their properties and display them in a table

bull Use the lsquochildrsquo and lsquoparentrsquo properties or $subsumes$closure to explore the hierarchy that exists between concepts

Basic Terminology Services | Jim Steel43 |

Obligatory plugs

Terminology server httpsontoservercsiroau

Terminology browser httpsontoservercsiroaushrimp

Terminology resource editorhttpsontoservercsiroausnapper2-dev

Basic Terminology Services | Jim Steel44 |

Page 13: Basic FHIR Terminology Services - Home - FHIR DevDays · 2019-03-19 · Terminology: why •Terminology is the basis of shared meaning between different systems •StructureDefinitions

$lookup exampleGET httpsontoservercsiroaustu3-latestCodeSystem$lookupsystem=httpcsiroaucsau-jurisdictionsampcode=WAampproperty=displayampproperty=capital

Basic Terminology Services | Jim Steel14 |

CodeSystem operations $subsumesbull Type or instance level idempotent

bull GET CodeSystemid$subsumes

bull POST CodeSystem$subsumes (must have lsquosystemrsquo parameter)

bull Check what (if any) subsumption relationship exists between two codesbull codeA and codeB as codesystemversion or codingA and codingB

bull Result will be lsquoequivalentrsquo lsquosubsumesrsquo lsquosubsumed_byrsquo lsquonot_subsumedrsquo

bull Depends on the code systemrsquos lsquohierarchyMeaningrsquo

bull Can also use $closure see the advanced talk

Basic Terminology Services | Jim Steel15 |

$subsumes exampleGET httpsontoservercsiroaustu3-latestCodeSystem$subsumessystem=httpcsiroaucsau-jurisdictionsampcodeA=AUampcodeB=QLD

Basic Terminology Services | Jim Steel16 |

ValueSetbull A set of codes drawn from one or more CodeSystems

bull Can be used to define a set of codes (rsquocomposersquo)

bull Can be used to represent the result of an expansion of a ValueSet(lsquoexpansionrsquo)

Basic Terminology Services | Jim Steel17 |

ValueSet Structure

Basic Terminology Services | Jim Steel18 |

ValueSet Structure (cont)

Basic Terminology Services | Jim Steel19 |

ValueSet Structure (cont)

Basic Terminology Services | Jim Steel20 |

ValueSet example definition

Basic Terminology Services | Jim Steel21 |

Valueset operations $expandbull Type or instance level idempotent

bull GETPOST ValueSet$expand (must have rsquourlrsquo or lsquovalueSetrsquo)

bull GETPOST ValueSetid$expand

bull Retrieve the expansion of the ValueSet subject to a number of parametersbull Result is a ValueSet with an lsquoexpansionrsquo element

bull Parameters include filter count offset includeDesignations includeDefinition activeOnly excludeNested excludeNotForUI excludePostCoordinated displayLanguage limitedExpansion profile

bull This is the mainbest way to search for a code

Basic Terminology Services | Jim Steel22 |

$expand examplePOST httpsontoservercsiroaustu3-latestValueSet$expand (with the resource in the body)

Basic Terminology Services | Jim Steel23 |

ValueSet operations $validate-codebull Type or instance level idempotent

bull GETPOST ValueSet$validate-code (must have rsquourlrsquo or lsquovalueSetrsquo)

bull GETPOST ValueSetid$validate-code

bull Validate a code (and display text) against a ValueSetbull Determine whether the code is included in the ValueSet

bull (optionally) Determine whether the provided display text is the correct display text for the code

bull Code as codesystemversion or coding or CodeableConcept (multiple)

bull This is the main method for validating coded data

Basic Terminology Services | Jim Steel24 |

$validate-code examplePOST httpsontoservercsiroaustu3-latestValueSet$validate-code

Basic Terminology Services | Jim Steel25 |

Basic Terminology Services | Jim Steel26 |

$validate-code example (cont)

Well-known Terminologiesbull Terminologies such as SNOMED-CT LOINC RxNorm have specific

mappings into FHIR terminology resources with standardisedCodeSystemsbull Standard CodeSystem filtersproperties

bull Implicit ValueSets

bull Implicit ConceptMaps

Basic Terminology Services | Jim Steel27 |

Well-known Terminologies SNOMED-CTbull httpsnomedinfosct([edition](version[date]))bull Filters by subsumption by refset by ECL expressionbull Implicit ValueSets

bull All codes httpsnomedinfosctfhir_vs

bull By subsumption httpsnomedinfosctfhir_vs=isa404684003

bull List of refsets httpsnomedinfosctfhir_vs=refset

bull All codes in a refset httpsnomedinfosctfhir_vs=refset734138000

bull Implicit ConceptMapsbull Historical associations httpsnomedinfosctfhir_cm=900000000000527005

bull For more detail see the advanced session

Basic Terminology Services | Jim Steel28 |

Well-known Terminologies LOINCbull httploincorg

bull Filters parts copyright status multi-axial hierarchy

bull Implicit ValueSetsbull All LOINC codes httploincorgvs

bull Answer Lists httploincorgvsLL715-4

bull Hierarchy httploincorgvsLP29693-6

Basic Terminology Services | Jim Steel29 |

ConceptMapbull Represents a code-to-code mapping typically from a source

ValueSet to a target ValueSet

Basic Terminology Services | Jim Steel30 |

ConceptMap Structure

Basic Terminology Services | Jim Steel31 |

ConceptMap Structure (cont)

Basic Terminology Services | Jim Steel32 |

ConceptMap example

Basic Terminology Services | Jim Steel33 |

ConceptMap operations $translatebull Translate a code from one ValueSet to another according to the

serverrsquos resources andor other knowledge available to the server

bull Typically this means look up a ConceptMap resource and show the corresponding map entries (but not always)

bull Code as codesystemversion or coding or CodeableConcept

bull Specify source ValueSet and target ValueSet (or targetSystem)

bull Can be run in reverse (given target show source)

bull Results come back as Parameters with lsquomatchrsquo elements

Basic Terminology Services | Jim Steel34 |

$translate exampleGET httpsontoservercsiroaustu3-latestConceptMapau-jurisdictions$translatecode=QLDampsystem=httpcsiroaucsau-jurisdictionsamptarget=httpsnomedinfosctfhir_vs

Basic Terminology Services | Jim Steel35 |

Terminology Servicebull A server that implements all these can claim to be a terminology

server by instantiating httphl7orgfhirCapabilityStatementterminology-server in its CapabilityStatementbull CodeSystem ValueSet ConceptMap readsearch

bull $expand $validate-code $lookup $translate $closure

Basic Terminology Services | Jim Steel36 |

Terminology in FHIR Searchbull A lot of search parameters in FHIR are of type lsquotokenrsquo

bull These can leverage terminology services

bull abovebelowbull Eg Conditionbody-sitebelow=httpsnomedinfosct|272673000 (all

Conditions where the finding site is a descendent of Bone Structure

bull innot-inbull Eg

ProcedureRequestcodein=httpsnomedinfosctfhir_vs=refset32570361000036108 (all ProcedureRequests in the Imagine Procedure refset

Basic Terminology Services | Jim Steel37 |

Tips and tricksbull Paging

bull Search results can be paged (httphl7orgfhirsearchhtml see _count parameter)

bull $expand results have a separate paging mechanism (count offset)

bull Can reduce bandwidthresponse times by requesting the specific elements you wantbull includeDefinition includeDesignations on $expand

bull property on $lookup

bull _elements on searchreadoperation results

Basic Terminology Services | Jim Steel38 |

Tips and Tricks (cont)bull Batch

bull A lot of terminology operations are small ndash it can often be more efficient to send them as a batch (httphl7orgfhirhttphtmltransaction) then deal with the result when it comes back

bull Manage content types (Content-Type Accept _format)bull JSON XML

bull Accept-Encoding gzipbull More tips in the advanced session

Warning A lot of these can be server-dependent Theyrsquore not proprietary but you should check support for them by your terminology server

Basic Terminology Services | Jim Steel39 |

What if I am hellipbull Designing interfaces for data entry

bull Choose your CodeSystems (ideally standardized ones)

bull Choose or define your ValueSets

bull If your ValueSet is small a picklist can be populated using $expand

bull If your ValueSet is large a typeahead widget can use $expandfilter=xxx

Basic Terminology Services | Jim Steel40 |

bull Making a profilebull Choosedefine which code systems you want to allow

bull Make ValueSets with lists of codes you want to allow

ndash Make sure you respect the binding strength

bull Set up some processes for maintainingupdating them

ndash Concepts can become deprecated over time you can sometimes use ConceptMaps to find which concepts have changed

Basic Terminology Services | Jim Steel41 |

What if I amhellip

What if I am hellipbull Analyzingvalidating coded data

bull Choose your CodeSystemValueSets

bull Use $validate-code to check whether the codes are valid in the context in which yoursquore using them and whether the display text is correct (many clinical systems allow users to override the display text for the term)

bull Use $translate to map lsquoforeignrsquo coded data into a normalized CodeSystemValueSet for analysis

bull Use $subsumes $closure or $validate-code with an inline ValueSet to categorize data

Basic Terminology Services | Jim Steel42 |

What if I am hellipbull Exploring a set of concepts and how they relate to one another

bull Use $lookup to retrieve their properties and display them in a table

bull Use the lsquochildrsquo and lsquoparentrsquo properties or $subsumes$closure to explore the hierarchy that exists between concepts

Basic Terminology Services | Jim Steel43 |

Obligatory plugs

Terminology server httpsontoservercsiroau

Terminology browser httpsontoservercsiroaushrimp

Terminology resource editorhttpsontoservercsiroausnapper2-dev

Basic Terminology Services | Jim Steel44 |

Page 14: Basic FHIR Terminology Services - Home - FHIR DevDays · 2019-03-19 · Terminology: why •Terminology is the basis of shared meaning between different systems •StructureDefinitions

CodeSystem operations $subsumesbull Type or instance level idempotent

bull GET CodeSystemid$subsumes

bull POST CodeSystem$subsumes (must have lsquosystemrsquo parameter)

bull Check what (if any) subsumption relationship exists between two codesbull codeA and codeB as codesystemversion or codingA and codingB

bull Result will be lsquoequivalentrsquo lsquosubsumesrsquo lsquosubsumed_byrsquo lsquonot_subsumedrsquo

bull Depends on the code systemrsquos lsquohierarchyMeaningrsquo

bull Can also use $closure see the advanced talk

Basic Terminology Services | Jim Steel15 |

$subsumes exampleGET httpsontoservercsiroaustu3-latestCodeSystem$subsumessystem=httpcsiroaucsau-jurisdictionsampcodeA=AUampcodeB=QLD

Basic Terminology Services | Jim Steel16 |

ValueSetbull A set of codes drawn from one or more CodeSystems

bull Can be used to define a set of codes (rsquocomposersquo)

bull Can be used to represent the result of an expansion of a ValueSet(lsquoexpansionrsquo)

Basic Terminology Services | Jim Steel17 |

ValueSet Structure

Basic Terminology Services | Jim Steel18 |

ValueSet Structure (cont)

Basic Terminology Services | Jim Steel19 |

ValueSet Structure (cont)

Basic Terminology Services | Jim Steel20 |

ValueSet example definition

Basic Terminology Services | Jim Steel21 |

Valueset operations $expandbull Type or instance level idempotent

bull GETPOST ValueSet$expand (must have rsquourlrsquo or lsquovalueSetrsquo)

bull GETPOST ValueSetid$expand

bull Retrieve the expansion of the ValueSet subject to a number of parametersbull Result is a ValueSet with an lsquoexpansionrsquo element

bull Parameters include filter count offset includeDesignations includeDefinition activeOnly excludeNested excludeNotForUI excludePostCoordinated displayLanguage limitedExpansion profile

bull This is the mainbest way to search for a code

Basic Terminology Services | Jim Steel22 |

$expand examplePOST httpsontoservercsiroaustu3-latestValueSet$expand (with the resource in the body)

Basic Terminology Services | Jim Steel23 |

ValueSet operations $validate-codebull Type or instance level idempotent

bull GETPOST ValueSet$validate-code (must have rsquourlrsquo or lsquovalueSetrsquo)

bull GETPOST ValueSetid$validate-code

bull Validate a code (and display text) against a ValueSetbull Determine whether the code is included in the ValueSet

bull (optionally) Determine whether the provided display text is the correct display text for the code

bull Code as codesystemversion or coding or CodeableConcept (multiple)

bull This is the main method for validating coded data

Basic Terminology Services | Jim Steel24 |

$validate-code examplePOST httpsontoservercsiroaustu3-latestValueSet$validate-code

Basic Terminology Services | Jim Steel25 |

Basic Terminology Services | Jim Steel26 |

$validate-code example (cont)

Well-known Terminologiesbull Terminologies such as SNOMED-CT LOINC RxNorm have specific

mappings into FHIR terminology resources with standardisedCodeSystemsbull Standard CodeSystem filtersproperties

bull Implicit ValueSets

bull Implicit ConceptMaps

Basic Terminology Services | Jim Steel27 |

Well-known Terminologies SNOMED-CTbull httpsnomedinfosct([edition](version[date]))bull Filters by subsumption by refset by ECL expressionbull Implicit ValueSets

bull All codes httpsnomedinfosctfhir_vs

bull By subsumption httpsnomedinfosctfhir_vs=isa404684003

bull List of refsets httpsnomedinfosctfhir_vs=refset

bull All codes in a refset httpsnomedinfosctfhir_vs=refset734138000

bull Implicit ConceptMapsbull Historical associations httpsnomedinfosctfhir_cm=900000000000527005

bull For more detail see the advanced session

Basic Terminology Services | Jim Steel28 |

Well-known Terminologies LOINCbull httploincorg

bull Filters parts copyright status multi-axial hierarchy

bull Implicit ValueSetsbull All LOINC codes httploincorgvs

bull Answer Lists httploincorgvsLL715-4

bull Hierarchy httploincorgvsLP29693-6

Basic Terminology Services | Jim Steel29 |

ConceptMapbull Represents a code-to-code mapping typically from a source

ValueSet to a target ValueSet

Basic Terminology Services | Jim Steel30 |

ConceptMap Structure

Basic Terminology Services | Jim Steel31 |

ConceptMap Structure (cont)

Basic Terminology Services | Jim Steel32 |

ConceptMap example

Basic Terminology Services | Jim Steel33 |

ConceptMap operations $translatebull Translate a code from one ValueSet to another according to the

serverrsquos resources andor other knowledge available to the server

bull Typically this means look up a ConceptMap resource and show the corresponding map entries (but not always)

bull Code as codesystemversion or coding or CodeableConcept

bull Specify source ValueSet and target ValueSet (or targetSystem)

bull Can be run in reverse (given target show source)

bull Results come back as Parameters with lsquomatchrsquo elements

Basic Terminology Services | Jim Steel34 |

$translate exampleGET httpsontoservercsiroaustu3-latestConceptMapau-jurisdictions$translatecode=QLDampsystem=httpcsiroaucsau-jurisdictionsamptarget=httpsnomedinfosctfhir_vs

Basic Terminology Services | Jim Steel35 |

Terminology Servicebull A server that implements all these can claim to be a terminology

server by instantiating httphl7orgfhirCapabilityStatementterminology-server in its CapabilityStatementbull CodeSystem ValueSet ConceptMap readsearch

bull $expand $validate-code $lookup $translate $closure

Basic Terminology Services | Jim Steel36 |

Terminology in FHIR Searchbull A lot of search parameters in FHIR are of type lsquotokenrsquo

bull These can leverage terminology services

bull abovebelowbull Eg Conditionbody-sitebelow=httpsnomedinfosct|272673000 (all

Conditions where the finding site is a descendent of Bone Structure

bull innot-inbull Eg

ProcedureRequestcodein=httpsnomedinfosctfhir_vs=refset32570361000036108 (all ProcedureRequests in the Imagine Procedure refset

Basic Terminology Services | Jim Steel37 |

Tips and tricksbull Paging

bull Search results can be paged (httphl7orgfhirsearchhtml see _count parameter)

bull $expand results have a separate paging mechanism (count offset)

bull Can reduce bandwidthresponse times by requesting the specific elements you wantbull includeDefinition includeDesignations on $expand

bull property on $lookup

bull _elements on searchreadoperation results

Basic Terminology Services | Jim Steel38 |

Tips and Tricks (cont)bull Batch

bull A lot of terminology operations are small ndash it can often be more efficient to send them as a batch (httphl7orgfhirhttphtmltransaction) then deal with the result when it comes back

bull Manage content types (Content-Type Accept _format)bull JSON XML

bull Accept-Encoding gzipbull More tips in the advanced session

Warning A lot of these can be server-dependent Theyrsquore not proprietary but you should check support for them by your terminology server

Basic Terminology Services | Jim Steel39 |

What if I am hellipbull Designing interfaces for data entry

bull Choose your CodeSystems (ideally standardized ones)

bull Choose or define your ValueSets

bull If your ValueSet is small a picklist can be populated using $expand

bull If your ValueSet is large a typeahead widget can use $expandfilter=xxx

Basic Terminology Services | Jim Steel40 |

bull Making a profilebull Choosedefine which code systems you want to allow

bull Make ValueSets with lists of codes you want to allow

ndash Make sure you respect the binding strength

bull Set up some processes for maintainingupdating them

ndash Concepts can become deprecated over time you can sometimes use ConceptMaps to find which concepts have changed

Basic Terminology Services | Jim Steel41 |

What if I amhellip

What if I am hellipbull Analyzingvalidating coded data

bull Choose your CodeSystemValueSets

bull Use $validate-code to check whether the codes are valid in the context in which yoursquore using them and whether the display text is correct (many clinical systems allow users to override the display text for the term)

bull Use $translate to map lsquoforeignrsquo coded data into a normalized CodeSystemValueSet for analysis

bull Use $subsumes $closure or $validate-code with an inline ValueSet to categorize data

Basic Terminology Services | Jim Steel42 |

What if I am hellipbull Exploring a set of concepts and how they relate to one another

bull Use $lookup to retrieve their properties and display them in a table

bull Use the lsquochildrsquo and lsquoparentrsquo properties or $subsumes$closure to explore the hierarchy that exists between concepts

Basic Terminology Services | Jim Steel43 |

Obligatory plugs

Terminology server httpsontoservercsiroau

Terminology browser httpsontoservercsiroaushrimp

Terminology resource editorhttpsontoservercsiroausnapper2-dev

Basic Terminology Services | Jim Steel44 |

Page 15: Basic FHIR Terminology Services - Home - FHIR DevDays · 2019-03-19 · Terminology: why •Terminology is the basis of shared meaning between different systems •StructureDefinitions

$subsumes exampleGET httpsontoservercsiroaustu3-latestCodeSystem$subsumessystem=httpcsiroaucsau-jurisdictionsampcodeA=AUampcodeB=QLD

Basic Terminology Services | Jim Steel16 |

ValueSetbull A set of codes drawn from one or more CodeSystems

bull Can be used to define a set of codes (rsquocomposersquo)

bull Can be used to represent the result of an expansion of a ValueSet(lsquoexpansionrsquo)

Basic Terminology Services | Jim Steel17 |

ValueSet Structure

Basic Terminology Services | Jim Steel18 |

ValueSet Structure (cont)

Basic Terminology Services | Jim Steel19 |

ValueSet Structure (cont)

Basic Terminology Services | Jim Steel20 |

ValueSet example definition

Basic Terminology Services | Jim Steel21 |

Valueset operations $expandbull Type or instance level idempotent

bull GETPOST ValueSet$expand (must have rsquourlrsquo or lsquovalueSetrsquo)

bull GETPOST ValueSetid$expand

bull Retrieve the expansion of the ValueSet subject to a number of parametersbull Result is a ValueSet with an lsquoexpansionrsquo element

bull Parameters include filter count offset includeDesignations includeDefinition activeOnly excludeNested excludeNotForUI excludePostCoordinated displayLanguage limitedExpansion profile

bull This is the mainbest way to search for a code

Basic Terminology Services | Jim Steel22 |

$expand examplePOST httpsontoservercsiroaustu3-latestValueSet$expand (with the resource in the body)

Basic Terminology Services | Jim Steel23 |

ValueSet operations $validate-codebull Type or instance level idempotent

bull GETPOST ValueSet$validate-code (must have rsquourlrsquo or lsquovalueSetrsquo)

bull GETPOST ValueSetid$validate-code

bull Validate a code (and display text) against a ValueSetbull Determine whether the code is included in the ValueSet

bull (optionally) Determine whether the provided display text is the correct display text for the code

bull Code as codesystemversion or coding or CodeableConcept (multiple)

bull This is the main method for validating coded data

Basic Terminology Services | Jim Steel24 |

$validate-code examplePOST httpsontoservercsiroaustu3-latestValueSet$validate-code

Basic Terminology Services | Jim Steel25 |

Basic Terminology Services | Jim Steel26 |

$validate-code example (cont)

Well-known Terminologiesbull Terminologies such as SNOMED-CT LOINC RxNorm have specific

mappings into FHIR terminology resources with standardisedCodeSystemsbull Standard CodeSystem filtersproperties

bull Implicit ValueSets

bull Implicit ConceptMaps

Basic Terminology Services | Jim Steel27 |

Well-known Terminologies SNOMED-CTbull httpsnomedinfosct([edition](version[date]))bull Filters by subsumption by refset by ECL expressionbull Implicit ValueSets

bull All codes httpsnomedinfosctfhir_vs

bull By subsumption httpsnomedinfosctfhir_vs=isa404684003

bull List of refsets httpsnomedinfosctfhir_vs=refset

bull All codes in a refset httpsnomedinfosctfhir_vs=refset734138000

bull Implicit ConceptMapsbull Historical associations httpsnomedinfosctfhir_cm=900000000000527005

bull For more detail see the advanced session

Basic Terminology Services | Jim Steel28 |

Well-known Terminologies LOINCbull httploincorg

bull Filters parts copyright status multi-axial hierarchy

bull Implicit ValueSetsbull All LOINC codes httploincorgvs

bull Answer Lists httploincorgvsLL715-4

bull Hierarchy httploincorgvsLP29693-6

Basic Terminology Services | Jim Steel29 |

ConceptMapbull Represents a code-to-code mapping typically from a source

ValueSet to a target ValueSet

Basic Terminology Services | Jim Steel30 |

ConceptMap Structure

Basic Terminology Services | Jim Steel31 |

ConceptMap Structure (cont)

Basic Terminology Services | Jim Steel32 |

ConceptMap example

Basic Terminology Services | Jim Steel33 |

ConceptMap operations $translatebull Translate a code from one ValueSet to another according to the

serverrsquos resources andor other knowledge available to the server

bull Typically this means look up a ConceptMap resource and show the corresponding map entries (but not always)

bull Code as codesystemversion or coding or CodeableConcept

bull Specify source ValueSet and target ValueSet (or targetSystem)

bull Can be run in reverse (given target show source)

bull Results come back as Parameters with lsquomatchrsquo elements

Basic Terminology Services | Jim Steel34 |

$translate exampleGET httpsontoservercsiroaustu3-latestConceptMapau-jurisdictions$translatecode=QLDampsystem=httpcsiroaucsau-jurisdictionsamptarget=httpsnomedinfosctfhir_vs

Basic Terminology Services | Jim Steel35 |

Terminology Servicebull A server that implements all these can claim to be a terminology

server by instantiating httphl7orgfhirCapabilityStatementterminology-server in its CapabilityStatementbull CodeSystem ValueSet ConceptMap readsearch

bull $expand $validate-code $lookup $translate $closure

Basic Terminology Services | Jim Steel36 |

Terminology in FHIR Searchbull A lot of search parameters in FHIR are of type lsquotokenrsquo

bull These can leverage terminology services

bull abovebelowbull Eg Conditionbody-sitebelow=httpsnomedinfosct|272673000 (all

Conditions where the finding site is a descendent of Bone Structure

bull innot-inbull Eg

ProcedureRequestcodein=httpsnomedinfosctfhir_vs=refset32570361000036108 (all ProcedureRequests in the Imagine Procedure refset

Basic Terminology Services | Jim Steel37 |

Tips and tricksbull Paging

bull Search results can be paged (httphl7orgfhirsearchhtml see _count parameter)

bull $expand results have a separate paging mechanism (count offset)

bull Can reduce bandwidthresponse times by requesting the specific elements you wantbull includeDefinition includeDesignations on $expand

bull property on $lookup

bull _elements on searchreadoperation results

Basic Terminology Services | Jim Steel38 |

Tips and Tricks (cont)bull Batch

bull A lot of terminology operations are small ndash it can often be more efficient to send them as a batch (httphl7orgfhirhttphtmltransaction) then deal with the result when it comes back

bull Manage content types (Content-Type Accept _format)bull JSON XML

bull Accept-Encoding gzipbull More tips in the advanced session

Warning A lot of these can be server-dependent Theyrsquore not proprietary but you should check support for them by your terminology server

Basic Terminology Services | Jim Steel39 |

What if I am hellipbull Designing interfaces for data entry

bull Choose your CodeSystems (ideally standardized ones)

bull Choose or define your ValueSets

bull If your ValueSet is small a picklist can be populated using $expand

bull If your ValueSet is large a typeahead widget can use $expandfilter=xxx

Basic Terminology Services | Jim Steel40 |

bull Making a profilebull Choosedefine which code systems you want to allow

bull Make ValueSets with lists of codes you want to allow

ndash Make sure you respect the binding strength

bull Set up some processes for maintainingupdating them

ndash Concepts can become deprecated over time you can sometimes use ConceptMaps to find which concepts have changed

Basic Terminology Services | Jim Steel41 |

What if I amhellip

What if I am hellipbull Analyzingvalidating coded data

bull Choose your CodeSystemValueSets

bull Use $validate-code to check whether the codes are valid in the context in which yoursquore using them and whether the display text is correct (many clinical systems allow users to override the display text for the term)

bull Use $translate to map lsquoforeignrsquo coded data into a normalized CodeSystemValueSet for analysis

bull Use $subsumes $closure or $validate-code with an inline ValueSet to categorize data

Basic Terminology Services | Jim Steel42 |

What if I am hellipbull Exploring a set of concepts and how they relate to one another

bull Use $lookup to retrieve their properties and display them in a table

bull Use the lsquochildrsquo and lsquoparentrsquo properties or $subsumes$closure to explore the hierarchy that exists between concepts

Basic Terminology Services | Jim Steel43 |

Obligatory plugs

Terminology server httpsontoservercsiroau

Terminology browser httpsontoservercsiroaushrimp

Terminology resource editorhttpsontoservercsiroausnapper2-dev

Basic Terminology Services | Jim Steel44 |

Page 16: Basic FHIR Terminology Services - Home - FHIR DevDays · 2019-03-19 · Terminology: why •Terminology is the basis of shared meaning between different systems •StructureDefinitions

ValueSetbull A set of codes drawn from one or more CodeSystems

bull Can be used to define a set of codes (rsquocomposersquo)

bull Can be used to represent the result of an expansion of a ValueSet(lsquoexpansionrsquo)

Basic Terminology Services | Jim Steel17 |

ValueSet Structure

Basic Terminology Services | Jim Steel18 |

ValueSet Structure (cont)

Basic Terminology Services | Jim Steel19 |

ValueSet Structure (cont)

Basic Terminology Services | Jim Steel20 |

ValueSet example definition

Basic Terminology Services | Jim Steel21 |

Valueset operations $expandbull Type or instance level idempotent

bull GETPOST ValueSet$expand (must have rsquourlrsquo or lsquovalueSetrsquo)

bull GETPOST ValueSetid$expand

bull Retrieve the expansion of the ValueSet subject to a number of parametersbull Result is a ValueSet with an lsquoexpansionrsquo element

bull Parameters include filter count offset includeDesignations includeDefinition activeOnly excludeNested excludeNotForUI excludePostCoordinated displayLanguage limitedExpansion profile

bull This is the mainbest way to search for a code

Basic Terminology Services | Jim Steel22 |

$expand examplePOST httpsontoservercsiroaustu3-latestValueSet$expand (with the resource in the body)

Basic Terminology Services | Jim Steel23 |

ValueSet operations $validate-codebull Type or instance level idempotent

bull GETPOST ValueSet$validate-code (must have rsquourlrsquo or lsquovalueSetrsquo)

bull GETPOST ValueSetid$validate-code

bull Validate a code (and display text) against a ValueSetbull Determine whether the code is included in the ValueSet

bull (optionally) Determine whether the provided display text is the correct display text for the code

bull Code as codesystemversion or coding or CodeableConcept (multiple)

bull This is the main method for validating coded data

Basic Terminology Services | Jim Steel24 |

$validate-code examplePOST httpsontoservercsiroaustu3-latestValueSet$validate-code

Basic Terminology Services | Jim Steel25 |

Basic Terminology Services | Jim Steel26 |

$validate-code example (cont)

Well-known Terminologiesbull Terminologies such as SNOMED-CT LOINC RxNorm have specific

mappings into FHIR terminology resources with standardisedCodeSystemsbull Standard CodeSystem filtersproperties

bull Implicit ValueSets

bull Implicit ConceptMaps

Basic Terminology Services | Jim Steel27 |

Well-known Terminologies SNOMED-CTbull httpsnomedinfosct([edition](version[date]))bull Filters by subsumption by refset by ECL expressionbull Implicit ValueSets

bull All codes httpsnomedinfosctfhir_vs

bull By subsumption httpsnomedinfosctfhir_vs=isa404684003

bull List of refsets httpsnomedinfosctfhir_vs=refset

bull All codes in a refset httpsnomedinfosctfhir_vs=refset734138000

bull Implicit ConceptMapsbull Historical associations httpsnomedinfosctfhir_cm=900000000000527005

bull For more detail see the advanced session

Basic Terminology Services | Jim Steel28 |

Well-known Terminologies LOINCbull httploincorg

bull Filters parts copyright status multi-axial hierarchy

bull Implicit ValueSetsbull All LOINC codes httploincorgvs

bull Answer Lists httploincorgvsLL715-4

bull Hierarchy httploincorgvsLP29693-6

Basic Terminology Services | Jim Steel29 |

ConceptMapbull Represents a code-to-code mapping typically from a source

ValueSet to a target ValueSet

Basic Terminology Services | Jim Steel30 |

ConceptMap Structure

Basic Terminology Services | Jim Steel31 |

ConceptMap Structure (cont)

Basic Terminology Services | Jim Steel32 |

ConceptMap example

Basic Terminology Services | Jim Steel33 |

ConceptMap operations $translatebull Translate a code from one ValueSet to another according to the

serverrsquos resources andor other knowledge available to the server

bull Typically this means look up a ConceptMap resource and show the corresponding map entries (but not always)

bull Code as codesystemversion or coding or CodeableConcept

bull Specify source ValueSet and target ValueSet (or targetSystem)

bull Can be run in reverse (given target show source)

bull Results come back as Parameters with lsquomatchrsquo elements

Basic Terminology Services | Jim Steel34 |

$translate exampleGET httpsontoservercsiroaustu3-latestConceptMapau-jurisdictions$translatecode=QLDampsystem=httpcsiroaucsau-jurisdictionsamptarget=httpsnomedinfosctfhir_vs

Basic Terminology Services | Jim Steel35 |

Terminology Servicebull A server that implements all these can claim to be a terminology

server by instantiating httphl7orgfhirCapabilityStatementterminology-server in its CapabilityStatementbull CodeSystem ValueSet ConceptMap readsearch

bull $expand $validate-code $lookup $translate $closure

Basic Terminology Services | Jim Steel36 |

Terminology in FHIR Searchbull A lot of search parameters in FHIR are of type lsquotokenrsquo

bull These can leverage terminology services

bull abovebelowbull Eg Conditionbody-sitebelow=httpsnomedinfosct|272673000 (all

Conditions where the finding site is a descendent of Bone Structure

bull innot-inbull Eg

ProcedureRequestcodein=httpsnomedinfosctfhir_vs=refset32570361000036108 (all ProcedureRequests in the Imagine Procedure refset

Basic Terminology Services | Jim Steel37 |

Tips and tricksbull Paging

bull Search results can be paged (httphl7orgfhirsearchhtml see _count parameter)

bull $expand results have a separate paging mechanism (count offset)

bull Can reduce bandwidthresponse times by requesting the specific elements you wantbull includeDefinition includeDesignations on $expand

bull property on $lookup

bull _elements on searchreadoperation results

Basic Terminology Services | Jim Steel38 |

Tips and Tricks (cont)bull Batch

bull A lot of terminology operations are small ndash it can often be more efficient to send them as a batch (httphl7orgfhirhttphtmltransaction) then deal with the result when it comes back

bull Manage content types (Content-Type Accept _format)bull JSON XML

bull Accept-Encoding gzipbull More tips in the advanced session

Warning A lot of these can be server-dependent Theyrsquore not proprietary but you should check support for them by your terminology server

Basic Terminology Services | Jim Steel39 |

What if I am hellipbull Designing interfaces for data entry

bull Choose your CodeSystems (ideally standardized ones)

bull Choose or define your ValueSets

bull If your ValueSet is small a picklist can be populated using $expand

bull If your ValueSet is large a typeahead widget can use $expandfilter=xxx

Basic Terminology Services | Jim Steel40 |

bull Making a profilebull Choosedefine which code systems you want to allow

bull Make ValueSets with lists of codes you want to allow

ndash Make sure you respect the binding strength

bull Set up some processes for maintainingupdating them

ndash Concepts can become deprecated over time you can sometimes use ConceptMaps to find which concepts have changed

Basic Terminology Services | Jim Steel41 |

What if I amhellip

What if I am hellipbull Analyzingvalidating coded data

bull Choose your CodeSystemValueSets

bull Use $validate-code to check whether the codes are valid in the context in which yoursquore using them and whether the display text is correct (many clinical systems allow users to override the display text for the term)

bull Use $translate to map lsquoforeignrsquo coded data into a normalized CodeSystemValueSet for analysis

bull Use $subsumes $closure or $validate-code with an inline ValueSet to categorize data

Basic Terminology Services | Jim Steel42 |

What if I am hellipbull Exploring a set of concepts and how they relate to one another

bull Use $lookup to retrieve their properties and display them in a table

bull Use the lsquochildrsquo and lsquoparentrsquo properties or $subsumes$closure to explore the hierarchy that exists between concepts

Basic Terminology Services | Jim Steel43 |

Obligatory plugs

Terminology server httpsontoservercsiroau

Terminology browser httpsontoservercsiroaushrimp

Terminology resource editorhttpsontoservercsiroausnapper2-dev

Basic Terminology Services | Jim Steel44 |

Page 17: Basic FHIR Terminology Services - Home - FHIR DevDays · 2019-03-19 · Terminology: why •Terminology is the basis of shared meaning between different systems •StructureDefinitions

ValueSet Structure

Basic Terminology Services | Jim Steel18 |

ValueSet Structure (cont)

Basic Terminology Services | Jim Steel19 |

ValueSet Structure (cont)

Basic Terminology Services | Jim Steel20 |

ValueSet example definition

Basic Terminology Services | Jim Steel21 |

Valueset operations $expandbull Type or instance level idempotent

bull GETPOST ValueSet$expand (must have rsquourlrsquo or lsquovalueSetrsquo)

bull GETPOST ValueSetid$expand

bull Retrieve the expansion of the ValueSet subject to a number of parametersbull Result is a ValueSet with an lsquoexpansionrsquo element

bull Parameters include filter count offset includeDesignations includeDefinition activeOnly excludeNested excludeNotForUI excludePostCoordinated displayLanguage limitedExpansion profile

bull This is the mainbest way to search for a code

Basic Terminology Services | Jim Steel22 |

$expand examplePOST httpsontoservercsiroaustu3-latestValueSet$expand (with the resource in the body)

Basic Terminology Services | Jim Steel23 |

ValueSet operations $validate-codebull Type or instance level idempotent

bull GETPOST ValueSet$validate-code (must have rsquourlrsquo or lsquovalueSetrsquo)

bull GETPOST ValueSetid$validate-code

bull Validate a code (and display text) against a ValueSetbull Determine whether the code is included in the ValueSet

bull (optionally) Determine whether the provided display text is the correct display text for the code

bull Code as codesystemversion or coding or CodeableConcept (multiple)

bull This is the main method for validating coded data

Basic Terminology Services | Jim Steel24 |

$validate-code examplePOST httpsontoservercsiroaustu3-latestValueSet$validate-code

Basic Terminology Services | Jim Steel25 |

Basic Terminology Services | Jim Steel26 |

$validate-code example (cont)

Well-known Terminologiesbull Terminologies such as SNOMED-CT LOINC RxNorm have specific

mappings into FHIR terminology resources with standardisedCodeSystemsbull Standard CodeSystem filtersproperties

bull Implicit ValueSets

bull Implicit ConceptMaps

Basic Terminology Services | Jim Steel27 |

Well-known Terminologies SNOMED-CTbull httpsnomedinfosct([edition](version[date]))bull Filters by subsumption by refset by ECL expressionbull Implicit ValueSets

bull All codes httpsnomedinfosctfhir_vs

bull By subsumption httpsnomedinfosctfhir_vs=isa404684003

bull List of refsets httpsnomedinfosctfhir_vs=refset

bull All codes in a refset httpsnomedinfosctfhir_vs=refset734138000

bull Implicit ConceptMapsbull Historical associations httpsnomedinfosctfhir_cm=900000000000527005

bull For more detail see the advanced session

Basic Terminology Services | Jim Steel28 |

Well-known Terminologies LOINCbull httploincorg

bull Filters parts copyright status multi-axial hierarchy

bull Implicit ValueSetsbull All LOINC codes httploincorgvs

bull Answer Lists httploincorgvsLL715-4

bull Hierarchy httploincorgvsLP29693-6

Basic Terminology Services | Jim Steel29 |

ConceptMapbull Represents a code-to-code mapping typically from a source

ValueSet to a target ValueSet

Basic Terminology Services | Jim Steel30 |

ConceptMap Structure

Basic Terminology Services | Jim Steel31 |

ConceptMap Structure (cont)

Basic Terminology Services | Jim Steel32 |

ConceptMap example

Basic Terminology Services | Jim Steel33 |

ConceptMap operations $translatebull Translate a code from one ValueSet to another according to the

serverrsquos resources andor other knowledge available to the server

bull Typically this means look up a ConceptMap resource and show the corresponding map entries (but not always)

bull Code as codesystemversion or coding or CodeableConcept

bull Specify source ValueSet and target ValueSet (or targetSystem)

bull Can be run in reverse (given target show source)

bull Results come back as Parameters with lsquomatchrsquo elements

Basic Terminology Services | Jim Steel34 |

$translate exampleGET httpsontoservercsiroaustu3-latestConceptMapau-jurisdictions$translatecode=QLDampsystem=httpcsiroaucsau-jurisdictionsamptarget=httpsnomedinfosctfhir_vs

Basic Terminology Services | Jim Steel35 |

Terminology Servicebull A server that implements all these can claim to be a terminology

server by instantiating httphl7orgfhirCapabilityStatementterminology-server in its CapabilityStatementbull CodeSystem ValueSet ConceptMap readsearch

bull $expand $validate-code $lookup $translate $closure

Basic Terminology Services | Jim Steel36 |

Terminology in FHIR Searchbull A lot of search parameters in FHIR are of type lsquotokenrsquo

bull These can leverage terminology services

bull abovebelowbull Eg Conditionbody-sitebelow=httpsnomedinfosct|272673000 (all

Conditions where the finding site is a descendent of Bone Structure

bull innot-inbull Eg

ProcedureRequestcodein=httpsnomedinfosctfhir_vs=refset32570361000036108 (all ProcedureRequests in the Imagine Procedure refset

Basic Terminology Services | Jim Steel37 |

Tips and tricksbull Paging

bull Search results can be paged (httphl7orgfhirsearchhtml see _count parameter)

bull $expand results have a separate paging mechanism (count offset)

bull Can reduce bandwidthresponse times by requesting the specific elements you wantbull includeDefinition includeDesignations on $expand

bull property on $lookup

bull _elements on searchreadoperation results

Basic Terminology Services | Jim Steel38 |

Tips and Tricks (cont)bull Batch

bull A lot of terminology operations are small ndash it can often be more efficient to send them as a batch (httphl7orgfhirhttphtmltransaction) then deal with the result when it comes back

bull Manage content types (Content-Type Accept _format)bull JSON XML

bull Accept-Encoding gzipbull More tips in the advanced session

Warning A lot of these can be server-dependent Theyrsquore not proprietary but you should check support for them by your terminology server

Basic Terminology Services | Jim Steel39 |

What if I am hellipbull Designing interfaces for data entry

bull Choose your CodeSystems (ideally standardized ones)

bull Choose or define your ValueSets

bull If your ValueSet is small a picklist can be populated using $expand

bull If your ValueSet is large a typeahead widget can use $expandfilter=xxx

Basic Terminology Services | Jim Steel40 |

bull Making a profilebull Choosedefine which code systems you want to allow

bull Make ValueSets with lists of codes you want to allow

ndash Make sure you respect the binding strength

bull Set up some processes for maintainingupdating them

ndash Concepts can become deprecated over time you can sometimes use ConceptMaps to find which concepts have changed

Basic Terminology Services | Jim Steel41 |

What if I amhellip

What if I am hellipbull Analyzingvalidating coded data

bull Choose your CodeSystemValueSets

bull Use $validate-code to check whether the codes are valid in the context in which yoursquore using them and whether the display text is correct (many clinical systems allow users to override the display text for the term)

bull Use $translate to map lsquoforeignrsquo coded data into a normalized CodeSystemValueSet for analysis

bull Use $subsumes $closure or $validate-code with an inline ValueSet to categorize data

Basic Terminology Services | Jim Steel42 |

What if I am hellipbull Exploring a set of concepts and how they relate to one another

bull Use $lookup to retrieve their properties and display them in a table

bull Use the lsquochildrsquo and lsquoparentrsquo properties or $subsumes$closure to explore the hierarchy that exists between concepts

Basic Terminology Services | Jim Steel43 |

Obligatory plugs

Terminology server httpsontoservercsiroau

Terminology browser httpsontoservercsiroaushrimp

Terminology resource editorhttpsontoservercsiroausnapper2-dev

Basic Terminology Services | Jim Steel44 |

Page 18: Basic FHIR Terminology Services - Home - FHIR DevDays · 2019-03-19 · Terminology: why •Terminology is the basis of shared meaning between different systems •StructureDefinitions

ValueSet Structure (cont)

Basic Terminology Services | Jim Steel19 |

ValueSet Structure (cont)

Basic Terminology Services | Jim Steel20 |

ValueSet example definition

Basic Terminology Services | Jim Steel21 |

Valueset operations $expandbull Type or instance level idempotent

bull GETPOST ValueSet$expand (must have rsquourlrsquo or lsquovalueSetrsquo)

bull GETPOST ValueSetid$expand

bull Retrieve the expansion of the ValueSet subject to a number of parametersbull Result is a ValueSet with an lsquoexpansionrsquo element

bull Parameters include filter count offset includeDesignations includeDefinition activeOnly excludeNested excludeNotForUI excludePostCoordinated displayLanguage limitedExpansion profile

bull This is the mainbest way to search for a code

Basic Terminology Services | Jim Steel22 |

$expand examplePOST httpsontoservercsiroaustu3-latestValueSet$expand (with the resource in the body)

Basic Terminology Services | Jim Steel23 |

ValueSet operations $validate-codebull Type or instance level idempotent

bull GETPOST ValueSet$validate-code (must have rsquourlrsquo or lsquovalueSetrsquo)

bull GETPOST ValueSetid$validate-code

bull Validate a code (and display text) against a ValueSetbull Determine whether the code is included in the ValueSet

bull (optionally) Determine whether the provided display text is the correct display text for the code

bull Code as codesystemversion or coding or CodeableConcept (multiple)

bull This is the main method for validating coded data

Basic Terminology Services | Jim Steel24 |

$validate-code examplePOST httpsontoservercsiroaustu3-latestValueSet$validate-code

Basic Terminology Services | Jim Steel25 |

Basic Terminology Services | Jim Steel26 |

$validate-code example (cont)

Well-known Terminologiesbull Terminologies such as SNOMED-CT LOINC RxNorm have specific

mappings into FHIR terminology resources with standardisedCodeSystemsbull Standard CodeSystem filtersproperties

bull Implicit ValueSets

bull Implicit ConceptMaps

Basic Terminology Services | Jim Steel27 |

Well-known Terminologies SNOMED-CTbull httpsnomedinfosct([edition](version[date]))bull Filters by subsumption by refset by ECL expressionbull Implicit ValueSets

bull All codes httpsnomedinfosctfhir_vs

bull By subsumption httpsnomedinfosctfhir_vs=isa404684003

bull List of refsets httpsnomedinfosctfhir_vs=refset

bull All codes in a refset httpsnomedinfosctfhir_vs=refset734138000

bull Implicit ConceptMapsbull Historical associations httpsnomedinfosctfhir_cm=900000000000527005

bull For more detail see the advanced session

Basic Terminology Services | Jim Steel28 |

Well-known Terminologies LOINCbull httploincorg

bull Filters parts copyright status multi-axial hierarchy

bull Implicit ValueSetsbull All LOINC codes httploincorgvs

bull Answer Lists httploincorgvsLL715-4

bull Hierarchy httploincorgvsLP29693-6

Basic Terminology Services | Jim Steel29 |

ConceptMapbull Represents a code-to-code mapping typically from a source

ValueSet to a target ValueSet

Basic Terminology Services | Jim Steel30 |

ConceptMap Structure

Basic Terminology Services | Jim Steel31 |

ConceptMap Structure (cont)

Basic Terminology Services | Jim Steel32 |

ConceptMap example

Basic Terminology Services | Jim Steel33 |

ConceptMap operations $translatebull Translate a code from one ValueSet to another according to the

serverrsquos resources andor other knowledge available to the server

bull Typically this means look up a ConceptMap resource and show the corresponding map entries (but not always)

bull Code as codesystemversion or coding or CodeableConcept

bull Specify source ValueSet and target ValueSet (or targetSystem)

bull Can be run in reverse (given target show source)

bull Results come back as Parameters with lsquomatchrsquo elements

Basic Terminology Services | Jim Steel34 |

$translate exampleGET httpsontoservercsiroaustu3-latestConceptMapau-jurisdictions$translatecode=QLDampsystem=httpcsiroaucsau-jurisdictionsamptarget=httpsnomedinfosctfhir_vs

Basic Terminology Services | Jim Steel35 |

Terminology Servicebull A server that implements all these can claim to be a terminology

server by instantiating httphl7orgfhirCapabilityStatementterminology-server in its CapabilityStatementbull CodeSystem ValueSet ConceptMap readsearch

bull $expand $validate-code $lookup $translate $closure

Basic Terminology Services | Jim Steel36 |

Terminology in FHIR Searchbull A lot of search parameters in FHIR are of type lsquotokenrsquo

bull These can leverage terminology services

bull abovebelowbull Eg Conditionbody-sitebelow=httpsnomedinfosct|272673000 (all

Conditions where the finding site is a descendent of Bone Structure

bull innot-inbull Eg

ProcedureRequestcodein=httpsnomedinfosctfhir_vs=refset32570361000036108 (all ProcedureRequests in the Imagine Procedure refset

Basic Terminology Services | Jim Steel37 |

Tips and tricksbull Paging

bull Search results can be paged (httphl7orgfhirsearchhtml see _count parameter)

bull $expand results have a separate paging mechanism (count offset)

bull Can reduce bandwidthresponse times by requesting the specific elements you wantbull includeDefinition includeDesignations on $expand

bull property on $lookup

bull _elements on searchreadoperation results

Basic Terminology Services | Jim Steel38 |

Tips and Tricks (cont)bull Batch

bull A lot of terminology operations are small ndash it can often be more efficient to send them as a batch (httphl7orgfhirhttphtmltransaction) then deal with the result when it comes back

bull Manage content types (Content-Type Accept _format)bull JSON XML

bull Accept-Encoding gzipbull More tips in the advanced session

Warning A lot of these can be server-dependent Theyrsquore not proprietary but you should check support for them by your terminology server

Basic Terminology Services | Jim Steel39 |

What if I am hellipbull Designing interfaces for data entry

bull Choose your CodeSystems (ideally standardized ones)

bull Choose or define your ValueSets

bull If your ValueSet is small a picklist can be populated using $expand

bull If your ValueSet is large a typeahead widget can use $expandfilter=xxx

Basic Terminology Services | Jim Steel40 |

bull Making a profilebull Choosedefine which code systems you want to allow

bull Make ValueSets with lists of codes you want to allow

ndash Make sure you respect the binding strength

bull Set up some processes for maintainingupdating them

ndash Concepts can become deprecated over time you can sometimes use ConceptMaps to find which concepts have changed

Basic Terminology Services | Jim Steel41 |

What if I amhellip

What if I am hellipbull Analyzingvalidating coded data

bull Choose your CodeSystemValueSets

bull Use $validate-code to check whether the codes are valid in the context in which yoursquore using them and whether the display text is correct (many clinical systems allow users to override the display text for the term)

bull Use $translate to map lsquoforeignrsquo coded data into a normalized CodeSystemValueSet for analysis

bull Use $subsumes $closure or $validate-code with an inline ValueSet to categorize data

Basic Terminology Services | Jim Steel42 |

What if I am hellipbull Exploring a set of concepts and how they relate to one another

bull Use $lookup to retrieve their properties and display them in a table

bull Use the lsquochildrsquo and lsquoparentrsquo properties or $subsumes$closure to explore the hierarchy that exists between concepts

Basic Terminology Services | Jim Steel43 |

Obligatory plugs

Terminology server httpsontoservercsiroau

Terminology browser httpsontoservercsiroaushrimp

Terminology resource editorhttpsontoservercsiroausnapper2-dev

Basic Terminology Services | Jim Steel44 |

Page 19: Basic FHIR Terminology Services - Home - FHIR DevDays · 2019-03-19 · Terminology: why •Terminology is the basis of shared meaning between different systems •StructureDefinitions

ValueSet Structure (cont)

Basic Terminology Services | Jim Steel20 |

ValueSet example definition

Basic Terminology Services | Jim Steel21 |

Valueset operations $expandbull Type or instance level idempotent

bull GETPOST ValueSet$expand (must have rsquourlrsquo or lsquovalueSetrsquo)

bull GETPOST ValueSetid$expand

bull Retrieve the expansion of the ValueSet subject to a number of parametersbull Result is a ValueSet with an lsquoexpansionrsquo element

bull Parameters include filter count offset includeDesignations includeDefinition activeOnly excludeNested excludeNotForUI excludePostCoordinated displayLanguage limitedExpansion profile

bull This is the mainbest way to search for a code

Basic Terminology Services | Jim Steel22 |

$expand examplePOST httpsontoservercsiroaustu3-latestValueSet$expand (with the resource in the body)

Basic Terminology Services | Jim Steel23 |

ValueSet operations $validate-codebull Type or instance level idempotent

bull GETPOST ValueSet$validate-code (must have rsquourlrsquo or lsquovalueSetrsquo)

bull GETPOST ValueSetid$validate-code

bull Validate a code (and display text) against a ValueSetbull Determine whether the code is included in the ValueSet

bull (optionally) Determine whether the provided display text is the correct display text for the code

bull Code as codesystemversion or coding or CodeableConcept (multiple)

bull This is the main method for validating coded data

Basic Terminology Services | Jim Steel24 |

$validate-code examplePOST httpsontoservercsiroaustu3-latestValueSet$validate-code

Basic Terminology Services | Jim Steel25 |

Basic Terminology Services | Jim Steel26 |

$validate-code example (cont)

Well-known Terminologiesbull Terminologies such as SNOMED-CT LOINC RxNorm have specific

mappings into FHIR terminology resources with standardisedCodeSystemsbull Standard CodeSystem filtersproperties

bull Implicit ValueSets

bull Implicit ConceptMaps

Basic Terminology Services | Jim Steel27 |

Well-known Terminologies SNOMED-CTbull httpsnomedinfosct([edition](version[date]))bull Filters by subsumption by refset by ECL expressionbull Implicit ValueSets

bull All codes httpsnomedinfosctfhir_vs

bull By subsumption httpsnomedinfosctfhir_vs=isa404684003

bull List of refsets httpsnomedinfosctfhir_vs=refset

bull All codes in a refset httpsnomedinfosctfhir_vs=refset734138000

bull Implicit ConceptMapsbull Historical associations httpsnomedinfosctfhir_cm=900000000000527005

bull For more detail see the advanced session

Basic Terminology Services | Jim Steel28 |

Well-known Terminologies LOINCbull httploincorg

bull Filters parts copyright status multi-axial hierarchy

bull Implicit ValueSetsbull All LOINC codes httploincorgvs

bull Answer Lists httploincorgvsLL715-4

bull Hierarchy httploincorgvsLP29693-6

Basic Terminology Services | Jim Steel29 |

ConceptMapbull Represents a code-to-code mapping typically from a source

ValueSet to a target ValueSet

Basic Terminology Services | Jim Steel30 |

ConceptMap Structure

Basic Terminology Services | Jim Steel31 |

ConceptMap Structure (cont)

Basic Terminology Services | Jim Steel32 |

ConceptMap example

Basic Terminology Services | Jim Steel33 |

ConceptMap operations $translatebull Translate a code from one ValueSet to another according to the

serverrsquos resources andor other knowledge available to the server

bull Typically this means look up a ConceptMap resource and show the corresponding map entries (but not always)

bull Code as codesystemversion or coding or CodeableConcept

bull Specify source ValueSet and target ValueSet (or targetSystem)

bull Can be run in reverse (given target show source)

bull Results come back as Parameters with lsquomatchrsquo elements

Basic Terminology Services | Jim Steel34 |

$translate exampleGET httpsontoservercsiroaustu3-latestConceptMapau-jurisdictions$translatecode=QLDampsystem=httpcsiroaucsau-jurisdictionsamptarget=httpsnomedinfosctfhir_vs

Basic Terminology Services | Jim Steel35 |

Terminology Servicebull A server that implements all these can claim to be a terminology

server by instantiating httphl7orgfhirCapabilityStatementterminology-server in its CapabilityStatementbull CodeSystem ValueSet ConceptMap readsearch

bull $expand $validate-code $lookup $translate $closure

Basic Terminology Services | Jim Steel36 |

Terminology in FHIR Searchbull A lot of search parameters in FHIR are of type lsquotokenrsquo

bull These can leverage terminology services

bull abovebelowbull Eg Conditionbody-sitebelow=httpsnomedinfosct|272673000 (all

Conditions where the finding site is a descendent of Bone Structure

bull innot-inbull Eg

ProcedureRequestcodein=httpsnomedinfosctfhir_vs=refset32570361000036108 (all ProcedureRequests in the Imagine Procedure refset

Basic Terminology Services | Jim Steel37 |

Tips and tricksbull Paging

bull Search results can be paged (httphl7orgfhirsearchhtml see _count parameter)

bull $expand results have a separate paging mechanism (count offset)

bull Can reduce bandwidthresponse times by requesting the specific elements you wantbull includeDefinition includeDesignations on $expand

bull property on $lookup

bull _elements on searchreadoperation results

Basic Terminology Services | Jim Steel38 |

Tips and Tricks (cont)bull Batch

bull A lot of terminology operations are small ndash it can often be more efficient to send them as a batch (httphl7orgfhirhttphtmltransaction) then deal with the result when it comes back

bull Manage content types (Content-Type Accept _format)bull JSON XML

bull Accept-Encoding gzipbull More tips in the advanced session

Warning A lot of these can be server-dependent Theyrsquore not proprietary but you should check support for them by your terminology server

Basic Terminology Services | Jim Steel39 |

What if I am hellipbull Designing interfaces for data entry

bull Choose your CodeSystems (ideally standardized ones)

bull Choose or define your ValueSets

bull If your ValueSet is small a picklist can be populated using $expand

bull If your ValueSet is large a typeahead widget can use $expandfilter=xxx

Basic Terminology Services | Jim Steel40 |

bull Making a profilebull Choosedefine which code systems you want to allow

bull Make ValueSets with lists of codes you want to allow

ndash Make sure you respect the binding strength

bull Set up some processes for maintainingupdating them

ndash Concepts can become deprecated over time you can sometimes use ConceptMaps to find which concepts have changed

Basic Terminology Services | Jim Steel41 |

What if I amhellip

What if I am hellipbull Analyzingvalidating coded data

bull Choose your CodeSystemValueSets

bull Use $validate-code to check whether the codes are valid in the context in which yoursquore using them and whether the display text is correct (many clinical systems allow users to override the display text for the term)

bull Use $translate to map lsquoforeignrsquo coded data into a normalized CodeSystemValueSet for analysis

bull Use $subsumes $closure or $validate-code with an inline ValueSet to categorize data

Basic Terminology Services | Jim Steel42 |

What if I am hellipbull Exploring a set of concepts and how they relate to one another

bull Use $lookup to retrieve their properties and display them in a table

bull Use the lsquochildrsquo and lsquoparentrsquo properties or $subsumes$closure to explore the hierarchy that exists between concepts

Basic Terminology Services | Jim Steel43 |

Obligatory plugs

Terminology server httpsontoservercsiroau

Terminology browser httpsontoservercsiroaushrimp

Terminology resource editorhttpsontoservercsiroausnapper2-dev

Basic Terminology Services | Jim Steel44 |

Page 20: Basic FHIR Terminology Services - Home - FHIR DevDays · 2019-03-19 · Terminology: why •Terminology is the basis of shared meaning between different systems •StructureDefinitions

ValueSet example definition

Basic Terminology Services | Jim Steel21 |

Valueset operations $expandbull Type or instance level idempotent

bull GETPOST ValueSet$expand (must have rsquourlrsquo or lsquovalueSetrsquo)

bull GETPOST ValueSetid$expand

bull Retrieve the expansion of the ValueSet subject to a number of parametersbull Result is a ValueSet with an lsquoexpansionrsquo element

bull Parameters include filter count offset includeDesignations includeDefinition activeOnly excludeNested excludeNotForUI excludePostCoordinated displayLanguage limitedExpansion profile

bull This is the mainbest way to search for a code

Basic Terminology Services | Jim Steel22 |

$expand examplePOST httpsontoservercsiroaustu3-latestValueSet$expand (with the resource in the body)

Basic Terminology Services | Jim Steel23 |

ValueSet operations $validate-codebull Type or instance level idempotent

bull GETPOST ValueSet$validate-code (must have rsquourlrsquo or lsquovalueSetrsquo)

bull GETPOST ValueSetid$validate-code

bull Validate a code (and display text) against a ValueSetbull Determine whether the code is included in the ValueSet

bull (optionally) Determine whether the provided display text is the correct display text for the code

bull Code as codesystemversion or coding or CodeableConcept (multiple)

bull This is the main method for validating coded data

Basic Terminology Services | Jim Steel24 |

$validate-code examplePOST httpsontoservercsiroaustu3-latestValueSet$validate-code

Basic Terminology Services | Jim Steel25 |

Basic Terminology Services | Jim Steel26 |

$validate-code example (cont)

Well-known Terminologiesbull Terminologies such as SNOMED-CT LOINC RxNorm have specific

mappings into FHIR terminology resources with standardisedCodeSystemsbull Standard CodeSystem filtersproperties

bull Implicit ValueSets

bull Implicit ConceptMaps

Basic Terminology Services | Jim Steel27 |

Well-known Terminologies SNOMED-CTbull httpsnomedinfosct([edition](version[date]))bull Filters by subsumption by refset by ECL expressionbull Implicit ValueSets

bull All codes httpsnomedinfosctfhir_vs

bull By subsumption httpsnomedinfosctfhir_vs=isa404684003

bull List of refsets httpsnomedinfosctfhir_vs=refset

bull All codes in a refset httpsnomedinfosctfhir_vs=refset734138000

bull Implicit ConceptMapsbull Historical associations httpsnomedinfosctfhir_cm=900000000000527005

bull For more detail see the advanced session

Basic Terminology Services | Jim Steel28 |

Well-known Terminologies LOINCbull httploincorg

bull Filters parts copyright status multi-axial hierarchy

bull Implicit ValueSetsbull All LOINC codes httploincorgvs

bull Answer Lists httploincorgvsLL715-4

bull Hierarchy httploincorgvsLP29693-6

Basic Terminology Services | Jim Steel29 |

ConceptMapbull Represents a code-to-code mapping typically from a source

ValueSet to a target ValueSet

Basic Terminology Services | Jim Steel30 |

ConceptMap Structure

Basic Terminology Services | Jim Steel31 |

ConceptMap Structure (cont)

Basic Terminology Services | Jim Steel32 |

ConceptMap example

Basic Terminology Services | Jim Steel33 |

ConceptMap operations $translatebull Translate a code from one ValueSet to another according to the

serverrsquos resources andor other knowledge available to the server

bull Typically this means look up a ConceptMap resource and show the corresponding map entries (but not always)

bull Code as codesystemversion or coding or CodeableConcept

bull Specify source ValueSet and target ValueSet (or targetSystem)

bull Can be run in reverse (given target show source)

bull Results come back as Parameters with lsquomatchrsquo elements

Basic Terminology Services | Jim Steel34 |

$translate exampleGET httpsontoservercsiroaustu3-latestConceptMapau-jurisdictions$translatecode=QLDampsystem=httpcsiroaucsau-jurisdictionsamptarget=httpsnomedinfosctfhir_vs

Basic Terminology Services | Jim Steel35 |

Terminology Servicebull A server that implements all these can claim to be a terminology

server by instantiating httphl7orgfhirCapabilityStatementterminology-server in its CapabilityStatementbull CodeSystem ValueSet ConceptMap readsearch

bull $expand $validate-code $lookup $translate $closure

Basic Terminology Services | Jim Steel36 |

Terminology in FHIR Searchbull A lot of search parameters in FHIR are of type lsquotokenrsquo

bull These can leverage terminology services

bull abovebelowbull Eg Conditionbody-sitebelow=httpsnomedinfosct|272673000 (all

Conditions where the finding site is a descendent of Bone Structure

bull innot-inbull Eg

ProcedureRequestcodein=httpsnomedinfosctfhir_vs=refset32570361000036108 (all ProcedureRequests in the Imagine Procedure refset

Basic Terminology Services | Jim Steel37 |

Tips and tricksbull Paging

bull Search results can be paged (httphl7orgfhirsearchhtml see _count parameter)

bull $expand results have a separate paging mechanism (count offset)

bull Can reduce bandwidthresponse times by requesting the specific elements you wantbull includeDefinition includeDesignations on $expand

bull property on $lookup

bull _elements on searchreadoperation results

Basic Terminology Services | Jim Steel38 |

Tips and Tricks (cont)bull Batch

bull A lot of terminology operations are small ndash it can often be more efficient to send them as a batch (httphl7orgfhirhttphtmltransaction) then deal with the result when it comes back

bull Manage content types (Content-Type Accept _format)bull JSON XML

bull Accept-Encoding gzipbull More tips in the advanced session

Warning A lot of these can be server-dependent Theyrsquore not proprietary but you should check support for them by your terminology server

Basic Terminology Services | Jim Steel39 |

What if I am hellipbull Designing interfaces for data entry

bull Choose your CodeSystems (ideally standardized ones)

bull Choose or define your ValueSets

bull If your ValueSet is small a picklist can be populated using $expand

bull If your ValueSet is large a typeahead widget can use $expandfilter=xxx

Basic Terminology Services | Jim Steel40 |

bull Making a profilebull Choosedefine which code systems you want to allow

bull Make ValueSets with lists of codes you want to allow

ndash Make sure you respect the binding strength

bull Set up some processes for maintainingupdating them

ndash Concepts can become deprecated over time you can sometimes use ConceptMaps to find which concepts have changed

Basic Terminology Services | Jim Steel41 |

What if I amhellip

What if I am hellipbull Analyzingvalidating coded data

bull Choose your CodeSystemValueSets

bull Use $validate-code to check whether the codes are valid in the context in which yoursquore using them and whether the display text is correct (many clinical systems allow users to override the display text for the term)

bull Use $translate to map lsquoforeignrsquo coded data into a normalized CodeSystemValueSet for analysis

bull Use $subsumes $closure or $validate-code with an inline ValueSet to categorize data

Basic Terminology Services | Jim Steel42 |

What if I am hellipbull Exploring a set of concepts and how they relate to one another

bull Use $lookup to retrieve their properties and display them in a table

bull Use the lsquochildrsquo and lsquoparentrsquo properties or $subsumes$closure to explore the hierarchy that exists between concepts

Basic Terminology Services | Jim Steel43 |

Obligatory plugs

Terminology server httpsontoservercsiroau

Terminology browser httpsontoservercsiroaushrimp

Terminology resource editorhttpsontoservercsiroausnapper2-dev

Basic Terminology Services | Jim Steel44 |

Page 21: Basic FHIR Terminology Services - Home - FHIR DevDays · 2019-03-19 · Terminology: why •Terminology is the basis of shared meaning between different systems •StructureDefinitions

Valueset operations $expandbull Type or instance level idempotent

bull GETPOST ValueSet$expand (must have rsquourlrsquo or lsquovalueSetrsquo)

bull GETPOST ValueSetid$expand

bull Retrieve the expansion of the ValueSet subject to a number of parametersbull Result is a ValueSet with an lsquoexpansionrsquo element

bull Parameters include filter count offset includeDesignations includeDefinition activeOnly excludeNested excludeNotForUI excludePostCoordinated displayLanguage limitedExpansion profile

bull This is the mainbest way to search for a code

Basic Terminology Services | Jim Steel22 |

$expand examplePOST httpsontoservercsiroaustu3-latestValueSet$expand (with the resource in the body)

Basic Terminology Services | Jim Steel23 |

ValueSet operations $validate-codebull Type or instance level idempotent

bull GETPOST ValueSet$validate-code (must have rsquourlrsquo or lsquovalueSetrsquo)

bull GETPOST ValueSetid$validate-code

bull Validate a code (and display text) against a ValueSetbull Determine whether the code is included in the ValueSet

bull (optionally) Determine whether the provided display text is the correct display text for the code

bull Code as codesystemversion or coding or CodeableConcept (multiple)

bull This is the main method for validating coded data

Basic Terminology Services | Jim Steel24 |

$validate-code examplePOST httpsontoservercsiroaustu3-latestValueSet$validate-code

Basic Terminology Services | Jim Steel25 |

Basic Terminology Services | Jim Steel26 |

$validate-code example (cont)

Well-known Terminologiesbull Terminologies such as SNOMED-CT LOINC RxNorm have specific

mappings into FHIR terminology resources with standardisedCodeSystemsbull Standard CodeSystem filtersproperties

bull Implicit ValueSets

bull Implicit ConceptMaps

Basic Terminology Services | Jim Steel27 |

Well-known Terminologies SNOMED-CTbull httpsnomedinfosct([edition](version[date]))bull Filters by subsumption by refset by ECL expressionbull Implicit ValueSets

bull All codes httpsnomedinfosctfhir_vs

bull By subsumption httpsnomedinfosctfhir_vs=isa404684003

bull List of refsets httpsnomedinfosctfhir_vs=refset

bull All codes in a refset httpsnomedinfosctfhir_vs=refset734138000

bull Implicit ConceptMapsbull Historical associations httpsnomedinfosctfhir_cm=900000000000527005

bull For more detail see the advanced session

Basic Terminology Services | Jim Steel28 |

Well-known Terminologies LOINCbull httploincorg

bull Filters parts copyright status multi-axial hierarchy

bull Implicit ValueSetsbull All LOINC codes httploincorgvs

bull Answer Lists httploincorgvsLL715-4

bull Hierarchy httploincorgvsLP29693-6

Basic Terminology Services | Jim Steel29 |

ConceptMapbull Represents a code-to-code mapping typically from a source

ValueSet to a target ValueSet

Basic Terminology Services | Jim Steel30 |

ConceptMap Structure

Basic Terminology Services | Jim Steel31 |

ConceptMap Structure (cont)

Basic Terminology Services | Jim Steel32 |

ConceptMap example

Basic Terminology Services | Jim Steel33 |

ConceptMap operations $translatebull Translate a code from one ValueSet to another according to the

serverrsquos resources andor other knowledge available to the server

bull Typically this means look up a ConceptMap resource and show the corresponding map entries (but not always)

bull Code as codesystemversion or coding or CodeableConcept

bull Specify source ValueSet and target ValueSet (or targetSystem)

bull Can be run in reverse (given target show source)

bull Results come back as Parameters with lsquomatchrsquo elements

Basic Terminology Services | Jim Steel34 |

$translate exampleGET httpsontoservercsiroaustu3-latestConceptMapau-jurisdictions$translatecode=QLDampsystem=httpcsiroaucsau-jurisdictionsamptarget=httpsnomedinfosctfhir_vs

Basic Terminology Services | Jim Steel35 |

Terminology Servicebull A server that implements all these can claim to be a terminology

server by instantiating httphl7orgfhirCapabilityStatementterminology-server in its CapabilityStatementbull CodeSystem ValueSet ConceptMap readsearch

bull $expand $validate-code $lookup $translate $closure

Basic Terminology Services | Jim Steel36 |

Terminology in FHIR Searchbull A lot of search parameters in FHIR are of type lsquotokenrsquo

bull These can leverage terminology services

bull abovebelowbull Eg Conditionbody-sitebelow=httpsnomedinfosct|272673000 (all

Conditions where the finding site is a descendent of Bone Structure

bull innot-inbull Eg

ProcedureRequestcodein=httpsnomedinfosctfhir_vs=refset32570361000036108 (all ProcedureRequests in the Imagine Procedure refset

Basic Terminology Services | Jim Steel37 |

Tips and tricksbull Paging

bull Search results can be paged (httphl7orgfhirsearchhtml see _count parameter)

bull $expand results have a separate paging mechanism (count offset)

bull Can reduce bandwidthresponse times by requesting the specific elements you wantbull includeDefinition includeDesignations on $expand

bull property on $lookup

bull _elements on searchreadoperation results

Basic Terminology Services | Jim Steel38 |

Tips and Tricks (cont)bull Batch

bull A lot of terminology operations are small ndash it can often be more efficient to send them as a batch (httphl7orgfhirhttphtmltransaction) then deal with the result when it comes back

bull Manage content types (Content-Type Accept _format)bull JSON XML

bull Accept-Encoding gzipbull More tips in the advanced session

Warning A lot of these can be server-dependent Theyrsquore not proprietary but you should check support for them by your terminology server

Basic Terminology Services | Jim Steel39 |

What if I am hellipbull Designing interfaces for data entry

bull Choose your CodeSystems (ideally standardized ones)

bull Choose or define your ValueSets

bull If your ValueSet is small a picklist can be populated using $expand

bull If your ValueSet is large a typeahead widget can use $expandfilter=xxx

Basic Terminology Services | Jim Steel40 |

bull Making a profilebull Choosedefine which code systems you want to allow

bull Make ValueSets with lists of codes you want to allow

ndash Make sure you respect the binding strength

bull Set up some processes for maintainingupdating them

ndash Concepts can become deprecated over time you can sometimes use ConceptMaps to find which concepts have changed

Basic Terminology Services | Jim Steel41 |

What if I amhellip

What if I am hellipbull Analyzingvalidating coded data

bull Choose your CodeSystemValueSets

bull Use $validate-code to check whether the codes are valid in the context in which yoursquore using them and whether the display text is correct (many clinical systems allow users to override the display text for the term)

bull Use $translate to map lsquoforeignrsquo coded data into a normalized CodeSystemValueSet for analysis

bull Use $subsumes $closure or $validate-code with an inline ValueSet to categorize data

Basic Terminology Services | Jim Steel42 |

What if I am hellipbull Exploring a set of concepts and how they relate to one another

bull Use $lookup to retrieve their properties and display them in a table

bull Use the lsquochildrsquo and lsquoparentrsquo properties or $subsumes$closure to explore the hierarchy that exists between concepts

Basic Terminology Services | Jim Steel43 |

Obligatory plugs

Terminology server httpsontoservercsiroau

Terminology browser httpsontoservercsiroaushrimp

Terminology resource editorhttpsontoservercsiroausnapper2-dev

Basic Terminology Services | Jim Steel44 |

Page 22: Basic FHIR Terminology Services - Home - FHIR DevDays · 2019-03-19 · Terminology: why •Terminology is the basis of shared meaning between different systems •StructureDefinitions

$expand examplePOST httpsontoservercsiroaustu3-latestValueSet$expand (with the resource in the body)

Basic Terminology Services | Jim Steel23 |

ValueSet operations $validate-codebull Type or instance level idempotent

bull GETPOST ValueSet$validate-code (must have rsquourlrsquo or lsquovalueSetrsquo)

bull GETPOST ValueSetid$validate-code

bull Validate a code (and display text) against a ValueSetbull Determine whether the code is included in the ValueSet

bull (optionally) Determine whether the provided display text is the correct display text for the code

bull Code as codesystemversion or coding or CodeableConcept (multiple)

bull This is the main method for validating coded data

Basic Terminology Services | Jim Steel24 |

$validate-code examplePOST httpsontoservercsiroaustu3-latestValueSet$validate-code

Basic Terminology Services | Jim Steel25 |

Basic Terminology Services | Jim Steel26 |

$validate-code example (cont)

Well-known Terminologiesbull Terminologies such as SNOMED-CT LOINC RxNorm have specific

mappings into FHIR terminology resources with standardisedCodeSystemsbull Standard CodeSystem filtersproperties

bull Implicit ValueSets

bull Implicit ConceptMaps

Basic Terminology Services | Jim Steel27 |

Well-known Terminologies SNOMED-CTbull httpsnomedinfosct([edition](version[date]))bull Filters by subsumption by refset by ECL expressionbull Implicit ValueSets

bull All codes httpsnomedinfosctfhir_vs

bull By subsumption httpsnomedinfosctfhir_vs=isa404684003

bull List of refsets httpsnomedinfosctfhir_vs=refset

bull All codes in a refset httpsnomedinfosctfhir_vs=refset734138000

bull Implicit ConceptMapsbull Historical associations httpsnomedinfosctfhir_cm=900000000000527005

bull For more detail see the advanced session

Basic Terminology Services | Jim Steel28 |

Well-known Terminologies LOINCbull httploincorg

bull Filters parts copyright status multi-axial hierarchy

bull Implicit ValueSetsbull All LOINC codes httploincorgvs

bull Answer Lists httploincorgvsLL715-4

bull Hierarchy httploincorgvsLP29693-6

Basic Terminology Services | Jim Steel29 |

ConceptMapbull Represents a code-to-code mapping typically from a source

ValueSet to a target ValueSet

Basic Terminology Services | Jim Steel30 |

ConceptMap Structure

Basic Terminology Services | Jim Steel31 |

ConceptMap Structure (cont)

Basic Terminology Services | Jim Steel32 |

ConceptMap example

Basic Terminology Services | Jim Steel33 |

ConceptMap operations $translatebull Translate a code from one ValueSet to another according to the

serverrsquos resources andor other knowledge available to the server

bull Typically this means look up a ConceptMap resource and show the corresponding map entries (but not always)

bull Code as codesystemversion or coding or CodeableConcept

bull Specify source ValueSet and target ValueSet (or targetSystem)

bull Can be run in reverse (given target show source)

bull Results come back as Parameters with lsquomatchrsquo elements

Basic Terminology Services | Jim Steel34 |

$translate exampleGET httpsontoservercsiroaustu3-latestConceptMapau-jurisdictions$translatecode=QLDampsystem=httpcsiroaucsau-jurisdictionsamptarget=httpsnomedinfosctfhir_vs

Basic Terminology Services | Jim Steel35 |

Terminology Servicebull A server that implements all these can claim to be a terminology

server by instantiating httphl7orgfhirCapabilityStatementterminology-server in its CapabilityStatementbull CodeSystem ValueSet ConceptMap readsearch

bull $expand $validate-code $lookup $translate $closure

Basic Terminology Services | Jim Steel36 |

Terminology in FHIR Searchbull A lot of search parameters in FHIR are of type lsquotokenrsquo

bull These can leverage terminology services

bull abovebelowbull Eg Conditionbody-sitebelow=httpsnomedinfosct|272673000 (all

Conditions where the finding site is a descendent of Bone Structure

bull innot-inbull Eg

ProcedureRequestcodein=httpsnomedinfosctfhir_vs=refset32570361000036108 (all ProcedureRequests in the Imagine Procedure refset

Basic Terminology Services | Jim Steel37 |

Tips and tricksbull Paging

bull Search results can be paged (httphl7orgfhirsearchhtml see _count parameter)

bull $expand results have a separate paging mechanism (count offset)

bull Can reduce bandwidthresponse times by requesting the specific elements you wantbull includeDefinition includeDesignations on $expand

bull property on $lookup

bull _elements on searchreadoperation results

Basic Terminology Services | Jim Steel38 |

Tips and Tricks (cont)bull Batch

bull A lot of terminology operations are small ndash it can often be more efficient to send them as a batch (httphl7orgfhirhttphtmltransaction) then deal with the result when it comes back

bull Manage content types (Content-Type Accept _format)bull JSON XML

bull Accept-Encoding gzipbull More tips in the advanced session

Warning A lot of these can be server-dependent Theyrsquore not proprietary but you should check support for them by your terminology server

Basic Terminology Services | Jim Steel39 |

What if I am hellipbull Designing interfaces for data entry

bull Choose your CodeSystems (ideally standardized ones)

bull Choose or define your ValueSets

bull If your ValueSet is small a picklist can be populated using $expand

bull If your ValueSet is large a typeahead widget can use $expandfilter=xxx

Basic Terminology Services | Jim Steel40 |

bull Making a profilebull Choosedefine which code systems you want to allow

bull Make ValueSets with lists of codes you want to allow

ndash Make sure you respect the binding strength

bull Set up some processes for maintainingupdating them

ndash Concepts can become deprecated over time you can sometimes use ConceptMaps to find which concepts have changed

Basic Terminology Services | Jim Steel41 |

What if I amhellip

What if I am hellipbull Analyzingvalidating coded data

bull Choose your CodeSystemValueSets

bull Use $validate-code to check whether the codes are valid in the context in which yoursquore using them and whether the display text is correct (many clinical systems allow users to override the display text for the term)

bull Use $translate to map lsquoforeignrsquo coded data into a normalized CodeSystemValueSet for analysis

bull Use $subsumes $closure or $validate-code with an inline ValueSet to categorize data

Basic Terminology Services | Jim Steel42 |

What if I am hellipbull Exploring a set of concepts and how they relate to one another

bull Use $lookup to retrieve their properties and display them in a table

bull Use the lsquochildrsquo and lsquoparentrsquo properties or $subsumes$closure to explore the hierarchy that exists between concepts

Basic Terminology Services | Jim Steel43 |

Obligatory plugs

Terminology server httpsontoservercsiroau

Terminology browser httpsontoservercsiroaushrimp

Terminology resource editorhttpsontoservercsiroausnapper2-dev

Basic Terminology Services | Jim Steel44 |

Page 23: Basic FHIR Terminology Services - Home - FHIR DevDays · 2019-03-19 · Terminology: why •Terminology is the basis of shared meaning between different systems •StructureDefinitions

ValueSet operations $validate-codebull Type or instance level idempotent

bull GETPOST ValueSet$validate-code (must have rsquourlrsquo or lsquovalueSetrsquo)

bull GETPOST ValueSetid$validate-code

bull Validate a code (and display text) against a ValueSetbull Determine whether the code is included in the ValueSet

bull (optionally) Determine whether the provided display text is the correct display text for the code

bull Code as codesystemversion or coding or CodeableConcept (multiple)

bull This is the main method for validating coded data

Basic Terminology Services | Jim Steel24 |

$validate-code examplePOST httpsontoservercsiroaustu3-latestValueSet$validate-code

Basic Terminology Services | Jim Steel25 |

Basic Terminology Services | Jim Steel26 |

$validate-code example (cont)

Well-known Terminologiesbull Terminologies such as SNOMED-CT LOINC RxNorm have specific

mappings into FHIR terminology resources with standardisedCodeSystemsbull Standard CodeSystem filtersproperties

bull Implicit ValueSets

bull Implicit ConceptMaps

Basic Terminology Services | Jim Steel27 |

Well-known Terminologies SNOMED-CTbull httpsnomedinfosct([edition](version[date]))bull Filters by subsumption by refset by ECL expressionbull Implicit ValueSets

bull All codes httpsnomedinfosctfhir_vs

bull By subsumption httpsnomedinfosctfhir_vs=isa404684003

bull List of refsets httpsnomedinfosctfhir_vs=refset

bull All codes in a refset httpsnomedinfosctfhir_vs=refset734138000

bull Implicit ConceptMapsbull Historical associations httpsnomedinfosctfhir_cm=900000000000527005

bull For more detail see the advanced session

Basic Terminology Services | Jim Steel28 |

Well-known Terminologies LOINCbull httploincorg

bull Filters parts copyright status multi-axial hierarchy

bull Implicit ValueSetsbull All LOINC codes httploincorgvs

bull Answer Lists httploincorgvsLL715-4

bull Hierarchy httploincorgvsLP29693-6

Basic Terminology Services | Jim Steel29 |

ConceptMapbull Represents a code-to-code mapping typically from a source

ValueSet to a target ValueSet

Basic Terminology Services | Jim Steel30 |

ConceptMap Structure

Basic Terminology Services | Jim Steel31 |

ConceptMap Structure (cont)

Basic Terminology Services | Jim Steel32 |

ConceptMap example

Basic Terminology Services | Jim Steel33 |

ConceptMap operations $translatebull Translate a code from one ValueSet to another according to the

serverrsquos resources andor other knowledge available to the server

bull Typically this means look up a ConceptMap resource and show the corresponding map entries (but not always)

bull Code as codesystemversion or coding or CodeableConcept

bull Specify source ValueSet and target ValueSet (or targetSystem)

bull Can be run in reverse (given target show source)

bull Results come back as Parameters with lsquomatchrsquo elements

Basic Terminology Services | Jim Steel34 |

$translate exampleGET httpsontoservercsiroaustu3-latestConceptMapau-jurisdictions$translatecode=QLDampsystem=httpcsiroaucsau-jurisdictionsamptarget=httpsnomedinfosctfhir_vs

Basic Terminology Services | Jim Steel35 |

Terminology Servicebull A server that implements all these can claim to be a terminology

server by instantiating httphl7orgfhirCapabilityStatementterminology-server in its CapabilityStatementbull CodeSystem ValueSet ConceptMap readsearch

bull $expand $validate-code $lookup $translate $closure

Basic Terminology Services | Jim Steel36 |

Terminology in FHIR Searchbull A lot of search parameters in FHIR are of type lsquotokenrsquo

bull These can leverage terminology services

bull abovebelowbull Eg Conditionbody-sitebelow=httpsnomedinfosct|272673000 (all

Conditions where the finding site is a descendent of Bone Structure

bull innot-inbull Eg

ProcedureRequestcodein=httpsnomedinfosctfhir_vs=refset32570361000036108 (all ProcedureRequests in the Imagine Procedure refset

Basic Terminology Services | Jim Steel37 |

Tips and tricksbull Paging

bull Search results can be paged (httphl7orgfhirsearchhtml see _count parameter)

bull $expand results have a separate paging mechanism (count offset)

bull Can reduce bandwidthresponse times by requesting the specific elements you wantbull includeDefinition includeDesignations on $expand

bull property on $lookup

bull _elements on searchreadoperation results

Basic Terminology Services | Jim Steel38 |

Tips and Tricks (cont)bull Batch

bull A lot of terminology operations are small ndash it can often be more efficient to send them as a batch (httphl7orgfhirhttphtmltransaction) then deal with the result when it comes back

bull Manage content types (Content-Type Accept _format)bull JSON XML

bull Accept-Encoding gzipbull More tips in the advanced session

Warning A lot of these can be server-dependent Theyrsquore not proprietary but you should check support for them by your terminology server

Basic Terminology Services | Jim Steel39 |

What if I am hellipbull Designing interfaces for data entry

bull Choose your CodeSystems (ideally standardized ones)

bull Choose or define your ValueSets

bull If your ValueSet is small a picklist can be populated using $expand

bull If your ValueSet is large a typeahead widget can use $expandfilter=xxx

Basic Terminology Services | Jim Steel40 |

bull Making a profilebull Choosedefine which code systems you want to allow

bull Make ValueSets with lists of codes you want to allow

ndash Make sure you respect the binding strength

bull Set up some processes for maintainingupdating them

ndash Concepts can become deprecated over time you can sometimes use ConceptMaps to find which concepts have changed

Basic Terminology Services | Jim Steel41 |

What if I amhellip

What if I am hellipbull Analyzingvalidating coded data

bull Choose your CodeSystemValueSets

bull Use $validate-code to check whether the codes are valid in the context in which yoursquore using them and whether the display text is correct (many clinical systems allow users to override the display text for the term)

bull Use $translate to map lsquoforeignrsquo coded data into a normalized CodeSystemValueSet for analysis

bull Use $subsumes $closure or $validate-code with an inline ValueSet to categorize data

Basic Terminology Services | Jim Steel42 |

What if I am hellipbull Exploring a set of concepts and how they relate to one another

bull Use $lookup to retrieve their properties and display them in a table

bull Use the lsquochildrsquo and lsquoparentrsquo properties or $subsumes$closure to explore the hierarchy that exists between concepts

Basic Terminology Services | Jim Steel43 |

Obligatory plugs

Terminology server httpsontoservercsiroau

Terminology browser httpsontoservercsiroaushrimp

Terminology resource editorhttpsontoservercsiroausnapper2-dev

Basic Terminology Services | Jim Steel44 |

Page 24: Basic FHIR Terminology Services - Home - FHIR DevDays · 2019-03-19 · Terminology: why •Terminology is the basis of shared meaning between different systems •StructureDefinitions

$validate-code examplePOST httpsontoservercsiroaustu3-latestValueSet$validate-code

Basic Terminology Services | Jim Steel25 |

Basic Terminology Services | Jim Steel26 |

$validate-code example (cont)

Well-known Terminologiesbull Terminologies such as SNOMED-CT LOINC RxNorm have specific

mappings into FHIR terminology resources with standardisedCodeSystemsbull Standard CodeSystem filtersproperties

bull Implicit ValueSets

bull Implicit ConceptMaps

Basic Terminology Services | Jim Steel27 |

Well-known Terminologies SNOMED-CTbull httpsnomedinfosct([edition](version[date]))bull Filters by subsumption by refset by ECL expressionbull Implicit ValueSets

bull All codes httpsnomedinfosctfhir_vs

bull By subsumption httpsnomedinfosctfhir_vs=isa404684003

bull List of refsets httpsnomedinfosctfhir_vs=refset

bull All codes in a refset httpsnomedinfosctfhir_vs=refset734138000

bull Implicit ConceptMapsbull Historical associations httpsnomedinfosctfhir_cm=900000000000527005

bull For more detail see the advanced session

Basic Terminology Services | Jim Steel28 |

Well-known Terminologies LOINCbull httploincorg

bull Filters parts copyright status multi-axial hierarchy

bull Implicit ValueSetsbull All LOINC codes httploincorgvs

bull Answer Lists httploincorgvsLL715-4

bull Hierarchy httploincorgvsLP29693-6

Basic Terminology Services | Jim Steel29 |

ConceptMapbull Represents a code-to-code mapping typically from a source

ValueSet to a target ValueSet

Basic Terminology Services | Jim Steel30 |

ConceptMap Structure

Basic Terminology Services | Jim Steel31 |

ConceptMap Structure (cont)

Basic Terminology Services | Jim Steel32 |

ConceptMap example

Basic Terminology Services | Jim Steel33 |

ConceptMap operations $translatebull Translate a code from one ValueSet to another according to the

serverrsquos resources andor other knowledge available to the server

bull Typically this means look up a ConceptMap resource and show the corresponding map entries (but not always)

bull Code as codesystemversion or coding or CodeableConcept

bull Specify source ValueSet and target ValueSet (or targetSystem)

bull Can be run in reverse (given target show source)

bull Results come back as Parameters with lsquomatchrsquo elements

Basic Terminology Services | Jim Steel34 |

$translate exampleGET httpsontoservercsiroaustu3-latestConceptMapau-jurisdictions$translatecode=QLDampsystem=httpcsiroaucsau-jurisdictionsamptarget=httpsnomedinfosctfhir_vs

Basic Terminology Services | Jim Steel35 |

Terminology Servicebull A server that implements all these can claim to be a terminology

server by instantiating httphl7orgfhirCapabilityStatementterminology-server in its CapabilityStatementbull CodeSystem ValueSet ConceptMap readsearch

bull $expand $validate-code $lookup $translate $closure

Basic Terminology Services | Jim Steel36 |

Terminology in FHIR Searchbull A lot of search parameters in FHIR are of type lsquotokenrsquo

bull These can leverage terminology services

bull abovebelowbull Eg Conditionbody-sitebelow=httpsnomedinfosct|272673000 (all

Conditions where the finding site is a descendent of Bone Structure

bull innot-inbull Eg

ProcedureRequestcodein=httpsnomedinfosctfhir_vs=refset32570361000036108 (all ProcedureRequests in the Imagine Procedure refset

Basic Terminology Services | Jim Steel37 |

Tips and tricksbull Paging

bull Search results can be paged (httphl7orgfhirsearchhtml see _count parameter)

bull $expand results have a separate paging mechanism (count offset)

bull Can reduce bandwidthresponse times by requesting the specific elements you wantbull includeDefinition includeDesignations on $expand

bull property on $lookup

bull _elements on searchreadoperation results

Basic Terminology Services | Jim Steel38 |

Tips and Tricks (cont)bull Batch

bull A lot of terminology operations are small ndash it can often be more efficient to send them as a batch (httphl7orgfhirhttphtmltransaction) then deal with the result when it comes back

bull Manage content types (Content-Type Accept _format)bull JSON XML

bull Accept-Encoding gzipbull More tips in the advanced session

Warning A lot of these can be server-dependent Theyrsquore not proprietary but you should check support for them by your terminology server

Basic Terminology Services | Jim Steel39 |

What if I am hellipbull Designing interfaces for data entry

bull Choose your CodeSystems (ideally standardized ones)

bull Choose or define your ValueSets

bull If your ValueSet is small a picklist can be populated using $expand

bull If your ValueSet is large a typeahead widget can use $expandfilter=xxx

Basic Terminology Services | Jim Steel40 |

bull Making a profilebull Choosedefine which code systems you want to allow

bull Make ValueSets with lists of codes you want to allow

ndash Make sure you respect the binding strength

bull Set up some processes for maintainingupdating them

ndash Concepts can become deprecated over time you can sometimes use ConceptMaps to find which concepts have changed

Basic Terminology Services | Jim Steel41 |

What if I amhellip

What if I am hellipbull Analyzingvalidating coded data

bull Choose your CodeSystemValueSets

bull Use $validate-code to check whether the codes are valid in the context in which yoursquore using them and whether the display text is correct (many clinical systems allow users to override the display text for the term)

bull Use $translate to map lsquoforeignrsquo coded data into a normalized CodeSystemValueSet for analysis

bull Use $subsumes $closure or $validate-code with an inline ValueSet to categorize data

Basic Terminology Services | Jim Steel42 |

What if I am hellipbull Exploring a set of concepts and how they relate to one another

bull Use $lookup to retrieve their properties and display them in a table

bull Use the lsquochildrsquo and lsquoparentrsquo properties or $subsumes$closure to explore the hierarchy that exists between concepts

Basic Terminology Services | Jim Steel43 |

Obligatory plugs

Terminology server httpsontoservercsiroau

Terminology browser httpsontoservercsiroaushrimp

Terminology resource editorhttpsontoservercsiroausnapper2-dev

Basic Terminology Services | Jim Steel44 |

Page 25: Basic FHIR Terminology Services - Home - FHIR DevDays · 2019-03-19 · Terminology: why •Terminology is the basis of shared meaning between different systems •StructureDefinitions

Basic Terminology Services | Jim Steel26 |

$validate-code example (cont)

Well-known Terminologiesbull Terminologies such as SNOMED-CT LOINC RxNorm have specific

mappings into FHIR terminology resources with standardisedCodeSystemsbull Standard CodeSystem filtersproperties

bull Implicit ValueSets

bull Implicit ConceptMaps

Basic Terminology Services | Jim Steel27 |

Well-known Terminologies SNOMED-CTbull httpsnomedinfosct([edition](version[date]))bull Filters by subsumption by refset by ECL expressionbull Implicit ValueSets

bull All codes httpsnomedinfosctfhir_vs

bull By subsumption httpsnomedinfosctfhir_vs=isa404684003

bull List of refsets httpsnomedinfosctfhir_vs=refset

bull All codes in a refset httpsnomedinfosctfhir_vs=refset734138000

bull Implicit ConceptMapsbull Historical associations httpsnomedinfosctfhir_cm=900000000000527005

bull For more detail see the advanced session

Basic Terminology Services | Jim Steel28 |

Well-known Terminologies LOINCbull httploincorg

bull Filters parts copyright status multi-axial hierarchy

bull Implicit ValueSetsbull All LOINC codes httploincorgvs

bull Answer Lists httploincorgvsLL715-4

bull Hierarchy httploincorgvsLP29693-6

Basic Terminology Services | Jim Steel29 |

ConceptMapbull Represents a code-to-code mapping typically from a source

ValueSet to a target ValueSet

Basic Terminology Services | Jim Steel30 |

ConceptMap Structure

Basic Terminology Services | Jim Steel31 |

ConceptMap Structure (cont)

Basic Terminology Services | Jim Steel32 |

ConceptMap example

Basic Terminology Services | Jim Steel33 |

ConceptMap operations $translatebull Translate a code from one ValueSet to another according to the

serverrsquos resources andor other knowledge available to the server

bull Typically this means look up a ConceptMap resource and show the corresponding map entries (but not always)

bull Code as codesystemversion or coding or CodeableConcept

bull Specify source ValueSet and target ValueSet (or targetSystem)

bull Can be run in reverse (given target show source)

bull Results come back as Parameters with lsquomatchrsquo elements

Basic Terminology Services | Jim Steel34 |

$translate exampleGET httpsontoservercsiroaustu3-latestConceptMapau-jurisdictions$translatecode=QLDampsystem=httpcsiroaucsau-jurisdictionsamptarget=httpsnomedinfosctfhir_vs

Basic Terminology Services | Jim Steel35 |

Terminology Servicebull A server that implements all these can claim to be a terminology

server by instantiating httphl7orgfhirCapabilityStatementterminology-server in its CapabilityStatementbull CodeSystem ValueSet ConceptMap readsearch

bull $expand $validate-code $lookup $translate $closure

Basic Terminology Services | Jim Steel36 |

Terminology in FHIR Searchbull A lot of search parameters in FHIR are of type lsquotokenrsquo

bull These can leverage terminology services

bull abovebelowbull Eg Conditionbody-sitebelow=httpsnomedinfosct|272673000 (all

Conditions where the finding site is a descendent of Bone Structure

bull innot-inbull Eg

ProcedureRequestcodein=httpsnomedinfosctfhir_vs=refset32570361000036108 (all ProcedureRequests in the Imagine Procedure refset

Basic Terminology Services | Jim Steel37 |

Tips and tricksbull Paging

bull Search results can be paged (httphl7orgfhirsearchhtml see _count parameter)

bull $expand results have a separate paging mechanism (count offset)

bull Can reduce bandwidthresponse times by requesting the specific elements you wantbull includeDefinition includeDesignations on $expand

bull property on $lookup

bull _elements on searchreadoperation results

Basic Terminology Services | Jim Steel38 |

Tips and Tricks (cont)bull Batch

bull A lot of terminology operations are small ndash it can often be more efficient to send them as a batch (httphl7orgfhirhttphtmltransaction) then deal with the result when it comes back

bull Manage content types (Content-Type Accept _format)bull JSON XML

bull Accept-Encoding gzipbull More tips in the advanced session

Warning A lot of these can be server-dependent Theyrsquore not proprietary but you should check support for them by your terminology server

Basic Terminology Services | Jim Steel39 |

What if I am hellipbull Designing interfaces for data entry

bull Choose your CodeSystems (ideally standardized ones)

bull Choose or define your ValueSets

bull If your ValueSet is small a picklist can be populated using $expand

bull If your ValueSet is large a typeahead widget can use $expandfilter=xxx

Basic Terminology Services | Jim Steel40 |

bull Making a profilebull Choosedefine which code systems you want to allow

bull Make ValueSets with lists of codes you want to allow

ndash Make sure you respect the binding strength

bull Set up some processes for maintainingupdating them

ndash Concepts can become deprecated over time you can sometimes use ConceptMaps to find which concepts have changed

Basic Terminology Services | Jim Steel41 |

What if I amhellip

What if I am hellipbull Analyzingvalidating coded data

bull Choose your CodeSystemValueSets

bull Use $validate-code to check whether the codes are valid in the context in which yoursquore using them and whether the display text is correct (many clinical systems allow users to override the display text for the term)

bull Use $translate to map lsquoforeignrsquo coded data into a normalized CodeSystemValueSet for analysis

bull Use $subsumes $closure or $validate-code with an inline ValueSet to categorize data

Basic Terminology Services | Jim Steel42 |

What if I am hellipbull Exploring a set of concepts and how they relate to one another

bull Use $lookup to retrieve their properties and display them in a table

bull Use the lsquochildrsquo and lsquoparentrsquo properties or $subsumes$closure to explore the hierarchy that exists between concepts

Basic Terminology Services | Jim Steel43 |

Obligatory plugs

Terminology server httpsontoservercsiroau

Terminology browser httpsontoservercsiroaushrimp

Terminology resource editorhttpsontoservercsiroausnapper2-dev

Basic Terminology Services | Jim Steel44 |

Page 26: Basic FHIR Terminology Services - Home - FHIR DevDays · 2019-03-19 · Terminology: why •Terminology is the basis of shared meaning between different systems •StructureDefinitions

Well-known Terminologiesbull Terminologies such as SNOMED-CT LOINC RxNorm have specific

mappings into FHIR terminology resources with standardisedCodeSystemsbull Standard CodeSystem filtersproperties

bull Implicit ValueSets

bull Implicit ConceptMaps

Basic Terminology Services | Jim Steel27 |

Well-known Terminologies SNOMED-CTbull httpsnomedinfosct([edition](version[date]))bull Filters by subsumption by refset by ECL expressionbull Implicit ValueSets

bull All codes httpsnomedinfosctfhir_vs

bull By subsumption httpsnomedinfosctfhir_vs=isa404684003

bull List of refsets httpsnomedinfosctfhir_vs=refset

bull All codes in a refset httpsnomedinfosctfhir_vs=refset734138000

bull Implicit ConceptMapsbull Historical associations httpsnomedinfosctfhir_cm=900000000000527005

bull For more detail see the advanced session

Basic Terminology Services | Jim Steel28 |

Well-known Terminologies LOINCbull httploincorg

bull Filters parts copyright status multi-axial hierarchy

bull Implicit ValueSetsbull All LOINC codes httploincorgvs

bull Answer Lists httploincorgvsLL715-4

bull Hierarchy httploincorgvsLP29693-6

Basic Terminology Services | Jim Steel29 |

ConceptMapbull Represents a code-to-code mapping typically from a source

ValueSet to a target ValueSet

Basic Terminology Services | Jim Steel30 |

ConceptMap Structure

Basic Terminology Services | Jim Steel31 |

ConceptMap Structure (cont)

Basic Terminology Services | Jim Steel32 |

ConceptMap example

Basic Terminology Services | Jim Steel33 |

ConceptMap operations $translatebull Translate a code from one ValueSet to another according to the

serverrsquos resources andor other knowledge available to the server

bull Typically this means look up a ConceptMap resource and show the corresponding map entries (but not always)

bull Code as codesystemversion or coding or CodeableConcept

bull Specify source ValueSet and target ValueSet (or targetSystem)

bull Can be run in reverse (given target show source)

bull Results come back as Parameters with lsquomatchrsquo elements

Basic Terminology Services | Jim Steel34 |

$translate exampleGET httpsontoservercsiroaustu3-latestConceptMapau-jurisdictions$translatecode=QLDampsystem=httpcsiroaucsau-jurisdictionsamptarget=httpsnomedinfosctfhir_vs

Basic Terminology Services | Jim Steel35 |

Terminology Servicebull A server that implements all these can claim to be a terminology

server by instantiating httphl7orgfhirCapabilityStatementterminology-server in its CapabilityStatementbull CodeSystem ValueSet ConceptMap readsearch

bull $expand $validate-code $lookup $translate $closure

Basic Terminology Services | Jim Steel36 |

Terminology in FHIR Searchbull A lot of search parameters in FHIR are of type lsquotokenrsquo

bull These can leverage terminology services

bull abovebelowbull Eg Conditionbody-sitebelow=httpsnomedinfosct|272673000 (all

Conditions where the finding site is a descendent of Bone Structure

bull innot-inbull Eg

ProcedureRequestcodein=httpsnomedinfosctfhir_vs=refset32570361000036108 (all ProcedureRequests in the Imagine Procedure refset

Basic Terminology Services | Jim Steel37 |

Tips and tricksbull Paging

bull Search results can be paged (httphl7orgfhirsearchhtml see _count parameter)

bull $expand results have a separate paging mechanism (count offset)

bull Can reduce bandwidthresponse times by requesting the specific elements you wantbull includeDefinition includeDesignations on $expand

bull property on $lookup

bull _elements on searchreadoperation results

Basic Terminology Services | Jim Steel38 |

Tips and Tricks (cont)bull Batch

bull A lot of terminology operations are small ndash it can often be more efficient to send them as a batch (httphl7orgfhirhttphtmltransaction) then deal with the result when it comes back

bull Manage content types (Content-Type Accept _format)bull JSON XML

bull Accept-Encoding gzipbull More tips in the advanced session

Warning A lot of these can be server-dependent Theyrsquore not proprietary but you should check support for them by your terminology server

Basic Terminology Services | Jim Steel39 |

What if I am hellipbull Designing interfaces for data entry

bull Choose your CodeSystems (ideally standardized ones)

bull Choose or define your ValueSets

bull If your ValueSet is small a picklist can be populated using $expand

bull If your ValueSet is large a typeahead widget can use $expandfilter=xxx

Basic Terminology Services | Jim Steel40 |

bull Making a profilebull Choosedefine which code systems you want to allow

bull Make ValueSets with lists of codes you want to allow

ndash Make sure you respect the binding strength

bull Set up some processes for maintainingupdating them

ndash Concepts can become deprecated over time you can sometimes use ConceptMaps to find which concepts have changed

Basic Terminology Services | Jim Steel41 |

What if I amhellip

What if I am hellipbull Analyzingvalidating coded data

bull Choose your CodeSystemValueSets

bull Use $validate-code to check whether the codes are valid in the context in which yoursquore using them and whether the display text is correct (many clinical systems allow users to override the display text for the term)

bull Use $translate to map lsquoforeignrsquo coded data into a normalized CodeSystemValueSet for analysis

bull Use $subsumes $closure or $validate-code with an inline ValueSet to categorize data

Basic Terminology Services | Jim Steel42 |

What if I am hellipbull Exploring a set of concepts and how they relate to one another

bull Use $lookup to retrieve their properties and display them in a table

bull Use the lsquochildrsquo and lsquoparentrsquo properties or $subsumes$closure to explore the hierarchy that exists between concepts

Basic Terminology Services | Jim Steel43 |

Obligatory plugs

Terminology server httpsontoservercsiroau

Terminology browser httpsontoservercsiroaushrimp

Terminology resource editorhttpsontoservercsiroausnapper2-dev

Basic Terminology Services | Jim Steel44 |

Page 27: Basic FHIR Terminology Services - Home - FHIR DevDays · 2019-03-19 · Terminology: why •Terminology is the basis of shared meaning between different systems •StructureDefinitions

Well-known Terminologies SNOMED-CTbull httpsnomedinfosct([edition](version[date]))bull Filters by subsumption by refset by ECL expressionbull Implicit ValueSets

bull All codes httpsnomedinfosctfhir_vs

bull By subsumption httpsnomedinfosctfhir_vs=isa404684003

bull List of refsets httpsnomedinfosctfhir_vs=refset

bull All codes in a refset httpsnomedinfosctfhir_vs=refset734138000

bull Implicit ConceptMapsbull Historical associations httpsnomedinfosctfhir_cm=900000000000527005

bull For more detail see the advanced session

Basic Terminology Services | Jim Steel28 |

Well-known Terminologies LOINCbull httploincorg

bull Filters parts copyright status multi-axial hierarchy

bull Implicit ValueSetsbull All LOINC codes httploincorgvs

bull Answer Lists httploincorgvsLL715-4

bull Hierarchy httploincorgvsLP29693-6

Basic Terminology Services | Jim Steel29 |

ConceptMapbull Represents a code-to-code mapping typically from a source

ValueSet to a target ValueSet

Basic Terminology Services | Jim Steel30 |

ConceptMap Structure

Basic Terminology Services | Jim Steel31 |

ConceptMap Structure (cont)

Basic Terminology Services | Jim Steel32 |

ConceptMap example

Basic Terminology Services | Jim Steel33 |

ConceptMap operations $translatebull Translate a code from one ValueSet to another according to the

serverrsquos resources andor other knowledge available to the server

bull Typically this means look up a ConceptMap resource and show the corresponding map entries (but not always)

bull Code as codesystemversion or coding or CodeableConcept

bull Specify source ValueSet and target ValueSet (or targetSystem)

bull Can be run in reverse (given target show source)

bull Results come back as Parameters with lsquomatchrsquo elements

Basic Terminology Services | Jim Steel34 |

$translate exampleGET httpsontoservercsiroaustu3-latestConceptMapau-jurisdictions$translatecode=QLDampsystem=httpcsiroaucsau-jurisdictionsamptarget=httpsnomedinfosctfhir_vs

Basic Terminology Services | Jim Steel35 |

Terminology Servicebull A server that implements all these can claim to be a terminology

server by instantiating httphl7orgfhirCapabilityStatementterminology-server in its CapabilityStatementbull CodeSystem ValueSet ConceptMap readsearch

bull $expand $validate-code $lookup $translate $closure

Basic Terminology Services | Jim Steel36 |

Terminology in FHIR Searchbull A lot of search parameters in FHIR are of type lsquotokenrsquo

bull These can leverage terminology services

bull abovebelowbull Eg Conditionbody-sitebelow=httpsnomedinfosct|272673000 (all

Conditions where the finding site is a descendent of Bone Structure

bull innot-inbull Eg

ProcedureRequestcodein=httpsnomedinfosctfhir_vs=refset32570361000036108 (all ProcedureRequests in the Imagine Procedure refset

Basic Terminology Services | Jim Steel37 |

Tips and tricksbull Paging

bull Search results can be paged (httphl7orgfhirsearchhtml see _count parameter)

bull $expand results have a separate paging mechanism (count offset)

bull Can reduce bandwidthresponse times by requesting the specific elements you wantbull includeDefinition includeDesignations on $expand

bull property on $lookup

bull _elements on searchreadoperation results

Basic Terminology Services | Jim Steel38 |

Tips and Tricks (cont)bull Batch

bull A lot of terminology operations are small ndash it can often be more efficient to send them as a batch (httphl7orgfhirhttphtmltransaction) then deal with the result when it comes back

bull Manage content types (Content-Type Accept _format)bull JSON XML

bull Accept-Encoding gzipbull More tips in the advanced session

Warning A lot of these can be server-dependent Theyrsquore not proprietary but you should check support for them by your terminology server

Basic Terminology Services | Jim Steel39 |

What if I am hellipbull Designing interfaces for data entry

bull Choose your CodeSystems (ideally standardized ones)

bull Choose or define your ValueSets

bull If your ValueSet is small a picklist can be populated using $expand

bull If your ValueSet is large a typeahead widget can use $expandfilter=xxx

Basic Terminology Services | Jim Steel40 |

bull Making a profilebull Choosedefine which code systems you want to allow

bull Make ValueSets with lists of codes you want to allow

ndash Make sure you respect the binding strength

bull Set up some processes for maintainingupdating them

ndash Concepts can become deprecated over time you can sometimes use ConceptMaps to find which concepts have changed

Basic Terminology Services | Jim Steel41 |

What if I amhellip

What if I am hellipbull Analyzingvalidating coded data

bull Choose your CodeSystemValueSets

bull Use $validate-code to check whether the codes are valid in the context in which yoursquore using them and whether the display text is correct (many clinical systems allow users to override the display text for the term)

bull Use $translate to map lsquoforeignrsquo coded data into a normalized CodeSystemValueSet for analysis

bull Use $subsumes $closure or $validate-code with an inline ValueSet to categorize data

Basic Terminology Services | Jim Steel42 |

What if I am hellipbull Exploring a set of concepts and how they relate to one another

bull Use $lookup to retrieve their properties and display them in a table

bull Use the lsquochildrsquo and lsquoparentrsquo properties or $subsumes$closure to explore the hierarchy that exists between concepts

Basic Terminology Services | Jim Steel43 |

Obligatory plugs

Terminology server httpsontoservercsiroau

Terminology browser httpsontoservercsiroaushrimp

Terminology resource editorhttpsontoservercsiroausnapper2-dev

Basic Terminology Services | Jim Steel44 |

Page 28: Basic FHIR Terminology Services - Home - FHIR DevDays · 2019-03-19 · Terminology: why •Terminology is the basis of shared meaning between different systems •StructureDefinitions

Well-known Terminologies LOINCbull httploincorg

bull Filters parts copyright status multi-axial hierarchy

bull Implicit ValueSetsbull All LOINC codes httploincorgvs

bull Answer Lists httploincorgvsLL715-4

bull Hierarchy httploincorgvsLP29693-6

Basic Terminology Services | Jim Steel29 |

ConceptMapbull Represents a code-to-code mapping typically from a source

ValueSet to a target ValueSet

Basic Terminology Services | Jim Steel30 |

ConceptMap Structure

Basic Terminology Services | Jim Steel31 |

ConceptMap Structure (cont)

Basic Terminology Services | Jim Steel32 |

ConceptMap example

Basic Terminology Services | Jim Steel33 |

ConceptMap operations $translatebull Translate a code from one ValueSet to another according to the

serverrsquos resources andor other knowledge available to the server

bull Typically this means look up a ConceptMap resource and show the corresponding map entries (but not always)

bull Code as codesystemversion or coding or CodeableConcept

bull Specify source ValueSet and target ValueSet (or targetSystem)

bull Can be run in reverse (given target show source)

bull Results come back as Parameters with lsquomatchrsquo elements

Basic Terminology Services | Jim Steel34 |

$translate exampleGET httpsontoservercsiroaustu3-latestConceptMapau-jurisdictions$translatecode=QLDampsystem=httpcsiroaucsau-jurisdictionsamptarget=httpsnomedinfosctfhir_vs

Basic Terminology Services | Jim Steel35 |

Terminology Servicebull A server that implements all these can claim to be a terminology

server by instantiating httphl7orgfhirCapabilityStatementterminology-server in its CapabilityStatementbull CodeSystem ValueSet ConceptMap readsearch

bull $expand $validate-code $lookup $translate $closure

Basic Terminology Services | Jim Steel36 |

Terminology in FHIR Searchbull A lot of search parameters in FHIR are of type lsquotokenrsquo

bull These can leverage terminology services

bull abovebelowbull Eg Conditionbody-sitebelow=httpsnomedinfosct|272673000 (all

Conditions where the finding site is a descendent of Bone Structure

bull innot-inbull Eg

ProcedureRequestcodein=httpsnomedinfosctfhir_vs=refset32570361000036108 (all ProcedureRequests in the Imagine Procedure refset

Basic Terminology Services | Jim Steel37 |

Tips and tricksbull Paging

bull Search results can be paged (httphl7orgfhirsearchhtml see _count parameter)

bull $expand results have a separate paging mechanism (count offset)

bull Can reduce bandwidthresponse times by requesting the specific elements you wantbull includeDefinition includeDesignations on $expand

bull property on $lookup

bull _elements on searchreadoperation results

Basic Terminology Services | Jim Steel38 |

Tips and Tricks (cont)bull Batch

bull A lot of terminology operations are small ndash it can often be more efficient to send them as a batch (httphl7orgfhirhttphtmltransaction) then deal with the result when it comes back

bull Manage content types (Content-Type Accept _format)bull JSON XML

bull Accept-Encoding gzipbull More tips in the advanced session

Warning A lot of these can be server-dependent Theyrsquore not proprietary but you should check support for them by your terminology server

Basic Terminology Services | Jim Steel39 |

What if I am hellipbull Designing interfaces for data entry

bull Choose your CodeSystems (ideally standardized ones)

bull Choose or define your ValueSets

bull If your ValueSet is small a picklist can be populated using $expand

bull If your ValueSet is large a typeahead widget can use $expandfilter=xxx

Basic Terminology Services | Jim Steel40 |

bull Making a profilebull Choosedefine which code systems you want to allow

bull Make ValueSets with lists of codes you want to allow

ndash Make sure you respect the binding strength

bull Set up some processes for maintainingupdating them

ndash Concepts can become deprecated over time you can sometimes use ConceptMaps to find which concepts have changed

Basic Terminology Services | Jim Steel41 |

What if I amhellip

What if I am hellipbull Analyzingvalidating coded data

bull Choose your CodeSystemValueSets

bull Use $validate-code to check whether the codes are valid in the context in which yoursquore using them and whether the display text is correct (many clinical systems allow users to override the display text for the term)

bull Use $translate to map lsquoforeignrsquo coded data into a normalized CodeSystemValueSet for analysis

bull Use $subsumes $closure or $validate-code with an inline ValueSet to categorize data

Basic Terminology Services | Jim Steel42 |

What if I am hellipbull Exploring a set of concepts and how they relate to one another

bull Use $lookup to retrieve their properties and display them in a table

bull Use the lsquochildrsquo and lsquoparentrsquo properties or $subsumes$closure to explore the hierarchy that exists between concepts

Basic Terminology Services | Jim Steel43 |

Obligatory plugs

Terminology server httpsontoservercsiroau

Terminology browser httpsontoservercsiroaushrimp

Terminology resource editorhttpsontoservercsiroausnapper2-dev

Basic Terminology Services | Jim Steel44 |

Page 29: Basic FHIR Terminology Services - Home - FHIR DevDays · 2019-03-19 · Terminology: why •Terminology is the basis of shared meaning between different systems •StructureDefinitions

ConceptMapbull Represents a code-to-code mapping typically from a source

ValueSet to a target ValueSet

Basic Terminology Services | Jim Steel30 |

ConceptMap Structure

Basic Terminology Services | Jim Steel31 |

ConceptMap Structure (cont)

Basic Terminology Services | Jim Steel32 |

ConceptMap example

Basic Terminology Services | Jim Steel33 |

ConceptMap operations $translatebull Translate a code from one ValueSet to another according to the

serverrsquos resources andor other knowledge available to the server

bull Typically this means look up a ConceptMap resource and show the corresponding map entries (but not always)

bull Code as codesystemversion or coding or CodeableConcept

bull Specify source ValueSet and target ValueSet (or targetSystem)

bull Can be run in reverse (given target show source)

bull Results come back as Parameters with lsquomatchrsquo elements

Basic Terminology Services | Jim Steel34 |

$translate exampleGET httpsontoservercsiroaustu3-latestConceptMapau-jurisdictions$translatecode=QLDampsystem=httpcsiroaucsau-jurisdictionsamptarget=httpsnomedinfosctfhir_vs

Basic Terminology Services | Jim Steel35 |

Terminology Servicebull A server that implements all these can claim to be a terminology

server by instantiating httphl7orgfhirCapabilityStatementterminology-server in its CapabilityStatementbull CodeSystem ValueSet ConceptMap readsearch

bull $expand $validate-code $lookup $translate $closure

Basic Terminology Services | Jim Steel36 |

Terminology in FHIR Searchbull A lot of search parameters in FHIR are of type lsquotokenrsquo

bull These can leverage terminology services

bull abovebelowbull Eg Conditionbody-sitebelow=httpsnomedinfosct|272673000 (all

Conditions where the finding site is a descendent of Bone Structure

bull innot-inbull Eg

ProcedureRequestcodein=httpsnomedinfosctfhir_vs=refset32570361000036108 (all ProcedureRequests in the Imagine Procedure refset

Basic Terminology Services | Jim Steel37 |

Tips and tricksbull Paging

bull Search results can be paged (httphl7orgfhirsearchhtml see _count parameter)

bull $expand results have a separate paging mechanism (count offset)

bull Can reduce bandwidthresponse times by requesting the specific elements you wantbull includeDefinition includeDesignations on $expand

bull property on $lookup

bull _elements on searchreadoperation results

Basic Terminology Services | Jim Steel38 |

Tips and Tricks (cont)bull Batch

bull A lot of terminology operations are small ndash it can often be more efficient to send them as a batch (httphl7orgfhirhttphtmltransaction) then deal with the result when it comes back

bull Manage content types (Content-Type Accept _format)bull JSON XML

bull Accept-Encoding gzipbull More tips in the advanced session

Warning A lot of these can be server-dependent Theyrsquore not proprietary but you should check support for them by your terminology server

Basic Terminology Services | Jim Steel39 |

What if I am hellipbull Designing interfaces for data entry

bull Choose your CodeSystems (ideally standardized ones)

bull Choose or define your ValueSets

bull If your ValueSet is small a picklist can be populated using $expand

bull If your ValueSet is large a typeahead widget can use $expandfilter=xxx

Basic Terminology Services | Jim Steel40 |

bull Making a profilebull Choosedefine which code systems you want to allow

bull Make ValueSets with lists of codes you want to allow

ndash Make sure you respect the binding strength

bull Set up some processes for maintainingupdating them

ndash Concepts can become deprecated over time you can sometimes use ConceptMaps to find which concepts have changed

Basic Terminology Services | Jim Steel41 |

What if I amhellip

What if I am hellipbull Analyzingvalidating coded data

bull Choose your CodeSystemValueSets

bull Use $validate-code to check whether the codes are valid in the context in which yoursquore using them and whether the display text is correct (many clinical systems allow users to override the display text for the term)

bull Use $translate to map lsquoforeignrsquo coded data into a normalized CodeSystemValueSet for analysis

bull Use $subsumes $closure or $validate-code with an inline ValueSet to categorize data

Basic Terminology Services | Jim Steel42 |

What if I am hellipbull Exploring a set of concepts and how they relate to one another

bull Use $lookup to retrieve their properties and display them in a table

bull Use the lsquochildrsquo and lsquoparentrsquo properties or $subsumes$closure to explore the hierarchy that exists between concepts

Basic Terminology Services | Jim Steel43 |

Obligatory plugs

Terminology server httpsontoservercsiroau

Terminology browser httpsontoservercsiroaushrimp

Terminology resource editorhttpsontoservercsiroausnapper2-dev

Basic Terminology Services | Jim Steel44 |

Page 30: Basic FHIR Terminology Services - Home - FHIR DevDays · 2019-03-19 · Terminology: why •Terminology is the basis of shared meaning between different systems •StructureDefinitions

ConceptMap Structure

Basic Terminology Services | Jim Steel31 |

ConceptMap Structure (cont)

Basic Terminology Services | Jim Steel32 |

ConceptMap example

Basic Terminology Services | Jim Steel33 |

ConceptMap operations $translatebull Translate a code from one ValueSet to another according to the

serverrsquos resources andor other knowledge available to the server

bull Typically this means look up a ConceptMap resource and show the corresponding map entries (but not always)

bull Code as codesystemversion or coding or CodeableConcept

bull Specify source ValueSet and target ValueSet (or targetSystem)

bull Can be run in reverse (given target show source)

bull Results come back as Parameters with lsquomatchrsquo elements

Basic Terminology Services | Jim Steel34 |

$translate exampleGET httpsontoservercsiroaustu3-latestConceptMapau-jurisdictions$translatecode=QLDampsystem=httpcsiroaucsau-jurisdictionsamptarget=httpsnomedinfosctfhir_vs

Basic Terminology Services | Jim Steel35 |

Terminology Servicebull A server that implements all these can claim to be a terminology

server by instantiating httphl7orgfhirCapabilityStatementterminology-server in its CapabilityStatementbull CodeSystem ValueSet ConceptMap readsearch

bull $expand $validate-code $lookup $translate $closure

Basic Terminology Services | Jim Steel36 |

Terminology in FHIR Searchbull A lot of search parameters in FHIR are of type lsquotokenrsquo

bull These can leverage terminology services

bull abovebelowbull Eg Conditionbody-sitebelow=httpsnomedinfosct|272673000 (all

Conditions where the finding site is a descendent of Bone Structure

bull innot-inbull Eg

ProcedureRequestcodein=httpsnomedinfosctfhir_vs=refset32570361000036108 (all ProcedureRequests in the Imagine Procedure refset

Basic Terminology Services | Jim Steel37 |

Tips and tricksbull Paging

bull Search results can be paged (httphl7orgfhirsearchhtml see _count parameter)

bull $expand results have a separate paging mechanism (count offset)

bull Can reduce bandwidthresponse times by requesting the specific elements you wantbull includeDefinition includeDesignations on $expand

bull property on $lookup

bull _elements on searchreadoperation results

Basic Terminology Services | Jim Steel38 |

Tips and Tricks (cont)bull Batch

bull A lot of terminology operations are small ndash it can often be more efficient to send them as a batch (httphl7orgfhirhttphtmltransaction) then deal with the result when it comes back

bull Manage content types (Content-Type Accept _format)bull JSON XML

bull Accept-Encoding gzipbull More tips in the advanced session

Warning A lot of these can be server-dependent Theyrsquore not proprietary but you should check support for them by your terminology server

Basic Terminology Services | Jim Steel39 |

What if I am hellipbull Designing interfaces for data entry

bull Choose your CodeSystems (ideally standardized ones)

bull Choose or define your ValueSets

bull If your ValueSet is small a picklist can be populated using $expand

bull If your ValueSet is large a typeahead widget can use $expandfilter=xxx

Basic Terminology Services | Jim Steel40 |

bull Making a profilebull Choosedefine which code systems you want to allow

bull Make ValueSets with lists of codes you want to allow

ndash Make sure you respect the binding strength

bull Set up some processes for maintainingupdating them

ndash Concepts can become deprecated over time you can sometimes use ConceptMaps to find which concepts have changed

Basic Terminology Services | Jim Steel41 |

What if I amhellip

What if I am hellipbull Analyzingvalidating coded data

bull Choose your CodeSystemValueSets

bull Use $validate-code to check whether the codes are valid in the context in which yoursquore using them and whether the display text is correct (many clinical systems allow users to override the display text for the term)

bull Use $translate to map lsquoforeignrsquo coded data into a normalized CodeSystemValueSet for analysis

bull Use $subsumes $closure or $validate-code with an inline ValueSet to categorize data

Basic Terminology Services | Jim Steel42 |

What if I am hellipbull Exploring a set of concepts and how they relate to one another

bull Use $lookup to retrieve their properties and display them in a table

bull Use the lsquochildrsquo and lsquoparentrsquo properties or $subsumes$closure to explore the hierarchy that exists between concepts

Basic Terminology Services | Jim Steel43 |

Obligatory plugs

Terminology server httpsontoservercsiroau

Terminology browser httpsontoservercsiroaushrimp

Terminology resource editorhttpsontoservercsiroausnapper2-dev

Basic Terminology Services | Jim Steel44 |

Page 31: Basic FHIR Terminology Services - Home - FHIR DevDays · 2019-03-19 · Terminology: why •Terminology is the basis of shared meaning between different systems •StructureDefinitions

ConceptMap Structure (cont)

Basic Terminology Services | Jim Steel32 |

ConceptMap example

Basic Terminology Services | Jim Steel33 |

ConceptMap operations $translatebull Translate a code from one ValueSet to another according to the

serverrsquos resources andor other knowledge available to the server

bull Typically this means look up a ConceptMap resource and show the corresponding map entries (but not always)

bull Code as codesystemversion or coding or CodeableConcept

bull Specify source ValueSet and target ValueSet (or targetSystem)

bull Can be run in reverse (given target show source)

bull Results come back as Parameters with lsquomatchrsquo elements

Basic Terminology Services | Jim Steel34 |

$translate exampleGET httpsontoservercsiroaustu3-latestConceptMapau-jurisdictions$translatecode=QLDampsystem=httpcsiroaucsau-jurisdictionsamptarget=httpsnomedinfosctfhir_vs

Basic Terminology Services | Jim Steel35 |

Terminology Servicebull A server that implements all these can claim to be a terminology

server by instantiating httphl7orgfhirCapabilityStatementterminology-server in its CapabilityStatementbull CodeSystem ValueSet ConceptMap readsearch

bull $expand $validate-code $lookup $translate $closure

Basic Terminology Services | Jim Steel36 |

Terminology in FHIR Searchbull A lot of search parameters in FHIR are of type lsquotokenrsquo

bull These can leverage terminology services

bull abovebelowbull Eg Conditionbody-sitebelow=httpsnomedinfosct|272673000 (all

Conditions where the finding site is a descendent of Bone Structure

bull innot-inbull Eg

ProcedureRequestcodein=httpsnomedinfosctfhir_vs=refset32570361000036108 (all ProcedureRequests in the Imagine Procedure refset

Basic Terminology Services | Jim Steel37 |

Tips and tricksbull Paging

bull Search results can be paged (httphl7orgfhirsearchhtml see _count parameter)

bull $expand results have a separate paging mechanism (count offset)

bull Can reduce bandwidthresponse times by requesting the specific elements you wantbull includeDefinition includeDesignations on $expand

bull property on $lookup

bull _elements on searchreadoperation results

Basic Terminology Services | Jim Steel38 |

Tips and Tricks (cont)bull Batch

bull A lot of terminology operations are small ndash it can often be more efficient to send them as a batch (httphl7orgfhirhttphtmltransaction) then deal with the result when it comes back

bull Manage content types (Content-Type Accept _format)bull JSON XML

bull Accept-Encoding gzipbull More tips in the advanced session

Warning A lot of these can be server-dependent Theyrsquore not proprietary but you should check support for them by your terminology server

Basic Terminology Services | Jim Steel39 |

What if I am hellipbull Designing interfaces for data entry

bull Choose your CodeSystems (ideally standardized ones)

bull Choose or define your ValueSets

bull If your ValueSet is small a picklist can be populated using $expand

bull If your ValueSet is large a typeahead widget can use $expandfilter=xxx

Basic Terminology Services | Jim Steel40 |

bull Making a profilebull Choosedefine which code systems you want to allow

bull Make ValueSets with lists of codes you want to allow

ndash Make sure you respect the binding strength

bull Set up some processes for maintainingupdating them

ndash Concepts can become deprecated over time you can sometimes use ConceptMaps to find which concepts have changed

Basic Terminology Services | Jim Steel41 |

What if I amhellip

What if I am hellipbull Analyzingvalidating coded data

bull Choose your CodeSystemValueSets

bull Use $validate-code to check whether the codes are valid in the context in which yoursquore using them and whether the display text is correct (many clinical systems allow users to override the display text for the term)

bull Use $translate to map lsquoforeignrsquo coded data into a normalized CodeSystemValueSet for analysis

bull Use $subsumes $closure or $validate-code with an inline ValueSet to categorize data

Basic Terminology Services | Jim Steel42 |

What if I am hellipbull Exploring a set of concepts and how they relate to one another

bull Use $lookup to retrieve their properties and display them in a table

bull Use the lsquochildrsquo and lsquoparentrsquo properties or $subsumes$closure to explore the hierarchy that exists between concepts

Basic Terminology Services | Jim Steel43 |

Obligatory plugs

Terminology server httpsontoservercsiroau

Terminology browser httpsontoservercsiroaushrimp

Terminology resource editorhttpsontoservercsiroausnapper2-dev

Basic Terminology Services | Jim Steel44 |

Page 32: Basic FHIR Terminology Services - Home - FHIR DevDays · 2019-03-19 · Terminology: why •Terminology is the basis of shared meaning between different systems •StructureDefinitions

ConceptMap example

Basic Terminology Services | Jim Steel33 |

ConceptMap operations $translatebull Translate a code from one ValueSet to another according to the

serverrsquos resources andor other knowledge available to the server

bull Typically this means look up a ConceptMap resource and show the corresponding map entries (but not always)

bull Code as codesystemversion or coding or CodeableConcept

bull Specify source ValueSet and target ValueSet (or targetSystem)

bull Can be run in reverse (given target show source)

bull Results come back as Parameters with lsquomatchrsquo elements

Basic Terminology Services | Jim Steel34 |

$translate exampleGET httpsontoservercsiroaustu3-latestConceptMapau-jurisdictions$translatecode=QLDampsystem=httpcsiroaucsau-jurisdictionsamptarget=httpsnomedinfosctfhir_vs

Basic Terminology Services | Jim Steel35 |

Terminology Servicebull A server that implements all these can claim to be a terminology

server by instantiating httphl7orgfhirCapabilityStatementterminology-server in its CapabilityStatementbull CodeSystem ValueSet ConceptMap readsearch

bull $expand $validate-code $lookup $translate $closure

Basic Terminology Services | Jim Steel36 |

Terminology in FHIR Searchbull A lot of search parameters in FHIR are of type lsquotokenrsquo

bull These can leverage terminology services

bull abovebelowbull Eg Conditionbody-sitebelow=httpsnomedinfosct|272673000 (all

Conditions where the finding site is a descendent of Bone Structure

bull innot-inbull Eg

ProcedureRequestcodein=httpsnomedinfosctfhir_vs=refset32570361000036108 (all ProcedureRequests in the Imagine Procedure refset

Basic Terminology Services | Jim Steel37 |

Tips and tricksbull Paging

bull Search results can be paged (httphl7orgfhirsearchhtml see _count parameter)

bull $expand results have a separate paging mechanism (count offset)

bull Can reduce bandwidthresponse times by requesting the specific elements you wantbull includeDefinition includeDesignations on $expand

bull property on $lookup

bull _elements on searchreadoperation results

Basic Terminology Services | Jim Steel38 |

Tips and Tricks (cont)bull Batch

bull A lot of terminology operations are small ndash it can often be more efficient to send them as a batch (httphl7orgfhirhttphtmltransaction) then deal with the result when it comes back

bull Manage content types (Content-Type Accept _format)bull JSON XML

bull Accept-Encoding gzipbull More tips in the advanced session

Warning A lot of these can be server-dependent Theyrsquore not proprietary but you should check support for them by your terminology server

Basic Terminology Services | Jim Steel39 |

What if I am hellipbull Designing interfaces for data entry

bull Choose your CodeSystems (ideally standardized ones)

bull Choose or define your ValueSets

bull If your ValueSet is small a picklist can be populated using $expand

bull If your ValueSet is large a typeahead widget can use $expandfilter=xxx

Basic Terminology Services | Jim Steel40 |

bull Making a profilebull Choosedefine which code systems you want to allow

bull Make ValueSets with lists of codes you want to allow

ndash Make sure you respect the binding strength

bull Set up some processes for maintainingupdating them

ndash Concepts can become deprecated over time you can sometimes use ConceptMaps to find which concepts have changed

Basic Terminology Services | Jim Steel41 |

What if I amhellip

What if I am hellipbull Analyzingvalidating coded data

bull Choose your CodeSystemValueSets

bull Use $validate-code to check whether the codes are valid in the context in which yoursquore using them and whether the display text is correct (many clinical systems allow users to override the display text for the term)

bull Use $translate to map lsquoforeignrsquo coded data into a normalized CodeSystemValueSet for analysis

bull Use $subsumes $closure or $validate-code with an inline ValueSet to categorize data

Basic Terminology Services | Jim Steel42 |

What if I am hellipbull Exploring a set of concepts and how they relate to one another

bull Use $lookup to retrieve their properties and display them in a table

bull Use the lsquochildrsquo and lsquoparentrsquo properties or $subsumes$closure to explore the hierarchy that exists between concepts

Basic Terminology Services | Jim Steel43 |

Obligatory plugs

Terminology server httpsontoservercsiroau

Terminology browser httpsontoservercsiroaushrimp

Terminology resource editorhttpsontoservercsiroausnapper2-dev

Basic Terminology Services | Jim Steel44 |

Page 33: Basic FHIR Terminology Services - Home - FHIR DevDays · 2019-03-19 · Terminology: why •Terminology is the basis of shared meaning between different systems •StructureDefinitions

ConceptMap operations $translatebull Translate a code from one ValueSet to another according to the

serverrsquos resources andor other knowledge available to the server

bull Typically this means look up a ConceptMap resource and show the corresponding map entries (but not always)

bull Code as codesystemversion or coding or CodeableConcept

bull Specify source ValueSet and target ValueSet (or targetSystem)

bull Can be run in reverse (given target show source)

bull Results come back as Parameters with lsquomatchrsquo elements

Basic Terminology Services | Jim Steel34 |

$translate exampleGET httpsontoservercsiroaustu3-latestConceptMapau-jurisdictions$translatecode=QLDampsystem=httpcsiroaucsau-jurisdictionsamptarget=httpsnomedinfosctfhir_vs

Basic Terminology Services | Jim Steel35 |

Terminology Servicebull A server that implements all these can claim to be a terminology

server by instantiating httphl7orgfhirCapabilityStatementterminology-server in its CapabilityStatementbull CodeSystem ValueSet ConceptMap readsearch

bull $expand $validate-code $lookup $translate $closure

Basic Terminology Services | Jim Steel36 |

Terminology in FHIR Searchbull A lot of search parameters in FHIR are of type lsquotokenrsquo

bull These can leverage terminology services

bull abovebelowbull Eg Conditionbody-sitebelow=httpsnomedinfosct|272673000 (all

Conditions where the finding site is a descendent of Bone Structure

bull innot-inbull Eg

ProcedureRequestcodein=httpsnomedinfosctfhir_vs=refset32570361000036108 (all ProcedureRequests in the Imagine Procedure refset

Basic Terminology Services | Jim Steel37 |

Tips and tricksbull Paging

bull Search results can be paged (httphl7orgfhirsearchhtml see _count parameter)

bull $expand results have a separate paging mechanism (count offset)

bull Can reduce bandwidthresponse times by requesting the specific elements you wantbull includeDefinition includeDesignations on $expand

bull property on $lookup

bull _elements on searchreadoperation results

Basic Terminology Services | Jim Steel38 |

Tips and Tricks (cont)bull Batch

bull A lot of terminology operations are small ndash it can often be more efficient to send them as a batch (httphl7orgfhirhttphtmltransaction) then deal with the result when it comes back

bull Manage content types (Content-Type Accept _format)bull JSON XML

bull Accept-Encoding gzipbull More tips in the advanced session

Warning A lot of these can be server-dependent Theyrsquore not proprietary but you should check support for them by your terminology server

Basic Terminology Services | Jim Steel39 |

What if I am hellipbull Designing interfaces for data entry

bull Choose your CodeSystems (ideally standardized ones)

bull Choose or define your ValueSets

bull If your ValueSet is small a picklist can be populated using $expand

bull If your ValueSet is large a typeahead widget can use $expandfilter=xxx

Basic Terminology Services | Jim Steel40 |

bull Making a profilebull Choosedefine which code systems you want to allow

bull Make ValueSets with lists of codes you want to allow

ndash Make sure you respect the binding strength

bull Set up some processes for maintainingupdating them

ndash Concepts can become deprecated over time you can sometimes use ConceptMaps to find which concepts have changed

Basic Terminology Services | Jim Steel41 |

What if I amhellip

What if I am hellipbull Analyzingvalidating coded data

bull Choose your CodeSystemValueSets

bull Use $validate-code to check whether the codes are valid in the context in which yoursquore using them and whether the display text is correct (many clinical systems allow users to override the display text for the term)

bull Use $translate to map lsquoforeignrsquo coded data into a normalized CodeSystemValueSet for analysis

bull Use $subsumes $closure or $validate-code with an inline ValueSet to categorize data

Basic Terminology Services | Jim Steel42 |

What if I am hellipbull Exploring a set of concepts and how they relate to one another

bull Use $lookup to retrieve their properties and display them in a table

bull Use the lsquochildrsquo and lsquoparentrsquo properties or $subsumes$closure to explore the hierarchy that exists between concepts

Basic Terminology Services | Jim Steel43 |

Obligatory plugs

Terminology server httpsontoservercsiroau

Terminology browser httpsontoservercsiroaushrimp

Terminology resource editorhttpsontoservercsiroausnapper2-dev

Basic Terminology Services | Jim Steel44 |

Page 34: Basic FHIR Terminology Services - Home - FHIR DevDays · 2019-03-19 · Terminology: why •Terminology is the basis of shared meaning between different systems •StructureDefinitions

$translate exampleGET httpsontoservercsiroaustu3-latestConceptMapau-jurisdictions$translatecode=QLDampsystem=httpcsiroaucsau-jurisdictionsamptarget=httpsnomedinfosctfhir_vs

Basic Terminology Services | Jim Steel35 |

Terminology Servicebull A server that implements all these can claim to be a terminology

server by instantiating httphl7orgfhirCapabilityStatementterminology-server in its CapabilityStatementbull CodeSystem ValueSet ConceptMap readsearch

bull $expand $validate-code $lookup $translate $closure

Basic Terminology Services | Jim Steel36 |

Terminology in FHIR Searchbull A lot of search parameters in FHIR are of type lsquotokenrsquo

bull These can leverage terminology services

bull abovebelowbull Eg Conditionbody-sitebelow=httpsnomedinfosct|272673000 (all

Conditions where the finding site is a descendent of Bone Structure

bull innot-inbull Eg

ProcedureRequestcodein=httpsnomedinfosctfhir_vs=refset32570361000036108 (all ProcedureRequests in the Imagine Procedure refset

Basic Terminology Services | Jim Steel37 |

Tips and tricksbull Paging

bull Search results can be paged (httphl7orgfhirsearchhtml see _count parameter)

bull $expand results have a separate paging mechanism (count offset)

bull Can reduce bandwidthresponse times by requesting the specific elements you wantbull includeDefinition includeDesignations on $expand

bull property on $lookup

bull _elements on searchreadoperation results

Basic Terminology Services | Jim Steel38 |

Tips and Tricks (cont)bull Batch

bull A lot of terminology operations are small ndash it can often be more efficient to send them as a batch (httphl7orgfhirhttphtmltransaction) then deal with the result when it comes back

bull Manage content types (Content-Type Accept _format)bull JSON XML

bull Accept-Encoding gzipbull More tips in the advanced session

Warning A lot of these can be server-dependent Theyrsquore not proprietary but you should check support for them by your terminology server

Basic Terminology Services | Jim Steel39 |

What if I am hellipbull Designing interfaces for data entry

bull Choose your CodeSystems (ideally standardized ones)

bull Choose or define your ValueSets

bull If your ValueSet is small a picklist can be populated using $expand

bull If your ValueSet is large a typeahead widget can use $expandfilter=xxx

Basic Terminology Services | Jim Steel40 |

bull Making a profilebull Choosedefine which code systems you want to allow

bull Make ValueSets with lists of codes you want to allow

ndash Make sure you respect the binding strength

bull Set up some processes for maintainingupdating them

ndash Concepts can become deprecated over time you can sometimes use ConceptMaps to find which concepts have changed

Basic Terminology Services | Jim Steel41 |

What if I amhellip

What if I am hellipbull Analyzingvalidating coded data

bull Choose your CodeSystemValueSets

bull Use $validate-code to check whether the codes are valid in the context in which yoursquore using them and whether the display text is correct (many clinical systems allow users to override the display text for the term)

bull Use $translate to map lsquoforeignrsquo coded data into a normalized CodeSystemValueSet for analysis

bull Use $subsumes $closure or $validate-code with an inline ValueSet to categorize data

Basic Terminology Services | Jim Steel42 |

What if I am hellipbull Exploring a set of concepts and how they relate to one another

bull Use $lookup to retrieve their properties and display them in a table

bull Use the lsquochildrsquo and lsquoparentrsquo properties or $subsumes$closure to explore the hierarchy that exists between concepts

Basic Terminology Services | Jim Steel43 |

Obligatory plugs

Terminology server httpsontoservercsiroau

Terminology browser httpsontoservercsiroaushrimp

Terminology resource editorhttpsontoservercsiroausnapper2-dev

Basic Terminology Services | Jim Steel44 |

Page 35: Basic FHIR Terminology Services - Home - FHIR DevDays · 2019-03-19 · Terminology: why •Terminology is the basis of shared meaning between different systems •StructureDefinitions

Terminology Servicebull A server that implements all these can claim to be a terminology

server by instantiating httphl7orgfhirCapabilityStatementterminology-server in its CapabilityStatementbull CodeSystem ValueSet ConceptMap readsearch

bull $expand $validate-code $lookup $translate $closure

Basic Terminology Services | Jim Steel36 |

Terminology in FHIR Searchbull A lot of search parameters in FHIR are of type lsquotokenrsquo

bull These can leverage terminology services

bull abovebelowbull Eg Conditionbody-sitebelow=httpsnomedinfosct|272673000 (all

Conditions where the finding site is a descendent of Bone Structure

bull innot-inbull Eg

ProcedureRequestcodein=httpsnomedinfosctfhir_vs=refset32570361000036108 (all ProcedureRequests in the Imagine Procedure refset

Basic Terminology Services | Jim Steel37 |

Tips and tricksbull Paging

bull Search results can be paged (httphl7orgfhirsearchhtml see _count parameter)

bull $expand results have a separate paging mechanism (count offset)

bull Can reduce bandwidthresponse times by requesting the specific elements you wantbull includeDefinition includeDesignations on $expand

bull property on $lookup

bull _elements on searchreadoperation results

Basic Terminology Services | Jim Steel38 |

Tips and Tricks (cont)bull Batch

bull A lot of terminology operations are small ndash it can often be more efficient to send them as a batch (httphl7orgfhirhttphtmltransaction) then deal with the result when it comes back

bull Manage content types (Content-Type Accept _format)bull JSON XML

bull Accept-Encoding gzipbull More tips in the advanced session

Warning A lot of these can be server-dependent Theyrsquore not proprietary but you should check support for them by your terminology server

Basic Terminology Services | Jim Steel39 |

What if I am hellipbull Designing interfaces for data entry

bull Choose your CodeSystems (ideally standardized ones)

bull Choose or define your ValueSets

bull If your ValueSet is small a picklist can be populated using $expand

bull If your ValueSet is large a typeahead widget can use $expandfilter=xxx

Basic Terminology Services | Jim Steel40 |

bull Making a profilebull Choosedefine which code systems you want to allow

bull Make ValueSets with lists of codes you want to allow

ndash Make sure you respect the binding strength

bull Set up some processes for maintainingupdating them

ndash Concepts can become deprecated over time you can sometimes use ConceptMaps to find which concepts have changed

Basic Terminology Services | Jim Steel41 |

What if I amhellip

What if I am hellipbull Analyzingvalidating coded data

bull Choose your CodeSystemValueSets

bull Use $validate-code to check whether the codes are valid in the context in which yoursquore using them and whether the display text is correct (many clinical systems allow users to override the display text for the term)

bull Use $translate to map lsquoforeignrsquo coded data into a normalized CodeSystemValueSet for analysis

bull Use $subsumes $closure or $validate-code with an inline ValueSet to categorize data

Basic Terminology Services | Jim Steel42 |

What if I am hellipbull Exploring a set of concepts and how they relate to one another

bull Use $lookup to retrieve their properties and display them in a table

bull Use the lsquochildrsquo and lsquoparentrsquo properties or $subsumes$closure to explore the hierarchy that exists between concepts

Basic Terminology Services | Jim Steel43 |

Obligatory plugs

Terminology server httpsontoservercsiroau

Terminology browser httpsontoservercsiroaushrimp

Terminology resource editorhttpsontoservercsiroausnapper2-dev

Basic Terminology Services | Jim Steel44 |

Page 36: Basic FHIR Terminology Services - Home - FHIR DevDays · 2019-03-19 · Terminology: why •Terminology is the basis of shared meaning between different systems •StructureDefinitions

Terminology in FHIR Searchbull A lot of search parameters in FHIR are of type lsquotokenrsquo

bull These can leverage terminology services

bull abovebelowbull Eg Conditionbody-sitebelow=httpsnomedinfosct|272673000 (all

Conditions where the finding site is a descendent of Bone Structure

bull innot-inbull Eg

ProcedureRequestcodein=httpsnomedinfosctfhir_vs=refset32570361000036108 (all ProcedureRequests in the Imagine Procedure refset

Basic Terminology Services | Jim Steel37 |

Tips and tricksbull Paging

bull Search results can be paged (httphl7orgfhirsearchhtml see _count parameter)

bull $expand results have a separate paging mechanism (count offset)

bull Can reduce bandwidthresponse times by requesting the specific elements you wantbull includeDefinition includeDesignations on $expand

bull property on $lookup

bull _elements on searchreadoperation results

Basic Terminology Services | Jim Steel38 |

Tips and Tricks (cont)bull Batch

bull A lot of terminology operations are small ndash it can often be more efficient to send them as a batch (httphl7orgfhirhttphtmltransaction) then deal with the result when it comes back

bull Manage content types (Content-Type Accept _format)bull JSON XML

bull Accept-Encoding gzipbull More tips in the advanced session

Warning A lot of these can be server-dependent Theyrsquore not proprietary but you should check support for them by your terminology server

Basic Terminology Services | Jim Steel39 |

What if I am hellipbull Designing interfaces for data entry

bull Choose your CodeSystems (ideally standardized ones)

bull Choose or define your ValueSets

bull If your ValueSet is small a picklist can be populated using $expand

bull If your ValueSet is large a typeahead widget can use $expandfilter=xxx

Basic Terminology Services | Jim Steel40 |

bull Making a profilebull Choosedefine which code systems you want to allow

bull Make ValueSets with lists of codes you want to allow

ndash Make sure you respect the binding strength

bull Set up some processes for maintainingupdating them

ndash Concepts can become deprecated over time you can sometimes use ConceptMaps to find which concepts have changed

Basic Terminology Services | Jim Steel41 |

What if I amhellip

What if I am hellipbull Analyzingvalidating coded data

bull Choose your CodeSystemValueSets

bull Use $validate-code to check whether the codes are valid in the context in which yoursquore using them and whether the display text is correct (many clinical systems allow users to override the display text for the term)

bull Use $translate to map lsquoforeignrsquo coded data into a normalized CodeSystemValueSet for analysis

bull Use $subsumes $closure or $validate-code with an inline ValueSet to categorize data

Basic Terminology Services | Jim Steel42 |

What if I am hellipbull Exploring a set of concepts and how they relate to one another

bull Use $lookup to retrieve their properties and display them in a table

bull Use the lsquochildrsquo and lsquoparentrsquo properties or $subsumes$closure to explore the hierarchy that exists between concepts

Basic Terminology Services | Jim Steel43 |

Obligatory plugs

Terminology server httpsontoservercsiroau

Terminology browser httpsontoservercsiroaushrimp

Terminology resource editorhttpsontoservercsiroausnapper2-dev

Basic Terminology Services | Jim Steel44 |

Page 37: Basic FHIR Terminology Services - Home - FHIR DevDays · 2019-03-19 · Terminology: why •Terminology is the basis of shared meaning between different systems •StructureDefinitions

Tips and tricksbull Paging

bull Search results can be paged (httphl7orgfhirsearchhtml see _count parameter)

bull $expand results have a separate paging mechanism (count offset)

bull Can reduce bandwidthresponse times by requesting the specific elements you wantbull includeDefinition includeDesignations on $expand

bull property on $lookup

bull _elements on searchreadoperation results

Basic Terminology Services | Jim Steel38 |

Tips and Tricks (cont)bull Batch

bull A lot of terminology operations are small ndash it can often be more efficient to send them as a batch (httphl7orgfhirhttphtmltransaction) then deal with the result when it comes back

bull Manage content types (Content-Type Accept _format)bull JSON XML

bull Accept-Encoding gzipbull More tips in the advanced session

Warning A lot of these can be server-dependent Theyrsquore not proprietary but you should check support for them by your terminology server

Basic Terminology Services | Jim Steel39 |

What if I am hellipbull Designing interfaces for data entry

bull Choose your CodeSystems (ideally standardized ones)

bull Choose or define your ValueSets

bull If your ValueSet is small a picklist can be populated using $expand

bull If your ValueSet is large a typeahead widget can use $expandfilter=xxx

Basic Terminology Services | Jim Steel40 |

bull Making a profilebull Choosedefine which code systems you want to allow

bull Make ValueSets with lists of codes you want to allow

ndash Make sure you respect the binding strength

bull Set up some processes for maintainingupdating them

ndash Concepts can become deprecated over time you can sometimes use ConceptMaps to find which concepts have changed

Basic Terminology Services | Jim Steel41 |

What if I amhellip

What if I am hellipbull Analyzingvalidating coded data

bull Choose your CodeSystemValueSets

bull Use $validate-code to check whether the codes are valid in the context in which yoursquore using them and whether the display text is correct (many clinical systems allow users to override the display text for the term)

bull Use $translate to map lsquoforeignrsquo coded data into a normalized CodeSystemValueSet for analysis

bull Use $subsumes $closure or $validate-code with an inline ValueSet to categorize data

Basic Terminology Services | Jim Steel42 |

What if I am hellipbull Exploring a set of concepts and how they relate to one another

bull Use $lookup to retrieve their properties and display them in a table

bull Use the lsquochildrsquo and lsquoparentrsquo properties or $subsumes$closure to explore the hierarchy that exists between concepts

Basic Terminology Services | Jim Steel43 |

Obligatory plugs

Terminology server httpsontoservercsiroau

Terminology browser httpsontoservercsiroaushrimp

Terminology resource editorhttpsontoservercsiroausnapper2-dev

Basic Terminology Services | Jim Steel44 |

Page 38: Basic FHIR Terminology Services - Home - FHIR DevDays · 2019-03-19 · Terminology: why •Terminology is the basis of shared meaning between different systems •StructureDefinitions

Tips and Tricks (cont)bull Batch

bull A lot of terminology operations are small ndash it can often be more efficient to send them as a batch (httphl7orgfhirhttphtmltransaction) then deal with the result when it comes back

bull Manage content types (Content-Type Accept _format)bull JSON XML

bull Accept-Encoding gzipbull More tips in the advanced session

Warning A lot of these can be server-dependent Theyrsquore not proprietary but you should check support for them by your terminology server

Basic Terminology Services | Jim Steel39 |

What if I am hellipbull Designing interfaces for data entry

bull Choose your CodeSystems (ideally standardized ones)

bull Choose or define your ValueSets

bull If your ValueSet is small a picklist can be populated using $expand

bull If your ValueSet is large a typeahead widget can use $expandfilter=xxx

Basic Terminology Services | Jim Steel40 |

bull Making a profilebull Choosedefine which code systems you want to allow

bull Make ValueSets with lists of codes you want to allow

ndash Make sure you respect the binding strength

bull Set up some processes for maintainingupdating them

ndash Concepts can become deprecated over time you can sometimes use ConceptMaps to find which concepts have changed

Basic Terminology Services | Jim Steel41 |

What if I amhellip

What if I am hellipbull Analyzingvalidating coded data

bull Choose your CodeSystemValueSets

bull Use $validate-code to check whether the codes are valid in the context in which yoursquore using them and whether the display text is correct (many clinical systems allow users to override the display text for the term)

bull Use $translate to map lsquoforeignrsquo coded data into a normalized CodeSystemValueSet for analysis

bull Use $subsumes $closure or $validate-code with an inline ValueSet to categorize data

Basic Terminology Services | Jim Steel42 |

What if I am hellipbull Exploring a set of concepts and how they relate to one another

bull Use $lookup to retrieve their properties and display them in a table

bull Use the lsquochildrsquo and lsquoparentrsquo properties or $subsumes$closure to explore the hierarchy that exists between concepts

Basic Terminology Services | Jim Steel43 |

Obligatory plugs

Terminology server httpsontoservercsiroau

Terminology browser httpsontoservercsiroaushrimp

Terminology resource editorhttpsontoservercsiroausnapper2-dev

Basic Terminology Services | Jim Steel44 |

Page 39: Basic FHIR Terminology Services - Home - FHIR DevDays · 2019-03-19 · Terminology: why •Terminology is the basis of shared meaning between different systems •StructureDefinitions

What if I am hellipbull Designing interfaces for data entry

bull Choose your CodeSystems (ideally standardized ones)

bull Choose or define your ValueSets

bull If your ValueSet is small a picklist can be populated using $expand

bull If your ValueSet is large a typeahead widget can use $expandfilter=xxx

Basic Terminology Services | Jim Steel40 |

bull Making a profilebull Choosedefine which code systems you want to allow

bull Make ValueSets with lists of codes you want to allow

ndash Make sure you respect the binding strength

bull Set up some processes for maintainingupdating them

ndash Concepts can become deprecated over time you can sometimes use ConceptMaps to find which concepts have changed

Basic Terminology Services | Jim Steel41 |

What if I amhellip

What if I am hellipbull Analyzingvalidating coded data

bull Choose your CodeSystemValueSets

bull Use $validate-code to check whether the codes are valid in the context in which yoursquore using them and whether the display text is correct (many clinical systems allow users to override the display text for the term)

bull Use $translate to map lsquoforeignrsquo coded data into a normalized CodeSystemValueSet for analysis

bull Use $subsumes $closure or $validate-code with an inline ValueSet to categorize data

Basic Terminology Services | Jim Steel42 |

What if I am hellipbull Exploring a set of concepts and how they relate to one another

bull Use $lookup to retrieve their properties and display them in a table

bull Use the lsquochildrsquo and lsquoparentrsquo properties or $subsumes$closure to explore the hierarchy that exists between concepts

Basic Terminology Services | Jim Steel43 |

Obligatory plugs

Terminology server httpsontoservercsiroau

Terminology browser httpsontoservercsiroaushrimp

Terminology resource editorhttpsontoservercsiroausnapper2-dev

Basic Terminology Services | Jim Steel44 |

Page 40: Basic FHIR Terminology Services - Home - FHIR DevDays · 2019-03-19 · Terminology: why •Terminology is the basis of shared meaning between different systems •StructureDefinitions

bull Making a profilebull Choosedefine which code systems you want to allow

bull Make ValueSets with lists of codes you want to allow

ndash Make sure you respect the binding strength

bull Set up some processes for maintainingupdating them

ndash Concepts can become deprecated over time you can sometimes use ConceptMaps to find which concepts have changed

Basic Terminology Services | Jim Steel41 |

What if I amhellip

What if I am hellipbull Analyzingvalidating coded data

bull Choose your CodeSystemValueSets

bull Use $validate-code to check whether the codes are valid in the context in which yoursquore using them and whether the display text is correct (many clinical systems allow users to override the display text for the term)

bull Use $translate to map lsquoforeignrsquo coded data into a normalized CodeSystemValueSet for analysis

bull Use $subsumes $closure or $validate-code with an inline ValueSet to categorize data

Basic Terminology Services | Jim Steel42 |

What if I am hellipbull Exploring a set of concepts and how they relate to one another

bull Use $lookup to retrieve their properties and display them in a table

bull Use the lsquochildrsquo and lsquoparentrsquo properties or $subsumes$closure to explore the hierarchy that exists between concepts

Basic Terminology Services | Jim Steel43 |

Obligatory plugs

Terminology server httpsontoservercsiroau

Terminology browser httpsontoservercsiroaushrimp

Terminology resource editorhttpsontoservercsiroausnapper2-dev

Basic Terminology Services | Jim Steel44 |

Page 41: Basic FHIR Terminology Services - Home - FHIR DevDays · 2019-03-19 · Terminology: why •Terminology is the basis of shared meaning between different systems •StructureDefinitions

What if I am hellipbull Analyzingvalidating coded data

bull Choose your CodeSystemValueSets

bull Use $validate-code to check whether the codes are valid in the context in which yoursquore using them and whether the display text is correct (many clinical systems allow users to override the display text for the term)

bull Use $translate to map lsquoforeignrsquo coded data into a normalized CodeSystemValueSet for analysis

bull Use $subsumes $closure or $validate-code with an inline ValueSet to categorize data

Basic Terminology Services | Jim Steel42 |

What if I am hellipbull Exploring a set of concepts and how they relate to one another

bull Use $lookup to retrieve their properties and display them in a table

bull Use the lsquochildrsquo and lsquoparentrsquo properties or $subsumes$closure to explore the hierarchy that exists between concepts

Basic Terminology Services | Jim Steel43 |

Obligatory plugs

Terminology server httpsontoservercsiroau

Terminology browser httpsontoservercsiroaushrimp

Terminology resource editorhttpsontoservercsiroausnapper2-dev

Basic Terminology Services | Jim Steel44 |

Page 42: Basic FHIR Terminology Services - Home - FHIR DevDays · 2019-03-19 · Terminology: why •Terminology is the basis of shared meaning between different systems •StructureDefinitions

What if I am hellipbull Exploring a set of concepts and how they relate to one another

bull Use $lookup to retrieve their properties and display them in a table

bull Use the lsquochildrsquo and lsquoparentrsquo properties or $subsumes$closure to explore the hierarchy that exists between concepts

Basic Terminology Services | Jim Steel43 |

Obligatory plugs

Terminology server httpsontoservercsiroau

Terminology browser httpsontoservercsiroaushrimp

Terminology resource editorhttpsontoservercsiroausnapper2-dev

Basic Terminology Services | Jim Steel44 |

Page 43: Basic FHIR Terminology Services - Home - FHIR DevDays · 2019-03-19 · Terminology: why •Terminology is the basis of shared meaning between different systems •StructureDefinitions

Obligatory plugs

Terminology server httpsontoservercsiroau

Terminology browser httpsontoservercsiroaushrimp

Terminology resource editorhttpsontoservercsiroausnapper2-dev

Basic Terminology Services | Jim Steel44 |