public function getAccountDetails() { $visitId = (int) $this->encounter_id; $ret = array('claimFiles' => array('details' => array(), 'totals' => array()), 'charges' => array('details' => array(), 'totals' => array()), 'miscCharges' => array('details' => array(), 'totals' => array()), 'payments' => array('details' => array(), 'totals' => array()), 'writeOffs' => array('details' => array(), 'totals' => array())); $totalBilled = 0; $totalPaid = 0; $totalWO = 0; $totalBalance = 0; foreach (ClaimFile::listClaims(array('visitId' => $visitId)) as $data) { $claimFile = $data['claimFile']; $totalBilled += (double) $claimFile->billed; $totalPaid += (double) $claimFile->paid; $totalWO += (double) $claimFile->writeOff; $totalBalance += (double) $claimFile->balance; $ret['claimFiles']['details'][] = $data; } $ret['claimFiles']['totals'] = array('billed' => $totalBilled, 'paid' => $totalPaid, 'writeOff' => $totalWO, 'balance' => $totalBalance); $totalBilled = 0; if ($this->closed) { $iterator = ClaimLine::mostRecentClaims($visitId); foreach ($iterator as $claimLine) { $totalBilled += (double) $claimLine->baseFee; $ret['charges']['details'][] = $claimLine; } } else { $fees = $this->calculateFees(); $totalBilled += $fees['total']; $totalWO += $fees['discounted']; $discount = $fees['total'] - $fees['discounted']; if ($discount < 0) { $discount = 0; } $claimLine = new ClaimLine(); $claimLine->baseFee = $fees['total']; $claimLine->adjustedFee = $fees['discounted']; $claimLine->visitId = $visitId; $claimLine->dateTime = $this->date_of_treatment; $claimLine->insuranceProgramId = $this->activePayerId; $claimLine->enteredBy = $this->getEnteredBy(); $ret['charges']['details'][] = $claimLine; if ($discount > 0) { $writeOff = new WriteOff(); $writeOff->amount = $discount; $writeOff->writeOffId = time(); $writeOff->payerId = InsuranceProgram::lookupSystemId('Discounts'); // ID of System->Discounts $writeOff->timestamp = $this->date_of_treatment; $writeOff->userId = $this->last_change_user_id > 0 ? $this->last_change_user_id : $this->created_by_user_id; $ret['writeOffs']['details'][] = $writeOff; } } $ret['charges']['totals'] = array('billed' => $totalBilled, 'paid' => 0, 'writeOff' => 0, 'balance' => 0); // misc charges $miscCharge = new MiscCharge(); $totalBilled = 0; foreach ($miscCharge->getIteratorByVisitId($visitId) as $row) { $totalBilled += (double) $row->amount; $ret['miscCharges']['details'][] = $row; } $ret['miscCharges']['totals'] = array('billed' => $totalBilled, 'paid' => 0, 'writeOff' => 0, 'balance' => 0); $iterators = ClaimLine::getPaymentHistory(array('visitId' => $visitId, 'unposted' => true)); $totalPaid = 0; $totalWO = 0; foreach ($iterators as $iterator) { foreach ($iterator as $item) { if ($item instanceof PostingJournal) { $totalPaid += (double) $item->amount; $ret['payments']['details'][] = $item; } else { if ($item instanceof Payment) { $totalPaid += (double) $item->unallocated; $ret['payments']['details'][] = $item; } else { $totalWO += (double) $item->amount; $ret['writeOffs']['details'][] = $item; } } } } // payments $ret['payments']['totals'] = array('billed' => 0, 'paid' => $totalPaid, 'writeOff' => 0, 'balance' => 0); // writeoffs $ret['writeOffs']['totals'] = array('billed' => 0, 'paid' => 0, 'writeOff' => $totalWO, 'balance' => 0); return $ret; }
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 function inquireAction() { $visitIds = $this->_getParam('ids'); $data = array(); foreach (explode(',', $visitIds) as $visitId) { $visitId = (int) $visitId; $data[$visitId] = ClaimFile::inquire($visitId); } $json = Zend_Controller_Action_HelperBroker::getStaticHelper('json'); $json->suppressExit = true; $json->direct($data); }