Exemplo n.º 1
0
 function getProviderDisplayName()
 {
     $provider = new Provider();
     $provider->person_id = $this->treating_person_id;
     $provider->populate();
     return $provider->person->getDisplayName();
 }
Exemplo n.º 2
0
 protected function _createAudit($providerId, $personId, $visitId, $type)
 {
     $providerId = (int) $providerId;
     $personId = (int) $personId;
     $visitId = (int) $visitId;
     $audit = array();
     $audit['objectClass'] = 'GenericAccessAudit';
     $audit['objectId'] = $personId . ';' . $visitId;
     $audit['type'] = (int) $type;
     $audit['userId'] = $providerId;
     $audit['patientId'] = $personId;
     $values = array();
     $provider = new Provider();
     $provider->personId = $audit['userId'];
     $provider->populate();
     $values['provider'] = $provider->toArray();
     $patient = new Patient();
     $patient->personId = $personId;
     $patient->populate();
     $values['patient'] = $patient->toArray();
     $values['personId'] = $patient->personId;
     $visit = new Visit();
     $visit->visitId = $visitId;
     $visit->populate();
     $values['visit'] = $visit->toArray();
     $values['visitId'] = $visit->visitId;
     $audit['auditValues'] = $values;
     Audit::persistManualAuditArray($audit);
 }
Exemplo n.º 3
0
 public function __construct(array $data)
 {
     $this->measureNumber = isset($data['measureNumber']) ? (int) $data['measureNumber'] : 0;
     $this->denominator = isset($data['denominator']) ? (int) $data['denominator'] : 0;
     $this->numerator = isset($data['numerator']) ? (int) $data['numerator'] : 0;
     $this->exclusions = isset($data['exclusions']) ? (int) $data['exclusions'] : 0;
     $this->percentage = isset($data['percentage']) ? sprintf('%.2f', $data['percentage']) : 0;
     if (isset($data['visitDateStart'])) {
         $this->visitDateStart = date('m-d-Y', strtotime($data['visitDateStart']));
     } else {
         $this->visitDateStart = date('01-01-Y');
     }
     if (isset($data['visitDateEnd'])) {
         $this->visitDateEnd = date('m-d-Y', strtotime($data['visitDateEnd']));
     } else {
         $this->visitDateEnd = date('12-31-Y');
     }
     $provider = isset($data['provider']) ? $data['provider'] : '';
     if (!$data['provider'] instanceof Provider) {
         $providerId = (int) $provider;
         $provider = new Provider();
         $provider->personId = $providerId;
         $provider->populate();
     }
     $this->provider = $provider;
     if (isset($data['fileNumber'])) {
         $this->fileNumber = (int) $data['fileNumber'];
     }
     if (isset($data['numberOfFiles'])) {
         $this->numberOfFiles = (int) $data['numberOfFiles'];
     }
 }
Exemplo n.º 4
0
 public function __construct($tthis, $context, $data)
 {
     $this->tthis = $tthis;
     $this->context = $context;
     $this->data = $data;
     $year = 0;
     if (isset($tthis->_attributes['year'])) {
         $year = (int) $tthis->_attributes['year'];
     }
     if (!$year > 0) {
         $year = date('Y') - 1;
     }
     // default year to previous
     $this->dateStart = date('Y-m-d', strtotime($year . '-01-01'));
     $this->dateEnd = date('Y-m-d', strtotime($year . '-12-31'));
     $this->providerId = (int) Zend_Auth::getInstance()->getIdentity()->personId;
     $providerId = (int) $this->context;
     if ($providerId > 0) {
         $this->providerId = $providerId;
     }
     $info = array();
     $info['dateStart'] = $this->dateStart;
     $info['dateEnd'] = $this->dateEnd;
     $provider = new Provider();
     $provider->personId = $this->providerId;
     $provider->populate();
     $info['provider'] = $provider;
     self::$info = $info;
 }
Exemplo n.º 5
0
 public function newAction()
 {
     $colIndex = $this->_getParam('colIndex');
     $sessionFilters = $this->_calendarSession->filter;
     if (!isset($sessionFilters->columns[$colIndex])) {
         $msg = __('Cannot generate column with that index, there is no filter defined for that column Index: ') . $colIndex;
         throw new Exception($msg);
     }
     $column = $sessionFilters->columns[$colIndex];
     $providerId = (int) $column['providerId'];
     $this->view->providerId = $providerId;
     $headerText = '';
     if ($providerId > 0) {
         $provider = new Provider();
         $provider->setPersonId($providerId);
         $provider->populate();
         $headerText = $provider->displayName;
     }
     $roomId = 0;
     if (isset($column['roomId'])) {
         $roomId = $column['roomId'];
     }
     $this->view->roomId = $roomId;
     if ($roomId > 0) {
         $room = new Room();
         $room->id = $roomId;
         $room->populate();
         $headerText .= ' -> ' . $room->name;
     }
     if (isset($column['dateFilter'])) {
         $headerText .= " ({$column['dateFilter']})";
     }
     $this->view->headerText = $headerText;
     $templates = array('' => '');
     $templates['tpl1'] = 'Provider 1 Template';
     $templates['tpl2'] = 'Provider 2 Template';
     $templates['tpl3'] = 'Provider 3 Template';
     $this->view->templates = $templates;
     // $this->_calendarSession->filter; calendar filter
     $this->render('new');
 }
 public function transmitEprescriptionAction()
 {
     $medicationId = (int) $this->_getParam('medicationId');
     $medication = new Medication();
     $medication->medicationId = $medicationId;
     $medication->populate();
     //echo $medication->toString();
     //echo $medicationId;
     $data = $medication->toArray();
     $practice = new Practice();
     $practice->practiceId = MainController::getActivePractice();
     $practice->populate();
     $data['practiceName'] = $practice->name;
     $pharmacy = new Pharmacy();
     $pharmacy->pharmacyId = $medication->pharmacyId;
     $pharmacy->populate();
     $data['pharmacy'] = $pharmacy->toArray();
     $prescriber = new Provider();
     $prescriber->personId = $medication->prescriberPersonId;
     $prescriber->populate();
     $prescriber->person->populate();
     $data['prescriber'] = $prescriber->toArray();
     $data['prescriber']['agentFirstName'] = '';
     $data['prescriber']['agentLastName'] = '';
     $data['prescriber']['agentSuffix'] = '';
     $addressIterator = new AddressIterator();
     $addressIterator->setFilters(array('class' => 'person', 'personId' => $prescriber->personId));
     $data['prescriber']['address'] = $addressIterator->first()->toArray();
     $phoneIterator = new PhoneNumberIterator();
     $phoneIterator->setFilters(array('class' => 'person', 'personId' => $prescriber->personId));
     $data['prescriber']['phone'] = $phoneIterator->first()->toArray();
     $patient = new Patient();
     $patient->personId = $medication->personId;
     $patient->populate();
     $data['patient'] = $patient->toArray();
     $phoneIterator->setFilters(array('class' => 'person', 'personId' => $patient->personId));
     $data['patient']['phone'] = $phoneIterator->first()->toArray();
     //var_dump($data);exit;
     $data = $this->makePostArray($data);
     //var_dump($this->makePostArray($data));exit;
     //var_dump($data);exit;
     $transmitEPrescribeURL = Zend_Registry::get('config')->healthcloud->URL;
     $transmitEPrescribeURL .= "SSRX/NewRx?apiKey=" . Zend_Registry::get('config')->healthcloud->apiKey;
     $cookieFile = tempnam(sys_get_temp_dir(), "ssddcookies_");
     $ch = curl_init();
     curl_setopt($ch, CURLOPT_URL, $transmitEPrescribeURL);
     curl_setopt($ch, CURLOPT_POST, TRUE);
     curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
     curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
     curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
     curl_setopt($ch, CURLOPT_COOKIEJAR, $cookieFile);
     curl_setopt($ch, CURLOPT_COOKIEFILE, $cookieFile);
     curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
     curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
     curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
     $output = curl_exec($ch);
     echo $output;
     exit;
 }
