One of the principles of The Saner Project is that it is both a BIG change to the way we do things, but also a SMALL one. Which is to say that the software components (which we are now starting to parcel out) will be able to work with existing and available interfaces, and can support better automation. FHIR is the interlingua in which we might do the heavy compute and automation, but the transmission is much simpler.
The measures inside the MeasureReport resources that we've created thus far have a simple relationship inside to data elements as they flow over the wire. We define the measure precisely so that we can simply extract and transmit the essentials, and effectively reconstruct it at the other end.
Those small pieces of software which connect those existing interfaces to a FHIR endpoint are "Coping Mechanisms", but that's a mouthful, so I'm calling them Copes. What's a Cope? It's something that allows two things to work or fit together. In carpentry, it's a way to join things together at the bendy bits so that they make for tight seam that looks appealing. There are a number of ways to cope a joint, some are more difficult than others, and the way you do it might depend on a number of other factors. When both ends are somewhat mobile and fungible, a mitre box and cut at 45° will remove the least waste and provide a nice fit. When one end is stuck where it is, the other end has to do or take all the work to make it fit. We will probably need both.
I have thoughts about a dozen or so Copes:
The measures inside the MeasureReport resources that we've created thus far have a simple relationship inside to data elements as they flow over the wire. We define the measure precisely so that we can simply extract and transmit the essentials, and effectively reconstruct it at the other end.
Those small pieces of software which connect those existing interfaces to a FHIR endpoint are "Coping Mechanisms", but that's a mouthful, so I'm calling them Copes. What's a Cope? It's something that allows two things to work or fit together. In carpentry, it's a way to join things together at the bendy bits so that they make for tight seam that looks appealing. There are a number of ways to cope a joint, some are more difficult than others, and the way you do it might depend on a number of other factors. When both ends are somewhat mobile and fungible, a mitre box and cut at 45° will remove the least waste and provide a nice fit. When one end is stuck where it is, the other end has to do or take all the work to make it fit. We will probably need both.
I have thoughts about a dozen or so Copes:
- CSV-to-MeasureReport
- I'm already using one of these to convert data from The COVID Tracking Project to a Saner MeasureReport (using the FEMA Measure). It could have been put together in about an uninterrupted day's work, not that I have such at the moment, so it was a night's work.
- MeasureReport-to-CSV
- This is even simpler in some ways. The critical data in a measure is well identified, just yank it out and put in into an orderly set of rows following a header.
- CSV-to-XLSX
- XLSX-to-CSV
- This is really just a hack to deal with the FEMA Spreadsheet. FWIW: One should never send native Word or Excel documents around if one doesn't want one's name and institution to be known. It's buried in the metadata in the spreadsheet. Realistically, sending FEMA data should be done via CSV and not XSLX. But I know who to talk to about it because they didn't clean the metadata before it was published.
- CustomJSON-to-MeasureReport
- MeasureReport-to-CustomJSON
- CustomXML-to-MeasureReport
- MeasureReport-to-CustomXML
- ER7-to-MeasureReport
- MeasureReport-to-ER7
- The six above are simply recapituations from structured to differently structured, where the critical bit is mapping from MeasureReport to data fields in a custom thing, or vice versa. In the last two, the ER7 acronym refer to HL7 pipes and hats format, and are really about extracting specific values out of a V2 message to populate a MeasureReport.
- Aggregator
- Collect a bunch of MeasureReport values, add them up and spit it back out as an aggregate report. How does one collection? By time? Geographic region? Hierarchical structure of some sort (e.g., city/town, county, state, region, nation.
- Push-Me-Pull-You
- If A wants to push, and B wants to pull, they cannot talk to each other. The Push-Me-Pull-You Cope sits between the two, and acts as sort of a store and forward channel. This BTW, is simply a classic FHIR Server, although we will see customizations on the Pull side to support different kinds of search.
- Pull-Me-Push-You
- Similarly, if A is expecting pull, and B is expecting to be pushed to, we need to put the Pull-Me-Push-You in the middle to periodically collect and transmit data from A to B.
- V2-to-FHIR
- I just happen to have one of these laying around, but so do others. HL7 O&O has been working on this project in HL7 for the past year and more. Yes, there are some useful feeds that contain observations that are exactly about Situational Awareness of groups of things. Mine used to be configured using a ConceptMap. No human should ever have to write so many angle brackets ... it's crazy making. Thanks to Sushi, we don't, and can remain saner.
- FHIRtoYAML
- YAMLtoFHIR
- It's about time we did these two. I don't have any excuse other than it seems like a good idea at the time (then again, it is 1:13am as I write this)
14 copes sounds like a lot to write. I'm hoping that entrants into The Resiliency Challenge can help with these.
Oh, and one coping mechanism that I don't think we'll spend much time on with Saner? That's not really an effective coping mechanism after all, that's fingers on keyboards. No, I'm hoping the keyboarding is all about writing code to getting data from where it is, to where it needs to be, without unnecessary human intervention (which doesn't mean it lacks human oversight).
The point about Saner isn't to replace existing infrastructure immediately. We need to cope with what we have, and that's what makes Saner, well .. Saner.
No comments:
Post a Comment