26
Everest Bridging Internal Assets and External Requirements Justin Fyfe March 2013 RIMBAA OOC

Everest Bridging Internal Assets and External Requirements

  • Upload
    merle

  • View
    24

  • Download
    0

Embed Size (px)

DESCRIPTION

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 - PowerPoint PPT Presentation

Citation preview

Everest Bridging Internal Assets and External Requirements

EverestBridging Internal Assets and External RequirementsJustin FyfeMarch 2013 RIMBAA OOCAgendaIntroductionEverest A 5,000 foot viewEverest in UseAs a serviceThrough the busTo the phone

IntroductionMohawk Applied Research in Health InformaticsStarted in 2007 to prototype the pan-Canadian EHRs blueprintUse standards prescribed by Canada Health Infoway (HL7v3)Quickly ran into implementation issuesProblem : Prototype the HIALHIALShared Health RecordLongitudinal Record ServicesClient RegistryProvider RegistryLocation Registryv3Clientsv3v3System BSystem AApplication DataDevelopment

Integration using v3DataRIM GraphITS GraphTransportDataRIM GraphITS GraphTransportThis is my paraphrased version of an HL7v3 architecture. Im sure most who are familiar with v3 have seen this in some form.

Basically, an application has canonical data (internal format) that it needs to communicate to a remote system using v3. The way a v3 system should work, is by processing the canonical data into the RIM (using a RIM graph), then map the RIM into a particular ITS (XML, EDI, etc), and send it over a specific transport. The process is reversed on the other side and the message is interpreted by the remote system.

If a software product needs to be updated to support v3, what development is needed if a structure only API is used.The area in purple would need to be developed in order properly communicate with another system. However, this looks like a lot of work. The company must develop the RIM graph, ITS graph and transport. Even worse, a company may shortcut the work and simply transform that internal structures to an ITS directly.

5IssuesHL7v3 complexXML instances are often scaryNuances in XML ITSDatatype behaviors (1 + NI)Existing tools (ca. 2007) were clunky4 month student turnaround

Everest, a 5000 foot viewEverestStarted in 2008Abstracting v3 XMLWell documented so students can learn as you typeImplements data-types and related rulesValidation / Transmission of instancesFirst public release in Fall 2009OptimizerFrom MIF to CodeMIF 2.1.xGPMRC#JavaHTMLXSL/XSDCORRepo..DLL.HTM.JAR.XSL / .XSDSDO*.vsd.DOC.XSDArchitecture of Everest.NET FrameworkGPMREverest Core LibraryConnectorsFormattersWCFMSMQXML ITS 1.0DT R1DT R2RMIM StructuresCDAUVNE2008CodeDomPurple = Everest functionalityRed = User Extensible / Auto-GeneratedSilver = Third PartyNote: Using term CodeDom loosely to describe the process of generating executable code at runtime10Application DataDevelopmentMARC-HI Everest

Canonical DataRIM GraphITS GraphTransportCanonical DataRIM GraphITS GraphTransportHow does it all fit?Application CodeCore LibraryRMIM FilesFormattersConnectorsApp DataRemember our HL7v3 system architecture. Well, how does all this API stuff fit into the architecture.

1. As you can see, the data that drives the application code is the canonical data. That already exists. The Application code that the developer writes (with the help of the RMIM and Data Type classes) translates to the RIM graph. The formatters are basically ITS graphs, and the Connectors represent transport.11C# - A Sample// Create instanceMCCI_IN000002CA hello = new MCCI_IN000002CA(){ Id = Guid.NewGuid(), CreationTime = DateTime.Now, AcceptAckCode = AcknowledgementCondition.Always, InteractionId = MCCI_IN000002CA.GetInteractionId(), ProfileId = MCCI_IN000002CA.GetProfileId(), Sender = new Sender() { Device = new Device1() { Id = new II("1.2.3.4.5") } }};// End Create Instanceusing (var formatter = new XmlIts1Formatter()){ formatter.ValidateConformance = false; formatter.GraphAides.Add(new DatatypeFormatter());

using (var connector = new WcfClientConnector("endpointname=cr")) { connector.Formatter = formatter; connector.Open(); connector.Send(hello); }}Java A SampleApplicationContext ctx = new ClassPathXmlApplicationContext("MyApp.xml");