Exemplo n.º 7
0
 protected static function _generate4010A1($claimId, array $claim)
 {
     static $ctr = 0;
     static $visits = array();
     static $practices = array();
     static $insurancePrograms = array();
     static $providers = array();
     static $patients = array();
     $claimId = (int) $claimId;
     $claimLine = new ClaimLine();
     $claimLine->populateByClaimId($claimId);
     $visitId = (int) $claimLine->visitId;
     if (!isset($visits[$visitId])) {
         $visit = new Visit();
         $visit->visitId = $visitId;
         $visit->populate();
         $visits[$visitId] = $visit;
     }
     $visit = $visits[$visitId];
     $patientId = (int) $visit->patientId;
     if (!isset($patients[$patientId])) {
         $patient = new Patient();
         $patient->personId = $patientId;
         $patient->populate();
         $patients[$patientId] = $patient;
     }
     $patient = $patients[$patientId];
     $practiceId = (int) $visit->practiceId;
     if (!isset($practices[$practiceId])) {
         $practice = new Practice();
         $practice->practiceId = $practiceId;
         $practice->populate();
         $practices[$practiceId] = $practice;
     }
     $practice = $practices[$practiceId];
     $insuranceProgramId = (int) $visit->activePayerId;
     if (!isset($insurancePrograms[$insuranceProgramId])) {
         $insurance = new InsuranceProgram();
         $insurance->insuranceProgramId = $insuranceProgramId;
         $insurance->populate();
         $insurancePrograms[$insuranceProgramId] = $insurance;
     }
     $insuranceProgram = $insurancePrograms[$insuranceProgramId];
     $providerId = (int) $visit->treatingPersonId;
     if (!isset($providers[$providerId])) {
         $provider = new Provider();
         $provider->personId = $providerId;
         $provider->populate();
         $providers[$providerId] = $provider;
     }
     $provider = $providers[$providerId];
     $billAs = (int) $provider->billAs;
     if ($billAs > 0) {
         $providerId = $billAs;
         if (!isset($providers[$providerId])) {
             $provider = new Provider();
             $provider->personId = $providerId;
             $provider->populate();
             $providers[$providerId] = $provider;
         }
         $provider = $providers[$providerId];
     }
     $subscribers = array();
     $enumeration = new Enumeration();
     $enumeration->populateByUniqueName(InsuranceProgram::INSURANCE_ENUM_NAME);
     $enumerationClosure = new EnumerationClosure();
     foreach ($enumerationClosure->getAllDescendants($enumeration->enumerationId, 1, true) as $enum) {
         $rowset = $enumerationClosure->getAllDescendants($enum->enumerationId, 1, true);
         if ($enum->key == InsuranceProgram::INSURANCE_SUBSCRIBER_ENUM_KEY) {
             foreach ($rowset as $row) {
                 $subscribers[$row->key] = $row->name;
             }
             break;
         }
     }
     $insuredRelationship = new InsuredRelationship();
     $db = Zend_Registry::get('dbAdapter');
     $sqlSelect = $db->select()->from($insuredRelationship->_table)->where('insurance_program_id = ?', (int) $insuranceProgram->insuranceProgramId)->where('person_id = ?', (int) $patientId)->where('active = 1')->order('program_order')->limit(1);
     if ($row = $db->fetchRow($sqlSelect)) {
         $insuredRelationship->populateWithArray($row);
     }
     $subs = $insuredRelationship->subscriber;
     $subscriberAddr = $subs->address;
     $relationship = null;
     $relationshipCode = $insuredRelationship->subscriberToPatientRelationship;
     if (isset($subscribers[$relationshipCode])) {
         $relationship = $subscribers[$relationshipCode];
     }
     if ($relationship === null) {
         $relationship = 'Self';
         $relationshipCode = 18;
         $subs = new Person();
         $subs->personId = $insuredRelationship->personId;
         $subs->populate();
     }
     $subscriber = array('id' => (int) $subs->personId, 'relationship_code' => $relationshipCode, 'group_number' => $insuredRelationship->groupNumber, 'group_name' => $insuredRelationship->groupName, 'relationship' => $relationship, 'last_name' => $subs->lastName, 'first_name' => $subs->firstName, 'middle_name' => $subs->middleName, 'address' => array('line1' => $subscriberAddr->line1, 'line2' => $subscriberAddr->line2, 'city' => $subscriberAddr->city, 'state' => $subscriberAddr->state, 'zip' => $subscriberAddr->zipCode), 'date_of_birth' => date('Ymd', strtotime($subs->dateOfBirth)), 'gender' => $subs->gender, 'contract_type_code' => '', 'contract_amount' => '', 'contract_percent' => '', 'contract_code' => '', 'contract_discount_percent' => '', 'contract_version' => '');
     $practiceAddr = $practice->primaryAddress;
     $room = new Room();
     $room->roomId = (int) $visit->roomId;
     $room->populate();
     $facility = $room->building;
     $phoneNumber = PhoneNumber::autoFixNumber($practice->mainPhone->number);
     $phoneLen = strlen($phoneNumber);
     if ($phoneLen < 10) {
         $phoneNumber = str_pad($phoneNumber, 10, '0', STR_PAD_LEFT);
     } else {
         if ($phoneLen > 10) {
             $phoneNumber = substr($phoneNumber, -10);
         }
     }
     $identifierType = '';
     $identifier = $practice->identifier;
     if (strlen($identifier) > 0) {
         $identifierType = 'XX';
     }
     //24';
     $data = array('hlCount' => ++$ctr);
     $data['practice'] = array('name' => $practice->name, 'identifier_type' => $identifierType, 'identifier' => $identifier, 'address' => array('line1' => $practiceAddr->line1, 'line2' => $practiceAddr->line2, 'city' => $practiceAddr->city, 'state' => $practiceAddr->state, 'zip' => $practiceAddr->zipCode), 'phoneNumber' => $phoneNumber);
     $data['treating_facility'] = array('identifier' => $facility->identifier);
     $dateOfTreatment = date('Ymd', strtotime($visit->dateOfTreatment));
     $payer2Id = $insuranceProgram->insuranceProgramId;
     if (strlen($payer2Id) < 2) {
         $payer2Id = str_pad($payer2Id, 2, '0', STR_PAD_LEFT);
     }
     $identifierType = '';
     $identifier = $provider->person->identifier;
     if (strlen($identifier) > 0) {
         $identifierType = 'XX';
     }
     //34';
     $claimData = array('claim' => $claim, 'patient' => array('date_of_initial_treatment' => $dateOfTreatment, 'date_of_onset' => $dateOfTreatment, 'comment_type' => '', 'comment' => ''), 'treating_facility' => array('facility_code' => $facility->facilityCodeId, 'name' => $facility->name, 'address' => array('line1' => $facility->line1, 'line2' => $facility->line2, 'city' => $facility->city, 'state' => $facility->state, 'zip' => $facility->zipCode)), 'provider' => array('signature_on_file' => 'Y', 'accepts_assignment' => 'A', 'last_name' => $provider->person->lastName, 'first_name' => $provider->person->firstName, 'identifier_type' => $identifierType, 'identifier' => $identifier, 'identifier_2' => ''), 'billing_facility' => array('clia_number' => ''), 'subscriber' => $subscriber, 'clearing_house' => array('credit_max_amount' => '', 'repricing_method' => '', 'allowed_amount' => '', 'savings_amount' => '', 'identifier' => '', 'rate' => '', 'apg_code' => '', 'apg_amount' => '', 'reject_code' => '', 'compliance_code' => '', 'exception_code' => ''), 'referring_provider' => array('last_name' => '', 'first_name' => '', 'referral_type' => '', 'identifier_type' => '', 'identifier' => '', 'taxonomy_code' => ''), 'supervising_provider' => array('last_name' => '', 'first_name' => '', 'identifier_type' => '', 'identifier' => ''), 'payer2' => array('id' => $payer2Id, 'name' => $insuranceProgram->name));
     $clm = array();
     $iterator = new ClaimLineIterator();
     $iterator->setFilters(array('claimId' => $claimId));
     foreach ($iterator as $row) {
         $baseFee = (double) $row->baseFee;
         $adjustedFee = (double) $row->adjustedFee;
         $paid = (double) $row->paid;
         $billed = $row->totalMiscCharge;
         if ($baseFee > 0) {
             $billed += $baseFee - $adjustedFee;
         }
         $balance = abs($billed) - $paid;
         $clm[] = array('claim' => $claimData['claim'], 'patient' => $claimData['patient'], 'claim_line' => array('amount' => $balance, 'diagnosis1' => preg_replace('/[\\.]/', '', $row->diagnosisCode1), 'diagnosis2' => preg_replace('/[\\.]/', '', $row->diagnosisCode2), 'diagnosis3' => preg_replace('/[\\.]/', '', $row->diagnosisCode3), 'diagnosis4' => preg_replace('/[\\.]/', '', $row->diagnosisCode4), 'diagnosis5' => preg_replace('/[\\.]/', '', $row->diagnosisCode5), 'diagnosis6' => preg_replace('/[\\.]/', '', $row->diagnosisCode6), 'diagnosis7' => preg_replace('/[\\.]/', '', $row->diagnosisCode7), 'diagnosis8' => preg_replace('/[\\.]/', '', $row->diagnosisCode8), 'procedure' => $row->procedureCode, 'modifier1' => $row->modifier1, 'modifier2' => $row->modifier2, 'modifier3' => $row->modifier3, 'modifier4' => $row->modifier4, 'units' => str_replace('.00', '', $row->units), 'date_of_treatment' => $dateOfTreatment, 'clia_number' => ''), 'treating_facility' => $claimData['treating_facility'], 'provider' => $claimData['provider'], 'billing_facility' => $claimData['billing_facility'], 'subscriber' => $subscriber, 'clearing_house' => $claimData['clearing_house'], 'referring_provider' => $claimData['referring_provider'], 'supervising_provider' => $claimData['supervising_provider'], 'payer2' => $claimData['payer2']);
     }
     $hl2 = array();
     $hl2[] = array('hlCount' => $ctr, 'hlCount2' => ++$ctr, 'payer' => array('responsibility' => 'P'), 'subscriber' => $subscriber, 'patient' => array('weight' => '', 'last_name' => $patient->lastName, 'first_name' => $patient->firstName), 'responsible_party' => array('last_name' => '', 'first_name' => '', 'address' => array('line1' => '', 'line2' => '', 'city' => '', 'state' => '', 'zip' => '')), 'CLM' => $clm);
     $data['HL2'] = $hl2;
     return $data;
 }
