The followings are the available columns in table 'secondary_diagnosis':
Inheritance: extends BaseActiveRecordVersioned
Example #1
0
 protected function afterSave()
 {
     foreach (SecondaryDiagnosis::model()->findAll('patient_id=? and disorder_id=?', array($this->patient_id, $this->disorder_id)) as $sd) {
         if ($this->eye_id == $sd->eye_id || $this->eye_id == 3 && in_array($sd->eye_id, array(1, 2))) {
             $sd->delete();
         } elseif (in_array($this->eye_id, array(1, 2)) && $sd->eye_id == 3) {
             $sd->eye_id = $this->eye_id == 1 ? 2 : 1;
             $sd->save();
         }
     }
 }
 public function actionValidateAddDiagnosis()
 {
     $errors = array();
     if (!($patient = Patient::model()->findByPk(@$_POST['patient_id']))) {
         throw new Exception("Patient not found: " . @$_POST['patient_id']);
     }
     if (isset($_POST['DiagnosisSelection']['ophthalmic_disorder_id'])) {
         $disorder_id = $_POST['DiagnosisSelection']['ophthalmic_disorder_id'];
     } elseif (isset($_POST['DiagnosisSelection']['systemic_disorder_id'])) {
         $disorder_id = $_POST['DiagnosisSelection']['systemic_disorder_id'];
     }
     $sd = new SecondaryDiagnosis();
     $sd->patient_id = $patient->id;
     $sd->date = $this->processFuzzyDate();
     $sd->disorder_id = @$disorder_id;
     $sd->eye_id = @$_POST['diagnosis_eye'];
     $errors = array();
     if (!$sd->validate()) {
         foreach ($sd->getErrors() as $field => $_errors) {
             $errors[$field] = $_errors[0];
         }
     }
     // Check the diagnosis isn't currently set at the episode level for this patient
     foreach ($patient->episodes as $episode) {
         if ($episode->disorder_id == $sd->disorder_id && ($episode->eye_id == $sd->eye_id || $episode->eye_id == 3 || $sd->eye_id == 3)) {
             $errors['disorder_id'] = "The disorder is already set at the episode level for this patient";
         }
     }
     // Check that the date isn't in the future
     if (@$_POST['fuzzy_year'] == date('Y')) {
         if (@$_POST['fuzzy_month'] > date('n')) {
             $errors['date'] = "The date cannot be in the future.";
         } elseif (@$_POST['fuzzy_month'] == date('n')) {
             if (@$_POST['fuzzy_day'] > date('j')) {
                 $errors['date'] = "The date cannot be in the future.";
             }
         }
     }
     // Check that the date is valid
     $v = new OEFuzzyDateValidator();
     $v->validateAttribute($sd, 'date');
     echo json_encode($errors);
 }
 /**
  * Update the diagnoses for this element using a hash structure of
  * [{
  * 		'disorder_id' => integer,
  * 		'eye_id' => \Eye::LEFT|\Eye::RIGHT|\Eye::BOTH,
  * 		'principal' => boolean
  * }, ... ]
  *
  * @param $update_disorders
  * @throws Exception
  */
 public function updateDiagnoses($update_disorders)
 {
     $current_diagnoses = OphCiExamination_Diagnosis::model()->findAll('element_diagnoses_id=?', array($this->id));
     $curr_by_disorder_id = array();
     $secondary_disorder_ids = array();
     foreach ($current_diagnoses as $cd) {
         $curr_by_disorder_id[$cd->disorder_id] = $cd;
     }
     foreach ($update_disorders as $u_disorder) {
         if (!($curr = @$curr_by_disorder_id[$u_disorder['disorder_id']])) {
             $curr = new OphCiExamination_Diagnosis();
             $curr->element_diagnoses_id = $this->id;
             $curr->disorder_id = $u_disorder['disorder_id'];
         } else {
             unset($curr_by_disorder_id[$u_disorder['disorder_id']]);
         }
         if ($curr->eye_id != $u_disorder['eye_id'] || $curr->principal != $u_disorder['principal']) {
             // need to update & save
             $curr->eye_id = $u_disorder['eye_id'];
             $curr->principal = $u_disorder['principal'];
             if (!$curr->save()) {
                 throw new \Exception("save failed" . print_r($curr->getErrors(), true));
             }
         }
         if ($u_disorder['principal']) {
             $this->event->episode->setPrincipalDiagnosis($u_disorder['disorder_id'], $u_disorder['eye_id']);
         } else {
             //add a secondary diagnosis
             // Note that this may be creating duplicate diagnoses, but that is okay as the dates on them will differ
             $this->event->episode->patient->addDiagnosis($u_disorder['disorder_id'], $u_disorder['eye_id'], substr($this->event->created_date, 0, 10));
             // and track
             $secondary_disorder_ids[] = $u_disorder['disorder_id'];
         }
     }
     // remove any current diagnoses no longer needed
     foreach ($curr_by_disorder_id as $curr) {
         if (!$curr->delete()) {
             throw new \Exception('Unable to remove old disorder');
         }
     }
     // ensure secondary diagnoses are consistent
     // FIXME: ongoing discussion as to whether we should be removing diagnosis from the patient here
     // particularly if this is a save of an older examination record.
     foreach (\SecondaryDiagnosis::model()->findAll('patient_id=?', array($this->event->episode->patient_id)) as $sd) {
         if ($sd->disorder->specialty && $sd->disorder->specialty->code == 130) {
             if (!in_array($sd->disorder_id, $secondary_disorder_ids)) {
                 $this->event->episode->patient->removeDiagnosis($sd->id);
             }
         }
     }
 }