// Create InstanceMCCI_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 Instancetry(XmlIts1Formatter formatter = new XmlIts1Formatter()){ formatter.setValidateConformance(false); formatter.getGraphAides().add(new DatatypeFormatter());

try(SpringClientConnector connector = new SpringClientConnector(ctx)) { connector.setConnectionString("templateBeanName=serviceTemplate;contextFile=MyApp.xml"); connector.setFormatter(formatter); connector.open(); connector.send(hello); }}Platform SupportJava.NETCompactData TypesStructure + BehaviorsBehaviors + StructureBehaviors + StructureSerializationDT R1XXXDT R2XXML ITS1ReflectionReflection + CodeDom + Pre-GeneratedReflection + Pre-GeneratedConnectivitySOAPSpringWCFWCFFilesXMQX - Not fully portedEverest in useHow we use EverestHIALShared Health RecordLongitudinal Record ServicesClient RegistryProvider RegistryLocation RegistryClientsAs a Service Provider:Everest is currently employed in .NET using WCF to implement application roles for a variety of servicesService Framework (using Everest)Everest Framework

Connector ArchitectureWCFMSMQFileFormatter ArchitecturepCS Maintenance ReleasesMessage Handling

Message CanonicalizationMessage ValidationData Services

Data Model Object Representation (Canonical data model for registry)

Terminology Services

Code ValidationCode ExpansionConcept Synonym Lookup

Auditing Services

Audit TrailAccountability TracingRegistration Services

Event RegistrationEvent QueryingMessage Persistence

Exec-Once Message TrackingLong term message persistenceQuery Services

Query RegistrationQuery ContinuationApplication Host

System Configuration ServiceOID RegistryCustodial SettingsLogging / TracingService Contracts

Persistence Services

Data Maintenance (Insert, Update, Get)Data ValidationDecision Support Services

WF Workflow HostUser Pluggable WorkflowsWF Trigger ManagementMicrosoft Platform OnlyPSA

Consent Policy EnforcementRecord MaskingServices / ApplicationsEverest supports a variety of HL7v3 standardsNormative Edition 2008Client RegistryIHE PIX/PDQ v3Canadian Edition MR2009Shared Health RecordLocation RegistryClient RegistryHosting HL7v3 In EverestWcfServerConnector connector = new WcfServerConnector();

connector.Formatter = new MARC.Everest.Formatters.XML.ITS1.Formatter();connector.Formatter.GraphAides.Add( new DatatypeFormatter());

connector.MessageAvailable += new EventHandler( connector_MessageAvailable );

try{ WcfConnectionStringBuilder builder = new WcfConnectionStringBuilder(); 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 EverestShared Health Record Reference Implementationhttp://shr.marc-hi.ca:8080/shrClient Registry Reference Implementationhttp://cr.marc-hi.ca:8080/crPIXv3 Manager / PDQv3 Supplier Reference Implementationhttp://cr.marc-hi.ca:8080/PIXManagerhttp://cr.marc-hi.ca:8080/PDQSupplierService Delivery Location Registry Reference Implementationhttp://sdlr.marc-hi.ca/v200812/Service.svc (early prototype version of Everest)

How we use EverestHIALShared Health RecordLongitudinal Record ServicesClient RegistryProvider RegistryLocation RegistryClientsIn the Service Bus:Everest and its tools are used to generate a RIM ITS canonical form for our HIAL reference implementation.XSL / .XSDRIM-ish ITSClientsEverest Pipeline ComponentEverest Pipeline ComponentBizTalk Server Receive Host

. . . COMP100075 . . . . . .

. . . COMP100075 . . . . . . How we use EverestHIALShared Health RecordLongitudinal Record ServicesClient RegistryProvider RegistryLocation RegistryClientsClients:Everest can be used by clients to access the jurisdictional infrastructure. Exposing the full v3 data modelHL7v3 on Surface Computers

HL7v3 on Mobile Devices

More Infohttp://everest.marc-hi.caSVN:https://fisheye.marc-hi.ca/svn/Everesthttps://fisheye.marc-hi.ca/svn/jEverestUN: Guest