Exemplo n.º 8
0
 public static function handlereFaxSourceData(Audit $audit)
 {
     $data = array();
     if ($audit->objectClass != 'ESignature') {
         return $data;
     }
     $eSignature = new ESignature();
     $eSignature->eSignatureId = $audit->objectId;
     $eSignature->populate();
     if ($eSignature->objectClass != 'Medication') {
         return $data;
     }
     $data['_audit'] = $audit;
     $medication = new Medication();
     $medication->medicationId = $eSignature->objectId;
     $medication->populate();
     $data['transmissionId'] = (int) $medication->medicationId;
     $data['recipients'] = array();
     $patient = new Patient();
     $patient->personId = $medication->personId;
     $patient->populate();
     $pharmacyId = $patient->defaultPharmacyId;
     $provider = new Provider();
     $provider->personId = $medication->prescriberPersonId;
     $provider->populate();
     // recipients MUST be a pharmacy?
     $pharmacy = new Pharmacy();
     $pharmacy->pharmacyId = $pharmacyId;
     $pharmacy->populate();
     //$data['recipients'][] = array('fax'=>$pharmacy->Fax,'name'=>$pharmacy->StoreName,'company'=>$pharmacy->StoreName);
     // temporarily comment out the above recipient and use the hardcoded recipient
     $data['recipients'][] = array('fax' => '6022976632', 'name' => 'Jay Walker', 'company' => 'ClearHealth Inc.');
     $prescription = new Prescription();
     $prescription->prescriberName = $provider->firstName . ' ' . $provider->lastName . ' ' . $provider->title;
     $prescription->prescriberStateLicenseNumber = $provider->stateLicenseNumber;
     $prescription->prescriberDeaNumber = $provider->deaNumber;
     // Practice Info
     $primaryPracticeId = $provider->primaryPracticeId;
     $practice = new Practice();
     $practice->id = $primaryPracticeId;
     $practice->populate();
     $address = $practice->primaryAddress;
     $prescription->practiceName = $practice->name;
     $prescription->practiceAddress = $address->line1 . ' ' . $address->line2;
     $prescription->practiceCity = $address->city;
     $prescription->practiceState = $address->state;
     $prescription->practicePostalCode = $address->postalCode;
     $attachment = new Attachment();
     $attachment->attachmentReferenceId = $provider->personId;
     $attachment->populateWithAttachmentReferenceId();
     if ($attachment->attachmentId > 0) {
         $db = Zend_Registry::get('dbAdapter');
         $sqlSelect = $db->select()->from('attachmentBlobs')->where('attachmentId = ?', (int) $attachment->attachmentId);
         if ($row = $db->fetchRow($sqlSelect)) {
             $tmpFile = tempnam('/tmp', 'ch30_sig_');
             file_put_contents($tmpFile, $row['data']);
             $signatureFile = $tmpFile;
             $prescription->prescriberSignature = $signatureFile;
         }
     }
     $prescription->patientName = $patient->lastName . ', ' . $patient->firstName;
     $address = $patient->homeAddress;
     $prescription->patientAddress = $address->line1 . ' ' . $address->line2;
     $prescription->patientCity = $address->city;
     $prescription->patientState = $address->state;
     $prescription->patientPostalCode = $address->postalCode;
     $prescription->patientDateOfBirth = date('m/d/Y', strtotime($patient->dateOfBirth));
     $prescription->medicationDatePrescribed = date('m/d/Y', strtotime($medication->datePrescribed));
     $prescription->medicationDescription = $medication->description;
     $prescription->medicationComment = $medication->comment;
     $prescription->medicationQuantity = $medication->quantity;
     $prescription->medicationRefills = $medication->refills;
     $prescription->medicationDirections = $medication->directions;
     $prescription->medicationSubstitution = $medication->substitution;
     $prescription->create();
     $filename = $prescription->imageFile;
     $fileType = pathinfo($filename, PATHINFO_EXTENSION);
     $data['files'] = array();
     $contents = file_get_contents($filename);
     unlink($filename);
     $data['files'][] = array('contents' => base64_encode($contents), 'type' => $fileType);
     return $data;
 }
 public function listPatientVisitTypesAction()
 {
     $patientId = (int) $this->_getParam('patientId');
     $visitId = (int) $this->_getParam('visitId');
     $rows = array();
     if ($patientId > 0) {
         $patientVisitTypeIterator = new PatientVisitTypeIterator();
         $patientVisitTypeIterator->setFilters(array('patientId' => $patientId, 'visitId' => $visitId));
         foreach ($patientVisitTypeIterator as $visitType) {
             $provider = new Provider();
             $provider->personId = $visitType->providerId;
             $provider->populate();
             $tmp = array();
             $tmp['id'] = $visitType->providerId;
             $tmp['data'][] = $provider->displayName;
             $tmp['data'][] = $visitType->isPrimary ? __('Primary') : '';
             $rows[] = $tmp;
         }
     }
     $data = array();
     $data['rows'] = $rows;
     $json = Zend_Controller_Action_HelperBroker::getStaticHelper('json');
     $json->suppressExit = true;
     $json->direct($data);
 }
