1 / 26

Everest Bridging Internal Assets and External Requirements

Everest Bridging Internal Assets and External Requirements. Justin Fyfe March 2013 RIMBAA OOC. Agenda. Introduction Everest – A 5,000 foot view Everest in Use As a service Through the bus To the phone. Introduction. Mohawk Applied Research in Health Informatics

merle
Download Presentation

Everest Bridging Internal Assets and External Requirements

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. EverestBridging Internal Assets and External Requirements Justin Fyfe March 2013 RIMBAA OOC

  2. Agenda • Introduction • Everest – A 5,000 foot view • Everest in Use • As a service • Through the bus • To the phone

  3. Introduction • Mohawk Applied Research in Health Informatics • Started in 2007 to prototype the pan-Canadian EHRs blueprint • Use standards prescribed by Canada Health Infoway (HL7v3) • Quickly ran into implementation issues

  4. Problem : Prototype the HIAL v3 Client Registry Shared Health Record v3 Provider Registry Longitudinal Record Services Location Registry HIAL v3 Clients

  5. Integration using v3 System A System B Application Data Data Data Development RIM Graph RIM Graph ITS Graph ITS Graph Transport Transport

  6. Issues • HL7v3 complex • XML instances are often scary • Nuances in XML ITS • Datatype behaviors (1 + NI) • Existing tools (ca. 2007) were clunky • 4 month student turnaround

  7. Everest, a 5000 foot view

  8. Everest • Started in 2008 • Abstracting v3 XML • Well documented so students can learn as you type • Implements data-types and related rules • Validation / Transmission of instances • First public release in Fall 2009

  9. From MIF to Code Optimizer HTML .HTM *.vsd C# .DLL SDO COR Repo. GPMR MIF 2.1.x .XSD Java .JAR XSL/XSD .XSL / .XSD .DOC

  10. Architecture of Everest CodeDom XML ITS 1.0 DT R1 DT R2 CDA UV NE2008 Connectors Formatters RMIM Structures WCF MSMQ Everest Core Library GPMR .NET Framework

  11. How does it all fit? App Data Application Data Core Library Canonical Data Canonical Data Application Code Development RIM Graph RIM Graph RMIM Files MARC-HI Everest ITS Graph ITS Graph Formatters Transport Transport Connectors

  12. C# - A Sample // Create instance MCCI_IN000002CA hello = newMCCI_IN000002CA() { Id = Guid.NewGuid(), CreationTime = DateTime.Now, AcceptAckCode = AcknowledgementCondition.Always, InteractionId = MCCI_IN000002CA.GetInteractionId(), ProfileId = MCCI_IN000002CA.GetProfileId(), Sender = newSender() { Device = newDevice1() { Id = newII("1.2.3.4.5") } } }; // End Create Instance using (var formatter = newXmlIts1Formatter()) { formatter.ValidateConformance = false; formatter.GraphAides.Add(newDatatypeFormatter()); using(varconnector = newWcfClientConnector("endpointname=cr")) { connector.Formatter = formatter; connector.Open(); connector.Send(hello); } }

  13. Java – A Sample ApplicationContextctx = newClassPathXmlApplicationContext("MyApp.xml"); // Create Instance MCCI_IN000002CA hello = new MCCI_IN000002CA(); hello.setId(UUID.randomUUID()); hello.setCreationTime(TS.now()); hello.setAcceptAckCode(AcknowledgementCondition.Always); hello.setInteractionId(MCCI_IN000002CA.defaultInteractionId()); hello.setProfileId(MCCI_IN000002CA.defaultProfileId()); hello.setSender(new Sender(new Device1())); hello.getSender().getDevice().setId(new II("1.2.3.4.5")); // End Create Instance try(XmlIts1Formatter formatter = new XmlIts1Formatter()) { formatter.setValidateConformance(false); formatter.getGraphAides().add(newDatatypeFormatter()); try(SpringClientConnectorconnector = newSpringClientConnector(ctx)) { connector.setConnectionString("templateBeanName=serviceTemplate;contextFile=MyApp.xml"); connector.setFormatter(formatter); connector.open(); connector.send(hello); } }

  14. Platform Support ǂ - Not fully ported

  15. Everest in use

  16. How we use Everest Client Registry Shared Health Record Provider Registry Longitudinal Record Services Location Registry As a Service Provider: Everest is currently employed in .NET using WCF to implement application roles for a variety of services HIAL Clients

  17. Service Framework (using Everest) Auditing Services • Audit Trail • Accountability Tracing Query Services • Query Registration • Query Continuation Message Persistence • Exec-Once Message Tracking • Long term message persistence Terminology Services • Code Validation • Code Expansion • Concept Synonym Lookup Persistence Services • Data Maintenance (Insert, Update, Get) • Data Validation PSA • Consent Policy Enforcement • Record Masking Registration Services • Event Registration • Event Querying Message Handling • Message Canonicalization • Message Validation Data Services • Data Model Object Representation (Canonical data model for registry) Everest Framework • Connector Architecture • WCF • MSMQ • File • Formatter Architecture • pCS Maintenance Releases Application Host • System Configuration Service • OID Registry • Custodial Settings • Logging / Tracing • Service Contracts Decision Support Services • WF Workflow Host • User Pluggable Workflows • WF Trigger Management • Microsoft Platform Only

  18. Services / Applications • Everest supports a variety of HL7v3 standards • Normative Edition 2008 • Client Registry • IHE PIX/PDQ v3 • Canadian Edition MR2009 • Shared Health Record • Location Registry • Client Registry

  19. Hosting HL7v3 In Everest WcfServerConnectorconnector = newWcfServerConnector(); connector.Formatter= new MARC.Everest.Formatters.XML.ITS1.Formatter(); connector.Formatter.GraphAides.Add( newDatatypeFormatter() ); connector.MessageAvailable+= newEventHandler<UnsolicitedDataEventArgs>( connector_MessageAvailable ); try { WcfConnectionStringBuilder builder = newWcfConnectionStringBuilder(); builder.ServiceName = "ApplicationService"; connector.ConnectionString = builder.GenerateConnectionString(); connector.Open(); connector.Start(); Console.WriteLine("Server started, press any key to close..."); Console.ReadKey(); connector.Stop(); connector.Close(); } catch (Exception e) { Console.WriteLine(e.ToString()); }

  20. Services using Everest • Shared Health Record Reference Implementation • http://shr.marc-hi.ca:8080/shr • Client Registry Reference Implementation • http://cr.marc-hi.ca:8080/cr • PIXv3 Manager / PDQv3 Supplier Reference Implementation • http://cr.marc-hi.ca:8080/PIXManager • http://cr.marc-hi.ca:8080/PDQSupplier • Service Delivery Location Registry Reference Implementation • http://sdlr.marc-hi.ca/v200812/Service.svc • (early prototype version of Everest)

  21. How we use Everest Client Registry Shared Health Record In the Service Bus: Everest and its tools are used to generate a RIM ITS canonical form for our HIAL reference implementation Provider Registry Longitudinal Record Services Location Registry HIAL Clients

  22. RIM-ish ITS <hl7:Messagetag=""xmlns:hl7="urn:hl7-org:v3"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> . . . <hl7:communicationFunctiontypeCode="SND"> <hl7:telecomspecializationType="TEL.URI"value="http://anonymous" /> <hl7:entityclassCode="DEV"determinerCode="INSTANCE"> <hl7:idspecializationType="II.BUS"root="1.3.6.1.4.1.33349.3.1.1.20.4"extension="MARC-W1-1"use="BUS" /> <hl7:namerepresentation="TXT"mediaType="text/plain"language="en-US">COMP100075</hl7:name> </hl7:entity> </hl7:communicationFunction> <hl7:controlActclassCode="CACT"moodCode="EVN"> . . . <hl7:participationtypeCode="RCT"contextControlCode="AP"> <hl7:roleclassCode="PAT"> <hl7:idroot="1.2.840.114350.1.13.99998.8734"extension="992724-001031-1984J" /> <hl7:playerclassCode="PSN"determinerCode="INSTANCE"> . . . </hl7:player> </hl7:role> </hl7:participation> <hl7:participationtypeCode="AUT"contextControlCode="AP"> <hl7:timevalue="20100517150000.000-0400" /> <REPC_IN000017CAITSVersion="XML_1.0"xmlns="urn:hl7-org:v3"> . . . <sendertypeCode="SND"> <telecomspecializationType="TEL.URI"value="http://anonymous"/> <deviceclassCode="DEV"determinerCode="INSTANCE"> <idspecializationType="II.BUS"root="1.3.6.1.4.1.33349.3.1.1.20.4"extension="MARC-W1-1"use="BUS"/> <namerepresentation="TXT"mediaType="text/plain"language="en-US">COMP100075</name> </device> </sender> <controlActEventclassCode="CACT"moodCode="EVN"> . . . <recordTargettypeCode="RCT"contextControlCode="AP"> <patient1classCode="PAT"> <idroot="1.2.840.114350.1.13.99998.8734"extension="992724-001031-1984J"/> <patientPersonclassCode="PSN"determinerCode="INSTANCE"> . . . </patientPerson> </patient1> </recordTarget> <authortypeCode="AUT"contextControlCode="AP"> <timevalue="20100517150000.000-0400"/> Everest Pipeline Component Everest Pipeline Component .XSL / .XSD BizTalk Server Receive Host Clients

  23. How we use Everest Client Registry Shared Health Record Clients: Everest can be used by clients to access the jurisdictional infrastructure. Exposing the full v3 data model Provider Registry Longitudinal Record Services Location Registry HIAL Clients

  24. HL7v3 on Surface Computers

  25. HL7v3 on Mobile Devices

  26. More Info • http://everest.marc-hi.ca • SVN: • https://fisheye.marc-hi.ca/svn/Everest • https://fisheye.marc-hi.ca/svn/jEverest • UN: Guest

More Related