Entries Tagged 'HealthVault' ↓
July 26th, 2010 — HealthVault
Over four days from July 20-23, I had great fun connecting 1:1 with a some of the influencers in Healthcare IT and learning about new technologies on the horizon (Asynchronous programming, Scala, Go, Android, ..) at the Open Source Conference in Portland.
So how did my talk go?
My talk went reasonably smooth, overall I was happy with what I could put together in limited time. According to the polls and some in person conversations people seemed to like the fact that I attempted to break it down with a technical deep dive, especially taking time to go deeper on on-the-wire protocols and standards.
The talk was recorded by Robert Wood Johnson foundation and I’ll post a link around when they make it available online.
OSCON Healthcare Track
I attended most of the talks at OSCON HealthCare track. This was the first Healthcare track at the conference, in my opinion it turned out splendid! Andy Oram has a good summary of the first, second & third day, and Fred Totter has links to interviews of some of the presenters. Over the three days of Healthcare track I learnt a lot about various NHIN and VistA projects.
Sessions
In addition, I attended a few session and a couple of tutorials. I’ll summarize some of them below with key take-away or interesting links :
- Cloud computing – “Situation Normal, Everything Must change”: If nothing else I would highly recommend watching this key-note, no new content but the Simon Wardley is very effective in communicating his point about Cloud computing and managing technology in general.
- Asynchronous Programming – I learnt a lot about nginx web-server and the principles behind node.js. Ilya’s talk was specific to Ruby but learnt a lot about the perf gain PostRank has gotten owing to Asychcrony. He was gracious to have lunch with me and one of interesting things he mention was use of AMQP. AMQP is near real-time (low latency, high throughput) general purpose message standard used by most of the guys on Wall-street! An open source implementation of the same is RabbitMQ.
- Another Go at Language Design: Since I’m a compiler wonk and systems’ programmer, it was great to see Rob Pike’s presentation on Go language and specially see the fast Go compilers, most optimizations are owing to managing the dependencies for linking.
- jQuery – The presentation on jQuery was very detailed even for a novice. I particularly liked the show-casing of selectors to write succinct iavascript code.
- Graph Database – Neo4j : At fore front in the NoSQL camp Neo4j offers up to 1000x performance gain over relational database for implementing applications like a social network. Key different from RDBMS is that the Graph itself is the main index!
- Android: I learnt a quite a bit about Google Android and their development methodology. Android developers in general focus a lot on remove perceivable slowness from the application (called “Jank” in Google lingo).Anything which takes more than 200ms to process is considered bad. A good rule of thumb to prevent “Jank” is to never stall the event loop. To spur further Android excitement Google gave away the soon to be de-commissioned Nexus one devices in one of their workshops.
- Open stack:Open source system for creating Amazon EC2-like clouds. In fact this project is open sourcing of the RackSpace cloud system.
- An interesting project to cross-compile Android projects to iPhone.
Birds of feather session on Healthcare Standards
I participated in the BOF on Healthcare Standards.
The conversation started by highlighting the classic problem of how people who have been in the industry want semantic interoperability and how the new entrants in the area want simple systems. I contribute to this conversation by pointing out that if standards get developed with industrial strength open implementations they are more tend to be more sane (read NHIN-D).
The conversation then drifted towards terminologies. Everyone in the room was outraged with CPT and AMA’s greed J. David Riley (head of NHIN project) added to the conversation saying that ICD-10 procedures are designed to replace CPT. I contributed to the conversation detailing how it’s difficult to develop a coherent system with all the different vocabularies with different licensing requirement and incomplete mappings to each other. David was then gracious to detail a project done in the federal government where they attempted to come up with a common terminology service by inventing something akin to OIDs for each terminology. He is hoping that he can open source those terminologies sometime soon. Brian Bhelendorf then added to the conversation asking how can we enable or create open source terminologies. I was suggested that may be can do something like RxNorm to create a uniform mapping system which the terminology licensors can adopt. There was more discussion on this topic, no one felt that UMLS was adequate.
PS: I’ll update the this post with more links and thought-blocks as I remember
.
February 28th, 2010 — HealthVault
Cover It Live event for HIMSS Conference:
October 27th, 2009 — HealthVault, Vocabularies
Update: Fixed typos, added links to related tools and articles, updated the example.
CCR or Continuity of Care Record is a standard meant to ease the exchange of clinical information with a relatively easy to read and practical data-format and schema. There is ton of great information about CCR on its resource site. CCR document format is supported by majority of personal Health clouds, both – Microsoft HealthVault & Google Health.
The CCR specification comprises an implementation guide, XML schema definition and a guidance spreadsheet for each data element that makes up the standard. These resources can be bought from ASTM.
The document format of CCR is very straight forward, consisting of a header, body and a footer with the following top-level elements:
| Header |
Body |
Body |
Footer |
|
CCR Document ID
Language
Version
Creation Date
Patient
From
To
Purpose
|
Payers
Advance Directives
Support
Functional Status
Problems
Family History
Social History
Alerts
Medications
|
Medical Equipment
Immunizations
Vital Signs
Results
Procedures
Encounters
Plan Of Care
HealthCareProviders
|
Actors
Signatures
References
Comments
|
Google Health supports only a limited set of entities from the above, while HealthVault supports the entire standard and also allows transformation of some of these entities in to native HealthVault types. You can read more about working with CCR in HealthVault and various input mappings, output mappings, and CCR vocabularies.
Here are some illustrative CCR figures from Dr. Waldren’s presentation (see end of article).

