1 / 28

Progress on Object-Oriented Guideline Expression Language (GELLO)

Progress on Object-Oriented Guideline Expression Language (GELLO). 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

jaimie
Download Presentation

Progress on Object-Oriented Guideline Expression Language (GELLO)

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

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

  3. Sample Virtual EMR

  4. Sample Virtual EMR

  5. Sample Virtual EMR

  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/Brigham

  7. Acute coronary artery disease GELLO // Assumption: VMR has a notion of an admission event AbsoluteTimeadmission_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 vocabulary Conceptacute_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/Brigham

  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/Brigham

  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/Brigham

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

  11. ASTM CT contrast Arden Syntax (data) last_creat := read last {"Creatinine level"}; last_BUN := read last {"BUN level"}; GELLO QuantitativeObservationlast_creat := last(select obs from QuantitativeObservation as obs where obs.coded_concept.equals(new Concept("MTH", "C0600061")) order by ascending obs.recording_time); QuantitativeObservationlast_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/Brigham

  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/Brigham

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

  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/Brigham

  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/Brigham

  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/Brigham

  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/Brigham

  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/Brigham

  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/Brigham

  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/Brigham

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

  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/Brigham

  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/Brigham

  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/Brigham

  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/Brigham

  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/Brigham

  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/Brigham

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

More Related