test_id; // the investigation order id $arr_parameters = json_decode($request->parameters); $results_time = $request->time; $results_arr = []; $flag_arr = []; $test_code_arr = []; foreach ($arr_parameters as $parameter) { $results_arr[] = $parameter[1]; $flag_arr[] = $parameter[2]; $test_code_arr[] = $parameter[0]; } $results = new LabMachineResult(); $results->sample_id = $test_id; $results->results = implode(",", $results_arr); $results->abnormal_flag = implode(",", $flag_arr); $results->test_code = implode(",", $test_code_arr); $results->results_time = $results_time; $results->save(); } public function receive_results_mispa(Request $request) { $test_id = $request->SID ?? 0; $patient_id = $request->PID ?? 0; $machine_id = $request->machine_id ?? 0; $arr_parameters = json_decode($request->results); $results_arr = []; $flag_arr = []; $test_code_arr = []; foreach ($arr_parameters as $parameter) { $test_code_arr[] = $parameter[0]; $results_arr[] = str_replace(' ', '', $parameter[1]); $flag_arr[] = strtoupper($parameter[2]); } $results = new LabMachineResult(); $results->sample_id = $test_id; $results->results = implode(",", $results_arr); $results->abnormal_flag = implode(",", $flag_arr); $results->test_code = implode(",", $test_code_arr); $results->machine_id = $machine_id; $results->save(); } public function import_results($sample_id) { $lab_machine_result = LabMachineResult::where('sample_id', $sample_id)->orderBy('id', 'desc')->first(); $results = explode(",", $lab_machine_result->results); $flag = explode(",", $lab_machine_result->abnormal_flag); $test_code = explode(",", $lab_machine_result->test_code); $machine_id = $lab_machine_result->machine_id; $test_ids = []; $test_flag = []; $test_results = []; for ($i = 0; $i < count($test_code); $i++) { $filters = []; if (is_integer($machine_id)) { $filters[] = ['machine_name', '=', $machine_id]; } $test_id = DB::table("investigation_test_codes") ->where("test_code", $test_code[$i]) ->where($filters)->first()?->investigation_id; if (is_numeric($test_id)) { $test_flag[] = ($flag[$i] == "N") ? "" : $flag[$i]; $test_ids[] = $test_id; $test_results[] = $results[$i]; } } if (count($test_ids) > 0) { $correct_ids_array = []; $correct_values_array = []; $correct_comments_array = []; $parent_investigation_id = get_name($test_ids[0], 'id', 'investigation_id', 'investigation_specialised_variables'); $specialized_variables = DB::table('investigation_specialised_variables')->whereNull('deleted_at')->where('investigation_id', $parent_investigation_id)->orderBy('ranking','asc')->get(); foreach ($specialized_variables as $variable) { $key = array_search($variable->id, $test_ids); if (is_integer($key)) { $correct_ids_array[] = $test_ids[$key]; $correct_values_array[] = $test_results[$key]; $correct_comments_array[] = $test_flag[$key]; } } $this->map_machine_results_to_patient($correct_ids_array, $sample_id, $correct_values_array, $correct_comments_array); flash("Results have been imported successfully")->success(); } else { flash("Results not imported because the test codes are missing")->error(); } return redirect('/investigations/view_lab_results_details/' . $sample_id); } public function map_machine_results_to_patient($test_ids, $sample_id, $results, $comments) { // get investigation order details $investigation_order = OrderedInvestigation::find($sample_id); $parent_investigation_id = get_name($test_ids[0], 'id', 'investigation_id', 'investigation_specialised_variables'); if ($investigation_order){ // investigation ids $investigation_ids = explode(",", $investigation_order->investigation_id); // check if investigations results are available $investigation_result = InvestigationResults::where('order_id', $sample_id)->first(); if ($investigation_result){ // edit the results $investigation_result->updated_by = Auth::id(); $values_array = explode(",", $investigation_result->value); $comments_array = explode(",", $investigation_result->comment); $specialised_results_id = $values_array[array_search($parent_investigation_id, $investigation_ids)]; if (InvestigationSpecialisedResult::find($specialised_results_id)) { $investigation_specialised_results = InvestigationSpecialisedResult::find($specialised_results_id); } else { $investigation_specialised_results = new InvestigationSpecialisedResult(); $investigation_specialised_results->created_by = Auth::id(); } $investigation_specialised_results->specialised_variable_id = implode(',', $test_ids); $investigation_specialised_results->value = implode(',', $results); $investigation_specialised_results->comment = implode(',', $comments); $investigation_specialised_results->updated_by = Auth::id(); $investigation_specialised_results->save(); $values_array[array_search($parent_investigation_id, $investigation_ids)] = $investigation_specialised_results->id; $comments_array[array_search($parent_investigation_id, $investigation_ids)] = "-"; $investigation_result->value = implode(",", $values_array); $investigation_result->comment = implode(",", $comments_array); $investigation_result->save(); } else { // add new results to the table $order = new InvestigationResults; $order->per_investigation = implode(",", array_fill(0, count($investigation_ids), '0')); $order->all_authenticated = 0; $order->order_id = $sample_id; $order->patient_id = $investigation_order->patient_id; $order->episode_id = $investigation_order->episode_id; $order->created_by = Auth::id(); $order->inpatient = 0; $order->result_type = $investigation_order->order_type; $values_array = array_fill(0, count($investigation_ids), ''); $comments_array = array_fill(0, count($investigation_ids), ''); $investigation_specialised_results = new InvestigationSpecialisedResult(); $investigation_specialised_results->specialised_variable_id = implode(',', $test_ids); $investigation_specialised_results->value = implode(',', $results); $investigation_specialised_results->comment = implode(',', $comments); $investigation_specialised_results->created_by = Auth::id(); $investigation_specialised_results->updated_by = Auth::id(); $investigation_specialised_results->save(); $values_array[array_search($parent_investigation_id, $investigation_ids)] = $investigation_specialised_results->id; $comments_array[array_search($parent_investigation_id, $investigation_ids)] = "-"; $order->investigation_id = $investigation_order->investigation_id; $order->value = implode(",", $values_array); $order->comment = implode(",", $comments_array); // save the order $order->save(); } } } public function view_lab_machine_results(Request $request) { $search_text = ""; $filters = []; // if patient id is active, get all records regardless of date; else search by date if (isset($request->lab_number) && $request->lab_number != '') { $filters[] = ['sample_id', '=', $request->lab_number]; $search_text .= "Lab Number: " . $request->lab_number; } else { switch ($request->search_date_by){ case 'yesterday': $end_date = Carbon::yesterday()->endOfDay(); $start_date = Carbon::yesterday()->startOfDay(); $search_text .= "Yesterday "; break; case 'custom_date': $end_date = Carbon::parse($request->start_date)->endOfDay(); $start_date = Carbon::parse($request->start_date)->startOfDay(); $search_text .= "From: " . streamline_date($start_date) . " "; break; case 'custom_date_range': $end_date = Carbon::parse($request->end_date)->endOfDay(); $start_date = Carbon::parse($request->start_date)->startOfDay(); $search_text .= "From: " . streamline_date($start_date) . " to " . streamline_date($end_date) . " "; break; case 'today': default: $end_date = Carbon::today()->endOfDay(); $start_date = Carbon::today()->startOfDay(); $search_text .= "Today "; break; } $filters[] = ['created_at', '>', $start_date]; $filters[] = ['created_at', '<', $end_date]; } $results = LabMachineResult::where($filters)->get(); $lab_machines = LabInstrument::pluck("name", "id")->prepend('- select -', ''); return view('investigations::lab_instruments.view_lab_machine_results', compact('results', 'search_text', 'lab_machines')); } public function restart_python_script(Request $request) { $lab_instrument = LabInstrument::find($request->lab_instrument); if(!$lab_instrument || is_null($lab_instrument->restart_lis_path)) { flash("Could not find the lab instrument selected")->error(); return back()->withInput(); } // 'public/uploads/lab_machine_scripts/kisiizi/restart_lis.py' $process = new Process(['python3', base_path($lab_instrument->restart_lis_path)]); $process->run(); $process->wait(); if (!$process->isSuccessful()) { throw new ProcessFailedException($process); } $lab_machine_restart = new LabMachineRestart(); if (strpos($process->getOutput(), '1') !== false) { flash("Lab integration has been restarted successfully")->success(); $lab_machine_restart->result = $process->getOutput(); } else { flash("An error occurred while establishing a connection. Please contact the Stre@mline team")->error(); $lab_machine_restart->result = $process->getErrorOutput(); } $lab_machine_restart->created_by = Auth::id(); $lab_machine_restart->save(); return redirect('lab_machines/view_lab_machine_results'); } public function preview_lab_machine_results($id) { $result = LabMachineResult::find($id); $html_text = "
| Test Code | "; $html_text .= "Specialised Variable | "; $html_text .= "Result | "; $html_text .= "Flag | "; $html_text .= "
|---|---|---|---|
| " . $test_code_array[$i] . " | "; $html_text .= "" . $specialised_variable_name . " | "; $html_text .= "" . $results_array[$i] . " | "; $html_text .= "" . $flag_array[$i] . " | "; $html_text .= "