Welcome, apologies and agenda review | | Record attendees and apologies Review agenda for today's meeting |
Feedback from B2i on ECL | | Members of Descendants - Decision - To add ability to do "^ (expressionConstraint)", using brackets around the expressionConstraint unless it is a single refset concept
B2i proposes that the MemberOf function is allowed to be applied to a set of reference sets - ^(<<446609009|Simple type reference set|) /* Invalid */
For example, to select members of all GP refsets: |General Practice / Family Practice reference set| |GP/FP health issue reference set| |Adverse drug reactions reference set for GP/FP health issue| ... |GP/FP reason for encounter reference set| |Family history reference set for GP/FP reason for encounter| ... |
Constraints over Medication Strength - Decision - No action for now. To be revisited when the Default Extension Drugs Model is in place
B2i proposes that a new symbol is introduced to indicate a refinement of a relationship - for example: - < |Pharmaceutical / biologic product}:
{ |has active ingredient| = << |calcium carbonate|, ( |has basis of strength| = |calcium only|) ~ (|strength magnitude| >= #500), |strength unit| = |mg|)}
Alternative solutions Using the existing ":" refinement symbol - < |Pharmaceutical / biologic product}:
{ |has active ingredient| = << |calcium carbonate|, ( |has basis of strength| = |calcium only|) : (|strength magnitude| >= #500), |strength unit| = |mg|)}
Applying the strength as a refinement of the substance - < |Pharmaceutical / biologic product}:
{ |has active ingredient| = << |calcium carbonate|, |has basis of strength| = (|calcium only|: (|strength magnitude| >= #500), |strength unit| = |mg|)}
Flattening the relationships into a 'close-to-user' form - < |Pharmaceutical / biologic product}:
{ |has active ingredient| = << |calcium carbonate|, |has basis of strength| = |calcium only|, |strength magnitude| >= #500, |strength unit| = |mg|)}
DL examples ∃measurementGroup.( ∃hasActiveIngredient.CalciumCarbonate ⊓ ∃hasBOSS.CalciumOnly ⊓ ∃strength.( ∃#500.value ⊓ ∃unit.Mg ) ) ∃roleGroup.( ∃hasActiveIngredient.CalciumCarbonate ⊓ ∃hasBOSS.( CalciumOnly ⊓ ∃strength.( ∃#500.value ⊓ ∃unit.Mg ) ) )
|
Progress SNOMED CT Template Syntax | | See Template Syntax Specification - Suggestion to add a new chapter on 'Slot placement and template processing'
Please provide any other comments you have. |
Remove slots and replace slots - Remove slot: [[ 1..1 ]], [[ 1..1 @slotName ]]
- Replace slot: [[ +id (<< 138875005 |SNOMED CT concept|) ]], [[ +id ]], [[ + ]], [[ +id(<<138875005 |SNOMED CT concept) @slotName $valueReference ]]
- Example: CT of X
71388002 |Procedure| : [[1..1 @roleGroup1]] { 260686004 |Method| = 312251004 |Computed tomography imaging action|, 405813007 |Procedure site - Direct| = [[+id (<<442083009 |Anatomical or acquired body structure|)] @site] }
|
Replace slots - Type of replacement - Replace with single concept: [[ +id ]]
- Replace with any expression: [[ +scg ]]
- Replace with an expression constraint: [[ +ecl ]]
- Replace with a character string: [[ +str ]]
- Use cases include replacing comparison operators "=" and "!="
- Example 1: MRCM domainTemplateForPrecoordination (Finding with explicit context)
- [[+id(<< 243796009 |Situation with explicit context (situation)|: [0..0] 408730004 |Procedure context| = *, [0..0] 363589002 |Associated procedure| = *)]]:
[[0..*]] { [[1..*]] 408729009 |Finding context| = [[+id(<< 410514004 |Finding context value (qualifier value)|)]], [[1..*]] 408731000 |Temporal context| = [[+id(<< 410510008 |Temporal context value (qualifier value)|)]], [[0..*]] 246090004 |Associated finding| = [[+id(<< 404684003 |Clinical finding (finding)| OR << 272379006 |Event (event)|)]], [[0..*]] 408729009 |Finding context| = [[+id(<< 410514004 |Finding context value (qualifier value)|)]], [[0..*]] 408732007 |Subject relationship context| = [[+id(<< 125676002 |Person (person)|)]], [[0..*]] 408731000 |Temporal context| = [[+id(<< 410510008 |Temporal context value (qualifier value)|)]] }
- Example 2: MRCM domainTemplateForPostcoordination (Finding with explicit context)
- [[+id(<< 243796009 |Situation with explicit context (situation)|: [0..0] 408730004 |Procedure context| = *, [0..0] 363589002 |Associated procedure| = *)]]:
[[0..*]] { [[1..*]] 408729009 |Finding context| = [[+id(<< 410514004 |Finding context value (qualifier value)|)]], [[1..*]] 408731000 |Temporal context| = [[+scg(<< 410510008 |Temporal context value (qualifier value)|)]], [[0..*]] 246090004 |Associated finding| = [[+scg(<< 404684003 |Clinical finding (finding)| OR << 272379006 |Event (event)| OR << 363787002 |Observable entity (observable entity)| OR << 416698001 |Link assertion (link assertion)| OR << 71388002 |Procedure (procedure)|)]], [[0..*]] 408729009 |Finding context| = [[+scg(<< 410514004 |Finding context value (qualifier value)|)]], [[0..*]] 408732007 |Subject relationship context| = [[+scg(<< 125676002 |Person (person)|)]], [[0..*]] 408731000 |Temporal context| = [[+scg(<< 410510008 |Temporal context value (qualifier value)|)]] }
|
Cardinality - Cardinality of relationship group
- Pattern: [[ 1..* ]] { .. }
- Default operator between repeats: "," / "AND"
- Example: CT of X
71388002 |Procedure| : [[1..1 ]] { 260686004 |Method| = 312251004 |Computed tomography imaging action|, 405813007 |Procedure site - Direct| = [[+id (<<442083009 |Anatomical or acquired body structure|)] @site] }
- Cardinality of attribute value pair
- Pattern: [[ 1..* ]] 123345 |Attribute| = 234456 |Value|
- Default operator between repeats: "," / "AND"
- Example: CT of X
71388002 |Procedure| : { 260686004 |Method| = 312251004 |Computed tomography imaging action|, [[ 1..1 ]] 405813007 |Procedure site - Direct| = [[+id (<<442083009 |Anatomical or acquired body structure|)] @site] }
- Cardinality of focus concepts
- Pattern: [[ +() 1..* ]]
- Default operator between repeats: "+" / "AND"
- How would we achieve an operator of "OR" in an Expression Constraint? - e.g. [[+ecl 1..* ]] → A OR B OR C
- Example:
[[+id(<< 404684003 |Clinical finding|) 1..* ]] - Other types of cardinalities?
|
Other Topics raised by Ed- The fact that a template processor would need to 'clean-up' any left over characters, such as ":". I suggest that we try to document the steps that a template processor should follow to turn a template into an expression, constraint etc.
|
Confirm next meeting date/time | | Next meeting to be held at 20:00 UTC on Wednesday 1st February 2017 |
1 Comment
Linda Bird
Dear SLPG members,
As discussed at last week's SLPG meeting, I have updated the ECL (v1.2) to allow the memberOf function to be applied to expression constraints (in brackets).
Could all member of the SNOMED Languages Project Group please visit the WIP version of the ECL specification (htpp://snomed.org/-ecl ... note that the hyphen before the ecl takes you to the Work-In-Progress version, which is not yet public), and check the updates.
Please send me your comments as soon as possible (this week if you can). However, if you need longer, please just let me know and I'll wait for your feedback.
Here is a summary of the changes required (note: these are all related to the memberOf function):
- Section 1 (Introduction) - Updated history
- Section 3.2 (EC Requirements) - Updates to member Of requirement
- Section 4 (Logical Model) - Member of function applies to expression constraint, rather than focus concept
- Secton 5.1 (Brief Syntax) - simpleExpressionConstraint = [constraintOperator ws] [memberOf ws] (eclFocusConcept / "(" ws expressionConstraint ws ")")
- eclFocusConcept = conceptReference / wildCard
- Section 5.2 (Long Syntax) - same changes as in brief syntax
- Section 5.3 (Informative Comments) - Changes to simpleExpressionConstraint and eclFocusConcept descriptions
- Section 6.1 (Simple Expression Constraints) - Changes to memberOf examples and explanation:
Please note that it is also possible to apply the memberOf function to an expression constraint that returns a set of reference set concepts. When this is done, the expression constraint to which the memberOf function is applied, must be enclosed in parentheses. For example, the following expression constraint is satisfied by the set of concepts which are members of any subtype of 450973005 |GP/FP health issue reference set| :
The expression constraint above evaluates to the same set of concepts as applying the memberOf function to each individual subtype of 450973005 |GP/FP health issue reference set| and then taking the union of these sets. Therefore, when applied to the 20160731 international edition of SNOMED CT, the above expression constraint evaluates to the same set of concepts as the following expression constraint.
^ 450989008 |Allergies reference set for GP/FP health issue| OR
^ 450985002 |Disorders and diseases reference set for GP/FP health issue| OR
^ 450988000 |Family history reference set for GP/FP health issue| OR
^ 450991000 |Processes and procedures reference set for GP/FP health issue| OR
^ 450986001 |Results reference set for GP/FP health issue| OR
^ 450992007 |Social history reference set for GP/FP health issue| OR
^ 450984003 |Symptoms and signs reference set for GP/FP health issue|
Thanks!
Kind regards,
Linda.