+ All Categories
Home > Documents > FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and...

FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and...

Date post: 27-Oct-2019
Category:
Upload: others
View: 7 times
Download: 0 times
Share this document with a friend
159
FHIR for FHIR for Developers Rik Smithies © 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.
Transcript
Page 1: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

FHIR for FHIR for Developers

Rik Smithies

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Page 2: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

INTRODUCTION

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Page 3: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

Who am I?Who am I?

N Rik S ithi Name: Rik Smithies Company: Independent Consultant

(NProgram Ltd UK)(NProgram Ltd., UK) Background:

Technical Committee Chair, HL7 UK (and former Chair) HL7 International Co-Chair (Clinical Statement), Help

Desk moderator, eLearning course tutor Architect, analyst and software developer. 20 years in

healthcare IT

Contact: rik@nprogram co uk

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

[email protected] www.nprogram.co.uk

Page 4: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

Introduce ourselvesIntroduce ourselves

About your organization… HL7 (v2/v3) background? How did you hear about FHIR? Platform of choice ( NET Java Ruby )? Platform of choice (.NET, Java, Ruby, …)? Familiar with HTTP, XML, JSON, REST?

Persistence technologies used? Persistence technologies used?

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Page 5: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

Contents of this tutorialContents of this tutorial

Deconstructing FHIR FHIR RESTful service interface Beyond REST Searching Searching FHIR on the Wire

Distribution for developers Distribution for developers Building a FHIR server

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Page 6: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

What perspective?What perspective?

v3

2 FHIR

App

v2

PHRFHIR

Broker

Comm.Interface

FHIR DB

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Page 7: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

Looking at FHIR data modeling concepts from a software

DECONSTRUCTING FHIRLooking at FHIR data modeling concepts from a software engineering perspective

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Page 8: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

Resources (review!)Resources (review!)

“Resources” are: Small logically discrete units of exchange Defined behaviour and meaning Known identity / location Smallest unit of transaction “of interest” to healthcare

V2: Sort of like SegmentsV3 S t f lik CMET

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

V3: Sort of like CMETs

Page 9: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

Structure of a ResourceStructure of a Resource

Metadata

ResourceNarrative

El tElements

ExtensionsExtensions

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Page 10: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

Composition versus freference

FHIR makes composition and references explicit: References are in between Resources. No

context conduction across references – safe retrieval as individual resourcesretrieval as individual resources.

Composition is within a Resource: Components have no meaning outside resource, no identity, no g , y,separate access path except through resource

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Page 11: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

Composition of a ResourceComposition of a Resource

Resource Root

Resource Component

