260 likes | 357 Views
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
E N D
EverestBridging 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 • Started in 2007 to prototype the pan-Canadian EHRs blueprint • Use standards prescribed by Canada Health Infoway (HL7v3) • Quickly ran into implementation issues
Problem : Prototype the HIAL v3 Client Registry Shared Health Record v3 Provider Registry Longitudinal Record Services Location Registry HIAL v3 Clients
Integration using v3 System A System B Application Data Data Data Development RIM Graph RIM Graph ITS Graph ITS Graph Transport Transport
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
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
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
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
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
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); } }
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); } }
Platform Support ǂ - Not fully ported
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
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
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
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()); }
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)
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
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
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
More Info • http://everest.marc-hi.ca • SVN: • https://fisheye.marc-hi.ca/svn/Everest • https://fisheye.marc-hi.ca/svn/jEverest • UN: Guest