mirror of
https://gitlab.com/signalytic/client-external/streamline/streamline-emr.git
synced 2026-09-11 10:41:32 +00:00
1606 lines
82 KiB
PHP
Executable File
1606 lines
82 KiB
PHP
Executable File
<?php
|
|
|
|
namespace Modules\Patients\Http\Controllers;
|
|
|
|
use Illuminate\Database\Eloquent\Model;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\DB;
|
|
use Streamline\Models\Clinic;
|
|
use Streamline\Models\MentalHealthConsultation;
|
|
use Streamline\Models\Patient;
|
|
use Streamline\Models\InpatientInfo;
|
|
use Illuminate\Support\Facades\Auth;
|
|
use Streamline\Models\PatientAppointment;
|
|
use Streamline\Models\Triage;
|
|
use Streamline\Models\PatientEpisode;
|
|
use Illuminate\Support\Carbon;
|
|
use Streamline\Models\Consultation;
|
|
use Streamline\Models\Treatment;
|
|
use Streamline\Models\OrderedInvestigation;
|
|
use Streamline\Models\OrderedProcedure;
|
|
use Streamline\Models\OrderedSundry;
|
|
use Streamline\Models\InvestigationResults;
|
|
use Streamline\Models\User;
|
|
use Streamline\Models\CardioEchoResult;
|
|
use Barryvdh\Snappy\Facades\SnappyPdf;
|
|
use Streamline\Models\Investigation;
|
|
use Streamline\Models\Outcome;
|
|
use Streamline\Models\PrioritySign;
|
|
use Streamline\Models\EmergencySign;
|
|
use Streamline\Models\WardInpatientDetailedNote;
|
|
use Streamline\Models\MessageBoard;
|
|
use Illuminate\Database\QueryException;
|
|
|
|
class ConsultationController extends Controller
|
|
{
|
|
|
|
public function __construct()
|
|
{
|
|
$this->middleware('auth');
|
|
}
|
|
|
|
/**
|
|
* Display a listing of the resource.
|
|
*
|
|
* @return \Illuminate\Http\Response
|
|
*/
|
|
public function index()
|
|
{
|
|
//
|
|
}
|
|
|
|
public function create()
|
|
{
|
|
|
|
if (!session()->has('patient_id') || !session()->has('episode_id')) :
|
|
flash('Patient is not selected')->error();
|
|
$messages = MessageBoard::orderBy('created_at', 'desc')->paginate(3);
|
|
return view('home', compact('messages'));
|
|
endif;
|
|
|
|
$clinics = Clinic::orderBy('name')->pluck("name", "id")->toArray();
|
|
$clinics = ['0' => "Don't assign clinic"] + $clinics;
|
|
$users = User::orderBy('first_name')->select("id", "first_name", "last_name")->get();
|
|
|
|
$episode_id = session()->get('episode_id');
|
|
$patient_id = session()->get('patient_id');
|
|
|
|
if (session()->get('consultation_with_notes') == 1) {
|
|
$consultation_with_notes = true;
|
|
} else {
|
|
$consultation_with_notes = false;
|
|
}
|
|
|
|
$patient = Patient::where('id', $patient_id)->first();
|
|
$episode = PatientEpisode::where('id', $episode_id)->first();
|
|
$triage = Triage::where(['id' => $episode->triage_id])->first();
|
|
|
|
$is_mental_health_clinic = false;
|
|
|
|
// fetch the clinic id and determine if this is a mental health consultation
|
|
$clinic_slug = get_name($episode->clinic_id, "id", "slug", "clinics");
|
|
if ($clinic_slug == "mental_health") {
|
|
session()->put(['is_mental_health_clinic' => 1]);
|
|
$is_mental_health_clinic = true;
|
|
}
|
|
|
|
/*==== do this for assignment of mental clinic from patient home page ===*/
|
|
if (session()->get("is_mental_health_clinic") == 1) {
|
|
$is_mental_health_clinic = true;
|
|
}
|
|
// unset the session for is_mental_health_clinic
|
|
session()->forget('is_mental_health_clinic');
|
|
/*====== end that thing for assignment of mental clinic from patient home page =================*/
|
|
|
|
$documents = DB::table('patient_documents')->whereNull('deleted_at')->where('patient_id', $patient_id)->orderBy('date_taken', 'desc')->get();
|
|
|
|
$categories = DB::table('patient_categories')->where('available', 1)->pluck("name", "id");
|
|
$drug_categories = DB::table('drug_categories')->orderBy('name', 'asc')->get();
|
|
|
|
$diagnoses = DB::table('diagnoses')->whereNull('deleted_at')->where('available', 1)->orderBy('name')->pluck("name", "id")->prepend('- select -', '');
|
|
$outcomes = DB::table('outcomes')->whereNull('deleted_at')->orderBy('name')->pluck('name', 'id')->prepend('- select -', '');
|
|
$wards = DB::table('wards')->where('available', 1)->whereNull('deleted_at')->orderBy('name')->pluck('name', 'id')->prepend('- select -', '');
|
|
$referrals = DB::table('referral_hospitals')->whereNull('deleted_at')->orderBy('name')->pluck('name', 'id')->prepend('- select -', '');
|
|
//select treatment
|
|
$treatments = Treatment::where(['patient_id' => $patient_id, 'episode_id' => $episode_id, 'tta' => 0])->get();
|
|
//symptoms
|
|
$symptoms = DB::table('symptoms')->whereNull('deleted_at')->orderBy('name')->pluck("name", "id")->toArray();
|
|
$symptoms = ['' => '- select -'] + $symptoms;
|
|
$symptoms_periods = ['' => '- select -', 'Hours' => 'Hours', 'Days' => 'Days', 'Weeks' => 'Weeks', 'Months' => 'Months', 'Years' => 'Years'];
|
|
|
|
//allergies and alerts
|
|
$known_patient_allergies = \Streamline\Models\Allergy::where('patient_id', $patient_id)->orderBy('created_at', 'desc')->take(2)->get();
|
|
$known_patient_alerts = \Streamline\Models\Alert::where('patient_id', $patient_id)->orderBy('created_at', 'desc')->take(2)->get();
|
|
$drug_categories_array = DB::table('drug_categories')->pluck('name', 'id');
|
|
/* get ordered procedures */
|
|
$ordered_procedures = OrderedProcedure::where(['patient_id' => $patient_id, 'episode_id' => $episode_id])->get();
|
|
//check for ordered investigations,procedures and treatment
|
|
$ordered_investigations = OrderedInvestigation::where(['patient_id' => $patient_id, 'episode_id' => $episode_id])->get();
|
|
/* get ordered sundries */
|
|
$ordered_sundries = OrderedSundry::where(['patient_id' => $patient_id, 'episode_id' => $episode_id])->get();
|
|
//check for authenticated investigations
|
|
$investigation_results = InvestigationResults::where(['patient_id' => $patient_id, 'episode_id' => $episode_id])->get();
|
|
$diagnoses_all = DB::table('diagnoses')->whereNull('deleted_at')->select('id', 'prompts', 'reference_areas', 'reference_names')->get();
|
|
|
|
/* ======== added to cater for review episode =========*/
|
|
$is_episode_a_review = check_if_episode_is_a_followup($episode->id);
|
|
$parent_episode_treatments = [];
|
|
$parent_episode_ordered_procedures = [];
|
|
$parent_episode_ordered_investigations = [];
|
|
$parent_episode_ordered_sundries = [];
|
|
$parent_episode_investigation_results = [];
|
|
|
|
if ($is_episode_a_review) {
|
|
$parent_episode_details = PatientEpisode::find($episode->parent_episode_id);
|
|
|
|
$parent_episode_treatments = Treatment::where(['patient_id' => $patient_id, 'episode_id' => $parent_episode_details->id, 'tta' => 0])->get();
|
|
$parent_episode_ordered_procedures = OrderedProcedure::where(['patient_id' => $patient_id, 'episode_id' => $parent_episode_details->id])->get();
|
|
$parent_episode_ordered_investigations = OrderedInvestigation::where(['patient_id' => $patient_id, 'episode_id' => $parent_episode_details->id])->get();
|
|
/* get ordered sundries */
|
|
$parent_episode_ordered_sundries = OrderedSundry::where(['patient_id' => $patient_id, 'episode_id' => $parent_episode_details->id])->get();
|
|
//check for authenticated investigations
|
|
$parent_episode_investigation_results = InvestigationResults::where(['patient_id' => $patient_id, 'episode_id' => $parent_episode_details->id])->get();
|
|
}
|
|
/* ========end of variables added to cater for review episodes ========*/
|
|
|
|
$users_collection = DB::table('users')->orderBy("first_name", "asc")->select("id")->get()->toArray();
|
|
$users_array = [];
|
|
foreach ($users_collection as $value) {
|
|
$user = User::find($value->id);
|
|
if (!is_null($user)) {
|
|
$users_array[$value->id] = get_full_name($value->id, 'id', 'first_name', 'last_name', 'users');
|
|
}
|
|
}
|
|
$users_array = ['' => '- select -'] + $users_array;
|
|
|
|
$hmis_categories = DB::table('hmis_categories')->orderBy('title', 'asc')->pluck('title', 'id')->toArray();
|
|
$hmis_categories = ['' => '- select -'] + $hmis_categories;
|
|
|
|
$cardio_echo = CardioEchoResult::where('episode_id', $episode_id)->first();
|
|
|
|
$patient_episodes = DB::table('patient_episodes')->where('patient_id', $patient_id)->whereNotIn('id', [$episode_id])->latest()->take(5)->get();
|
|
$past_episodes_info = [];
|
|
$counter = 0;
|
|
|
|
foreach ($patient_episodes as $patient_episode) {
|
|
if ($counter == 5) {
|
|
break;
|
|
}
|
|
|
|
if (!is_episode_safe_to_delete($patient_episode->id) && isset($patient_episode->consultation_id)) { // exclude empty episodes
|
|
$consultations_details = DB::table('consultations')->find($patient_episode->consultation_id);
|
|
|
|
if ($consultations_details) {
|
|
$past_episodes_info[$counter]["start_date"] = streamline_date_time($patient_episode->created_at);
|
|
$past_episodes_info[$counter]["episode_id"] = $patient_episode->id;
|
|
|
|
$past_episodes_info[$counter]["primary_diagnosis"] = $consultations_details->primary_diagnosis ?? 0;
|
|
if (unserialize($consultations_details->other_diagnoses)) {
|
|
$past_episodes_info[$counter]["other_diagnoses"] = unserialize($consultations_details->other_diagnoses);
|
|
} else {
|
|
$past_episodes_info[$counter]["other_diagnoses"] = [];
|
|
}
|
|
|
|
$past_episodes_info[$counter]["outcome"] = $consultations_details->outcome_id ?? 0;
|
|
$doctor_id = $consultations_details->consultation_done_by ?? $consultations_details->created_by;
|
|
$past_episodes_info[$counter]["doctor"] = get_full_name($doctor_id, 'id', 'first_name', 'last_name', 'users');
|
|
$past_episodes_info[$counter]["clinic"] = isset($patient_episode->clinic_id) ? get_name($patient_episode->clinic_id, 'id', 'name', 'clinics') : "N/A";
|
|
|
|
if (isset($patient_episode->triage_id)) {
|
|
$triage_details = DB::table('triage')->find($patient_episode->triage_id);
|
|
|
|
if ($triage_details) {
|
|
$past_episodes_info[$counter]["symptoms"] = [
|
|
"symptom_duration" => $triage_details->symptom_duration,
|
|
"symptoms" => $triage_details->symptoms
|
|
];
|
|
|
|
$observations = explode(",", $triage_details->observations);
|
|
$past_episodes_info[$counter]["resp"] = "N/A";
|
|
$past_episodes_info[$counter]["mmhg"] = "N/A";
|
|
$past_episodes_info[$counter]["pulse"] = "N/A";
|
|
$past_episodes_info[$counter]["temp"] = "N/A";
|
|
|
|
foreach ($observations as $observation) {
|
|
if (strpos($observation, "Temperature") !== false) {
|
|
$past_episodes_info[$counter]["temp"] = explode("=", $observation)[1];
|
|
}
|
|
|
|
if (strpos($observation, "Pulse") !== false) {
|
|
$past_episodes_info[$counter]["pulse"] = explode("=", $observation)[1];
|
|
}
|
|
|
|
if (strpos($observation, "Systolic bp") !== false) {
|
|
$past_episodes_info[$counter]["mmhg"] = explode("=", $observation)[1];
|
|
}
|
|
|
|
if (strpos($observation, "Diastolic bp") !== false) {
|
|
$past_episodes_info[$counter]["mmhg"] = $past_episodes_info[$counter]["mmhg"] . " / " . explode("=", $observation)[1];
|
|
}
|
|
|
|
if (strpos($observation, "Respirations") !== false) {
|
|
$past_episodes_info[$counter]["resp"] = explode("=", $observation)[1];
|
|
}
|
|
}
|
|
} else {
|
|
$past_episodes_info[$counter]["symptoms"] = [];
|
|
$past_episodes_info[$counter]["resp"] = "N/A";
|
|
$past_episodes_info[$counter]["mmhg"] = "N/A";
|
|
$past_episodes_info[$counter]["pulse"] = "N/A";
|
|
$past_episodes_info[$counter]["temp"] = "N/A";
|
|
}
|
|
} else {
|
|
$past_episodes_info[$counter]["symptoms"] = [];
|
|
$past_episodes_info[$counter]["resp"] = "N/A";
|
|
$past_episodes_info[$counter]["mmhg"] = "N/A";
|
|
$past_episodes_info[$counter]["pulse"] = "N/A";
|
|
$past_episodes_info[$counter]["temp"] = "N/A";
|
|
}
|
|
|
|
$counter++;
|
|
}
|
|
}
|
|
}
|
|
|
|
return view('patients::consultations.create', compact(
|
|
'patient',
|
|
'triage',
|
|
'episode',
|
|
'diagnoses',
|
|
'outcomes',
|
|
'consultation_with_notes',
|
|
'wards',
|
|
'categories',
|
|
'drug_categories',
|
|
'referrals',
|
|
'documents',
|
|
'treatments',
|
|
'symptoms',
|
|
'known_patient_allergies',
|
|
'is_mental_health_clinic',
|
|
'known_patient_alerts',
|
|
'drug_categories_array',
|
|
'ordered_procedures',
|
|
'ordered_investigations',
|
|
'investigation_results',
|
|
'ordered_sundries',
|
|
'users',
|
|
'clinics',
|
|
'diagnoses_all',
|
|
'parent_episode_treatments',
|
|
'parent_episode_ordered_procedures',
|
|
'parent_episode_ordered_sundries',
|
|
'parent_episode_ordered_investigations',
|
|
'parent_episode_investigation_results',
|
|
'users_array',
|
|
'hmis_categories',
|
|
'cardio_echo',
|
|
'past_episodes_info',
|
|
'symptoms_periods'
|
|
));
|
|
}
|
|
|
|
/**
|
|
* Store a newly created resource in storage.
|
|
*
|
|
* @param \Illuminate\Http\Request $request
|
|
* @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector
|
|
*/
|
|
public function store(Request $request)
|
|
{
|
|
|
|
if (!session()->has('patient_id') || !session()->has('episode_id')) :
|
|
flash('Patient is not selected')->error();
|
|
$messages = MessageBoard::orderBy('created_at', 'desc')->paginate(3);
|
|
return view('home', compact('messages'));
|
|
endif;
|
|
|
|
$consultation = new Consultation;
|
|
|
|
$patient_id = session()->get('patient_id');
|
|
$episode_id = session()->get('episode_id');
|
|
|
|
$consultation->patient_id = $patient_id;
|
|
$consultation->episode_id = $episode_id;
|
|
|
|
$symptoms_array = $request->symptoms ?? [];
|
|
$duration_array = $request->duration ?? [];
|
|
$time_array = $request->time ?? [];
|
|
|
|
// Build symptoms and duration variables
|
|
$durations_final = [];
|
|
for ($x = 0; $x < count($symptoms_array); $x++) {
|
|
$durations_final[] = $duration_array[$x] . " " . $time_array[$x];
|
|
}
|
|
|
|
$consultation->symptoms = implode(",", $symptoms_array);
|
|
$consultation->symptom_duration = implode(",", $durations_final);
|
|
|
|
$consultation->primary_diagnosis = $request->primary_diagnosis;
|
|
$consultation->other_diagnoses = (!empty($request->other_diagnosis[0])) ? serialize($request->other_diagnosis) : null;
|
|
$consultation->comments = $request->comments;
|
|
$consultation->history_comments = $request->history_comments;
|
|
$consultation->clinic_examination_comments = $request->clinic_examination_comments;
|
|
$consultation->investigation_and_management_plan_comments = $request->investigation_and_management_plan_comments;
|
|
$consultation->outcome_id = $request->outcome;
|
|
if ($request->died_on) $consultation->died_on = $request->died_on;
|
|
$consultation->rdt = $request->rdt;
|
|
if($request->attendance) $consultation->attendance = $request->attendance;
|
|
$consultation->rbs = $request->rbs;
|
|
$consultation->referral_notes = $request->referral_notes;
|
|
$consultation->tb_status_assessment = $request->tb_status_assessment;
|
|
$consultation->created_by = Auth::user()->id;
|
|
//$consultation->consultation_done_by = Auth::user()->id; still contemplating on whether to do update record
|
|
|
|
// begin saving for discharge mortality risk
|
|
$discharge_mortality = DB::table('discharge_mortality_risk')->where('patient_id', $patient_id)
|
|
->where('episode_id', $episode_id)
|
|
->first();
|
|
|
|
if ($discharge_mortality) {
|
|
DB::table('discharge_mortality_risk')
|
|
->where('id', $discharge_mortality->id)
|
|
->update(['malaria_test' => $request->rdt]);
|
|
}
|
|
// end discharge mortality risk save
|
|
|
|
// performing an ordered procedure.
|
|
if (!is_null($request->perform_selected)) {
|
|
foreach ($request->perform_selected as $procedure_array_id) {
|
|
$arr = explode(",", get_name($request->procedure_order_perform[$procedure_array_id], 'id', 'performed', 'ordered_procedures'));
|
|
$arr_id = explode(",", get_name($request->procedure_order_perform[$procedure_array_id], 'id', 'performed_id', 'ordered_procedures'));
|
|
|
|
$performed_id = record_staff_that_has_performed_the_service(
|
|
$patient_id,
|
|
$episode_id,
|
|
1,
|
|
$request->perform[$procedure_array_id],
|
|
0,
|
|
$request->procedure_performed_by[$procedure_array_id]
|
|
);
|
|
|
|
if (isset($arr[$request->procedure_performed_position[$procedure_array_id]])) {
|
|
$arr[$request->procedure_performed_position[$procedure_array_id]] = 1;
|
|
$arr_id[$request->procedure_performed_position[$procedure_array_id]] = $performed_id;
|
|
$update = DB::table('ordered_procedures')->where('id', $request->procedure_order_perform[$procedure_array_id])
|
|
->update(['performed' => implode(",", $arr), 'performed_id' => implode(",", $arr_id)]);
|
|
}
|
|
}
|
|
}
|
|
|
|
// performing an ordered services.
|
|
if (!is_null($request->service_perform_selected)) {
|
|
foreach ($request->service_perform_selected as $service_array_id) {
|
|
$arr = explode(",", get_name($request->service_order_perform[$service_array_id], 'id', 'performed', 'ordered_services'));
|
|
$arr_id = explode(",", get_name($request->service_order_perform[$service_array_id], 'id', 'performed_id', 'ordered_services'));
|
|
|
|
$performed_id = record_staff_that_has_performed_the_service(
|
|
$patient_id,
|
|
$episode_id,
|
|
3,
|
|
$request->service_perform[$service_array_id],
|
|
0,
|
|
$request->service_performed_by[$service_array_id]
|
|
);
|
|
|
|
if (isset($arr[$request->service_performed_position[$service_array_id]])) {
|
|
$arr[$request->service_performed_position[$service_array_id]] = 1;
|
|
$arr_id[$request->service_performed_position[$service_array_id]] = $performed_id;
|
|
$update = DB::table('ordered_services')->where('id', $request->service_order_perform[$service_array_id])
|
|
->update(['performed' => implode(",", $arr), 'performed_id' => implode(",", $arr_id)]);
|
|
}
|
|
}
|
|
}
|
|
|
|
// mental health consultation
|
|
if (isset($request->mental_health_clinic)) {
|
|
$mental_health_consultation = new MentalHealthConsultation();
|
|
$mental_health_consultation->patient_id = $patient_id;
|
|
$mental_health_consultation->episode_id = $episode_id;
|
|
$mental_health_consultation->hallucinations = $request->hallucinations;
|
|
$mental_health_consultation->delusions = $request->delusions;
|
|
$mental_health_consultation->disorganised_speech = $request->disorganised_speech;
|
|
$mental_health_consultation->abnormal_psychomotor_behaviour = $request->abnormal_psychomotor_behaviour;
|
|
$mental_health_consultation->impaired_cognition = $request->impaired_cognition;
|
|
$mental_health_consultation->depression = $request->depression;
|
|
$mental_health_consultation->mania = $request->mania;
|
|
$mental_health_consultation->hamilton_anxiety_score = $request->hamilton_anxiety_score;
|
|
$mental_health_consultation->alcohol_screening_score = $request->alcohol_screening_score;
|
|
$mental_health_consultation->patient_satisfaction_score = $request->patient_satisfaction_score;
|
|
$mental_health_consultation->caregiver_satisfaction_score = $request->caregiver_satisfaction_score;
|
|
$mental_health_consultation->created_by = Auth::user()->id;
|
|
$mental_health_consultation->save();
|
|
}
|
|
|
|
switch ($request->outcome):
|
|
case 1: //Admitted
|
|
// check to see that the ward is valid
|
|
if (is_numeric($request->ward_id)) {
|
|
// check if the patient is currently admitted and just update their status
|
|
$inpatient_info = InpatientInfo::where(['patient_id' => $patient_id, 'episode_id' => $episode_id, 'discharged' => 0])->orderBy('created_at', 'desc')->first();
|
|
|
|
if ($inpatient_info) {
|
|
$inpatient_info->ward_id = $request->ward_id;
|
|
$inpatient_info->primary_diagnosis = $request->primary_diagnosis;
|
|
$inpatient_info->other_diagnoses = (!empty($request->other_diagnosis[0])) ? serialize($request->other_diagnosis) : null;
|
|
$inpatient_info->comments = $request->comments;
|
|
$inpatient_info->updated_by = Auth::user()->id;
|
|
$inpatient_info->save();
|
|
|
|
$discharge_mortality_inpatient_id = $inpatient_info->id;
|
|
} else {
|
|
$inpatient = new InpatientInfo;
|
|
$inpatient->patient_id = $patient_id;
|
|
$inpatient->episode_id = $episode_id;
|
|
$inpatient->admitted_on = Carbon::parse($request->admitted_on)->format('Y-m-d');
|
|
$inpatient->ward_id = $request->ward_id;
|
|
$inpatient->primary_diagnosis = $request->primary_diagnosis;
|
|
$inpatient->other_diagnoses = (!empty($request->other_diagnosis[0])) ? serialize($request->other_diagnosis) : null;
|
|
$inpatient->comments = $request->comments;
|
|
$inpatient->created_by = Auth::user()->id;
|
|
$inpatient->save();
|
|
|
|
$discharge_mortality_inpatient_id = $inpatient->id;
|
|
}
|
|
|
|
$consultation->ward_id = $request->ward_id;
|
|
$consultation->admitted_on = Carbon::parse($request->admitted_on)->format('Y-m-d');
|
|
|
|
if ($discharge_mortality) {
|
|
DB::table('discharge_mortality_risk')
|
|
->where('id', $discharge_mortality->id)
|
|
->update(['inpatient_id' => $discharge_mortality_inpatient_id]);
|
|
}
|
|
}
|
|
break;
|
|
case 3: // Home with followup
|
|
$consultation->followup_where = "Hospital";
|
|
$consultation->followup_when = Carbon::parse($request->followup_when)->format('Y-m-d');
|
|
|
|
// save information to the follow-up table
|
|
$appointment = new PatientAppointment();
|
|
$appointment->patient_id = $patient_id;
|
|
$appointment->incharge_id = $request->followup_in_charge;
|
|
$appointment->clinic_allocation = $request->followup_clinic_allocation;
|
|
$appointment->episode_id = $episode_id;
|
|
$appointment->appointment_date = Carbon::parse($request->followup_when)->format('Y-m-d');
|
|
$appointment->appointment_time = $request->followup_in_time;
|
|
$appointment->created_from = "Consultation";
|
|
$appointment->created_by = Auth::user()->id;
|
|
$appointment->updated_by = Auth::user()->id;
|
|
$appointment->save();
|
|
break;
|
|
case 4: // Referred
|
|
$consultation->referred_to = $request->referral_id;
|
|
break;
|
|
default:
|
|
break;
|
|
endswitch;
|
|
|
|
//handle clinic transfer
|
|
$outcome_slug = get_name($request->outcome, "id", "slug", "outcomes");
|
|
if ($outcome_slug == "internal_transfer") {
|
|
$transfer = new \Streamline\Models\PatientClinicTransfers;
|
|
$transfer->patient_id = $patient_id;
|
|
$transfer->episode_id = $episode_id;
|
|
$transfer->old_clinic = $request->current_clinic_id;
|
|
$transfer->new_clinic = $request->transfer_to_clinic;
|
|
$transfer->created_by = Auth::user()->id;
|
|
$transfer->save();
|
|
|
|
$episode = PatientEpisode::find($episode_id);
|
|
$episode->clinic_id = $request->transfer_to_clinic;
|
|
$episode->update();
|
|
|
|
if ($request->current_triage_id != 0) {
|
|
$triage = Triage::find($request->current_triage_id);
|
|
$triage->clinic_allocation = $request->transfer_to_clinic;
|
|
$triage->update();
|
|
}
|
|
}
|
|
|
|
$episode = PatientEpisode::find($episode_id);
|
|
if(!empty($request->investigation_and_management_plan_comments) || !empty($request->clinic_examination_comments) || !empty($request->history_comments)){
|
|
$notes = new WardInpatientDetailedNote;
|
|
$notes->patient_id = $patient_id;
|
|
$notes->episode_id = $episode_id;
|
|
$notes->ward_id = 0;
|
|
$notes->investigation_and_management_plan_comments = $request->investigation_and_management_plan_comments?? null;
|
|
$notes->clinic_examination_comments = $request->clinic_examination_comments?? null;
|
|
$notes->history_comments = $request->history_comments;
|
|
$notes->created_by = Auth::user()->id;
|
|
$notes->save();
|
|
}
|
|
|
|
// Handle the buttons on the consultation page
|
|
switch ($request->get('submit-btn')):
|
|
case 'investigation':
|
|
$consultation->save();
|
|
$episode->consultation_id = $consultation->id;
|
|
$episode->save();
|
|
session()->put('redirect_to_consultation', '/consultation/route');
|
|
$url = '/investigations/investigations_review';
|
|
break;
|
|
|
|
case 'treatment':
|
|
$consultation->save();
|
|
$episode->consultation_id = $consultation->id;
|
|
$episode->save();
|
|
session()->put('redirect_to_consultation', '/consultation/route');
|
|
$url = '/prescriptions/create/';
|
|
break;
|
|
|
|
case 'procedures':
|
|
$consultation->save();
|
|
$episode->consultation_id = $consultation->id;
|
|
$episode->save();
|
|
session()->put('redirect_to_consultation', '/consultation/route');
|
|
$url = '/order_procedures/';
|
|
break;
|
|
|
|
case 'sundries':
|
|
$consultation->save();
|
|
$episode->consultation_id = $consultation->id;
|
|
$episode->save();
|
|
session()->put('redirect_to_consultation', '/consultation/route');
|
|
$url = '/order_sundries/';
|
|
break;
|
|
|
|
case 'save_consultation':
|
|
$consultation->save();
|
|
$episode->consultation_id = $consultation->id;
|
|
$episode->save();
|
|
|
|
$dob = new Carbon(get_name($patient_id, 'id', 'date_of_birth', 'patients'));
|
|
$age_diff_months = $dob->diffInMonths(Carbon::now());
|
|
if (is_smart_discharge_enabled() && $request->outcome == 1 && $age_diff_months < 61 && $discharge_mortality && is_null($discharge_mortality->post_discharge_mortality_risk)) {
|
|
flash("Patient is being monitored for post discharge risk. Please fill the questions below")->success();
|
|
return redirect('/triage/edit_for_post_discharge/' . $episode_id);
|
|
} else {
|
|
$url = '/patient_flow_monitoring/index';
|
|
}
|
|
break;
|
|
|
|
case 'services':
|
|
$consultation->save();
|
|
$episode->consultation_id = $consultation->id;
|
|
$episode->save();
|
|
session()->put('redirect_to_consultation', '/consultation/route');
|
|
$url = '/order_services';
|
|
break;
|
|
|
|
case 'complete':
|
|
$consultation->completed = 1;
|
|
$consultation->save();
|
|
$episode->consultation_id = $consultation->id;
|
|
$episode->save();
|
|
session()->forget('consultation_with_notes');
|
|
|
|
add_doctors_fee_to_patient_services($consultation->id, auth()->user()->id);
|
|
|
|
$dob = new Carbon(get_name($patient_id, 'id', 'date_of_birth', 'patients'));
|
|
$age_diff_months = $dob->diffInMonths(Carbon::now());
|
|
if (is_smart_discharge_enabled() && $request->outcome == 1 && $age_diff_months < 61 && $discharge_mortality && is_null($discharge_mortality->post_discharge_mortality_risk)) {
|
|
flash("Patient is being monitored for post discharge risk. Please fill the questions below")->success();
|
|
return redirect('/triage/edit_for_post_discharge/' . $episode_id);
|
|
} else {
|
|
$url = '/patient_flow_monitoring/index';
|
|
}
|
|
break;
|
|
|
|
default:
|
|
$url = '/patient_flow_monitoring/index';
|
|
break;
|
|
endswitch;
|
|
|
|
|
|
return redirect($url);
|
|
}
|
|
|
|
/**
|
|
* Display the specified resource.
|
|
*
|
|
* @param int $id
|
|
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
|
|
*/
|
|
public function show($id)
|
|
{
|
|
$consultation = Consultation::where(['id' => $id])->first();
|
|
$patient = Patient::where('id', $consultation->patient_id)->first();
|
|
$episode = PatientEpisode::where('id', $consultation->episode_id)->first();
|
|
$triage = Triage::where(['id' => $episode->triage_id])->first();
|
|
|
|
if (session()->get('consultation_with_notes') == 1) {
|
|
$consultation_with_notes = true;
|
|
$consultation_notes = WardInpatientDetailedNote::where(['patient_id' => $patient->id, 'episode_id' => $episode->id, 'ward_id' => 0])->latest()->get();
|
|
} else {
|
|
$consultation_with_notes = false; $consultation_notes = '';
|
|
}
|
|
|
|
$is_mental_health_clinic = false;
|
|
|
|
// fetch the clinic id and determine if this is a mental health consultation
|
|
$clinic_slug = get_name($episode->clinic_id, "id", "slug", "clinics");
|
|
if ($clinic_slug == "mental_health") {
|
|
$is_mental_health_clinic = true;
|
|
}
|
|
|
|
$mental_health_consultation = MentalHealthConsultation::where(['patient_id' => $consultation->patient_id, 'episode_id' => $consultation->episode_id])->first();
|
|
|
|
//Dropdowns
|
|
$diagnoses = DB::table('diagnoses')->whereNull('deleted_at')->where('available', 1)->orderBy('name')->pluck("name", "id")->prepend('- select -', '');
|
|
$diagnoses_all = DB::table('diagnoses')->whereNull('deleted_at')->select('id', 'prompts', 'reference_areas', 'reference_names')->get();
|
|
$outcomes = DB::table('outcomes')->orderBy('name')->pluck('name', 'id')->prepend('- select -', '');
|
|
$wards = DB::table('wards')->where('available', 1)->whereNull('deleted_at')->orderBy('name')->pluck('name', 'id')->prepend('- select -', '');
|
|
$referrals = DB::table('referral_hospitals')->whereNull('deleted_at')->orderBy('name')->pluck('name', 'id')->prepend('- select -', '');
|
|
//symptoms
|
|
$symptoms = DB::table('symptoms')->where('available', 1)->pluck("name", "id");
|
|
|
|
//check for ordered investigations,procedures and treatment
|
|
$ordered_investigations = OrderedInvestigation::where(['patient_id' => $consultation->patient_id, 'episode_id' => $consultation->episode_id])->get();
|
|
//check for authenticated investigations
|
|
$investigation_results = InvestigationResults::where(['patient_id' => $consultation->patient_id, 'episode_id' => $consultation->episode_id])->get();
|
|
$treatments = Treatment::where(['patient_id' => $consultation->patient_id, 'episode_id' => $consultation->episode_id])->get();
|
|
$ordered_procedures = OrderedProcedure::where(['patient_id' => $consultation->patient_id, 'episode_id' => $consultation->episode_id])->get();
|
|
/* get ordered sundries */
|
|
$ordered_sundries = OrderedSundry::where(['patient_id' => $consultation->patient_id, 'episode_id' => $consultation->episode_id])->get();
|
|
// variables used by the allergies header modal
|
|
$categories = DB::table('patient_categories')->where('available', 1)->pluck("name", "id");
|
|
$drug_categories = DB::table('drug_categories')->get();
|
|
$documents = \Streamline\Models\PatientDocument::where('patient_id', $consultation->patient_id)->orderBy('created_at', 'desc')->take(2)->get();
|
|
$known_patient_allergies = \Streamline\Models\Allergy::where('patient_id', $consultation->patient_id)->orderBy('created_at', 'desc')->get();
|
|
$known_patient_alerts = \Streamline\Models\Alert::where('patient_id', $consultation->patient_id)->orderBy('created_at', 'desc')->take(2)->get();
|
|
$drug_categories_array = DB::table('drug_categories')->pluck('name', 'id');
|
|
/* get ordered sundries */
|
|
$ordered_sundries = OrderedSundry::where(['patient_id' => $consultation->patient_id, 'episode_id' => $consultation->episode_id])->get();
|
|
/* ======== added to cater for review episode =========*/
|
|
$is_episode_a_review = check_if_episode_is_a_followup($episode->id);
|
|
$parent_episode_treatments = [];
|
|
$parent_episode_ordered_procedures = [];
|
|
$parent_episode_ordered_investigations = [];
|
|
$parent_episode_ordered_sundries = [];
|
|
$parent_episode_investigation_results = [];
|
|
|
|
if ($is_episode_a_review) {
|
|
$parent_episode_details = PatientEpisode::find($episode->parent_episode_id);
|
|
|
|
$parent_episode_treatments = Treatment::where(['patient_id' => $consultation->patient_id, 'episode_id' => $parent_episode_details->id, 'tta' => 0])->get();
|
|
$parent_episode_ordered_procedures = OrderedProcedure::where(['patient_id' => $consultation->patient_id, 'episode_id' => $parent_episode_details->id])->get();
|
|
$parent_episode_ordered_investigations = OrderedInvestigation::where(['patient_id' => $consultation->patient_id, 'episode_id' => $parent_episode_details->id])->get();
|
|
/* get ordered sundries */
|
|
$parent_episode_ordered_sundries = OrderedSundry::where(['patient_id' => $consultation->patient_id, 'episode_id' => $parent_episode_details->id])->get();
|
|
//check for authenticated investigations
|
|
$parent_episode_investigation_results = InvestigationResults::where(['patient_id' => $consultation->patient_id, 'episode_id' => $parent_episode_details->id])->get();
|
|
}
|
|
/* ========end of varibales added to cater for review episodes ========*/
|
|
|
|
$cardio_echo = CardioEchoResult::where('episode_id', $consultation->episode_id)->first();
|
|
$users = DB::table('users')->pluck(DB::raw("CONCAT(first_name,' ',last_name) AS name"), 'id');
|
|
return view('patients::consultations.show', compact(
|
|
'consultation',
|
|
'patient',
|
|
'episode',
|
|
'triage',
|
|
'documents',
|
|
'categories',
|
|
'drug_categories',
|
|
'diagnoses',
|
|
'diagnoses_all',
|
|
'outcomes',
|
|
'wards',
|
|
'referrals',
|
|
'symptoms',
|
|
'known_patient_allergies',
|
|
'drug_categories_array',
|
|
'ordered_investigations',
|
|
'treatments',
|
|
'ordered_procedures',
|
|
'consultation_with_notes',
|
|
'investigation_results',
|
|
'known_patient_alerts',
|
|
'ordered_sundries',
|
|
'is_mental_health_clinic',
|
|
'mental_health_consultation',
|
|
'parent_episode_treatments',
|
|
'parent_episode_ordered_procedures',
|
|
'parent_episode_ordered_sundries',
|
|
'parent_episode_ordered_investigations',
|
|
'parent_episode_investigation_results',
|
|
'cardio_echo',
|
|
'consultation_notes',
|
|
'users'
|
|
));
|
|
}
|
|
|
|
/**
|
|
* Show the form for editing the specified resource.
|
|
*
|
|
* @param int $id
|
|
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
|
|
*/
|
|
public function edit($id)
|
|
{
|
|
|
|
$consultation = Consultation::where(['id' => $id])->first();
|
|
|
|
$clinics = Clinic::orderBy('name')->pluck("name", "id")->toArray();
|
|
$clinics = ['0' => "Don't assign clinic"] + $clinics;
|
|
$users = User::pluck(DB::raw("CONCAT(first_name,' ',last_name) AS name"), 'id');
|
|
|
|
//Patient, Triage and Episode
|
|
$patient = Patient::where('id', $consultation->patient_id)->first();
|
|
$episode = PatientEpisode::where('id', $consultation->episode_id)->first();
|
|
$triage = Triage::where(['id' => $episode->triage_id])->first();
|
|
|
|
if (session()->get('consultation_with_notes') == 1) {
|
|
$consultation_with_notes = true;
|
|
$all_notes = WardInpatientDetailedNote::where(['patient_id' => $patient->id, 'episode_id' => $episode->id, 'ward_id' => 0])->latest()->get();
|
|
$consultation_notes = $all_notes->take(5);
|
|
$notes = $all_notes->skip(5);
|
|
$view_notes = $notes->all();
|
|
} else {
|
|
$consultation_with_notes = false; $consultation_notes = $view_notes ='';
|
|
}
|
|
$is_mental_health_clinic = false;
|
|
// fetch the clinic id and determine if this is a mental health consultation
|
|
$clinic_slug = get_name($episode->clinic_id, "id", "slug", "clinics");
|
|
if ($clinic_slug == "mental_health") {
|
|
session()->put(['is_mental_health_clinic' => 1]);
|
|
$is_mental_health_clinic = true;
|
|
}
|
|
|
|
/*==== do this for assignment of mental clinic from patient home page ===*/
|
|
if (session()->get("is_mental_health_clinic") == 1) {
|
|
$is_mental_health_clinic = true;
|
|
}
|
|
|
|
$mental_health_consultation = MentalHealthConsultation::where(['patient_id' => $consultation->patient_id, 'episode_id' => $consultation->episode_id])->first();
|
|
|
|
$documents = DB::table('patient_documents')->whereNull('deleted_at')->where('patient_id', $consultation->patient_id)->orderBy('date_taken', 'desc')->get();
|
|
$categories = DB::table('patient_categories')->where('available', 1)->pluck("name", "id");
|
|
$drug_categories = DB::table('drug_categories')->get();
|
|
|
|
$diagnoses = DB::table('diagnoses')->whereNull('deleted_at')->where('available', 1)->orderBy('name')->pluck("name", "id")->prepend('- select -', '');
|
|
$diagnoses_all = DB::table('diagnoses')->whereNull('deleted_at')->select('id', 'prompts', 'reference_areas', 'reference_names')->get();
|
|
$outcomes = DB::table('outcomes')->whereNull('deleted_at')->orderBy('name')->pluck('name', 'id')->prepend('- select -', '');
|
|
$wards = DB::table('wards')->where('available', 1)->whereNull('deleted_at')->orderBy('name')->pluck('name', 'id')->prepend('- select -', '');
|
|
$referrals = DB::table('referral_hospitals')->whereNull('deleted_at')->orderBy('name')->pluck('name', 'id')->prepend('- select -', '');
|
|
//symptoms
|
|
$symptoms = DB::table('symptoms')->whereNull('deleted_at')->orderBy('name')->pluck("name", "id")->toArray();
|
|
$symptoms = ['' => '- select -'] + $symptoms;
|
|
$symptoms_periods = ['' => '- select -', 'Hours' => 'Hours', 'Days' => 'Days', 'Weeks' => 'Weeks', 'Months' => 'Months', 'Years' => 'Years'];
|
|
|
|
//allergies and alerts
|
|
$known_patient_allergies = \Streamline\Models\Allergy::where('patient_id', $consultation->patient_id)->orderBy('created_at', 'desc')->take(2)->get();
|
|
$known_patient_alerts = \Streamline\Models\Alert::where('patient_id', $consultation->patient_id)->orderBy('created_at', 'desc')->take(2)->get();
|
|
|
|
$drug_categories_array = DB::table('drug_categories')->pluck('name', 'id');
|
|
//check for ordered investigations,procedures and treatment
|
|
$ordered_investigations = OrderedInvestigation::where(['patient_id' => $consultation->patient_id, 'episode_id' => $consultation->episode_id])->get();
|
|
//check for authenticated investigations
|
|
$investigation_results = InvestigationResults::where(['patient_id' => $consultation->patient_id, 'episode_id' => $consultation->episode_id])->get();
|
|
$treatments = Treatment::where(['patient_id' => $consultation->patient_id, 'episode_id' => $consultation->episode_id])->get();
|
|
$ordered_procedures = OrderedProcedure::where(['patient_id' => $consultation->patient_id, 'episode_id' => $consultation->episode_id])->get();
|
|
/* get ordered sundries */
|
|
$ordered_sundries = OrderedSundry::where(['patient_id' => $consultation->patient_id, 'episode_id' => $consultation->episode_id])->get();
|
|
/* ======== added to cater for review episode =========*/
|
|
$is_episode_a_review = check_if_episode_is_a_followup($episode->id);
|
|
$parent_episode_treatments = [];
|
|
$parent_episode_ordered_procedures = [];
|
|
$parent_episode_ordered_investigations = [];
|
|
$parent_episode_ordered_sundries = [];
|
|
$parent_episode_investigation_results = [];
|
|
|
|
if ($is_episode_a_review) {
|
|
$parent_episode_details = PatientEpisode::find($episode->parent_episode_id);
|
|
|
|
$parent_episode_treatments = Treatment::where(['patient_id' => $consultation->patient_id, 'episode_id' => $parent_episode_details->id, 'tta' => 0])->get();
|
|
$parent_episode_ordered_procedures = OrderedProcedure::where(['patient_id' => $consultation->patient_id, 'episode_id' => $parent_episode_details->id])->get();
|
|
$parent_episode_ordered_investigations = OrderedInvestigation::where(['patient_id' => $consultation->patient_id, 'episode_id' => $parent_episode_details->id])->get();
|
|
/* get ordered sundries */
|
|
$parent_episode_ordered_sundries = OrderedSundry::where(['patient_id' => $consultation->patient_id, 'episode_id' => $parent_episode_details->id])->get();
|
|
//check for authenticated investigations
|
|
$parent_episode_investigation_results = InvestigationResults::where(['patient_id' => $consultation->patient_id, 'episode_id' => $parent_episode_details->id])->get();
|
|
}
|
|
/* ========end of varibales added to cater for review episodes ========*/
|
|
|
|
|
|
$users_collection = DB::table('users')->orderBy("first_name", "asc")->select("id")->get()->toArray();
|
|
$users_array = [];
|
|
foreach ($users_collection as $value) {
|
|
$user = User::find($value->id);
|
|
if (!is_null($user)) {
|
|
$users_array[$value->id] = get_full_name($value->id, 'id', 'first_name', 'last_name', 'users');
|
|
}
|
|
}
|
|
$users_array = ['' => '- select -'] + $users_array;
|
|
|
|
$hmis_categories = DB::table('hmis_categories')->orderBy('title', 'asc')->pluck('title', 'id')->toArray();
|
|
$hmis_categories = ['' => '- select -'] + $hmis_categories;
|
|
|
|
$cardio_echo = CardioEchoResult::where('episode_id', $consultation->episode_id)->first();
|
|
|
|
$patient_episodes = DB::table('patient_episodes')->where('patient_id', $consultation->patient_id)->whereNotIn('id', [$consultation->episode_id])->latest()->take(5)->get();
|
|
$past_episodes_info = [];
|
|
$counter = 0;
|
|
|
|
foreach ($patient_episodes as $patient_episode) {
|
|
if ($counter == 5) {
|
|
break;
|
|
}
|
|
|
|
if (!is_episode_safe_to_delete($patient_episode->id) && isset($patient_episode->consultation_id)) { // exclude empty episodes
|
|
$consultations_details = DB::table('consultations')->find($patient_episode->consultation_id);
|
|
|
|
if ($consultations_details) {
|
|
$past_episodes_info[$counter]["start_date"] = streamline_date_time($patient_episode->created_at);
|
|
$past_episodes_info[$counter]["episode_id"] = $patient_episode->id;
|
|
|
|
$past_episodes_info[$counter]["primary_diagnosis"] = $consultations_details->primary_diagnosis ?? 0;
|
|
if (unserialize($consultations_details->other_diagnoses)) {
|
|
$past_episodes_info[$counter]["other_diagnoses"] = unserialize($consultations_details->other_diagnoses);
|
|
} else {
|
|
$past_episodes_info[$counter]["other_diagnoses"] = [];
|
|
}
|
|
|
|
$past_episodes_info[$counter]["outcome"] = $consultations_details->outcome_id ?? 0;
|
|
$doctor_id = $consultations_details->consultation_done_by ?? $consultations_details->created_by;
|
|
$past_episodes_info[$counter]["doctor"] = get_full_name($doctor_id, 'id', 'first_name', 'last_name', 'users');
|
|
$past_episodes_info[$counter]["clinic"] = isset($patient_episode->clinic_id) ? get_name($patient_episode->clinic_id, 'id', 'name', 'clinics') : "N/A";
|
|
|
|
if (isset($patient_episode->triage_id)) {
|
|
$triage_details = DB::table('triage')->find($patient_episode->triage_id);
|
|
|
|
if ($triage_details) {
|
|
$past_episodes_info[$counter]["symptoms"] = [
|
|
"symptom_duration" => $triage_details->symptom_duration,
|
|
"symptoms" => $triage_details->symptoms
|
|
];
|
|
|
|
$observations = explode(",", $triage_details->observations);
|
|
$past_episodes_info[$counter]["resp"] = "N/A";
|
|
$past_episodes_info[$counter]["mmhg"] = "N/A";
|
|
$past_episodes_info[$counter]["pulse"] = "N/A";
|
|
$past_episodes_info[$counter]["temp"] = "N/A";
|
|
|
|
foreach ($observations as $observation) {
|
|
if (strpos($observation, "Temperature") !== false) {
|
|
$past_episodes_info[$counter]["temp"] = explode("=", $observation)[1];
|
|
}
|
|
|
|
if (strpos($observation, "Pulse") !== false) {
|
|
$past_episodes_info[$counter]["pulse"] = explode("=", $observation)[1];
|
|
}
|
|
|
|
if (strpos($observation, "Systolic bp") !== false) {
|
|
$past_episodes_info[$counter]["mmhg"] = explode("=", $observation)[1];
|
|
}
|
|
|
|
if (strpos($observation, "Diastolic bp") !== false) {
|
|
$past_episodes_info[$counter]["mmhg"] = $past_episodes_info[$counter]["mmhg"] . " / " . explode("=", $observation)[1];
|
|
}
|
|
|
|
if (strpos($observation, "Respirations") !== false) {
|
|
$past_episodes_info[$counter]["resp"] = explode("=", $observation)[1];
|
|
}
|
|
}
|
|
} else {
|
|
$past_episodes_info[$counter]["symptoms"] = [];
|
|
$past_episodes_info[$counter]["resp"] = "N/A";
|
|
$past_episodes_info[$counter]["mmhg"] = "N/A";
|
|
$past_episodes_info[$counter]["pulse"] = "N/A";
|
|
$past_episodes_info[$counter]["temp"] = "N/A";
|
|
}
|
|
} else {
|
|
$past_episodes_info[$counter]["symptoms"] = [];
|
|
$past_episodes_info[$counter]["resp"] = "N/A";
|
|
$past_episodes_info[$counter]["mmhg"] = "N/A";
|
|
$past_episodes_info[$counter]["pulse"] = "N/A";
|
|
$past_episodes_info[$counter]["temp"] = "N/A";
|
|
}
|
|
|
|
$counter++;
|
|
}
|
|
}
|
|
}
|
|
|
|
return view('patients::consultations.edit', compact(
|
|
'consultation',
|
|
'patient',
|
|
'episode',
|
|
'triage',
|
|
'documents',
|
|
'categories',
|
|
'drug_categories',
|
|
'diagnoses',
|
|
'diagnoses_all',
|
|
'outcomes',
|
|
'wards',
|
|
'referrals',
|
|
'symptoms',
|
|
'known_patient_allergies',
|
|
'known_patient_alerts',
|
|
'drug_categories_array',
|
|
'ordered_investigations',
|
|
'past_episodes_info',
|
|
'symptoms_periods',
|
|
'treatments',
|
|
'ordered_procedures',
|
|
'investigation_results',
|
|
'ordered_sundries',
|
|
'is_mental_health_clinic',
|
|
'mental_health_consultation',
|
|
'consultation_with_notes',
|
|
'users',
|
|
'clinics',
|
|
'parent_episode_treatments',
|
|
'parent_episode_ordered_procedures',
|
|
'parent_episode_ordered_sundries',
|
|
'parent_episode_ordered_investigations',
|
|
'parent_episode_investigation_results',
|
|
'users_array',
|
|
'is_mental_health_clinic',
|
|
'hmis_categories',
|
|
'cardio_echo',
|
|
'consultation_notes',
|
|
'view_notes'
|
|
));
|
|
}
|
|
|
|
public function update(Request $request, $id)
|
|
{
|
|
|
|
if (!session()->has('patient_id') || !session()->has('episode_id')) :
|
|
flash('Patient is not selected')->error();
|
|
$messages = MessageBoard::orderBy('created_at', 'desc')->paginate(3);
|
|
return view('home', compact('messages'));
|
|
endif;
|
|
|
|
$consultation = Consultation::find($id);
|
|
|
|
$patient_id = session()->get('patient_id');
|
|
$episode_id = session()->get('episode_id');
|
|
|
|
$symptoms_array = $request->symptoms ?? [];
|
|
$duration_array = $request->duration ?? [];
|
|
$time_array = $request->time ?? [];
|
|
|
|
// Build symptoms and duration variables
|
|
$durations_final = [];
|
|
for ($x = 0; $x < count($symptoms_array); $x++) {
|
|
$durations_final[] = $duration_array[$x] . " " . $time_array[$x];
|
|
}
|
|
|
|
$consultation->symptoms = implode(",", $symptoms_array);
|
|
$consultation->symptom_duration = implode(",", $durations_final);
|
|
|
|
$consultation->primary_diagnosis = $request->primary_diagnosis;
|
|
$consultation->other_diagnoses = (!empty($request->other_diagnosis[0])) ? serialize($request->other_diagnosis) : null;
|
|
$consultation->comments = $request->comments;
|
|
$consultation->outcome_id = $request->outcome;
|
|
if ($request->died_on) $consultation->died_on = $request->died_on;
|
|
$consultation->rdt = $request->rdt;
|
|
if($request->attendance) $consultation->attendance = $request->attendance;
|
|
$consultation->rbs = $request->rbs;
|
|
$consultation->history_comments = $request->history_comments;
|
|
$consultation->clinic_examination_comments = $request->clinic_examination_comments;
|
|
$consultation->investigation_and_management_plan_comments = $request->investigation_and_management_plan_comments;
|
|
$consultation->referral_notes = $request->referral_notes;
|
|
$consultation->tb_status_assessment = $request->tb_status_assessment;
|
|
$consultation->updated_by = Auth::user()->id;
|
|
//$consultation->consultation_done_by = Auth::user()->id; still contemplating on whether to update field
|
|
|
|
// begin saving for discharge mortality risk
|
|
$discharge_mortality = DB::table('discharge_mortality_risk')->where('patient_id', $patient_id)
|
|
->where('episode_id', $episode_id)
|
|
->first();
|
|
|
|
if ($discharge_mortality) {
|
|
DB::table('discharge_mortality_risk')
|
|
->where('id', $discharge_mortality->id)
|
|
->update(['malaria_test' => $request->rdt]);
|
|
}
|
|
// end discharge mortality risk save
|
|
|
|
// performing an ordered procedure.
|
|
if (!is_null($request->perform_selected)) {
|
|
foreach ($request->perform_selected as $procedure_array_id) {
|
|
$arr = explode(",", get_name($request->procedure_order_perform[$procedure_array_id], 'id', 'performed', 'ordered_procedures'));
|
|
$arr_id = explode(",", get_name($request->procedure_order_perform[$procedure_array_id], 'id', 'performed_id', 'ordered_procedures'));
|
|
|
|
$performed_id = record_staff_that_has_performed_the_service(
|
|
$patient_id,
|
|
$episode_id,
|
|
1,
|
|
$request->perform[$procedure_array_id],
|
|
0,
|
|
$request->procedure_performed_by[$procedure_array_id]
|
|
);
|
|
|
|
if (isset($arr[$request->procedure_performed_position[$procedure_array_id]])) {
|
|
$arr[$request->procedure_performed_position[$procedure_array_id]] = 1;
|
|
$arr_id[$request->procedure_performed_position[$procedure_array_id]] = $performed_id;
|
|
$update = DB::table('ordered_procedures')->where('id', $request->procedure_order_perform[$procedure_array_id])
|
|
->update(['performed' => implode(",", $arr), 'performed_id' => implode(",", $arr_id)]);
|
|
}
|
|
}
|
|
}
|
|
|
|
// performing an ordered services.
|
|
if (!is_null($request->service_perform_selected)) {
|
|
foreach ($request->service_perform_selected as $service_array_id) {
|
|
$arr = explode(",", get_name($request->service_order_perform[$service_array_id], 'id', 'performed', 'ordered_services'));
|
|
$arr_id = explode(",", get_name($request->service_order_perform[$service_array_id], 'id', 'performed_id', 'ordered_procedures'));
|
|
|
|
$performed_id = record_staff_that_has_performed_the_service(
|
|
$patient_id,
|
|
$episode_id,
|
|
3,
|
|
$request->service_perform[$service_array_id],
|
|
0,
|
|
$request->service_performed_by[$service_array_id]
|
|
);
|
|
|
|
if (isset($arr[$request->service_performed_position[$service_array_id]])) {
|
|
$arr[$request->service_performed_position[$service_array_id]] = 1;
|
|
$arr_id[$request->service_performed_position[$service_array_id]] = $performed_id;
|
|
$update = DB::table('ordered_services')->where('id', $request->service_order_perform[$service_array_id])
|
|
->update(['performed' => implode(",", $arr), 'performed_id' => implode(",", $arr_id)]);
|
|
}
|
|
}
|
|
}
|
|
|
|
switch ($request->outcome):
|
|
case 1: //Admitted
|
|
if (is_numeric($request->ward_id)) {
|
|
/* check if this episode already exists in the inpatients table before inserting new record else update */
|
|
$existing_inpatient = InpatientInfo::where(['episode_id' => $episode_id])->first();
|
|
$inpatient = is_null($existing_inpatient) ? new InpatientInfo : $existing_inpatient;
|
|
$inpatient->patient_id = $patient_id;
|
|
$inpatient->episode_id = $episode_id;
|
|
$inpatient->admitted_on = $request->admitted_on;
|
|
$inpatient->ward_id = $request->ward_id;
|
|
$inpatient->primary_diagnosis = $request->primary_diagnosis;
|
|
$inpatient->other_diagnoses = (!empty($request->other_diagnosis[0])) ? serialize($request->other_diagnosis) : null;
|
|
$inpatient->comments = $request->comments;
|
|
$inpatient->created_by = Auth::user()->id;
|
|
is_null($existing_inpatient) ? $inpatient->save() : $inpatient->update(); // Save/update inpatient info
|
|
|
|
$consultation->ward_id = $request->ward_id;
|
|
|
|
$consultation->admitted_on = Carbon::parse($request->admitted_on)->format('Y-m-d');
|
|
|
|
if ($discharge_mortality) {
|
|
DB::table('discharge_mortality_risk')
|
|
->where('id', $discharge_mortality->id)
|
|
->update(['inpatient_id' => $inpatient->id]);
|
|
}
|
|
}
|
|
break;
|
|
case 3: // Home with followup
|
|
$consultation->followup_where = "Hospital";
|
|
$consultation->followup_when = Carbon::parse($request->followup_when)->format('Y-m-d');
|
|
|
|
// get current clinic of patient if available
|
|
$episode_information = PatientEpisode::find($episode_id);
|
|
|
|
if ($episode_information->clinic_id) {
|
|
$clinic_allocation_id = $episode_information->clinic_id;
|
|
} else {
|
|
$clinic_allocation_id = 0;
|
|
}
|
|
|
|
// check if there is an appointment for this episode
|
|
$previous_appointment = PatientAppointment::where(['episode_id' => $episode_id])->first();
|
|
|
|
if ($previous_appointment) {
|
|
$appointment = $previous_appointment;
|
|
} else {
|
|
$appointment = new PatientAppointment();
|
|
$appointment->patient_id = $patient_id;
|
|
$appointment->created_by = Auth::user()->id;
|
|
$appointment->episode_id = $episode_id;
|
|
}
|
|
|
|
$appointment->incharge_id = $request->followup_in_charge;
|
|
$appointment->clinic_allocation = $request->followup_clinic_allocation;
|
|
$appointment->appointment_date = Carbon::parse($request->followup_when)->format('Y-m-d');
|
|
$appointment->appointment_time = $request->followup_in_time;
|
|
$appointment->created_from = "Consultation";
|
|
$appointment->updated_by = Auth::user()->id;
|
|
$appointment->save();
|
|
break;
|
|
case 4: // Referred
|
|
$consultation->referred_to = $request->referral_id;
|
|
break;
|
|
endswitch;
|
|
|
|
//handle clinic transfer
|
|
$outcome_slug = get_name($request->outcome, "id", "slug", "outcomes");
|
|
if ($outcome_slug == "internal_transfer") {
|
|
$transfer = new \Streamline\Models\PatientClinicTransfers;
|
|
$transfer->patient_id = $patient_id;
|
|
$transfer->episode_id = $episode_id;
|
|
$transfer->old_clinic = $request->current_clinic_id;
|
|
$transfer->new_clinic = $request->transfer_to_clinic;
|
|
$transfer->created_by = Auth::user()->id;
|
|
$transfer->save();
|
|
|
|
$episode = PatientEpisode::find($episode_id);
|
|
$episode->clinic_id = $request->transfer_to_clinic;
|
|
$episode->update();
|
|
|
|
if ($request->current_triage_id != 0) {
|
|
$triage = Triage::find($request->current_triage_id);
|
|
$triage->clinic_allocation = $request->transfer_to_clinic;
|
|
$triage->update();
|
|
}
|
|
}
|
|
|
|
// mental health consultation
|
|
if (isset($request->mental_health_id)) {
|
|
$mental_health_consultation = MentalHealthConsultation::find($request->mental_health_id);
|
|
$mental_health_consultation->patient_id = $patient_id;
|
|
$mental_health_consultation->episode_id = $episode_id;
|
|
$mental_health_consultation->hallucinations = $request->hallucinations;
|
|
$mental_health_consultation->delusions = $request->delusions;
|
|
$mental_health_consultation->disorganised_speech = $request->disorganised_speech;
|
|
$mental_health_consultation->abnormal_psychomotor_behaviour = $request->abnormal_psychomotor_behaviour;
|
|
$mental_health_consultation->impaired_cognition = $request->impaired_cognition;
|
|
$mental_health_consultation->depression = $request->depression;
|
|
$mental_health_consultation->mania = $request->mania;
|
|
$mental_health_consultation->hamilton_anxiety_score = $request->hamilton_anxiety_score;
|
|
$mental_health_consultation->alcohol_screening_score = $request->alcohol_screening_score;
|
|
$mental_health_consultation->patient_satisfaction_score = $request->patient_satisfaction_score;
|
|
$mental_health_consultation->caregiver_satisfaction_score = $request->caregiver_satisfaction_score;
|
|
$mental_health_consultation->updated_by = Auth::user()->id;
|
|
$mental_health_consultation->update();
|
|
}
|
|
|
|
if(!empty($request->investigation_and_management_plan_comments) || !empty($request->clinic_examination_comments) || !empty($request->history_comments)){
|
|
$notes = new WardInpatientDetailedNote;
|
|
$notes->patient_id = $patient_id;
|
|
$notes->episode_id = $episode_id;
|
|
$notes->ward_id = 0;
|
|
$notes->investigation_and_management_plan_comments = $request->investigation_and_management_plan_comments?? null;
|
|
$notes->clinic_examination_comments = $request->clinic_examination_comments?? null;
|
|
$notes->history_comments = $request->history_comments?? null;
|
|
$notes->created_by = Auth::user()->id;
|
|
$notes->save();
|
|
}
|
|
if(!empty($request->deleted_notes)){
|
|
foreach($request->deleted_notes as $note){
|
|
if(!empty($note)) {
|
|
$notes = WardInpatientDetailedNote::find($note);
|
|
$notes->delete();
|
|
}
|
|
}
|
|
}
|
|
|
|
switch ($request->get('submit-btn')):
|
|
case 'investigation':
|
|
$consultation->save();
|
|
session()->put('redirect_to_consultation', '/consultation/route');
|
|
$url = '/investigations/investigations_review';
|
|
break;
|
|
|
|
case 'treatment':
|
|
$consultation->save();
|
|
session()->forget('alter_episode_id');
|
|
session()->forget('alter_patient_id');
|
|
session()->put('redirect_to_consultation', '/consultation/route');
|
|
$url = '/prescriptions/create/';
|
|
break;
|
|
|
|
case 'procedures':
|
|
$consultation->save();
|
|
session()->put('redirect_to_consultation', '/consultation/route');
|
|
$url = '/order_procedures/';
|
|
break;
|
|
|
|
case 'sundries':
|
|
$consultation->save();
|
|
session()->put('redirect_to_consultation', '/consultation/route');
|
|
$url = '/order_sundries/';
|
|
break;
|
|
|
|
case 'services':
|
|
$consultation->save();
|
|
session()->put('redirect_to_consultation', '/consultation/route');
|
|
$url = '/order_services';
|
|
break;
|
|
|
|
case 'save_consultation':
|
|
$consultation->save();
|
|
$dob = new Carbon(get_name($patient_id, 'id', 'date_of_birth', 'patients'));
|
|
$age_diff_months = $dob->diffInMonths(Carbon::now());
|
|
if (is_smart_discharge_enabled() && $request->outcome == 1 && $age_diff_months < 61 && $discharge_mortality && is_null($discharge_mortality->post_discharge_mortality_risk)) {
|
|
flash("Patient is being monitored for post discharge risk. Please fill the questions below")->success();
|
|
return redirect('/triage/edit_for_post_discharge/' . $episode_id);
|
|
} else {
|
|
$url = '/patient_flow_monitoring/index';
|
|
}
|
|
break;
|
|
|
|
case 'complete':
|
|
$consultation->completed = 1;
|
|
$consultation->save();
|
|
session()->forget('consultation_with_notes');
|
|
|
|
add_doctors_fee_to_patient_services($consultation->id, auth()->user()->id);
|
|
|
|
$dob = new Carbon(get_name($patient_id, 'id', 'date_of_birth', 'patients'));
|
|
$age_diff_months = $dob->diffInMonths(Carbon::now());
|
|
if (is_smart_discharge_enabled() && $request->outcome == 1 && $age_diff_months < 61 && $discharge_mortality && is_null($discharge_mortality->post_discharge_mortality_risk)) {
|
|
flash("Patient is being monitored for post discharge risk. Please fill the questions below")->success();
|
|
return redirect('/triage/edit_for_post_discharge/' . $episode_id);
|
|
} else {
|
|
$url = '/patient_flow_monitoring/index';
|
|
}
|
|
break;
|
|
default:
|
|
$url = '/patient_flow_monitoring/index';
|
|
break;
|
|
endswitch;
|
|
|
|
return redirect($url);
|
|
}
|
|
|
|
public function destroy($id)
|
|
{
|
|
//
|
|
}
|
|
|
|
public function route()
|
|
{
|
|
/*
|
|
* Check if a consultation is pending and then route it to edit page
|
|
* If a consultation is completed, route to the view page
|
|
*/
|
|
|
|
$patient_id = session()->get('patient_id');
|
|
$episode_id = session()->get('episode_id');
|
|
|
|
$consultation = DB::table('consultations')->where(['patient_id' => $patient_id, 'episode_id' => $episode_id])->first();
|
|
|
|
$clinic_id = get_name($episode_id, "id", "clinic_id", "patient_episodes");
|
|
|
|
// check if patient is in the diabetes program - get with the program 'un
|
|
$clinic_slug = get_name($clinic_id, "id", "slug", "clinics");
|
|
if ($clinic_slug == "diabetes") {
|
|
return redirect('diabetes_clinic/clinic_registration');
|
|
}
|
|
|
|
if ($clinic_slug == "ante_natal") {
|
|
return redirect('ante_natal_clinic_menu');
|
|
}
|
|
|
|
if ($clinic_slug == "art") {
|
|
return redirect("hiv_menu");
|
|
}
|
|
|
|
if ($clinic_slug == "mental_health") {
|
|
$is_mental_health_clinic = true;
|
|
session()->put(['is_mental_health_clinic' => 1]);
|
|
}
|
|
|
|
if ($consultation) {
|
|
switch ($consultation->completed) {
|
|
case '0': // Pending
|
|
return self::edit($consultation->id);
|
|
break;
|
|
case '1': // Completed
|
|
return self::show($consultation->id);
|
|
break;
|
|
default: // Not created yet
|
|
return self::create();
|
|
break;
|
|
}
|
|
} else {
|
|
return self::create();
|
|
}
|
|
}
|
|
|
|
public function edit_patient_consultation()
|
|
{
|
|
$patient_id = session()->get('patient_id');
|
|
$episode_id = session()->get('episode_id');
|
|
|
|
// update the completed column back to '0' so that it redirects to consultation@edit method
|
|
$consultation = Consultation::where(['patient_id' => $patient_id, 'episode_id' => $episode_id])->first();
|
|
$consultation->completed = 0;
|
|
$consultation->update();
|
|
|
|
return redirect('/consultation/route');
|
|
}
|
|
|
|
public function create_with_notes()
|
|
{
|
|
session()->put('consultation_with_notes', 1);
|
|
return redirect('/consultation/route');
|
|
}
|
|
|
|
public function add_diagnosis(Request $request)
|
|
{
|
|
$diagnosis = new \Streamline\Models\Diagnosis;
|
|
$diagnosis->name = $request->diagnosis_name;
|
|
$diagnosis->icd10_code = $request->icd10_code;
|
|
$diagnosis->hmis_no_outpatient = $request->hmis_no_outpatient;
|
|
$diagnosis->hmis_no_inpatient = $request->hmis_no_inpatient;
|
|
$diagnosis->prompts = $request->diagnosis_prompts;
|
|
$diagnosis->chronic_status = $request->chronic_status;
|
|
$diagnosis->hmis_category = $request->hmis_category;
|
|
$diagnosis->available = isset($request->available)? $request->available:1;
|
|
$diagnosis->diagnosis_category = $request->diagnosis_category?? null;
|
|
$diagnosis->created_by = auth()->user()->id;
|
|
|
|
try {
|
|
$diagnosis->save();
|
|
return $diagnosis->id;
|
|
} catch (QueryException $e) {
|
|
flash("An error occurred")->error();
|
|
return back()->withInput();
|
|
}
|
|
}
|
|
|
|
public function review_episode($current_episode_id, $parent_episode_id, $type)
|
|
{
|
|
$episode = PatientEpisode::find($current_episode_id);
|
|
$episode->parent_episode_id = $parent_episode_id;
|
|
$episode->updated_by = auth()->user()->id;
|
|
$episode->save();
|
|
|
|
if ($type == 0) {
|
|
return redirect('/consultation/route');
|
|
} else {
|
|
return redirect('/consultation/create_with_notes');
|
|
}
|
|
}
|
|
|
|
public function opd_referral_notes_print($patient_id, $episode_id)
|
|
{
|
|
$patient = Patient::find($patient_id);
|
|
$hospitalInfo = DB::table('hospital_information')->find(1);
|
|
|
|
$consultation = Consultation::where(['patient_id' => $patient_id, 'episode_id' => $episode_id])->orderBy('created_at', 'desc')->first();
|
|
$triage = Triage::where(['patient_id' => $patient_id, 'episode_id' => $episode_id])->first();
|
|
$patient_discount = \Streamline\Models\PatientDiscount::where(['patient_category' => $patient->category_id])->select("discount", "pay_later")->first();
|
|
|
|
if (!is_null($patient_discount)) {
|
|
$patient_discount->toArray();
|
|
}
|
|
$treatments = Treatment::where(['patient_id' => $patient_id, 'episode_id' => $episode_id])->get();
|
|
$all_diagnoses = DB::table('diagnoses')->pluck("name", "id");
|
|
|
|
/* ====== start work on investigations */
|
|
// prep the inpatient investigation arrays and counters
|
|
$opd_investigations = [];
|
|
$opd_investigations_date = [];
|
|
$ward_investigations = [];
|
|
$ward_investigations_date = [];
|
|
|
|
// get all investigations ordered in this episode
|
|
$ordered_investigations = OrderedInvestigation::where(['episode_id' => $episode_id])->get();
|
|
|
|
// get all results
|
|
$investigation_results_order_ids = InvestigationResults::pluck('order_id', 'id')->toArray();
|
|
|
|
foreach ($ordered_investigations as $investigation) {
|
|
$investigation_ids = explode(",", $investigation->investigation_id);
|
|
$inpatient_status = explode(",", $investigation->for_inpatient);
|
|
|
|
// check if results are available for this investigation
|
|
if (in_array($investigation->id, $investigation_results_order_ids)) {
|
|
// get the key if available
|
|
$key = array_search($investigation->id, $investigation_results_order_ids);
|
|
|
|
// get the results object
|
|
$results = InvestigationResults::find($key);
|
|
|
|
// exclude obstetric u/s results
|
|
if ($results->result_type != "Ultrasound_Obstetric") {
|
|
$investigation_results = explode(",", $results->value);
|
|
$investigation_per_valid = explode(",", $results->per_investigation);
|
|
$investigation_comments = explode(",", $results->comment);
|
|
|
|
if ($results->all_authenticated == 1) {
|
|
for ($i = 0; $i < count($inpatient_status); $i++) {
|
|
if ($inpatient_status[$i] == 0) {
|
|
if (isset($investigation_ids[$i]) && $investigation_ids[$i] != "") {
|
|
$result = Investigation::where('id', $investigation_ids[$i])->first();
|
|
$opd_investigations['name'][] = $result->name;
|
|
$opd_investigations['value'][] = $investigation_results[$i];
|
|
$opd_investigations['comment'][] = $investigation_comments[$i];
|
|
|
|
if($result->range_type == 1) {
|
|
$opd_investigations['normal_ranges'][] = get_dynamic_normal_range($result->id, get_patient_age_group($patient_id), get_name($patient_id, 'id', 'gender', 'patients'));
|
|
} else {
|
|
$opd_investigations['normal_ranges'][] = $result->normal_ranges;
|
|
}
|
|
|
|
$opd_investigations['type'][] = $result->type;
|
|
}
|
|
} else {
|
|
if (isset($investigation_ids[$i]) && $investigation_ids[$i] != "") {
|
|
$result = Investigation::where('id', $investigation_ids[$i])->first();
|
|
$ward_investigations['name'][] = $result->name;
|
|
$ward_investigations['value'][] = $investigation_results[$i];
|
|
$ward_investigations['comment'][] = $investigation_comments[$i];
|
|
$ward_investigations['type'][] = $result->type;
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
for ($i = 0; $i < count($inpatient_status); $i++) {
|
|
if ($investigation_per_valid[$i] == 1) {
|
|
// this investigation is authenticated
|
|
if ($inpatient_status[$i] == 0) {
|
|
if (isset($investigation_ids[$i]) && $investigation_ids[$i] != "") {
|
|
$result = Investigation::where('id', $investigation_ids[$i])->first();
|
|
$opd_investigations['name'][] = $result->name;
|
|
$opd_investigations['value'][] = $investigation_results[$i];
|
|
|
|
if($result->range_type == 1) {
|
|
$opd_investigations['normal_ranges'][] = get_dynamic_normal_range($result->id, get_patient_age_group($patient_id), get_name($patient_id, 'id', 'gender', 'patients'));
|
|
} else {
|
|
$opd_investigations['normal_ranges'][] = $result->normal_ranges;
|
|
}
|
|
|
|
$opd_investigations['comment'][] = $investigation_comments[$i];
|
|
$opd_investigations['type'][] = $result->type;
|
|
}
|
|
} else {
|
|
if (isset($investigation_ids[$i]) && $investigation_ids[$i] != "") {
|
|
$result = Investigation::where('id', $investigation_ids[$i])->first();
|
|
$ward_investigations['name'][] = $result->name;
|
|
$ward_investigations['value'][] = $investigation_results[$i];
|
|
$ward_investigations['comment'][] = $investigation_comments[$i];
|
|
$ward_investigations['type'][] = $result->type;
|
|
}
|
|
}
|
|
} else {
|
|
if ($inpatient_status[$i] == 0) {
|
|
if (isset($investigation_ids[$i]) && $investigation_ids[$i] != "") {
|
|
$result = Investigation::where('id', $investigation_ids[$i])->first();
|
|
$opd_investigations['name'][] = $result->name;
|
|
$opd_investigations['value'][] = "Pending";
|
|
|
|
if($result->range_type == 1) {
|
|
$opd_investigations['normal_ranges'][] = get_dynamic_normal_range($result->id, get_patient_age_group($patient_id), get_name($patient_id, 'id', 'gender', 'patients'));
|
|
} else {
|
|
$opd_investigations['normal_ranges'][] = $result->normal_ranges;
|
|
}
|
|
|
|
$opd_investigations['comment'][] = "Pending";
|
|
}
|
|
} else {
|
|
if (isset($investigation_ids[$i]) && $investigation_ids[$i] != "") {
|
|
$result = Investigation::where('id', $investigation_ids[$i])->first();
|
|
$ward_investigations['name'][] = $result->name;
|
|
$ward_investigations['value'][] = "Pending";
|
|
$ward_investigations['comment'][] = "Pending";
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
for ($i = 0; $i < count($inpatient_status); $i++) {
|
|
if ($inpatient_status[$i] == 0) {
|
|
if (isset($investigation_ids[$i]) && $investigation_ids[$i] != "") {
|
|
$result = Investigation::where('id', $investigation_ids[$i])->first();
|
|
$opd_investigations['name'][] = $result->name;
|
|
$opd_investigations['value'][] = "Pending";
|
|
|
|
if($result->range_type == 1) {
|
|
$opd_investigations['normal_ranges'][] = get_dynamic_normal_range($result->id, get_patient_age_group($patient_id), get_name($patient_id, 'id', 'gender', 'patients'));
|
|
} else {
|
|
$opd_investigations['normal_ranges'][] = $result->normal_ranges;
|
|
}
|
|
|
|
$opd_investigations['comment'][] = "Pending";
|
|
}
|
|
} else {
|
|
if (isset($investigation_ids[$i]) && $investigation_ids[$i] != "") {
|
|
$result = Investigation::where('id', $investigation_ids[$i])->first();
|
|
$ward_investigations['name'][] = $result->name;
|
|
$ward_investigations['value'][] = "Pending";
|
|
$ward_investigations['comment'][] = "Pending";
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
/* ====== end work on investigations */
|
|
$ordered_procedures = OrderedProcedure::where(['patient_id' => $patient_id, 'episode_id' => $episode_id])->get();
|
|
$procedures = DB::table('procedures')->where('available', 1)->pluck("name", "id");
|
|
$cons_notes = WardInpatientDetailedNote::where(['patient_id' => $patient_id, 'episode_id' => $episode_id, 'ward_id' => 0])->latest()->get(['investigation_and_management_plan_comments', 'clinic_examination_comments', 'history_comments', 'created_by']);
|
|
$priority_signs = $emergent_signs =[];
|
|
$dateBorn = Carbon::parse($patient->date_of_birth);
|
|
$years = $dateBorn->diffInYears();
|
|
if(between($years, 0, 12) && !empty($triage)) {
|
|
$priority_signs_records = PrioritySign::where('triage_id', $triage->id)->first();
|
|
|
|
if ($priority_signs_records) {
|
|
$priority_signs = unserialize($priority_signs_records->signs);
|
|
}
|
|
|
|
$emergency_signs = EmergencySign::where('triage_id', $triage->id)->first();
|
|
|
|
if (!empty($emergency_signs)) {
|
|
$airway = unserialize($emergency_signs->airway);
|
|
$circulation = unserialize($emergency_signs->circulation);
|
|
$neurological = unserialize($emergency_signs->neurological);
|
|
$dehydration = unserialize($emergency_signs->dehydration);
|
|
$emergencySigns= array_merge($airway,$circulation, $dehydration,$neurological);
|
|
foreach($emergencySigns as $key => $sign) if($sign == 'Yes') $emergent_signs[] = $key;
|
|
}
|
|
}
|
|
// get all symptoms
|
|
$symptoms = DB::table('symptoms')->where('available', 1)->pluck("name", "id");
|
|
|
|
$data = [
|
|
'patient' => $patient,
|
|
'consultation' => $consultation,
|
|
'patient_id' => $patient_id,
|
|
'hospitalInfo' => $hospitalInfo,
|
|
'patient_discount' => $patient_discount,
|
|
'ward_investigations' => $ward_investigations,
|
|
'opd_investigations' => $opd_investigations,
|
|
'ordered_procedures' => $ordered_procedures,
|
|
'procedures' => $procedures,
|
|
'treatments' => $treatments,
|
|
'all_diagnoses' => $all_diagnoses,
|
|
'cons_notes' => $cons_notes,
|
|
'triage' => $triage,
|
|
'years' => $years,
|
|
'symptoms' => $symptoms,
|
|
'priority_signs' => $priority_signs,
|
|
'emergent_signs' => $emergent_signs,
|
|
'opd_investigations_date' => $opd_investigations_date,
|
|
'ward_investigations_date' => $ward_investigations_date
|
|
];
|
|
// return view('patients::consultations/referral_notes_print', $data);
|
|
$pdf = SnappyPDF::loadView('patients::consultations/referral_notes_print', $data)
|
|
->setOrientation('portrait')
|
|
->setOption('margin-bottom', 7)
|
|
->setOption('margin-top', 5)
|
|
->setOption('footer-html', '<i>Stre@mline</i>');
|
|
|
|
return $pdf->inline('Referral Notes' . date("y-m-d h:ia") . '.pdf');
|
|
}
|
|
|
|
public function get_outcome_slug($id)
|
|
{
|
|
$outcome = Outcome::find($id);
|
|
if ($outcome) {
|
|
return $outcome->slug;
|
|
}
|
|
|
|
return "";
|
|
}
|
|
|
|
public function delete_consultation_clinical_notes($id)
|
|
{
|
|
$ward_doctor_notes = WardInpatientDetailedNote::find($id);
|
|
$ward_doctor_notes->delete();
|
|
|
|
flash('Notes have been deleted')->success();
|
|
return redirect('in_patient_sheet');
|
|
}
|
|
|
|
public function update_consultation_clinical_notes(Request $request)
|
|
{
|
|
$consultation_clinical_notes = WardInpatientDetailedNote::find($request->id);
|
|
$consultation_clinical_notes->history_comments = $request->history_comments?? null;
|
|
$consultation_clinical_notes->investigation_and_management_plan_comments = $request->investigation_and_management_plan_comments?? null;
|
|
$consultation_clinical_notes->clinic_examination_comments = $request->clinic_examination_comments?? null;
|
|
$consultation_clinical_notes->updated_by = Auth::user()->id;
|
|
|
|
if($consultation_clinical_notes->save()) return $consultation_clinical_notes->id;
|
|
else return 0;
|
|
}
|
|
|
|
}
|