Simple & Complex elements (may beelements (may be repeating)

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Page 12: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

CompositionComposition

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Page 13: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

It’s all about combining resources . . .

http://lab hospitalA org/Observation/3ff27

Observation

http://lab.hospitalA.org/Observation/3ff27

DiagnosticDiagnosticDiagnosticPatient

ReportReportReportOrganization

http://lab.hospitalA.org/DiagRep/4445

Practitioner

http://hospitalA org/Practitioner/87

http://hospitalA.org/Organization/1

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

http://hospitalA.org/Practitioner/87

Page 14: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

Diagnostic

R t

Diagnostic

R t

Diagnostic

R tPatient

ReportReportReport

Practitioner

Observation

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Page 15: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

Resource ReferenceResource Reference

Example: part of DiagnosticReporta p e pa o ag os c epo

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Page 16: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

Resource AggregateResource Aggregate

“How do we know where an object made up of other objects begins

d d ?”

“How do we know where an object made up of other objects begins

d d ?”and ends?”and ends?”

“In any system with persistent storage“In any system with persistent storagey y p gof data, there must be a scope for a transaction that changes data and a way of

i t i i th i t f th d t ”

y y p gof data, there must be a scope for a transaction that changes data and a way of

i t i i th i t f th d t ”

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

16

maintaining the consistency of the data”maintaining the consistency of the data”

Page 17: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

“Business” identifiersBusiness identifiers

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Page 18: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

A Resource’s identityA Resource s identity

In fact: an URLresource type

http://server.org/fhir/Patient/1

endpoint identifierendpoint identifier

Note: This URL resolves to the current version of a resource

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Page 19: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

Resource metadataResource metadata

Patient

Metadata

Resource IdentitiesPatient

MRN 22234“Ewout Kramer”30-11-1972

Resource Identitieshttp://fhir.hl7.org/Patient/23E455A3Bhttp://fhir.hl7.org/Patient/23E455A3B/_history/4

L t d t d30 11 1972Amsterdam Last updated

2013-12-23T23:33:01+01:00

http://hl7 org/fhir/tag

http://hl7.org/fhir/tag/profilehttp://hl7.org/fhir/Profile/us-core

http://hl7.org/fhir/taghttp://example.org/fhir/Status#Test

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Page 20: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

The FHIR ElementsThe FHIR Elements

MetadataCompositeDatatypes(HumanName, Quantity Period

Constrained Types

(Quantity: Distance Count

ResourceNarrative

El t

Quantity, Period,Address, Identifier )

Distance, Count, Duration, Money)

use

Extensions

Elements

ExtensionsPrimitives

use

use Primitives(integer, boolean, string, instant)

DerivedPrimitives

(oid, uuid, code, id)

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Page 21: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

Start at the bottom: P i itiPrimitives

boolean xs:boolean Values can be either true or falseinteger xs:int A signed 32-bit integer

decimal xs:decimal A rational number. A true decimal, with inbuilt precision (e.g. Java BigDecimal)

base64Binary xs:base64Binary A stream of bytes base64 encodedbase64Binary xs:base64Binary A stream of bytes, base64 encoded

instant xs:dateTimeAn instant in time - known at least to the second and always includes a timezone.

string xs:string A sequence of Unicode charactersstring xs:string A sequence of Unicode characters. uri xs:anyURI A Uniform Resource Identifier Reference.

dateunion of xs:date, xs:gYearMonth A date, or partial date as used in date xs:gYearMonth, xs:gYear human communication. No time zone.

dateTime

union of xs:dateTime, xs:date,

A date, date-time or partial date as used in human communication. If hours and

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

dateTime ,xs:gYearMonth, xs:gYear

minutes are specified, a time zone must be populated.

Page 22: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

Derived primitivesDerived primitives

Using the ISO date/time with timezone “1951”, “1951-06” and “1951-06-04” “1951-06-04T10:57:34.0321+01” “1951-06-04T10:57:34.0321Z”

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Page 23: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

Derived primitivesDerived primitives

Based on uri(!): OID and UUID urn:oid:1.2.3.4.5 urn:uuid:a5afddf4-e880-459b-876e-e4591b0acc11

Based on string: code (string of characters, may contain single

spaces) - “4548-4”, “active”, “not known” id ([a-z0-9\-\.]{1,36})

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Page 24: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

Level up: C it D t tComposite Datatypes

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Page 25: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

DatatypesDatatypes

Let’s take a look at the “Data Types” section of the FHIR specification at

// / / /f /http://www.hl7.org/implement/standards/fhir/datatypes.html

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Page 26: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

Coded typesCoded types

Codes are defined in code systems

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Page 27: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

Coded typesCoded types

When used in a Resource, the modelers include Bindings

Bindings specify which codes can be used

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Page 28: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Page 29: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

Go to some interesting value sets to look at them

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Page 30: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

P bli ti t• Publication meta-data

• Concepts from 1 or• Concepts from 1 or more existing systemsy

• Additional concepts

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

30

Page 31: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

Level up: resourcesLevel up: resources

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Page 32: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

“Choice” propertiesChoice properties

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Page 33: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

ReferencesReferences

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Page 34: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

Quick look at extensionsQuick look at extensions

Metadata

ResourceNarrative

El t

Extensions

Elements

Extensions

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Page 35: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

ExtensionsExtensions

PatientMRN 22234“Ewout Kramer”

+ Haircolor BROWN

You can extend:30‐11‐1972Amsterdam

You can extend:- Resources- Elements of Resources- FHIR Datatypes

Organization“ACME Hospital”National Drive 322Orlando, FL

FHIR Datatypes

+ Taxoffice Id NLOB33233

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Page 36: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

Extending a multiple birthExtending a multiple birth

Key = location of formal definition

Value = value according to definition

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Page 37: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

Complex extensionsComplex extensions

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Page 38: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

Quick look at narrativeQuick look at narrative

Metadata

ResourceNarrative

El t

Extensions

Elements

Extensions

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Page 39: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

NarrativeNarrative

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Page 40: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

REST SERVICE INTERFACEHow FHIR uses RESTful principles to communicate Resources

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Page 41: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

ParadigmsParadigms

FHIR supports 4 interoperability paradigms

REST DocumentsREST

Messages Services

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Page 42: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

REST?REST?

“REpresentational State Transfer” Represent your data as “resources” Make “Resources” URI addressable Use HTTP to do CRUD operations Use HTTP to do CRUD operations Resources may be exchanged using

different representationsdifferent representations

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Page 43: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

Possibly distributedPossibly distributed…

FHIR server @ lab.hospitalA.org

Di ti

DiagnosticReport/4445

Observation

Observation/3ff27

FHIR server @ pat.registry.org

PatientPatient/223

subject DiagnosticReport

Observationsubject

FHIR server @ hospitalA.org

Practitioner/87Organization/1

Practitioner/

Organization

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Page 44: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

http://fhirblog.com/2014/01/24/modelling-encounters with fhir/

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

encounters-with-fhir/

Page 45: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

“Repository” model of h lthhealthcare

Lab SystemHospital System

CreateUpdate QueryCreate

Update

CreateUpdate Query Subscribe

Patient ObservationOrganization

PatientPatient Observation

ObservationDiagnosticReport

DiagnosticReport

DiagnosticReport

FHIR server

Organization Patient ObservationReportReportReport

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Page 46: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

Just a quick GETJust a quick GET

GET /fhi /P ti t/1 HTTP/1 1GET /fhir/Patient/1 HTTP/1.1

HTTP/1.1 200 OKC t t T li ti / l fhi h t tf 8

HTTP Verb + path

Content‐Type: application/xml+fhir;charset=utf‐8Content‐Length: 787Content‐Location: 

h //fhi f /fhi / i / / hi /http://fhir.furore.com/fhir/Patient/1/_history/1Last‐Modified: Tue, 29 May 2012 23:45:32 GMT

<?xml version="1 0" encoding="UTF 8"?>

UTF-8encoded

<?xml version="1.0" encoding="UTF-8"?><Patient xmlns="http://hl7.org/fhir"><identifier><label>SSN</label><identifier><system>http://hl7.org/fhir/sid/usssn</system><id>444222222</id></identifier></identifier><name><use>official</use><family>Everywoman</family><given>Eve</given></name><telecom><system>phone</system><value>555-555 2003</value><use>work</use></telecom><gender><system>http://hl7.org/fhir/sid/v2-0001</system><code>F</code></gender><birthDate>1973-05-31</birthDate><address><use>home</use><line>2222 Home Street</line></address><text><status>generated</status><div

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Street</line></address><text><status>generated</status><div xmlns="http://www.w3.org/1999/xhtml">Everywoman, Eve. SSN:444222222</div></text></Patient>

See the BOM?

Page 47: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

A Resource’s REST identityA Resource s REST identity

In fact: an URLresource type

http://server.org/fhir/Patient/1

endpoint identifierendpoint identifier

Note: This URL resolves to the current version of a resource

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Page 48: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

Remember metadata?Remember metadata?

Patient

Metadata

Resource IdentitiesPatient

MRN 22234“Ewout Kramer”30-11-1972

Resource Identitieshttp://fhir.hl7.org/Patient/23E455A3Bhttp://fhir.hl7.org/Patient/23E455A3B/_history/4

L t d t d30 11 1972Amsterdam Last updated

2013-12-23T23:33:01+01:00

http://hl7 org/fhir/tag

http://hl7.org/fhir/tag/profilehttp://hl7.org/fhir/Profile/us-core

http://hl7.org/fhir/taghttp://example.org/fhir/Status#Test

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Page 49: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

Tag metadataTag metadata

GET /fhir/Patient/1 HTTP/1.1

HTTP/1.1 200 OKContent‐Location: http://sever.om/fhir/Patient/1/_history/12Last‐Modified: Tue, 29 May 2012 23:45:32 GMTCategory: http://example.org/fhir/Status#Test; scheme=" http://hl7.org/fhir/tag"; label="Our test tag" 

http://hl7.org/fhir/tag A general tag

http://hl7.org/fhir/tag/profileA profile tag - a claim that the Resource conforms to the profile identified in the term

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

http://hl7.org/fhir/tag/security A security label

Page 50: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

Mapping (meta)data toHTTPHTTP

Resource dataR id

http body Resource id Resource version

Url Content-Location

Last update dateheader

Last-Modified header Tags Category header

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Page 51: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

One more look at the h dheaderGET /fhi /P ti t/1 HTTP/1 1GET /fhir/Patient/1 HTTP/1.1

HTTP/1.1 200 OKC t t T li ti / l fhi h t tf 8Content‐Type: application/xml+fhir;charset=utf‐8Content‐Length: 787

Content‐Location:  http://fhir.furore.com/fhir/Patient/1/_history/12Last‐Modified: Tue, 29 May 2012 23:45:32 GMT

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Page 52: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

For a specific versionFor a specific version…

We have the version-specific URL

http://server.org/fhir/ (continued)

base path

Patient/1/_history/4resource type

identifier version id

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Page 53: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

Support for versionsSupport for versions

/server org/fhir/Patient/33/ history/1233, v12 – 2012-12-04

33, v13 – 2012-12-05

33, v14 – 2012-12-08

/server.org/fhir/Patient/33/_history/12

/server.org/fhir/Patient/33/_history/13

/server.org/fhir/Patient/33/_history/14,

33, v15 – 2012-12-09/server.org/fhir/Patient/33/_history/15

/server.org/fhir/Patient/33

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Page 54: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

REST “representations”REST representations

GET /fhir/Patient/1?_format=json HTTP/1.1

HTTP/1.1 200 OKContent‐Type: application/json+fhir;charset=utf‐8Content‐Length: 787

GET /fhir/Patient/1 HTTP/1.1

Accept: application/json+fhirAccept: application/json+fhir

HTTP/1.1 200 OKContent Type: application/json+fhir;charset=utf 8

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Content‐Type: application/json+fhir;charset=utf‐8Content‐Length: 787

Page 55: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

QuestionQuestion

DO I REALLY HAVE TO IMPLEMENT VERSIONS?

NO, You are not required to keep history, and may return 410 (Gone) on a “vread” for any request for an older version than the current one!

DO I REALLY NEED TO SUPPORT THAT

than the current one!

DO I REALLY NEED TO SUPPORT THAT PRE-HISTORIC XML STUFF?

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Page 56: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

ConformanceConformance

• Which FHIR version?• Which Resources?• What search operations?• What search operations?• What formats?• Is this a test server?

• Who can I contact?• What’s the name of the software?

• DO YOU SUPPORT HISTORY?DO YOU SUPPORT HISTORY?• DO YOU SUPPORT XML/JSON?

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

http://www.hl7.org/fhir/conformance.htm

Page 57: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

REST in the specREST in the spec

Let’s look at these operations in theLet s look at these operations in the specification….

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Page 58: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

Mapping to verbsMapping to verbs

t 2 1 10create 2.1.10 The create interaction creates a new resource in a server assigned location. The create interaction is performed by an HTTP POST operation as shown:

POST [service‐url]/[resourcetype] (?_format=mimeType) 

read 2.1.6 The read interaction accesses the current contents of a resource. The interaction is performed by an HTTP GET operation as shown:

GET [service‐url]/[resourcetype]/{id} (?_format=mimeType) [ ] [ yp ] { } ( _ yp )

update 2.1.8 The update interaction creates a new current version for an existing resource or creates a new resource if no resource already exists for the given id. The update interaction is performed by an HTTP PUT operation as shown: performed by an HTTP PUT operation as shown:

PUT [service‐url]/[resourcetype]/{id} (?_format=mimeType) 

delete 2.1.9 The delete interaction removes an existing resource. The interaction is performed by an HTTP DELETE operation as shown:

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

HTTP DELETE operation as shown: DELETE [service‐url]/[resourcetype]/{id} 

Page 59: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

To create a resourceTo create a resource

You POST the contents to an url which indicates the resource type: E.g. http://server.org/fhir/Patient

Supply body’s format in Content-Type header

Server returns 201 (Created). Returns only the newly assigned version id

URL in the Location header.

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Page 60: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

To update a resourceTo update a resource

Use PUT on the resource’s URL, with the new contents in the body

Tell server the body’s format (xml/json) in the Content-Type header

Server returns 200 and the URL to new version in the Content-Location header.

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Page 61: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

Using PUT to createUsing PUT to create

Server might/might not allow you to PUT to an id that does not yet exist.

If it does: Server returns 201 and resource gets created at that location client determines resource’s id!

If it does not: server returns 405 (Method not allowed)

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Page 62: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

Version-aware updatesVersion aware updates

Server requires client to send Content-Location header with a version-specific URL

Server uses this to check whether you are updating the latest version.

Server will then return 409 (Conflict) if it has been updated by someone else in the meantime

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Page 63: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

What’s a ‘deleted’ R ?Resource?

Trying read operations will return in a 410 (Gone) result in stead of 404 (Not Found)

The resource will not be returned by the search operation.

You can “undelete” by doing an update with fresh content

Just a “marker” in a resource’s history

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Page 64: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

Version history -d l tideletions

/server org/fhir/Patient/33/ history/1233, v12 – 2012-12-04

33, v13 – 2012-12-05

33, v14 – 2012-12-08

/server.org/fhir/Patient/33/_history/12

/server.org/fhir/Patient/33/_history/14

/server.org/fhir/Patient/33/_history/13

,/server.org/fhir/Patient/33/_history/1533, v15 – 2012-12-09

33, v16 – 2012-12-10/server.org/fhir/Patient/33/_history/16

DELETION

/server.org/fhir/Patient/33

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Page 65: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

Version history - revivalVersion history revival

/server org/fhir/Patient/33/ history/1333, v13 – 2012-12-05

33, v14 – 2012-12-08/server.org/fhir/Patient/33/_history/14

/server.org/fhir/Patient/33/_history/13

/server.org/fhir/Patient/33/_history/1533, v15 – 2012-12-0933, 5

33, v16 – 2012-12-10/server.org/fhir/Patient/33/_history/16

33, v17 – 2012-12-11/server.org/fhir/Patient/33/_history/17

/server.org/fhir/Patient/33

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Page 66: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

How resources are made into classes in the supplied reference

RESOURCES IN CODEHow resources are made into classes in the supplied reference implementations

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Page 67: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

Reference i l t tiimplementations

- Contents- Model – classes generated from the spec

Parsers Parsers generated from the spec- Parsers – Parsers generated from the spec- Serializers – Serializers generated from the spec- FhirClientFhirClient- Validation (currently Java only)

- Java – Everything on the downloads page- .NET – NuGet “FHIR”, or GitHub “fhir-net-api”

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Page 68: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

Object ModelObject Model[FhirResource("DiagnosticReport")]public partial class DiagnosticReport : Resource{      

public Code<ObservationStatus> Status {…}

public Instant Issued {…}

public ResourceReference Subject {…}

public ResourceReference Performer {…}

public Identifier ReportId {… }

publicpublicList<DiagnosticReportRequestDetailComponent> 

RequestDetail { …}

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

68

Page 69: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

Parsing/Serializing using C#C#// C t fil b d d f X l// Create a file‐based reader for XmlXmlReader xr = XmlReader.Create(

new StreamReader(@"publish\observation‐example.xml"));

// Parse the Observation from the streamvar obs = (Observation)FhirParser.ParseResource(xr);

// Modify some fields of the observationobs.Status = Observation.ObservationStatus.Amended;obs.Value = new Quantity() { Value = 40, Units = "g" };

// Serialize the in‐memory observation to Jsonvar jsonText = FhirSerializer.SerializeResourceToJson(obs);

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Page 70: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

Parsing/Serializing using JJavaXmlParser xml new XmlParser();XmlParser xml = new XmlParser();

Observation obs = (Observation)xml.parse(newFileInputStream(“observation.xml"));

obs.setStatusSimple(ObservationStatus.amended);

Quantity newValue = new Quantity();Quantity newValue = new Quantity();newValue.setValueSimple(new BigDecimal(40));   newValue.setUnitsSimple("g");obs.setValue( newValue );

ByteArrayOutputStream bos = new ByteArrayOutputStream();JsonComposer comp = new JsonComposer();comp.compose(bos, obs, true);

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

comp.compose(bos, obs, true);String json = bos.toString("UTF8");

Page 71: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

Using FHIR Client in C#Using FHIR Client in C#

var client = new FhirClient( new Uri("http://fhir.com/svc/fhir"));

var patEntry = client.Read<Patient>("1");var pat = patEntry.Resource;ar restId patEntr Id;var restId = patEntry.Id;

var tags = patEntry.Tags;

pat.Name.Add(HumanName.ForFamily("Kramer").WithGiven("Ewout"));

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

client.Update<Patient>(patEntry);

Page 72: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

Using FHIR Client in JJava

FHIRCli t li t FHIRSi l Cli t()FHIRClient client = new FHIRSimpleClient();client.initialize("http://spark.furore.com/fhir");

AtomEntry<Patient> pe = client.read(Patient.class, "1");Patient p = pe.getResource();

HumanName hn = new HumanName();hn.getFamily().add(Factory.newString_("Kramer"));h tGi () dd(F t St i ("E t"))hn.getGiven().add(Factory.newString_("Ewout"));p.getName().add(hn);

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

client.update(Patient.class, p, "1");

Page 73: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

BUNDLESHow FHIR uses Atom to communicate sets of resources

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Page 74: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

Communicating listsCommunicating lists

We need to communicate lists of Resources Search result History Documents or messages Multiple-resource inserts (“batches”)

So, we need an industry-standard torepresent lists, and a place to put ourmetadata

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Page 75: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

BundleResourceBundleResource

Metadata

Metadata

Metadata

ResourceNarrative

El t

Bundle Resource

Elements

ExtensionsExtensions Resource

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Page 76: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

BundlesBundles

Atom RFC 4287 + Tombstones RFC 6721

Poll-based protocol for keeping up-to-date with newsfeeds (RSS and Atom)( )

You can “subscribe” to a FHIR feed and get You can subscribe to a FHIR feed and get updates

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Page 77: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

New reports in the mailNew reports in the mail

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

77

Page 78: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

An example BundleAn example Bundle

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Page 79: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

Resource metadataResource metadata

Patient

Metadata

Resource IdentityPatient

MRN 22234“Ewout Kramer”30-11-1972

Resource Identityhttp://fhir.hl7.org/Patient/23E455A3B

L t d t d30 11 1972Amsterdam Last updated

2013-12-23T23:33:01+01:00

http://hl7 org/fhir/tag

http://hl7.org/fhir/tag/profilehttp://hl7.org/fhir/Profile/us-core

http://hl7.org/fhir/taghttp://example.org/fhir/Status#Test

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Page 80: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

Resource EntryResource Entry

Resource idResource id

Last modified

Version-specific id

Tags

Version-specific id

Resource contentResource content

H d bl f

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Human-readable form,just like Resource.text

Page 81: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

Multiple versions of t ientries

Sameid!

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Page 82: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

Atom Tombstones -D l tiDeletions

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Page 83: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

Atom in JSONAtom in JSON

There’s not yet a way to render Atom in JSON, though there are initiatives, all ugly.

So, we had to (sorry) roll our own…. …very straightforward, single-purposey g , g p p Atom JSON solution (Note: MIME type is still application/json!) (Note: MIME type is still application/json!)

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Page 84: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

JSON Atom - ExampleJSON Atom Example

{{"title": "Search result","updated": "2012-09-20T12:04:45Z","id": "urn:uuid:50ea3e5e-b6a7-4f55-956c-caef491bbc08","link": [ { "rel": "self", "href": "http://server.org/fhir/Patient?format=json" } ],"entry": [

{ "title": "Resource of type Patient, with id = 1 and version = 1","link": [ { "rel": "self", "href": "http://server.org/fhir/Patient/1/_history/1" } ],"id": "http://fhir.furore.com/fhir/Patient/1","updated": "2012-05-29T23:45:32Z","published": "2012-09-20T12:04:47Z","author": [ { "name": "Grahame Grieve / HL7 publishing committee" } ],[ { p g } ]"content":

{ "Patient": { } }}

]

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

]}

Page 85: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

BundlesBundles

For both Java and C#, reference has custom-built Atom parser

For .NET, you could use the framework’s SyndicationFeed A bit more low-level No support for deleted-entries (even parse

bl )problems) Incompatible with WinRT (Win8 mobile apps)

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Page 86: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

Bundles in C#Bundles in C#

Abstraction on top of Atom parser Bundle = feed, BundleEntry = entry.Bundle result = new Bundle() { Title = "Demo bundle" };

result.Entries.Add(new ResourceEntry<Patient>() { LastUpdated=DateTimeOffset.Now, Content = new Patient() });

result.Entries.Add(new DeletedEntry() { Id = new Uri("http://..."), When = DateTime.Now });

var bundleXml = FhirSerializer.SerializeBundleToXml(result);

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Page 87: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

Bundles in JavaBundles in JavaAtomFeed feed = new AtomFeed();feed.setTitle("Demo bundle");

AtomEntry pat = new AtomEntry();pat.setUpdated(Calendar.getInstance());pat.setUpdated(Calendar.getInstance());pat.setResource(new Patient());feed.getEntryList().add(pat);

At E t d l At E t ()AtomEntry del = new AtomEntry();del.setUpdated(Calendar.getInstance());del.setDeleted(true);  del.setId("http://nu.nl/fhir");feed.getEntryList().add(del);g y () ( );

ByteArrayOutputStream bos = new ByteArrayOutputStream();AtomComposer comp = new AtomComposer();comp compose(bos feed true);

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

comp.compose(bos, feed, true);String xml = bos.toString("UTF8");

Page 88: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

Example: Keeping in sync

History of all resources on server http://server.org/fhir/_history

Hi t f ll ti t History of all patient resources on server http://server.org/fhir/Patient/_history

History of specific patient on server History of specific patient on server http://server.org/fhir/Patient/1/_history

A history of all changes: updates and deletions, ordered by newest first

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Limit with _since and _count

Page 89: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

SEARCH FUNCTIONALITYAnd finally, the last REST operation (for now):

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Page 90: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

Getting “all” patientsGetting all patients

// / i / i http://server.org/fhir/Patient

Always returns a paged feed Always returns a paged feed

Use _count to indicate number of results per pageg

Special case of the “real” search operation:

http://server.org/fhir/Patient/_search?name=evehttp://server.org/fhir/Patient?name=eve

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Page 91: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

Search (patient)Search (patient)

Each resource has a set of “standard” search operations, so not every element can be searched!:

Our last searchused this one

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Page 92: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

Combining parametersCombining parameters

Specifying multiple parameters finds resources matching all params “AND”

Parameters may list multiple values “OR” http://server.org/fhir

/Patient/search?birthdate=1972-11-30

&language=NL,FR

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Page 93: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

Search (Patient)Search (Patient)

Each search parameter has a ‘type’

Parameter

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Type

Page 94: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

Ok I get it or not?Ok I get it…or not?

http://server.org/fhir/Patient/ 406 hitshttp://server.org/fhir/Patient?gender=M 234 hitshttp://server.org/fhir/Patient?gender=F 167 hits

Total: 234 + 167 = 401

http://server.org/fhir/Patient/ 406 hitshttp://server.org/fhir/Patient?gender=M 234 hitshttp://server.org/fhir/Patient?gender=F 167 hitshttp://server.org/fhir/Patient?gender F 167 hitshttp://server.org/fhir/Patient?gender:missing=true 5 hits

Total: 234 + 167 + 5 = 406

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Page 95: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

Chained searchesChained searches

Patient has a search for “name”. Observation has a search for “subject” (the

id of the Patient, Group or Device) How do I find Observations for a patient, p ,

searching using his name?

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Page 96: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

2 queries in 12 queries in 1

You (as a client) don’t need to do separate operations, just one:

http://server.com/fhir/Observation/_search?subject.name=jim

fBut note: this still only works on the predefined search parameters. You cannot just use any

t f th

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

property of the resource.

Page 97: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

More optimizationsMore optimizations

Say we do: http://fhir.com/fhir/Observation?date=2014-01-20 We get back: a Bundle with 0..* “Observations”

Now, usually, wouldn’t we want the Patient information too? => Need to do “N” queries for the Observation’s “subject”

Quicker:?_include=Observation.subject

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Returns both Observations + Patients

Page 98: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

BEYOND RESTHow FHIR supports messages and documents

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Page 99: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

ParadigmsParadigms

FHIR supports 4 interoperability paradigms

REST Documents

Messages Services

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Page 100: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

Regardless of paradigmega d ess o pa ad gthe content is the same

FHIR

Receive a lab result in a message…

FHIR M FHIRRepository

FHIR MessageFHIR Document

Lab SystemNational

P k it i di h d t

NationalExchange

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

…Package it in a discharge summary document

Page 101: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.101

Page 102: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

The Document resourceThe Document resource

A single Resource, very often a List

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

g y

Page 103: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

FHIR DocumentFHIR Document

Dr. BernardPractitioner Patient Mary

DischargeSummary Patient Mary

Patient

Kidney Stones

SummaryComposition

PulseObservation

Kidney StonesConditionChief

Complaintsection

Vital Signslist BP

ObservationPhysical

section

entry

Discharge Medslist Diclofenac

MedicationPrescriptionMedications

section entry

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

TamsulosinMedicationPrescription

Page 104: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

Documents – are b dlbundles

Composition Resource <feed>Composition Resource

SectionSectionSectionSection

<entry><Composition />

</entry><entry>

AttesterAttesterMetadataMetadata

Observation Resource

<entry><Observation />

</entry><entry>

Device Resource

<Device /></entry><entry>

<Prescription />Prescription Resource

<Prescription /></entry><entry>

<Patient />

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Patient Resource </entry></feed>

Page 105: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

Tag as “Document”Tag as Document

This Bundle is a

D t

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Document

Page 106: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

Communicating d tdocuments

You can “drop” your document on http://server.org/fhir/Mailbox

No storage or disassembly is implied, your just posting a document in its entirety.

Servers can implement any specific functionality as required between trading partners when receiving such a document.

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Page 107: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

Communicating d tdocuments

You can store your document using http://server.org/fhir/Document

Storage, NO disassembly is implied, document (and signature) stays intact

Search is supported (you search on it’s Message header – Composition)

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Page 108: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

V3 and FHIR

CDA to FHIR FHIR Document

V3 and FHIR

CDA to FHIR Document bridge

FHIRFHIR

FHIRRepository

FHIR Document processor

DocumentsFHIR

Documents

FHIR

Hospital System A Note: Documents are compositions,

FHIRREST

• No update semantics• Context?• Wholeness?

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Page 109: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

MessageHeader RResource

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Page 110: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

Messages – are bundlesMessages are bundles

Message Resource <feed>Message Resourcesourcesource destinationdestination

feed<entry>

<MessageHeader /></entry><entr >

eventevent

Observation Resource

<entry><Observation />

</entry><entry>

Device Resource

y<Patient />

</entry><entry>

<Device />

Patient Resource

<Device /></entry>

</feed>

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Patient Resource

Page 111: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

Tag as “Message”Tag as Message

This Bundle is a

Message

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

g

Page 112: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

Sending messagesSending messages

Again, REST not necessary, but… There is an explicit REST endpoint:

http://server.org/fhir/Mailbox

No storage implied. Might be a router, g p g ,converted to v2, etc. etc.

The server can process them based on theThe server can process them based on the event code and return the response as another message (again a bundle).

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

g ( g )

Page 113: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

V2 and FHIR

V2 to FHIR bridge FHIR Message

V2 and FHIR

V2 to FHIR bridge

FHIRFHIR

FHIRRepository

FHIR Message processor

MessagesFHIR

Messages

FHIR

Hospital System

FHIRREST

Note: Messages are events,REST exposes a “repository” Model of data…

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Page 114: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

The Binary EndpointThe Binary Endpoint

http://server.org/fhir/Binary/ Accepts any kind of content Stores the content as is, along with the

content type provided by the HTTP headers.yp p y Acts just like the normal Resource endpoints

(but there is no search)(but there is no search)

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Page 115: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

Useful for AttachmentsUseful for Attachments

/Binary/23344

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Page 116: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

INSIDE THE FHIR DISTRIBUTION

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Page 117: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Page 118: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

Browsing the siteBrowsing the site

REST API Data Types XML & JSON Codes / Terminologies Codes / Terminologies Resource List

Stack Overflow Stack Overflow Public Test servers

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Page 119: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

The FHIR distributionThe FHIR distribution

Under Implementation-Support-Downloads: The XSD schema’s / schematrons The Java / C# / Delphi zips (model, serializers,

parsers, etc., both code & binary)All l + j l All xml + json examples

Full spec for offline reading (always have your FHIR with you)FHIR with you)

