コード例 #1
0
 public function get_results()
 {
     $dir = '/srv/ftp/shared/import/';
     $files = scandir($dir);
     $count = count($files);
     $full_count = 0;
     for ($i = 2; $i < $count; $i++) {
         $line = $files[$i];
         $file = $dir . $line;
         $hl7 = file_get_contents($file);
         $hl7_lines = explode("\r", $hl7);
         $results = array();
         $j = 0;
         $result_last = '';
         $from = '';
         foreach ($hl7_lines as $line) {
             $line_section = explode("|", $line);
             if ($line_section[0] == "MSH") {
                 if (strpos($line_section[3], "LAB") !== FALSE) {
                     $test_type = "Laboratory";
                 } else {
                     $test_type = "Imaging";
                 }
             }
             if ($line_section[0] == "PID") {
                 $name_section = explode("^", $line_section[5]);
                 $lastname = $name_section[0];
                 $firstname = $name_section[1];
                 $year = substr($line_section[7], 0, 4);
                 $month = substr($line_section[7], 4, 2);
                 $day = substr($line_section[7], 6, 2);
                 $dob = $year . "-" . $month . "-" . $day . " 00:00:00";
                 $sex = strtolower($line_section[8]);
             }
             if ($line_section[0] == "ORC") {
                 $provider_section = explode("^", $line_section[12]);
                 $provider_lastname = $provider_section[1];
                 $provider_firstname = $provider_section[2];
                 $provider_id = $provider_section[0];
                 $practice_section = explode("^", $line_section[17]);
                 $practice_lab_id = $practice_section[0];
             }
             if ($line_section[0] == "OBX") {
                 $test_name_section = explode("^", $line_section[3]);
                 $results[$j]['test_name'] = $test_name_section[1];
                 $results[$j]['test_result'] = $line_section[5];
                 $results[$j]['test_units'] = $line_section[6];
                 $results[$j]['test_reference'] = $line_section[7];
                 $results[$j]['test_flags'] = $line_section[8];
                 $year1 = substr($line_section[14], 0, 4);
                 $month1 = substr($line_section[14], 4, 2);
                 $day1 = substr($line_section[14], 6, 2);
                 $hour1 = substr($line_section[14], 8, 2);
                 $minute1 = substr($line_section[14], 10, 2);
                 $results[$j]['test_datetime'] = $year1 . "-" . $month1 . "-" . $day1 . " " . $hour1 . ":" . $minute1 . ":00";
                 $j++;
             }
             if ($line_section[0] == "NTE") {
                 if ($line_section[1] == '1') {
                     $result_last = $j - 1;
                 }
                 if ($line_section[2] == "TX") {
                     $from = $line_section[3] . ", Ordering Provider: " . $provider_firstname . ' ' . $provider_lastname;
                     $keys = array_keys($results);
                     foreach ($keys as $key) {
                         $results[$key]['test_from'] = $from;
                     }
                 } else {
                     $results[$result_last]['test_result'] .= "\n" . $line_section[3];
                 }
             }
         }
         $practice_id = '';
         $practice_row_test = Practiceinfo::where('peacehealth_id', '=', $practice_lab_id)->first();
         if (!$practice_row_test) {
             $patient_row = Demographics::where('lastname', '=', $lastname)->where('firstname', '=', $firstname)->where('DOB', '=', $dob)->where('sex', '=', $sex)->first();
             if ($patient_row) {
                 $pid = $patient_row->pid;
                 $demo_relate = DB::table('demographics_relate')->where('pid', '=', $pid)->first();
                 if ($demo_relate) {
                     $practice_id = $demo_relate->practice_id;
                 }
             }
         } else {
             $practice_id = $practice_row_test->practice_id;
         }
         if ($practice_id != '') {
             $practice_row = Practiceinfo::find($practice_id);
             Config::set('app.timezone', $practice_row->timezone);
             $provider_row = DB::table('users')->join('providers', 'providers.id', '=', 'users.id')->select('users.lastname', 'users.firstname', 'users.title', 'users.id')->where('providers.peacehealth_id', '=', $provider_id)->first();
             if ($provider_row) {
                 $provider_id = $provider_row->id;
             } else {
                 $provider_id = '';
             }
             $patient_row = Demographics::where('lastname', '=', $lastname)->where('firstname', '=', $firstname)->where('DOB', '=', $dob)->where('sex', '=', $sex)->first();
             if ($patient_row) {
                 $pid = $patient_row->pid;
                 $dob_message = date("m/d/Y", strtotime($patient_row->DOB));
                 $patient_name = $patient_row->lastname . ', ' . $patient_row->firstname . ' (DOB: ' . $dob_message . ') (ID: ' . $pid . ')';
                 $tests = 'y';
                 $test_desc = "";
                 $k = 0;
                 foreach ($results as $results_row) {
                     $test_data = array('pid' => $pid, 'test_name' => $results_row['test_name'], 'test_result' => $results_row['test_result'], 'test_units' => $results_row['test_units'], 'test_reference' => $results_row['test_reference'], 'test_flags' => $results_row['test_flags'], 'test_from' => $from, 'test_datetime' => $results_row['test_datetime'], 'test_type' => $test_type, 'test_provider_id' => $provider_id, 'practice_id' => $practice_id);
                     DB::table('tests')->insert($test_data);
                     $this->audit('Add');
                     if ($k == 0) {
                         $test_desc .= $results_row['test_name'];
                     } else {
                         $test_desc .= ", " . $results_row['test_name'];
                     }
                     $k++;
                 }
                 $practice_row = Practiceinfo::find($practice_id);
                 $directory = $practice_row->documents_dir . $pid;
                 $file_path = $directory . '/tests_' . time() . '.pdf';
                 $html = $this->page_intro('Test Results', $practice_id);
                 $html .= $this->page_results($pid, $results, $patient_name);
                 $this->generate_pdf($html, $file_path);
                 $documents_date = date("Y-m-d H:i:s", time());
                 $test_desc = 'Test results for ' . $patient_name;
                 $pages_data = array('documents_url' => $file_path, 'pid' => $pid, 'documents_type' => $test_type, 'documents_desc' => $test_desc, 'documents_from' => $from, 'documents_date' => $documents_date);
                 $documents_id = DB::table('documents')->insertGetId($pages_data);
                 $this->audit('Add');
             } else {
                 $messages_pid = '';
                 $patient_name = "Unknown patient: " . $lastname . ", " . $firstname . ", DOB: " . $month . "/" . $day . "/" . $year;
                 $tests = 'unk';
                 foreach ($results as $results_row) {
                     $test_data = array('test_name' => $results_row['test_name'], 'test_result' => $results_row['test_result'], 'test_units' => $results_row['test_units'], 'test_reference' => $results_row['test_reference'], 'test_flags' => $results_row['test_flags'], 'test_unassigned' => $patient_name, 'test_from' => $from, 'test_datetime' => $results_row['test_datetime'], 'test_type' => $test_type, 'test_provider_id' => $provider_id, 'practice_id' => $practice_id);
                     DB::table('tests')->insert($test_data);
                     $this->audit('Add');
                 }
                 $documents_id = '';
             }
             $subject = "Test results for " . $patient_name;
             $body = "Test results for " . $patient_name . "\n\n";
             foreach ($results as $results_row1) {
                 $body .= $results_row1['test_name'] . ": " . $results_row1['test_result'] . ", Units: " . $results_row1['test_units'] . ", Normal reference range: " . $results_row1['test_reference'] . ", Date: " . $results_row1['test_datetime'] . "\n";
             }
             $body .= "\n" . $from;
             if ($tests = "unk") {
                 $body .= "\n" . "Patient is unknown to the system.  Please reconcile this test result in your dashboard.";
             }
             if ($provider_id != '') {
                 $provider_name = $provider_row->firstname . " " . $provider_row->lastname . ", " . $provider_row->title . " (" . $provider_id . ")";
                 $data_message = array('pid' => $pid, 'message_to' => $provider_name, 'message_from' => $provider_row['id'], 'subject' => $subject, 'body' => $body, 'patient_name' => $patient_name, 'status' => 'Sent', 'mailbox' => $provider_id, 'practice_id' => $practice_id, 'documents_id' => $documents_id);
                 DB::table('messaging')->insert($data_message);
                 $this->audit('Add');
             }
             $file1 = str_replace('/srv/ftp/shared/import/', '', $file);
             rename($file, $practice_row->documents_dir . $file1);
             $full_count++;
         } else {
             $file1 = str_replace('/srv/ftp/shared/import/', '', $file);
             rename($file, $practice_row->documents_dir . $file1 . '.error');
         }
     }
     return $full_count;
 }