Exemplo n.º 10
0
 protected function _syncLocation(EPrescriber $ePrescriber)
 {
     $ret = true;
     $dateActiveStart = strtotime($ePrescriber->dateActiveStart);
     $dateActiveEnd = strtotime($ePrescriber->dateActiveEnd);
     $serviceLevel = (int) $ePrescriber->serviceLevel;
     $personId = (int) $ePrescriber->providerId;
     $provider = new Provider();
     $provider->personId = $personId;
     $provider->populate();
     $provider->serviceLevel = $serviceLevel;
     if ($dateActiveStart > 0 && $dateActiveEnd > 0) {
         $provider->dateActiveStart = date('Y-m-d H:i:s', $dateActiveStart);
         $provider->dateActiveEnd = date('Y-m-d H:i:s', $dateActiveEnd);
     }
     $person = new Person();
     $person->personId = $personId;
     $person->populate();
     $practice = new Practice();
     $practice->practiceId = $person->primaryPracticeId;
     $practice->populate();
     $data = array();
     $data['deaNumber'] = $provider->deaNumber;
     $data['stateLicenseNumber'] = $provider->stateLicenseNumber;
     //$data['portalId'] = Zend_Registry::get('config')->sureScripts->portalId;
     //$data['accountId'] = Zend_Registry::get('config')->sureScripts->accountId;
     $data['clinicName'] = '' . $practice->name;
     $data['lastName'] = $person->lastName;
     $data['firstName'] = $person->firstName;
     $address = $ePrescriber->building;
     $data['addressLine1'] = $address->line1;
     $data['addressLine2'] = $address->line2;
     $data['addressCity'] = $address->city;
     $data['addressState'] = $address->state;
     $data['addressZipCode'] = $address->zipCode;
     $data['email'] = $person->email;
     $data['phones'] = array(array('number' => PhoneNumber::autoFixNumber($address->phoneNumber), 'type' => 'TE'), array('number' => PhoneNumber::autoFixNumber($address->fax), 'type' => 'FX'));
     $data['specialtyCode'] = $provider->specialty;
     $specialtyQualifier = '';
     if (strlen($provider->specialty) > 0) {
         $specialtyQualifier = 'AM';
     }
     $data['specialtyQualifier'] = $specialtyQualifier;
     $data['serviceLevel'] = $provider->serviceLevel;
     $now = strtotime('now');
     $days30 = strtotime('+30 days', $now);
     $activeStartTime = gmdate("Y-m-d\\TH:i:s.0", $now) . 'Z';
     $activeEndTime = gmdate("Y-m-d\\TH:i:s.0", $days30) . 'Z';
     $data['activeStartTime'] = $provider->dateActiveStartZ;
     $data['activeEndTime'] = $provider->dateActiveEndZ;
     $dateActiveEnd = strtotime(date('Y-m-d', strtotime($provider->dateActiveEndZ)));
     if ($dateActiveEnd <= strtotime(date('Y-m-d'))) {
         // to disable a prescriber ActiveEndTime must be set to current date and ServiceLevel must be set to zero.
         $data['activeEndTime'] = date('Y-m-d');
         $data['serviceLevel'] = 0;
         $provider->serviceLevel = 0;
     }
     $provider->persist();
     $identifierType = $provider->identifierType;
     if (strlen($identifierType) > 0) {
         $data[$identifierType] = $provider->identifier;
     }
     $messaging = new Messaging();
     //$messaging->messagingId = '';
     $type = 'add';
     $messaging->messageType = 'AddPrescriber';
     if (strlen($ePrescriber->SSID) > 0) {
         $messaging->messageType = 'UpdatePrescriber';
         $data['SPI'] = $ePrescriber->SSID;
         $type = 'update';
     } else {
         if (strlen($provider->sureScriptsSPI) > 0) {
             $messaging->messageType = 'AddPrescriberLocation';
             $data['SPI'] = substr($provider->sureScriptsSPI, 0, -3);
             $type = 'addLocation';
         }
     }
     // backupPortalId must be supplied if type is updateLocation
     $messaging->populate();
     //$messaging->objectId = '';
     //$messaging->objectClass = '';
     $messaging->status = 'Sending';
     $messaging->note = 'Sending prescriber data';
     $messaging->dateStatus = date('Y-m-d H:i:s');
     //$messaging->auditId = '';
     $messaging->persist();
     $query = http_build_query(array('type' => $type, 'data' => $data));
     $ch = curl_init();
     $ePrescribeURL = Zend_Registry::get('config')->healthcloud->URL;
     $ePrescribeURL .= 'ss-manager.raw/edit-prescriber?apiKey=' . Zend_Registry::get('config')->healthcloud->apiKey;
     curl_setopt($ch, CURLOPT_URL, $ePrescribeURL);
     curl_setopt($ch, CURLOPT_POST, true);
     curl_setopt($ch, CURLOPT_POSTFIELDS, $query);
     curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
     curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
     curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
     $output = curl_exec($ch);
     trigger_error('OUTPUT: ' . $output, E_USER_NOTICE);
     $error = "";
     $prescriberSPI = '';
     $messaging->status = 'Sent';
     $messaging->note = 'Prescriber data sent';
     if (!curl_errno($ch)) {
         try {
             $responseXml = simplexml_load_string($output);
             if (isset($responseXml->error)) {
                 $errorCode = (string) $responseXml->error->code;
                 $errorMsg = (string) $responseXml->error->message;
                 if (isset($responseXml->error->errorCode)) {
                     $errorCode = (string) $responseXml->error->errorCode;
                 }
                 if (isset($responseXml->error->errorMsg)) {
                     $errorMsg = (string) $responseXml->error->errorMsg;
                 }
                 $error = $errorMsg;
                 trigger_error('There was an error enabling an ePresciber, Error code: ' . $errorCode . ' Error Message: ' . $errorMsg, E_USER_NOTICE);
             } elseif (isset($responseXml->data)) {
                 $xml = new SimpleXMLElement($responseXml->data);
                 $prescriber = $xml->AddPrescriberResponse->Prescriber;
                 //if ($type == 'addLocation') {
                 if (isset($xml->AddPrescriberLocationResponse)) {
                     $prescriber = $xml->AddPrescriberLocationResponse->Prescriber;
                 }
                 $prescriberSPI = (string) $prescriber->Identification->SPI;
                 if (!strlen($prescriberSPI) > 0) {
                     $error = 'Registration failed for location ' . $ePrescriber->building->name;
                 }
             }
             if (isset($responseXml->rawMessage)) {
                 $messaging->rawMessage = base64_decode((string) $responseXml->rawMessage);
                 $messaging->rawMessageResponse = base64_decode((string) $responseXml->rawMessageResponse);
             }
         } catch (Exception $e) {
             $error = __("There was an error connecting to HealthCloud to enable ePrescribing for this provider. Please try again or contact the system administrator.");
             trigger_error("There was an error enabling an ePresciber, the response couldn't be parsed as XML: " . $output, E_USER_NOTICE);
         }
     } else {
         $error = __("There was an error connecting to HealthCloud to enable ePrescribing for this provider. Please try again or contact the system administrator.");
         trigger_error("Curl error connecting to healthcare enabled an ePrescribe record: " . curl_error($ch), E_USER_NOTICE);
     }
     curl_close($ch);
     if (strlen($error) > 0) {
         $messaging->status = 'Error';
         $messaging->note = $error;
         $ret = false;
     }
     if ($messaging->resend) {
         $messaging->resend = 0;
     }
     $messaging->retries++;
     $messaging->dateStatus = date('Y-m-d H:i:s');
     $messaging->persist();
     if (strlen($error) > 0) {
         return $error;
     }
     if (!strlen($provider->sureScriptsSPI) > 0) {
         // handler of the first SPI
         $provider->sureScriptsSPI = $prescriberSPI;
         $provider->persist();
     }
     if ($type == 'add' || $type == 'addLocation') {
         $ePrescriber->SSID = $prescriberSPI;
         $ePrescriber->persist();
     }
     return $ret;
 }
 public function newRxAction()
 {
     $medicationId = 1077476;
     $data = array();
     $medication = new Medication();
     $medication->medicationId = $medicationId;
     $medication->populate();
     $data['PrescriberOrderNumber'] = $medication->medicationId;
     $medData = array();
     $medData['DrugDescription'] = $medication->description;
     $medData['Strength'] = $medication->strength;
     $medData['StrengthUnits'] = $medication->unit;
     $medData['Quantity'] = $medication->quantity;
     $medData['Directions'] = $medication->directions;
     $medData['Refills'] = $medication->refills;
     $medData['Substitutions'] = $medication->substitution;
     $medData['WrittenDate'] = date('Ymd', strtotime($medication->datePrescribed));
     $data['medication'] = $medData;
     $pharmacy = new Pharmacy();
     $pharmacy->pharmacyId = $medication->pharmacyId;
     $pharmacy->populate();
     $pharmacyData = array();
     $pharmacyData['NCPDPID'] = $pharmacy->NCPDPID;
     $pharmacyData['StoreName'] = $pharmacy->StoreName;
     $pharmacyData['AddressLine1'] = $pharmacy->AddressLine1 . ' ' . $pharmacy->AddressLine2;
     $pharmacyData['City'] = $pharmacy->City;
     $pharmacyData['State'] = $pharmacy->State;
     $pharmacyData['ZipCode'] = $pharmacy->Zip;
     $pharmacyData['PhoneNumber'] = $pharmacy->PhonePrimary;
     $data['pharmacy'] = $pharmacyData;
     $provider = new Provider();
     $provider->personId = $medication->prescriberPersonId;
     $provider->populate();
     $prescriberData = array();
     $prescriberData['DEANumber'] = $provider->deaNumber;
     $prescriberData['SPI'] = $provider->sureScriptsSPI;
     $prescriberData['ClinicName'] = '';
     $prescriberData['LastName'] = $provider->person->lastName;
     $prescriberData['FirstName'] = $provider->person->firstName;
     $prescriberData['Suffix'] = '';
     $address = new Address();
     $address->personId = $provider->personId;
     $address->populateWithPersonId();
     $prescriberData['AddressLine1'] = $address->line1 . ' ' . $address->line2;
     $prescriberData['City'] = $address->city;
     $prescriberData['State'] = 'AZ';
     //$address->state;
     $prescriberData['ZipCode'] = $address->zipCode;
     $phoneNumber = new PhoneNumber();
     $phoneNumber->personId = $provider->personId;
     $phoneNumber->populateWithPersonId();
     $prescriberData['PhoneNumber'] = $phoneNumber->number;
     $data['prescriber'] = $prescriberData;
     $patient = new Patient();
     $patient->personId = $medication->personId;
     $patient->populate();
     $patientData = array();
     $patientData['LastName'] = $patient->person->lastName;
     $patientData['FirstName'] = $patient->person->firstName;
     $patientData['Gender'] = $patient->person->gender;
     $patientData['DateOfBirth'] = date('Ymd', strtotime($patient->person->dateOfBirth));
     $address = new Address();
     $address->personId = $patient->personId;
     $address->populateWithPersonId();
     $patientData['AddressLine1'] = $address->line1 . ' ' . $address->line2;
     $patientData['City'] = $address->city;
     $patientData['State'] = 'AZ';
     //$address->state;
     $patientData['ZipCode'] = $address->zipCode;
     $phoneNumber = new PhoneNumber();
     $phoneNumber->personId = $patient->personId;
     $phoneNumber->populateWithPersonId();
     $patientData['PhoneNumber'] = $phoneNumber->number;
     $data['patient'] = $patientData;
     $postFields = array();
     foreach ($data as $type => $row) {
         if (is_array($row)) {
             foreach ($row as $field => $value) {
                 $key = $type . '[' . $field . ']';
                 $postFields[$key] = $value;
             }
         } else {
             $postFields[$type] = $row;
         }
     }
     $ch = curl_init();
     $ePrescribeURL = Zend_Registry::get('config')->healthcloud->URL;
     $ePrescribeURL .= 'ss-manager.raw/new-rx?apiKey=' . Zend_Registry::get('config')->healthcloud->apiKey;
     curl_setopt($ch, CURLOPT_URL, $ePrescribeURL);
     curl_setopt($ch, CURLOPT_POST, true);
     curl_setopt($ch, CURLOPT_POSTFIELDS, $postFields);
     curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
     curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
     curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
     curl_setopt($ch, CURLOPT_USERPWD, 'admin:ch3!');
     $output = curl_exec($ch);
     trigger_error('OUTPUT: ' . $output, E_USER_NOTICE);
     $error = "";
     if (!curl_errno($ch)) {
         try {
             $responseXml = simplexml_load_string($output);
             if (isset($responseXml->error)) {
                 $errorCode = (string) $responseXml->error->code;
                 $errorMsg = (string) $responseXml->error->message;
                 if (isset($responseXml->error->errorCode)) {
                     $errorCode = (string) $responseXml->error->errorCode;
                 }
                 if (isset($responseXml->error->errorMsg)) {
                     $errorMsg = (string) $responseXml->error->errorMsg;
                 }
                 $error = $errorMsg;
                 trigger_error('There was an error prescribing new medication, Error code: ' . $errorCode . ' Error Message: ' . $errorMsg, E_USER_NOTICE);
             }
         } catch (Exception $e) {
             $error = __("There was an error connecting to HealthCloud to prescribe new medication. Please try again or contact the system administrator.");
             trigger_error("There was an error prescribeing new medication, the response couldn't be parsed as XML: " . $output, E_USER_NOTICE);
         }
     } else {
         $error = __("There was an error connecting to HealthCloud to prescribe new medication. Please try again or contact the system administrator.");
         trigger_error("Curl error connecting to healthcare prescribed new medication: " . curl_error($ch), E_USER_NOTICE);
     }
     curl_close($ch);
     $json = Zend_Controller_Action_HelperBroker::getStaticHelper('json');
     $json->suppressExit = true;
     if (strlen($error) > 0) {
         $this->getResponse()->setHttpResponseCode(500);
         $json->direct(array('error' => $error));
         return;
     }
     $json->direct(true);
 }
 protected function _generateColumnHeader(array $column)
 {
     $data = array();
     $data['header'] = "{$column['dateFilter']}<br>";
     $title = $column['dateFilter'];
     // temporarily set the header as providerId
     $providerId = $column['providerId'];
     $roomId = 0;
     if (isset($column['roomId'])) {
         $roomId = $column['roomId'];
     }
     if ($providerId > 0) {
         $provider = new Provider();
         $provider->setPersonId($providerId);
         $provider->populate();
         $name = $provider->last_name . ', ' . $provider->first_name;
         // we simply replace the comma with its html equivalent (&#44;) because this may cause not to render the header
         $data['header'] .= str_replace(',', '&#44;', $name);
         $title .= ' -> ' . $name;
     }
     if ($roomId > 0) {
         $room = new Room();
         $room->id = $roomId;
         $room->populate();
         if ($providerId > 0) {
             //$data['header'] .= '<br>';
             $data['header'] .= ' - ';
         }
         $data['header'] .= $room->name;
         $title .= ' -> ' . $room->name;
     }
     $data['header'] = '<label title="' . $title . '">' . $data['header'] . '</label>';
     return $data;
 }