Note! NET implementation has moved to GitHub

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Note! .NET implementation has moved to GitHub, distribution by NuGet (.NET) and Maven (Java)

Page 120: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

In the FHIR SVNIn the FHIR SVN

All you need to build FHIR (/build) All presentations (/presentations) Source of the publication process

(/build/tools, we use Eclipse + Java 1.6)( , p ) Archived older versions of FHIR (/archive)

You can download only the /buildTh bli h b t & it

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Then run publish.bat & wait

Page 121: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

The FHIR SVNThe FHIR SVN

The “build” SVN tree, the “full” SVN tree http://gforge.hl7.org/svn/fhir User ‘anonymous’, blank password

Note: you have to run the publisher to beNote: you have to run the publisher to be able to build the C# and Delphi source. Without that…they won’t compile!

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

y p

Page 122: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

“Source” of FHIRSource of FHIR

Straight from the HL7 SVN “code” repository

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Straight from the HL7 SVN code repositoryat gforge.hl7.org

Page 123: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

Publication processPublication process

.INIexamples

Publication tool(org.hl7.fhir.tools.jar)

Java, C#,Website Examples ResourceDelphi

eCoreDefinitions.xmlValidationSchema’s DictXml Resource

profiles

UML

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

p

Page 124: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

Generator writers!Generator writers!

