SNOMED CT Post-Coordination support

Ontoserver includes support for SNOMED CT post-coordinated expressions (PCEs). Support is optionally enabled by setting the configuration parameter ontoserver.feature.postcoordination to true.

When processing PCEs, Ontosever will rewrite them to a semantically equivalent form. Largely this involves stripping whitespace and re-ordering of the PCE's sub-expressions to avoid unnecessary and insignificant variation. For example, the two expressions 123456789 + 987654321 and 987654321 + 123456789 might be rewritten to the equivalent PCE 123456789+987654321.

The following sections provide specific details:

Note, due to potential issues with the integrity of the associated transformations, close-to-user form is not supported by Ontoserver. This is primarily due to the uncertain semantics of the proposed transformation algorithm that operate outside of Description Logic semantics such as:

$validate-code

When called with a PCE, the CodeSystem/$validate-code operation will check the syntax of the PCE and the validity of each referenced SNOMED CT concept within the PCE.

The ValueSet/$validate-code operation will additionally check that the PCE is a member of the expansion1 of the supplied ValueSet.

$closure and $subsumes

PCEs may be supplied to the /$closure operation and the result will return subsumes and equivalent relationships as is appropriate.

Either or both codes passed to the CodeSystem/$subsumes operation my be PCEs. Ontoserver will then determine the subsumption relationship between the two parameters.

$lookup

When called with a PCE, the expression's will be validated as per CodeSystem/$validate-code and if okay, then the result will include a stylised and automatically generated display string.

Expression Libraries

A library of PCEs may be maintained in the form of a CodeSystem supplement for SNOMED CT.

The following is an example of such a supplement:

{
    "resourceType": "CodeSystem",
    "url": "http://example.com/pce-library",
    "version": "1.0",
    "status": "draft",
    "content": "supplement",
    "supplements": "http://snomed.info/sct|http://snomed.info/sct/900000000000207008/version/20220131",
    "concept": [{
        "code": "421720008 + 739008005",
        "display": "Spray dose form AND Suspension"
    }, {
        "code": " 397956004 |Prosthetic arthroplasty of the hip| : 363704007 |Procedure site| = ( 24136001 |Hip joint structure| :  272741003 |Laterality| =  7771000 |Left| )",
        "display": "Prosthetic arthroplasty of left hip"
    }]
}

Any ValueSet that explicitly includes the supplement via the supplement extension: http://hl7.org/fhir/StructureDefinition/valueset-supplement, will then potentially include the PCEs. This means that, assuming they match the ValueSet's compose criteria, they will be included in the ValueSet's expansion, and their display text and any designations will be used for matching with $expand's filter parameter.

Note, Ontoserver requires that CodeSystem supplements specify the specific version of the CodeSystem they are supplementing.

For example, the following ValueSet:

{
    "resourceType": "ValueSet",
    "extension": [{
        "url": "http://hl7.org/fhir/StructureDefinition/valueset-supplement",
        "valueCanonical": "http://example.com/pce-library|1.0"
    }],
    "url": "http://example.com/pce-library/vs",
    "status": "draft",
    "compose": {
        "include": [{
            "system": "http://snomed.info/sct",
            "version": "http://snomed.info/sct/900000000000207008/version/20220131"
        }]
    }
}

might be expanded with:

[base]/ValueSet/$expand?url=http://example.com/pce-library/vs&filter=spray+susp


1 A ValueSet expansion will only include PCEs if they are also a member of a referenced CodeSystem supplement.