Page tree

Versions Compared

Key

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

...

Expand
titleOverview diagram (click to show/hide)

Gliffy Diagram
macroId1c0f55c4-a5c0-4c95-aad3-044298d0968e
displayNameSolution Overview
nameSolution Overview
pagePin5



Create Expression Repository

Create CodeSystem Code System Supplement for Expressions

Create the CodeSystem supplement. This supplements a specific module and version of SNOMED CT

...

. 1234007 is the identifier of the module that contains the postcoordination content.

PUT /CodeSystem/snomed-exp

{
    "resourceType": "CodeSystem",
    "url": "http://snomed.info/sct",
"version": "http://snomed.info/xsct/1234007", /* The supplement includes the unpublished content in this module */ "content": "supplement", "supplements": "http://snomed.info/sct|http://snomed.info/sct/900000000000207008/version/20220131", /* Supplements a specific module and version */
"valueSet": "http://snomed.info/xsct/1234007?fhir_vs" /* CanIs wethis do thiscorrect? */
}

The PUT operation can be used to create a resource with a specific id. Using POST would generate an id.


Create

...

Code System for Expression Identifiers

This is only needed if EHR cannot store expressions: Create a CodeSystem for expression identifiers, specifying the CodeSystem.valueSet url.

Create CodeSystem Expression Identifiers

PUT /CodeSystem/snomed-exp-id

{
    "resourceType": "CodeSystem",
    "url": "http://snomed.info/snomed/exp-id/1101234",
"valueSet": "http://snomed.info/snomed/exp-id/1101234?fhir_vs"
}

Create Expression to Identifier Concept Map

Create the ConceptMap to map expressions to

...

  • A SNOMED Namespace is required for identifier generation
    • The Implementation Support Team has ideas about how to simplify the process of namespace assignment for postcoordination

expression identifiers. This will be populated manually.

Create ConceptMap

PUT /ConceptMap/snomed-exp-id-map

{
    "resourceType": "ConceptMap",
    "url": "http://snomed.info/snomed/exp-id-map",
    "source": {
       "sourceUri": "http://snomed.info/xsct/1234007?fhir_vs"
},
"target": {
       "targetUri": "http://snomed.info/snomed/exp-id/1101234?fhir_vs"
} }

The target specifies that the target of the map will be generated SNOMED PCE identifiers. The targetUri includes the SNOMED Namespace to be used.
This is an algorithmic concept map, similar to Ontoserver's automap strategies.

Feedback from group

  • ML
    • I would generate UUIDs for expressions rather than using SCTIDs
    • Type 5? UUID could take expression as the seed to create deterministic ids
  • KK - Maybe expression id generation should be implementation specific


Add Expressions to Repository

The EHR system attempts to update the CodeSystem supplement with the expression, using either classifiable-form or close-to-user form depending on what is supported by the terminology server.
Example expression in close-to-user form: 87971000 |Closed reduction of fracture of radius (procedure)| : 272741003 |Laterality (attribute)| = 7771000 |Left (qualifier value)|

Add CTU form Expression to CodeSystem Supplement

  • Use the PATCH operation to update the existing CodeSystem supplement resource, adding an expression that combines existing codes.

PATCH /CodeSystem/snomed-exp

{
   "concept": [{
      "code": "87971000:272741003=7771000"
  }]
}

The PATCH operation is used to update the existing CodeSystem supplement resource, adding an expression that combines existing codes.

Feedback:

  • ML
    • If short identifier could be generated within the EHR (Type 5 UUID) then this could be included as an alternate identifier when inserting the expression in the supplement.
    • Could then insert the short identifier into the ConceptMap as the target

The terminology server must perform MRCM domain-attribute and attribute-range validation. If close-to-user form is supported, then the expression should be transformed to classifiable form before MRCM validation. The terminology server may also classify the expression at this point to reduce the processing required during subsequent operations that use the hierarchy.

Use Translate to Generate

...

an Expression Identifier

Use an algorithmic concept map to generate an SCTID for the expression. This is similar to Ontoserver's algorithmic automap strategies. A SNOMED Namespace is required for identifier generation, this is included in the map URI.
The Implementation Support Team has ideas about how to simplify the process of namespace assignment for postcoordination.

GET /ConceptMap/$translate?
  url=http://snomed.info/xsct/101101234112/pce-id-gen/1101234