Exemplo n.º 13
0
 public function defaultPatientHeaderAction()
 {
     $personId = (int) $this->_getParam('personId');
     // e76f18cd-d388-4c53-b940-53cb81b80c5e
     $referenceId = $this->_getParam('referenceId');
     $data = $this->_getAttachmentData($referenceId);
     $patient = new Patient();
     $patient->personId = $personId;
     $patient->populate();
     $person = $patient->person;
     $picture = '';
     if ($person->activePhoto > 0) {
         $attachment = new Attachment();
         $attachment->attachmentId = (int) $person->activePhoto;
         $attachment->populate();
         $picture = base64_encode($attachment->rawData);
     }
     $xml = new SimpleXMLElement('<patientHeader/>');
     $xmlPatient = $xml->addChild('patient');
     $this->_addChild($xmlPatient, 'picture', $picture);
     $this->_addChild($xmlPatient, 'lastName', $person->lastName);
     $this->_addChild($xmlPatient, 'firstName', $person->firstName);
     $this->_addChild($xmlPatient, 'dateOfBirth', $person->dateOfBirth);
     $this->_addChild($xmlPatient, 'gender', $person->gender);
     $statistics = PatientStatisticsDefinition::getPatientStatistics($personId);
     $race = '';
     if (isset($statistics['Race'])) {
         $race = $statistics['Race'];
     } else {
         if (isset($statistics['race'])) {
             $race = $statistics['race'];
         }
     }
     $this->_addChild($xmlPatient, 'race', $race);
     $this->_addChild($xmlPatient, 'maritalStatus', $person->displayMaritalStatus);
     $addresses = Address::listAddresses($personId);
     $phoneNumbers = PhoneNumber::listPhoneNumbers($personId);
     $address = null;
     if (isset($addresses[Address::TYPE_BILLING])) {
         $address = $addresses[Address::TYPE_BILLING];
     } else {
         if (isset($addresses[Address::TYPE_HOME])) {
             $address = $addresses[Address::TYPE_HOME];
         } else {
             if (isset($addresses[Address::TYPE_MAIN])) {
                 $address = $addresses[Address::TYPE_MAIN];
             } else {
                 if (isset($addresses[Address::TYPE_SEC])) {
                     $address = $addresses[Address::TYPE_SEC];
                 } else {
                     if (isset($addresses[Address::TYPE_OTHER])) {
                         $address = $addresses[Address::TYPE_OTHER];
                     }
                 }
             }
         }
     }
     if ($address !== null) {
         $phone = '';
         if (isset($phoneNumbers[PhoneNumber::TYPE_BILLING])) {
             $phone = $phoneNumbers[PhoneNumber::TYPE_BILLING]->number;
         } else {
             if (isset($phoneNumbers[PhoneNumber::TYPE_HOME])) {
                 $phone = $phoneNumbers[PhoneNumber::TYPE_HOME]->number;
             } else {
                 if (isset($phoneNumbers[PhoneNumber::TYPE_WORK])) {
                     $phone = $phoneNumbers[PhoneNumber::TYPE_WORK]->number;
                 } else {
                     if (isset($phoneNumbers[PhoneNumber::TYPE_HOME_DAY])) {
                         $phone = $phoneNumbers[PhoneNumber::TYPE_HOME_DAY]->number;
                     } else {
                         if (isset($phoneNumbers[PhoneNumber::TYPE_HOME_EVE])) {
                             $phone = $phoneNumbers[PhoneNumber::TYPE_HOME_EVE]->number;
                         } else {
                             if (isset($phoneNumbers[PhoneNumber::TYPE_MOBILE])) {
                                 $phone = $phoneNumbers[PhoneNumber::TYPE_MOBILE]->number;
                             } else {
                                 if (isset($phoneNumbers[PhoneNumber::TYPE_BEEPER])) {
                                     $phone = $phoneNumbers[PhoneNumber::TYPE_BEEPER]->number;
                                 }
                             }
                         }
                     }
                 }
             }
         }
         $this->_addChild($xmlPatient, 'billingLine1', $address->line1);
         $this->_addChild($xmlPatient, 'billingCity', $address->city);
         $this->_addChild($xmlPatient, 'billingState', $address->state);
         $this->_addChild($xmlPatient, 'billingZip', $address->postalCode);
         $this->_addChild($xmlPatient, 'phoneNumber', $phone);
     }
     if ($person->primaryPracticeId > 0) {
         $practice = new Practice();
         $practice->practiceId = (int) $person->primaryPracticeId;
         $practice->populate();
         $address = $practice->primaryAddress;
         $xmlPractice = $xml->addChild('practice');
         $this->_addChild($xmlPractice, 'name', $practice->name);
         $this->_addChild($xmlPractice, 'primaryLine1', $address->line1);
         $this->_addChild($xmlPractice, 'primaryCity', $address->city);
         $this->_addChild($xmlPractice, 'primaryState', $address->state);
         $this->_addChild($xmlPractice, 'primaryZip', $address->postalCode);
         $this->_addChild($xmlPractice, 'mainPhone', $practice->mainPhone->number);
         $this->_addChild($xmlPractice, 'faxNumber', $practice->fax->number);
     }
     $insuredRelationship = new InsuredRelationship();
     $insuredRelationshipIterator = $insuredRelationship->getIteratorByPersonId($personId);
     $primary = null;
     $secondary = null;
     foreach ($insuredRelationshipIterator as $item) {
         if (!$item->active) {
             continue;
         }
         if ($primary === null) {
             $primary = $item;
         } else {
             if ($secondary === null) {
                 $secondary = $item;
             } else {
                 break;
             }
         }
     }
     $xmlPayer = $xml->addChild('payer');
     if ($primary !== null) {
         $this->_addChild($xmlPayer, 'primary', $primary->insuranceProgram->name);
     }
     if ($secondary !== null) {
         $this->_addChild($xmlPayer, 'secondary', $secondary->insuranceProgram->name);
     }
     /*$xmlGuarantor = $xml->addChild('guarantor');
     		$this->_addChild($xmlGuarantor,'lastName','');
     		$this->_addChild($xmlGuarantor,'firstName','');
     		$this->_addChild($xmlGuarantor,'dateOfBirth','');
     		$this->_addChild($xmlGuarantor,'phone','');*/
     // get the current visit
     $xmlProvider = $xml->addChild('provider');
     $lastName = '';
     $firstName = '';
     $dateOfBirth = '';
     $phone = '';
     $visit = new Visit();
     $visit->populateLatestVisit($personId);
     if ($visit->visitId > 0) {
         $provider = new Provider();
         $provider->personId = $visit->providerId;
         $provider->populate();
         $person = $provider->person;
         $lastName = $person->lastName;
         $firstName = $person->firstName;
         $dateOfBirth = $person->dateOfBirth;
         $phone = $person->phoneNumber->number;
     }
     $this->_addChild($xmlProvider, 'lastName', $lastName);
     $this->_addChild($xmlProvider, 'firstName', $firstName);
     $this->_addChild($xmlProvider, 'dateOfBirth', $dateOfBirth);
     $this->_addChild($xmlProvider, 'phone', $phone);
     try {
         $content = ReportBase::mergepdfset($xml, $data);
         $this->getResponse()->setHeader('Content-Type', 'application/pdf');
     } catch (Exception $e) {
         $content = '<script>alert("' . $e->getMessage() . '")</script>';
     }
     $this->view->content = $content;
     $this->render('binary-template');
 }
 public function indexAction()
 {
     $personId = (int) Zend_Auth::getInstance()->getIdentity()->personId;
     $this->view->currentPersonId = $personId;
     $provider = new Provider();
     $provider->person_id = $personId;
     $provider->populate();
     $this->view->provider = $provider;
     $this->render();
 }
Exemplo n.º 15
0
 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;
 }
Exemplo n.º 16
0
 public function listHistoryAction()
 {
     $personId = (int) $this->_getParam('personId');
     $future = (int) $this->_getParam('future');
     $rows = array();
     $appointmentTemplate = new AppointmentTemplate();
     $reasons = $appointmentTemplate->getAppointmentReasons();
     $iterator = new AppointmentIterator(null, false);
     $filters = array('patientId' => $personId);
     if ($future) {
         $filters['start'] = date('Y-m-d');
     }
     $iterator->setFilters($filters);
     foreach ($iterator as $app) {
         $personId = (int) $app->patientId;
         $appointmentId = (int) $app->appointmentId;
         $providerId = (int) $app->providerId;
         $roomId = (int) $app->roomId;
         list($dateStart, $timeStart) = explode(' ', $app->start);
         list($dateEnd, $timeEnd) = explode(' ', $app->end);
         $providerName = '';
         if ($providerId > 0) {
             $provider = new Provider();
             $provider->setPersonId($providerId);
             $provider->populate();
             $providerName = $provider->displayName;
         }
         $roomName = '';
         if ($roomId > 0) {
             $room = new Room();
             $room->setRoomId($roomId);
             $room->populate();
             $roomName = $room->displayName;
         }
         $routing = new Routing();
         $routing->personId = $personId;
         $routing->appointmentId = $appointmentId;
         $routing->providerId = $providerId;
         $routing->roomId = $roomId;
         $routing->populateByAppointments();
         $station = $routing->stationId;
         $reason = $app->reason;
         $appointmentReason = isset($reasons[$reason]) ? $reasons[$reason]['name'] : '';
         $row = array();
         $row['id'] = $appointmentId;
         $row['data'] = array();
         $row['data'][] = $dateStart;
         $row['data'][] = $timeStart . ' - ' . $timeEnd;
         $row['data'][] = $providerName;
         $row['data'][] = $app->title;
         $row['data'][] = $roomName;
         $row['data'][] = $appointmentReason;
         $row['data'][] = $app->appointmentCode;
         $row['data'][] = $routing->stationId;
         $rows[] = $row;
     }
     $json = Zend_Controller_Action_HelperBroker::getStaticHelper('json');
     $json->suppressExit = true;
     $json->direct(array('rows' => $rows));
 }
Exemplo n.º 17
0
 function processNextStationByAppointmentAction()
 {
     $appointmentId = (int) $this->_getParam('appointmentId');
     $stationId = $this->_getParam('stationId');
     $appointment = new Appointment();
     $appointment->appointmentId = $appointmentId;
     $appointment->populate();
     $provider = new Provider();
     $provider->personId = $appointment->providerId;
     $provider->populate();
     $routing = new Routing();
     $routing->personId = $appointment->patientId;
     $routing->appointmentId = $appointment->appointmentId;
     $routing->providerId = $appointment->providerId;
     $routing->roomId = $appointment->roomId;
     $routing->populateByAppointments();
     $routing->fromStationId = $routing->stationId;
     $routing->stationId = $stationId;
     $routing->timestamp = date('Y-m-d H:i:s');
     $routing->persist();
     $json = Zend_Controller_Action_HelperBroker::getStaticHelper('json');
     $json->suppressExit = true;
     $json->direct(array(true));
 }
