Page tree

Versions Compared

Key

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

The following is a straw-man proposal to aid discussion with the group. This is a limited, happy-path scenario, including expression creation and querying. Many other operations could be performed using expressions.

- SOMETHING ABOUT R4  because of our delivery timelines-

Use Case

  • An orthopaedic clinician wants to record the procedure "Closed reduction of fracture of left radius"
    • We assume the EHR system supports searching precoordinated codes and, if necessary, creating postcoordinated codes
    • However, this EHR can only store codes up to 18 digits in length
    • The clinician selects the 87971000 |Closed reduction of fracture of radius (procedure)| with 272741003 |Laterality (attribute)| = 7771000 |Left (qualifier value)|

  • Then the orthopaedic department wants to report on the number of closed reduction vs. open reduction procedures.

...

  • Create the CodeSystem supplement. This supplements a specific module and version of SNOMED CT
  • 1234005 1234007 is the identifier of the module that contains the postcoordination content

PUT /CodeSystem/1234005snomed-exp

{
    "resourceType": "CodeSystem",
    "url": "http://snomed.info/sct",
"version": "http://snomed.info/xsct/12340051234007", /* The supplement includes the unpublished content in this module */ "content": "supplement", "supplements": "http://snomed.info/sct|http://snomed.info/sct/900000000000207008/version/202020131 /20220131",
"valueSet": "http://snomed.info/xsct/1234007?fhir_vs" /* Can we do this? */
}

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

  • Create ValueSet for expressions (can't use CodeSystem.valueSet because not a real code system?)
  • Create CodeSystem for generated identifiers - specify CodeSystem.valueSet 

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 the ConceptMap to automatically translate map expressions to generated short identifiers (only needed if EHR cannot store expressions) 
    • 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

PUT /ConceptMap/examplesnomed-pceexp-id-map

{
    "resourceType": "ConceptMap",
    "url": "http://examplesnomed.orginfo/snomed-pce/exp-id-map",
    "source": {
       "sourceUri": "http://examplesnomed.org/snomed-pce-libraryinfo/xsct/1234007?fhir_vs"
},
"target": {
       "targetUri": "http://snomed.info/xsctsnomed/101101234112/pceexp-id-gen/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

...

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)|

PATCH /CodeSystem/123005snomed-exp

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

...

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.

Generate the Expression Identifier:

GET /ConceptMap/$translate?url=http://snomed.info/xsct/101101234112/pce-id-gen/1101234

KAI TODO - RESPONSE

  • Translate operation returns newly generated identifier (SCTID or UUID)

Create Map entry from Expression to Generated Identifier

  • Create a map record from expression to

...

  • the generated code


PATCH /ConceptMap/1234005snomed-exp-id-map

{
   "group": [{
      "source": "http://snomed.info/sct",
"sourceVersion": "http://snomed.info/xsct/12340051234007",
      "target": "http://snomed.info/xsct/101101234112/pce-id-gen/1101234",
"element": [
"code": "87971000:272741003=7771000",
]
       }]
}
.... if the id was autogenerated when the expression was created
{
   "grouptarget": [{
      "source": "http://snomed.info/sct",
"sourceVersion": "http://snomed.info/xsct/1234005",
      "targetcode": "http://snomed.info/sct101101234165",
"targetVersion":"http://snomed.info/xsct/1234005/ids",
"elementequivalence": ["equivalent"
        "code": "87971000:272741003=7771000"   }
]
   }]
}

...

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

{
    "resourceType": "Parameters",
    "parameter": [
        {
            "name": "result",
            "valueBoolean": true
        },
        {
            "name": "match",
            "part": [
                {
                    "name": "equivalence",
                    "valueCode": "equivalent"
                },
                {
                    "name": "concept",
                    "valueCoding": {
                        "system": "http://snomed.info/pce-id-gen/1101234",
                        "code": "1001101234160"
                    }
                },
                {
                    "name": "source",
                    "valueString": "http://example.org/snomed-pce-id-map"
                }
            ]
        }
    ]
}

The generated identifier "1001101234160101101234165" should be used as a whole. (It contains item identifier "10010", namespace "1101234", partition identifier "16", and check digit "05".)

The generated identifier, from CodeSystem "http://snomed.info/xsct/101101234112/pce-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.


Lookup Expression Identifier from Expression

...

Lookup Expression from Expression Identifier

...


Querying

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.

  • Expand an intentional ValueSet using the expression library and ECL "< 86052008 |Closed reduction of fracture (procedure)|"

-GET /ValueSet/$expand?url=http://snomed.info/xsct/

...

1234007?fhir_vs=ecl/<86052008

  1. GET /ValueSet/$expand?url=http://snomed.info/sct/900000000000207008#http://snomed.info/xsct/1234005?fhir_vs=ecl/<86052008

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

  1. GET /ValueSet/$expand?url=http://snomed.info/xsct/1234005;module/98763002?fhir_vs=ecl/<86052008
  2. GET /ValueSet/$expand?url=http://snomed.info/sct/900000000000207008;module/98763002#http://snomed.info/xsct/12340051234007;module/98763002?fhir_vs=ecl/<86052008

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


Feedback

...