We humans have yet to develop the holy grail of describing and sharing biomedical data about ourselves in a way that is both human/computer-readable. We see the problem manifest in all sorts of ways:
- Patients who have to fill out medical history for every friggin' encounter.
- Clinicians participating in collaborative-care networks in the dark about a patient's clinical history and treatment plan because they're not on the same EHR.
- Hospitals and organizations spending millions and billions on wrangling software to run daily operations and processes.
- State and federal agencies struggling to define a scalable, quality-governance framework for reporting on clinical and population metrics--and slow to bring all-payer and accountable-care to the other 48 states.
- Researchers still collaborating like they did in the 20th century, lagging behind the big-data, "Semantic Web" data science tools developed in Silicon Valley and heavily used in the finance, retail and defense sectors.
There's a reason why exchanging medical information is hard: medicine is hard.
Software takes human constructs--the ideas, concepts, machines we've developed over time to understand and interact with the world--and makes them understandable to other machines (computers) for manipulating, calculating, automating etc.
Riding with Uber
A couple of "Entities" involved.
Company Uber;
Driver Jill;
Rider Jim;
Jill joins Uber, and a few weeks later so does Jim as he hails his first ride.
Jill = new Driver();
Uber.Verify(Jill);
Uber.Verify(Jill.Wallet);
Jim = new Rider();
Uber.Verify(Jim.Wallet);
Jim.CurrentLocation = "39.280323, -76.589281"; /* Latitude, Longitude */
Uber.RequestRide(Jim.Location);
Uber lets drivers know that Jim needs a ride and his wherabouts. Jill agrees to drive him, and Uber creates a document called "rideJimJill" to record events about the ride and process payments.
Jill.AcceptRide(Jim);
Ride rideJimJill = Uber.CreateRideWithContract(Jim, Jill, Jim.CurrentLocation);
rideJimJill.Pickup = "2016-06-04 10:14:10294"
rideJimJill.Pickup.Location = "39.280323, -76.589281";
rideJimJill.Embark = "2016-06-04 10:16:15644"
rideJimJill.Arrive = "2016-06-04 10:24:12348"
rideJimJill.Arrive.Location = "39.212323, -76.589281";
rideJimJill.ProcessPayment(Jim.Wallet, Jill.Wallet);
An Uber Ride's Concepts
- Encounter ("Ride")
- Person
- Location
- Time
- Currency
- Device
Visiting a Medical Office
A smorgasbord of "Entities" involved.
Physician PhysicianJill; // Medical Office staff
Nurse NurseJacob;
Assistant AssistantHenry;
BillingManager billingShelley;
Patient PatientJim; // Patients and Family
Relative RelativeBob;
Company MedicalOffice; // Facilities
Company Hospital;
Company SpecialtyOffice_1;
Company SpecialtyOffice_2;
Company BlueCross; // Insurance Companies
Company Medicare;
Device MedicalOfficeEHR;
Device PracticeManagement;
Device HospitalEHR;
Device VitalsMonitor;
// 3rd Party
Company Government;
Company World-Health-Organization;
Company The-International-Health-Terminology-Standards-Development Organisation;
Company Wolters-Kluwer;
Company Regenstrief Institute;
Company American-Medical-Association;
Company Eli-Lilly;
Physician Jill joins the practice and a few weeks later Jim schedules an office visit
PhysicianJill = PracticeManagement.NewPhysician();
Government.Verify(PhysicianJill.Credentials);
PracticeManagement.ScheduleVisit(Jim, "2016-09-27 08:30:00000");
Jim arrives at his office visit and the encounter begins.
PatientJim = PracticeManagement.NewPatient();
PatientJim.FillOutDemographics();
PatientJim.CompleteRegistration();
PatientJim.Insurance1 = Medicare;
PracticeManagement.Verify(PatientJim.Insurance1);
PatientJim.Insurance2 = BlueCross;
PracticeManagement.Verify(PatientJim.Insurance2);
An encounter is created in Jim's chart to record documentation about the visit
Encounter = MedicalOfficeEHR.NewEncounter();
Encounter.Arrived = "2016-06-04 10:14:10294";
Encounter.Roomed = "2016-06-04 10:38:10294";
Assistant Henry comes in and takes Jim's vital signs
Encounter.BloodPressure();
Encounter.RespirationRate();
Encounter.OxygenSaturation();
Encounter.Height();
Encounter.Weight();
Nurse Jacob comes in and records Jim's past medical history
Encounter.GetAllergyHistory();
Encounter.GetImmunizationHistory();
Encounter.GetMedicalHistory();
Encounter.GetFamilyMedicalHistory();
Encounter.GetMedicationHistory();
Encounter.GetLabResultsHistory();
Encounter.GetOrderResultsHistory();
Encounter.GetEncounterHistory();
Physician Jill arrives to the exam room and begins her visit with Jim.
Encounter.SubjectiveNotes(n);
Encounter.ObjectiveNotes();
Encounter.AssessmentNotes();
Encounter.Orders();
Encounter.CarePlan();
Encounter.ePrescribeMedications();
Jim's encounter with Physician Jill is complete, and Nurse Henry comes back to go over meds/orders/referrals with the patient (education.)
Encounter.PatientEducation();
Jim goes to reception and wraps up.
PracticeManagement.Verify(Jim.Wallet);
PracticeManagement.ProcessCoPayment(Jim.Wallet);
Shelley the billing manager works the claims with the appropriate insurances companies.
PracticeManagement.ProcessPrimaryPayerPayment(PatientJim.Insurance1.Wallet);
PracticeManagement.ProcessSecondaryPayerPayment(PatientJim.Insurance2.Wallet);
An Office Visit's Concepts
- Encounter
- Person
- Place
- Time
- Currency
- Bank Account
- Device
- Insurance Agency
- Diagnosis
- Medical Procedure
- Allergy
- Immunization
- Observation
- Diagnostic Report
- Medication Prescription
- Medication Administration
- Chemical Substance
- Care Plan
- Security (HIPAA)
The constructs above are the reason why there are so many "3rd Party Entities" and why working with healthcare data is so difficult. Remember that medicine is a complex and growing science that, by itself, is difficult to describe and manage--creating a "Universal Language" for it (read: "Interoperability") is a lot harder than you might think.
A brief history of the past, present, and future of health information exchange coming up in part 2 of Why Can't EHRs Talk To Each Other.