Exemplo n.º 18
0
 public static function generate($patientId)
 {
     // v2.5.1
     $patientId = (int) $patientId;
     $ret = array();
     $msh = array();
     $msh['messageType'] = array('code' => 'ORU', 'eventType' => 'R01', 'structure' => 'ORU_R01');
     $ret[] = self::generateMSH($msh);
     // MSH
     $ret[] = self::generateSFT();
     // SFT
     $ret[] = self::generatePID($patientId);
     // PID
     $filters = array('patientId' => $patientId);
     $labResults = array();
     $labTests = array();
     $labOrderTests = array();
     $labsIterator = new LabsIterator();
     $labsIterator->setFilters($filters);
     foreach ($labsIterator as $lab) {
         // get the lab order
         $labTestId = (int) $lab->labTestId;
         if (!isset($labTests[$labTestId])) {
             $labTest = new LabTest();
             $labTest->labTestId = (int) $lab->labTestId;
             $labTest->populate();
             $labTests[$labTestId] = $labTest;
         }
         $labTest = $labTests[$labTestId];
         $orderId = (int) $labTest->labOrderId;
         if (!isset($labOrderTests[$orderId])) {
             $orderLabTest = new OrderLabTest();
             $orderLabTest->orderId = $orderId;
             $orderLabTest->populate();
             $labOrderTests[$orderId] = $orderLabTest;
         }
         $orderLabTest = $labOrderTests[$orderId];
         if (!isset($labResults[$orderId])) {
             $labResults[$orderId] = array();
             $labResults[$orderId]['results'] = array();
             $labResults[$orderId]['labTest'] = $labTest;
             $labResults[$orderId]['orderLabTest'] = $orderLabTest;
             $providerId = (int) $orderLabTest->order->providerId;
             $provider = new Provider();
             $provider->personId = $providerId;
             $provider->populate();
             $labResults[$orderId]['provider'] = $provider;
         }
         $labResults[$orderId]['results'][] = $lab;
     }
     foreach ($base->labResults as $orderId => $value) {
         $ret[] = self::generateORC($value);
         // ORC
         $ret[] = self::generateOBR($value);
         // OBR
         foreach ($value['results'] as $result) {
             $data = array('result' => $result, 'labTest' => $value['labTest'], 'orderLabTest' => $value['orderLabTest'], 'provider' => $value['provider']);
             $ret[] = self::generateOBX($data);
             // OBX
         }
         $ret[] = self::generateSPM($value);
         // SPM
     }
     /*$iterator = new LabsIterator();
     		$iterator->setFilters(array('patientId'=>$patientId));
     		foreach ($iterator as $lab) {
     			$data = array();
     			$data['lab'] = $lab;
     			$orderLabTest = new OrderLabTest();
     			$orderLabTest->orderId = $lab->labTest->labOrderId;
     			$orderLabTest->populate();
     			$data['orderLabTest'] = $orderLabTest;
     			$loinc = new ProcedureCodesLOINC();
     			$loinc->loincNum = $orderLabTest->labTest;
     			$loinc->populate();
     			$data['loinc'] = $loinc;
     			$ret[] = self::generateOBR($data); // OBR
     			$ret[] = self::generateOBX($data); // OBX
     			$ret[] = self::generateSPM($data); // SPM
     		}*/
     return implode("\r\n", $ret);
 }
Exemplo n.º 19
0
 public function populate($patientId, $userId, $visitId)
 {
     $this->_patientId = (int) $patientId;
     $patient = new Patient();
     $patient->personId = $this->_patientId;
     $patient->populate();
     $this->_title = $patient->displayName . ' Healthcare Record';
     $this->patient = $patient;
     $this->_userId = (int) $userId;
     $user = new User();
     $user->personId = $this->_userId;
     $user->populate();
     $this->user = $user;
     $visit = new Visit();
     $visit->visitId = (int) $visitId;
     if ($visit->visitId > 0 && $visit->populate()) {
         $this->visit = $visit;
     }
     $this->building = Building::getBuildingDefaultLocation($this->user->personId);
     $performers = array();
     $problemList = new ProblemList();
     $filters = array();
     $filters['personId'] = $this->_patientId;
     $this->setFiltersDateRange($filters);
     $problems = array();
     $problemListIterator = new ProblemListIterator();
     $problemListIterator->setFilters($filters);
     foreach ($problemListIterator as $problem) {
         $problems[] = $problem;
         $providerId = (int) $problem->providerId;
         if (!isset($performers[$providerId])) {
             $provider = new Provider();
             $provider->personId = $providerId;
             $provider->populate();
             $performers[$providerId] = $provider;
         }
     }
     $this->problemLists = $problems;
     unset($filters['personId']);
     $filters['patientId'] = $this->_patientId;
     $labResults = array();
     $labTests = array();
     $labOrderTests = array();
     $labsIterator = new LabsIterator();
     $labsIterator->setFilters($filters);
     foreach ($labsIterator as $lab) {
         // get the lab order
         $labTestId = (int) $lab->labTestId;
         if (!isset($labTests[$labTestId])) {
             $labTest = new LabTest();
             $labTest->labTestId = (int) $lab->labTestId;
             $labTest->populate();
             $labTests[$labTestId] = $labTest;
         }
         $labTest = $labTests[$labTestId];
         $orderId = (int) $labTest->labOrderId;
         if (!isset($labOrderTests[$orderId])) {
             $orderLabTest = new OrderLabTest();
             $orderLabTest->orderId = $orderId;
             $orderLabTest->populate();
             $labOrderTests[$orderId] = $orderLabTest;
         }
         $orderLabTest = $labOrderTests[$orderId];
         $providerId = (int) $orderLabTest->order->providerId;
         if (!isset($performers[$providerId])) {
             $provider = new Provider();
             $provider->personId = $providerId;
             $provider->populate();
             $performers[$providerId] = $provider;
         }
         if (!isset($labResults[$orderId])) {
             $labResults[$orderId] = array();
             $labResults[$orderId]['results'] = array();
             $labResults[$orderId]['labTest'] = $labTest;
             $labResults[$orderId]['orderLabTest'] = $orderLabTest;
         }
         $labResults[$orderId]['results'][] = $lab;
     }
     $this->labResults = $labResults;
     $this->performers = $performers;
     $this->populateHeader($this->_xml);
     $this->populateBody($this->_xml);
     return $this->_xml->asXML();
 }
 public function indexAction()
 {
     $identity = Zend_Auth::getInstance()->getIdentity();
     $personId = (int) $identity->personId;
     $userId = $identity->userId;
     $user = new User();
     $user->userId = $userId;
     $user->populate();
     $currentPractice = '';
     $currentBuilding = '';
     if (strlen($user->preferences) > 0) {
         $this->xmlPreferences = new SimpleXMLElement($user->preferences);
         $currentLocation = (string) $this->xmlPreferences->currentLocation;
         $locationId = (int) $currentLocation;
         if ($locationId > 0) {
             $currentLocation = Room::location($locationId, true);
             $currentPractice = $currentLocation['practice'];
             $currentBuilding = $currentLocation['practice'] . '->' . $currentLocation['building'];
         }
     }
     $this->view->currentPractice = $currentPractice;
     $this->view->currentBuilding = $currentBuilding;
     $this->view->currentPersonId = $personId;
     $provider = new Provider();
     $provider->person_id = $personId;
     $provider->populate();
     $this->view->provider = $provider;
     $this->render();
 }
Exemplo n.º 21
0
 protected function _generateEventColumnData(array $filters)
 {
     // filters assume to be sanitized
     $appointment = new Appointment();
     $appointment->providerId = $filters['providerId'];
     $appointment->roomId = $filters['roomId'];
     $appointment->start = $filters['dateFilter'] . ' ' . self::FILTER_TIME_START;
     $appointment->end = $filters['dateFilter'] . ' ' . self::FILTER_TIME_END;
     $startTime = strtotime($appointment->start);
     $endTime = strtotime($appointment->end);
     // we need to get the length of time to create number of rows in the grid
     $timeLen = ($endTime - $startTime) / 60 / self::FILTER_MINUTES_INTERVAL;
     // NOTE: height is 22px for xp, default 20px
     // prepopulate return data
     $columnData = array();
     //$maps = array();
     $start = $startTime;
     $end = $endTime;
     $ctr = 0;
     while ($start <= $end) {
         $map = array();
         $map['start'] = $start;
         $start = strtotime('+' . self::FILTER_MINUTES_INTERVAL . ' minutes', $start);
         $map['end'] = $start;
         //$maps[$ctr] = $map;
         $row = array();
         // assign row id as rowNumber and columnIndex
         $columnData[$ctr] = array('id' => $ctr + 1, 'data' => array(''), 'map' => $map);
         $ctr++;
     }
     $columnDataCtr = count($columnData);
     $data = array('apps' => array(), 'events' => array());
     $mapIndex = 0;
     $apps = array();
     foreach ($appointment->getIter() as $app) {
         $start = strtotime($app->start);
         for ($i = $mapIndex; $i < $columnDataCtr; $i++) {
             $map = $columnData[$mapIndex]['map'];
             $mapIndex = $i;
             if ($start >= $map['start'] && $start <= $map['end']) {
                 if (!isset($data['apps'][$i])) {
                     $data['apps'][$i] = array();
                 }
                 $data['apps'][$i][] = $app;
                 break;
             }
         }
     }
     $mapIndex = 0;
     $events = array();
     trigger_error('looping schedule event started');
     $scheduleEvent = new ScheduleEvent();
     $db = Zend_Registry::get('dbAdapter');
     $sqlSelect = $db->select()->from('scheduleEvents')->where('providerId = ?', $appointment->providerId)->where('roomId = ?', $appointment->roomId)->where('start >= ?', $appointment->start)->where('end <= ?', $appointment->end)->where('start <= end')->order('start ASC');
     $stmt = $db->query($sqlSelect);
     $stmt->setFetchMode(Zend_Db::FETCH_ASSOC);
     while ($row = $stmt->fetch()) {
         $event = new ScheduleEvent();
         $event->populateWithArray($row);
         $start = strtotime($event->start);
         for ($i = $mapIndex; $i < $columnDataCtr; $i++) {
             $map = $columnData[$i]['map'];
             $mapIndex = $i;
             if ($start >= $map['start'] && $start <= $map['end']) {
                 if (!isset($data['events'][$i])) {
                     $data['events'][$i] = array();
                 }
                 $data['events'][$i] = $event;
                 break;
             }
         }
     }
     trigger_error('looping schedule event ended');
     $colMultiplier = 1;
     $zIndex = 0;
     foreach ($data['apps'] as $index => $apps) {
         $ctr = count($apps);
         $columnData[$index]['userdata']['ctr'] = $ctr;
         if ($ctr > $colMultiplier) {
             $colMultiplier = $ctr;
         }
         for ($i = 0; $i < $ctr; $i++) {
             $app = $apps[$i];
             $this->_populateAppointmentRow($app, $columnData, $index, $i, $ctr);
         }
     }
     $header = "{$filters['dateFilter']}<br>";
     $title = $filters['dateFilter'];
     // temporarily set the header as providerId
     $providerId = (int) $filters['providerId'];
     $roomId = (int) $filters['roomId'];
     if ($providerId > 0) {
         $provider = new Provider();
         $provider->setPersonId($providerId);
         $provider->populate();
         $name = $provider->optionName;
         // we simply replace the comma with its html equivalent (&#44;) because this may cause not to render the header
         $header .= str_replace(',', '&#44;', $name);
         $title .= ' -> ' . $name;
     }
     if ($roomId > 0) {
         $room = new Room();
         $room->id = $roomId;
         $room->populate();
         if ($providerId > 0) {
             $header .= '<br>';
         }
         $header .= $room->name;
         $title .= ' -> ' . $room->name;
     }
     $buildings = array();
     foreach ($data['events'] as $index => $event) {
         $this->_populateScheduleEventRow($event, $columnData, $index);
         $buildingId = (int) $event->buildingId;
         $building = new Building();
         $building->buildingId = $buildingId;
         $building->populate();
         $buildings[$buildingId] = $building->displayName;
     }
     $eventBuilding = implode(', ', $buildings);
     $header .= '<br>(' . $eventBuilding . ')';
     $title .= ' -> (' . $eventBuilding . ')';
     $header = '<label title="' . $title . '">' . $header . '</label>';
     for ($i = 0; $i < $columnDataCtr; $i++) {
         unset($columnData[$i]['map']);
     }
     $columnData[0]['userdata']['colMultiplier'] = $colMultiplier;
     $columnData[0]['userdata']['providerId'] = $appointment->providerId;
     $columnData[0]['userdata']['roomId'] = $appointment->roomId;
     $columnData[0]['userdata']['date'] = $filters['dateFilter'];
     return array('header' => $header, 'events' => array('rows' => $columnData));
 }
