openEHR terminology and AQL

Post on 14-Apr-2017

164 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

Transcript

Dr Ian McNicoll

AQL, Terminology and Integration

Copyright 2012 Ocean Informatics

Model-driven

GUI

Model-driven

GUI

Model-driven

GUI

Model-driven tech

development

TDO

Model-driven tech

development

TDS

TDO

Model-driven tech

development

TDO Examples

How does this translate to Java code?

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

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

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

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

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

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'

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'

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'

Result: openEHR data

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

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

External terminologiesMedications / drug allergies

ICD-10, SNOMED-CT

Lab tests/analytes

Local admin terminologies Organisation types

Sex / gender

Clinical roles

Local admin terminologies

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”

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.

Termset-binding guidance

NHS Common User Interface (CUI)

Layered constraint with ‘termset filters

‘Get-out clause’ where constraint is too tight

Problem/diagnosis

Problem/diagnosis

openEHR and integration

In one sense openEHR nothing special!! transforms, transforms, transforms

But -

do it once for the whole openEHR community

Share the transforms

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!

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

HSPC

SMARTPlatforms APIScopes and permissions: OAuth2

Simple sign-in: OpenID Connect

Lightweight UI integration: HTML5 via Pluggable app framework

SMARTPlatforms APIScopes and permissions: OAuth2

Simple sign-in: OpenID Connect

Lightweight UI integration: HTML5 via Pluggable app framework

HL7 FHIR API

What is FHIR good at?Communication of information between systems with limited querying

Strengths

Developer friendly

Lightweight approach

Great documentation / community

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

Endeavour Health

top related