public function ajaxListInteractionsAction() { $severeNotify = PermissionTemplate::hasPermission('medication-alerts', 'severe-notification') ? true : false; $criticalNotify = PermissionTemplate::hasPermission('medication-alerts', 'critical-notification') ? true : false; $allergyNotify = PermissionTemplate::hasPermission('medication-alerts', 'allergy-notification') ? true : false; $personId = (int) $this->_getParam('personId'); $md5 = preg_replace('/[^A-Za-z0-9]/', '', $this->_getParam('md5')); $vaclass = preg_replace('/[^A-Za-z0-9]/', '', $this->_getParam('vaclass')); // regular allergies search $interactionIterator = new BaseMed24InteractionIterator(); $interactionIterator->setFilters(array('personId' => $personId, 'md5' => $md5)); $regularAllergies = $interactionIterator->toJsonArray('hipaa_ndc', array('tradename', 'fda_drugname', 'notice')); $tmpArray = $regularAllergies; $regularAllergies = array(); foreach ($tmpArray as $key => $value) { // notice: S, C, Y, ^ if (!$severeNotify && $value['data'][2] == 'SIGNIFICANT' || !$criticalNotify && $value['data'][2] == 'CRITICAL') { continue; } $regularAllergies[] = $value; } $listSymptoms = array(); $enumeration = new Enumeration(); $enumeration->populateByEnumerationName(PatientAllergy::ENUM_SYMPTOM_PARENT_NAME); $enumerationsClosure = new EnumerationsClosure(); $enumerationIterator = $enumerationsClosure->getAllDescendants($enumeration->enumerationId, 1); $ctr = 0; foreach ($enumerationIterator as $enum) { $listSymptoms[$enum->key] = $enum->name; } $listSeverities = array(); $enumeration->populateByEnumerationName(PatientAllergy::ENUM_SEVERITY_PARENT_NAME); $enumerationsClosure = new EnumerationsClosure(); $enumerationIterator = $enumerationsClosure->getAllDescendants($enumeration->enumerationId, 1); $ctr = 0; foreach ($enumerationIterator as $enum) { $listSeverities[$enum->key] = $enum->name; } // drug class search $patientAllergyIterator = new PatientAllergyIterator(); $patientAllergyIterator->setFilters(array('patientId' => $personId, 'enteredInError' => 0, 'drugAllergy' => $vaclass, 'reactionType' => 'Drug Class Allergy')); $drugClassAllergies = array(); foreach ($patientAllergyIterator as $allergy) { if (!$allergyNotify) { break; } /*if ((!$severeNotify && $allergy->severity == 'SEVERE') || (!$criticalNotify && $allergy->severity == 'MOD')) continue;*/ $symptoms = explode(',', $allergy->symptoms); $symptom = array(); foreach ($symptoms as $sym) { $symptom[] = $listSymptoms[$sym]; } $tmpArray = array(); $tmpArray['id'] = $allergy->patientAllergyId; $tmpArray['data'][] = $allergy->causativeAgent; $tmpArray['data'][] = $allergy->reactionType; $tmpArray['data'][] = $listSeverities[$allergy->severity] . ' - ' . implode(',', $symptom); $drugClassAllergies[] = $tmpArray; } // specific drug search $patientAllergyIterator->setFilters(array('patientId' => $personId, 'enteredInError' => 0, 'drugAllergy' => $md5, 'reactionType' => 'Specific Drug Allergy')); $specificDrugAllergies = array(); foreach ($patientAllergyIterator as $allergy) { if (!$allergyNotify) { break; } /*if ((!$severeNotify && $allergy->severity == 'SEVERE') || (!$criticalNotify && $allergy->severity == 'MOD')) continue;*/ $symptoms = explode(',', $allergy->symptoms); $symptom = array(); foreach ($symptoms as $sym) { $symptom[] = $listSymptoms[$sym]; } $tmpArray = array(); $tmpArray['id'] = $allergy->patientAllergyId; $tmpArray['data'][] = $allergy->causativeAgent; $tmpArray['data'][] = $allergy->reactionType; $tmpArray['data'][] = $listSeverities[$allergy->severity] . ' - ' . implode(',', $symptom); $specificDrugAllergies[] = $tmpArray; } $interactions = array_merge_recursive($regularAllergies, $drugClassAllergies, $specificDrugAllergies); $json = Zend_Controller_Action_HelperBroker::getStaticHelper('json'); $json->suppressExit = true; $json->direct(array('rows' => $interactions)); }
protected static function _checkMedication(HealthStatusHandler $handler, $patientId, $audit) { $ret = false; if ($audit->objectClass != 'Medication') { return $ret; } $db = Zend_Registry::get('dbAdapter'); $medication = new Medication(); $medication->medicationId = (int) $audit->objectId; $medication->populate(); $s = $medication->description; if (preg_match('/avandia/i', $s)) { $message = 'Patient may be suitable for referral to Diabetes Counseling'; } else { if (preg_match('/hydrochlorothiazide/i', $s)) { $message = 'Patient may be suitable for treatment of hypertension with a diuretic such as Hydrochlorothiazide'; } else { if (preg_match('/lipitor/i', $s)) { $message = 'Patient may benefit from hypercholesteremia drug such as Lipitor'; $sqlSelect = $db->select()->from('chmed.basemed24', array('md5', 'vaclass'))->where('pkey = ?', $medication->pkey); $hasAllergy = false; if ($row = $db->fetchRow($sqlSelect)) { $personId = (int) $patientId; $md5 = $row['md5']; $vaclass = $row['vaclass']; // check for allergy interactions do { // regular allergies search $interactionIterator = new BaseMed24InteractionIterator(); $interactionIterator->setFilters(array('personId' => $personId, 'md5' => $md5)); $regularAllergies = $interactionIterator->toJsonArray('hipaa_ndc', array('tradename', 'fda_drugname', 'notice')); $tmpArray = $regularAllergies; $regularAllergies = array(); foreach ($tmpArray as $key => $value) { $hasAllergy = true; break 2; } // drug class search $patientAllergyIterator = new PatientAllergyIterator(); $patientAllergyIterator->setFilters(array('patientId' => $personId, 'enteredInError' => 0, 'drugAllergy' => $vaclass, 'reactionType' => 'Drug Class Allergy')); $drugClassAllergies = array(); foreach ($patientAllergyIterator as $allergy) { $hasAllergy = true; break 2; } // specific drug search $patientAllergyIterator->setFilters(array('patientId' => $personId, 'enteredInError' => 0, 'drugAllergy' => $md5, 'reactionType' => 'Specific Drug Allergy')); $specificDrugAllergies = array(); foreach ($patientAllergyIterator as $allergy) { $hasAllergy = true; break 2; } } while (false); } if ($hasAllergy) { $message .= '. NOTE: Consult patients allergies: Lipitor/Atorvastatin'; } } else { return $ret; } } } self::createHSA($handler, $patientId, $message); return true; }