There’s a file called eCoreDefinitions.xml that the C# generator runs of. It has all d t il f th d fi itidetails from the definitions

There are Profiles for each resource, basically describing the “unconstrained” resources

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Page 125: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

PROFILES AND Short introduction to

VALIDATION

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Page 126: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

The need for ProfilesThe need for Profiles

Many different contexts in healthcare, but a single set of Resources

Need to be able to describe restrictions based on use and context

Allow for these usage statements to: Authored in a structured manner Published in a repository Used as the basis for validation, code, report and UI

ti

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

generation.

Page 127: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

Constraining cardinalityConstraining cardinality

Limit cardinality to 1..2(e.g. to at maximum your organizations’ identifier + the 1 2 national one)1..2

1..1

Li it t j t 1 (i t d f 0 *)0..0

Limit names to just 1 (instead of 0..*)

Forbid any telecom elements

Note: something that’s mandatory in the core definition cannot be made optional in a profile

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Page 128: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

Limit value domainsLimit value domains

If deceased is gi en it m st beIf deceased is given, it must be a dateTime, not a boolean

Use our national codes for MaritalStatus

=“true”

MaritalStatus

Use another profiled Resource

OrganizationNL

Fi l O l ll “ ti ”

= true Use another profiled Resource

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Fix value: Only allow “active” Patients

