openehr terminology and aql
TRANSCRIPT
![Page 1: openEHR terminology and AQL](https://reader030.vdocuments.us/reader030/viewer/2022021422/587fafc61a28ab107e8b53bf/html5/thumbnails/1.jpg)
Dr Ian McNicoll
AQL, Terminology and Integration
Copyright 2012 Ocean Informatics
![Page 2: openEHR terminology and AQL](https://reader030.vdocuments.us/reader030/viewer/2022021422/587fafc61a28ab107e8b53bf/html5/thumbnails/2.jpg)
Model-driven
GUI
![Page 3: openEHR terminology and AQL](https://reader030.vdocuments.us/reader030/viewer/2022021422/587fafc61a28ab107e8b53bf/html5/thumbnails/3.jpg)
Model-driven
GUI
![Page 4: openEHR terminology and AQL](https://reader030.vdocuments.us/reader030/viewer/2022021422/587fafc61a28ab107e8b53bf/html5/thumbnails/4.jpg)
Model-driven
GUI
![Page 5: openEHR terminology and AQL](https://reader030.vdocuments.us/reader030/viewer/2022021422/587fafc61a28ab107e8b53bf/html5/thumbnails/5.jpg)
Model-driven tech
development
![Page 6: openEHR terminology and AQL](https://reader030.vdocuments.us/reader030/viewer/2022021422/587fafc61a28ab107e8b53bf/html5/thumbnails/6.jpg)
TDO
Model-driven tech
development
![Page 7: openEHR terminology and AQL](https://reader030.vdocuments.us/reader030/viewer/2022021422/587fafc61a28ab107e8b53bf/html5/thumbnails/7.jpg)
TDS
TDO
Model-driven tech
development
![Page 8: openEHR terminology and AQL](https://reader030.vdocuments.us/reader030/viewer/2022021422/587fafc61a28ab107e8b53bf/html5/thumbnails/8.jpg)
TDO Examples
How does this translate to Java code?
![Page 9: openEHR terminology and AQL](https://reader030.vdocuments.us/reader030/viewer/2022021422/587fafc61a28ab107e8b53bf/html5/thumbnails/9.jpg)
TDSTDS = template data schema - is an xml schema for the corresponding template
Authoring of xml documents based on this schema is possible using standard tools (XMLSpy, Oxygen, etc)
Can also be used for form programming
![Page 10: openEHR terminology and AQL](https://reader030.vdocuments.us/reader030/viewer/2022021422/587fafc61a28ab107e8b53bf/html5/thumbnails/10.jpg)
TDD/ Web templatesTDD = template data document - an xml document which conforms to a specific TDS
An openEHR engine can convert TDDs to canonical OpenEHR Compositions or also directly commit a TDD
Web templates are more modern JSON based equivalent
![Page 11: openEHR terminology and AQL](https://reader030.vdocuments.us/reader030/viewer/2022021422/587fafc61a28ab107e8b53bf/html5/thumbnails/11.jpg)
SELECT pulse FROM EHR[ehr_id/value=$ehruid] CONTAINS COMPOSITION c
CONTAINS OBSERVATION hr[openEHR-EHR-OBSERVATION.heart_rate_pulse-zn.v1]
WHERE c/name/value='Encounter‘AND c/context/start_time/value <= $endperiodAND c/context/start_time/value >= $startPeriod
AND pulse/data[at0001]/events[at0006|Anyevent]/ data[at0003]/items[at0004|Rate]/value/value < 60
AQL
Model-driven
querying
![Page 12: openEHR terminology and AQL](https://reader030.vdocuments.us/reader030/viewer/2022021422/587fafc61a28ab107e8b53bf/html5/thumbnails/12.jpg)
SELECT pulse FROM EHR[ehr_id/value=$ehruid] CONTAINS COMPOSITION c
CONTAINS OBSERVATION hr[openEHR-EHR-OBSERVATION.heart_rate_pulse-zn.v1]
WHERE c/name/value='Encounter‘AND c/context/start_time/value <= $endperiodAND c/context/start_time/value >= $startPeriod
AND pulse/data[at0001]/events[at0006|Anyevent]/ data[at0003]/items[at0004|Rate]/value/value < 60
AQL
Model-driven
querying
![Page 13: openEHR terminology and AQL](https://reader030.vdocuments.us/reader030/viewer/2022021422/587fafc61a28ab107e8b53bf/html5/thumbnails/13.jpg)
SELECT pulse FROM EHR[ehr_id/value=$ehruid] CONTAINS COMPOSITION c
CONTAINS OBSERVATION hr[openEHR-EHR-OBSERVATION.heart_rate_pulse-zn.v1]
WHERE c/name/value='Encounter‘AND c/context/start_time/value <= $endperiodAND c/context/start_time/value >= $startPeriod
AND pulse/data[at0001]/events[at0006|Anyevent]/ data[at0003]/items[at0004|Rate]/value/value < 60
AQL
Model-driven
querying
![Page 14: openEHR terminology and AQL](https://reader030.vdocuments.us/reader030/viewer/2022021422/587fafc61a28ab107e8b53bf/html5/thumbnails/14.jpg)
Example AQLAll Nursing reports during this admission for patient … with a clinical synopsis record…
SELECT c FROM EHR[ehr_id/value='a4a3f0c8-254a-49a5-97dd-784d50c46b78']
CONTAINS Composition c[openEHR-EHR-COMPOSITION.encounter.v1] CONTAINS Evaluation e[openEHR-EHR- EVALUATION.clinical_synopsis.v1]
WHERE c/name/value matches {'Summary report'} AND c/context/start_time >= '20110328T000000.000+0200' AND c/context/start_time < '30000101T010000.000+0100'
![Page 15: openEHR terminology and AQL](https://reader030.vdocuments.us/reader030/viewer/2022021422/587fafc61a28ab107e8b53bf/html5/thumbnails/15.jpg)
Vital signs chartSELECT com0/context/start_time/value as START_DATE, obs1/data[at0001]/events[at0006]/data[at0003]/items[at0004]/value/magnitude as SYSTOLIC, obs1/data[at0001]/events[at0006]/data[at0003]/items[at0005]/value/magnitude as DIASTOLIC, obs3/data[at0002]/events[at0003]/data[at0001]/items[at0004]/value/magnitude as PULSE_RATE, obs4/data[at0001]/events[at0002]/data[at0003]/items[at0004]/value/magnitude as RESPIRATORY_RATE, obs6/data[at0001]/events[at0002]/data[at0003]/items[at0006]/value as SPO2_PROPORTION, obs7/data[at0002]/events[at0003]/data[at0001]/items[at0004]/value as BODY_TEMPERATURE_QUANTITY FROM EHR e[ehr_id/value='a4a3f0c8-254a-49a5-97dd-784d50c46b78'] CONTAINS COMPOSITION com0 [openEHR-EHR-COMPOSITION.encounter.v1] CONTAINS (OBSERVATION obs7 [openEHR-EHR-OBSERVATION.body_temperature-zn.v1] OR OBSERVATION obs3 [openEHR-EHR-OBSERVATION.heart_rate-pulse-zn.v1] OR OBSERVATION obs1 [openEHR-EHR-OBSERVATION.blood_pressure-zn.v1] OR OBSERVATION obs6 [openEHR-EHR-OBSERVATION.indirect_oximetry.v1] OR OBSERVATION obs4 [openEHR-EHR-OBSERVATION.respiration.v1])
WHERE com0/name/value matches {'Vital functions', 'Respiratory assessment'} AND com0/context/start_time >= '20110328T000000.000+0200' AND com0/context/start_time >= '30000101T000000.000+0100'
![Page 16: openEHR terminology and AQL](https://reader030.vdocuments.us/reader030/viewer/2022021422/587fafc61a28ab107e8b53bf/html5/thumbnails/16.jpg)
Vital signs chartSELECT com0/context/start_time/value as START_DATE, obs1/data[at0001]/events[at0006]/data[at0003]/items[at0004]/value/magnitude as SYSTOLIC, obs1/data[at0001]/events[at0006]/data[at0003]/items[at0005]/value/magnitude as DIASTOLIC, obs3/data[at0002]/events[at0003]/data[at0001]/items[at0004]/value/magnitude as PULSE_RATE, obs4/data[at0001]/events[at0002]/data[at0003]/items[at0004]/value/magnitude as RESPIRATORY_RATE, obs6/data[at0001]/events[at0002]/data[at0003]/items[at0006]/value as SPO2_PROPORTION, obs7/data[at0002]/events[at0003]/data[at0001]/items[at0004]/value as BODY_TEMPERATURE_QUANTITY FROM EHR e[ehr_id/value='a4a3f0c8-254a-49a5-97dd-784d50c46b78'] CONTAINS COMPOSITION com0 [openEHR-EHR-COMPOSITION.encounter.v1] CONTAINS (OBSERVATION obs7 [openEHR-EHR-OBSERVATION.body_temperature-zn.v1] OR OBSERVATION obs3 [openEHR-EHR-OBSERVATION.heart_rate-pulse-zn.v1] OR OBSERVATION obs1 [openEHR-EHR-OBSERVATION.blood_pressure-zn.v1] OR OBSERVATION obs6 [openEHR-EHR-OBSERVATION.indirect_oximetry.v1] OR OBSERVATION obs4 [openEHR-EHR-OBSERVATION.respiration.v1])
WHERE com0/name/value matches {'Vital functions', 'Respiratory assessment'} AND com0/context/start_time >= '20110328T000000.000+0200' AND com0/context/start_time >= '30000101T000000.000+0100'
![Page 17: openEHR terminology and AQL](https://reader030.vdocuments.us/reader030/viewer/2022021422/587fafc61a28ab107e8b53bf/html5/thumbnails/17.jpg)
Result: openEHR data
![Page 18: openEHR terminology and AQL](https://reader030.vdocuments.us/reader030/viewer/2022021422/587fafc61a28ab107e8b53bf/html5/thumbnails/18.jpg)
Archetypes and terminologyEach archetype has its own internal terminology “atCodes”
may be mapped to >= 1 external terminologies
The Archetype terminology provides “names” in name/value pairs
on internal valuesets
External terminology may be ‘bound’ to provide values for coded text nodes
![Page 19: openEHR terminology and AQL](https://reader030.vdocuments.us/reader030/viewer/2022021422/587fafc61a28ab107e8b53bf/html5/thumbnails/19.jpg)
![Page 20: openEHR terminology and AQL](https://reader030.vdocuments.us/reader030/viewer/2022021422/587fafc61a28ab107e8b53bf/html5/thumbnails/20.jpg)
![Page 21: openEHR terminology and AQL](https://reader030.vdocuments.us/reader030/viewer/2022021422/587fafc61a28ab107e8b53bf/html5/thumbnails/21.jpg)
![Page 22: openEHR terminology and AQL](https://reader030.vdocuments.us/reader030/viewer/2022021422/587fafc61a28ab107e8b53bf/html5/thumbnails/22.jpg)
Terminology binding patternsDirect node-binding
e.g ‘Urine colour’ node
Node name e.g. “Urine colour”
Automatically has unique internal term ‘at0007’
Can be ‘run-time’ coded by external term
Can be ‘run-time’ mapped to an external term
Node value e.g. ‘Red, yellow, purple’
Unique term provided by Internal valueset ‘at0009’
External term mapped to term from Internal valueset
External term used as the value
![Page 23: openEHR terminology and AQL](https://reader030.vdocuments.us/reader030/viewer/2022021422/587fafc61a28ab107e8b53bf/html5/thumbnails/23.jpg)
External terminologiesMedications / drug allergies
ICD-10, SNOMED-CT
Lab tests/analytes
Local admin terminologies Organisation types
Sex / gender
Clinical roles
![Page 24: openEHR terminology and AQL](https://reader030.vdocuments.us/reader030/viewer/2022021422/587fafc61a28ab107e8b53bf/html5/thumbnails/24.jpg)
Local admin terminologies
![Page 25: openEHR terminology and AQL](https://reader030.vdocuments.us/reader030/viewer/2022021422/587fafc61a28ab107e8b53bf/html5/thumbnails/25.jpg)
External terminologies -TermsetsTerminologies can be very large
‘Termsets’ define a small subset of the large terminology that can be handled by a drop-down GUI or other ‘browse’ facility
Sometimes called subsets or refsets
e.g.
RUPROC::“All Orthopaedic procedures”
ICD10::“Gynaecological diagnoses”
![Page 26: openEHR terminology and AQL](https://reader030.vdocuments.us/reader030/viewer/2022021422/587fafc61a28ab107e8b53bf/html5/thumbnails/26.jpg)
Termset-binding guidanceGenerally at Template-level
Layered constraint approach All procedures
Orthopaedic procedures
Knee specialist procedures
But generally have to provide option to override the constraint for unusual clinical situations
e.g. Non-orthopaedic procedure carried out in Orthopaedic department.
![Page 27: openEHR terminology and AQL](https://reader030.vdocuments.us/reader030/viewer/2022021422/587fafc61a28ab107e8b53bf/html5/thumbnails/27.jpg)
Termset-binding guidance
NHS Common User Interface (CUI)
Layered constraint with ‘termset filters
‘Get-out clause’ where constraint is too tight
![Page 28: openEHR terminology and AQL](https://reader030.vdocuments.us/reader030/viewer/2022021422/587fafc61a28ab107e8b53bf/html5/thumbnails/28.jpg)
Problem/diagnosis
![Page 29: openEHR terminology and AQL](https://reader030.vdocuments.us/reader030/viewer/2022021422/587fafc61a28ab107e8b53bf/html5/thumbnails/29.jpg)
Problem/diagnosis
![Page 30: openEHR terminology and AQL](https://reader030.vdocuments.us/reader030/viewer/2022021422/587fafc61a28ab107e8b53bf/html5/thumbnails/30.jpg)
![Page 31: openEHR terminology and AQL](https://reader030.vdocuments.us/reader030/viewer/2022021422/587fafc61a28ab107e8b53bf/html5/thumbnails/31.jpg)
openEHR and integration
In one sense openEHR nothing special!! transforms, transforms, transforms
But -
do it once for the whole openEHR community
Share the transforms
![Page 32: openEHR terminology and AQL](https://reader030.vdocuments.us/reader030/viewer/2022021422/587fafc61a28ab107e8b53bf/html5/thumbnails/32.jpg)
Integration targetsDICOM
Back office use mostly but well-established
HL7 v2: devices, labs, radiology, ADT
v3: limited usage
CDA: largely limited to Level 1-2
FHIR: Hype ++ but will move the world onwards!
![Page 33: openEHR terminology and AQL](https://reader030.vdocuments.us/reader030/viewer/2022021422/587fafc61a28ab107e8b53bf/html5/thumbnails/33.jpg)
SMARTPlatforms Pluggable Webapp
API
HL7 FHIR Clinical Content
Exchange NHS API
‘inVivo’ Datastore API
Detailed Clinical Content Development
Clinical leadership PRSB
Terminology CentreHSCIC
Non openEHR systems
Archetype+ SNOMED Clinical Content definitions
![Page 34: openEHR terminology and AQL](https://reader030.vdocuments.us/reader030/viewer/2022021422/587fafc61a28ab107e8b53bf/html5/thumbnails/34.jpg)
HSPC
![Page 35: openEHR terminology and AQL](https://reader030.vdocuments.us/reader030/viewer/2022021422/587fafc61a28ab107e8b53bf/html5/thumbnails/35.jpg)
SMARTPlatforms APIScopes and permissions: OAuth2
Simple sign-in: OpenID Connect
Lightweight UI integration: HTML5 via Pluggable app framework
![Page 36: openEHR terminology and AQL](https://reader030.vdocuments.us/reader030/viewer/2022021422/587fafc61a28ab107e8b53bf/html5/thumbnails/36.jpg)
SMARTPlatforms APIScopes and permissions: OAuth2
Simple sign-in: OpenID Connect
Lightweight UI integration: HTML5 via Pluggable app framework
![Page 37: openEHR terminology and AQL](https://reader030.vdocuments.us/reader030/viewer/2022021422/587fafc61a28ab107e8b53bf/html5/thumbnails/37.jpg)
HL7 FHIR API
![Page 38: openEHR terminology and AQL](https://reader030.vdocuments.us/reader030/viewer/2022021422/587fafc61a28ab107e8b53bf/html5/thumbnails/38.jpg)
What is FHIR good at?Communication of information between systems with limited querying
Strengths
Developer friendly
Lightweight approach
Great documentation / community
![Page 39: openEHR terminology and AQL](https://reader030.vdocuments.us/reader030/viewer/2022021422/587fafc61a28ab107e8b53bf/html5/thumbnails/39.jpg)
Where might FHIR be weaker?Not designed for persistence
can work but will it scale?
hard-wired querying only
Resources will not work ‘out of the box’ in the real world
Need local extensions and profiles
Version control / governance of the profiles
![Page 40: openEHR terminology and AQL](https://reader030.vdocuments.us/reader030/viewer/2022021422/587fafc61a28ab107e8b53bf/html5/thumbnails/40.jpg)
Endeavour Health
![Page 41: openEHR terminology and AQL](https://reader030.vdocuments.us/reader030/viewer/2022021422/587fafc61a28ab107e8b53bf/html5/thumbnails/41.jpg)