Clinical Event Monitor (Introduction to Medical Informatics) (http://www.cpmc.columbia.edu/edu/textbook) LAST REVIEWED: 31 October 1996 event monitor monitor all clinical events in the medical center - admit or discharge a patient - store result of a test - order for a therapy (not yet supported) produces messages alerts - bring dangerous situation to attention hypokalemia and digoxin creatinine monitor interpretation - analysis of results fractional excretion of sodium screening - find patients for research, QA hypercalcemia study recommendations - drug dosing, etc care plans - identify sequence of patient-specific actions research - identify patients for study; report on their events administrative - quality assurance based upon Arden Syntax for Medical Logic Modules (MLMs) set of independent modules each one makes a single medical decision designed to facilitate sharing represented as a set of ASCII files database data from all departments comes into database each storage is an "event" triggers the event monitor modes of evocation asynchronous - for most upload of data delayed - for delayed MLMs (eg, 3 days after med) synchronous - need immediate answer for order entry event monitor run pertinent MLMs (relevant to the event) query database for further information caching check a set of criteria perform actions: message, email, new trigger, delay creating the compiled knowledge base MLM begins as an ASCII file on unix (RS 6000, AIX, C) MLM editor keeps track of version control template MLM syntax checking cut and paste compiler based on lex and yacc 1. MLM -> abstract syntax tree 2. references to the Medical Entities Dictionary 3. optimization to reduce number of queries 4. generate code end up with postfix mnemonic pseudo-codes (like Forth) pfetch 12 pfetch 13 plus pstore 14 pseudo-codes allowed development on multiple platforms with multiple languages using one compiler; simplified design and debugging; reduced compiled MLM size alternatives: interpreter, compiler, shell assembler based on lex creates numberic pseudo-codes 18 12 18 13 45 20 14 uploaded to mainframe knowledge base (IBM 3090, CICS, PL/I, DB2) some conversion is still necessary event monitor is a stack-based virtual machine error handling system is down (use queues) MLM has an error caught by the compiler (syntax) MLM has an error missed by the compiler error that depends on data (eg, divide by 0) error due to bad data abend on very severe error (lose event) use log to handle severe errors (lose one MLM) use NULL to handle data errors (often appropriate) performance 2000 messages per day 70+ MLMs running up to 1 event per second application is I/O bound 97% elapsed or 87% CPU time is in database access 34 milliseconds per query (median) average pcode takes 2.3 microseconds interpretation of logic is fast enough therefore optimize database access messages are displayed to the user alerts - when you log onto the patient record would be better to send email to MD, but not known interpretations - to the data they interpret screening - email to researchers other options: beeper, fax MLM examples chemistry_profile_calculations chem7_calculations chronic_renal_failure creatinine_clearance creatinine_monitor digoxin_and_hypokalemia discharge_summary_monitor epi_urine et_* fractional_na hypokalemia_and_digoxin mammo_path_temp mbfract mrn_merge newborn_hepatitis_b obstetric_hepatitis_b rad_path_corr self_pay simple_hyperamylasemia smac_calculations tb_culture_result trans_nondrg tumoreg CPMC evaluation of 57 comments - overwhelmingly positive 29 thank you 7 document action 9 tell that alert was FP 12 suggestions creatinine monitor no affect on outcome (kidney status) too many FPs, often irreversible other evaluation - of all KBSs, has shown most effect HELP - saved money on prophylactic antibiotics RMRS - reduced errors from drug effects (not learned) - immunizations and preventative care improved COSTAR - improved throat culture follow up BI - changed nephrotoxic drug sooner