Page 129: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

Tagging a ResourceTagging a Resource

P ti tPatient

MRN 22234“Ewout Kramer”30 11 1972

http://hl7.org/fhir/tag/security“I’m a VIP - My information cannot yet be disclosed”

30-11-1972Amsterdam

http://hl7.org/fhir/tag“Thi i TEST d t ! D ’t !”“This is TEST data! Don’t use!”

http://hl7.org/fhir/tag/profile“I’m a Patient as defined in the Norwegian Profile – seehttp://hl7.no/Profiles/patient-no”

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Page 130: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

ValidationValidation

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Page 131: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

ValidationValidation

When receiving an XML resource 1. Validate using schema 2. Run schematrons

When receiving JSON 1. Parse the JSON 2. Serialize to XML 3. Validate using schema 4. Run schematrons

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

There’s a validation pack for Java

Page 132: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

(Distributed) validation(Distributed) validation

App’s server

Store &Validate

Country validation serverProfile X

Profile Y

Profile Y

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Page 133: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

Operation OutcomeOperation Outcome

When something goes wrong….return the OperationOutcome Resource!

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Page 134: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

BUILDING A FHIR SERVERFHIR in practice

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Page 135: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

Some possible usesSome possible uses

v3

2 FHIR

App

v2

PHRFHIR

