Page tree

Versions Compared

Key

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

Date & Time

20:00 UTC Wednesday 6th July 2016

GoToMeeting Details

Click here to see GoToMeeting joining information

Click here to see GoToMeeting recordings

Goals

  • To progress the SNOMED CT Template syntax

Apologies

Observers

Agenda and Meeting Notes

Advanced Tables - Table Plus
border2
rowStylesbackground-color:#ccccff;font-weight:bold;,background-color:"#eeeeff";font-weight:normal;,background-color:#eeffff;font-weight:normal;
autoNumberSorttrue
autoNumbertrue
enableSortingfalse

 

 

Agenda and Meeting Notes

Advanced Tables - Table Plus
border2
rowStylesbackground-color:#ccccff;font-weight:bold;,background-color:"#eeeeff";font-weight:normal;,background-color:#eeffff;font-weight:normal;
autoNumberSorttrue
autoNumbertrue
enableSortingfalse

 

Do we need to support naming of SNOMED CT Relationship Groups within the SNOMED CT Expression Template syntax? For example: [[ .... ]]@RelationshipGroupName { .......}

Note: This requirement comes from the need for a stable name for each relationshipgroup, in the FHIR Structure Definition used to represent the SNOMED Expression Template that is the target of a mapping (examples above
Description
Owner
Notes

Welcome, introductions and apologies

Linda Bird 
Agenda reviewLinda BirdReview agenda for today's meeting
Recap of last week's meetingLinda Bird

STEP 1 - Convert SNOMED CT Expression Template into FHIR Structure Definition (for use as Target of Mapping)

CONDITION RESOURCE

  • SNOMED CT Expression Template

[[ [1..1] @findingWithExplicitContext ]]:

#[1..2] @RGa { 246090004 |Associated finding| = ([[ [0..1] @associatedFinding ]]:

#[0..1] @RGb { 246112005 |Severity| = [[ [0..1] @severity]],

363698007 |Finding site| = [[ [0..1] @findingSite]] })

408732007 |Subject relationship context| = 410604004 |Subject of record|,

408731000 |Temporal context| = [[ [1..1] @temporalContext ]],

408729009 |Finding context| = [[ [1..1] @findingContext ]] }

  • FHIR Structure Definition

SCT_ConditionTemplate: SNOMEDCTExpressionTemplate

findingWithExplicitContext [1]: CodeableConceptCoding

RGagroup [1..2]: RelationshipGroupElement

associatedFinding [1]: CodeableConcept Coding

RGbgroup [0..1]: RelationshipGroupElement

severity [0..1]: CodeableConcept Coding

findingSite [0..1]: CodeableConcept Coding

subjectRelationship [1]: CodeableConcept Coding 410604004 |Subject of record|

temporalContext [1]: CodeableConcept Coding

findingContext [1]: CodeableConcept Coding

STEP 2 - Define Mapping Rules from Source Structure (FHIR Resource) to Target Structure (SNOMED CT Expression Template)

SOURCE STRUCTURE

Condition: Resource

code [1]: CodeableConcept (coding [1..*] - system, version, code, display, userSelected [0..1] - text [0..1])

category [0..1]: CodeableConcept (values: complaint | symptom | finding | diagnosis)

clinicalStatus [0..1]: code (values: active | relapse | remission | resolved)

verificationStatus [1]: code (values: provisional | differential | confirmed | refuted | entered-in-error | unknown)

severity [0..1]: CodeableConcept

bodySite [0..*1]: CodeableConcept

TARGET STRUCTURE

SCT_ConditionTemplate: SNOMEDCTExpressionTemplate

findingWithExplicitContext [1]: CodeableConcept

RGagroup [1..2]: RelationshipGroupElement

associatedFinding [1]: CodeableConcept

RGaagroup [0..1]: RelationshipGroupElement

severity [0..1]: CodeableConcept

findingSite [0..1]: CodeableConcept

subjectRelationship [1]: CodeableConcept = 410604004 |Subject of record|

temporalContext [1]: CodeableConcept

findingContext [1]: CodeableConcept

RULES