Exemplo n.º 22
0
 public static function generateORC($provider)
 {
     // test#5 does not have this segment
     if (!$provider instanceof Provider) {
         $providerId = (int) $provider;
         $provider = new Provider();
         $provider->personId = (int) $providerId;
         $provider->populate();
     }
     $building = Building::getBuildingDefaultLocation($provider->personId);
     //$practice = self::$providerBuilding->practice;
     $practice = $building->practice;
     $practiceAddr = $practice->primaryAddress;
     if (!$practiceAddr->addressId > 0) {
         $practiceAddr = $practice->secondaryAddress;
     }
     $practicePhone = $practice->mainPhone;
     if (!$practicePhone->numberId > 0) {
         $practicePhone = $practice->secondaryPhone;
     }
     $phone = PhoneNumber::autoFixNumber($practicePhone->number);
     if (substr($phone, 0, 1) == 1) {
         $phone = substr($phone, 1);
     }
     $areaCode = substr($phone, 0, 3);
     $localNumber = substr($phone, 3);
     $addr = new Address();
     foreach ($addr->getIteratorByPersonId($provider->personId) as $providerAddr) {
         break;
     }
     if (!isset($providerAddr)) {
         $providerAddr = new Address();
     }
     $orc = 'ORC|RE|||||||||||';
     if ($provider->personId > 0) {
         $providerId = strlen($provider->identifier) > 0 ? $provider->identifier : $provider->personId;
         $orc .= $providerId . '^' . $provider->person->lastName . '^' . $provider->person->firstName . '^^^^^^' . $building->name . '&2.16.840.1.113883.19.4.6&ISO';
     }
     $orc .= '|||||||||' . $practice->name . '^L^^^^' . $building->name . '&2.16.840.1.113883.19.4.6&ISO^XX^^^' . $practice->identifier . '|' . $practiceAddr->line1 . '^^' . $practiceAddr->city . '^' . $practiceAddr->state . '^' . $practiceAddr->zipCode . '^^B|^^^^^' . $areaCode . '^' . $localNumber;
     if ($providerAddr->addressId > 0) {
         $orc .= '|' . $providerAddr->line1 . '^^' . $providerAddr->city . '^' . $providerAddr->state . '^' . $providerAddr->zipCode . '^^B';
     }
     return $orc;
 }
Exemplo n.º 23
0
 protected static function _getPatientData($patient, $includeProvider = true, $providerId = null, $roomId = null)
 {
     $maritalStatusMap = array('SEPARATED' => 'A', 'DIVORCED' => 'D', 'MARRIED' => 'M', 'SINGLE' => 'S', 'WIDOWED' => 'W');
     if (!$patient instanceof Patient) {
         $patientId = (int) $patient;
         $patient = new Patient();
         $patient->personId = $patientId;
         $patient->populate();
     }
     $personId = (int) $patient->personId;
     $person = $patient->person;
     $maritalStatus = $person->maritalStatus;
     if (isset($maritalStatusMap[$maritalStatus])) {
         $maritalStatus = $maritalStatusMap[$maritalStatus];
     }
     $ethnicities = array();
     $ethnicities['1'] = 1;
     $ethnicities['Hispanic/Latino'] = 1;
     $ethnicities['2'] = 2;
     $ethnicities['Not Hispanic/Latino'] = 2;
     $ethnicities['3'] = 3;
     $ethnicities['Unreported / Refused to Report'] = 3;
     $races = array();
     $races['A'] = 'A';
     $races['Asian'] = 'A';
     $races['N'] = 'N';
     $races['Native Hawaiian'] = 'N';
     $races['P'] = 'P';
     $races['Other Pacific Islander'] = 'P';
     $races['B'] = 'B';
     $races['Black / African American'] = 'B';
     $races['I'] = 'I';
     $races['American Indian / Alaska Native'] = 'I';
     $races['W'] = 'C';
     $races['White'] = 'C';
     $races['M'] = 'M';
     $races['More than one race'] = 'M';
     $races['E'] = 'E';
     $races['Unreported / Refused to Report'] = 'E';
     $statistics = PatientStatisticsDefinition::getPatientStatistics($personId);
     $race = '';
     if (isset($statistics['Race'])) {
         $race = $statistics['Race'];
     }
     if (isset($statistics['race'])) {
         $race = $statistics['race'];
     }
     $race = isset($races[$race]) ? $races[$race] : 'E';
     $ethnicity = '';
     if (isset($statistics['Ethnicity'])) {
         $ethnicity = $statistics['Ethnicity'];
     }
     if (isset($statistics['ethnicity'])) {
         $ethnicity = $statistics['ethnicity'];
     }
     $ethnicity = isset($ethnicities[$ethnicity]) ? $ethnicities[$ethnicity] : '3';
     $language = '';
     if (isset($statistics['Language'])) {
         $language = $statistics['Language'];
     }
     if (isset($statistics['language'])) {
         $language = $statistics['language'];
     }
     $language = '';
     // temporarily set to empty
     $patientData = array();
     $patientData['recordNumber'] = $patient->recordNumber;
     $patientData['lastName'] = $person->lastName;
     $patientData['firstName'] = $person->firstName;
     $patientData['middleName'] = $person->middleName;
     $patientData['suffix'] = $person->suffix;
     $patientData['dateOfBirth'] = date('Ymd', strtotime($person->dateOfBirth));
     $patientData['gender'] = $person->gender;
     $patientData['race'] = $race;
     $patientData['ethnicity'] = $ethnicity;
     $address = $person->address;
     $patientData['line1'] = $address->line1;
     $patientData['line2'] = $address->line2;
     $patientData['city'] = $address->city;
     $patientData['state'] = $address->state;
     $patientData['zip'] = $address->postalCode;
     $homePhone = '';
     $businessPhone = '';
     $phoneNumber = new PhoneNumber();
     $phoneNumber->personId = $personId;
     $phones = $phoneNumber->getPhoneNumbers(false);
     foreach ($phones as $phone) {
         if ($homePhone == '' && $phone['type'] == 'HP') {
             $homePhone = $phone['number'];
         }
         if ($businessPhone == '' && $phone['type'] == 'TE') {
             $businessPhone = $phone['number'];
         }
         if ($homePhone != '' && $businessPhone != '') {
             break;
         }
     }
     $patientData['homePhone'] = $homePhone;
     $patientData['businessPhone'] = $businessPhone;
     $patientData['language'] = $language;
     $patientData['maritalStatus'] = $maritalStatus;
     $patientData['accountNumber'] = '';
     $patientData['ssn'] = $patient->person->identifierType == 'SSN' ? $patient->identifier : '';
     if (!$includeProvider) {
         return $patientData;
     }
     $data = array();
     $data['patient'] = $patientData;
     if ($providerId === null) {
         $providerId = (int) $patient->defaultProvider;
     }
     $provider = new Provider();
     $provider->personId = $providerId;
     $provider->populate();
     $provider->populate();
     $providerData = array();
     $providerData['id'] = $provider->personId;
     $providerData['lastName'] = $provider->person->lastName;
     $providerData['firstName'] = $provider->person->firstName;
     $providerData['middleName'] = $provider->person->middleName;
     $providerData['suffix'] = $provider->person->suffix;
     $room = new Room();
     if ($roomId !== null && $roomId > 0) {
         $room->roomId = (int) $roomId;
         $room->populate();
         $building = $room->building;
         $practice = $building->practice;
         //trigger_error('room: '.$roomId.':'.$room->name);
     } else {
         $practice = new Practice();
         $building = new Building();
         $practiceId = (int) $patient->person->primaryPracticeId;
         $practice->practiceId = $practiceId;
         $practice->populate();
         //trigger_error('primary practice: '.$practiceId.':'.$practice->name);
     }
     $providerData['practice'] = $practice->name;
     $providerData['building'] = $building->name;
     $providerData['room'] = $room->name;
     $data['provider'] = $providerData;
     return $data;
 }
