MDWS Executive Summary.2

Report
(MDWS)
Presentation to World VistA
January 18, 2013
Joel Mewton
U.S. Department of Veterans Affairs (VA)
VETERANS HEALTH ADMINISTRATION
Jatlh rap hol…*
•
•
•
•
•
•
•
•
•
•
•
•
TLA – Three Letter Acronym. Irony intended. The VA loves to toss these around. Just bracing you…
MDWS – Pronounced “meadows”. VA product for accessing disparate data sources.
VistA – What we call our MUMPS databases. MDWS can and does communicate with other data sources. It’s built to. We’re
going to focus on VistA for obvious reasons.
Web Services – Industry standard, widely supported technology for exchanging data between systems. MDWS is made up of
SOAP web services.
SOAP – Simple Object Access Protocol. One of the two primary ways web services are exposed. MDWS is currently SOAP
web services.
REST – Representational State Transfer. The second of those ways.
RPC – Remote Procedure Call. This is the way CPRS communicates with VistA. The CPRS RPC broker is written in Delphi.
MUMPS – Contagious disease. Also, the language of VistA. Origins (of the programming language) date to the 70s! We’ll
probably just refer to this as “M”.
Local Site – We use this terminology to refer to a user’s home site. Typically the user will have A/V (access and verify –
basically a fancy label for username/password) codes at this site.
Remote Site – Any of the other 130ish+ sites that is not a user’s home site. We typically refer to this in the context of a
patient. So, a patient might have some records at a user’s home site while that same patient might have also visited a
number of other VA hospitals and have records at those remote sites. Providers obviously have a need to view this remote
data when making decisions about patient care.
Design patterns – The way wise geeks write software. Take a look at a recurring task/problem and try to find an extensible
and flexible way to tackle it.
Business Rule – Fancy way of mentioning the way something should work. Concrete VA example: patient sensitivity bulletins.
E.g. if a patient is also a VA employee and attempts to view his/her own records, the RPC “DG SENSITIVE RECORD BULLETIN”
should be executed with the appropriate level argument. MDWS handles things like this automatically.
VETERANS HEALTH ADMINISTRATION
* Klingon for: “Speaking the same language”. I am not a Trekkie.
In the beginning…
CPRS
•
•
•
•
•
•
RPC
Broker
RPC
VistA
Some smart docs in Massachusetts created MUMPS. They saw that it was good.
Ok, too far back. Our story really starts with with CPRS and the RPC broker. CPRS is your
classic “two-tier” application – a GUI that talks to a database. The GUI is the CPRS user
interface and the database is VistA. Note there’s only one VistA here.
The RPC broker is fast! RPCs are basically M routines exposed for remote use via the REMOTE
PROCEDURE file.
Works great for what it is. Used thousands of times every day across VA. Not so great for
reusability…
Remember that leading comment about “one VistA” – CPRS is inherently a single site
application. While the capability does exist to retrieve data from remote sites, it’s quite
kludgy and non-intuitive. For example, to view remote data a user must know to click the
“Reports” tab in CPRS…
That RPC broker is only available as a COM object.
VETERANS HEALTH ADMINISTRATION
RPCs are the bees knees
•
•
•
•
•
Remember: RPCs are native M code. In most cases, they’re written for speed. That makes
them double snappy.
RPCs aren’t just data. VA has years and decades even of business intelligence built in to the
RPCs.
RPCs were and still are ahead of their time. Much of the industry is still stuck with direct
database calls.
Most MDWS calls use the same RPCs that CPRS uses. This means that performance is similar
and the results are usually identical. This makes transitioning to a new app straightforward
for the users. Someone once told me that’s who we write applications for, you know.
VA providers are very familiar with CPRS. Most conversations for new MDWS functionality or
MDWS based tools start with CPRS.
VETERANS HEALTH ADMINISTRATION
And Joe said, “Let there be VistAWeb”
VistA
Web
•
•
•
•
•
MDO
RPC
VistA
VistA
VistA
Who’s Joe, you ask? Joe Gillon. Original author of MDWS and VistAWeb. The man, if you will.
Currently retired and not missing VA. Ok, on with the story…
VistAWeb – A web based GUI for accessing patient data. VistAWeb has its own version of the
RPC broker but written in C#. The underlying communication appears the same to a VistA site
though – it’s all RPCs coming in.
VistAWeb is inherently multi-site. Want a patient’s meds? You automatically get them from
every site the patient has visited – local and remote. All in an integrated view.
VistAWeb communicates directly with remote sites. The same RPCs that are executed at the
local site are executed remotely.
MDO is available as a DLL.
VETERANS HEALTH ADMINISTRATION
MDO
•
•
•
•
MDO = Medical Domain Objects.
Based on the “data access object” (DAO)
design pattern.
We don’t want client applications of
MDO to care about the domain model of
each crazy little disparate data source
and how to interact with that data
source.
Ask for a patient’s vitals once – MDO
figures out how to interact with each of
the different data sources, query and
assemble the results so that one single
type of VitalSign object is returned.
VETERANS HEALTH ADMINISTRATION
Still living in a 2-tier world 
•
•
•
MDO is really only available as a DLL. While an improvement over a COM object, only
technical folks can use it. Also, only developers writing in a language that can consume a DLL.
MDO doesn’t put a ton of smarts around the data. It doesn’t much care about business rules.
Those are left to the database to enforce. Sometime that’s ok but not usually…
In VA, the CPRS source code contains the business rules for interacting with VistA. That
means every new application written that uses MDO would need to figure those out by
reverse engineering that CPRS source code.
VETERANS HEALTH ADMINISTRATION
MDO + Web Services = MDWS
MDWS
•
•
•
•
•
MDO
VistA
VistA
Web services are a well understood, widely supported, modern, flexible, scalable, drink koolaid now, etc. etc. way to expose data and functionality.
MDWS is simply a thin web service layer plopped on top of MDO.
The web service layer serves as a convenient holding location for some of those business
rules we mentioned.
Web services encapsulate a great deal of business intelligence in simple, easy to use
functions enabling developers to write applications rapidly and safely. Developers can worry
about their app and not the data.
MDWS, currently, is SOAP web services.
VETERANS HEALTH ADMINISTRATION
SOAP
•
•
•
•
•
•
•
Makes you smell nice.
Also makes it sooo easy to write a web service client.
All major programming languages have tools to turn a SOAP web service’s WSDL (“wizzdle” –
web services definition language) document in to code.
Client applications developers can literally start writing an app against MDWS in a few
minutes. The developer never even sees the XML! It’s all handled automagically by the code
generated from that development language’s WSDL -> whatever tool.
Client application developer sees a MDWS web service call, “getAllMeds” - when invoked, it
simply returns an object TaggedMedicationArrays that has properties such as name, id, sig,
startDate, stopDate, etc. etc.
Even tools such as Microsoft Office products can consume a web service. Our developer no
longer really even needs to be a “developer”.
MDWS empowers anyone with a good idea to make an app that safely and efficiently can
access the patient’s complete medical record. Or, even other types of data.
VETERANS HEALTH ADMINISTRATION
WSDL
This is a WSDL document. Java, .NET, Ruby, Python, Javascript, C++, the list goes on and on, all have tools
to turn this document into code. What one ends up with is super easy to use “objects” that tell your
application exactly what the API arguments are, what to expect as a response, etc. All without needing to
know (mostly) your app is even talking to a VistA (or whatever) database.
VETERANS HEALTH ADMINISTRATION
MDWS
This is from a MDWS demo project freely
available to anyone. It shows how to write
a MDWS client app. With error handling,
this file clocks in ~160 lines. It contains all
the code required to:
1.
2.
3.
4.
5.
6.
Connect to any VistA site
Authenticate your user using VistA
credentials
Search for a patient
Select the patient
Connect to the patient’s remote sites
Retrieve the patient’s medications
from every VA site the patient has
records
The point is to show writing applications
against VistA is really, really easy.
VETERANS HEALTH ADMINISTRATION
Current MDWS Data Sources
•
•
•
•
•
•
•
MDWS communicates with all production VistA sites.
MDWS can access longitudinal data from CDW to support things like
decision support.
MDWS retrieved MOS (Military Occupation Service) codes from the
VADIR repository. These are available in a Blue Button download.
MDWS exposes some geographic databases for things like finding the
nearest medical facility.
MDWS communicates with the HDR via web service calls.
MDWS extends the Secure Messaging (SM) infrastructure of MHV for
our upcoming release of some mobile applications.
MDWS is a data glutton. It can speak any protocol.
VistA
VistA
VistA
CDW
VADIR
Geographic
HDR
MHV
VETERANS HEALTH ADMINISTRATION
Active
Directory
A few current big-name MDWS Clients
•
•
•
•
•
•
MyHealtheVet
VPS Kiosk (in test)
NUMI (Utilization Management)
Suicide and Homeless Hotlines
TBI (Traumatic Brain Injury)
Many new mobile apps are being written as MDWS clients
VETERANS HEALTH ADMINISTRATION
Questions?
Internet Resources:
• http://mdws.vainnovation.us/mdws2/EmrSvc.asmx
• http://mdws.vainnovation.us/MdwsDemo
• http://www.va.gov/vdl/application.asp?appid=192
VETERANS HEALTH ADMINISTRATION

similar documents