From 5ad762acf2bf6e725a458783186c30c9adbbfc7b Mon Sep 17 00:00:00 2001 From: bradymiller Date: Sat, 13 Aug 2011 17:43:58 -0700 Subject: [PATCH] CDR engine. Allow procedure codes: -Added procedure code for the Coumadin Management - INR Monitoring rule --- library/clinical_rules.php | 60 ++++++++++++++++++++++++++---------------- sql/4_0_0-to-4_1_0_upgrade.sql | 4 +++ sql/database.sql | 2 +- version.php | 2 +- 4 files changed, 44 insertions(+), 24 deletions(-) diff --git a/library/clinical_rules.php b/library/clinical_rules.php index cbf37294a..d4e42493a 100644 --- a/library/clinical_rules.php +++ b/library/clinical_rules.php @@ -1152,7 +1152,7 @@ function procedure_check($patient_id,$filter,$interval='',$dateTarget='') { // Row description // [0]=>title [1]=>code [2]=>value comparison [3]=>value [4]=>number of hits comparison [5]=>number of hits // code description - // :; etc. + // :||:|| etc. $temp_df = explode("::",$row['value']); if (exist_procedure_item($patient_id, $temp_df[0], $temp_df[1], $temp_df[2], $temp_df[3], $temp_df[4], $temp_df[5], $intervalType, $intervalValue, $dateTarget)) { // Record the match @@ -1294,7 +1294,7 @@ function exist_database_item($patient_id,$table,$column='',$data_comp,$data='',$ // Parameters: // $patient_id - pid of selected patient. // $proc_title - procedure title -// $proc_code - procedure identifier code (array) +// $proc_code - procedure identifier code (array of :||:|| etc.) // $result_comp - results comparison (eq,ne,gt,ge,lt,le) // $result_data - results data // $num_items_comp - number items comparison (eq,ne,gt,ge,lt,le) @@ -1317,12 +1317,6 @@ function exist_procedure_item($patient_id,$proc_title,$proc_code,$result_comp,$r // Get the interval sql query string $dateSql = sql_interval_string($table,$intervalType,$intervalValue,$dateTarget); - // - // TODO - // Figure out a way to use the identifiers codes - // TODO - // - // If just checking for existence (ie result_data is empty), // then simply set the comparison operator to ne. if (empty($result_data)) { @@ -1332,20 +1326,42 @@ function exist_procedure_item($patient_id,$proc_title,$proc_code,$result_comp,$r // get the appropriate sql comparison operator $compSql = convertCompSql($result_comp); - // collect specific items that fulfill request - $sql = sqlStatement("SELECT procedure_result.result " . - "FROM `procedure_type`, " . - "`procedure_order`, " . - "`procedure_report`, " . - "`procedure_result` " . - "WHERE procedure_type.procedure_type_id = procedure_order.procedure_type_id " . - "AND procedure_order.procedure_order_id = procedure_report.procedure_order_id " . - "AND procedure_report.procedure_report_id = procedure_result.procedure_report_id " . - "AND procedure_type.name = ? " . - "AND procedure_result.result " . $compSql . " ? " . - "AND " . add_escape_custom($patient_id_label) . " = ? " . - $dateSql, array($proc_title,$result_data,$patient_id) ); - + // explode the code array + $codes= array(); + if (!empty($proc_code)) { + $codes = explode("||",$proc_code); + } + else { + $codes[0] = ''; + } + + // ensure proc_title is at least blank + if (empty($proc_title)) { + $proc_title = ''; + } + + // collect specific items (use both title and/or codes) that fulfill request + $sqlBindArray=array(); + $sql_query = "SELECT procedure_result.result " . + "FROM `procedure_type`, " . + "`procedure_order`, " . + "`procedure_report`, " . + "`procedure_result` " . + "WHERE procedure_type.procedure_type_id = procedure_order.procedure_type_id " . + "AND procedure_order.procedure_order_id = procedure_report.procedure_order_id " . + "AND procedure_report.procedure_report_id = procedure_result.procedure_report_id " . + "AND "; + foreach ($codes as $tem) { + $sql_query .= "( ( (procedure_type.standard_code = ? AND procedure_type.standard_code != '') " . + "OR (procedure_type.procedure_code = ? AND procedure_type.procedure_code != '') ) OR "; + array_push($sqlBindArray,$tem,$tem); + } + $sql_query .= "(procedure_type.name = ? AND procedure_type.name != '') ) " . + "AND procedure_result.result " . $compSql . " ? " . + "AND " . add_escape_custom($patient_id_label) . " = ? " . $dateSql; + array_push($sqlBindArray,$proc_title,$result_data,$patient_id); + $sql = sqlStatement($sql_query,$sqlBindArray); + // See if number of returned items passes the comparison return itemsNumberCompare($num_items_comp, $num_items_thres, sqlNumRows($sql)); } diff --git a/sql/4_0_0-to-4_1_0_upgrade.sql b/sql/4_0_0-to-4_1_0_upgrade.sql index 029cbd284..b008bcff7 100644 --- a/sql/4_0_0-to-4_1_0_upgrade.sql +++ b/sql/4_0_0-to-4_1_0_upgrade.sql @@ -1510,3 +1510,7 @@ ALTER TABLE openemr_postcalendar_events ADD pc_sendalertsms VARCHAR(3) NOT NULL ALTER TABLE openemr_postcalendar_events ADD pc_sendalertemail VARCHAR(3) NOT NULL DEFAULT 'NO'; #EndIf +#IfNotRow4D rule_target id rule_inr_monitor group_id 1 method target_proc value INR::CPT4:85610::::::ge::1 +UPDATE `rule_target` SET `value` = 'INR::CPT4:85610::::::ge::1' WHERE `id` = 'rule_inr_monitor' AND `group_id` = 1 AND `method` = 'target_proc' AND `value` = 'INR::::::::ge::1'; +#EndIf + diff --git a/sql/database.sql b/sql/database.sql index 6b487a326..696a2618c 100644 --- a/sql/database.sql +++ b/sql/database.sql @@ -4262,7 +4262,7 @@ INSERT INTO `rule_target` ( `id`, `group_id`, `include_flag`, `required_flag`, ` -- -- Coumadin Management - INR Monitoring INSERT INTO `rule_target` ( `id`, `group_id`, `include_flag`, `required_flag`, `method`, `value`, `interval` ) VALUES ('rule_inr_monitor', 1, 1, 1, 'target_interval', 'week', 3); -INSERT INTO `rule_target` ( `id`, `group_id`, `include_flag`, `required_flag`, `method`, `value`, `interval` ) VALUES ('rule_inr_monitor', 1, 1, 1, 'target_proc', 'INR::::::::ge::1', 0); +INSERT INTO `rule_target` ( `id`, `group_id`, `include_flag`, `required_flag`, `method`, `value`, `interval` ) VALUES ('rule_inr_monitor', 1, 1, 1, 'target_proc', 'INR::CPT4:85610::::::ge::1', 0); -- -------------------------------------------------------- diff --git a/version.php b/version.php index 837dccc86..40f5f8898 100644 --- a/version.php +++ b/version.php @@ -12,5 +12,5 @@ $v_tag = '-dev'; // minor revision number, should be empty for production rele // is a database change in the course of development. It is used // internally to determine when a database upgrade is needed. // -$v_database = 39; +$v_database = 40; ?> -- 2.11.4.GIT