public static function getPaymentHistory(array $filters) { $ret = array(); $iterator = new PostingJournalIterator(); $iterator->setFilters($filters); $ret[] = $iterator; $iterator = new PaymentIterator(); $iterator->setFilters($filters); $ret[] = $iterator; $iterator = new WriteOffIterator(); $iterator->setFilters($filters); $ret[] = $iterator; return $ret; }
protected function _generateXMLStatements(SimpleXMLElement $xml, $claimId) { $iterator = new ClaimLineIterator(); $iterator->setFilters(array('claimId' => $claimId)); $visitId = null; $totalPayments = 0; $totalCharges = 0; $claims = array(); foreach ($iterator as $claimLine) { $claimLineId = (int) $claimLine->claimLineId; $visitId = (int) $claimLine->visitId; $payerId = (int) $claimLine->insuranceProgramId; $procedureCode = $claimLine->procedureCode; $charges = (double) $claimLine->baseFee; $totalCharges += $charges; if (!isset($visit)) { $visit = new Visit(); $visit->visitId = $visitId; $visit->populate(); } if (!isset($patientName)) { $patientId = (int) $visit->patientId; $patient = new Patient(); $patient->personId = $patientId; $patient->populate(); $patientName = $patient->person->firstName . ' ' . $patient->person->middleName . ' ' . $patient->person->lastName; } if (!isset($providerName)) { $providerId = (int) $visit->providerId; $provider = new Provider(); $provider->personId = $providerId; $provider->populate(); $providerName = $provider->person->firstName . ' ' . $provider->person->middleName . ' ' . $provider->person->lastName; } $claim = array(); $claim['date'] = date('m/d/Y', strtotime($claimLine->dateTime)); $claim['patient'] = $patientName; $claim['provider'] = $providerName; $claim['description'] = $claimLine->procedure; $claim['charges'] = number_format($charges, 2); $claim['credits'] = ''; if (!isset($claims[$visitId])) { $claims[$visitId] = array(); } $claims[$visitId][] = $claim; } if ($visitId === null) { return; } $miscCharge = new MiscCharge(); $iterator = $miscCharge->getIteratorByVisitId($visitId); foreach ($iterator as $charge) { $amount = (double) $charge->amount; $totalCharges += $amount; $claim = array(); $claim['date'] = date('m/d/Y', strtotime($charge->chargeDate)); $claim['patient'] = $patientName; $claim['provider'] = $providerName; $description = $charge->chargeType; $title = $charge->title; if (strlen($title) > 0) { $description .= ': ' . $title; } $claim['description'] = $description; $claim['charges'] = number_format($amount, 2); $claim['credits'] = ''; $id = (int) $charge->miscChargeId; if (!isset($claims[$id])) { $claims[$id] = array(); } $claims[$id][] = $claim; } $iterator = new PostingJournalIterator(); $iterator->setFilters(array('visitId' => $visitId)); foreach ($iterator as $journal) { $amount = (double) $journal->amount; $totalPayments += $amount; $claim = array(); $claim['date'] = date('m/d/Y', strtotime($journal->datePosted)); $claim['patient'] = $patientName; $claim['provider'] = $providerName; $claim['description'] = $journal->note; $claim['charges'] = ''; $claim['credits'] = number_format($amount, 2); $id = (int) $journal->postingJournalId; if (!isset($claims[$id])) { $claims[$id] = array(); } $claims[$id][] = $claim; } $iterator = new WriteOffIterator(); $iterator->setFilters(array('visitId' => $visitId)); foreach ($iterator as $writeoff) { $amount = (double) $writeoff->amount; $totalPayments += $amount; $claim = array(); $claim['date'] = date('m/d/Y', strtotime($writeoff->timestamp)); $claim['patient'] = $patientName; $claim['provider'] = $providerName; $claim['description'] = $writeoff->title; $claim['charges'] = ''; $claim['credits'] = number_format($amount, 2); $id = (int) $writeoff->writeOffId; if (!isset($claims[$id])) { $claims[$id] = array(); } $claims[$id][] = $claim; } $practiceId = (int) $visit->practiceId; if (!$practiceId > 0) { $practiceId = (int) $provider->person->primaryPracticeId; } $practice = new Practice(); $practice->practiceId = $practiceId; $practice->populate(); $practiceName = $practice->name; $practicePrimaryLine1 = $practice->primaryAddress->line1; $practicePrimaryCityStateZip = $practice->primaryAddress->city . ', ' . $practice->primaryAddress->state . ' ' . $practice->primaryAddress->postalCode; $practiceMainPhone = $practice->mainPhone->number; $xmlPractice = $xml->addChild('practice'); $this->_addChild($xmlPractice, 'name', $practiceName); $this->_addChild($xmlPractice, 'primaryLine1', $practicePrimaryLine1); $this->_addChild($xmlPractice, 'primaryCityStateZip', $practicePrimaryCityStateZip); $this->_addChild($xmlPractice, 'mainPhone', $practiceMainPhone); $insuredRelationship = InsuredRelationship::filterByPayerPersonIds($payerId, $patientId); $subscriberId = (int) $insuredRelationship->subscriberId; if ($subscriberId > 0) { $subscriber = $insuredRelationship->subscriber; } else { $subscriber = $insuredRelationship->person; } $xmlSubscriber = $xml->addChild('subscriber'); $subscriberName = $subscriber->firstName . ' ' . $subscriber->middleName . ' ' . $subscriber->lastName; $this->_addChild($xmlSubscriber, 'name', $subscriberName); $address = $subscriber->address; $this->_addChild($xmlSubscriber, 'line1', $address->line1); $subscriberCityStateZip = $address->city . ', ' . $address->state . ' ' . $address->postalCode; $this->_addChild($xmlSubscriber, 'cityStateZip', $subscriberCityStateZip); $xmlBiller = $xml->addChild('biller'); $this->_addChild($xmlBiller, 'name', $practiceName); $this->_addChild($xmlBiller, 'line1', $practicePrimaryLine1); $this->_addChild($xmlBiller, 'cityStateZip', $practicePrimaryCityStateZip); $xmlClaims = $xml->addChild('claims'); $claim = array(); $claim['date'] = ' '; $claim['patient'] = ' '; $claim['provider'] = ' '; $claim['description'] = ' '; $claim['charges'] = ' '; $claim['credits'] = ' '; ksort($claims); $claims = array_pad($claims, 12, array($claim)); foreach ($claims as $key => $values) { foreach ($values as $claim) { $xmlClaimsDetails = $xmlClaims->addChild('details'); $this->_addChild($xmlClaimsDetails, 'date', $claim['date']); $this->_addChild($xmlClaimsDetails, 'patientName', $claim['patient']); $this->_addChild($xmlClaimsDetails, 'providerName', $claim['provider']); $this->_addChild($xmlClaimsDetails, 'description', $claim['description']); $this->_addChild($xmlClaimsDetails, 'charges', $claim['charges']); $this->_addChild($xmlClaimsDetails, 'credits', $claim['credits']); } } $date = date('m/d/Y'); $accountNumber = $patient->recordNumber; $totalOutstanding = $totalCharges - $totalPayments; $pendingInsurance = 0; $amount = $totalOutstanding - $pendingInsurance; $patientResponsibility = $amount; $current = $amount; $pastDue = 0; $amountDue = $amount; $xmlClaimsInfo = $xmlClaims->addChild('info'); $this->_addChild($xmlClaimsInfo, 'statement', $date); $this->_addChild($xmlClaimsInfo, 'accountNo', $accountNumber); $this->_addChild($xmlClaimsInfo, 'amount', number_format($amountDue, 2)); $xmlClaimsSummary = $xmlClaims->addChild('summary'); $this->_addChild($xmlClaimsSummary, 'accountNumber', $accountNumber); $this->_addChild($xmlClaimsSummary, 'totalOutstanding', number_format($totalOutstanding, 2)); $this->_addChild($xmlClaimsSummary, 'patientResponsibility', number_format($patientResponsibility, 2)); $this->_addChild($xmlClaimsSummary, 'pendingInsurance', number_format($pendingInsurance, 2)); $this->_addChild($xmlClaimsSummary, 'current', number_format($current, 2)); $this->_addChild($xmlClaimsSummary, 'pastDue', number_format($pastDue, 2)); $this->_addChild($xmlClaimsSummary, 'amountDue', number_format($amountDue, 2)); file_put_contents('/tmp/claims.xml', $xml->asXML()); }