Exemple #1
0
 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();
         }
     }
 }