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