public function processPatientDiagnosesAction() { $patientId = (int) $this->_getParam('patientId'); $diagnoses = $this->_getParam('diagnoses'); if ($patientId > 0) { $patientDiagnosisIterator = new PatientDiagnosisIterator(); $patientDiagnosisIterator->setFilters(array('patientId' => $patientId)); $existingDiagnoses = $patientDiagnosisIterator->toArray('code', 'patientId'); foreach ($diagnoses as $code => $diagnosis) { if (isset($existingDiagnoses[$code])) { unset($existingDiagnoses[$code]); } $diagnosis['code'] = $code; $diagnosis['patientId'] = $patientId; $patientDiagnosis = new PatientDiagnosis(); $patientDiagnosis->code = $code; $patientDiagnosis->populate(); if ($patientDiagnosis->dateTime == '0000-00-00 00:00:00') { $diagnosis['dateTime'] = date('Y-m-d H:i:s'); } $patientDiagnosis->populateWithArray($diagnosis); $patientDiagnosis->persist(); } // delete un-used records foreach ($existingDiagnoses as $code => $patientId) { $patientDiagnosis = new PatientDiagnosis(); $patientDiagnosis->code = $code; $patientDiagnosis->patientId = $patientId; $patientDiagnosis->setPersistMode(WebVista_Model_ORM::DELETE); $patientDiagnosis->persist(); } } $data = array(); $data['msg'] = __('Record saved successfully'); $json = Zend_Controller_Action_HelperBroker::getStaticHelper('json'); $json->suppressExit = true; $json->direct($data); }
public function populateVisitDiagnoses() { $iterator = new PatientDiagnosisIterator(); $iterator->setFilters(array('visitId' => $this->visitId)); foreach ($iterator as $patientDiagnosis) { $this->setUnsetDiagnosis($patientDiagnosis->code, true); } }
public function listPatientDiagnosesAction() { $patientId = (int) $this->_getParam('patientId'); $visitId = (int) $this->_getParam('visitId'); $rows = array(); if ($patientId > 0) { // add to problem list, primary, diagnosis, comment $patientDiagnosisIterator = new PatientDiagnosisIterator(); $patientDiagnosisIterator->setFilters(array('patientId' => $patientId, 'visitId' => $visitId)); foreach ($patientDiagnosisIterator as $patientDiagnosis) { $rows[] = $this->_generateRowData($patientDiagnosis); } } $data = array(); $data['rows'] = $rows; $json = Zend_Controller_Action_HelperBroker::getStaticHelper('json'); $json->suppressExit = true; $json->direct($data); }
public static function generateOBR(array $data) { static $obrCtr = 1; $orderLabTest = $data['orderLabTest']; $labTest = $data['labTest']; $loinc = $data['loinc']; $obr = 'OBR|' . $obrCtr++ . '||' . $labTest->filerOrderNum . '^Lab^2.16.840.1.113883.19.3.1.6^ISO|'; $altIdentifier = '3456543'; $obr .= $loinc->loincNum . '^' . $loinc->shortname . '^LN^' . $altIdentifier . '^' . $labTest->service . '^99USI|||'; // concatenated diagnoses , $diagnoses = array(); $iterator = new PatientDiagnosisIterator(); $iterator->setFilters(array('patientId' => (int) $orderLabTest->order->patientId)); foreach ($iterator as $pd) { $diagnoses[$pd->code] = $pd->diagnosis; } $relevantClinicalInfo = implode(',', $diagnoses); $obr .= date('YmdHiO', strtotime($labTest->observationTime)) . '||||||' . $relevantClinicalInfo . '|||'; $provider = $orderLabTest->order->provider; $providerId = strlen($provider->identifier) > 0 ? $provider->identifier : $provider->personId; $building = Building::getBuildingDefaultLocation($provider->personId); if ($provider->personId > 0) { $obr .= $providerId . '^' . $provider->person->lastName . '^' . $provider->person->firstName . '^^^^^^' . $building->name . '&2.16.840.1.113883.19.4.6&ISO'; } $obr .= '||||||' . date('YmdHiO', strtotime($labTest->reportTime)) . '|||' . $labTest->status . '||||||'; $reasonForStudy = array(); foreach ($diagnoses as $code => $description) { $codeSystem = strpos($code, '.') === false ? 'SCT' : 'I9CDX'; $reasonForStudy[] = $code . '^' . $description . '^' . $codeSystem; } $obr .= implode('~', $reasonForStudy); return $obr; }
public function paymentReceiptAction() { // d96de46c-be90-45b0-b5f9-0b4abee76483 $referenceId = $this->_getParam('referenceId'); $personId = (int) $this->_getParam('personId'); $visitId = (int) $this->_getParam('visitId'); $data = $this->_getAttachmentData($referenceId); $patient = new Patient(); $patient->personId = $personId; if ($personId > 0) { $patient->populate(); } $person = $patient->person; $visit = new Visit(); $visit->visitId = $visitId; if ($visitId > 0) { $visit->populate(); } $practiceId = (int) $visit->practiceId; if (!$practiceId > 0) { $buildingId = (int) $visit->buildingId; if ($buildingId > 0) { $building = new Building(); $building->buildingId = $buildingId; $building->populate(); $practiceId = (int) $building->practiceId; } else { $roomId = (int) $visit->roomId; if ($roomId > 0) { $room = new Room(); $room->roomId = $roomId; $room->populate(); $practiceId = (int) $room->building->practiceId; } } } $practice = new Practice(); $practice->practiceId = $practiceId; if ($practiceId > 0) { $practice->populate(); } $primaryAddress = $practice->primaryAddress; $xml = new SimpleXMLElement('<data/>'); $xmlPractice = $xml->addChild('practice'); $this->_addChild($xmlPractice, 'name', $practice->name); $this->_addChild($xmlPractice, 'primaryLine1', $primaryAddress->line1); $primaryCityStateZip = $primaryAddress->city . ' ' . $primaryAddress->state . ' ' . $primaryAddress->postalCode; $this->_addChild($xmlPractice, 'primaryCityStateZip', $primaryCityStateZip); $this->_addChild($xmlPractice, 'mainPhone', $practice->mainPhone->number); $xmlPatient = $xml->addChild('patient'); $name = $person->firstName . ' ' . $person->middleName . ' ' . $person->lastName; $this->_addChild($xmlPatient, 'name', $name); $addresses = Address::listAddresses($personId); 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]; } else { $address = array_pop($addresses); } } } } } $billingCityStateZip = $address->city . ' ' . $address->state . ' ' . $address->postalCode; $this->_addChild($xmlPatient, 'billingLine1', $address->line1); $this->_addChild($xmlPatient, 'billingCityStateZip', $billingCityStateZip); $iterator = new PatientProcedureIterator(); $iterator->setFilters(array('visitId' => $visitId)); $procedures = array(); foreach ($iterator as $row) { $procedures[] = $row->code; } $iterator = new PatientDiagnosisIterator(); $iterator->setFilters(array('visitId' => $visitId)); $diagnoses = array(); foreach ($iterator as $row) { $diagnoses[] = $row->code; } $xmlNotes = $xmlPatient->addChild('notes'); $note = implode(',', $procedures) . " \t " . implode(',', $diagnoses) . " \t " . date('m/d/y', strtotime($visit->dateOfTreatment)); $this->_addChild($xmlNotes, 'note', $note); $today = date('Y-m-d'); $todaysTotal = 0; $iterator = new PaymentIterator(); $iterator->setFilters(array('visitId' => $visitId, 'company' => 'System', 'paymentDate' => $today)); $payments = array(); foreach ($iterator as $row) { $payments[] = $row; } $iterator->setFilters(array('personId' => $personId, 'unallocated' => true, 'paymentDate' => $today)); foreach ($iterator as $row) { $payments[] = $row; } foreach ($payments as $row) { $xmlPayment = $xmlPatient->addChild('payments'); $paymentDate = date('m/d/y', strtotime($row->paymentDate)); $this->_addChild($xmlPayment, 'date', $paymentDate); $this->_addChild($xmlPayment, 'description', $row->title . ' .... Thank You'); $this->_addChild($xmlPayment, 'method', $row->paymentType); $amount = (double) $row->amount; $todaysTotal += $amount; $this->_addChild($xmlPayment, 'amount', '-' . number_format($amount, 2)); $this->_addChild($xmlPayment, 'insurance', $row->insuranceDisplay); } $fees = $visit->calculateFees(); $previousBalance = $fees['total']; $this->_addChild($xmlPatient, 'previousBalance', number_format($previousBalance, 2)); $this->_addChild($xmlPatient, 'todaysTotal', '-' . number_format($todaysTotal, 2)); $totalDue = $previousBalance - $todaysTotal; $this->_addChild($xmlPatient, 'totalDue', number_format($totalDue, 2)); $totalDueFromPatient = $previousBalance; $this->_addChild($xmlPatient, 'totalDueFromPatient', number_format($totalDueFromPatient, 2)); 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 listDiagnosesAction() { $visitId = (int) $this->_getParam('visitId'); $id = (int) $this->_getParam('id'); $rows = array(); if ($visitId > 0) { $visit = new Visit(); $visit->visitId = $visitId; $visit->populate(); $patientProcedure = new PatientProcedure(); $patientProcedure->patientProcedureId = $id; $patientProcedure->populate(); $diagnoses = array(); for ($i = 1; $i <= 8; $i++) { $field = 'diagnosisCode' . $i; $key = $patientProcedure->{$field}; if (strlen($key) > 0) { $diagnoses[$key] = $key; } } $enabled = array(); $disabled = array(); $patientDiagnosisIterator = new PatientDiagnosisIterator(); $patientDiagnosisIterator->setFilters(array('patientId' => (int) $visit->patientId, 'visitId' => $visitId)); foreach ($patientDiagnosisIterator as $row) { $tmp = array(); $tmp['id'] = $row->code; $tmp['data'] = array(); $tmp['data'][] = isset($diagnoses[$row->code]) ? '1' : ''; $diagnosis = $row->code . ': ' . $row->diagnosis; if ($row->isPrimary) { $diagnosis = '<strong>' . $diagnosis . '</strong>'; } $tmp['data'][] = $diagnosis; if ($tmp['data'][0] == '1') { $enabled[$diagnoses[$row->code]] = $tmp; } else { $disabled[] = $tmp; } } $tmp = $enabled; $enabled = array(); foreach ($diagnoses as $diagnosis) { $enabled[] = $tmp[$diagnosis]; } $rows = array_merge($enabled, $disabled); } $data = array(); $data['rows'] = $rows; $json = Zend_Controller_Action_HelperBroker::getStaticHelper('json'); $json->suppressExit = true; $json->direct($data); }