3. openEHR and integration
Making openEHR CDR connect to other systems …
Very easy to talk to other openEHR-based systems
Talking to non-openEHR systems
transforms, transforms, transforms
But do it once for the whole openEHR community
share the transforms as open-source and a reusable asset
4. Integration
User interface (the app itself)
Information model
Database
User interface (the app itself)
Information model
Database
User interface (the app itself)
Information model
Database
User interface (the app itself)
Information model
Database
National messages:
referral, prescription
emergency summary
Third-party apps
Technology-neutral datastore (CDR)
Vendor-neutral Information model
7. Template Data Schema
Simple xml schema matching
content of corresponding template
direct import of TDS-based XML
documents into openEHR system
easy target for integration to/from an
openEHR CDR
10. TDD/ Web templates
TDD = 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
12. What is FHIR good at?
Communication of information between systems
with limited querying
Strengths
Developer friendly
Lightweight approach
Great documentation / community
13. Where might FHIR be weaker?
Not designed for storing data
can work but will it scale up?
limited, hard-wired querying only
FHIR ‘resources’ will not work ‘out of the box’ in the real world
Need local extensions and profiles
not a ‘weakness’ as such but often overlooked
16. 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 <= $endperiod
AND c/context/start_time/value >= $startPeriod
AND pulse/data[at0001]/events[at0006|Anyevent]/
data[at0003]/items[at0004|Rate]/value/value < 60
AQL: Archetype Query Language
Model-
driven
querying
17. 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 <= $endperiod
AND c/context/start_time/value >= $startPeriod
AND pulse/data[at0001]/events[at0006|Anyevent]/
data[at0003]/items[at0004|Rate]/value/value < 60
AQL: Archetype Query Language
Model-
driven
querying
18. 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 <= $endperiod
AND c/context/start_time/value >= $startPeriod
AND pulse/data[at0001]/events[at0006|Anyevent]/
data[at0003]/items[at0004|Rate]/value/value < 60
AQL: Archetype Query Language
Model-
driven
querying
19. Example AQL
All Nursing reports during this admission for patient … with
a clinical synopsis record…
SELECT s as Synopsis, c/context/start_time as AdmissionDate
FROM EHR e[ehr_id/value='a4a3f0c8-254a-49a5-97dd-784d50c46b78']
CONTAINS Composition c[openEHR-EHR-COMPOSITION.report.v1]
CONTAINS Evaluation s[openEHR-EHR-EVALUATION.clinical_synopsis.v1]
WHERE c/name/value matches {'Nursing report’}
AND c/context/start_time >= '20110328T000000.000+0200'
AND c/context/start_time < '20120101T010000.000+0100'
20. Vital signs chart
SELECT
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'
21. Vital signs chart
SELECT
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'
23. Archetypes and terminology
Each archetypes 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
27. Termsets
Terminologies 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”
30. SMARTPlatforms
Pluggable Webapp
API
HL7 FHIR
Clinical Content
Exchange NHS API
Clinical Data
Repository
Detailed
Clinical Content Development
Clinical leadership PRSB
Terminology
Centre
NHS Digital
Non
openEHR
systems
Archetype+ SNOMED Clinical
Content definitions
31. Useful links
openEHR-based Form building/querying:
https://www.youtube.com/watch?v=pC6mUtqqK9U
HL7 FHIR: https://www.hl7.org/fhir
SMARTPlatforms: http://smarthealthit.org/
A clinical challenge: To lead or be led by health-
IT? (Linköping Nov 2015)
https://www.youtube.com/playlist?
list=PLHFGvRPKSumvhCrMbDrAWi2Kc0MrTHi9M
Clinical Decision Support: https://www.youtube.com/watch?
v=KgBtc19LXMk