SMARTArchitecture and Application Development Overview
Nikolai [email protected] Software Developer, SMART (http://smartplatforms.org)
Vocabulary
Apps
Containers
API
Vocabulary
Containers
Apps
API
Vocabulary
Containers
Apps
API
An app runs against one container (at a time)
A container connects to multiple data sources
Apps and containers
SMART components
SMART components
SMART components
SMART components
Web standards!
Apps can run on separate servers,different implementation stacks
Inspired by Web APIsFacebook, OpenSocial, Google
UI Standards-based integration, flexibility
Authentication In-browser, server-to-server
Data Context, Medical Record Elements
Apps need (at least!)
Container UI
Container UI
Container UI
Container UI
Health IT systems have different authentication mechanisms!
How to keep apps agnostic?
Each container implements a consistentmechanism for delegating access: OAuth.
The app only needs to speak OAuth.
AuthenticationAuthentication
Contextual data (patient, physician) low-hanging fruit
Medical data (blood pressure, cholesterol)
existing standards? pragmatic approaches?
Apps need data!
SMART data
80/20 approach concentrate on common outpatient data
Payloads specified down to coding systems e.g. SNOMED for problems (we’re opinionated!)
Extensible representations in RDF iterative design, building models over time
Data elements
Sample SMART Problem (RDF)
<sp:Problem> <sp:problemName> <sp:CodedValue> <sp:code rdf:resource="http://www.ihtsdo.org/snomed-ct/concepts/161891005"/> <dcterms:title>Backache (finding)</dcterms:title> </sp:CodedValue> </sp:problemName> <sp:onset>2007-06-12</sp:onset> <sp:resolution>2007-08-01</sp:resolution> </sp:Problem>
Data principles
REST Paradigm:Each patient, data element has a URI
John Smith: http://smart-emr.hospital.org/records/123
John Smith’s atorvastatin: http://smart-emr.hospital.org/records/123/medications/456
URIs can map to underlying EMR IDs
Data principles
Consistent coding systems
Medications: RxNorm (SCD, SBD, Packs)Problems: SNOMED CTLabs: LOINC
Containers may need to translate from other terminologies, with provenance
Data principles
Consistent coding systemsExample of a translated LOINC code
Medications: RxNorm (SCD, SBD)Problems: SNOMED CTLabs: LOINC
Containers may need to translate from other terminologies, with provenance
<sp:labName> <sp:CodedValue> <sp:code rdf:resource="http://loinc.org/codes/2951-2"/> <dcterms:title>Serum sodium</dcterms:title> <sp:codeProvenance> <sp:CodeProvenance> <sp:sourceCode rdf:resource="http://local-emr/labcodes/01234" /> <dcterms:title>Random blood sodium level</dcterms:title> <sp:translationFidelity rdf:resource="http://smartplatforms.org/terms/code/fidelity#automated" /> </sp:CodeProvenance> </sp:codeProvenance> </sp:CodedValue> </sp:labName>
Data principles
Consistent coding systemsExample of a translated LOINC code
Medications: RxNorm (SCD, SBD)Problems: SNOMED CTLabs: LOINC
Containers may need to translate from other terminologies, with provenance
<sp:labName> <sp:CodedValue> <sp:code rdf:resource="http://loinc.org/codes/2951-2"/> <dcterms:title>Serum sodium</dcterms:title> <sp:codeProvenance> <sp:CodeProvenance> <sp:sourceCode rdf:resource="http://local-emr/labcodes/01234" /> <dcterms:title>Random blood sodium level</dcterms:title> <sp:translationFidelity rdf:resource="http://smartplatforms.org/terms/code/fidelity#automated" /> </sp:CodeProvenance> </sp:codeProvenance> </sp:CodedValue> </sp:labName>
source
Data principles
Consistent coding systemsExample of a translated LOINC code
Medications: RxNorm (SCD, SBD)Problems: SNOMED CTLabs: LOINC
Containers may need to translate from other terminologies, with provenance
<sp:labName> <sp:CodedValue> <sp:code rdf:resource="http://loinc.org/codes/2951-2"/> <dcterms:title>Serum sodium</dcterms:title> <sp:codeProvenance> <sp:CodeProvenance> <sp:sourceCode rdf:resource="http://local-emr/labcodes/01234" /> <dcterms:title>Random blood sodium level</dcterms:title> <sp:translationFidelity rdf:resource="http://smartplatforms.org/terms/code/fidelity#automated" /> </sp:CodeProvenance> </sp:codeProvenance> </sp:CodedValue> </sp:labName>
source
SMART translation
Data challenges
Different coding systems e.g. for medications, NDC RxNorm e.g. for problems, ICD9 SNOMED CT (?)
Different models e.g. is a problem event-at-a-time, or duration?
No models – can’t expose data you don’t have. (but some may be worth storing, e.g., fulfillments)
Architecture Summary
SMART Containers supply Apps with UI integration Authenticated API Access Data
Containers shoulder significant responsibility!
Data models are critical to enable app developers Keeping developer experience in mind Data need to be predictable, (relatively) simple