KAI TODO - RESPONSE  &system=http://snomed.info/xsct/1234007
  &code=87971000:272741003=7771000


  • The URI format for the SCTID generation automap is http://snomed.info/xsct/{module}/pce-id-gen/{namespace}
  • The expression system and code must also be provided so that the automap can return the existing identifier for an expression if one already exists
  • Translate operation returns newly generated identifier (SCTID or UUID)

Response example:

{
"resourceType": "Parameters",
"parameter": [
{
"name": "result",
"valueBoolean": true
},
{
"name": "match",
"part": [
{
"name": "source",
"valueString": "http://snomed.info/xsct/101101234112/pce-id-gen/1101234"
},
       {
"name": "equivalence",
"valueCode": "equal"
},
{
"name": "concept",
"valueCoding": {
"system": "http://snomed.info/xsct",
"code": "101101234165"
}
}
]
}
]
}


Feedback from group (moved from earlier version)

  • ML
    • I would generate UUIDs for expressions rather than using SCTIDs
    • Type 5? UUID could take expression as the seed to create deterministic ids
    • If short identifier could be generated within the EHR (Type 5 UUID) then this could be included as an alternate identifier when inserting the expression in the supplement.
  • KK
    • Expression id generation could be implementation specific
    • SCTID may be the only option in some cases
      • These can still be clearly identified as expressions by the fact that they only exist in the supplement and that they use the 16 partition id (third from last and second from last digits).


Create Map Entry from Expression to

...

Identifier

Create a map record from expression to the generated code using PATCH.

PATCH /ConceptMap/snomed-exp-id-map

{
   "group": [{
      "source": "http://snomed.info/sct",
"sourceVersion": "http://snomed.info/xsct/1234007",
      "target": "http://snomed.info/xsctsnomed/101101234112/pceexp-id-gen/1101234",
"element": [
"code": "87971000:272741003=7771000",
           "target": {
"code": "101101234165",
"equivalence": "equivalent"
           }
]
   }]
}

...

The generated identifier, from CodeSystem "http://snomed.info/xsctsnomed/101101234112/pceexp-id-gen/1101234", can be stored in the EHR record. The code system is derivable from the code, within the bounds of SNOMED CT codes, because of the 16 partition identifier and the fact that the code contains the namespace.

Use Expression Repository

Lookup Expression Identifier from Expression

GET /ConceptMap/snomed-exp-id-map/$translate?
  system=http://snomed.info/xsct/1234007
  &code=87971000:272741003=7771000

This returns an equivalent match to the expression identifier and its system...

Lookup Expression from Expression Identifier

GET /ConceptMap/snomed-exp-id-map/$translate?
  reverse=true
  &system=http://snomed.info/snomed/exp-id/1101234
  &code=101101234165

This returns an equivalent match to the expression itself and its system...

Query Expression

The department would like to report on the number of closed reduction procedures performed. All codes representing this type of procedure must be fetched so that they can be matched against the EHR records.

---------------------

Previous Feedback

  • ML - this syntax would not work today. Perhaps use a POST with a ValueSet def based on a SNOMED CT code system, including the code system supplement.. there is a ticket related to referencing supplements
    • The code system and supplement in the definition would need to match (inc version)


The terminology server will expand the ECL using the current version of the CodeSystem supplement and the precoordinated SNOMED CT Edition and the version that the supplement is dependent on. The results will contain a mixture of simple codes and expressions:

...

The last code in the results is our expression. It includes a term generated using the expression.

Feedback

  • ML -
    • In R5 the alternate id could be requested during expand

The EHR can use the precoordinated codes to identify closed reduction procedures within the EHR records. If the EHR can store expressions then the expressions can also be used as they are. If the EHR can not store expressions the following is needed:

  • Translate expressions to simple codes (only needed if EHR cannot store expressions)

GET /ConceptMap/example-pce-id/$translate?target=http://snomed.info/pce-id-gen/1101234&code=87971000:272741003=7771000

Same response as before.

Summary

  • Search existing precoordinated content
  • Create expression - CodeSystem supplement PATCH
    • Create map entry from expression to generated code - ConceptMap PATCH
    • Translate - ConceptMap Translate
  • Query - ValueSet Expand
    • Translate expression to code - ConceptMap Translate

Feedback

  • ML
    • the alternate identifier could be kept within the EHR, there may be no need to have that in FHIR.
      • POST to $expand could be used for translation of alternate id to expression