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); }
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; }
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; }