rule_1: for  source.code as code where verificationStatus != "entered-in-error" then {

rule_1afor code where code in descendantsOf (404684003 |Clinical finding|memberOf("http://snomed.info/sct?fhir_vs=isa/404684003") make target.findingWithExplicitContext = 413350009 |Finding with explicit context|, target.RGa group as rga groupA then {

rule_1aafor code make rga groupA.associatedFinding = code

rule_1abfor code where severity in descendantsOf (272141005 | Severities|) OR findingSite in descendantsOf (123037004 |Body structure|) make rga.RGb as rgb in memberOf("http://snomed.info/sct?fhir_vs=isa/272141005") OR findingSite in memberOf("http://snomed.info/sct?fhir_vs=isa/123037004) make groupA.group as groupB then {

rule_1abafor source.severity as sev where severity in descendantsOf (272141005 | Severities|memberOf("http://snomed.info/sct?fhir_vs=isa/272141005") make rgb groupB.severity = sev

rule_1abbfor source.bodySite as bs where findingSite in descendantsOf (123037004 |Body structure|memberOf("http://snomed.info/sct?fhir_vs=isa/123037004) make rgb groupB.findingSite = bs }

rule_1acfor code make rga groupA.subjectRelationship = 410604004 |Subject of record|

rule_1adfor code make rga groupA.temporalContext = 410512000 |Current or specified time|

rule_1aefor source.clinicalStatus as cs, source.verificationStatus as vs  make rga groupA.findingContext as fc then {

rule_1aea: for vs make fc.coding as coding then {

rule_1aeaa: for vs make coding

.code = translate

(

(

clinicalStatus,verificationStatus),

'status-to-findingContext-map',

code

cs, vs)

 rule_

1aeab

1aeb: for vs make

code

fc.system = "http://snomed.info/"

 rule_

1aeac

1aec: for vs make

code

fc.display = 

preferredTerm (en-us,

"http://snomed.info/sct?lookupPT(coding.code, 900000000000509007)

 }

} }

  rule_1b: for code where code in descendantsOf (413350009 |Finding with explicit context| memberOf("http://snomed.info/sct?fhir_vs=isa/413350009 ") make target.findingWithExplicitContext = code then {

rule_1ba:

} }

Outstanding question - Q1Linda BirdDo we need to support naming of SNOMED CT Relationship Groups within the SNOMED CT Expression Template syntax? For example: [[ .... ]]: @RelationshipGroupName { .......}
  • Note: This requirement comes from the need for a stable name for each relationshipgroup, in the FHIR Structure Definition used to represent the SNOMED Expression Template that is the target of a mapping (examples above).
  • A possible alternative would be to not include relationship group names in the template, and instead rely on a reproducible approach to automatically generating these names (e.g. RG1, RG1.1, RG1.2, RG2, RG2.1). However, because these names are used in the mapping code, we would need to ensure that they are absolutely stable - so given this, is this approach appropriate?
Outstanding question - Q2Linda BirdWhat syntax should we use to define cardinality constraints?
  1. On a focus concept, an attribute or an attribute value - e.g. in the relevant slot [[ [1..*] < 123456 @slotName ]]
  2. On a relationship group - e.g. 123456 |concept|: #[1..*] { .......}
    • Note: The syntax must clearly indicate that the cardinality on a relationship group does not appear in the concrete expression that is generated when the expression template is populated. This is needed to distinguish an Expression Template (with relationship group cardinalities) from an Expression Constraint Template (for which the relationship group cardinalities do appear in the populated version of the template). In this example syntax, the "#" is being used to say "The following constraint needs to be removed when the template is populated."
Outstanding question - Q3Linda Bird

What is the expected behaviour when a cardinality constraint in an Expression Template is not met?

Outstanding question - Q4

Linda Bird

Are there any other template requirements that we haven't yet considered for other use cases (e.g. for concept authoring)

Confirm next meeting date/timeLinda BirdNext meeting to be held at 20:00 UTC on Wednesday 20th July

Meeting Files

Attachments

Date & Time

20:00 UTC Wednesday 6th July 2016

GoToMeeting Details

Click here to see GoToMeeting joining information

Click here to see GoToMeeting recordings

Goals

  • To progress the SNOMED CT Template syntax

Attendees 

Apologies

Observers

)

.
  • A possible alternative would be to not include relationship group names in the template, and instead rely on a reproducible approach to automatically generating these names (e.g. RG1, RG1.1, RG1.2, RG2, RG2.1). However, because these names are used in the mapping code, we would need to ensure that they are absolutely stable - so given this, is this approach appropriate?
  •  

    Description
    Owner
    Notes

    Welcome, introductions and apologies

    Linda Bird 
    Agenda reviewLinda BirdReview agenda for today's meeting
    Recap of last week's meetingLinda Bird

    STEP 1 - Convert SNOMED CT Expression Template into FHIR Structure Definition (for use as Target of Mapping)

    CONDITION RESOURCE

    • SNOMED CT Expression Template

    [[ [1..1] @findingWithExplicitContext ]]:

    #[1..2] @RGa { 246090004 |Associated finding| = ([[ [0..1] @associatedFinding ]]:

    #[0..1] @RGb { 246112005 |Severity| = [[ [0..1] @severity]],

    363698007 |Finding site| = [[ [0..1] @findingSite]] })

    408732007 |Subject relationship context| = 410604004 |Subject of record|,

    408731000 |Temporal context| = [[ [1..1] @temporalContext ]],

    408729009 |Finding context| = [[ [1..1] @findingContext ]] }

    • FHIR Structure Definition

    SCT_ConditionTemplate: SNOMEDCTExpressionTemplate

    findingWithExplicitContext [1]: CodeableConcept

    RGa [1..2]: RelationshipGroupElement

    associatedFinding [1]: CodeableConcept

    RGb [0..1]: RelationshipGroupElement

    severity [0..1]: CodeableConcept

    findingSite [0..1]: CodeableConcept

    subjectRelationship [1]: CodeableConcept = 410604004 |Subject of record|

    temporalContext [1]: CodeableConcept

    findingContext [1]: CodeableConcept

    STEP 2 - Define Mapping Rules from Source Structure (FHIR Resource) to Target Structure (SNOMED CT Expression Template)

    SOURCE STRUCTURE

    Condition: Resource

    code [1]: CodeableConcept (coding [1..*] - system, version, code, display, userSelected [0..1] - text [0..1])

    category [0..1]: CodeableConcept (values: complaint | symptom | finding | diagnosis)

    clinicalStatus [0..1]: code (values: active | relapse | remission | resolved)

    verificationStatus [1]: code (values: provisional | differential | confirmed | refuted | entered-in-error | unknown)

    severity [0..1]: CodeableConcept

    bodySite [0..*]: CodeableConcept

    TARGET STRUCTURE

    SCT_ConditionTemplate: SNOMEDCTExpressionTemplate

    findingWithExplicitContext [1]: CodeableConcept

    RGa [1..2]: RelationshipGroupElement

    associatedFinding [1]: CodeableConcept

    RGaa [0..1]: RelationshipGroupElement

    severity [0..1]: CodeableConcept

    findingSite [0..1]: CodeableConcept

    subjectRelationship [1]: CodeableConcept = 410604004 |Subject of record|

    temporalContext [1]: CodeableConcept

    findingContext [1]: CodeableConcept

    RULES

    rule_1: for  source.code as code where verificationStatus != "entered-in-error" then {

    rule_1afor code where code in descendantsOf (404684003 |Clinical finding|) make target.findingWithExplicitContext = 413350009 |Finding with explicit context|, target.RGa as rga then {

    rule_1aafor code make rga.associatedFinding = code

    rule_1abfor code where severity in descendantsOf (272141005 | Severities|) OR findingSite in descendantsOf (123037004 |Body structure|) make rga.RGb as rgb then {

    rule_1abafor source.severity as sev where severity in descendantsOf (272141005 | Severities|) make rgb.severity = sev

    rule_1abbfor source.bodySite as bs where findingSite in descendantsOf (123037004 |Body structure|) makergb.findingSite = bs }

    rule_1acfor code make rga.subjectRelationship = 410604004 |Subject of record|

    rule_1adfor code make rga.temporalContext = 410512000 |Current or specified time|

    rule_1aefor source.clinicalStatus as cs, source.verificationStatus as vs  make rga.findingContext as fc then {

    rule_1aea: for vs make fc.coding as coding then {

    rule_1aeaa: for vs make coding.code = translate ((clinicalStatus,verificationStatus), 'status-to-findingContext-map', code)

    rule_1aeab: for vs make code.system = "http://snomed.info/"

    rule_1aeac: for vs make code.display = preferredTerm (en-us, coding.code) }

    } }

      rule_1b: for code where code in descendantsOf (413350009 |Finding with explicit context|) make target.findingWithExplicitContext = code then {

    rule_1ba:

    } }

    Outstanding questions - Q1Linda Bird 

    Confirm next meeting date/timeLinda BirdNext meeting to be held at 20:00 UTC on Wednesday 20th July

    Meeting Files

    Attachments