SMART Architecture and Application Development Overview Nikolai Schwertner

advertisement
SMART
Architecture and Application Development
Overview
Nikolai Schwertner
nikolai.schwertner@childrens.harvard.edu
Lead Software Developer, SMART (http://smartplatforms.org)
Vocabulary
Apps
API
Containers
Vocabulary
Apps
API
Containers
Vocabulary
Apps
API
Containers
Apps and containers
An app runs against one container
(at a time)
A container connects to multiple
data sources
SMART components
SMART components
SMART components
SMART components
Inspired by Web APIs
Facebook, OpenSocial, Google
Web standards!
Apps can run on separate servers,
different implementation stacks
Apps need
(at least!)
UI
Standards-based integration, flexibility
Authentication
In-browser, server-to-server
Data
Context, Medical Record Elements
Container UI
Container UI
Container UI
Container UI
Authentication
Health IT systems have
different authentication mechanisms!
How to keep apps agnostic?
Each container implements a consistent
mechanism for delegating access: OAuth.
The app only needs to speak OAuth.
Apps need data!
Contextual data
(patient, physician)  low-hanging fruit
Medical data
(blood pressure, cholesterol)
existing standards?
pragmatic approaches?
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 CT
Labs: LOINC
Containers may need to translate from other
terminologies, with provenance
Data principles
Consistent coding systems
Example of a translated LOINC code
<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>
Medications: RxNorm (SCD, SBD)
Problems: SNOMED CT
Labs: LOINC
Containers may need to translate from other
terminologies, with provenance
Data principles
Consistent coding systems
Example of a translated LOINC code
<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>
Medications: RxNorm (SCD, SBD)
Problems: SNOMED CT
Labs: LOINC
source
Containers may need to translate from other
terminologies, with provenance
Data principles
Consistent coding systems
Example of a translated LOINC code
<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>
Medications: RxNorm
SBD)
SMART(SCD,
translation
Problems: SNOMED CT
Labs: LOINC
source
Containers may need to translate from other
terminologies, with provenance
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
Download