Broker

Comm.Interface

FHIR DB

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Page 136: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

Repository modelRepository model

HIS LIMS PACS SystemX Gateway

FHIRFHIR FHIRFHIRFHIR

Vendor Neutral Repository

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Page 137: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

Overview of a serverOverview of a server

HTTP / REST interface Encoding/decoding, param validation, syntax validationImplement service

Fhir Service

Implement service operations as described in spec

Indexer / Search Storage

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Page 138: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

From wire to storeFrom wire to store

JSON/XM JSON/XMLREST interface JSON/XML JSON/XML JSON/XML

FHIR Parser FHIR Parser FHIR Parser

Fhir Service POCO/POJO POCO/POJO POCO/POJO

O-R Map Serialize Serialize

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

StorageDBMS

NoSql(Xml/Json) DBMS

Page 139: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

Briefest intro to JSONBriefest intro to JSON

JSON (“JavaScript Object Notation”): it’s JavaScript, not markup!

{{ “Country" : {

“name" : “the Netherlands",“population" : 16696000,“popDensity” : 447.9

}}

t l(“({ })”) var report = eval(“({…})”);alert(report.LabReport.status);

Very easy parsing for JavaScript clients But

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Very easy parsing for JavaScript clients. But actually, use JSON.parse() instead ;-)

