function processAddVisitAction()
 {
     $visitParams = $this->_getParam('visit');
     $visitParams['created_by_user_id'] = (int) Zend_Auth::getInstance()->getIdentity()->personId;
     $visitParams['date_of_treatment'] = date('Y-m-d');
     $visitParams['timestamp'] = date('Y-m-d h:i:s');
     $visit = new Visit();
     $visit->populateWithArray($visitParams);
     $visit->persist();
     $msg = __("Visit added successfully.");
     $data = array();
     $data['msg'] = $msg;
     $data['visitId'] = $visit->encounter_id;
     $json = Zend_Controller_Action_HelperBroker::getStaticHelper('json');
     $json->suppressExit = true;
     $json->direct($data);
 }
 protected function _processSetVisit($closed = null, $void = null)
 {
     $visitParams = $this->_getParam('visit');
     $visitParams['lastChangeUserId'] = (int) Zend_Auth::getInstance()->getIdentity()->personId;
     //$visitParams['timestamp'] = date('Y-m-d h:i:s');
     if ($closed !== null) {
         $visitParams['closed'] = (int) $closed;
     }
     $visit = new Visit();
     $visit->visitId = (int) $visitParams['visitId'];
     $data = 'Visit ID ' . $visit->visitId . ' is invalid';
     if ($visit->populate()) {
         if ($void !== null) {
             $visit->void = (int) $void;
             if ($visit->void && $visit->hasPayments()) {
                 $error = 'Cannot void visit with payments';
             }
         } else {
             $visit->populateWithArray($visitParams);
         }
         if (isset($error)) {
             $data = $error;
         } else {
             $visit->persist();
             $data = $this->_generateVisitRowData($visit);
         }
     }
     $json = Zend_Controller_Action_HelperBroker::getStaticHelper('json');
     $json->suppressExit = true;
     $json->direct($data);
 }
Example #3
0
 public static function listClaims(array $filters)
 {
     $db = Zend_Registry::get('dbAdapter');
     $sqlSelect = $db->select()->from('claimFiles')->join('encounter', 'encounter.encounter_id = claimFiles.visitId')->order('claimFiles.dateTime DESC')->order('encounter.appointmentId');
     foreach ($filters as $key => $value) {
         switch ($key) {
             case 'DOSDateRange':
                 $sqlSelect->where("encounter.date_of_treatment BETWEEN '{$value['start']} 00:00:00' AND '{$value['end']} 23:59:59'");
                 break;
             case 'facilities':
                 // practice, building, room
                 if (!is_array($value)) {
                     $value = array($value);
                 }
                 $facilities = array();
                 foreach ($value as $val) {
                     $facilities[] = 'practice_id = ' . (int) $val['practice'] . ' AND building_id = ' . (int) $val['building'] . ' AND room_id = ' . (int) $val['room'];
                 }
                 $sqlSelect->where(implode(' OR ', $facilities));
                 break;
             case 'payers':
                 $payers = array();
                 foreach ($value as $payerId) {
                     $payers[] = (int) $payerId;
                 }
                 $sqlSelect->where('activePayerId IN (' . implode(',', $payers) . ')');
                 break;
             case 'facility':
                 // practice, building, room
                 $sqlSelect->where('encounter.practice_id = ?', (int) $value['practice']);
                 $sqlSelect->where('encounter.building_id = ?', (int) $value['building']);
                 $sqlSelect->where('encounter.room_id = ?', (int) $value['room']);
                 break;
             case 'insurer':
                 $sqlSelect->where('encounter.activePayerId = ?', (int) $value);
                 break;
             case 'visitId':
                 $sqlSelect->where('encounter.encounter_id = ?', (int) $value);
                 break;
             case 'provider':
                 $sqlSelect->where('encounter.treating_person_id = ?', (int) $value);
                 break;
         }
     }
     $columnMeta = array();
     $rows = array();
     $stmt = $db->query($sqlSelect);
     while ($row = $stmt->fetch(PDO::FETCH_NUM)) {
         if (!isset($rows[0])) {
             for ($i = 0, $ctr = count($row); $i < $ctr; $i++) {
                 $columnMeta[$i] = $stmt->getColumnMeta($i);
             }
         }
         $data = array();
         $col = 0;
         foreach ($columnMeta as $i => $meta) {
             $data[$meta['table']][$meta['name']] = $row[$i];
         }
         $claimFile = new ClaimFile();
         $claimFile->populateWithArray($data[$claimFile->_table]);
         $visit = new Visit();
         $visit->populateWithArray($data[$visit->_table]);
         $rows[] = array('claimFile' => $claimFile, 'visit' => $visit);
     }
     return $rows;
 }
