public function getAccountSummary() { $visitId = (int) $this->visitId; $total = 0; $billed = 0; $writeoff = 0; $balance = 0; $baseFee = 0; $adjustedFee = 0; $miscCharge = MiscCharge::total(array('visitId' => $visitId)); $payment = Payment::total(array('visitId' => $visitId)); $payment += Payment::unpostedTotal($visitId); $writeoff += WriteOff::total(array('visitId' => $visitId)); if ($this->closed) { $iterator = ClaimLine::mostRecentClaims($visitId); foreach ($iterator as $claimLine) { $baseFee += (double) $claimLine->baseFee; $adjustedFee += (double) $claimLine->adjustedFee; } } else { $fees = $this->calculateFees(); $baseFee += $fees['total']; $adjustedFee = $fees['discounted']; if (!$writeoff > 0 && $adjustedFee > 0) { $writeoff += $baseFee - $adjustedFee; } } $total = $baseFee + $miscCharge; $billed = $miscCharge; if ($adjustedFee > 0) { $billed += $adjustedFee; } if (!$billed > 0) { $billed = $total; } $balance = abs($total) - ($payment + $writeoff); if ($balance == $total) { $balance = $billed; } // use total billed if balance equals to total $ret = array(); $ret['total'] = $total; $ret['billed'] = $billed; $ret['payment'] = $payment; $ret['balance'] = $balance; $ret['writeoff'] = $writeoff; $ret['baseFee'] = $baseFee; $ret['adjustedFee'] = $adjustedFee; $ret['miscCharge'] = $miscCharge; if (isset($claimLine)) { $ret['claimLine'] = $claimLine; } return $ret; }
protected function _sendToPayer($claimId, $payerId) { $id = WebVista_Model_ORM::nextSequenceId('claimSequences'); $userId = (int) Zend_Auth::getInstance()->getIdentity()->personId; $iterator = new ClaimLineIterator(); $iterator->setFilters(array('claimId' => (int) $claimId)); $visits = array(); //$discountPayerId = InsuranceProgram::lookupSystemId('Discounts'); // ID of System->Discounts foreach ($iterator as $claimLine) { $oldPayerId = (int) $claimLine->insuranceProgramId; $claimLine->claimLineId = 0; $claimLine->claimId = $id; $claimLine->insuranceProgramId = (int) $payerId; $claimLine->dateTime = date('Y-m-d H:i:s'); $oldBaseFee = (double) $claimLine->baseFee; $visitId = (int) $claimLine->visitId; if (!isset($visits[$visitId])) { $visit = new Visit(); $visit->visitId = $visitId; $visit->populate(); $visits[$visitId] = $visit; } $visit = $visits[$visitId]; // recalculates baseFee for new payer $claimLine->recalculateBaseFee($visit); $newBaseFee = (double) $claimLine->baseFee; $claimLine->persist(); // if new amount billed is less than than last amount billed then a writeoff is added to account for the difference if ($newBaseFee < $oldBaseFee) { $diff = $oldBaseFee - $newBaseFee; // add writeoffs $writeOff = new WriteOff(); $writeOff->personId = (int) $visit->patientId; $writeOff->claimLineId = $claimLine->claimLineId; $writeOff->visitId = $visitId; $writeOff->appointmentId = $visit->appointmentId; $writeOff->amount = $diff; $writeOff->userId = $userId; $writeOff->timestamp = date('Y-m-d H:i:s'); $writeOff->title = ''; $writeOff->payerId = $oldPayerId; $writeOff->persist(); } } }