public function doPatientCheck(RsPatient $patient, $beginDate = null, $endDate = null, $options = null) { $data = Codes::lookup($this->getOptionId()); $type = $this->getListType(); foreach ($data as $codeType => $codes) { foreach ($codes as $code) { if (exist_lists_item($patient->id, $type, $codeType . '::' . $code, $endDate)) { return true; } } } return false; }
public function doPatientCheck(RsPatient $patient, $beginDate = null, $endDate = null, $options = null) { $data = Codes::lookup($this->getOptionId()); $type = $this->getListType(); foreach ($data as $codeType => $codes) { foreach ($codes as $code) { if (exist_lists_item($patient->id, $type, $codeType . '::' . $code, $endDate)) { return true; } } } if ($this->getOptionId() == self::FINDING_BMI_PERC) { // check for any BMI percentile finding // there are a few BMI codes, but it doesn't matter, // because we just want to check for any finding $query = "SELECT form_vitals.BMI " . "FROM `form_vitals` " . "WHERE form_vitals.BMI IS NOT NULL " . "AND form_vitals.pid = ? " . "AND DATE( form_vitals.date ) >= ? " . "AND DATE( form_vitals.date ) <= ? "; $res = sqlStatement($query, array($patient->id, $beginDate, $endDate)); $number = sqlNumRows($res); if ($number >= 1) { return true; } } return false; }
/** * Function to check lists filters and targets. Customizable and currently includes diagnoses, medications, allergies and surgeries. * * @param string $patient_id pid of selected patient. * @param array $filter array containing lists filter/target elements * @param string $dateTarget target date(format Y-m-d H:i:s). blank is current date. * @return boolean true if check passed, otherwise false */ function lists_check($patient_id, $filter, $dateTarget) { $isMatch = false; //matching flag // Set date to current if not set $dateTarget = $dateTarget ? $dateTarget : date('Y-m-d H:i:s'); foreach ($filter as $row) { if (exist_lists_item($patient_id, $row['method_detail'], $row['value'], $dateTarget)) { // Record the match $isMatch = true; } else { // If this is a required entry then return false if ($row['required_flag']) { return false; } } } // return results of check return $isMatch; }
private function rule_htn_bp_measure_cqm() { $rule_id = $this->rule['id']; $dateTarget = $this->dateTarget; $patientData = $this->patientData; // Calculate measurement period $tempDateArray = explode("-", $dateTarget); $tempYear = $tempDateArray[0]; $begin_measurement = $tempDateArray[0] . "-01-01 00:00:00"; $end_measurement = $tempDateArray[0] . "-12-31 23:59:59"; // Collect results $total_pat = 0; $pass_filt = 0; $exclude_filt = 0; $pass_targ = 0; $perc = 0; foreach ($patientData as $rowPatient) { // increment total patients counter $total_pat++; // get patient id $patient_id = $this->get_patient_id($rowPatient); // filter for age greater than 18 // utilize the convertDobtoAgeYearDecimal() function from library/clinical_rules.php if (convertDobtoAgeYearDecimal($this->get_DOB($patient_id), $begin_measurement) < 18) { continue; } // filter for diagnosis of HTN // utlize the exist_lists_item() function from library/clinical_rules.php if (!(exist_lists_item($patient_id, 'medical_problem', 'CUSTOM::HTN', $end_measurement) || exist_lists_item($patient_id, 'medical_problem', 'ICD9::401.0', $end_measurement) || exist_lists_item($patient_id, 'medical_problem', 'ICD9::401.1', $end_measurement) || exist_lists_item($patient_id, 'medical_problem', 'ICD9::401.9', $end_measurement) || exist_lists_item($patient_id, 'medical_problem', 'ICD9::402.00', $end_measurement) || exist_lists_item($patient_id, 'medical_problem', 'ICD9::402.01', $end_measurement) || exist_lists_item($patient_id, 'medical_problem', 'ICD9::402.10', $end_measurement) || exist_lists_item($patient_id, 'medical_problem', 'ICD9::402.11', $end_measurement) || exist_lists_item($patient_id, 'medical_problem', 'ICD9::402.90', $end_measurement) || exist_lists_item($patient_id, 'medical_problem', 'ICD9::402.91', $end_measurement) || exist_lists_item($patient_id, 'medical_problem', 'ICD9::403.00', $end_measurement) || exist_lists_item($patient_id, 'medical_problem', 'ICD9::403.01', $end_measurement) || exist_lists_item($patient_id, 'medical_problem', 'ICD9::403.10', $end_measurement) || exist_lists_item($patient_id, 'medical_problem', 'ICD9::403.11', $end_measurement) || exist_lists_item($patient_id, 'medical_problem', 'ICD9::403.90', $end_measurement) || exist_lists_item($patient_id, 'medical_problem', 'ICD9::403.91', $end_measurement) || exist_lists_item($patient_id, 'medical_problem', 'ICD9::404.00', $end_measurement) || exist_lists_item($patient_id, 'medical_problem', 'ICD9::404.01', $end_measurement) || exist_lists_item($patient_id, 'medical_problem', 'ICD9::404.02', $end_measurement) || exist_lists_item($patient_id, 'medical_problem', 'ICD9::404.03', $end_measurement) || exist_lists_item($patient_id, 'medical_problem', 'ICD9::404.10', $end_measurement) || exist_lists_item($patient_id, 'medical_problem', 'ICD9::404.11', $end_measurement) || exist_lists_item($patient_id, 'medical_problem', 'ICD9::404.12', $end_measurement) || exist_lists_item($patient_id, 'medical_problem', 'ICD9::404.13', $end_measurement) || exist_lists_item($patient_id, 'medical_problem', 'ICD9::404.90', $end_measurement) || exist_lists_item($patient_id, 'medical_problem', 'ICD9::404.91', $end_measurement) || exist_lists_item($patient_id, 'medical_problem', 'ICD9::404.92', $end_measurement) || exist_lists_item($patient_id, 'medical_problem', 'ICD9::404.93', $end_measurement))) { continue; } // filter for 2 specified encounters // make a function for this and wrap in the encounter titles if (!($this->exist_encounter($patient_id, 'enc_outpatient', $begin_measurement, $end_measurement, 2) || $this->exist_encounter($patient_id, 'enc_nurs_fac', $begin_measurement, $end_measurement, 2))) { continue; } // Filter has been passed $pass_filt++; // See if BP has been done within the measurement period (on a day of a specified encounter) $query = "SELECT form_vitals.bps, form_vitals.bpd " . "FROM `form_vitals` " . "LEFT JOIN `form_encounter` " . "ON ( DATE(form_vitals.date) = DATE(form_encounter.date)) " . "LEFT JOIN `enc_category_map` " . "ON (enc_category_map.main_cat_id = form_encounter.pc_catid) " . "WHERE form_vitals.pid = ?" . "AND form_vitals.bps IS NOT NULL " . "AND form_vitals.bpd IS NOT NULL " . "AND form_vitals.date >= ? " . "AND form_vitals.date <= ? " . "AND ( enc_category_map.rule_enc_id = 'enc_outpatient' OR enc_category_map.rule_enc_id = 'enc_nurs_fac' )"; $res = sqlStatement($query, array($patient_id, $begin_measurement, $end_measurement)); $number = sqlNumRows($res); if ($number < 1) { continue; } error_log("passed target", 0); // Target has been passed $pass_targ++; } // Calculate Percentage (use calculate_percentage() function from library/clinical_rules.php $perc = calculate_percentage($pass_filt, $exclude_filt, $pass_targ); // Set results $this->set_result($rule_id, $total_pat, $pass_filt, $exclude_filt, $pass_targ, $perc); }