middleware('auth'); } /** * Display a listing of the resource. * * @return \Illuminate\Http\Response */ public function index() { // } /** * Show the form for creating a new resource. * * @return \Illuminate\Http\Response */ public function create() { $patient_id = session()->get('patient_id'); $episode_id = session()->get('episode_id'); // session to pick where user is from // patient episodes or // /wards/select Session::put('previous_url', URL::previous()); } /** * Create new episode for a patient. * * @param request object * @return \Illuminate\Foundation\Application|\Illuminate\Http\RedirectResponse|\Illuminate\Http\Response|\Illuminate\Routing\Redirector */ public function create_episode(Request $request) { $logged_in_user_id = Auth::id(); $episode = new PatientEpisode; $episode->patient_id = $request->patient_id; $episode->clinic_id = get_default_hospital_clinic(); $episode->created_by = $logged_in_user_id; $episode->updated_by = $logged_in_user_id; $ward_id = get_name("maternity", "slug", "id", "wards"); if ($ward_id != "N/A") { try { $episode->save(); $last_inserted_id = $episode->id; // Admit patient in maternity ward $inpatient = new InpatientInfo; $inpatient->patient_id = $request->patient_id; $inpatient->episode_id = $last_inserted_id; $inpatient->admitted_on = $request->maternity_date; $inpatient->ward_id = $ward_id; $inpatient->created_by = Auth::id(); $inpatient->created_at = Carbon::now(); $inpatient->save(); flash("Patient admitted in MATERNITY")->success(); return redirect('/patient_episodes/'); } catch (QueryException $e) { flash("An error occured!")->error(); return back()->withInput(); } } else { flash("No ward has been tagged as maternity!")->error(); return redirect('/patient_episodes/'); } } /* * Set a session for the selected episode */ public function set_episode_session($episode_id) { $set_episode_session = session()->put(['episode_id' => $episode_id]); return $set_episode_session; } //redirect to route based on user input //edit //show //crate 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'); $existing_maternity_inpatient_data = MaternityInpatient::where(['patient_id' => $patient_id, 'episode_id' => $episode_id])->first(); if ($existing_maternity_inpatient_data) { switch ($existing_maternity_inpatient_data->completed) { case '0': // saved_for_editing return self::edit_inpatient(); case '1': // Completed return self::maternity_admission_details($existing_maternity_inpatient_data->id); default: // Not created yet return self::create_inpatient(); } } else { return self::create_inpatient(); } } /* * Show the form to create maternity inpatient sheet */ public function create_inpatient() { $episode_id = session()->get('episode_id'); $patient_episode_details = PatientEpisode::find($episode_id); $diagnoses_patient = DB::table('diagnoses')->orderBy('name', 'asc')->pluck("name", "id"); $patient_id = $patient_episode_details->patient_id; $patient = Patient::find($patient_id); // fetch patient surgeries $patient_surgeries = Surgery::leftJoin('users', 'surgeries.surgeon', '=', 'users.id') ->leftJoin('procedures', 'surgeries.procedure_id', '=', 'procedures.id') ->where('patient_id', $patient_id) ->latest('surgeries.created_at')->get(['procedures.name as procedure_name', 'date_surgery_completed', 'users.first_name', 'users.last_name', 'primary_diagnosis', 'other_diagnoses'])->take(5); // fetch patient consultations // $patient_consultations = Consultation::leftJoin('users', 'consultations.created_by', '=', 'users.id') ->leftJoin('diagnoses', 'consultations.primary_diagnosis', '=', 'diagnoses.id') ->leftJoin('wards', 'consultations.ward_id', '=', 'wards.id') ->leftJoin('outcomes', 'consultations.outcome_id', '=', 'outcomes.id') ->where(['patient_id' => $patient_id]) ->get([ 'admitted_on', 'episode_id', 'wards.name as ward', 'diagnoses.name as primary_diagnosis', 'other_diagnoses', 'users.first_name', 'users.last_name', 'consultations.created_at', 'outcomes.name as outcome', ]); // fetch previous consultations for patient $previous_consultation_inpatient_info = InpatientInfo::leftJoin('diagnoses', 'inpatient_info.primary_diagnosis', '=', 'diagnoses.id') ->leftJoin('users', 'inpatient_info.discharged_by', '=', 'users.id') ->leftJoin('wards', 'inpatient_info.ward_id', '=', 'wards.id') ->leftJoin('triage', 'inpatient_info.episode_id', '=', 'triage.episode_id') ->leftJoin('consultations', 'inpatient_info.episode_id', '=', 'consultations.episode_id') ->leftJoin('ordered_investigations', 'inpatient_info.episode_id', '=', 'ordered_investigations.episode_id') ->leftJoin('ward_treatments', 'inpatient_info.episode_id', '=', 'ward_treatments.episode_id') ->leftJoin('outcomes', 'inpatient_info.outcome_id', '=', 'outcomes.id') ->where([['inpatient_info.patient_id', $patient_id], ['inpatient_info.episode_id', '!=', $episode_id]]) ->where('inpatient_info.created_at', '<', $patient_episode_details->created_at) ->whereNotNull('inpatient_info.admitted_on') ->where('consultations.outcome_id', '=', 1) //1 = outcome(admitted) from consultations table ->latest('inpatient_info.created_at') ->get( [ 'diagnoses.name as primary_diagnosis', 'inpatient_info.other_diagnoses as other_diagnoses', 'users.first_name as first_name', 'consultations.created_at as consultation_date', 'inpatient_info.created_at as inpatient_info_date', 'diagnoses.name as primary_diagnosis', 'inpatient_info.other_diagnoses', 'outcomes.name as outcome', 'inpatient_info.episode_id', 'inpatient_info.admitted_on', 'inpatient_info.discharged_on', 'users.first_name as first_name', 'users.last_name as last_name', 'wards.name as ward', 'triage.observations', 'triage.symptoms as triage_symptoms', 'triage.symptom_duration as triage_symptom_duration', 'consultations.symptoms as consultation_symptoms', 'consultations.symptom_duration as consultation_symptom_duration', DB::raw("CONCAT(triage.symptoms, '', consultations.symptoms) as symptoms"), DB::raw("CONCAT(triage.symptom_duration, ', ', consultations.symptom_duration) as symptom_duration"), ] )->take(5); /*check if episode record exists in the db and redirect to show details if it does */ $existing_maternity_inpatient = MaternityInpatient::where(['patient_id' => $patient_id, 'episode_id' => $episode_id])->first(); $latest_existing_maternity_inpatient_data = MaternityInpatient::where(['patient_id' => $patient_id])->latest()->first(); if (!is_null($existing_maternity_inpatient)) { flash('Patient already admitted to maternity for this episode')->error(); return redirect('maternity_admission_details'); } // past obstetric history $obstetric_history_details = ObstetricHistory::where(['patient_id' => $patient_id])->orderBy('obstetric_date', 'desc')->get(); $categories = DB::table('patient_categories')->where('available', 1)->pluck("name", "id"); $marital_statuses = DB::table('marital_statuses')->pluck("name", "id"); $diagnoses = DB::table('diagnoses')->where('available', 1)->orderBy('name', 'asc')->pluck("name", "id")->prepend('- select -', ''); $relationships = DB::table('family_relations')->pluck('name', 'id'); $occupations = DB::table('occupations')->pluck('name', 'id'); $patient_categories = DB::table('patient_categories')->where('available', 1)->pluck('name', 'id'); $drug_categories = DB::table('drug_categories')->get(); $documents = PatientDocument::where('patient_id', $patient_id)->orderBy('created_at', 'desc')->get(); //allergies and alerts $known_patient_allergies = Allergy::where('patient_id', $patient_id)->orderBy('created_at', 'desc')->take(2)->get(); $known_patient_alerts = Alert::where('patient_id', $patient_id)->orderBy('created_at', 'desc')->take(2)->get(); $drug_categories_array = DB::table('drug_categories')->pluck('name', 'id'); $consultation_id = get_name($episode_id, "id", "consultation_id", "patient_episodes"); $triage_id = get_name($episode_id, "id", "triage_id", "patient_episodes"); $triage = Triage::find($triage_id); //this maybe null since one may be admitted straight away $anc_registration = AnteNatalClinicRegistration::where(['patient_id' => $patient_id])->orderBy('id', 'desc')->first(); $latest_existing_delivery_plan = AncDeliveryPlan::where(['patient_id' => $patient_id])->latest()->first(); $latest_existing_anc_clinic_followup = AnteNatalClinicFollowup::where(['patient_id' => $patient_id])->latest()->first(); $diagnoses_all = DB::table('diagnoses')->select('id', 'prompts', 'reference_areas', 'reference_names')->get(); $latest_existing_anc_hiv_info = AncVdrlHiv::where(['patient_id' => $patient_id])->latest()->first(); $latest_existing_antenatal_mother_history = AntenatalMotherHistory::where(['patient_id' => $patient_id])->latest()->first(); $emergency_signs = EmergencySign::where(['patient_id' => $patient_id, 'triage_id' => $triage_id, 'episode_id' => $episode_id])->get(); $patient_documents = PatientDocument::where(['patient_id' => $patient_id])->get(); $diagnosis = Diagnosis::where('available', 1)->orderby('name', 'asc')->get(); $obstetric_history = ObstetricHistory::where(['patient_id' => $patient_id])->orderBy('obstetric_date', 'desc')->get(); $existing_blood_transfusion = AnteNatalClinicBloodTransfusion::where(['patient_id' => $patient_id])->first(); $anc_blood_transfusion = AnteNatalClinicBloodTransfusion::where(['patient_id' => $patient_id])->get(); $blood_groups = DB::table('blood_groups')->orderBy('name')->pluck('name', 'id')->prepend('- select -', ''); $referrals = DB::table('referral_hospitals')->whereNull('deleted_at')->orderBy('name')->pluck('name', 'id')->prepend('- select -', ''); $accuracies = DB::table('ante_natal_clinic_accuracies')->orderBy('name')->pluck('name', 'id')->prepend('- select -', ''); $anc_outcomes = DB::table('ante_natal_clinic_outcomes')->orderBy('name')->pluck('name', 'id')->prepend('- select -', ''); $hiv_statuses = ['' => '-- Select --', '0' => 'Negative', '1' => 'Positive', '3' => 'Unknown']; $maternity_progress = DB::table('maternity_progress')->orderBy('name')->pluck('name', 'id')->prepend('- select -', ''); $family_planning_methods = FamilyPlanningMethod::orderBy('name', 'asc')->pluck("name", "id"); $family_planning_methods_data = FamilyPlanningMethod::all(); $caesarian_sections = CaesarianSection::orderBy('name', 'asc')->pluck("name", "id")->prepend('- Select -', ''); $uterus_operations = UterusOperation::orderBy('name', 'asc')->pluck("name", "id"); $gender_based_violence = GenderViolence::orderBy('name', 'asc')->pluck("name", "id"); // prep the inpatient investigation arrays and counters $opd_investigations = []; $ward_investigations = []; $symptoms = Symptom::pluck("name", "id"); // get all investigations ordered in this episode $ordered_investigations = OrderedInvestigation::where(['episode_id' => $episode_id])->get(); // ordered investigations $ordered_investigations = OrderedInvestigation::where(['patient_id' => $patient_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) { $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]; } else { $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]; } } } else { for ($i = 0; $i < count($inpatient_status); $i++) { if ($investigation_per_valid[$i] == 1) { // this investigation is authenticated if ($inpatient_status[$i] == 0) { $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]; } else { $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]; } } else { if ($inpatient_status[$i] == 0) { $result = Investigation::where('id', $investigation_ids[$i])->first(); $opd_investigations['name'][] = $result->name; $opd_investigations['value'][] = "Pending"; $opd_investigations['comment'][] = "Pending"; } else { $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) { $result = Investigation::where('id', $investigation_ids[$i])->first(); $opd_investigations['name'][] = $result->name; $opd_investigations['value'][] = "Pending"; $opd_investigations['comment'][] = "Pending"; } else { $result = Investigation::where('id', $investigation_ids[$i])->first(); $ward_investigations['name'][] = $result->name; $ward_investigations['value'][] = "Pending"; $ward_investigations['comment'][] = "Pending"; } } } } // previous consultations if (session()->get('consultation_with_notes') == 1) { $consultation_with_notes = true; } else { $consultation_with_notes = false; } $patient_episodes = DB::table('patient_episodes')->where('patient_id', $patient_id)->whereNotIn('id', [$episode_id])->get(); $episode = PatientEpisode::where('id', $episode_id)->first(); $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++; } } } // end previous consultations return view( 'maternity::maternity.inpatient_sheet', compact( 'patient_episodes', 'past_episodes_info', 'episode', 'consultation_with_notes', 'latest_existing_maternity_inpatient_data', 'previous_consultation_inpatient_info', 'existing_blood_transfusion', 'patient_id', 'episode_id', 'patient', 'categories', 'patient_surgeries', 'patient_consultations', 'marital_statuses', 'diagnoses', 'diagnoses_all', 'diagnoses_patient', 'relationships', 'occupations', 'drug_categories', 'documents', 'drug_categories_array', 'known_patient_alerts', 'known_patient_allergies', 'consultation_id', 'triage_id', 'triage', 'anc_registration', 'emergency_signs', 'patient_documents', 'diagnosis', 'obstetric_history', 'anc_blood_transfusion', 'blood_groups', 'referrals', 'accuracies', 'anc_outcomes', 'hiv_statuses', 'maternity_progress', 'ward_investigations', 'opd_investigations', 'symptoms', 'obstetric_history_details', 'family_planning_methods', 'caesarian_sections', 'uterus_operations', 'gender_based_violence', 'latest_existing_delivery_plan', 'latest_existing_antenatal_mother_history', 'latest_existing_anc_clinic_followup', 'latest_existing_anc_hiv_info', ) ); } /* * Show the form to create maternity delivery record */ public function create_delivery_record() { $episode_id = session()->get('episode_id'); $patient_episode_details = PatientEpisode::find($episode_id); $patient_id = $patient_episode_details->patient_id; $patient = Patient::find($patient_id); /* check if record with this same episode has been previously entered and display the details page instead */ $existing_delivery_record = MaternityDeliveryRecord::where(['episode_id' => $episode_id])->first(); if (!is_null($existing_delivery_record)) { return redirect('delivery_record_details'); } $categories = DB::table('patient_categories')->where('available', 1)->pluck("name", "id"); $marital_statuses = DB::table('marital_statuses')->pluck("name", "id"); $diagnoses = DB::table('diagnoses')->where('available', 1)->orderBy('name', 'asc')->pluck("name", "id"); $relationships = DB::table('family_relations')->pluck('name', 'id'); $occupations = DB::table('occupations')->pluck('name', 'id'); $patient_categories = DB::table('patient_categories')->where('available', 1)->pluck('name', 'id'); $drug_categories = DB::table('drug_categories')->get(); $documents = PatientDocument::where('patient_id', $patient_id)->orderBy('created_at', 'desc')->get(); //allergies and alerts $known_patient_allergies = Allergy::where('patient_id', $patient_id)->orderBy('created_at', 'desc')->take(2)->get(); $known_patient_alerts = Alert::where('patient_id', $patient_id)->orderBy('created_at', 'desc')->take(2)->get(); $drug_categories_array = DB::table('drug_categories')->pluck('name', 'id'); /* SELECT User_Id, First_Name,Last_Name FROM users WHERE Active = 1 AND User_Group_Id in (7,37,39,42,47,59,60) ORDER BY First_Name ASC; */ $users = DB::table('users')->orderBy("first_name", "asc")->get()->toArray(); $allowed_users = DB::table('users')->orderBy('first_name')->pluck('first_name', 'id')->prepend('- select -', ''); $mode_of_delivery = DB::table('mode_of_delivery')->orderBy('name')->pluck('name', 'id')->prepend('- select -', ''); $location_of_delivery = DB::table('location_of_delivery')->orderBy('name')->pluck('name', 'id')->prepend('- select -', ''); $respiration_minutes = DB::table('spontaneous_regular_respiration_in_minutes')->pluck('minutes', 'id'); $wards = DB::table('wards')->where('available', 1)->whereNull('deleted_at')->orderBy('name')->pluck('name', 'id')->prepend('- select -', ''); /* select post natal ward */ return view('maternity::maternity.delivery_record', compact('patient_id', 'episode_id', 'patient', 'categories', 'drug_categories_array', 'known_patient_alerts', 'known_patient_allergies', 'marital_statuses', 'diagnoses', 'relationships', 'occupations', 'patient_categories', 'drug_categories', 'documents', 'allowed_users', 'users', 'mode_of_delivery', 'location_of_delivery', 'respiration_minutes', 'wards')); } /** * Store a newly created resource in storage. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ public function check_hiv_test_date_if_three_months(Request $request) { $pickedDate = Carbon::parse($request->input('hiv_date')); $currentDate = Carbon::now(); $response = ''; if ($pickedDate->diffInMonths($currentDate) >= 3) { $response = "
The captured date is 3 months ago or more.
"; } else { $response = "
The captured date is less than 3 months ago.
"; } return $response; } public function store(Request $request) { //start database transaction /* try to perform this set of db transactions and if any fails, rollback everything */ DB::transaction(function () use ($request) { // validations $validatedData = $request->validate([ 'femur_fracture_details' => 'nullable', 'femur_fracture_date' => 'nullable', ]); $episode_id = session()->get('episode_id'); $patient_episode_details = PatientEpisode::find($episode_id); $patient_id = $patient_episode_details->patient_id; $maternity_inpatient = MaternityInpatient::where(['patient_id' => $patient_id, 'episode_id' => $episode_id])->first(); if (empty($maternity_inpatient)) { $maternity_inpatient = new MaternityInpatient; $maternity_inpatient->patient_id = $patient_id; $maternity_inpatient->episode_id = $episode_id; $maternity_inpatient->created_by = Auth::id(); } else $maternity_inpatient->updated_by = Auth::id(); $maternity_inpatient->primary_diagnosis = $request->primary_diagnosis; $maternity_inpatient->other_diagnoses = (!empty($request->other_diagnosis[0])) ? serialize($request->other_diagnosis) : null; $maternity_inpatient->gravida = $request->gravida; $maternity_inpatient->para = $request->para; $maternity_inpatient->abortion = $request->abortion; $maternity_inpatient->ectopic_pregnancies = $request->ectopic_pregnancies; $maternity_inpatient->postpartum = $request->postpartum; $maternity_inpatient->previous_pph = $request->previous_pph; $maternity_inpatient->previous_pph_details = $request->pph_details; $maternity_inpatient->previous_scar = $request->previous_scar; $maternity_inpatient->previous_scar_number = $request->scar_number; $maternity_inpatient->previous_scar_indication = $request->scar_indication; $maternity_inpatient->other_comments_pph = $request->other_comments_pph; $maternity_inpatient->lmp = !is_null($request->lmp) ? Carbon::createFromFormat('d/m/Y', $request->lmp)->toDateString() : null; $maternity_inpatient->accuracy = $request->accuracy; $maternity_inpatient->edd = isset($request->edd) ? Carbon::createFromFormat('d/m/Y', $request->edd)->toDateString() : null; $maternity_inpatient->referral_from = $request->refferal; $maternity_inpatient->progress = $request->progress; $maternity_inpatient->born_before_arrival = $request->born_before_arrival; $maternity_inpatient->vdrl_location = $request->vdrl_location; $maternity_inpatient->vdrl_date = !is_null($request->vdrl_date) ? Carbon::createFromFormat('d/m/Y', $request->vdrl_date)->toDateString() : null; $maternity_inpatient->vdrl_result = $request->vdrl_result; $maternity_inpatient->hiv_location = $request->hiv_location; $maternity_inpatient->hiv_date = !is_null($request->hiv_date) ? Carbon::createFromFormat('d/m/Y', $request->hiv_date)->toDateString() : null; $maternity_inpatient->hiv_result_usaid = $request->hiv_result; $maternity_inpatient->scan_edd = !is_null($request->scan_edd) ? Carbon::createFromFormat('d/m/Y', $request->scan_edd)->toDateString() : null; $maternity_inpatient->gestation_from_scan = $request->gestation_from_scan; $maternity_inpatient->history_of_fits = $request->history_of_fits; $maternity_inpatient->history_of_aph = $request->history_of_aph; $maternity_inpatient->aph_details = $request->aph_details; $maternity_inpatient->fits_details = $request->fits_details; $maternity_inpatient->other_comments = $request->other_comments; $maternity_inpatient->iufd = $request->iufd; $maternity_inpatient->weeks_of_amenorrhoea = $request->weeks_of_amenorrhoea; $maternity_inpatient->delivery_recomendation = $request->delivery_recomendation; $maternity_inpatient->pregnancy_complications = implode(',', $request->pregnancy_complications ?? []); $maternity_inpatient->other_pregnancy_complications = $request->other_pregnancy_complications; $maternity_inpatient->physical_examination = implode(',', $request->physical_examination ?? []); $maternity_inpatient->heart_physical_examination_details = $request->heart_physical_examination_details; $maternity_inpatient->breasts_physical_examination_details = $request->breasts_physical_examination_details; $maternity_inpatient->legs_physical_examination_details = $request->legs_physical_examination_details; $maternity_inpatient->lungs_physical_examination_details = $request->lungs_physical_examination_details; $maternity_inpatient->teeth_physical_examination_details = $request->teeth_physical_examination_details; $maternity_inpatient->other_physical_examinations = $request->other_physical_examinations; $maternity_inpatient->other_obstetric_risk_factors = $request->other_obstetric_risk_factors; $maternity_inpatient->current_acute_problems = isset($request->current_acute_problems) ? implode(',', $request->current_acute_problems) : ''; $maternity_inpatient->obstetric_risk_factors = isset($request->obstetric_risk_factors) ? implode(',', $request->obstetric_risk_factors) : ''; $maternity_inpatient->blood_transfusion_available = isset($request->blood_transfusion_available) ? implode(',', $request->blood_transfusion_available) : ''; $maternity_inpatient->fractures = isset($request->fractures) ? implode(',', $request->fractures) : ''; $maternity_inpatient->blood_transfusion_details = $request->blood_transfusion_details; $maternity_inpatient->pelvis_fracture_date = !is_null($request->pelvis_fracture_date) ? Carbon::createFromFormat('d/m/Y', $request->pelvis_fracture_date)->toDateString() : null; $maternity_inpatient->pelvis_fracture_details = $request->pelvis_fracture_details; $maternity_inpatient->spine_fracture_date = !is_null($request->spine_fracture_date) ? Carbon::createFromFormat('d/m/Y', $request->spine_fracture_date)->toDateString() : null; $maternity_inpatient->spine_fracture_details = $request->spine_fracture_details; $maternity_inpatient->femur_fracture_date = !is_null($request->femur_fracture_date) ? Carbon::createFromFormat('d/m/Y', $request->femur_fracture_date)->toDateString() : null; $maternity_inpatient->femur_fracture_details = $request->femur_fracture_details; $maternity_inpatient->other_fracture_details = $request->other_fracture_details; $maternity_inpatient->created_by = auth()->user()->id; if ($request->get('submit-btn') == 'submit_maternity_admission') { // save and complete $maternity_inpatient->completed = 1; $maternity_inpatient->save(); } else { // save draft $maternity_inpatient->completed = 0; $maternity_inpatient->save(); } $maternity_clinic_id = get_name('MATERNITY', 'name', 'id', 'wards'); //get maternity ward id // store past obstetric history data with child data for ($k = 1; $k <= $request->pregnancy_number; $k++) { $pregnancy = 'pregnancy_' . $k; $obs_date = $pregnancy . '_obstetric_date'; $gestation = $pregnancy . '_gestation'; $outcome = $pregnancy . '_obstetric_outcome'; $abortion_outcome = $pregnancy . '_abortion_outcome'; $delivery_type = $pregnancy . '_delivery_type'; $past_pregnancy_complications = $pregnancy . '_past_pregnancy_complications'; $past_pregnancy_comment = $pregnancy . '_past_pregnancy_comment'; $puerperium = $pregnancy . '_puerperium'; $child_name = $pregnancy . '_child_name'; $child_gender = $pregnancy . '_child_gender'; $child_patient_number = $pregnancy . '_child_patient_number'; $child_birth_weight = $pregnancy . '_child_birth_weight'; $child_immunisation_status = $pregnancy . '_child_immunisation_status'; $child_health_condition = $pregnancy . '_child_health_condition'; $child_counter = !empty($request->$child_name[0]) ? count($request->$child_name) : 0; $children = []; if ($child_counter > 0) { for ($t = 0; $t < $child_counter; $t++) { $children[] = [ 'health_condition' => $request->$child_health_condition[$t], 'immunisation_status' => $request->$child_immunisation_status[$t], 'birth_weight' => $request->$child_birth_weight[$t], 'patient_number' => $request->$child_patient_number[$t], 'gender' => $request->$child_gender[$t], 'name' => $request->$child_name[$t] ]; } } //check if past_obs_date is filled if (isset($request->$obs_date)) { $obstetric_history = new ObstetricHistory; $obstetric_history->patient_id = $patient_id; $obstetric_history->episode_id = $episode_id; $obstetric_history->obstetric_date = isset($request->$obs_date) ? Carbon::createFromFormat('d/m/Y', $request->$obs_date)->toDateString() : null; $obstetric_history->gestation = $request->$gestation; $obstetric_history->outcome = $request->$outcome; $obstetric_history->clinic_id = $maternity_clinic_id; $obstetric_history->abortion_outcome = $request->$abortion_outcome; $obstetric_history->delivery_type = $request->$delivery_type; $obstetric_history->past_pregnancy_complications = $request->$past_pregnancy_complications; $obstetric_history->past_pregnancy_comment = $request->$past_pregnancy_comment; $obstetric_history->puerperium = $request->$puerperium; $obstetric_history->children = !empty($children) ? json_encode($children) : null; $obstetric_history->created_by = auth()->user()->id; $obstetric_history->save(); } } // delivery plan $delivery_plan = new MaternityDeliveryPlan; $delivery_plan->patient_id = $patient_id; $delivery_plan->episode_id = $episode_id; $delivery_plan->person_you_live_with = $request->person_you_live_with; $delivery_plan->transport_means_to_facility = $request->transport_means_to_facility; $delivery_plan->person_to_accompany_you = $request->person_to_accompany_you; $delivery_plan->person_to_look_after_home = $request->person_to_look_after_home; $delivery_plan->mother_partner_screened_for = implode(',', $request->mother_partner_screened_for ?? []); $delivery_plan->family_planning_method_plan = $request->family_planning_method_plan; $delivery_plan->person_to_stay_at_facility = $request->person_to_stay_at_facility; $delivery_plan->delivery_method = $request->delivery_method; $delivery_plan->backup_delivery_method = $request->backup_delivery_method; $delivery_plan->after_birth_disposal = $request->after_birth_disposal; $delivery_plan->created_by = auth()->user()->id; $delivery_plan->save(); // maternity mother history $maternity_mother_history = new MaternityMotherHistory; $maternity_mother_history->patient_id = $patient_id; $maternity_mother_history->episode_id = $episode_id; $maternity_mother_history->cycle_length = $request->cycle_length; $maternity_mother_history->menses_length = $request->menses_length; $maternity_mother_history->menses_amount = $request->menses_amount; $maternity_mother_history->family_planning_method = $request->family_planning_method; $maternity_mother_history->date_discontinued = isset($request->date_discontinued) ? Carbon::createFromFormat('d/m/Y', $request->date_discontinued)->toDateString() : null; $maternity_mother_history->why_stop_family_planning = $request->why_stop_family_planning; $maternity_mother_history->medical_presentations = implode(',', $request->medical_presentations ?? []); $maternity_mother_history->other_medical_presentations = $request->other_medical_presentations; $maternity_mother_history->sgbv_risk = implode(',', $request->sgbv_risk ?? []); $maternity_mother_history->other_sgbv_risk = $request->other_sgbv_risk; $maternity_mother_history->husband_health = $request->husband_health; $maternity_mother_history->history_of_aph = $request->history_of_aph; $maternity_mother_history->history_aph_details = $request->history_aph_details; $maternity_mother_history->history_of_fits = $request->history_of_fits; $maternity_mother_history->history_fit_details = $request->history_fit_details; $maternity_mother_history->other_medical_history_comment = $request->other_medical_history_comment; foreach ($request->uterus_operations_name as $key => $operation) { if (!empty($operation)) $uterine_operations[] = ['name' => $operation, 'date' => $request->uterus_operations_date[$key], 'facility_name' => $request->uterus_operations_facility_name[$key]]; } foreach ($request->other_operations_name as $key => $operation) { if (!empty($operation)) $other_surgeries[] = ['name' => $operation, 'date' => $request->other_operations_name_date[$key], 'facility_name' => $request->other_operations_name_facility_name[$key]]; } $maternity_mother_history->uterine_surgeries = !empty($uterine_operations) ? json_encode($uterine_operations) : null; $maternity_mother_history->other_surgeries = !empty($other_surgeries) ? json_encode($other_surgeries) : null; $maternity_mother_history->created_by = auth()->user()->id; $maternity_mother_history->save(); // Blood Transfusion $blood_group = $request->blood_group; $transfusion_date_array = $request->transfusion_date; $no_of_units_array = $request->no_of_units; $transfusion_comment_array = $request->transfusion_comment; if (is_array($transfusion_date_array) && !empty($transfusion_date_array) && !in_array(null, $transfusion_date_array, true)) { // The 'transfusion_date' parameter is an array and contains null values if (!empty($transfusion_date_array)) for ($i = 0; $i < count($transfusion_date_array); $i++) { $anc_blood_transfusion = new AnteNatalClinicBloodTransfusion; $anc_blood_transfusion->patient_id = $patient_id; $anc_blood_transfusion->episode_id = $episode_id; $anc_blood_transfusion->blood_group_id = $blood_group; $anc_blood_transfusion->transfusion_date = isset($transfusion_date_array[$i]) ? Carbon::createFromFormat('d/m/Y', $transfusion_date_array[$i])->toDateString() : null; $anc_blood_transfusion->number_of_units = $no_of_units_array[$i]; $anc_blood_transfusion->comments = $transfusion_comment_array[$i]; $anc_blood_transfusion->created_by = auth()->user()->id; $anc_blood_transfusion->save(); } } else { // Handle when its empty and has null value Log::info("transfusion is null"); } // pelvic examination and assessement $pelvic_examination_and_assessment = new PelvicExaminationAndAssessment; $pelvic_examination_and_assessment->patient_id = $patient_id; $pelvic_examination_and_assessment->episode_id = $episode_id; $pelvic_examination_and_assessment->vulva = $request->vulva; $pelvic_examination_and_assessment->vagina = $request->vagina; $pelvic_examination_and_assessment->cervix = $request->cervix; $pelvic_examination_and_assessment->dilatation = $request->dilatation; $pelvic_examination_and_assessment->uterine_adnexa = $request->uterine_adnexa; $pelvic_examination_and_assessment->moniliasis = $request->moniliasis; $pelvic_examination_and_assessment->diagonal_conjugate = round($request->diagonal_conjugate, 2); $pelvic_examination_and_assessment->sacrum = $request->sacrum; $pelvic_examination_and_assessment->ischial_spinces = $request->ischial_spinces; $pelvic_examination_and_assessment->sub_public_angle = $request->sub_public_angle; $pelvic_examination_and_assessment->ischial_tuberosities = $request->ischial_tuberosities; $pelvic_examination_and_assessment->pelvic_adequate = $request->pelvic_adequate; $pelvic_examination_and_assessment->created_by = auth()->user()->id; $pelvic_examination_and_assessment->save(); }); //end database transaction // pick previoius_url //picked from /create $previous_url = Session::get('previous_url'); switch ($request->get('submit-btn')) { case 'save_maternity_admission': flash('Maternity Inpatient Sheet Saved successfully')->success(); if ($previous_url == url('/wards/select')) { return redirect('/wards/select'); } elseif ($previous_url == url('/patient_episodes')) { return redirect('patient_episodes'); } else { return redirect('patient_episodes'); } break; case 'submit_maternity_admission': flash('Maternity Inpatient Sheet Completed and Submitted successfully')->success(); if ($previous_url == url('/wards/select')) { return redirect('/wards/select'); } elseif ($previous_url == url('/patient_episodes')) { return redirect('patient_episodes'); } else { return redirect('patient_episodes'); } } } /** * Store a newly created delivery record in storage. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ public function store_delivery_record(Request $request) { $episode_id = session()->get('episode_id'); $patient_episode_details = PatientEpisode::find($episode_id); $patient_id = $patient_episode_details->patient_id; $parent_record = Patient::find($patient_id); //inputs from the delivery section $foetal_number = $request->foetal_number; //not array $date_of_birth = implode(',', $request->birthdate); $delivery_time = implode(',', $request->deliveryTime); $duration1 = implode(',', $request->duration1); $duration2_hrs = implode(',', $request->duration2_hrs); $duration2_mins = implode(',', $request->duration2_mins); $baby_one_duration2 = $request->duration2_hrs[0] . ' and ' . $request->duration2_mins[0]; $baby_two_duration2 = $request->duration2_hrs[1] . ' and ' . $request->duration2_mins[1]; $baby_three_duration2 = $request->duration2_hrs[2] . ' and ' . $request->duration2_mins[2]; $duration2 = [$baby_one_duration2, $baby_two_duration2, $baby_three_duration2]; $duration2 = implode(',', $duration2); $baby_one_duration3 = $request->duration3_hrs[0] . ' and ' . $request->duration3_mins[0]; $baby_two_duration3 = $request->duration3_hrs[1] . ' and ' . $request->duration3_mins[1]; $baby_three_duration3 = $request->duration3_hrs[2] . ' and ' . $request->duration3_mins[2]; $duration3 = [$baby_one_duration3, $baby_two_duration3, $baby_three_duration3]; $duration3 = implode(',', $duration3); $delivered_by_cadre = implode(',', $request->deliveredByCadre); //1-staff,2-student $delivered_by_name = implode(',', $request->deliveredByName); //picks user IDs $supervised_by = implode(',', $request->supervisedBy); //picks user IDs $mode_of_delivery = implode(',', $request->modeOfDelivery); $indication_for_cs = implode(',', $request->indicationForCS); $location_of_delivery = implode(',', $request->locationOfDelivery); $delivery_comments = implode(',', $request->deliveryComments); $blood_loss = $request->bloodLoss; //not array $bloodloss_measurement = $request->bloodloss_measurement; //not array //inputs from the baby section $received_by = implode(',', $request->receivedBy); $gender = implode(',', $request->sex); //1=female 2=male 3=ambigous $condition = implode(',', $request->condition); $weight = implode(',', $request->weight); $birth_order = implode(',', $request->birth_order); $congenital_abnormalities1 = $request->congenital_abnormalities1; $congenital_abnormalities2 = $request->congenital_abnormalities2; $congenital_abnormalities3 = $request->congenital_abnormalities3; $congenital_abnormalities = [$congenital_abnormalities1, $congenital_abnormalities2, $congenital_abnormalities3]; $congenital_abnormalities = implode(',', $congenital_abnormalities); $baby_comments = implode(',', $request->babyComments); //if baby condition = fresh SB or mecarated SB $perinetal_death_notification_form1 = $request->perinetal_death_notification_form1; $perinetal_death_notification_form2 = $request->perinetal_death_notification_form2; $perinetal_death_notification_form3 = $request->perinetal_death_notification_form3; $perinetal_death_notification_form = [$perinetal_death_notification_form1, $perinetal_death_notification_form2, $perinetal_death_notification_form3]; $perinetal_death_notification_form = implode(',', $perinetal_death_notification_form); $perinetal_audit_form1 = $request->perinetal_audit_form1; $perinetal_audit_form2 = $request->perinetal_audit_form2; $perinetal_audit_form3 = $request->perinetal_audit_form3; $perinetal_audit_form = [$perinetal_audit_form3, $perinetal_audit_form2, $perinetal_audit_form1]; $perinetal_audit_form = implode(',', $perinetal_audit_form); //if baby condition = Alive $apgar_score_at_minute_1 = !is_null($request->apgar_score_at_minute_1) ? implode(',', $request->apgar_score_at_minute_1) : null; $apgar_score_at_minute_5 = !is_null($request->apgar_score_at_minute_5) ? implode(',', $request->apgar_score_at_minute_5) : null; $apgar_score_at_minute_10 = !is_null($request->apgar_score_at_minute_10) ? implode(',', $request->apgar_score_at_minute_10) : null; $age_established_spontaneous_reg_respiration = !is_null($request->age_established_spontaneous_reg_respiration) ? implode(',', $request->age_established_spontaneous_reg_respiration) : null; $resuscitation_airway = !is_null($request->resuscitation_airway) ? implode(',', $request->resuscitation_airway) : null; $resuscitation_suction = !is_null($request->resuscitation_suction) ? implode(',', $request->resuscitation_suction) : null; $advanced_resuscitation = !is_null($request->advanced_resuscitation) ? implode(',', $request->advanced_resuscitation) : null; $advanced_resuscitation_ett = !is_null($request->advanced_resuscitation_ett) ? implode(',', $request->advanced_resuscitation_ett) : null; $advanced_resuscitation_ecm = !is_null($request->advanced_resuscitation_ecm) ? implode(',', $request->advanced_resuscitation_ecm) : null; $advanced_resuscitation_drugs1 = $request->advanced_resuscitation_drugs1; $advanced_resuscitation_drugs2 = $request->advanced_resuscitation_drugs2; $advanced_resuscitation_drugs3 = $request->advanced_resuscitation_drugs3; /* 1.IV dextrose 2.Adrenaline 3.Aminophylline */ $advanced_resuscitation_drugs = [$advanced_resuscitation_drugs1, $advanced_resuscitation_drugs2, $advanced_resuscitation_drugs3]; $advanced_resuscitation_drugs = !is_null($advanced_resuscitation_drugs) ? implode(',', $advanced_resuscitation_drugs) : null; $im_vitamin_k_given1 = $request->im_vitamin_k_given1; $im_vitamin_k_given2 = $request->im_vitamin_k_given2; $im_vitamin_k_given3 = $request->im_vitamin_k_given3; $im_vitamin_k_given = [$im_vitamin_k_given1, $im_vitamin_k_given2, $im_vitamin_k_given3]; $im_vitamin_k_given = !is_null($im_vitamin_k_given) ? implode(',', $im_vitamin_k_given) : null; $moved_to = !is_null($request->moved_to) ? implode(',', $request->moved_to) : null; //1=Post Natal 2=SCBU 3=Labour $created_at = Carbon::now(); $delivery_record = new MaternityDeliveryRecord; $delivery_record->patient_id = $patient_id; $delivery_record->episode_id = $episode_id; $delivery_record->foetal_number = $foetal_number; $delivery_record->date_of_birth = $date_of_birth; $delivery_record->delivery_time = $delivery_time; $delivery_record->duration_1 = $duration1; $delivery_record->duration_2 = $duration2; $delivery_record->duration_3 = $duration3; $delivery_record->delivered_by_cadre = $delivered_by_cadre; $delivery_record->delivered_by_name = $delivered_by_name; $delivery_record->supervised_by = $supervised_by; $delivery_record->mode_of_delivery = $mode_of_delivery; $delivery_record->indication_for_cs = $indication_for_cs; $delivery_record->location_of_delivery = $location_of_delivery; $delivery_record->delivery_comments = $delivery_comments; $delivery_record->blood_loss = $blood_loss; $delivery_record->bloodloss_measurement = $bloodloss_measurement; $delivery_record->received_by = $received_by; $delivery_record->gender = $gender; $delivery_record->baby_condition = $condition; $delivery_record->weight = $weight; $delivery_record->congenital_abnormalities = $congenital_abnormalities; $delivery_record->birth_order = $birth_order; $delivery_record->baby_comments = $baby_comments; $delivery_record->perinatal_death_notification = $perinetal_death_notification_form; $delivery_record->perinatal_audit_form = $perinetal_audit_form; $delivery_record->apgar_score_at_minute_1 = $apgar_score_at_minute_1; $delivery_record->apgar_score_at_minute_5 = $apgar_score_at_minute_5; $delivery_record->apgar_score_at_minute_10 = $apgar_score_at_minute_10; $delivery_record->age_established_spontaneous_reg_respiration = $age_established_spontaneous_reg_respiration; $delivery_record->resuscitation_airway = $resuscitation_airway; $delivery_record->resuscitation_suction = $resuscitation_suction; $delivery_record->advanced_resuscitation_ett = $advanced_resuscitation_ett; $delivery_record->advanced_resuscitation_ecm = $advanced_resuscitation_ecm; $delivery_record->advanced_resuscitation_drugs = $advanced_resuscitation_drugs; $delivery_record->IM_vitamin_k_given = $im_vitamin_k_given; $delivery_record->moved_to = $moved_to; $delivery_record->created_by = Auth::id(); $delivery_record->save(); /* start process of registering the baby in the patients table */ $children_ids_array = []; //loop the registration depending on the foetal number for ($i = 0; $i < $foetal_number; $i++) { $fname = 'Baby of'; $lname = $parent_record->first_name . ' ' . $parent_record->last_name; $gender_array = $request->sex; $date_of_birth_array = $request->birthdate; $gender = isset($gender_array[$i]) ? $gender_array[$i] : 0; $birthdate_explode = explode("/", $date_of_birth_array[$i]); //if twins if ($foetal_number == 2 && $i == 0) { $lname = $lname . ' -twin 1'; $birthdate = $date_of_birth_array[1]; //$birthdate_explode[2] . $birthdate_explode[1] . $birthdate_explode[0]; } elseif ($foetal_number == 2 && $i == 1) { $birthdate = $date_of_birth_array[1]; //$birthdate_explode[2] . $birthdate_explode[1] . $birthdate_explode[0]; $lname = $lname . ' -twin 2'; } //if triplets if ($foetal_number == 3 && $i == 0) { $birthdate = $date_of_birth_array[1]; //$birthdate_explode[2] . $birthdate_explode[1] . $birthdate_explode[0]; $lname = $lname . ' -triplet 1'; } elseif ($foetal_number == 3 && $i == 1) { $birthdate = $date_of_birth_array[2]; //$birthdate_explode[2] . $birthdate_explode[1] . $birthdate_explode[0]; $lname = $lname . ' -triplet 2'; } elseif ($foetal_number == 3 && $i == 2) { $birthdate = isset($date_of_birth_array[3]) ? $date_of_birth_array[2] : ""; //$birthdate_explode[2] . $birthdate_explode[1] . $birthdate_explode[0]; $lname = $lname . ' -triplet 3'; } //if singleton if ($foetal_number == 1) { $birthdate = $date_of_birth_array[1]; //$birthdate_explode[2] . $birthdate_explode[1] . $birthdate_explode[0]; } $position = ''; $department = ''; $age = 0; $agemonths = 0; $district = $parent_record->district_id; $county_id = $parent_record->county_id; $parish = $parent_record->parish_id; $subcounty = $parent_record->subcounty_id; $village = $parent_record->village_id; $maritalstatus = 1; $occupation = 0; $nextkin = $parent_record->first_name . ' ' . $parent_record->last_name; $nextrelation = 4; //'Mother'; $national_id = ''; $mobilenumber = $parent_record->phone; $mobileowner = $parent_record->phone_owner; $patient_category = $parent_record->category_id; $chairman_name = $parent_record->lc_one; $any_contact = $parent_record->hospital_contact; $religion = $parent_record->religion_id; $staff_id = Auth::id(); $language = $parent_record->language; $baby_details = new Patient; $baby_details->first_name = $fname; $baby_details->last_name = $lname; $baby_details->date_of_birth = (is_null($birthdate) || $birthdate == "") ? Carbon::now() : Carbon::createFromFormat('d/m/Y', $birthdate)->toDateString(); $baby_details->district_id = $district; $baby_details->parish_id = $parish; $baby_details->subcounty_id = $subcounty; $baby_details->village_id = $village; $baby_details->gender = $gender; $baby_details->marital_status = $maritalstatus; $baby_details->occupation_id = $occupation; $baby_details->next_of_Kin = $nextkin; $baby_details->next_of_kin_relationship = $nextrelation; $baby_details->phone = $mobilenumber; $baby_details->phone_owner = $mobileowner; $baby_details->category_id = $patient_category; $baby_details->lc_one = $chairman_name; $baby_details->hospital_contact = $any_contact; //$baby_details->national_id = $national_id; $baby_details->religion_id = $religion; $baby_details->language = $language; $baby_details->parent_id = $parent_record->id; if ($baby_details->save()) { $prefix = DB::table('hospital_information')->where('id', 1)->value('patient_number_abbr'); $new_id = quadLimit($baby_details->id); $patient_number = $prefix . "-" . $new_id; DB::table('patients')->where('id', $new_id)->update(['number' => $patient_number]); // Updating the patient number $children_ids_array[] = $baby_details->id; /* ======= start baby admission ========== */ $new_baby_episode = new PatientEpisode; $new_baby_episode->patient_id = $baby_details->id; $new_baby_episode->clinic_id = get_default_hospital_clinic(); $new_baby_episode->created_by = Auth::id(); $new_baby_episode->updated_by = Auth::id(); if ($new_baby_episode->save()) { $new_baby_inpatient = new InpatientInfo; $new_baby_inpatient->patient_id = $baby_details->id; $new_baby_inpatient->episode_id = $new_baby_episode->id; $new_baby_inpatient->admitted_on = $baby_details->date_of_birth; $maternity_ward_id = get_name("maternity", "slug", "id", "wards"); $new_baby_inpatient->ward_id = isset($request->moved_to[$i]) ? $request->moved_to[$i] : $maternity_ward_id; $new_baby_inpatient->created_by = Auth::id(); $new_baby_inpatient->created_at = Carbon::now(); $new_baby_inpatient->save(); flash($baby_details->first_name . " " . $baby_details->last_name . "(" . $baby_details->number . ") has been admitted in " . get_name($new_baby_inpatient->ward_id, "id", "name", "wards"))->success(); } /* ======= end baby admission========== */ } } /* update the parent record with the new children_ids */ $update_parent_record = Patient::find($parent_record->id); /* ideally shd just append on whetever string values that have been found in the children_id column */ $exisiting_children_ids_array = explode(',', $update_parent_record->children_id); $merge_old_children_ids_with_new = array_merge($exisiting_children_ids_array, $children_ids_array); $update_parent_record->children_id = implode(',', $merge_old_children_ids_with_new); $update_parent_record->update(); /* end baby registration process in the demographics table */ /* Insert into the audit trail table when worked on*/ flash('New delivery record has been added')->success(); return redirect('patient_episodes'); } /** * Display the specified resource. * * @param int $id * @return \Illuminate\Http\Response */ public function show($id) { } /** * Show the form for editing the maternity inpatient sheet. * * @param int $id * @return \Illuminate\Http\Response */ // edit inpatient admission details maternity public function edit_inpatient() { // session to pick where user is from // patient episodes or // /wards/select Session::put('previous_url', URL::previous()); $episode_id = session()->get('episode_id'); $patient_episode_details = PatientEpisode::find($episode_id); $diagnoses_patient = DB::table('diagnoses')->orderBy('name', 'asc')->pluck("name", "id"); $patient_id = $patient_episode_details->patient_id; $patient = Patient::find($patient_id); // fetch existing data from maternity inpatient and related tables $existing_maternity_inpatient_data = MaternityInpatient::where(['patient_id' => $patient_id, 'episode_id' => $episode_id])->first(); $existing_maternity_delivery_plan = MaternityDeliveryPlan::where(['patient_id' => $patient_id, 'episode_id' => $episode_id])->first(); $existing_maternity_mother_history = MaternityMotherHistory::where(['patient_id' => $patient_id, 'episode_id' => $episode_id])->first(); $existing_maternity_pelvic_examination_and_assessement = PelvicExaminationAndAssessment::where(['patient_id' => $patient_id, 'episode_id' => $episode_id])->first(); $existing_uterus_operations = OtherFacilityUterusOperation::where(['patient_id' => $patient_id, 'episode_id' => $episode_id])->get(); $existing_other_facility_operations = OtherFacilityOtherOperation::where(['patient_id' => $patient_id, 'episode_id' => $episode_id])->get(); $existing_blood_transfusion = AnteNatalClinicBloodTransfusion::where(['patient_id' => $patient_id, 'episode_id' => $episode_id])->first(); $anc_blood_transfusion = AnteNatalClinicBloodTransfusion::where(['patient_id' => $patient_id, 'episode_id' => $episode_id])->get(); $anc_blood_transfusion_details = AnteNatalClinicBloodTransfusion::where([['patient_id', $patient_id], ['episode_id', $episode_id]])->latest()->get(); $obstetric_history_details = ObstetricHistory::where(['patient_id' => $patient_id, 'episode_id' => $episode_id])->orderBy('obstetric_date', 'desc')->get(); // fetch patient surgeries $patient_surgeries = Surgery::leftJoin('users', 'surgeries.surgeon', '=', 'users.id') ->leftJoin('procedures', 'surgeries.procedure_id', '=', 'procedures.id') ->where('patient_id', $patient_id) ->get(['procedures.name as procedure_name', 'date_surgery_completed', 'users.first_name', 'users.last_name', 'primary_diagnosis', 'other_diagnoses']); // fetch patient consultations $patient_consultations = Consultation::leftJoin('users', 'consultations.created_by', '=', 'users.id') ->leftJoin('diagnoses', 'consultations.primary_diagnosis', '=', 'diagnoses.id') ->leftJoin('wards', 'consultations.ward_id', '=', 'wards.id') ->leftJoin('outcomes', 'consultations.outcome_id', '=', 'outcomes.id') ->where(['patient_id' => $patient_id]) ->get([ 'admitted_on', 'wards.name as ward', 'diagnoses.name as primary_diagnosis', 'other_diagnoses', 'users.first_name', 'users.last_name', 'consultations.created_at', 'outcomes.name as outcome', ]); // fetch previous consultations for patient $previous_consultation_inpatient_info = InpatientInfo::leftJoin('diagnoses', 'inpatient_info.primary_diagnosis', '=', 'diagnoses.id') ->leftJoin('users', 'inpatient_info.discharged_by', '=', 'users.id') ->leftJoin('wards', 'inpatient_info.ward_id', '=', 'wards.id') ->leftJoin('triage', 'inpatient_info.episode_id', '=', 'triage.episode_id') ->leftJoin('consultations', 'inpatient_info.episode_id', '=', 'consultations.episode_id') ->leftJoin('ordered_investigations', 'inpatient_info.episode_id', '=', 'ordered_investigations.episode_id') ->leftJoin('ward_treatments', 'inpatient_info.episode_id', '=', 'ward_treatments.episode_id') ->leftJoin('outcomes', 'inpatient_info.outcome_id', '=', 'outcomes.id') ->where([['inpatient_info.patient_id', $patient_id], ['inpatient_info.episode_id', '!=', $episode_id]]) ->where('inpatient_info.created_at', '<', $patient_episode_details->created_at) ->latest('inpatient_info.created_at') ->get( [ 'diagnoses.name as primary_diagnosis', 'inpatient_info.other_diagnoses as other_diagnoses', 'users.first_name as first_name', 'consultations.created_at as consultation_date', 'inpatient_info.created_at as inpatient_info_date', 'diagnoses.name as primary_diagnosis', 'inpatient_info.other_diagnoses', 'outcomes.name as outcome', 'inpatient_info.episode_id', 'inpatient_info.admitted_on', 'inpatient_info.discharged_on', 'users.first_name as first_name', 'users.last_name as last_name', 'wards.name as ward', 'triage.observations', 'triage.symptoms as triage_symptoms', 'triage.symptom_duration as triage_symptom_duration', 'consultations.symptoms as consultation_symptoms', 'consultations.symptom_duration as consultation_symptom_duration', DB::raw("CONCAT(triage.symptoms, '', consultations.symptoms) as symptoms"), DB::raw("CONCAT(triage.symptom_duration, ', ', consultations.symptom_duration) as symptom_duration"), ] )->take(5); $current_episode_triage_symptoms = InpatientInfo::leftJoin('diagnoses', 'inpatient_info.primary_diagnosis', '=', 'diagnoses.id') ->leftJoin('users', 'inpatient_info.discharged_by', '=', 'users.id') ->leftJoin('wards', 'inpatient_info.ward_id', '=', 'wards.id') ->leftJoin('triage', 'inpatient_info.episode_id', '=', 'triage.episode_id') ->leftJoin('consultations', 'inpatient_info.episode_id', '=', 'consultations.episode_id') ->leftJoin('ordered_investigations', 'inpatient_info.episode_id', '=', 'ordered_investigations.episode_id') ->leftJoin('ward_treatments', 'inpatient_info.episode_id', '=', 'ward_treatments.episode_id') ->leftJoin('outcomes', 'inpatient_info.outcome_id', '=', 'outcomes.id') ->where([['inpatient_info.patient_id', $patient_id], ['inpatient_info.episode_id', '=', $episode_id]])->get( [ 'diagnoses.name as primary_diagnosis', 'inpatient_info.other_diagnoses as other_diagnoses', 'users.first_name as first_name', 'diagnoses.name as primary_diagnosis', 'inpatient_info.other_diagnoses', 'outcomes.name as outcome', 'inpatient_info.episode_id', 'inpatient_info.admitted_on', 'inpatient_info.discharged_on', 'users.first_name as first_name', 'users.last_name as last_name', 'wards.name as ward', 'triage.observations', 'triage.symptoms as triage_symptoms', 'triage.symptom_duration as triage_symptom_duration', 'consultations.symptoms as consultation_symptoms', 'consultations.symptom_duration as consultation_symptom_duration', DB::raw("CONCAT(triage.symptoms, ', ', consultations.symptoms) as symptoms"), DB::raw("CONCAT(triage.symptom_duration, ', ', consultations.symptom_duration) as symptom_duration"), ] )->take(5); $categories = DB::table('patient_categories')->where('available', 1)->pluck("name", "id"); $marital_statuses = DB::table('marital_statuses')->pluck("name", "id"); $diagnoses = DB::table('diagnoses')->where('available', 1)->orderBy('name', 'asc')->pluck("name", "id")->prepend('- select -', ''); $relationships = DB::table('family_relations')->pluck('name', 'id'); $occupations = DB::table('occupations')->pluck('name', 'id'); $patient_categories = DB::table('patient_categories')->where('available', 1)->pluck('name', 'id'); $drug_categories = DB::table('drug_categories')->get(); $documents = PatientDocument::where('patient_id', $patient_id)->orderBy('created_at', 'desc')->get(); //allergies and alerts $known_patient_allergies = Allergy::where('patient_id', $patient_id)->orderBy('created_at', 'desc')->take(2)->get(); $known_patient_alerts = Alert::where('patient_id', $patient_id)->orderBy('created_at', 'desc')->take(2)->get(); $drug_categories_array = DB::table('drug_categories')->pluck('name', 'id'); $consultation_id = get_name($episode_id, "id", "consultation_id", "patient_episodes"); $triage_id = get_name($episode_id, "id", "triage_id", "patient_episodes"); $triage = Triage::find($triage_id); //this maybe null since one may be admitted straight away $anc_registration = AnteNatalClinicRegistration::where(['patient_id' => $patient_id])->orderBy('id', 'desc')->first(); $emergency_signs = EmergencySign::where(['patient_id' => $patient_id, 'triage_id' => $triage_id, 'episode_id' => $episode_id])->get(); $patient_documents = PatientDocument::where(['patient_id' => $patient_id])->get(); $diagnosis = Diagnosis::where('available', 1)->orderby('name', 'asc')->get(); $diagnoses_all = DB::table('diagnoses')->whereNull('deleted_at')->select('id', 'prompts', 'reference_areas', 'reference_names')->get(); $obstetric_history = ObstetricHistory::where(['patient_id' => $patient_id])->orderBy('obstetric_date', 'desc')->get(); $blood_groups = DB::table('blood_groups')->orderBy('name')->pluck('name', 'id')->prepend('- select -', ''); $referrals = DB::table('referral_hospitals')->whereNull('deleted_at')->orderBy('name')->pluck('name', 'id')->prepend('- select -', ''); $accuracies = DB::table('ante_natal_clinic_accuracies')->orderBy('name')->pluck('name', 'id')->prepend('- select -', ''); $anc_outcomes = DB::table('ante_natal_clinic_outcomes')->orderBy('name')->pluck('name', 'id')->prepend('- select -', ''); $hiv_statuses = ['' => '-- Select --', '0' => 'Negative', '1' => 'Positive', '3' => 'Unknown']; $maternity_progress = DB::table('maternity_progress')->orderBy('name')->pluck('name', 'id')->prepend('- select -', ''); $family_planning_methods = FamilyPlanningMethod::orderBy('name', 'asc')->get(); $family_planning_methods_data = FamilyPlanningMethod::all(); $caesarian_sections = CaesarianSection::orderBy('name', 'asc')->pluck("name", "id")->prepend('- Select -', ''); $uterus_operations = UterusOperation::orderBy('name', 'asc')->get(); $uterus_operations = UterusOperation::orderBy('name', 'asc')->pluck("name", "id")->prepend('- Select -', ''); $gender_based_violence = GenderViolence::orderBy('name', 'asc')->pluck("name", "id"); // prep the inpatient investigation arrays and counters $opd_investigations = []; $ward_investigations = []; $symptoms = Symptom::pluck("name", "id"); // 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) { $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]; } else { $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]; } } } else { for ($i = 0; $i < count($inpatient_status); $i++) { if ($investigation_per_valid[$i] == 1) { // this investigation is authenticated if ($inpatient_status[$i] == 0) { $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]; } else { $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]; } } else { if ($inpatient_status[$i] == 0) { $result = Investigation::where('id', $investigation_ids[$i])->first(); $opd_investigations['name'][] = $result->name; $opd_investigations['value'][] = "Pending"; $opd_investigations['comment'][] = "Pending"; } else { $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) { $result = Investigation::where('id', $investigation_ids[$i])->first(); $opd_investigations['name'][] = $result->name; $opd_investigations['value'][] = "Pending"; $opd_investigations['comment'][] = "Pending"; } else { $result = Investigation::where('id', $investigation_ids[$i])->first(); $ward_investigations['name'][] = $result->name; $ward_investigations['value'][] = "Pending"; $ward_investigations['comment'][] = "Pending"; } } } } // previous consultations if (session()->get('consultation_with_notes') == 1) { $consultation_with_notes = true; } else { $consultation_with_notes = false; } $patient_episodes = DB::table('patient_episodes')->where('patient_id', $patient_id)->whereNotIn('id', [$episode_id])->get(); $episode = PatientEpisode::where('id', $episode_id)->first(); $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( 'maternity::maternity.edit_admission_details', compact( 'anc_blood_transfusion_details', 'existing_maternity_inpatient_data', 'existing_maternity_delivery_plan', 'existing_maternity_pelvic_examination_and_assessement', 'existing_uterus_operations', 'existing_other_facility_operations', 'diagnoses_all', 'current_episode_triage_symptoms', 'patient_episodes', 'past_episodes_info', 'episode', 'consultation_with_notes', 'existing_maternity_mother_history', 'existing_blood_transfusion', 'previous_consultation_inpatient_info', 'patient_id', 'episode_id', 'patient', 'categories', 'patient_surgeries', 'patient_consultations', 'marital_statuses', 'diagnoses', 'diagnoses_patient', 'relationships', 'occupations', 'drug_categories', 'documents', 'drug_categories_array', 'known_patient_alerts', 'known_patient_allergies', 'consultation_id', 'triage_id', 'triage', 'anc_registration', 'emergency_signs', 'patient_documents', 'diagnosis', 'obstetric_history', 'anc_blood_transfusion', 'blood_groups', 'referrals', 'accuracies', 'anc_outcomes', 'hiv_statuses', 'maternity_progress', 'ward_investigations', 'opd_investigations', 'symptoms', 'obstetric_history_details', 'family_planning_methods', 'caesarian_sections', 'uterus_operations', 'gender_based_violence' ) ); } /** * Update the specified resource in storage. * * @param \Illuminate\Http\Request $request * @param int $id * @return \Illuminate\Http\Response */ public function calculate_weeks_of_amenorrhoea_from_lmp(Request $request) { $lmp_date = Carbon::createFromFormat('d/m/Y', $request->lmp_date); $now = Carbon::now(); $days = $lmp_date->diffInDays($now); $weeks = floor($days / 7); $dayRemainder = $days % 7; $weeks_of_amenorrhoea = $weeks . '' . $dayRemainder . ''; return response()->json($weeks_of_amenorrhoea); } public function calculate_edd_from_lmp(Request $request) { $lmp_date = $request->lmp_date; $lmp_date = Carbon::createFromFormat('d/m/Y', $request->lmp_date); $edd = $lmp_date->addDays(280); $edd = $edd->toDateString(); $date = date("d/m/Y", strtotime($edd)); return response()->json($date); } public function update(Request $request, $id) { //transfusion_date_array $maternity_inpatient = MaternityInpatient::findOrFail($id); //start database transaction DB::transaction(function () use ($request, $maternity_inpatient) { $episode_id = session()->get('episode_id'); $patient_episode_details = PatientEpisode::find($episode_id); $patient_id = $patient_episode_details->patient_id; $patient = Patient::find($patient_id); $maternity_inpatient->primary_diagnosis = $request->primary_diagnosis; $maternity_inpatient->other_diagnoses = (!empty($request->other_diagnosis[0])) ? serialize($request->other_diagnosis) : null; $maternity_inpatient->patient_id = $patient_id; $maternity_inpatient->episode_id = $episode_id; $maternity_inpatient->gravida = $request->gravida; $maternity_inpatient->para = $request->para; $maternity_inpatient->abortion = $request->abortion; $maternity_inpatient->ectopic_pregnancies = $request->ectopic_pregnancies; $maternity_inpatient->postpartum = $request->postpartum; $maternity_inpatient->previous_pph = $request->previous_pph; $maternity_inpatient->previous_pph_details = $request->pph_details; $maternity_inpatient->previous_scar = $request->previous_scar; $maternity_inpatient->previous_scar_number = $request->scar_number; $maternity_inpatient->previous_scar_indication = $request->scar_indication; $maternity_inpatient->other_comments_pph = $request->other_comments_pph; $maternity_inpatient->lmp = isset($request->lmp) ? Carbon::createFromFormat('d/m/Y', $request->lmp)->toDateString() : null; $maternity_inpatient->accuracy = $request->accuracy; $maternity_inpatient->edd = null; if (isset($request->edd) && !empty($request->edd)) { try { $eddDate = Carbon::createFromFormat('d/m/Y', $request->edd); $maternity_inpatient->edd = $eddDate->toDateString(); } catch (\Exception $e) { // Handle the exception if the date format is invalid $maternity_inpatient->edd = null; } } $maternity_inpatient->referral_from = $request->refferal; $maternity_inpatient->progress = $request->progress; $maternity_inpatient->born_before_arrival = $request->born_before_arrival; $maternity_inpatient->vdrl_location = $request->vdrl_location; $maternity_inpatient->vdrl_date = !is_null($request->vdrl_date) ? Carbon::createFromFormat('d/m/Y', $request->vdrl_date)->toDateString() : null; $maternity_inpatient->vdrl_result = $request->vdrl_result; $maternity_inpatient->hiv_location = $request->hiv_location; $maternity_inpatient->hiv_date = !is_null($request->hiv_date) ? Carbon::createFromFormat('d/m/Y', $request->hiv_date)->toDateString() : null; $maternity_inpatient->hiv_result_usaid = $request->hiv_result; $maternity_inpatient->scan_edd = !is_null($request->scan_edd) ? Carbon::createFromFormat('d/m/Y', $request->scan_edd)->toDateString() : null; $maternity_inpatient->gestation_from_scan = $request->gestation_from_scan; $maternity_inpatient->history_of_fits = $request->history_of_fits; $maternity_inpatient->history_of_aph = $request->history_of_aph; $maternity_inpatient->aph_details = $request->aph_details; $maternity_inpatient->fits_details = $request->fits_details; $maternity_inpatient->other_comments = $request->other_comments; $maternity_inpatient->iufd = $request->iufd; $maternity_inpatient->weeks_of_amenorrhoea = $request->input('weeks_of_amenorrhoea'); $maternity_inpatient->delivery_recomendation = $request->delivery_recomendation; $maternity_inpatient->pregnancy_complications = implode(',', $request->pregnancy_complications ?? []); $maternity_inpatient->other_pregnancy_complications = $request->other_pregnancy_complications; $maternity_inpatient->physical_examination = implode(',', $request->physical_examination ?? []); $maternity_inpatient->heart_physical_examination_details = $request->heart_physical_examination_details; $maternity_inpatient->breasts_physical_examination_details = $request->breasts_physical_examination_details; $maternity_inpatient->legs_physical_examination_details = $request->legs_physical_examination_details; $maternity_inpatient->lungs_physical_examination_details = $request->lungs_physical_examination_details; $maternity_inpatient->teeth_physical_examination_details = $request->teeth_physical_examination_details; $maternity_inpatient->other_physical_examinations = $request->other_physical_examinations; $maternity_inpatient->other_obstetric_risk_factors = $request->other_obstetric_risk_factors; $maternity_inpatient->current_acute_problems = isset($request->current_acute_problems) ? implode(',', $request->current_acute_problems) : ''; $maternity_inpatient->obstetric_risk_factors = implode(',', $request->obstetric_risk_factors ?? []); $maternity_inpatient->blood_transfusion_available = isset($request->blood_transfusion_available) ? implode(',', $request->blood_transfusion_available) : ''; $maternity_inpatient->fractures = isset($request->fractures) ? implode(',', $request->fractures) : ''; $maternity_inpatient->blood_transfusion_details = $request->blood_transfusion_details; $maternity_inpatient->pelvis_fracture_date = !is_null($request->pelvis_fracture_date) ? Carbon::createFromFormat('d/m/Y', $request->pelvis_fracture_date)->toDateString() : null; $maternity_inpatient->pelvis_fracture_details = $request->pelvis_fracture_details; $maternity_inpatient->spine_fracture_date = !is_null($request->spine_fracture_date) ? Carbon::createFromFormat('d/m/Y', $request->spine_fracture_date)->toDateString() : null; $maternity_inpatient->spine_fracture_details = $request->spine_fracture_details; $maternity_inpatient->femur_fracture_date = !is_null($request->femur_fracture_date) ? Carbon::createFromFormat('d/m/Y', $request->femur_fracture_date)->toDateString() : null; $maternity_inpatient->femur_fracture_details = $request->femur_fracture_details; $maternity_inpatient->other_fracture_details = $request->other_fracture_details; $maternity_inpatient->created_by = auth()->user()->id; if ($request->get('submit-btn') == 'submit_maternity_admission') { // save and complete $maternity_inpatient->completed = 1; $maternity_inpatient->save(); } else { // save draft $maternity_inpatient->completed = 0; $maternity_inpatient->save(); } $clinic_id = get_name('ante_natal', 'slug', 'id', 'clinics'); //get the id for antenatal clinic from clinics table $maternity_clinic_id = get_name('MATERNITY', 'name', 'id', 'wards'); //get maternity ward id // store past obstetric history data with child data for ($k = 1; $k <= $request->pregnancy_number; $k++) { $pregnancy = 'pregnancy_' . $k; $obs_date = $pregnancy . '_obstetric_date'; $gestation = $pregnancy . '_gestation'; $outcome = $pregnancy . '_obstetric_outcome'; $abortion_outcome = $pregnancy . '_abortion_outcome'; $stillbirth_type = $pregnancy . '_stillbirth_type'; $delivery_type = $pregnancy . '_delivery_type'; $classification = $pregnancy . '_classification'; $puerperium = $pregnancy . '_puerperium'; $pregnancy_complication = $pregnancy . '_pregnancy_complication'; $child_name = $pregnancy . '_child_name'; $child_gender = $pregnancy . '_child_gender'; $child_patient_number = $pregnancy . '_child_patient_number'; $child_birth_weight = $pregnancy . '_child_birth_weight'; $child_immunisation_status = $pregnancy . '_child_immunisation_status'; $child_health_condition = $pregnancy . '_child_health_condition'; $stored_pregnancy = $pregnancy . '_id'; $deleted_pregnancy = 'delete_' . $pregnancy . '_id'; $child_counter = !empty($request->$child_name[0]) ? count($request->$child_name) : 0; $children = []; if ($child_counter > 0) { for ($t = 0; $t < $child_counter; $t++) { $children[] = [ 'health_condition' => $request->$child_health_condition[$t], 'immunisation_status' => $request->$child_immunisation_status[$t], 'birth_weight' => $request->$child_birth_weight[$t], 'patient_number' => $request->$child_patient_number[$t], 'gender' => $request->$child_gender[$t], 'name' => $request->$child_name[$t] ]; } } if (!empty($request->$deleted_pregnancy)) { $delete_pregnancy = ObstetricHistory::find($request->$deleted_pregnancy); $delete_pregnancy->delete(); } elseif (!empty($request->$stored_pregnancy) && empty($request->$deleted_pregnancy)) { $update_obstetric_history = ObstetricHistory::find($request->$stored_pregnancy); $update_obstetric_history->patient_id = $patient_id; $update_obstetric_history->episode_id = $episode_id; $update_obstetric_history->obstetric_date = isset($request->$obs_date) ? Carbon::createFromFormat('d/m/Y', $request->$obs_date)->toDateString() : null; $update_obstetric_history->gestation = $request->$gestation; $update_obstetric_history->outcome = $request->$outcome; $update_obstetric_history->clinic_id = $clinic_id; $update_obstetric_history->abortion_outcome = $request->$abortion_outcome; $update_obstetric_history->stillbirth_type = $request->$stillbirth_type; $update_obstetric_history->delivery_type = $request->$delivery_type; $update_obstetric_history->classification = $request->$classification; $update_obstetric_history->puerperium = $request->$puerperium; $update_obstetric_history->pregnancy_complication = $request->$pregnancy_complication; $update_obstetric_history->children = !empty($children) ? json_encode($children) : null; $update_obstetric_history->updated_by = auth()->user()->id; $update_obstetric_history->save(); } else { $obstetric_history = new ObstetricHistory; $obstetric_history->patient_id = $patient_id; $obstetric_history->episode_id = $episode_id; $obstetric_history->obstetric_date = isset($request->$obs_date) ? Carbon::createFromFormat('d/m/Y', $request->$obs_date)->toDateString() : null; $obstetric_history->gestation = $request->$gestation; $obstetric_history->outcome = $request->$outcome; $obstetric_history->stillbirth_type = $request->$stillbirth_type; $obstetric_history->clinic_id = $clinic_id; $obstetric_history->abortion_outcome = $request->$abortion_outcome; $obstetric_history->delivery_type = $request->$delivery_type; $obstetric_history->classification = $request->$classification; $obstetric_history->puerperium = $request->$puerperium; $obstetric_history->pregnancy_complication = $request->$pregnancy_complication; $obstetric_history->children = !empty($children) ? json_encode($children) : null; $obstetric_history->created_by = auth()->user()->id; $obstetric_history->save(); } } // delivery plan // pick stored delivery plan id from request ( hidden form input : id) if (!empty($request->delivery_plan_id)) { $update_delivery_plan = MaternityDeliveryPlan::find($request->delivery_plan_id); $update_delivery_plan->patient_id = $patient_id; $update_delivery_plan->episode_id = $episode_id; $update_delivery_plan->person_you_live_with = $request->person_you_live_with; $update_delivery_plan->transport_means_to_facility = $request->transport_means_to_facility; $update_delivery_plan->person_to_accompany_you = $request->person_to_accompany_you; $update_delivery_plan->person_to_look_after_home = $request->person_to_look_after_home; $update_delivery_plan->mother_partner_screened_for = implode(',', $request->mother_partner_screened_for ?? []); $update_delivery_plan->family_planning_method_plan = $request->family_planning_method_plan; $update_delivery_plan->person_to_stay_at_facility = $request->person_to_stay_at_facility; $update_delivery_plan->delivery_method = $request->delivery_method; $update_delivery_plan->backup_delivery_method = $request->backup_delivery_method; $update_delivery_plan->after_birth_disposal = $request->after_birth_disposal; $update_delivery_plan->created_by = auth()->user()->id; $update_delivery_plan->save(); } else { $delivery_plan = new MaternityDeliveryPlan(); $delivery_plan->patient_id = $patient_id; $delivery_plan->episode_id = $episode_id; $delivery_plan->person_you_live_with = $request->person_you_live_with; $delivery_plan->transport_means_to_facility = $request->transport_means_to_facility; $delivery_plan->person_to_accompany_you = $request->person_to_accompany_you; $delivery_plan->person_to_look_after_home = $request->person_to_look_after_home; $delivery_plan->mother_partner_screened_for = implode(',', $request->mother_partner_screened_for ?? []); $delivery_plan->family_planning_method_plan = $request->family_planning_method_plan; $delivery_plan->person_to_stay_at_facility = $request->person_to_stay_at_facility; $delivery_plan->delivery_method = $request->delivery_method; $delivery_plan->backup_delivery_method = $request->backup_delivery_method; $delivery_plan->after_birth_disposal = $request->after_birth_disposal; $delivery_plan->created_by = auth()->user()->id; $delivery_plan->save(); } //Store Mother's History if (!empty($request->mother_obs_history_id)) { $maternity_mother_history = MaternityMotherHistory::find($request->mother_obs_history_id); $maternity_mother_history->updated_by = auth()->user()->id; } else { $maternity_mother_history = new MaternityMotherHistory(); $maternity_mother_history->created_by = auth()->user()->id; } // maternity mother history $maternity_mother_history->patient_id = $patient_id; $maternity_mother_history->episode_id = $episode_id; $maternity_mother_history->cycle_length = $request->cycle_length; $maternity_mother_history->menses_length = $request->menses_length; $maternity_mother_history->menses_amount = $request->menses_amount; $maternity_mother_history->family_planning_method = $request->family_planning_method; $maternity_mother_history->date_discontinued = isset($request->date_discontinued) ? Carbon::createFromFormat('d/m/Y', $request->date_discontinued)->toDateString() : null; $maternity_mother_history->why_stop_family_planning = $request->why_stop_family_planning; $maternity_mother_history->medical_presentations = implode(',', $request->medical_presentations ?? []); $maternity_mother_history->other_medical_presentations = $request->other_medical_presentations; $maternity_mother_history->sgbv_risk = implode(',', $request->sgbv_risk ?? []); $maternity_mother_history->other_sgbv_risk = $request->other_sgbv_risk; $maternity_mother_history->husband_health = $request->husband_health; $maternity_mother_history->history_of_aph = $request->history_of_aph; $maternity_mother_history->history_aph_details = $request->history_aph_details; $maternity_mother_history->history_of_fits = $request->history_of_fits; $maternity_mother_history->history_fit_details = $request->history_fit_details; $maternity_mother_history->other_medical_history_comment = $request->other_medical_history_comment; foreach ($request->uterus_operations_name as $key => $operation) { if (!empty($operation)) $uterine_operations[] = ['name' => $operation, 'date' => $request->uterus_operations_date[$key], 'facility_name' => $request->uterus_operations_facility_name[$key]]; } foreach ($request->other_operations_name as $key => $operation) { if (!empty($operation)) $other_surgeries[] = ['name' => $operation, 'date' => $request->other_operations_name_date[$key], 'facility_name' => $request->other_operations_name_facility_name[$key]]; } $maternity_mother_history->uterine_surgeries = !empty($uterine_operations) ? json_encode($uterine_operations) : null; $maternity_mother_history->other_surgeries = !empty($other_surgeries) ? json_encode($other_surgeries) : null; $maternity_mother_history->created_by = auth()->user()->id; $maternity_mother_history->save(); $blood_group = $request->blood_group; $transfusion_date_array = $request->transfusion_date; $no_of_units_array = $request->no_of_units; $transfusion_comment_array = $request->transfusion_comment; if (is_array($request->blood_group_transfusion_id)) { foreach ($request->blood_group_transfusion_id as $key => $value) { if (isset($request->blood_group_transfusion_id[$key])) { $anc_blood_transfusion = AnteNatalClinicBloodTransfusion::find($request->blood_group_transfusion_id[$key]); } else { // Create a new instance if ID doesn't exist $anc_blood_transfusion = new AnteNatalClinicBloodTransfusion(); } $anc_blood_transfusion->blood_group_id = $blood_group; $anc_blood_transfusion->patient_id = $patient_id; $anc_blood_transfusion->episode_id = $episode_id; $anc_blood_transfusion->transfusion_date = Carbon::createFromFormat('d/m/Y', $transfusion_date_array[$key])->toDateString(); $anc_blood_transfusion->number_of_units = $no_of_units_array[$key]; $anc_blood_transfusion->comments = $transfusion_comment_array[$key]; $anc_blood_transfusion->updated_by = auth()->user()->id; $anc_blood_transfusion->save(); } } else { // Log::error('blood_group_transfusion_id is not an array or is null.'); } PelvicExaminationAndAssessment::updateOrInsert( [ 'patient_id' => $patient_id, 'episode_id' => $episode_id, ], [ 'vulva' => $request->vulva, 'vagina' => $request->vagina, 'cervix' => $request->cervix, 'dilatation' => $request->dilatation, 'uterine_adnexa' => $request->uterine_adnexa, 'moniliasis' => $request->moniliasis, 'diagonal_conjugate' => round($request->diagonal_conjugate, 2), 'sacrum' => $request->sacrum, 'ischial_spinces' => $request->ischial_spinces, 'sub_public_angle' => $request->sub_public_angle, 'ischial_tuberosities' => $request->ischial_tuberosities, 'pelvic_adequate' => $request->pelvic_adequate, 'updated_at' => Carbon::now(), 'created_by' => auth()->user()->id, 'updated_by' => auth()->user()->id, ] ); }); // end database transaction // pick previoius_url //picked from /create $previous_url = Session::get('previous_url'); switch ($request->get('submit-btn')) { case 'save_maternity_admission': flash('Maternity Inpatient Sheet Saved successfully')->success(); // return redirect('patient_episodes'); if ($previous_url == url('/wards/select')) { return redirect('/wards/select'); } elseif ($previous_url == url('/patient_episodes')) { return redirect('patient_episodes'); } else { return redirect('patient_episodes'); } break; case 'submit_maternity_admission': flash('Maternity Inpatient Sheet Updated and Submitted successfully')->success(); if ($previous_url == url('/wards/select')) { return redirect('/wards/select'); } elseif ($previous_url == url('/patient_episodes')) { return redirect('patient_episodes'); } else { return redirect('patient_episodes'); } } } /** * Remove the specified resource from storage. * * @param int $id * @return \Illuminate\Http\Response */ public function destroy($id) { // } public function delete_anc_blood_transfusion_record(Request $request, $id) { $bloodTransfusion = AnteNatalClinicBloodTransfusion::find($id); if (!$bloodTransfusion) { // Handle if the record doesn't exist return response()->json(['error' => 'Blood transfusion record not found'], 404); } // Delete the record $bloodTransfusion->delete(); // Oreturn a response return response()->json(['success' => 'Blood transfusion record deleted successfully'], 200); } /* display delivery_record */ public function delivery_record_details() { /* display maternity delivery record details */ $episode_id = session()->get('episode_id'); $patient_episode_details = PatientEpisode::find($episode_id); $patient_id = $patient_episode_details->patient_id; $patient = Patient::find($patient_id); $delivery_record_details = MaternityDeliveryRecord::where(['patient_id' => $patient_id, 'episode_id' => $episode_id])->first(); $users = DB::table('users')->pluck('last_name', 'id'); $delivery_modes = DB::table('mode_of_delivery')->pluck('name', 'id'); $delivery_locations = DB::table('location_of_delivery')->pluck('name', 'id'); $babies = Patient::where(['parent_id' => $patient_id])->get(); //where to be changed to where(parent_id=>$patient_id) return view('maternity::maternity.delivery_record_details', compact('episode_id', 'patient_id', 'patient', 'delivery_record_details', 'users', 'delivery_modes', 'delivery_locations', 'babies')); } public function print_delivery_record_details(Request $request) { $delivery_record_details = MaternityDeliveryRecord::where(['patient_id' => $request->patient_id, 'episode_id' => $request->episode_id])->first(); $babies = Patient::where(['parent_id' => $request->patient_id])->get(); $users = unserialize($request->users); $delivery_locations = unserialize($request->delivery_locations); $delivery_modes = unserialize($request->delivery_modes); $patient_number = $request->patient_number; $episode_id = $request->episode_id; $pdf = SnappyPDF::loadView('maternity::maternity.print_delivery_record_details', compact('delivery_record_details', 'users', 'delivery_modes', 'delivery_locations', 'babies', 'patient_number', 'episode_id')) ->setOrientation('portrait') ->setOption('margin-bottom', 7) ->setOption('margin-top', 5) ->setOption('footer-html', '' . config('app.name') . ' - Printed On ' . date('Y-m-d') . ' By ' . auth()->user()->first_name . " " . auth()->user()->last_name . ''); return $pdf->inline(__('maternity.delivery_record') . date(" d-m-y h:ia") . '.pdf'); } /* display maternity admission details */ public function maternity_admission_details() { $episode_id = session()->get('episode_id'); $patient_episode_details = PatientEpisode::find($episode_id); $patient_id = $patient_episode_details->patient_id; $patient = Patient::find($patient_id); $maternity_admission_details = MaternityInpatient::where(['patient_id' => $patient_id, 'episode_id' => $episode_id])->first(); $delivery_plan_details = MaternityDeliveryPlan::where(['patient_id' => $patient_id, 'episode_id' => $episode_id])->first(); $maternity_mother_history_details = MaternityMotherHistory::where(['patient_id' => $patient_id, 'episode_id' => $episode_id])->first(); $anc_blood_transfusion_details = AnteNatalClinicBloodTransfusion::where(['patient_id' => $patient_id, 'episode_id' => $episode_id])->first(); $pelvic_examination_and_assessment_details = PelvicExaminationAndAssessment::where(['patient_id' => $patient_id, 'episode_id' => $episode_id])->first(); $obstetric_history = ObstetricHistory::where(['patient_id' => $patient_id, 'episode_id' => $episode_id])->first(); $obstetric_history_details = ObstetricHistory::where(['patient_id' => $patient_id, 'episode_id' => $episode_id])->orderBy('obstetric_date', 'desc')->get(); $anc_outcomes = DB::table('ante_natal_clinic_outcomes')->orderBy('name')->pluck('name', 'id')->prepend('- select -', ''); $blood_groups = DB::table('blood_groups')->orderBy('name')->pluck('name', 'id')->prepend('- select -', ''); $blood_transfusion = AnteNatalClinicBloodTransfusion::where(['patient_id' => $patient_id, 'episode_id' => $episode_id])->latest()->get(); $categories = DB::table('patient_categories')->where('available', 1)->pluck("name", "id"); $marital_statuses = DB::table('marital_statuses')->pluck("name", "id"); $diagnoses = DB::table('diagnoses')->where('available', 1)->orderBy('name', 'asc')->pluck("name", "id"); $relationships = DB::table('family_relations')->pluck('name', 'id'); $occupations = DB::table('occupations')->pluck('name', 'id'); $patient_categories = DB::table('patient_categories')->where('available', 1)->pluck('name', 'id'); $drug_categories = DB::table('drug_categories')->get(); $documents = PatientDocument::where('patient_id', $patient_id)->orderBy('created_at', 'desc')->get(); $referrals = DB::table('referral_hospitals')->whereNull('deleted_at')->orderBy('name')->pluck('name', 'id'); //pick single referal $maternity_progress = DB::table('maternity_progress')->orderBy('name')->pluck('name', 'id'); $accuracies = DB::table('ante_natal_clinic_accuracies')->orderBy('name')->pluck('name', 'id')->prepend('- select -', ''); return view('maternity::maternity.admission_details', compact('episode_id', 'patient_id', 'patient', 'maternity_admission_details', 'categories', 'marital_statuses', 'diagnoses', 'relationships', 'occupations', 'patient_categories', 'drug_categories', 'documents', 'obstetric_history', 'blood_transfusion', 'referrals', 'maternity_progress', 'delivery_plan_details', 'accuracies', 'maternity_mother_history_details', 'pelvic_examination_and_assessment_details', 'obstetric_history_details', 'anc_outcomes', 'blood_groups')); } public function print_maternity_admission_details_pdf($id) { $episode_id = session()->get('episode_id'); $patient_episode_details = PatientEpisode::find($episode_id); $patient_id = $patient_episode_details->patient_id; $patient = Patient::find($patient_id); $maternity_admission_details = MaternityInpatient::where(['patient_id' => $patient_id, 'episode_id' => $episode_id])->first(); $delivery_plan_details = MaternityDeliveryPlan::where(['patient_id' => $patient_id, 'episode_id' => $episode_id])->first(); $maternity_mother_history_details = MaternityMotherHistory::where(['patient_id' => $patient_id, 'episode_id' => $episode_id])->first(); $anc_blood_transfusion_details = AnteNatalClinicBloodTransfusion::where(['patient_id' => $patient_id, 'episode_id' => $episode_id])->first(); $pelvic_examination_and_assessment_details = PelvicExaminationAndAssessment::where(['patient_id' => $patient_id, 'episode_id' => $episode_id])->first(); $obstetric_history = ObstetricHistory::where(['patient_id' => $patient_id, 'episode_id' => $episode_id])->first(); $obstetric_history_details = ObstetricHistory::where(['patient_id' => $patient_id, 'episode_id' => $episode_id])->orderBy('obstetric_date', 'desc')->get(); $anc_outcomes = DB::table('ante_natal_clinic_outcomes')->orderBy('name')->pluck('name', 'id')->prepend('- select -', ''); $categories = DB::table('patient_categories')->where('available', 1)->pluck("name", "id"); $marital_statuses = DB::table('marital_statuses')->pluck("name", "id"); $diagnoses = DB::table('diagnoses')->where('available', 1)->orderBy('name', 'asc')->pluck("name", "id"); $relationships = DB::table('family_relations')->pluck('name', 'id'); $occupations = DB::table('occupations')->pluck('name', 'id'); $patient_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', $patient_id)->orderBy('created_at', 'desc')->get(); $blood_transfusion = AnteNatalClinicBloodTransfusion::where(['patient_id' => $patient_id, 'episode_id' => $episode_id])->first(); $referrals = DB::table('referral_hospitals')->whereNull('deleted_at')->orderBy('name')->pluck('name', 'id'); //pick single referal $maternity_progress = DB::table('maternity_progress')->orderBy('name')->pluck('name', 'id'); $accuracies = DB::table('ante_natal_clinic_accuracies')->orderBy('name')->pluck('name', 'id')->prepend('- select -', ''); // data object with print vars $ward_request_record = \Streamline\Models\WardItemRequest::find($id); $hospital_info = \Streamline\Models\HospitalInformation::find(1); $print_footer = (!is_null($hospital_info->print_footer)) ? '     ' . $hospital_info->print_footer . '' : ''; $data = [ 'maternity_admission_details' => $maternity_admission_details, 'hospitalInfo' => $hospital_info, 'obstetric_history_details' => $obstetric_history_details, 'delivery_plan_details' => $delivery_plan_details, 'maternity_mother_history_details' => $maternity_mother_history_details, ]; return view('maternity::maternity.print.print_maternity_admission_details_pdf', compact('episode_id', 'patient_id', 'patient', 'maternity_admission_details', 'categories', 'marital_statuses', 'diagnoses', 'relationships', 'occupations', 'patient_categories', 'drug_categories', 'documents', 'obstetric_history', 'blood_transfusion', 'referrals', 'maternity_progress', 'delivery_plan_details', 'accuracies', 'maternity_mother_history_details', 'pelvic_examination_and_assessment_details', 'obstetric_history_details', 'anc_outcomes', 'hospital_info')); // $pdf = SnappyPDF::loadView("maternity::maternity.print.print_maternity_admission_details_pdf", $data) // ->setOrientation('portrait') // ->setPaper('a4') // ->setOption('margin-bottom', 5) // ->setOption('margin-top', 5) // ->setOption('footer-html', '© ' . date('Y') . ' Stre@mline' . $print_footer); // return $pdf->inline('Maternity admission Details' . date(" d-m-y h:ia") . '.pdf'); } /* add new delivery location through bootstrap modal */ public function add_delivery_location(Request $request) { $location_of_delivery = new LocationOfDelivery; $location_of_delivery->name = $request->delivery_location_name; $location_of_delivery->created_by = Auth::id(); $location_of_delivery->save(); return $location_of_delivery->id; } /* add new ward */ public function add_new_ward(Request $request) { $new_ward = new Ward; $new_ward->name = $request->ward_name; $new_ward->created_by = Auth::id(); $new_ward->save(); return $new_ward->id; } public function edit_delivery_record($id) { $delivery_record = MaternityDeliveryRecord::withTrashed()->find($id); $patient_id = $delivery_record->patient_id; $episode_id = $delivery_record->episode_id; $patient_episode_details = PatientEpisode::find($episode_id); $patient_id = $patient_episode_details->patient_id; $patient = Patient::find($patient_id); $categories = DB::table('patient_categories')->where('available', 1)->pluck("name", "id"); $marital_statuses = DB::table('marital_statuses')->pluck("name", "id"); $diagnoses = DB::table('diagnoses')->where('available', 1)->orderBy('name', 'asc')->pluck("name", "id"); $relationships = DB::table('family_relations')->pluck('name', 'id'); $occupations = DB::table('occupations')->pluck('name', 'id'); $patient_categories = DB::table('patient_categories')->where('available', 1)->pluck('name', 'id'); $drug_categories = DB::table('drug_categories')->get(); $documents = PatientDocument::where('patient_id', $patient_id)->orderBy('created_at', 'desc')->get(); //allergies and alerts $known_patient_allergies = Allergy::where('patient_id', $patient_id)->orderBy('created_at', 'desc')->take(2)->get(); $known_patient_alerts = Alert::where('patient_id', $patient_id)->orderBy('created_at', 'desc')->take(2)->get(); $drug_categories_array = DB::table('drug_categories')->pluck('name', 'id'); /* SELECT User_Id, First_Name,Last_Name FROM users WHERE Active = 1 AND User_Group_Id in (7,37,39,42,47,59,60) ORDER BY First_Name ASC; */ $users = DB::table('users')->orderBy("first_name", "asc")->get()->toArray(); $allowed_users = DB::table('users')->orderBy('first_name')->pluck('first_name', 'id')->prepend('- select -', ''); $mode_of_delivery = DB::table('mode_of_delivery')->orderBy('name')->pluck('name', 'id')->prepend('- select -', ''); $location_of_delivery = DB::table('location_of_delivery')->orderBy('name')->pluck('name', 'id')->prepend('- select -', ''); $respiration_minutes = DB::table('spontaneous_regular_respiration_in_minutes')->pluck('minutes', 'id'); $wards = DB::table('wards')->where('available', 1)->whereNull('deleted_at')->orderBy('name')->pluck('name', 'id')->prepend('- select -', ''); /* select post natal ward */ return view('maternity::maternity.edit_delivery_record', compact('delivery_record', 'patient_id', 'episode_id', 'patient', 'categories', 'drug_categories_array', 'known_patient_alerts', 'known_patient_allergies', 'marital_statuses', 'diagnoses', 'relationships', 'occupations', 'patient_categories', 'drug_categories', 'documents', 'allowed_users', 'users', 'mode_of_delivery', 'location_of_delivery', 'respiration_minutes', 'wards', 'obstetric_history_details')); } public function update_delivery_record(Request $request, $id) { //inputs from the delivery section $patient_id = $request->patient_id; $episode_id = $request->episode_id; $patient_episode_details = PatientEpisode::find($episode_id); $patient_id = $patient_episode_details->patient_id; $parent_record = Patient::find($patient_id); $foetal_number = $request->foetal_number; $date_of_birth = implode(',', $request->birthdate); $delivery_time = implode(',', $request->deliveryTime); $duration1 = implode(',', $request->duration1); $duration2_hrs = implode(',', $request->duration2_hrs); $duration2_mins = implode(',', $request->duration2_mins); $baby_one_duration2 = $request->duration2_hrs[0] . ' and ' . $request->duration2_mins[0]; $baby_two_duration2 = $request->duration2_hrs[1] . ' and ' . $request->duration2_mins[1]; $baby_three_duration2 = $request->duration2_hrs[2] . ' and ' . $request->duration2_mins[2]; $duration2 = [$baby_one_duration2, $baby_two_duration2, $baby_three_duration2]; $duration2 = implode(',', $duration2); $baby_one_duration3 = $request->duration3_hrs[0] . ' and ' . $request->duration3_mins[0]; $baby_two_duration3 = $request->duration3_hrs[1] . ' and ' . $request->duration3_mins[1]; $baby_three_duration3 = $request->duration3_hrs[2] . ' and ' . $request->duration3_mins[2]; $duration3 = [$baby_one_duration3, $baby_two_duration3, $baby_three_duration3]; $duration3 = implode(',', $duration3); $delivered_by_cadre = implode(',', $request->deliveredByCadre); //1-staff,2-student $delivered_by_name = implode(',', $request->deliveredByName); //picks user IDs $supervised_by = implode(',', $request->supervisedBy); //picks user IDs $mode_of_delivery = implode(',', $request->modeOfDelivery); $indication_for_cs = implode(',', $request->indicationForCS); $location_of_delivery = implode(',', $request->locationOfDelivery); $delivery_comments = implode(',', $request->deliveryComments); $blood_loss = $request->bloodLoss; //not array $bloodloss_measurement = $request->bloodloss_measurement; //not array //inputs from the baby section $received_by = implode(',', $request->receivedBy); $gender = implode(',', $request->sex); //1=female 2=male 3=ambigous $condition = implode(',', $request->condition); $weight = implode(',', $request->weight); $birth_order = implode(',', $request->birth_order); $congenital_abnormalities1 = $request->congenital_abnormalities1; $congenital_abnormalities2 = $request->congenital_abnormalities2; $congenital_abnormalities3 = $request->congenital_abnormalities3; $congenital_abnormalities = [$congenital_abnormalities1, $congenital_abnormalities2, $congenital_abnormalities3]; $congenital_abnormalities = implode(',', $congenital_abnormalities); $baby_comments = implode(',', $request->babyComments); //if baby condition = fresh SB or mecarated SB $perinetal_death_notification_form1 = $request->perinetal_death_notification_form1; $perinetal_death_notification_form2 = $request->perinetal_death_notification_form2; $perinetal_death_notification_form3 = $request->perinetal_death_notification_form3; $perinetal_death_notification_form = [$perinetal_death_notification_form1, $perinetal_death_notification_form2, $perinetal_death_notification_form3]; $perinetal_death_notification_form = implode(',', $perinetal_death_notification_form); $perinetal_audit_form1 = $request->perinetal_audit_form1; $perinetal_audit_form2 = $request->perinetal_audit_form2; $perinetal_audit_form3 = $request->perinetal_audit_form3; $perinetal_audit_form = [$perinetal_audit_form3, $perinetal_audit_form2, $perinetal_audit_form1]; $perinetal_audit_form = implode(',', $perinetal_audit_form); //if baby condition = Alive $apgar_score_at_minute_1 = !is_null($request->apgar_score_at_minute_1) ? implode(',', $request->apgar_score_at_minute_1) : null; $apgar_score_at_minute_5 = !is_null($request->apgar_score_at_minute_5) ? implode(',', $request->apgar_score_at_minute_5) : null; $age_established_spontaneous_reg_respiration = !is_null($request->age_established_spontaneous_reg_respiration) ? implode(',', $request->age_established_spontaneous_reg_respiration) : null; $resuscitation_airway = !is_null($request->resuscitation_airway) ? implode(',', $request->resuscitation_airway) : null; $resuscitation_suction = !is_null($request->resuscitation_suction) ? implode(',', $request->resuscitation_suction) : null; $advanced_resuscitation = !is_null($request->advanced_resuscitation) ? implode(',', $request->advanced_resuscitation) : null; $advanced_resuscitation_ett = !is_null($request->advanced_resuscitation_ett) ? implode(',', $request->advanced_resuscitation_ett) : null; $advanced_resuscitation_ecm = !is_null($request->advanced_resuscitation_ecm) ? implode(',', $request->advanced_resuscitation_ecm) : null; $advanced_resuscitation_drugs1 = $request->advanced_resuscitation_drugs1; $advanced_resuscitation_drugs2 = $request->advanced_resuscitation_drugs2; $advanced_resuscitation_drugs3 = $request->advanced_resuscitation_drugs3; /* 1.IV dextrose 2.Adrenaline 3.Aminophylline */ $advanced_resuscitation_drugs = [$advanced_resuscitation_drugs1, $advanced_resuscitation_drugs2, $advanced_resuscitation_drugs3]; $advanced_resuscitation_drugs = !is_null($advanced_resuscitation_drugs) ? implode(',', $advanced_resuscitation_drugs) : null; $im_vitamin_k_given1 = $request->im_vitamin_k_given1; $im_vitamin_k_given2 = $request->im_vitamin_k_given2; $im_vitamin_k_given3 = $request->im_vitamin_k_given3; $im_vitamin_k_given = [$im_vitamin_k_given1, $im_vitamin_k_given2, $im_vitamin_k_given3]; $im_vitamin_k_given = !is_null($im_vitamin_k_given) ? implode(',', $im_vitamin_k_given) : null; $moved_to = !is_null($request->moved_to) ? implode(',', $request->moved_to) : null; //1=Post Natal 2=SCBU 3=Labour $created_at = Carbon::now(); $delivery_record = MaternityDeliveryRecord::findOrFail($id); $delivery_record->patient_id = $patient_id; $delivery_record->episode_id = $episode_id; $delivery_record->foetal_number = $foetal_number; $delivery_record->date_of_birth = $date_of_birth; $delivery_record->delivery_time = $delivery_time; $delivery_record->duration_1 = $duration1; $delivery_record->duration_2 = $duration2; $delivery_record->duration_3 = $duration3; $delivery_record->delivered_by_cadre = $delivered_by_cadre; $delivery_record->delivered_by_name = $delivered_by_name; $delivery_record->supervised_by = $supervised_by; $delivery_record->mode_of_delivery = $mode_of_delivery; $delivery_record->indication_for_cs = $indication_for_cs; $delivery_record->location_of_delivery = $location_of_delivery; $delivery_record->delivery_comments = $delivery_comments; $delivery_record->blood_loss = $blood_loss; $delivery_record->bloodloss_measurement = $bloodloss_measurement; $delivery_record->received_by = $received_by; $delivery_record->gender = $gender; $delivery_record->baby_condition = $condition; $delivery_record->weight = $weight; $delivery_record->congenital_abnormalities = $congenital_abnormalities; $delivery_record->birth_order = $birth_order; $delivery_record->baby_comments = $baby_comments; $delivery_record->perinatal_death_notification = $perinetal_death_notification_form; $delivery_record->perinatal_audit_form = $perinetal_audit_form; $delivery_record->apgar_score_at_minute_1 = $apgar_score_at_minute_1; $delivery_record->apgar_score_at_minute_5 = $apgar_score_at_minute_5; $delivery_record->age_established_spontaneous_reg_respiration = $age_established_spontaneous_reg_respiration; $delivery_record->resuscitation_airway = $resuscitation_airway; $delivery_record->resuscitation_suction = $resuscitation_suction; $delivery_record->advanced_resuscitation_ett = $advanced_resuscitation_ett; $delivery_record->advanced_resuscitation_ecm = $advanced_resuscitation_ecm; $delivery_record->advanced_resuscitation_drugs = $advanced_resuscitation_drugs; $delivery_record->IM_vitamin_k_given = $im_vitamin_k_given; $delivery_record->moved_to = $moved_to; $delivery_record->created_by = Auth::id(); $delivery_record->save(); /* start process of registering the baby in the patients table */ $children_ids_array = []; //loop the registration depending on the foetal number for ($i = 0; $i < $foetal_number; $i++) { $fname = 'Baby of'; $lname = $parent_record->first_name . ' ' . $parent_record->last_name; $gender_array = clean($request->sex); $date_of_birth_array = $request->birthdate; $gender = isset($gender_array[$i]) ? $gender_array[$i] : 0; $birthdate_explode = explode("/", $date_of_birth_array[$i]); //if twins if ($foetal_number == 2 && $i == 0) { $lname = $lname . ' -twin 1'; $birthdate = $date_of_birth_array[1]; //$birthdate_explode[2] . $birthdate_explode[1] . $birthdate_explode[0]; } elseif ($foetal_number == 2 && $i == 1) { $birthdate = $date_of_birth_array[1]; //$birthdate_explode[2] . $birthdate_explode[1] . $birthdate_explode[0]; $lname = $lname . ' -twin 2'; } //if triplets if ($foetal_number == 3 && $i == 0) { $birthdate = $date_of_birth_array[1]; //$birthdate_explode[2] . $birthdate_explode[1] . $birthdate_explode[0]; $lname = $lname . ' -triplet 1'; } elseif ($foetal_number == 3 && $i == 1) { $birthdate = $date_of_birth_array[2]; //$birthdate_explode[2] . $birthdate_explode[1] . $birthdate_explode[0]; $lname = $lname . ' -triplet 2'; } elseif ($foetal_number == 3 && $i == 2) { $birthdate = isset($date_of_birth_array[3]) ? $date_of_birth_array[2] : ""; //$birthdate_explode[2] . $birthdate_explode[1] . $birthdate_explode[0]; $lname = $lname . ' -triplet 3'; } //if singleton if ($foetal_number == 1) { $birthdate = $date_of_birth_array[1]; //$birthdate_explode[2] . $birthdate_explode[1] . $birthdate_explode[0]; } $position = ''; $department = ''; $age = 0; $agemonths = 0; $district = $parent_record->district_id; $county_id = $parent_record->county_id; $parish = $parent_record->parish_id; $subcounty = $parent_record->subcounty_id; $village = $parent_record->village_id; $maritalstatus = 1; $occupation = 0; $nextkin = $parent_record->first_name . ' ' . $parent_record->last_name; $nextrelation = 4; //'Mother'; $national_id = ''; $mobilenumber = $parent_record->phone; $mobileowner = $parent_record->phone_owner; $patient_category = $parent_record->category_id; $chairman_name = $parent_record->lc_one; $any_contact = $parent_record->hospital_contact; $religion = $parent_record->religion_id; $staff_id = Auth::id(); $language = $parent_record->language; } /* Insert into the audit trail table when worked on*/ flash('Delivery record has been been updated')->info(); return redirect('patient_episodes'); } // create labur ward admission sheet public function create_labour_ward_admission_sheet() { $episode_id = session()->get('episode_id'); $patient_episode_details = PatientEpisode::find($episode_id); $diagnoses_patient = DB::table('diagnoses')->orderBy('name', 'asc')->pluck("name", "id"); $patient_id = $patient_episode_details->patient_id; $patient = Patient::find($patient_id); // fetch existing data from maternity inpatient and related tables $existing_maternity_inpatient_data = MaternityInpatient::where(['patient_id' => $patient_id, 'episode_id' => $episode_id])->first(); $latest_existing_maternity_inpatient_data = MaternityInpatient::where(['patient_id' => $patient_id])->latest()->first(); $existing_maternity_delivery_plan = MaternityDeliveryPlan::where(['patient_id' => $patient_id, 'episode_id' => $episode_id])->first(); $existing_maternity_mother_history = MaternityMotherHistory::where(['patient_id' => $patient_id, 'episode_id' => $episode_id])->first(); $latest_existing_maternity_mother_history = MaternityMotherHistory::where(['patient_id' => $patient_id])->latest()->first(); $existing_maternity_pelvic_examination_and_assessement = PelvicExaminationAndAssessment::where(['patient_id' => $patient_id, 'episode_id' => $episode_id])->first(); $existing_uterus_operations = OtherFacilityUterusOperation::where(['patient_id' => $patient_id, 'episode_id' => $episode_id])->get(); $existing_other_facility_operations = OtherFacilityOtherOperation::where(['patient_id' => $patient_id, 'episode_id' => $episode_id])->get(); $existing_blood_transfusion = AnteNatalClinicBloodTransfusion::where(['patient_id' => $patient_id, 'episode_id' => $episode_id])->first(); $anc_blood_transfusion = AnteNatalClinicBloodTransfusion::where(['patient_id' => $patient_id, 'episode_id' => $episode_id])->get(); $obstetric_history_details = ObstetricHistory::where(['patient_id' => $patient_id, 'episode_id' => $episode_id])->orderBy('obstetric_date', 'desc')->get(); $anc_registration = AnteNatalClinicRegistration::where(['patient_id' => $patient_id])->orderBy('id', 'desc')->first(); $latest_anc_registration = AnteNatalClinicRegistration::where(['patient_id' => $patient_id])->orderBy('id', 'desc')->latest()->first(); // fetch patient surgeries $patient_surgeries = Surgery::leftJoin('users', 'surgeries.surgeon', '=', 'users.id') ->leftJoin('procedures', 'surgeries.procedure_id', '=', 'procedures.id') ->where('patient_id', $patient_id) ->get(['procedures.name as procedure_name', 'date_surgery_completed', 'users.first_name', 'users.last_name', 'primary_diagnosis', 'other_diagnoses']); // fetch patient consultations $patient_consultations = Consultation::leftJoin('users', 'consultations.created_by', '=', 'users.id') ->leftJoin('diagnoses', 'consultations.primary_diagnosis', '=', 'diagnoses.id') ->leftJoin('wards', 'consultations.ward_id', '=', 'wards.id') ->leftJoin('outcomes', 'consultations.outcome_id', '=', 'outcomes.id') ->where(['patient_id' => $patient_id]) ->get([ 'admitted_on', 'wards.name as ward', 'diagnoses.name as primary_diagnosis', 'other_diagnoses', 'users.first_name', 'users.last_name', 'consultations.created_at', 'outcomes.name as outcome', ]); // fetch previous consultations for patient $previous_consultation_inpatient_info = InpatientInfo::leftJoin('diagnoses', 'inpatient_info.primary_diagnosis', '=', 'diagnoses.id') ->leftJoin('users', 'inpatient_info.discharged_by', '=', 'users.id') ->leftJoin('wards', 'inpatient_info.ward_id', '=', 'wards.id') ->leftJoin('triage', 'inpatient_info.episode_id', '=', 'triage.episode_id') ->leftJoin('consultations', 'inpatient_info.episode_id', '=', 'consultations.episode_id') ->leftJoin('ordered_investigations', 'inpatient_info.episode_id', '=', 'ordered_investigations.episode_id') ->leftJoin('ward_treatments', 'inpatient_info.episode_id', '=', 'ward_treatments.episode_id') ->leftJoin('outcomes', 'inpatient_info.outcome_id', '=', 'outcomes.id') ->where([['inpatient_info.patient_id', $patient_id], ['inpatient_info.episode_id', '!=', $episode_id]])->get( [ 'diagnoses.name as primary_diagnosis', 'inpatient_info.other_diagnoses as other_diagnoses', 'users.first_name as first_name', 'diagnoses.name as primary_diagnosis', 'inpatient_info.other_diagnoses', 'outcomes.name as outcome', 'inpatient_info.episode_id', 'inpatient_info.admitted_on', 'inpatient_info.discharged_on', 'users.first_name as first_name', 'users.last_name as last_name', 'wards.name as ward', 'triage.observations', 'triage.symptoms as triage_symptoms', 'triage.symptom_duration as triage_symptom_duration', 'consultations.symptoms as consultation_symptoms', 'consultations.symptom_duration as consultation_symptom_duration', DB::raw("CONCAT(triage.symptoms, ', ', consultations.symptoms) as symptoms"), DB::raw("CONCAT(triage.symptom_duration, ', ', consultations.symptom_duration) as symptom_duration"), ] )->take(5); $current_episode_triage_symptoms = InpatientInfo::leftJoin('diagnoses', 'inpatient_info.primary_diagnosis', '=', 'diagnoses.id') ->leftJoin('users', 'inpatient_info.discharged_by', '=', 'users.id') ->leftJoin('wards', 'inpatient_info.ward_id', '=', 'wards.id') ->leftJoin('triage', 'inpatient_info.episode_id', '=', 'triage.episode_id') ->leftJoin('consultations', 'inpatient_info.episode_id', '=', 'consultations.episode_id') ->leftJoin('ordered_investigations', 'inpatient_info.episode_id', '=', 'ordered_investigations.episode_id') ->leftJoin('ward_treatments', 'inpatient_info.episode_id', '=', 'ward_treatments.episode_id') ->leftJoin('outcomes', 'inpatient_info.outcome_id', '=', 'outcomes.id') ->where([['inpatient_info.patient_id', $patient_id], ['inpatient_info.episode_id', '=', $episode_id]])->get( [ 'diagnoses.name as primary_diagnosis', 'inpatient_info.other_diagnoses as other_diagnoses', 'users.first_name as first_name', 'diagnoses.name as primary_diagnosis', 'inpatient_info.other_diagnoses', 'outcomes.name as outcome', 'inpatient_info.episode_id', 'inpatient_info.admitted_on', 'inpatient_info.discharged_on', 'users.first_name as first_name', 'users.last_name as last_name', 'wards.name as ward', 'triage.observations', 'triage.symptoms as triage_symptoms', 'triage.symptom_duration as triage_symptom_duration', 'consultations.symptoms as consultation_symptoms', 'consultations.symptom_duration as consultation_symptom_duration', DB::raw("CONCAT(triage.symptoms, ', ', consultations.symptoms) as symptoms"), DB::raw("CONCAT(triage.symptom_duration, ', ', consultations.symptom_duration) as symptom_duration"), ] )->take(5); $categories = DB::table('patient_categories')->where('available', 1)->pluck("name", "id"); $marital_statuses = DB::table('marital_statuses')->pluck("name", "id"); $diagnoses = DB::table('diagnoses')->where('available', 1)->orderBy('name', 'asc')->pluck("name", "id")->prepend('- select -', ''); $relationships = DB::table('family_relations')->pluck('name', 'id'); $occupations = DB::table('occupations')->pluck('name', 'id'); $patient_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', $patient_id)->orderBy('created_at', 'desc')->get(); //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'); $consultation_id = get_name($episode_id, "id", "consultation_id", "patient_episodes"); $triage_id = get_name($episode_id, "id", "triage_id", "patient_episodes"); $triage = Triage::find($triage_id); //this maybe null since one may be admitted straight away $emergency_signs = EmergencySign::where(['patient_id' => $patient_id, 'triage_id' => $triage_id, 'episode_id' => $episode_id])->get(); $patient_documents = PatientDocument::where(['patient_id' => $patient_id])->get(); $diagnosis = Diagnosis::where('available', 1)->orderby('name', 'asc')->get(); $diagnoses_all = DB::table('diagnoses')->whereNull('deleted_at')->select('id', 'prompts', 'reference_areas', 'reference_names')->get(); $obstetric_history = ObstetricHistory::where(['patient_id' => $patient_id])->orderBy('obstetric_date', 'desc')->get(); $blood_groups = DB::table('blood_groups')->orderBy('name')->pluck('name', 'id')->prepend('- select -', ''); $referrals = DB::table('referral_hospitals')->whereNull('deleted_at')->orderBy('name')->pluck('name', 'id')->prepend('- select -', ''); $accuracies = DB::table('ante_natal_clinic_accuracies')->orderBy('name')->pluck('name', 'id')->prepend('- select -', ''); $anc_outcomes = DB::table('ante_natal_clinic_outcomes')->orderBy('name')->pluck('name', 'id')->prepend('- select -', ''); $hiv_statuses = ['' => '-- Select --', '0' => 'Negative', '1' => 'Positive', '3' => 'Unknown']; $maternity_progress = DB::table('maternity_progress')->orderBy('name')->pluck('name', 'id')->prepend('- select -', ''); $family_planning_methods = FamilyPlanningMethod::orderBy('name', 'asc')->get(); $family_planning_methods_data = FamilyPlanningMethod::all(); $caesarian_sections = CaesarianSection::orderBy('name', 'asc')->pluck("name", "id")->prepend('- Select -', ''); $uterus_operations = UterusOperation::orderBy('name', 'asc')->get(); $uterus_operations = UterusOperation::orderBy('name', 'asc')->pluck("name", "id")->prepend('- Select -', ''); // prep the inpatient investigation arrays and counters $opd_investigations = []; $ward_investigations = []; $symptoms = Symptom::pluck("name", "id"); // 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) { $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]; } else { $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]; } } } else { for ($i = 0; $i < count($inpatient_status); $i++) { if ($investigation_per_valid[$i] == 1) { // this investigation is authenticated if ($inpatient_status[$i] == 0) { $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]; } else { $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]; } } else { if ($inpatient_status[$i] == 0) { $result = Investigation::where('id', $investigation_ids[$i])->first(); $opd_investigations['name'][] = $result->name; $opd_investigations['value'][] = "Pending"; $opd_investigations['comment'][] = "Pending"; } else { $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) { $result = Investigation::where('id', $investigation_ids[$i])->first(); $opd_investigations['name'][] = $result->name; $opd_investigations['value'][] = "Pending"; $opd_investigations['comment'][] = "Pending"; } else { $result = Investigation::where('id', $investigation_ids[$i])->first(); $ward_investigations['name'][] = $result->name; $ward_investigations['value'][] = "Pending"; $ward_investigations['comment'][] = "Pending"; } } } } // previous consultations if (session()->get('consultation_with_notes') == 1) { $consultation_with_notes = true; } else { $consultation_with_notes = false; } $patient_episodes = DB::table('patient_episodes')->where('patient_id', $patient_id)->whereNotIn('id', [$episode_id])->get(); $episode = PatientEpisode::where('id', $episode_id)->first(); $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++; } } } // end previous consultations return view( 'maternity::labour_ward.labour_ward_admission_sheet', compact( 'existing_maternity_inpatient_data', 'existing_maternity_delivery_plan', 'existing_maternity_pelvic_examination_and_assessement', 'existing_uterus_operations', 'existing_other_facility_operations', 'diagnoses_all', 'current_episode_triage_symptoms', 'patient_episodes', 'patient_id', 'past_episodes_info', 'episode', 'consultation_with_notes', 'existing_maternity_mother_history', 'existing_blood_transfusion', 'previous_consultation_inpatient_info', 'latest_anc_registration', 'latest_existing_maternity_inpatient_data', 'latest_existing_maternity_mother_history', 'patient_id', 'episode_id', 'patient', 'categories', 'patient_surgeries', 'patient_consultations', 'marital_statuses', 'diagnoses', 'diagnoses_patient', 'relationships', 'occupations', 'drug_categories', 'documents', 'drug_categories_array', 'known_patient_alerts', 'known_patient_allergies', 'consultation_id', 'triage_id', 'triage', 'anc_registration', 'emergency_signs', 'patient_documents', 'diagnosis', 'obstetric_history', 'anc_blood_transfusion', 'blood_groups', 'referrals', 'accuracies', 'anc_outcomes', 'hiv_statuses', 'maternity_progress', 'ward_investigations', 'opd_investigations', 'symptoms', 'obstetric_history_details', 'family_planning_methods', 'caesarian_sections', 'uterus_operations', ) ); } // store labour ward admission sheet public function store_labour_ward_admission_sheet(Request $request) { $episode_id = session()->get('episode_id'); $patient_episode_details = PatientEpisode::find($episode_id); $patient_id = $patient_episode_details->patient_id; $labour_ward_admission = new LabourWardAdmission(); $labour_ward_admission->patient_id = $patient_id; $labour_ward_admission->episode_id = $episode_id; $labour_ward_admission->labour_onset = $request->labour_onset; $labour_ward_admission->active_labour_diagnosis_date = $request->active_labour_diagnosis_date; $labour_ward_admission->membranes_rapture_at = $request->membranes_rapture_at; $labour_ward_admission->gravida = $request->gravida; $labour_ward_admission->para = $request->para; $labour_ward_admission->abortions = $request->abortions; $labour_ward_admission->ectopic_pregnancies = $request->ectopic_pregnancies; $labour_ward_admission->post_partum = $request->post_partum; $labour_ward_admission->history_of_aph = $request->history_of_aph; $labour_ward_admission->history_of_fits = $request->history_of_fits; $labour_ward_admission->history_aph_details = $request->history_aph_details; $labour_ward_admission->history_fit_details = $request->history_fit_details; $labour_ward_admission->iufd = $request->iufd; $labour_ward_admission->born_before_arrival = $request->born_before_arrival; $labour_ward_admission->progress = $request->progress; $labour_ward_admission->other_labour_comments = $request->other_labour_comments; $labour_ward_admission->obstetric_risk_factors = json_encode($request->obstetric_risk_factors); $labour_ward_admission->other_obstetric_risk_factors = $request->other_obstetric_risk_factors; $labour_ward_admission->created_by = auth()->user()->id; //save_labour_ward_admission if ($request->get('submit-btn') == 'complete') { // save and complete $labour_ward_admission->complete = 1; $labour_ward_admission->save(); } else { // save draft $labour_ward_admission->complete = 0; $labour_ward_admission->save(); } // redirect based on button click switch ($request->get('submit-btn')): case 'complete': $url = '/patient_episodes'; break; case 'save_labour_ward_admission': $url = '/patient_episodes'; break; default: break; endswitch; flash("Labour ward admission successful")->success(); return redirect($url); } // labour ward admission sheet details public function labour_ward_admission_sheet_details() { $episode_id = session()->get('episode_id'); $patient_episode_details = PatientEpisode::find($episode_id); $patient_id = $patient_episode_details->patient_id; $patient = Patient::find($patient_id); $maternity_progress = DB::table('maternity_progress')->orderBy('name')->pluck('name', 'id')->prepend('- select -', ''); $labour_ward_admission_details = LabourWardAdmission::where(['patient_id' => $patient_id, 'episode_id' => $episode_id])->first(); return view( 'maternity::labour_ward.labour_ward_admission_details', compact( 'episode_id', 'patient', 'labour_ward_admission_details', 'maternity_progress' ) ); } // edit labour ward admission sheet public function edit_labour_ward_admission_sheet() { $episode_id = session()->get('episode_id'); $patient_episode_details = PatientEpisode::find($episode_id); $diagnoses_patient = DB::table('diagnoses')->orderBy('name', 'asc')->pluck("name", "id"); $patient_id = $patient_episode_details->patient_id; $patient = Patient::find($patient_id); $existing_labour_admission_data = LabourWardAdmission::where(['patient_id' => $patient_id, 'episode_id' => $episode_id])->first(); $latest_anc_registration = AnteNatalClinicRegistration::where(['patient_id' => $patient_id])->orderBy('id', 'desc')->latest()->first(); $latest_existing_maternity_inpatient_data = MaternityInpatient::where(['patient_id' => $patient_id, 'episode_id' => $episode_id])->latest()->first(); $maternity_progress = DB::table('maternity_progress')->orderBy('name')->pluck('name', 'id')->prepend('- select -', ''); $existing_maternity_inpatient_data = MaternityInpatient::where(['patient_id' => $patient_id, 'episode_id' => $episode_id])->first(); $existing_maternity_delivery_plan = MaternityDeliveryPlan::where(['patient_id' => $patient_id, 'episode_id' => $episode_id])->first(); $existing_maternity_mother_history = MaternityMotherHistory::where(['patient_id' => $patient_id, 'episode_id' => $episode_id])->first(); $existing_maternity_pelvic_examination_and_assessement = PelvicExaminationAndAssessment::where(['patient_id' => $patient_id, 'episode_id' => $episode_id])->first(); $anc_registration = AnteNatalClinicRegistration::where(['patient_id' => $patient_id])->orderBy('id', 'desc')->first(); $referrals = DB::table('referral_hospitals')->whereNull('deleted_at')->orderBy('name')->pluck('name', 'id')->prepend('- select -', ''); $patient_episodes = DB::table('patient_episodes')->where('patient_id', $patient_id)->whereNotIn('id', [$episode_id])->get(); $episode = PatientEpisode::where('id', $episode_id)->first(); return view( 'maternity::labour_ward.edit_labour_ward_admission_sheet', compact( 'existing_labour_admission_data', 'existing_maternity_inpatient_data', 'existing_maternity_delivery_plan', 'existing_maternity_pelvic_examination_and_assessement', 'patient_id', 'episode', 'existing_maternity_mother_history', 'episode_id', 'patient', 'anc_registration', 'referrals', 'latest_anc_registration', 'latest_existing_maternity_inpatient_data', 'maternity_progress' ) ); } // update labour ward admissino sheet public function updpate_labour_ward_admission_sheet(Request $request, $id) { $episode_id = session()->get('episode_id'); $patient_episode_details = PatientEpisode::find($episode_id); $patient_id = $patient_episode_details->patient_id; $labour_ward_admission = LabourWardAdmission::findOrFail($id); $labour_ward_admission->patient_id = $patient_id; $labour_ward_admission->episode_id = $episode_id; $labour_ward_admission->labour_onset = $request->labour_onset; $labour_ward_admission->active_labour_diagnosis_date = $request->active_labour_diagnosis_date; $labour_ward_admission->membranes_rapture_at = $request->membranes_rapture_at; $labour_ward_admission->gravida = $request->gravida; $labour_ward_admission->para = $request->para; $labour_ward_admission->abortions = $request->abortions; $labour_ward_admission->ectopic_pregnancies = $request->ectopic_pregnancies; $labour_ward_admission->post_partum = $request->post_partum; $labour_ward_admission->history_of_aph = $request->history_of_aph; $labour_ward_admission->history_of_fits = $request->history_of_fits; $labour_ward_admission->history_aph_details = $request->history_aph_details; $labour_ward_admission->history_fit_details = $request->history_fit_details; $labour_ward_admission->iufd = $request->iufd; $labour_ward_admission->born_before_arrival = $request->born_before_arrival; $labour_ward_admission->progress = $request->progress; $labour_ward_admission->other_labour_comments = $request->other_labour_comments; $labour_ward_admission->obstetric_risk_factors = json_encode($request->obstetric_risk_factors); $labour_ward_admission->other_obstetric_risk_factors = $request->other_obstetric_risk_factors; $labour_ward_admission->created_by = auth()->user()->id; //update_labour_ward_admission if ($request->get('submit-btn') == 'complete') { // update and complete $labour_ward_admission->complete = 1; $labour_ward_admission->save(); } else { // save draft $labour_ward_admission->complete = 0; $labour_ward_admission->save(); } // redirect based on button click switch ($request->get('submit-btn')): case 'complete': $url = '/patient_episodes'; break; case 'save_labour_ward_admission': $url = '/patient_episodes'; break; default: break; endswitch; flash("Labour ward admission successful")->success(); return redirect($url); } // print labour ward admission public function print_labour_admission_sheet_details($episode_id) { $episode_id = session()->get('episode_id'); $patient_episode_details = PatientEpisode::find($episode_id); $patient_id = $patient_episode_details->patient_id; $patient = Patient::find($patient_id); $episode = PatientEpisode::find($episode_id); $hospitalInfo = \Streamline\Models\HospitalInformation::find(1); $maternity_progress = DB::table('maternity_progress')->orderBy('name')->pluck('name', 'id')->prepend('- select -', ''); $consultation = Consultation::where(['patient_id' => $patient_id, 'episode_id' => $episode_id])->first(); $labour_ward_admission_details = LabourWardAdmission::where(['patient_id' => $patient_id, 'episode_id' => $episode_id])->first(); return view( 'maternity::labour_ward.print.print_labour_admission_sheet_details', compact( 'episode_id', 'episode', 'patient', 'labour_ward_admission_details', 'maternity_progress', 'consultation', 'hospitalInfo' ) ); } }