Example #4
0
 public static function listCharges(array $filters)
 {
     $db = Zend_Registry::get('dbAdapter');
     $sqlSelect = $db->select()->from('claimLines')->join('encounter', 'encounter.encounter_id = claimLines.visitId', array('SUM(claimLines.baseFee) AS totalBaseFee', 'SUM(claimLines.adjustedFee) AS totalAdjustedFee'))->order('claimLines.dateTime DESC')->order('claimLines.claimId DESC')->order('encounter.appointmentId')->group('encounter.encounter_id');
     $sqlSelect = $db->select()->from('encounter')->order('encounter.date_of_treatment DESC');
     $mscSelect = $db->select()->from('misc_charge', array('misc_charge.misc_charge_id AS id', 'misc_charge.amount AS billed', 'CONCAT(\'0\') AS paid', 'CONCAT(\'0\') AS writeOff', 'CONCAT(\'Misc Charge\') AS payer', 'encounter.date_of_treatment AS dateOfTreatment', 'misc_charge.charge_date AS dateBilled', 'CONCAT(patient.last_name,\', \',patient.first_name,\' \',patient.middle_name) AS patientName', 'CONCAT(\'\') AS facility', 'CONCAT(provider.last_name,\', \',provider.first_name,\' \',provider.middle_name) AS providerName'))->join('encounter', 'encounter.encounter_id = misc_charge.encounter_id')->join(array('patient' => 'person'), 'patient.person_id = encounter.patient_id')->join(array('provider' => 'person'), 'provider.person_id = encounter.treating_person_id')->order('misc_charge.charge_date DESC');
     foreach ($filters as $key => $value) {
         switch ($key) {
             case 'dateRange':
                 $sqlSelect->where("encounter.date_of_treatment BETWEEN '{$value['start']} 00:00:00' AND '{$value['end']} 23:59:59'");
                 $mscSelect->where("encounter.date_of_treatment BETWEEN '{$value['start']} 00:00:00' AND '{$value['end']} 23:59:59'");
                 break;
             case 'facilities':
                 // practice, building, room
                 if (!is_array($value)) {
                     $value = array($value);
                 }
                 $facilities = array();
                 foreach ($value as $val) {
                     $facilities[] = 'encounter.practice_id = ' . (int) $val['practice'] . ' AND encounter.building_id = ' . (int) $val['building'] . ' AND encounter.room_id = ' . (int) $val['room'];
                 }
                 $sqlSelect->where(implode(' OR ', $facilities));
                 $mscSelect->where(implode(' OR ', $facilities));
                 break;
             case 'payers':
                 $payers = array();
                 foreach ($value as $payerId) {
                     $payers[] = (int) $payerId;
                 }
                 $payers = implode(',', $payers);
                 $sqlSelect->where('encounter.activePayerId IN (' . $payers . ')');
                 $mscSelect->where('encounter.activePayerId IN (' . $payers . ')');
                 break;
             case 'facility':
                 // practice, building, room
                 $sqlSelect->where('encounter.practice_id = ?', (int) $value['practice']);
                 $sqlSelect->where('encounter.building_id = ?', (int) $value['building']);
                 $sqlSelect->where('encounter.room_id = ?', (int) $value['room']);
                 // practice, building, room
                 $mscSelect->where('encounter.practice_id = ?', (int) $value['practice']);
                 $mscSelect->where('encounter.building_id = ?', (int) $value['building']);
                 $mscSelect->where('encounter.room_id = ?', (int) $value['room']);
                 break;
             case 'insurer':
                 $sqlSelect->where('encounter.activePayerId = ?', (int) $value);
                 $mscSelect->where('encounter.activePayerId = ?', (int) $value);
                 break;
             case 'visitId':
                 $sqlSelect->where('encounter.encounter_id = ?', (int) $value);
                 $mscSelect->where('encounter.encounter_id = ?', (int) $value);
                 break;
             case 'provider':
                 $value = array($value);
             case 'providers':
                 $providers = array();
                 foreach ($value as $providerId) {
                     $providers[] = (int) $providerId;
                 }
                 $providers = implode(',', $providers);
                 $sqlSelect->where('encounter.treating_person_id IN (' . $providers . ')');
                 $mscSelect->where('encounter.treating_person_id IN (' . $providers . ')');
                 break;
             case 'closed':
                 $sqlSelect->where('encounter.closed = ?', (int) $value);
                 $mscSelect->where('encounter.closed = ?', (int) $value);
                 break;
             case 'void':
                 $sqlSelect->where('encounter.void = ?', (int) $value);
                 $mscSelect->where('encounter.void = ?', (int) $value);
                 break;
         }
     }
     $rows = array();
     $visits = array();
     $payers = array();
     $facilities = array();
     $patients = array();
     $providers = array();
     $stmt = $db->query($sqlSelect);
     $stmt->setFetchMode(Zend_Db::FETCH_ASSOC);
     while ($row = $stmt->fetch()) {
         $visit = new Visit();
         $visit->populateWithArray($row);
         $visitId = (int) $visit->visitId;
         $acct = $visit->accountSummary;
         $paid = $acct['payment'];
         $writeoff = $acct['writeoff'];
         $total = $acct['total'];
         $billed = $acct['billed'];
         $balance = $acct['balance'];
         $payerId = isset($acct['claimLine']) ? $acct['claimLine']->insuranceProgramId : $visit->activePayerId;
         if (!isset($payers[$payerId])) {
             $payers[$payerId] = InsuranceProgram::getInsuranceProgram($payerId);
         }
         $patientId = (int) $visit->patientId;
         if (!isset($patients[$patientId])) {
             $patient = new Patient();
             $patient->personId = $patientId;
             $patient->populate();
             $patients[$patientId] = $patient;
         }
         $facilityId = (int) $visit->roomId;
         if (!isset($facilities[$facilityId])) {
             $facilities[$facilityId] = $visit->facility;
         }
         $providerId = (int) $visit->providerId;
         if (!isset($providers[$providerId])) {
             $provider = new Provider();
             $provider->personId = $providerId;
             $provider->populate();
             $providers[$providerId] = $provider;
         }
         $tmp = array();
         $tmp['id'] = $visitId;
         $tmp['total'] = $total;
         $tmp['billed'] = $billed;
         $tmp['paid'] = $paid;
         $tmp['writeOff'] = $writeoff;
         $tmp['balance'] = $balance;
         $tmp['payer'] = $payers[$payerId];
         $tmp['dateOfTreatment'] = $visit->dateOfTreatment;
         $tmp['dateBilled'] = isset($acct['claimLine']) ? $acct['claimLine']->dateTime : $visit->dateOfTreatment;
         $patientName = $patients[$patientId]->personId > 0 ? $patients[$patientId]->person->displayName : '';
         $tmp['patientName'] = $patientName;
         $tmp['facility'] = $facilities[$facilityId];
         $providerName = $providers[$providerId]->personId > 0 ? $providers[$providerId]->person->displayName : '';
         $tmp['providerName'] = $providerName;
         $rows[] = $tmp;
     }
     $stmt = $db->query($mscSelect);
     $stmt->setFetchMode(Zend_Db::FETCH_ASSOC);
     while ($row = $stmt->fetch()) {
         $row['balance'] = (double) $row['billed'] - ((double) $row['paid'] + (double) $row['writeOff']);
         $rows[] = $row;
     }
     return $rows;
 }