Validating against SNOMED-CT Concept Code

168 views
Skip to first unread message

Marco Strauch

unread,
Apr 17, 2023, 4:41:43 AM4/17/23
to HAPI FHIR
Hi,

I am trying to validate an Observation of profile ISiK blood pressure having a snomed-ct code for the body site.

Here is the example provided by ISiK. 

{
    "resourceType""Observation",
    "id""ISiKBlutdruckExample",
    "meta": {
        "profile":  [
        ]
    },
    "category":  [
        {
            "coding":  [
                {
                    "system""http://terminology.hl7.org/CodeSystem/observation-category",
                    "code""vital-signs",
                    "display""Vital Signs"
                }
            ]
        }
    ],
    "code": {
        "coding":  [
            {
                "system""http://loinc.org",
                "code""85354-9",
                "display""Blood pressure panel with all children optional"
            }
        ],
        "text""Systolischer und Diastolischer Blutdruck"
    },
    "component":  [
        {
            "code": {
                "coding":  [
                    {
                        "system""http://loinc.org",
                        "code""8480-6"
                    }
                ]
            },
            "valueQuantity": {
                "system""http://unitsofmeasure.org",
                "value"107,
                "code""mm[Hg]",
                "unit""mmHg"
            }
        },
        {
            "code": {
                "coding":  [
                    {
                        "system""http://loinc.org",
                        "code""8462-4"
                    }
                ]
            },
            "valueQuantity": {
                "system""http://unitsofmeasure.org",
                "value"60,
                "code""mm[Hg]",
                "unit""mmHg"
            }
        }
    ],
    "status""final",
    "subject": {
        "reference""Patient/AYczIkDmA.CdsOkJZEio"
    },
    "effectiveDateTime""2012-09-17",
    "interpretation":  [
        {
            "coding":  [
                {
                    "code""L",
                    "system""http://terminology.hl7.org/CodeSystem/v3-ObservationInterpretation",
                    "display""low"
                }
            ],
            "text""Below low normal"
        }
    ],
    "bodySite": {
        "coding":  [
            {
                "code""368209003",
                "system""http://snomed.info/sct",
                "display""Right arm"
            }
        ]
    }
}

The problematic part is the "bodySite" coding. This is not specially profiled by ISiK but by FHIR. This Coding must use the "ValueSet 'SNOMEDCTBodyStructures'"  specified by FHIR R4. This value set includes all codes were concept IsA 442083009. In the ISiK example the code is below the given concept and shall be correct.

So now lets come to my problem:

When I am using the DefaultProfileValidationSupport in combination with the InMemoryTerminologyServerValidationSupport this Body Site Code will be ignored during validation because the content of the loaded code system is "Not-Present".

For the method "isCodeSystemSupported" the DefaultProfileValidationSupport will always return "false" and then the code system is being fetched by the InMemoryTerminologyServerValidationSupport using the loaded code System list of the DefaultProfileValidationSupport and then checks if the content is "not-present" then return false for "isCodeSystemSupported"

Screen 1.jpg

So in that case the snomed-ct code is not being validated and no validation error occurs.


But I am getting another validation result when I use the NpmPackageValidationSupport (what is a derivation of PrePopulatedValidationSupport) in combination with the "InMemoryTerminologyServerValidationSupport".
Using the NpmPackageValidationSupport I load all NPM Packages for ISiK, HL7-FHIR-DE and fhir-core-r.4 and put it togheter with the InMemoryTerminologyServerValidationSupport and the "SnapshotGeneratingValidationSupport" into the ValidationSupportChain.

Now when the validation is checking if the codesystem exists using "IValidationSupport.isCodeSystemSupported" the "PrePopulatedValidationSupport" will always return true if the code system was loaded by the definitions of the package. So the fetchCodeSystem of the "InMemoryTerminologyServerValidationSupport" will not be used. 
But "isCodeSystemSupported" will not check the value of content for "not-present". So the code of the snomed-ct system will now be checked and follow validation error is being returned.

{
    "resourceType""OperationOutcome",
    "issue": [
        {
            "severity""error",
            "code""processing",
            "diagnostics""Validation failed für \"http://snomed.info/sct#368209003\"",
            "location": [
                "Observation.bodySite.coding[0]",
                "Line 1, Col 859"
            ]
        }
    ]
}

Screen 2.jpg

So there is a different handling when using the "NpmPackageValidationSupport" insteadof the "DefaultProfileValidationSupport". Is that intentional or a bug?


And my last question is. How can I enforce that the code of the body site will be validated correctly? 
Because ISiK and FHIR do not provide the specific snomed codes for valid values of the given value set and I have not found a validator than can validate against the snomed conecpt code.

I hope someone can help me and bring light into darkness.


Regards

Marco


Ramesh Kalbi

unread,
Aug 22, 2023, 3:05:50 PM8/22/23
to HAPI FHIR
Hi Marco,

Were were able to figure this out?

Reply all
Reply to author
Forward
0 new messages