Date & Time
20:00 UTC Wednesday 6th July 2016
GoToMeeting Details
Goals
- To progress the SNOMED CT Template syntax
Attendees
- Chair: Linda Bird
- Project Group: Michael Lawley, Daniel Karlsson, Alejandro Lopez Osornio, Ed Cheetham, Rob Hausam, Harold Solbrig
Apologies
Agenda and Meeting Notes
Welcome, introductions and apologies STEP 1 - Convert SNOMED CT Expression Template into FHIR Structure Definition (for use as Target of Mapping) CONDITION RESOURCE [[ [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 ]] } SCT_ConditionTemplate: SNOMEDCTExpressionTemplate findingWithExplicitContext [1]: Coding group [1..2]: RelationshipGroupElement associatedFinding [1]: Coding group [0..1]: RelationshipGroupElement severity [0..1]: Coding findingSite [0..1]: Coding subjectRelationship [1]: Coding = 410604004 |Subject of record| temporalContext [1]: Coding findingContext [1]: 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 group [1..2]: RelationshipGroupElement associatedFinding [1]: CodeableConcept group [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_1a: for code where code in memberOf("http://snomed.info/sct?fhir_vs=isa/404684003") make target.findingWithExplicitContext = 413350009 |Finding with explicit context|, target.group as groupA then { rule_1aa: for code make groupA.associatedFinding = code rule_1ab: for code where severity 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_1aba: for source.severity as sev where severity in memberOf("http://snomed.info/sct?fhir_vs=isa/272141005") make groupB.severity = sev rule_1abb: for source.bodySite as bs where findingSite in memberOf("http://snomed.info/sct?fhir_vs=isa/123037004) make groupB.findingSite = bs } rule_1ac: for code make groupA.subjectRelationship = 410604004 |Subject of record| rule_1ad: for code make groupA.temporalContext = 410512000 |Current or specified time| rule_1ae: for source.clinicalStatus as cs, source.verificationStatus as vs make groupA.findingContext as fc then { rule_1aea: for vs make fc.code = translate ('status-to-findingContext-map', cs, vs) rule_1aeb: for vs make fc.system = "http://snomed.info/" rule_1aec: for vs make fc.display = "http://snomed.info/sct?lookupPT(coding.code, 900000000000509007) } } rule_1b: for code where code in memberOf("http://snomed.info/sct?fhir_vs=isa/413350009 ") make target.findingWithExplicitContext = code then { rule_1ba: } } What is the expected behaviour when a cardinality constraint in an Expression Template is not met? Outstanding question - Q4 Are there any other template requirements that we haven't yet considered for other use cases (e.g. for concept authoring)Linda Bird Agenda review Linda Bird Review agenda for today's meeting Recap of last meeting Linda Bird Outstanding question - Q1 Linda Bird Do we need to support naming of SNOMED CT Relationship Groups within the SNOMED CT Expression Template syntax? For example: [[ .... ]]: @RelationshipGroupName { .......} Outstanding question - Q2 Linda Bird What syntax should we use to define cardinality constraints? Outstanding question - Q3 Linda Bird Linda Bird Confirm next meeting date/time Linda Bird Next meeting to be held at 20:00 UTC on Wednesday 20th July
Meeting Files
2 Comments
Michael Lawley
Regarding the descendantOf (404684003 |Clinical finding|) style functions. These can currently be done using the fluentpath function memberOf and an implicit SNOMED CT ValueSet:
For example, memberOf("http://snomed.info/sct?fhir_vs=isa/404684003") would be the equivalent of << 404684003 |Clinical finding| – if it was important to exclude the "self" bit then you'd have to add in an extra clause to exclude that case.
For the preferredTerm (en-us, coding.code) function, I've raised a question about invoking $lookup from fluentpath, but I feel the need to point out that the SNOMED CT notion of preferredTerm is relative to a language reference set, not an ISO 639-x language code.
Linda Bird
Thanks for the information about using the memberOf function for subsumption testing. Where can I find a specification of what functions and URIs patterns (after the "?") are allowed?
With respect to the preferredTerm .... yes I am very aware that preferred terms are defined in each language refset. I just didn't have time to look up the language refset id at the time. I have corrected this now, with a 'made-up' syntax, until an official one becomes available.
Thanks again!