Using the SNOMED-CT concepts one can write the Systolic Blood pressure reading in CCR as the following (UPDATE: Well-formatted the CCR to include source, object-id and actors, thanks to Matt Wagner):
<?xml version="1.0" encoding="utf-8"?>
<ContinuityOfCareRecord xmlns='urn:astm-org:CCR'>
<CCRDocumentObjectID>Doc</CCRDocumentObjectID>
<Language>
<Text>English</Text>
</Language>
<Version>V1.0</Version>
<DateTime>
<ExactDateTime>2008</ExactDateTime>
</DateTime>
<Patient>
<ActorID>Patient</ActorID>
</Patient>
<Body>
<VitalSigns>
<Result>
<CCRDataObjectID>0001</CCRDataObjectID>
<Description>
<Text>Blood Pressure</Text>
</Description>
<Source>
<Description>
<Text>Unknown</Text>
</Description>
</Source>
<Test>
<CCRDataObjectID>0002</CCRDataObjectID>
<Description>
<Text>Systolic</Text>
<Code>
<Value>163030003</Value>
<CodingSystem>SNOMEDCT</CodingSystem>
</Code>
</Description>
<Source>
<Description>
<Text>Unknown</Text>
</Description>
</Source>
<TestResult>
<Value>120</Value>
<Units>
<Unit>mmHg</Unit>
</Units>
</TestResult>
</Test>
<Test>
<CCRDataObjectID>0003</CCRDataObjectID>
<Description>
<Text>Diastolic</Text>
<Code>
<Value>163031004</Value>
<CodingSystem>SNOMEDCT</CodingSystem>
</Code>
</Description>
<Source>
<Description>
<Text>Unknown</Text>
</Description>
</Source>
<TestResult>
<Value>75</Value>
<Units>
<Unit>mmHg</Unit>
</Units>
</TestResult>
</Test>
</Result>
</VitalSigns>
</Body>
<Actors>
<Actor>
<ActorObjectID>Patient</ActorObjectID>
<Person>
<Name>
<CurrentName>
<Given>John</Given>
<Family>Doe</Family>
</CurrentName>
</Name>
</Person>
<Source>
<Description>
<Text>Unknown</Text>
</Description>
</Source>
</Actor>
</Actors>
</ContinuityOfCareRecord>
Note CodingSystem element. It allows CCR to interpret various medical vocabularies.
Relevant Tools:
(Thanks to Kathleen Connor)
- The CCR Validator, is an important resource to test/validate a CCR instance, is a now available Not only does it validate the CCR against the XSD but also the constraints of the implementation guide.
- An Open Source StyleSheet to view CCR files.
- CCR to CCD & HL7 Mappers – tools which Map CCR to CCD and HL7 V2 & V3. You can access them directly here.
- Application to embed CCR in PDF-HealthCare.
Related Article(s):
- To get familiar with CCR I would highly recommended this 13 minute video by Dr. Steve Waldren.
- Adam Bosworth posted an interesting read on standards, his take (simple, human readable, focus on known structured data, etc.) favors CCR.
In this series:
- Understanding Vocabularies. Wait! What did you say?
- Understanding Vocabularies #2 – HealthVault Recommendations
- Understanding SNOMED CT
- Understanding CCR
Special thanks to Kathy Osborne for proof reading this post.
October 19th, 2009 — ASP.NET, HealthVault
HealthVault SDK 1.0 introduces an interesting capability by which an HealthVault application can read their application certificate from a file. Eric has some details about this on his blog.
I’m going to describe how this capability of reading an application’s certificates from the file store could be used to run HealthVault application on Windows Azure. Here are the steps to get a simple HealthVault application (which I call HelloHV) running on Windows Azure:
- Install the Azure SDK and HealthVault SDK. Create your HealthVault application as a Web Role.
- Configure and create an HealthVault application using the application manager utility in HealthVault SDK. Make sure you set the Action-Url to http://<yourapp>.cloudapp.net/Redirect.aspx using the Application Configuration Center.
- Copy the Redirect.aspx & Redirect.cs from HealthVault samples (HelloWorld in HealthVault SDK) in to your application and add reference to HealthVault assemblies (you can find them in C:\Program Files\Microsoft HealthVault\SDK\DotNet\Assemblies)
- Add the HealthVault related config settings to your WebRole’s Web.Config, the easiest way to do this would be copy the relevant key(s) from a sample in HealthVault SDK. Here is an illustration :
<appSettings>
<add key="ApplicationId" value="01e21bd1-cb13-40d6-8f01-596286827d6d"/>
<add key="ShellUrl" value="https://account.healthvault-ppe.com/"/>
<add key="HealthServiceUrl" value="https://platform.healthvault-ppe.com/platform/"/>
<!-- when we call the SignOut() method on HealthServicePage,
it redirects us to the page below -->
<!--<add key="NonProductionActionUrlRedirectOverride" value="Redirect.aspx" />-->
<!-- The redirect page (specified above) uses these keys below to redirect to different
pages based on the response from the shell -->
<add key="WCPage_ActionHome" value="default.aspx"/>
<add key="WCPage_ActionAppAuthSuccess" value="HelloHV.aspx"/>
<add key="ApplicationCertificateFileName"
value="~\cert\WildcatApp-01e21bd1-cb13-40d6-8f01-596286827d6d.pfx"/>
</appSettings>
- While testing on your local machine uncomment the following line in the Web.Config, this will allow HealthVault to communicate with your local machine. However make sure that this is commented when you publish the application. Alternatively the following key can also be stored in UserApplicationConfigs.xml, if you maintain one for your development.
<!--<add key="NonProductionActionUrlRedirectOverride" value="Redirect.aspx" />—->
Gotacha1: Windows Azure changes the port numbers for your application so its hard to make it work without using the action-url configured for your application in Application Configuration Center.
- In your Default HealthVault Page Make sure you read the certificate for your application from a local file (you can also use Azure Storage).
Gotacha2: HealthVault SDK expects the ApplicationCertificateFileName to be absolute filename, this is impossible to determine for a cloud system like Azure. However we can get the absolute path by changing the value of the key at run-time.
public partial class HelloHV : HealthServicePage
{
protected void Page_PreInit(object sender, EventArgs e)
{
ConfigurationSettings.AppSettings["ApplicationCertificateFileName"] =
MapPath(@"~\cert\WildcatApp-01e21bd1-cb13-40d6-8f01-596286827d6d.pfx");
}
protected void Page_Load(object sender, EventArgs e)
{
..
- Hit Run and see your Hello HealthVault application in action!!
Now the show time:
Check out a simple (HelloHV application) running on Windows Azure here.

The associated code for this application is shared here.
Remember to switch to SSL and secure your application certificate (using password or Azure Storage) before you consider taking an application running on Windows Azure live as a production HealthVault application.
October 9th, 2009 — HealthVault, Vocabularies
I have previously posted about Understanding Health Ontologies and Standards. In this post I’ll focus on SNOMED-CT (Systematized Nomenclature of Medicine Clinical Terms). SNOMED-CT is the most comprehensive vocabulary to express clinical terms – it spans languages, specialties and geographic borders.
SNOMED-CT includes:
- Terms or synonyms relating to a clinical concept
- Links between different concepts
To give you a taste here is an example of Blood pressure reading represented using SNOMED-CT from the linked paper (“Towards semantic interoperability in healthcare: ontology mapping from SNOMED-CT to HL7 version 3”, Amanda Ryan):

In addition to having a model to represent concepts and linkages the biggest draw of SNOMED CT is a staggering number of coded qualifiers (which belong to one concept or other). According to IHTSO there are about 311,000 actively used SNOMED CT concepts.
You can register for SNOMED CT here. Its free for companies and individuals in United States, however your registration is processed by NLM and it might take over 3 days to receive a confirmation and access.
Once you are through with registration and have an account, start by downloading the core subset of SNOMED CT concepts here, this list consists of about 5000 most frequently used terms by institutions across US. Its a good set to get familiar with, it consists of the following concept area:
- Clinical finding : 4,550 codes in total
- Procedure : 414 codes in total
- Situation with explicit context : 132 codes in total
- Event : 38 codes in total
- Body structure : 46 codes in total
- Social context : 2 codes in total

We can use BCP to copy the files from SNOMED CT Core in to our local database, and do more interesting queries & data analysis like find distribution on these terms, co-relate problems vs. findings and of course work on the larger SNOMED CT database to find synonyms etc.; but I’ll keep that for another day. Here very quickly I’ll show how one can use a web-based browser, Snowflake, http://snomed.dataline.co.uk/ (requires registration) to lookup a SNOMED code and see what else it relates to. We can see that in line 3 above SNOMED CT concept 10085004 is marked as Metatarsalgia (finding), however using the Snowflake browser we can see in that in addition to being a finding this concept is a problem as well.

This was just tip of the ice-berg, please leave comments for future posts / areas to consider in the Ontology domain.
Further reading / relevant links:
In this series:
- Understanding Vocabularies. Wait! What did you say?
- Understanding Vocabularies #2 – HealthVault Recommendations
- Understanding SNOMED CT