Exemplo n.º 24
0
 protected function _populateCMS1500XML(SimpleXMLElement $xml, ClaimLine $claimLine)
 {
     $claimId = (int) $claimLine->claimId;
     $visitId = (int) $claimLine->visitId;
     $payerId = (int) $claimLine->insuranceProgramId;
     $visit = new Visit();
     $visit->visitId = $visitId;
     $visit->populate();
     $dateOfTreatment = $visit->dateOfTreatment;
     $patientId = (int) $visit->patientId;
     $providerId = (int) $visit->treatingPersonId;
     $insuranceProgram = new InsuranceProgram();
     $insuranceProgram->insuranceProgramId = $payerId;
     $insuranceProgram->populate();
     $insuranceAddress = $insuranceProgram->address;
     $insuredRelationship = InsuredRelationship::filterByPayerPersonIds($payerId, $patientId);
     $patient = new Patient();
     $patient->personId = $patientId;
     $patient->populate();
     $patientAddress = $patient->address;
     $patientPhone = $patient->phoneNumber;
     $provider = new Provider();
     $provider->personId = $providerId;
     $provider->populate();
     $providerAddress = $provider->person->address;
     $providerPhone = $provider->phoneNumber;
     $buildingId = (int) $visit->buildingId;
     $building = new Building();
     $building->buildingId = $buildingId;
     $building->populate();
     $address = $building->practice->primaryAddress;
     $amountTotal = 0;
     $claimLines = array();
     $iterator = new ClaimLineIterator();
     $iterator->setFilters(array('claimId' => $claimId));
     foreach ($iterator as $orm) {
         $amount = (double) $orm->baseFee;
         $amountTotal += $amount;
         $row = array();
         $row['procedure'] = $orm->procedureCode;
         $modifiers = array();
         for ($i = 1; $i <= 4; $i++) {
             $field = 'modifier' . $i;
             $key = $orm->{$field};
             if (strlen($key) > 0) {
                 $modifiers[$i] = $key;
             }
         }
         $row['modifier'] = implode(',', $modifiers);
         $row['amount'] = $amount;
         $row['units'] = $orm->units;
         $diagnoses = array();
         for ($i = 1; $i <= 8; $i++) {
             $field = 'diagnosisCode' . $i;
             $key = $orm->{$field};
             if (strlen($key) > 0) {
                 $diagnoses[$key] = $key;
             }
         }
         $row['diagnoses'] = $diagnoses;
         $row['diagnosis_pointer'] = '';
         // TODO: need to resolve on the issue of multiple diagnoses per claimLine
         $claimLines[] = $row;
     }
     $amountPaid = $claimLine->paid;
     $netAmountTotal = $amountTotal - $amountPaid;
     if ($payerId > 0) {
         $xmlPayer = $xml->addChild('payer');
         $this->_addChild($xmlPayer, 'name', InsuranceProgram::getInsuranceProgram($payerId));
         if ($insuranceAddress->addressId > 0) {
             $xmlFbaddress = $xmlPayer->addChild('fbaddress');
             $this->_addChild($xmlFbaddress, 'line1', $insuranceAddress->line1);
             $this->_addChild($xmlFbaddress, 'line2', $insuranceAddress->line2);
             $this->_addChild($xmlFbaddress, 'city', $insuranceAddress->city);
             $this->_addChild($xmlFbaddress, 'state', $insuranceAddress->state);
             $this->_addChild($xmlFbaddress, 'zip', $insuranceAddress->zipCode);
         }
     }
     $xmlPatient = $xml->addChild('patient');
     $this->_addChild($xmlPatient, 'record_number', $patient->recordNumber);
     $this->_addChild($xmlPatient, 'last_name', $patient->lastName);
     $this->_addChild($xmlPatient, 'first_name', $patient->firstName);
     $this->_addChild($xmlPatient, 'middle_name', $patient->middleName);
     if ($patientAddress->addressId > 0) {
         $xmlFbaddress = $xmlPatient->addChild('fbaddress');
         $this->_addChild($xmlFbaddress, 'line1', $patientAddress->line1);
         $this->_addChild($xmlFbaddress, 'line2', $patientAddress->line2);
         $this->_addChild($xmlFbaddress, 'city', $patientAddress->city);
         $this->_addChild($xmlFbaddress, 'state', $patientAddress->state);
         $this->_addChild($xmlFbaddress, 'zip', $patientAddress->zipCode);
     }
     $this->_addChild($xmlPatient, 'phone_number', $patientPhone->number);
     $this->_addChild($xmlPatient, 'date_of_birth', $patient->dateOfBirth);
     $subscriber = $insuredRelationship->subscriber;
     $subscriberAddress = $subscriber->address;
     if ($subscriber->personId > 0) {
         $xmlSubscriber = $xml->addChild('subscriber');
         $this->_addChild($xmlSubscriber, 'phone_number', $subscriber->phoneNumber->number);
         if ($subscriberAddress->addressId > 0) {
             $xmlFbaddress = $xmlSubscriber->addChild('fbaddress');
             $this->_addChild($xmlFbaddress, 'line1', $subscriberAddress->line1);
             $this->_addChild($xmlFbaddress, 'line2', $subscriberAddress->line2);
             $this->_addChild($xmlFbaddress, 'city', $subscriberAddress->city);
             $this->_addChild($xmlFbaddress, 'state', $subscriberAddress->state);
             $this->_addChild($xmlFbaddress, 'zip', $subscriberAddress->zipCode);
         }
         $this->_addChild($xmlSubscriber, 'last_name', $subscriber->lastName);
         $this->_addChild($xmlSubscriber, 'first_name', $subscriber->firstName);
         $this->_addChild($xmlSubscriber, 'middle_name', $subscriber->middleName);
         $this->_addChild($xmlSubscriber, 'group_number', $insuredRelationship->groupNumber);
         $this->_addChild($xmlSubscriber, 'gender', $subscriber->gender);
         $this->_addChild($xmlSubscriber, 'date_of_birth', $subscriber->dateOfBirth);
     }
     if ($building->buildingId > 0) {
         $xmlPractice = $xml->addChild('practice');
         $this->_addChild($xmlPractice, 'identifier', $building->practice->identifier);
         $xmlTreatingFacility = $xml->addChild('treating_facility');
         $this->_addChild($xmlTreatingFacility, 'identifier', $building->identifier);
         $this->_addChild($xmlTreatingFacility, 'name', $building->name);
         $xmlFbaddress = $xmlTreatingFacility->addChild('fbaddress');
         $this->_addChild($xmlFbaddress, 'line1', $building->line1);
         $this->_addChild($xmlFbaddress, 'line2', $building->line2);
         $this->_addChild($xmlFbaddress, 'city', $building->city);
         $this->_addChild($xmlFbaddress, 'state', $building->state);
         $this->_addChild($xmlFbaddress, 'zip', $building->zipCode);
     }
     $xmlProvider = $xml->addChild('provider');
     $this->_addChild($xmlProvider, 'identifier', $provider->identifier);
     $this->_addChild($xmlProvider, 'first_name', $provider->firstName);
     $this->_addChild($xmlProvider, 'last_name', $provider->lastName);
     if ($providerAddress->addressId > 0) {
         $xmlFbaddress = $xmlProvider->addChild('fbaddress');
         $this->_addChild($xmlFbaddress, 'line1', $providerAddress->line1);
         $this->_addChild($xmlFbaddress, 'line2', $providerAddress->line2);
         $this->_addChild($xmlFbaddress, 'city', $providerAddress->city);
         $this->_addChild($xmlFbaddress, 'state', $providerAddress->state);
         $this->_addChild($xmlFbaddress, 'zip', $providerAddress->zipCode);
     }
     $xmlDiagnoses = null;
     foreach ($claimLines as $row) {
         foreach ($row['diagnoses'] as $diagnosis) {
             if ($xmlDiagnoses === null) {
                 $xmlDiagnoses = $xml->addChild('diagnoses');
             }
             $this->_addChild($xmlDiagnoses, 'array', $diagnosis);
         }
     }
     $xmlClaimLine = null;
     $dateOfService = date('m   d   y', strtotime($dateOfTreatment));
     foreach ($claimLines as $row) {
         if ($xmlClaimLine === null) {
             $xmlClaimLine = $xml->addChild('claim_lines');
         }
         // 0 - 5 ONLY
         $xmlClaimLineArr = $xmlClaimLine->addChild('array');
         $this->_addChild($xmlClaimLineArr, 'date_of_treatment', $dateOfService);
         $this->_addChild($xmlClaimLineArr, 'procedure', $row['procedure']);
         $this->_addChild($xmlClaimLineArr, 'modifier', $row['modifier']);
         $this->_addChild($xmlClaimLineArr, 'diagnosis_pointer', $row['diagnosis_pointer']);
         $this->_addChild($xmlClaimLineArr, 'amount', $row['amount']);
         $this->_addChild($xmlClaimLineArr, 'units', $row['units']);
     }
     $xmlClaim = $xml->addChild('claim');
     $this->_addChild($xmlClaim, 'amount_total', $amountTotal);
     $this->_addChild($xmlClaim, 'amount_paid', $amountPaid);
     $this->_addChild($xmlClaim, 'net_amount_total', $netAmountTotal);
     //$doc = new DOMDocument();
     //$doc->formatOutput = true;
     //$doc->loadXML($xml->asXML());
     //file_put_contents('/tmp/claims.xml',$doc->saveXML());
 }