Page 140: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

Xml and JSON are diff tdifferentX l JSONXml<XXX xmlns=“urn:foo”>

<B a=“c” />

JSON{ “B”: { “a” : “c” },

“C”: [ “One” “Two” ]<B a= c /><C>One</C><C>Two</C>

C : [ One , Two ],“D” : “One”,“div” : {

<D>One</D><div>Not <b>so</b>easy</div>

“text-before”:“Not ”,b:“so”,“tekst-after”:“easy”}

</XXX> }

• How to retain namespaces?• How do you identify attributes?

• Distinguish single elements from lists with one element?

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.14

• How do you identify attributes?• Bridge difference in datatypes?

from lists with one element?• Mixed content?

Page 141: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

Xml and Json in FHIRXml and Json in FHIR

code.coding is 0..*

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Page 142: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

Xml and Json in FHIRXml and Json in FHIR

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Page 143: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

Handling bothHandling both

You need “meta” knowledge of the definition to distinguish lists / attributes

The Java/C# API’s can easily interconvert Digital Signatures (in json?) are a problem g g ( j ) p

when converting store the original JAXB / XmlSerializer / DataContract wouldJAXB / XmlSerializer / DataContract would

need extensive customization / additional @annotation / [attributes]. Contact us!

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

@ [ ]

