Progress on Object- Oriented Guideline Expression Language (GELLO)
Jan 16, 2016
Progress on Object-Oriented Guideline Expression Language (GELLO)
Decision Systems Group –Harvard/BrighamJanuary 3, 2002 2
Overview Goal of demonstrating use of GELLO
ability to recode decision logic of existing MLMs new knowledge-based constructs that are possible simplifications possible when used with a VMR
Four new MLMs were encoded and a previously encoded MLM updated admission alert for acute coronary artery disease alert when physician orders CT study with contrast in a patient with
renal failure alert if product of blood calcium and phosphorus exceeds a certain
threshold (possible renal failure) reminder to staff to draw ABG at appropriate time screen for hypokalemia with digoxin therapy
VMR classes used provided by Samson Tu & Peter Johnson
Sample Virtual EMR
Sample Virtual EMR
Sample Virtual EMR
Decision Systems Group –Harvard/BrighamJanuary 3, 2002 6
Acute coronary artery disease
Arden Syntax (data)
admission := event {'32511','32467'; '32511','32472'};inpatient_case := read last
{'evoking','dam'="GYDAPMP",'constraints'=" I***";"HCASE";"K"};
diagnosis_text := read {'evoking','dam'="GYDAPMP"; "HDIAGNOS"; "HDIAGTXT"};
target_diagnoses := ("MI","R/O MI","MYOCARDIAL INFARCTION",
"CARDIOGENIC SHOCK","CHEST PAIN","CP","ANGINA", "CHEST PAIN NOS","INTERMED CORONARY SYND","UNSTABLE
ANGINA","CAD", "ANGINA PECTORIS NOS","CHR ISCHEMIC HRT DIS NEC", "RULE OUT MI","R/O MYOCARDIAL INFARCTION", "ACUTE MI", "SUBENDO INFARCT","UNSTABLE ANGINA/MI",
"ANGINA PECTORIS","CORONARY ARTERY DISEASE");
Decision Systems Group –Harvard/BrighamJanuary 3, 2002 7
Acute coronary artery disease
GELLO
// Assumption: VMR has a notion of an admission eventAbsoluteTime admission_time := admission_event.recording_time;
// Retrieve the reasons for admission, encoded as Observations // Assumes the particular Intervention in question is admission
List<Observation> reasons_for_admission := select adm.reason from Intervention as adm where adm.reason.recording_time.equals(admission_time);
// Create a Concept representing acute ischemia using a UMLS source vocabularyConcept acute_ischemia := new Concept("MTH","CXXXXXXX");
// Select diagnoses from reasons for admission as coded Concepts List<Concept> diagnosis_text := select coded_concept
from reasons_for_admission;
Decision Systems Group –Harvard/BrighamJanuary 3, 2002 8
Acute coronary artery disease
Arden Syntax (logic)
if inpatient_case is null then conclude false; endif; if any (diagnosis_text are in target_diagnoses) then conclude true; else conclude false; endif;
Decision Systems Group –Harvard/BrighamJanuary 3, 2002 9
Acute coronary artery disease
GELLO
if reasons_for_admission.is_empty() then conclude false;endif;
// Indicate that we want diagnoses that have an “is a” relationship to acute ischemia
if diagnosis_text.has_relationship(acute_ischemia, "is a") then conclude true;else conclude false;endif;
Decision Systems Group –Harvard/BrighamJanuary 3, 2002 10
Acute coronary artery diseaseMLM ISSUES
Need for an HL7/Arden Syntax SIG specification of the event model for an MLM to encode the GELLO queries so that they have the same
semantics as in the Arden version VMR assumes actions are performed on a known
patient Where does context for patient identity as used in an
MLM come from? GELLO encoding of MLM is different from
institution-derived encoding Not possible to encode free-text diagnoses with current
VMR model However, use of data dictionary could ensure institution-
independent encoding
Decision Systems Group –Harvard/BrighamJanuary 3, 2002 11
ASTM CT contrast
Arden Syntax (data)last_creat := read last {"Creatinine level"};last_BUN := read last {"BUN level"};
GELLOQuantitativeObservation last_creat := last(select obs
from QuantitativeObservation as obs where obs.coded_concept.equals(new Concept("MTH", "C0600061"))
order by ascending obs.recording_time);QuantitativeObservation last_BUN := last(select obs
from QuantitativeObservation as obs where obs.coded_concept.equals(new Concept("MTH",
"C0005845")) order by ascending obs.recording_time);
Decision Systems Group –Harvard/BrighamJanuary 3, 2002 12
ASTM CT contrast
Arden Syntax (logic)if last_creat is null and last_BUN is null then alert_text := "No recent serum creatinine available. Consider
patient's kidney function before ordering contrast studies."; conclude true;elseif last_creat > 1.5 or last_BUN > 30 then alert_text := "Consider impaired kidney function when ordering
contrast studies for this patient."; conclude true;else conclude false;endif;
Decision Systems Group –Harvard/BrighamJanuary 3, 2002 13
ASTM CT contrast
GELLOString alert;PhysicalQuantity creat_threshold := new PhysicalQuantity(1.5,
"mg/dl","");PhysicalQuantity BUN_threshold := new PhysicalQuantity(30,
"mg/dl","");if is null(last_creat) and is null(last_BUN) then alert := "No recent serum creatinine available. Consider patient's
kidney function before ordering contrast studies."; conclude true;elseif last_creat.observed_quantity.gt(creat_threshold) or last_BUN.observed_quantity.gt(BUN_threshold) alert := "Consider impaired kidney function when ordering contrast
studies for this patient."; conclude true;else conclude false;endif;
Decision Systems Group –Harvard/BrighamJanuary 3, 2002 14
Calcium phosphate product
Arden Syntax (data)
creatinine := read last {'dam'="PDQRES2",'constraints'="C****"; ;'32752'};
calcium := read last {'dam'="PDQRES2",'constraints'="C****"; ;'32109'};
phosphate := read last {'dam'="PDQRES2",'constraints'="C****"; ;'33824'};
creatinine_threshold := 2; product_threshold := 70;
Decision Systems Group –Harvard/BrighamJanuary 3, 2002 15
Calcium phosphate product
GELLO
QuantitativeObservation creatinine := last(select obs from QuantitativeObservation as obs where obs.coded_concept.equals(new Concept("RCD99",
"C0428279")) order by ascending obs.recording_time);
QuantitativeObservation calcium := last(select obs from QuantitativeObservation as obs where obs.coded_concept.equals(new Concept("RCD99",
"C0428302")) order by ascending obs.recording_time);
QuantitativeObservation phosphate := last(select obs from QuantitativeObservation as obs where obs.coded_concept.equals(new Concept("RCD99",
"C0428304")) order by ascending obs.recording_time);
PhysicalQuantity creatinine_threshold := new PhysicalQuantity(2.0, "mg/dl","");
Double product_threshold := 70.0;
Decision Systems Group –Harvard/BrighamJanuary 3, 2002 16
Calcium phosphate product
Arden Syntax (logic)
if (creatinine is not number) or (calcium is not number) or (phosphate is not number) then conclude false; endif; product := calcium * phosphate; if (creatinine >= creatinine_threshold) and (product >= product_threshold) then conclude true; else conclude false; endif;
Decision Systems Group –Harvard/BrighamJanuary 3, 2002 17
Calcium phosphate product
GELLO
if is null(creatinine) or is null(calcium) or is null(phosphate) then conclude false;endif;
Double product := calcium.observed_quantity.value *
phosphate.observed_quantity.value;if creatinine.observed_quantity.gte(creatinine_threshold) and (product >= product_threshold) then conclude true;else conclude false;endif;
Decision Systems Group –Harvard/BrighamJanuary 3, 2002 18
Extubate blood gas reminder
Arden Syntax (data)
// only patients explicitly on protocol patient_on_protocol := {/* patient is on protocol */}; has_abg := read exist {/*abg where it occurred within last 2 hours
*/};
Decision Systems Group –Harvard/BrighamJanuary 3, 2002 19
Extubate blood gas reminder
GELLO
AbsoluteTime t := new AbsoluteTime();AbsoluteTime threshold_time :=
t.before_now(new Duration(2, hours));Procedure abg_done := last(select abg
from Procedure as abg where abg.recording_time.is_after(threshold_time)
order by ascending abg.recording_time);
Decision Systems Group –Harvard/BrighamJanuary 3, 2002 20
Extubate blood gas reminder
Arden Syntax (logic)
if not patient_on_protocol then conclude false; elseif has_abg then conclude false; else conclude true; endif;
Decision Systems Group –Harvard/BrighamJanuary 3, 2002 21
Extubate blood gas reminder
GELLO
if not(is null(abg_done)) then conclude false;else conclude true;endif;
Decision Systems Group –Harvard/BrighamJanuary 3, 2002 22
Extubate gas reminder
Issue
A VMR-implicit assumption is that data collected is for a particular patient
The MLM, on the other hand, needs to survey data from a collection of patients on a protocol
In this case we assume we are performing the reminder for a particular patient who is already on the protocol
Decision Systems Group –Harvard/BrighamJanuary 3, 2002 23
Hypokalemia and Digoxin
Arden Syntax (data)
/* read the potassium that evoked the MLM */potassium := READ LAST {potassium level};/* get the last active digoxin or digitoxin order
*/digoxin_order := read last {digoxin order};
Decision Systems Group –Harvard/BrighamJanuary 3, 2002 24
Hypokalemia and Digoxin
GELLO/* read the potassium that evoked the MLM */QuantitativeObservation potassium := last (select obs
from QuantitativeObservation as obs where obs.coded_concept.equals(new Concept("MTH", "C0543465")) order by descending obs.recording_time);
/* get the last active digoxin or digitoxin order */List<Medication> digoxin_orders := select meds
from Medication as meds where meds.coded_concept.equals(new Concept("MTH", "C0012265"));
PhysicalQuantity potassium_threshold := new PhysicalQuantity(3.3, "mEq/l", "");
Decision Systems Group –Harvard/BrighamJanuary 3, 2002 25
Hypokalemia and Digoxin
Arden Syntax (logic)/* exit if the potassium value is invalid */ if potassium is not number then
conclude false;endif; /* exit if there is no hypokalemia */ if potassium >= 3.3 then
conclude false;endif; /* exit if indication of digoxin use cannot be found */ if (digoxin_order is null) then
conclude false;endif; /* send an alert */ conclude true;
Decision Systems Group –Harvard/BrighamJanuary 3, 2002 26
Hypokalemia and Digoxin
GELLO
if is null (potassium) then conclude false;
endif;/* alert if patient has hypokalemia and is on digoxin */if potassium.lt(potassium_threshold) and not(digoxin_orders.is_empty()) then
conclude true;endif;conclude false;
Decision Systems Group –Harvard/BrighamJanuary 3, 2002 27
Discussion
Knowledge modeling is facilitated by GELLO Example is acute MI term class in first MLM translation This can provide advantages in using drug interaction
databases, etc.
Guidelines present other issues, not covered in MLMs These include scoping, implied gets, etc. We have chosen not to focus on these now, because they
relate to guideline modeling, not to the expression language
VMR not yet stable As it evolves, it should be possible to converge on stable
MLM representations across institutions Note that this cannot be done with curly braces
Decision Systems Group –Harvard/BrighamJanuary 3, 2002 28
Authoring in GELLO
Query and expression writing can be simplified using editing GUIs that provide templates and object navigators Example of such an editing GUI: QuickRules Builder
(http://www.yasutech.com/rules-engine-components.htm)