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")
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.)
Jim goes to reception and wraps up.
Shelley the billing manager works the claims with the appropriate insurances companies.
An Office Visit's Concepts
- Bank Account
- Insurance Agency
- Medical Procedure
- 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.