Presentation is loading. Please wait.

Presentation is loading. Please wait.

Progress on Object-Oriented Guideline Expression Language (GELLO)

Similar presentations


Presentation on theme: "Progress on Object-Oriented Guideline Expression Language (GELLO)"— Presentation transcript:

1 Progress on Object-Oriented Guideline Expression Language (GELLO)

2 Decision Systems Group –Harvard/Brigham January 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

3 Sample Virtual EMR

4

5

6 Decision Systems Group –Harvard/Brigham January 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");

7 Decision Systems Group –Harvard/Brigham January 3, 2002 7 Acute coronary artery disease GELLO // Assumption: VMR has a notion of an admission event AbsoluteTime admission_time := admission_event.recording_time; // Retrieve the reasons for admission, encoded as Observations // Assumes the particular Intervention in question is admission List 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 vocabulary Concept acute_ischemia := new Concept("MTH","CXXXXXXX"); // Select diagnoses from reasons for admission as coded Concepts List diagnosis_text := select coded_concept from reasons_for_admission;

8 Decision Systems Group –Harvard/Brigham January 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;

9 Decision Systems Group –Harvard/Brigham January 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;

10 Decision Systems Group –Harvard/Brigham January 3, 2002 10 Acute coronary artery disease MLM 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

11 Decision Systems Group –Harvard/Brigham January 3, 2002 11 ASTM CT contrast Arden Syntax (data) last_creat := read last {"Creatinine level"}; last_BUN := read last {"BUN level"}; GELLO QuantitativeObservation 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);

12 Decision Systems Group –Harvard/Brigham January 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;

13 Decision Systems Group –Harvard/Brigham January 3, 2002 13 ASTM CT contrast GELLO String 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;

14 Decision Systems Group –Harvard/Brigham January 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;

15 Decision Systems Group –Harvard/Brigham January 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;

16 Decision Systems Group –Harvard/Brigham January 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;

17 Decision Systems Group –Harvard/Brigham January 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;

18 Decision Systems Group –Harvard/Brigham January 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 */};

19 Decision Systems Group –Harvard/Brigham January 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);

20 Decision Systems Group –Harvard/Brigham January 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;

21 Decision Systems Group –Harvard/Brigham January 3, 2002 21 Extubate blood gas reminder GELLO if not(is null(abg_done)) then conclude false; else conclude true; endif;

22 Decision Systems Group –Harvard/Brigham January 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

23 Decision Systems Group –Harvard/Brigham January 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};

24 Decision Systems Group –Harvard/Brigham January 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 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", "");

25 Decision Systems Group –Harvard/Brigham January 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;

26 Decision Systems Group –Harvard/Brigham January 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;

27 Decision Systems Group –Harvard/Brigham January 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

28 Decision Systems Group –Harvard/Brigham January 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)


Download ppt "Progress on Object-Oriented Guideline Expression Language (GELLO)"

Similar presentations


Ads by Google