Page 144: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

Document-oriented storeDocument oriented store

A document-oriented store can store Resources as a “whole” document.

E.g. MongoDb stores documents in JSON:

t { th “ ik ”post = { author: “mike”, text: “my blog post...”, tags: [“mongodb”,“intro”] };

db.posts.save( post );

db.posts.find( { author: “mike” } );db posts find() sort({date: 1}) limit(10);

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

db.posts.find().sort({date: -1}).limit(10);

Page 145: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Page 146: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

No (sql) transactionsNo (sql) transactions

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Page 147: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

Batch: needs transactionsBatch: needs transactions

TransactionThe transaction interaction submits a set of resources tob d t d t d d l t d th Thibe updated, created or deleted on the server. Thisinteraction allows multiple resources to be updated/createdin a single transaction. The interaction is performed by anHTTP POST command as shown:HTTP POST command as shown:

POST [service-url] (? format=mimeType)_ yp

The content of the post submission is a resource bundle.

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

p

Page 148: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

Storing resourcesStoring resources

FHIR POCO ModelFHIR POCO Model

MongoAt E t

Patient ObservationBinaryAtom Entry(stored json)

Resource

Amazon S3 Metadata

Resource

BinaryOriginal

(json or xml)

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Page 149: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

RDBMS: BLOB + IndexRDBMS: BLOB + Index

Id ResourceId VersionId LastUpdate Contents1 1 1 2012-12-19 <Patient …>

2 1 2 2012-12-20 <Patient …>

3 2 1 2012 12 20 <Observation >3 2 1 2012-12-20 <Observation …>

Id Param Value System2 Patient.Name “Ewout” Separate tables

for current and2 Patient.DoB “1972-11-30”3 Obs.Code “234332” SNOMED

for current and history?

Type VersionIdHighPatient 2

Lab 3

Need to index only latest version!

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

version!

Page 150: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

Both implementations use aBoth implementations use a separately maintained index for search?search?

Yes, here’s why…

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Page 151: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

Predictable searchPredictable search

Each resource has a fixed set of search parameters:Each resource has a fixed set of search parameters:

Searched element

Parameter

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Type

Page 152: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

Types of parametersTypes of parameters

integer Search parameter must be a simple whole number.string Search parameter is a simple string, like a name part. Search is case-

insensitive and accent-insensitive. May match just the start of a string.date Search for an exact match on a date (parameters look like 1956-05-date Search for an exact match on a date (parameters look like 1956 05

27T12:34:12+04:00 or shorter)token Search parameter on a coded element or identifier. May be used to search

through the text, displayname, code and code/codesystem (for codes) and label, system and key (for identifier).

reference A pair of resource type and resource id, separated by "/". Matches when the resource reference resolves to a resource of the given type and id.

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Note: you need to escape the query-string!!

Page 153: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

Partial/combined matchPartial/combined match

The search parameter description shows that the match certainly isn’t always exact, and can even combine the contents of several elements:

Name / Type Descriptionaddress : string an address in any kind of address/part of the patientfamily : string a portion of the family name of the patienty g p y pgiven : string a portion of the given name of the patientname : string a portion of either family or given name of the patientphonetic : string a portion of either family or given name using some kind of

phonetic matching algorithmtelecom : string the value in any kind of telecom details of the patient

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Page 154: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

Prepare your data!Prepare your data!

/ ?patient/search?name=johan&

fi &name=grafin&telecom=5552004

“Groom” – prepare forsearching

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Page 155: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

THE END IS NEAR…

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Page 156: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

Balloting plansBalloting plans

Fi t D ft St d d f T i l U b ll t (DSTU) l t First Draft Standard for Trial Use ballot (DSTU) complete FHIR is now published as a DSTU Will provide a semi-stable platform for implementers while still p p p

allowing non-backward-compatible change for Normative version if implementation experience dictates

Additional DSTU versions roughly annually to make fixes, g y y ,introduce new resources

Normative is around 3 years out We want *lots* of implementation experience before committing to We want lots of implementation experience before committing to

backward compatibility

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Page 157: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

Next Steps for youNext Steps for you

R d th htt //hl7 /fhi Read the spec: http://hl7.org/fhir Try implementing it

Come to a (European?) Connectathon! Come to a (European?) Connectathon!

[email protected] [email protected] #FHIR Implementor’s Skype Channel FHIR Developer Days (November 24 – 26), Amsterdam StackOverflow: hl7 fhir tag

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Page 158: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

International HL7 FHIR Developer DaysN b 24 26 2014 i A t dNovember 24-26, 2014 in Amsterdam

Education14 t t i l 14 tutorials pick & choose

Connectathon Connectathon Meet fellow developers Put FHIR to the test

Networking FHIR experts and authors on hand

http://fhir.furore.com/devdays

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.

Page 159: FHIR for Developers - interopsante.org · Composition versus reference FHIR makes composition and references explicit: References are in between Resources. No context conduction across

QUESTIONS?Q

© 2014 HL7 ® International. Licensed under Creative Commons. HL7 & Health Level Seven are registered trademarks of Health Level Seven International. Reg. U.S. TM Office.


Recommended