Example #4
0
 public function getSdl()
 {
     $criteria = new CDbCriteria();
     $criteria->compare('patient_id', $this->id);
     $criteria->order = 'created_date asc';
     $diagnoses = array();
     foreach (SecondaryDiagnosis::model()->findAll('patient_id=?', array($this->id)) as $i => $sd) {
         if ($sd->disorder->specialty && $sd->disorder->specialty->code == 130) {
             $diagnoses[] = strtolower(($sd->eye ? $sd->eye->adjective . ' ' : '') . $sd->disorder->term);
         }
     }
     return Helper::formatList($diagnoses);
 }
 /**
  * if a secondary diagnosis disorder id has been set, we need to ensure its created on the patient.
  *
  * @see parent::beforeSave()
  */
 public function beforeSave()
 {
     $curr_sd = $this->_getSecondaryDiagnosis();
     if ($this->secondarydiagnosis_disorder_id && $curr_sd && $curr_sd->disorder_id != $this->secondarydiagnosis_disorder_id) {
         // looks like this is an edit and the previous secondary diagnosis should be removed
         // so we can set the correct value
         $curr_disorder = $curr_sd->disorder;
         $curr_sd->delete();
         $curr_sd = null;
         Yii::app()->user->setFlash('warning.alert', "Disorder '" . $curr_disorder->term . "' has been removed because DR Grading diagnosis was updated.");
     }
     if (!$curr_sd) {
         // need to determine if we are setting a specific disorder on the patient, or a generic diabetes
         // diagnosis (which is implied by recording DR)
         $patient = $this->event->episode->patient;
         $sd = null;
         if ($this->secondarydiagnosis_disorder_id) {
             // no secondary diagnosis has been set by this element yet but one has been
             // assigned (i.e. the element is being created with a diabetes type)
             // final check to ensure nothing has changed whilst processing
             if (!$patient->hasDisorderTypeByIds(array_merge(\Disorder::$SNOMED_DIABETES_TYPE_I_SET, \Disorder::$SNOMED_DIABETES_TYPE_II_SET))) {
                 $sd = new \SecondaryDiagnosis();
                 $sd->patient_id = $patient->id;
                 $sd->disorder_id = $this->secondarydiagnosis_disorder_id;
             } else {
                 // clear out the secondarydiagnosis_disorder_id
                 $this->secondarydiagnosis_disorder_id = null;
                 // reset required flag as patient now has a diabetes type
                 $this->secondarydiagnosis_disorder_required = false;
             }
         } elseif (!$patient->hasDisorderTypeByIds(\Disorder::$SNOMED_DIABETES_SET)) {
             // Set the patient to have diabetes
             $sd = new \SecondaryDiagnosis();
             $sd->patient_id = $patient->id;
             $sd->disorder_id = \Disorder::SNOMED_DIABETES;
         }
         if ($sd !== null) {
             $sd->save();
             \Audit::add('SecondaryDiagnosis', 'add', $sd->id, null, array('patient_id' => $patient->id));
             $this->secondarydiagnosis_id = $sd->id;
             Yii::app()->user->setFlash('info.info', "Disorder '" . $sd->disorder->term . "' has been added to patient by DR Grading.");
         }
     }
     return parent::beforeSave();
 }
 /**
  * Reset diagnosis data on the event based on the diagnosis set on this element.
  */
 protected function afterSave()
 {
     if (!$this->event->episode->eye && !$this->event->episode->disorder_id) {
         $this->event->episode->setPrincipalDiagnosis($this->disorder_id, $this->eye_id);
         if ($sd = SecondaryDiagnosis::model()->find('patient_id=? and disorder_id=? and eye_id = ?', array($this->event->episode->patient_id, $this->disorder_id, 3))) {
             $this->event->episode->patient->removeDiagnosis($sd->id);
             if (in_array($this->eye_id, array(1, 2))) {
                 $this->event->episode->patient->addDiagnosis($this->disorder_id, $this->eye_id == 1 ? 2 : 1);
             }
         }
     } else {
         if (!SecondaryDiagnosis::model()->find('patient_id=? and disorder_id=? and eye_id in (' . $this->eye_id . ',3)', array($this->event->episode->patient_id, $this->disorder_id))) {
             if (!Episode::model()->find('patient_id=? and disorder_id=? and eye_id in (' . $this->eye_id . ',3)', array($this->event->episode->patient_id, $this->disorder_id))) {
                 $this->event->episode->patient->addDiagnosis($this->disorder_id, $this->eye_id);
             }
         }
     }
     return parent::afterSave();
 }