IHTSDO/snowstorm

Multilingual support for SNOMED CT and ICD-10 mappings

Opened this issue · 7 comments

Hi, I'm hoping you can help me identify why multilingual functionality breaks only when using the FHIR api to get English ICD-10 display strings.

What works:

  • I have successfully imported the SNOMED CT release for NL, which includes the International edition.
  • Switching between English and Dutch via the Snowstorm native API has worked as specified in your docs.
  • After uploading the Dutch ICD-10 translations I receive the correct response to base_url_here/fhir/ConceptMap/$translate?code=38341003&system=http://snomed.info/sct&targetsystem=http://hl7.org/fhir/sid/icd-10

image

Where things go wrong:

  • The translate query did not return a display value when English was specified, so I uploaded the international version CLAML file the same way as I did the Dutch (thanks for the file btw!)
  • Running the same query, specifying English, resulted in the same no display string outcome, and then the Dutch version also stopped working.
  • Reuploading the Dutch ICD-10 fixed the display issue (but of course only for Dutch)

Should I be further specifying anything in the HAPI-FHIR command when uploading the ICD-10 CLAML files? Or is there something missing from the translate request? I noticed that the fullUrl for both ICD-10 code systems were the same after upload ("base_url_here/fhir/CodeSystem/hl7.org-fhir-sid-icd-10"), whereas different SNOMED CT versions include the version number in their fullUrl - could that be the cause?

We have not attempted multi-language support for CodeSystems other than SNOMED CT within Snowstorm. It's quite interesting to hear that you are trying this.

I'm not even sure what Snowstorm will do when you import two versions of ICD-10 with different languages. I expect that the second version uploaded would completely replace the first version, as long as the same system url and version have been used.

Could you check if multiple designations have been stored using a lookup: /CodeSystem/$lookup?system=http://hl7.org/fhir/sid/icd-10&code=I10&includeDesignations=true.
I expect only one display term has been stored?

Yes, correct!

{
    "resourceType": "Parameters",
    "parameter": [
        {
            "name": "name",
            "valueString": "ICD-1O-2014v12v-O3-C-nl"
        },
        {
            "name": "system",
            "valueString": "http://hl7.org/fhir/sid/icd-10"
        },
        {
            "name": "version",
            "valueString": "4.015.012.001"
        },
        {
            "name": "display",
            "valueString": "Essentiële (primaire) hypertensie"
        },
        {
            "name": "property",
            "part": [
                {
                    "name": "code",
                    "valueCode": "relatedTerm"
                },
                {
                    "name": "value",
                    "valueString": "Hoge bloeddruk"
                }
            ]
        },
        {
            "name": "property",
            "part": [
                {
                    "name": "code",
                    "valueCode": "relatedTerm"
                },
                {
                    "name": "value",
                    "valueString": "Hypertensie (arterieel)(benigne)(essentieel)(maligne)(primair)(systemisch)"
                }
            ]
        },
        {
            "name": "property",
            "part": [
                {
                    "name": "code",
                    "valueCode": "parent"
                },
                {
                    "name": "value",
                    "valueCoding": {
                        "system": "http://hl7.org/fhir/sid/icd-10",
                        "code": "I10-I15",
                        "display": "Hypertensieve ziekten"
                    }
                }
            ]
        },
        {
            "name": "property",
            "part": [
                {
                    "name": "code",
                    "valueCode": "exclusion"
                },
                {
                    "name": "value",
                    "valueString": "met aandoening van bloedvaten van hersenen (I60-I69)"
                }
            ]
        },
        {
            "name": "property",
            "part": [
                {
                    "name": "code",
                    "valueCode": "exclusion"
                },
                {
                    "name": "value",
                    "valueString": "met aandoening van bloedvaten van oog (H35.0)"
                }
            ]
        }
    ]
}

What's interesting though is the International and Dutch versions of ICD-10 are different

The International and Dutch versions of ICD-10 may have different content but if they are using the same system URI Snowstorm will not be able to tell the difference.
The SNOMED CT to ICD-10 map is to the International ICD-10 CodeSystem.. does the Dutch version have any additional codes? I guess they won't be covered by the International map?

I don't think the Dutch version has additional codes, but I found that (at least according to HL7 docs) the URI could be http://hl7.org/fhir/sid/icd-10-nl . However, if I add that as the URI when uploading I get the following error
image

I assume the CLI assumes a different input format if the URL isn't exactly http://hl7.org/fhir/sid/icd-10

Does the Dutch version contain the English terms as well or only the Dutch terms?

For Snowstorm to be able to select the language for the display term during $translate (for a non-SNOMED CT code system) the following must be true:

  • The code system concepts in the store must contain each required language
  • Snowstorm would need a minor change to the translate operation

The current CLAML file loader, which is part of the HAPI FHIR project does not expect more than one display term in the CLAML file and does not record the language.

An alternative method to load ICD-10 is to first transform the CLAML file to a FHIR CodeSystem resource using a transformer. The Australian e-Health Research Centre have published such a transformer: https://github.com/aehrc/fhir-claml which produces a JSON file. It's not clear if the transformer can pick up multiple languages. I have never tried this method. In theory the CodeSystem file could be put into a FHIR package and loaded using this method.

In short Snowstorm does support selecting the display term language in the translate operation but currently only when the target code system is SNOMED CT. I've given a long answer in case you are super determined for this to work.

Thanks for the thorough answer; it has been really informative. The Dutch version doesn't have English display terms so I would need to do some transformations as you suggest.
Thanks again!