date_from) && isset($request->date_to)) { $attendance_from = Carbon::createFromFormat('d/m/Y', $request->date_from)->startOfDay()->toDateString(); $attendance_to = Carbon::createFromFormat('d/m/Y', $request->date_to)->endOfDay()->toDateString(); $search_button = $request->filterBtn; } else { $date = date_create(date("d-m-Y")); date_sub($date, date_interval_create_from_date_string("6 days")); $startDate = date_format($date, "d-m-Y"); $attendance_from = date_format($date, "Y-m-d"); $attendance_to = date("Y-m-d"); } $flu_id = get_name("Influenza", "name", "id", "diagnoses"); $ebola_id = get_name("Ebola Fever", "name", "id", "diagnoses"); //$death_pox_id = 0; $case_pox = 0; $case_flu = $cma = DB::table('consultations')->where('primary_diagnosis', $flu_id)->whereBetween('created_at', [$attendance_from, $attendance_to])->count(); $case_ebola = DB::table('consultations')->where('primary_diagnosis', $ebola_id)->whereBetween('created_at', [$attendance_from, $attendance_to])->count(); $death_pox = 0; //outcome_id = 5; to get death cases $death_flu = DB::table('consultations')->where('primary_diagnosis', $flu_id)->where('outcome_id', 5)->whereBetween('created_at', [$attendance_from, $attendance_to])->count(); $death_ebola = DB::table('consultations')->where('primary_diagnosis', $ebola_id)->where('outcome_id', 5)->whereBetween('created_at', [$attendance_from, $attendance_to])->count(); /* used from form 5 to 8 */ $malaria_id = get_name("6A", "hmis_no_inpatient", "id", "diagnoses"); $mat_one = DB::table('consultations')->where('primary_diagnosis', $malaria_id)->whereBetween('created_at', [$attendance_from, $attendance_to])->count(); // DB::enableQueryLog(); $mat_two = DB::table('consultations')->whereNotNull('rdt')->whereBetween('created_at', [$attendance_from, $attendance_to])->count(); $mat_three = DB::table('consultations')->where('rdt', 1)->whereBetween('created_at', [$attendance_from, $attendance_to])->count(); $mat_four = DB::table('investigations')->where('name', 'Stool Microscopy')->count(); $mat_five = 0; $mat_six = 0; $mat_seven = DB::table('treatments')->leftJoin('consultations', 'treatments.episode_id', '=', 'consultations.episode_id') ->where('consultations.rdt', 0) //0-negative ->whereBetween('consultations.created_at', [$attendance_from, $attendance_to]) ->count(); $mat_eight = DB::table('treatments')->leftJoin('consultations', 'treatments.episode_id', '=', 'consultations.episode_id') ->where('consultations.rdt', 1) //1-positive ->whereBetween('consultations.created_at', [$attendance_from, $attendance_to]) ->count(); $mat_nine = 0; $mat_ten = 0; $tra_one = 0; $tra_two = is_numeric(get_name("ORS Sachets", "name", "store_stock", "drugs")) ? get_name("ORS Sachets", "name", "store_stock", "drugs") + get_name("ORS Sachets", "name", "pharmacy_stock", "drugs") : 0; $tra_three = 0; $tra_four = is_numeric(get_name("Amoxicilin 250mg cap", "name", "store_stock", "drugs")) ? get_name("Amoxicilin 250mg cap", "name", "store_stock", "drugs") + get_name("Amoxicilin 250mg cap", "name", "pharmacy_stock", "drugs") + get_name("Amoxycilin 125mg/5mL 100ml susp", "name", "store_stock", "drugs") + get_name("Amoxycilin 125mg/5mL 100ml susp", "name", "pharmacy_stock", "drugs") : 0; $tra_five = 0; $tra_six = 0; $tra_seven = is_numeric(get_name("Fansidar 525mg tab", "name", "store_stock", "drugs")) ? get_name("Fansidar 525mg tab", "name", "store_stock", "drugs") + get_name("Fansidar 525mg tab", "name", "pharmacy_stock", "drugs") : 0; $tra_eight = 0; $arv_one = 0; $arv_two = 0; $arv_three = 0; return view('reports::hmis_reports.weekly_epidemiological_surveillance_form', compact('hospital_information', 'search_button', 'attendance_from', 'attendance_to', 'case_pox', 'case_flu', 'case_ebola', 'death_flu', 'death_ebola', 'death_pox', 'mat_one', 'mat_two', 'mat_three', 'mat_four', 'mat_five', 'mat_six', 'mat_seven', 'mat_eight', 'mat_nine', 'mat_ten', 'tra_one', 'tra_two', 'tra_three', 'tra_four', 'tra_five', 'tra_six', 'tra_seven', 'tra_eight', 'arv_one', 'arv_two', 'arv_three')); } /** * * Get details of a weekly epidemiliological cases report for specific period of time */ public function weekly_epidemiological_surveillance_cases_details($diagnosis_id) { $attendance_from = session()->get('attendance_from'); $attendance_to = session()->get('attendance_to'); $weekly_cases_details_sql = "SELECT * FROM consultations WHERE primary_diagnosis = {$diagnosis_id} AND created_at BETWEEN '{$attendance_from}' AND '{$attendance_to}'"; $weekly_cases_details_results = DB::select($weekly_cases_details_sql); return view('reports::hmis_reports.weekly_epidemiological_surveillance_cases_details', compact('attendance_from', 'attendance_to', 'weekly_cases_details_results')); } /** * * Get details of a weekly epidemiliological deaths report for specific period of time */ public function weekly_epidemiological_surveillance_deaths_details($diagnosis_id) { //outcome_id = 5 stands for died $attendance_from = session()->get('attendance_from'); $attendance_to = session()->get('attendance_to'); $weekly_cases_details_sql = "SELECT * FROM consultations WHERE primary_diagnosis = {$diagnosis_id} AND outcome_id=5 AND created_at BETWEEN '{$attendance_from}' AND '{$attendance_to}'"; $weekly_cases_details_results = DB::select($weekly_cases_details_sql); return view('reports::hmis_reports.weekly_epidemiological_surveillance_cases_details', compact('attendance_from', 'attendance_to', 'weekly_cases_details_results')); } /* Generate the essential medicines and health supplies report * */ public function essential_medicines_report(Request $request) { $hospital_information = HospitalInformation::find(1); if (isset($request->date_from) && isset($request->date_to)) { $from_date = Carbon::createFromFormat('d/m/Y', $request->date_from)->toDateString(); $to_date = Carbon::createFromFormat('d/m/Y', $request->date_to)->toDateString(); } else { $date = date_create(date("d-m-Y")); date_sub($date, date_interval_create_from_date_string("29 days")); $startDate = date_format($date, "d-m-Y"); $from_date = date_format($date, "Y-m-d"); $to_date = date("Y-m-d"); } $issued_drugs_sql = "SELECT * FROM requisitions WHERE quotation_type_id = 1 AND issue_status = 1 AND issued_on BETWEEN '{$from_date}' AND '{$to_date}'"; $issued_drugs_results = DB::select($issued_drugs_sql); $hssip_indicator_sql = "SELECT * FROM drugs WHERE deleted_at IS NUll AND hssip !='' AND hssip < 'S07' ORDER BY hssip ASC"; $hssip_indicator_results = DB::select($hssip_indicator_sql); $other_programmatic_sql = "SELECT * FROM drugs WHERE deleted_at IS NULL AND hssip > 'S06' AND hssip < 'S42' ORDER BY hssip ASC "; $other_programmatic_results = DB::select($other_programmatic_sql); $other_drugs_sql = "SELECT i.id, i.name, s.out_of_stock_date FROM drugs i, inventory_stock_dates s WHERE i.id = s.item_id AND s.out_of_stock_date BETWEEN '{$from_date}' AND '{$to_date}' AND i.deleted_at IS NULL AND i.hssip = '' ORDER BY i.name ASC"; $other_drugs_results = DB::select($other_drugs_sql); $drug_row_array = []; $drug_count = 0; $half_count = 0; if (count($other_drugs_results) > 0) { $drug_count = count($other_drugs_results); $half_count = (int) ($drug_count / 2); foreach ($other_drugs_results as $other_drug) { $drug_row_array[] = array("item_id" => $other_drug->id, "item_name" => $other_drug->name); } } return view('reports::hmis_reports.essential_medicines_report', compact('hospital_information', 'issued_drugs_results', 'hssip_indicator_results', 'other_programmatic_results', 'from_date', 'to_date', 'drug_count', 'half_count', 'drug_row_array')); } /** * Generate out patient register report (HMIS 031) - page 1 * */ public function out_patient_register_report(Request $request) { $hospital_information = HospitalInformation::find(1); $filtering_date = isset($request->filter_date) ? Carbon::createFromFormat('d/m/Y', $request->filter_date)->toDateString() : date('Y-m-d'); $episodes_query = "SELECT e.id, e.triage_id, e.patient_id, d.first_name, d.last_name, d.gender, d.date_of_birth, ds.name as district_name, p.name as parish_name, v.name as village_name, s.name as subcounty_name, d.county_id, d.next_of_kin, t.observations, t.new_attendance, t.re_attendance FROM patient_episodes e, patients d, villages v, parishes p, subcounties s, districts ds, triage t WHERE e.created_at LIKE '{$filtering_date}%' AND e.patient_id = d.id AND d.village_id = v.id AND d.parish_id = p.id AND d.subcounty_id = s.id AND d.district_id = ds.id AND e.id = t.episode_id"; $episodes_results = DB::select($episodes_query); return view('reports::hmis_reports.002.out_patient_register_report', compact('hospital_information', 'filtering_date', 'episodes_results')); } public function out_patient_register_report_2(Request $request) { $hospital_information = HospitalInformation::find(1); $filtering_date = isset($request->filter_date) ? Carbon::createFromFormat('d/m/Y', $request->filter_date)->toDateString() : date('Y-m-d'); $episodes_query = "SELECT e.id, e.triage_id, e.patient_id, d.first_name, d.last_name, d.gender, d.date_of_birth, ds.name as district_name, p.name as parish_name, v.name as village_name, s.name as subcounty_name, d.county_id, d.next_of_kin, t.observations, t.new_attendance, t.re_attendance FROM patient_episodes e, patients d, villages v, parishes p, subcounties s, districts ds, triage t WHERE e.created_at LIKE '{$filtering_date}%' AND e.patient_id = d.id AND d.village_id = v.id AND d.parish_id = p.id AND d.subcounty_id = s.id AND d.district_id = ds.id AND e.id = t.episode_id"; $episodes_results = DB::select($episodes_query); return view('reports::hmis_reports.002.out_patient_register_report_2', compact('hospital_information', 'filtering_date', 'episodes_results')); } /** * View expired drugs in the system * * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View */ public function expired_drugs_report() { $drugs = Drug::where('expiry_date', '<', date('Y-m-d')) ->where('pharmacy_stock', '>', '0') ->orderBy('name', 'asc') ->get(); return view('reports::hmis_reports.expired_drugs_report', compact('drugs')); } /** * View drug stock levels in the system * * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View */ public function drug_stock_level() { $drugs = Drug::orderBy('name', 'asc')->get(); return view('reports::hmis_reports.drug_stock_level', compact('drugs')); } /** * View drug consumption in the system with financial metrics * * @param Request $request * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View */ public function drug_consumption_report(Request $request) { // check for date search if (!is_null($request->start_date) && !is_null($request->end_date)) { $start_date = $request->start_date; $end_date = $request->end_date; } else { $start_date = date('Y-m-d'); $end_date = date('Y-m-d'); } $drugs_array = []; $dispensed_array = []; // prep the dates for search queries $start_date_clean = Carbon::parse($start_date)->startOfDay()->toDateTimeString(); $end_date_clean = Carbon::parse($end_date)->endOfDay()->toDateTimeString(); // get drugs dispensed to patients in opd $opd_drugs = DB::table('patient_dispensings')->where([['created_at', '>', $start_date_clean], ['created_at', '<', $end_date_clean]])->select('drugs', 'quantity_dispensed')->get(); foreach ($opd_drugs as $drug) { $drugs = explode(",", $drug->drugs); $dispensed = explode(",", $drug->quantity_dispensed); // loop through the drugs for ($i = 0; $i < count($drugs); $i++) { // check if a drug id already exists in the drugs array if (in_array($drugs[$i], $drugs_array)) { //get key of that drug which exists $key = array_search($drugs[$i], $drugs_array); //increment the dispensed value of said drug $clean_dispensed = (isset($dispensed[$i]) && is_numeric($dispensed[$i])) ? $dispensed[$i] : 0; if (is_numeric($dispensed_array[$key])) { $dispensed_array[$key] += $clean_dispensed; } else { $dispensed_array[$key] = $clean_dispensed; } $dispensed_array[$key] += $clean_dispensed; } else { //drugs does not exist, create new entry array_push($drugs_array, $drugs[$i]); array_push($dispensed_array, $dispensed[$i]); } } } $ward_drugs = DB::table('ward_dispensings')->where([['created_at', '>', $start_date_clean], ['created_at', '<', $end_date_clean]])->select('drug_id', 'quantity_dispensed')->get(); foreach ($ward_drugs as $drug) { $drugs = explode(",", $drug->drug_id); $dispensed = explode(",", $drug->quantity_dispensed); // loop through the drugs for ($i = 0; $i < count($drugs); $i++) { // check if a drug id already exists in the drugs array if (in_array($drugs[$i], $drugs_array)) { //get key of that drug which exists $key = array_search($drugs[$i], $drugs_array); //increment the dispensed value of said drug $clean_dispensed = (isset($dispensed[$i]) && is_numeric($dispensed[$i])) ? $dispensed[$i] : 0; if (is_numeric($dispensed_array[$key])) { $dispensed_array[$key] += $clean_dispensed; } else { $dispensed_array[$key] = $clean_dispensed; } } else { //drugs does not exist, create new entry array_push($drugs_array, $drugs[$i]); array_push($dispensed_array, $dispensed[$i]); } } } return view('reports::hmis_reports.drug_consumption_report', compact('start_date', 'end_date', 'drugs_array', 'dispensed_array')); } /** * View drug consumption in the last year */ public function drug_consumption_analysis() { // get all drugs in the system $drugs = Drug::select('id')->get(); //drugs ids $drugs_array = []; foreach ($drugs as $drug) { // insert drug id into array $drugs_array[] = $drug->id; } // get total of all drugs in the array $drugs_array_total = count($drugs_array); //initialize month arrays with count of drugs total $january = array_fill(0, $drugs_array_total, 0); $february = array_fill(0, $drugs_array_total, 0); $march = array_fill(0, $drugs_array_total, 0); $april = array_fill(0, $drugs_array_total, 0); $may = array_fill(0, $drugs_array_total, 0); $june = array_fill(0, $drugs_array_total, 0); $july = array_fill(0, $drugs_array_total, 0); $august = array_fill(0, $drugs_array_total, 0); $september = array_fill(0, $drugs_array_total, 0); $october = array_fill(0, $drugs_array_total, 0); $november = array_fill(0, $drugs_array_total, 0); $december = array_fill(0, $drugs_array_total, 0); // lets start a fairy tale $one_year_ago_today = Carbon::now()->subYear(); // get drugs dispensed to wards $ward_drugs = DB::table('ward_dispensings')->where([['created_at', '>', $one_year_ago_today]])->select('drug_id', 'quantity_dispensed', 'created_at')->get(); foreach ($ward_drugs as $drug) { // get month in which drug was dispensed $month = (int) Carbon::parse($drug->created_at)->format('m'); $drugs = explode(",", $drug->drug_id); $dispensed = explode(",", $drug->quantity_dispensed); // loop through the drugs for ($i = 0; $i < count($drugs); $i++) { if (in_array($drugs[$i], $drugs_array)) { //get key of that drug which exists $key = array_search($drugs[$i], $drugs_array); //update month quantity according to date returned switch ($month) { case 1: $january[$key] += (isset($dispensed[$i]) && is_numeric($dispensed[$i])) ? $dispensed[$i] : 0; break; case 2: $february[$key] += (isset($dispensed[$i]) && is_numeric($dispensed[$i])) ? $dispensed[$i] : 0; break; case 3: $march[$key] += (isset($dispensed[$i]) && is_numeric($dispensed[$i])) ? $dispensed[$i] : 0; break; case 4: $april[$key] += (isset($dispensed[$i]) && is_numeric($dispensed[$i])) ? $dispensed[$i] : 0; break; case 5: $may[$key] += (isset($dispensed[$i]) && is_numeric($dispensed[$i])) ? $dispensed[$i] : 0; break; case 6: $june[$key] += (isset($dispensed[$i]) && is_numeric($dispensed[$i])) ? $dispensed[$i] : 0; break; case 7: $july[$key] += (isset($dispensed[$i]) && is_numeric($dispensed[$i])) ? $dispensed[$i] : 0; break; case 8: $august[$key] += (isset($dispensed[$i]) && is_numeric($dispensed[$i])) ? $dispensed[$i] : 0; break; case 9: $september[$key] += (isset($dispensed[$i]) && is_numeric($dispensed[$i])) ? $dispensed[$i] : 0; break; case 10: $october[$key] += (isset($dispensed[$i]) && is_numeric($dispensed[$i])) ? $dispensed[$i] : 0; break; case 11: $november[$key] += (isset($dispensed[$i]) && is_numeric($dispensed[$i])) ? $dispensed[$i] : 0; break; case 12: $december[$key] += (isset($dispensed[$i]) && is_numeric($dispensed[$i])) ? $dispensed[$i] : 0; break; default: # code... break; } } } } // get drugs dispensed to patients in opd $opd_drugs = DB::table('patient_dispensings')->where([['created_at', '>', $one_year_ago_today]])->select('drugs', 'quantity_dispensed', 'created_at')->get(); foreach ($opd_drugs as $drug) { // get month in which drug was dispensed $month = (int) Carbon::parse($drug->created_at)->format('m'); $drugs = explode(",", $drug->drugs); $dispensed = explode(",", $drug->quantity_dispensed); // loop through the drugs for ($i = 0; $i < count($drugs); $i++) { if (in_array($drugs[$i], $drugs_array)) { //get key of that drug which exists $key = array_search($drugs[$i], $drugs_array); //update month quantity according to date returned switch ($month) { case 1: $january[$key] += (isset($dispensed[$i]) && is_numeric($dispensed[$i])) ? $dispensed[$i] : 0; break; case 2: $february[$key] += (isset($dispensed[$i]) && is_numeric($dispensed[$i])) ? $dispensed[$i] : 0; break; case 3: $march[$key] += (isset($dispensed[$i]) && is_numeric($dispensed[$i])) ? $dispensed[$i] : 0; break; case 4: $april[$key] += (isset($dispensed[$i]) && is_numeric($dispensed[$i])) ? $dispensed[$i] : 0; break; case 5: $may[$key] += (isset($dispensed[$i]) && is_numeric($dispensed[$i])) ? $dispensed[$i] : 0; break; case 6: $june[$key] += (isset($dispensed[$i]) && is_numeric($dispensed[$i])) ? $dispensed[$i] : 0; break; case 7: $july[$key] += (isset($dispensed[$i]) && is_numeric($dispensed[$i])) ? $dispensed[$i] : 0; break; case 8: $august[$key] += (isset($dispensed[$i]) && is_numeric($dispensed[$i])) ? $dispensed[$i] : 0; break; case 9: $september[$key] += (isset($dispensed[$i]) && is_numeric($dispensed[$i])) ? $dispensed[$i] : 0; break; case 10: $october[$key] += (isset($dispensed[$i]) && is_numeric($dispensed[$i])) ? $dispensed[$i] : 0; break; case 11: $november[$key] += (isset($dispensed[$i]) && is_numeric($dispensed[$i])) ? $dispensed[$i] : 0; break; case 12: $december[$key] += (isset($dispensed[$i]) && is_numeric($dispensed[$i])) ? $dispensed[$i] : 0; break; default: # code... break; } } } } $data = compact('drugs_array', 'january', 'february', 'march', 'april', 'may', 'june', 'july', 'august', 'september', 'october', 'november', 'december'); return view('reports::hmis_reports.drug_consumption_analysis', $data); } public function streamline_outpatient_report(Request $request) { set_time_limit(0); $hospital_information = HospitalInformation::find(1); $clinics = Clinic::orderBy('name')->pluck('name', 'id')->prepend('OPD', 0)->prepend('-- Select --', ''); $age = AgeGroup::pluck('name', 'id')->toArray(); $age = ['' => '- select -'] + $age; $patient_array = []; $patient_array_adults = []; $patient_array_males = []; $patient_array_females = []; $patient_array_admitted = []; $patient_array_children = []; $patient_array_children_males = []; $patient_array_children_females = []; $patient_array_age = []; $criteria = ''; $filters = []; if (isset($request->date_from)) { $attendance_from = Carbon::parse($request->date_from)->startOfDay()->toDateTimeString(); $attendance_to = Carbon::parse($request->date_to)->endOfDay()->toDateTimeString(); $inpatient_attendance_from = Carbon::parse($request->date_from)->toDateString(); $inpatient_attendance_to = Carbon::parse($request->date_to)->toDateString(); $clinic_id = $request->clinic_id; $patient_type = $request->patient_type; } else { $attendance_from = Carbon::now()->startOfDay()->toDateTimeString(); $attendance_to = Carbon::now()->endOfDay()->toDateTimeString(); $inpatient_attendance_from = Carbon::now()->toDateString(); $inpatient_attendance_to = Carbon::now()->toDateString(); $clinic_id = 0; $patient_type = 1; } if ($clinic_id == 0) { $triage = Triage::whereNotIn('patient_id', findTestOrDemoPatients()) ->whereBetween('created_at', [$attendance_from, $attendance_to]) ->select('patient_id', 'created_at') ->get(); } else { $triage = Triage::where('clinic_allocation', $clinic_id) ->whereNotIn('patient_id', findTestOrDemoPatients()) ->whereBetween('created_at', [$attendance_from, $attendance_to]) ->select('patient_id', 'created_at') ->get(); } if ($patient_type == 2) { // record for insured patients foreach ($triage as $record) { $patient = Patient::where('id', $record->patient_id)->first(); $patient_was_insured = patient_was_insured($patient->id, $record->created_at); if ($patient_was_insured) { $age_at_visit = days_months_years(get_name($patient->id, 'id', 'date_of_birth', 'patients'), $record->created_at)[2]; // Children if ($age_at_visit <= 12) { if ($patient->gender == 1) { array_push($filters, ['patients.gender', '=', $patient->gender]); $patient_array_children_males[] = $patient->id; $patient_array[] = $patient->id; } elseif ($patient->gender == 2) { array_push($filters, ['patients.gender', '=', $patient->gender]); $patient_array_children_females[] = $patient->id; $patient_array[] = $patient->id; } else { $patient_array_children[] = $patient->id; $patient_array[] = $patient->id; } // $patient_array_children[] = $patient->id; // $patient_array[] = $patient->id; } // Adults if ($age_at_visit > 12) { if (!is_null($request->age) && is_numeric($request->age)) { array_push($filters, ['age_groups.name', '=', $request->age]); $patient_array_age[] = $patient->id; } if (($request->gender == 1) && is_numeric($request->gender)) { array_push($filters, ['patients.gender', '=', $request->gender]); $patient_array_males[] = $patient->id; } elseif (($request->gender == 2) && is_numeric($request->gender)) { array_push($filters, ['patients.gender', '=', $request->gender]); $patient_array_females[] = $patient->id; } else { $patient_array_adults[] = $patient->id; $patient_array[] = $patient->id; } } // find out if patient was admitted during this time period $inpatient_info = InpatientInfo::where('patient_id', $patient->id) ->whereBetween('admitted_on', [$inpatient_attendance_from, $inpatient_attendance_to]) ->first(); if ($inpatient_info) { $patient_array_admitted[] = $patient->id; } } } } else { // record for all patients foreach ($triage as $record) { $patient = Patient::withTrashed()->find($record->patient_id); if ($patient) { $age_at_visit = days_months_years(get_name($patient->id, 'id', 'date_of_birth', 'patients'), $record->created_at)[2]; if ($age_at_visit <= 12) { if ($patient->gender == 1) { array_push($filters, ['patients.gender', '=', $patient->gender]); $patient_array_children_males[] = $patient->id; $patient_array[] = $patient->id; } elseif ($patient->gender == 2) { array_push($filters, ['patients.gender', '=', $patient->gender]); $patient_array_children_females[] = $patient->id; $patient_array[] = $patient->id; } else { $patient_array_children[] = $patient->id; $patient_array[] = $patient->id; } $patient_array_children[] = $patient->id; $patient_array[] = $patient->id; } // Adults if ($age_at_visit > 12) { if (!is_null($request->age)) { array_push($filters, ['age_groups.name', '=', $request->age]); $patient_array_age[] = $patient->id; } if (($patient->gender == 1)) { array_push($filters, ['patients.gender', '=', $patient->gender]); $patient_array_males[] = $patient->id; } elseif (($patient->gender == 2)) { array_push($filters, ['patients.gender', '=', $patient->gender]); $patient_array_females[] = $patient->id; } else { array_push($filters, ['patients.gender', '=', $patient->gender]); $patient_array_adults[] = $patient->id; $patient_array[] = $patient->id; } $patient_array_adults[] = $patient->id; $patient_array[] = $patient->id; } // find out if patient was admitted during this time period $inpatient_info = InpatientInfo::where('patient_id', $patient->id) ->whereBetween('admitted_on', [$inpatient_attendance_from, $inpatient_attendance_to]) ->first(); if ($inpatient_info) { $patient_array_admitted[] = $patient->id; } } } } // now collect the total amounts spent for these individual patients $insurance_drugs_total = 0; $insurance_investigations_total = 0; $insurance_procedures_total = 0; $insurance_others_total = 0; $insurance_sundries_total = 0; $insurance_consultations_total = 0; $drugs_insurance = DB::table('insurance_expenditure') ->whereIn('patient_id', $patient_array) ->where('tag_id', 3) ->whereBetween('created_at', [$attendance_from, $attendance_to]) ->select('insurance_amount') ->get(); $sundries_insurance = DB::table('insurance_expenditure') ->whereIn('patient_id', $patient_array) ->where('tag_id', 5) ->whereBetween('created_at', [$attendance_from, $attendance_to]) ->select('insurance_amount') ->get(); $investigations_insurance = DB::table('insurance_expenditure') ->whereIn('patient_id', $patient_array) ->where('tag_id', 2) ->whereBetween('created_at', [$attendance_from, $attendance_to]) ->select('insurance_amount') ->get(); $deposits_insurance = DB::table('insurance_expenditure') ->whereIn('patient_id', $patient_array) ->whereIn('tag_id', [6, 7, 8]) ->whereBetween('created_at', [$attendance_from, $attendance_to]) ->select('insurance_amount', 'item_id') ->get(); $procedures_insurance = DB::table('insurance_expenditure') ->whereIn('patient_id', $patient_array) ->where('tag_id', 4) ->whereBetween('created_at', [$attendance_from, $attendance_to]) ->select('insurance_amount') ->get(); foreach ($drugs_insurance as $drug) { $insurance_drugs_total += $drug->insurance_amount; } foreach ($investigations_insurance as $investigation) { $insurance_investigations_total += $investigation->insurance_amount; } foreach ($procedures_insurance as $procedure) { $insurance_procedures_total += $procedure->insurance_amount; } foreach ($sundries_insurance as $sundry) { $insurance_sundries_total += $sundry->insurance_amount; } foreach ($deposits_insurance as $deposit) { $service_type = DB::table('services')->where('id', $deposit->item_id)->value('item_type'); if ($service_type == 'Consultation') { $insurance_consultations_total += $deposit->insurance_amount; } if ($service_type == 'Service' || $service_type == 'Other_service') { $insurance_others_total += $deposit->insurance_amount; } } $drugs_total = 0; $investigations_total = 0; $procedures_total = 0; $others_total = 0; $sundries_total = 0; $consultations_total = 0; // if patient is insured, skip this section if ($patient_type != 2) { $drugs = DB::table('treatment_deposits') ->whereIn('patient_id', $patient_array) ->whereBetween('created_at', [$attendance_from, $attendance_to]) ->select('patient_amount_paid', 'refund_amount') ->get(); $sundries = DB::table('sundries_deposits') ->whereIn('patient_id', $patient_array) ->whereBetween('created_at', [$attendance_from, $attendance_to]) ->select('patient_amount_paid', 'refund_amount') ->get(); $investigations = DB::table('investigation_deposits') ->whereIn('patient_id', $patient_array) ->whereBetween('created_at', [$attendance_from, $attendance_to]) ->select('patient_amount_paid', 'refund_amount') ->get(); $deposits = DB::table('service_deposits') ->whereIn('patient_id', $patient_array) ->whereBetween('created_at', [$attendance_from, $attendance_to]) ->select('patient_amount_paid', 'refund_amount', 'service_type') ->get(); $procedures = DB::table('procedure_deposits') ->whereIn('patient_id', $patient_array) ->whereBetween('created_at', [$attendance_from, $attendance_to]) ->select('patient_amount_paid', 'refund_amount') ->get(); foreach ($drugs as $drug) { $drugs_total += ($drug->patient_amount_paid - $drug->refund_amount); } foreach ($investigations as $investigation) { $investigations_total += ($investigation->patient_amount_paid - $investigation->refund_amount); } foreach ($procedures as $procedure) { $procedures_total += ($procedure->patient_amount_paid - $procedure->refund_amount); } foreach ($sundries as $sundry) { $sundries_total += ($sundry->patient_amount_paid - $sundry->refund_amount); } foreach ($deposits as $deposit) { if ($deposit->service_type == 'Consultation') { $consultations_total += ($deposit->patient_amount_paid - $deposit->refund_amount); } if ($deposit->service_type == 'Services' || $deposit->service_type == 'Service' || $deposit->service_type == 'Other_service') { $others_total += ($deposit->patient_amount_paid - $deposit->refund_amount); } } } $total_costs_consultation = $consultations_total + $insurance_consultations_total; $total_costs_services = $others_total + $insurance_others_total; $total_costs_investigations = $investigations_total + $insurance_investigations_total; $total_costs_drug = $drugs_total + $insurance_drugs_total; $total_costs_procedures = $procedures_total + $insurance_procedures_total; $total_costs_sundries = $sundries_total + $insurance_sundries_total; $total_costs = $total_costs_consultation + $total_costs_services + $total_costs_investigations + $total_costs_drug + $total_costs_procedures + $total_costs_sundries; return view('reports::hmis_reports.streamline_outpatient_report', compact('age', 'hospital_information', 'clinics', 'attendance_from', 'attendance_to', 'total_costs', 'total_costs_consultation', 'total_costs_services', 'total_costs_drug', 'total_costs_investigations', 'total_costs_procedures', 'total_costs_sundries', 'patient_array', 'clinic_id', 'patient_type', 'patient_array', 'patient_array_admitted', 'patient_array_adults', 'patient_array_children', 'patient_array_age', 'patient_array_males', 'patient_array_females', 'patient_array_children_males', 'patient_array_children_females')); } /* * out patient streamline report income drill down */ public function streamline_outpatient_income_details(Request $request) { //'Investigations=2','Treatments=3','Procedures=4','Sundries=5','Consultation=6','Co-Payments=7','Services=8' $date_filter_string = $request->dates; $date_filter_array = explode('/', $date_filter_string); $date_from = $date_filter_array[0]; $date_to = $date_filter_array[0]; $deposits = []; $insurance_expenditure = []; $tag_id = $request->tag_id; $patients_json_encoded_string = $request->patient_filter; $department = $request->department; $insured_or_all_patients = $request->insured_or_all; $patient_id_decode = []; if (isset($request->patient_filter)) { $patient_ids = $request->patient_filter; $patient_id_decode = json_decode($patient_ids); $patient_ids_string = !is_null($patient_id_decode) ? implode(",", $patient_id_decode) : ""; if (!empty($patient_ids_string)) { $patient_filter_sales = " select_client IN IN (" . $patient_ids_string . ") AND "; $patient_filter_general = " patient_id IN (" . $patient_ids_string . ") AND "; } } //Consultation=6 if ($tag_id == 6) { if ($insured_or_all_patients == 1) { $deposits = ServiceDeposit::where('service_type', 'Consultation')->whereDate('created_at', '>=', $date_from)->whereDate('created_at', '<=', $date_to)->get(); $insurance_expenditure = InsuranceExpenditure::whereIn('item_id', $patient_id_decode)->where('tag_id', 6)->whereDate('created_at', '>=', $date_from)->whereDate('created_at', '<=', $date_to)->get(); } else { $insurance_expenditure = InsuranceExpenditure::whereIn('item_id', $patient_id_decode)->where('tag_id', 6)->whereDate('created_at', '>=', $date_from)->whereDate('created_at', '<=', $date_to)->get(); } //Investigations=2 } else if ($tag_id == 2) { if ($insured_or_all_patients == 1) { $deposits = InvestigationDeposit::whereDate('created_at', '>=', $date_from)->whereDate('created_at', '<=', $date_to)->get(); $insurance_expenditure = InsuranceExpenditure::whereIn('item_id', $patient_id_decode)->where('tag_id', 2)->whereDate('created_at', '>=', $date_from)->whereDate('created_at', '<=', $date_to)->get(); return view('reports::hmis_reports.streamline_outpatient_income_detailed_report', compact('department', 'tag_id', 'date_from', 'date_to', 'deposits', 'insurance_expenditure')); } else { $insurance_expenditure = InsuranceExpenditure::whereIn('item_id', $patient_id_decode)->where('tag_id', 2)->whereDate('created_at', '>=', $date_from)->whereDate('created_at', '<=', $date_to)->get(); return view('reports::hmis_reports.streamline_outpatient_income_detailed_report', compact('department', 'tag_id', 'date_from', 'date_to', 'deposits', 'insurance_expenditure')); } //Treatments=3 } else if ($tag_id == 3) { if ($insured_or_all_patients == 1) { $deposits = TreatmentDeposits::whereDate('created_at', '>=', $date_from)->whereDate('created_at', '<=', $date_to)->get(); $insurance_expenditure = InsuranceExpenditure::whereIn('item_id', $patient_id_decode)->where('tag_id', 3)->whereDate('created_at', '>=', $date_from)->whereDate('created_at', '<=', $date_to)->get(); return view('reports::hmis_reports.streamline_outpatient_income_detailed_report', compact('department', 'tag_id', 'date_from', 'date_to', 'deposits', 'insurance_expenditure')); } else { $insurance_expenditure = InsuranceExpenditure::whereIn('item_id', $patient_id_decode)->where('tag_id', 3)->whereDate('created_at', '>=', $date_from)->whereDate('created_at', '<=', $date_to)->get(); return view('reports::hmis_reports.streamline_outpatient_income_detailed_report', compact('department', 'tag_id', 'date_from', 'date_to', 'deposits', 'insurance_expenditure')); } //Procedures = 4 } else if ($tag_id == 4) { if ($insured_or_all_patients == 1) { $deposits = ProcedureDeposit::whereDate('created_at', '>=', $date_from)->whereDate('created_at', '<=', $date_to)->get(); $insurance_expenditure = InsuranceExpenditure::whereIn('item_id', $patient_id_decode)->where('tag_id', 4)->whereDate('created_at', '>=', $date_from)->whereDate('created_at', '<=', $date_to)->get(); return view('reports::hmis_reports.streamline_outpatient_income_detailed_report', compact('department', 'tag_id', 'date_from', 'date_to', 'deposits', 'insurance_expenditure')); } else { $insurance_expenditure = InsuranceExpenditure::whereIn('item_id', $patient_id_decode)->where('tag_id', 4)->whereDate('created_at', '>=', $date_from)->whereDate('created_at', '<=', $date_to)->get(); return view('reports::hmis_reports.streamline_outpatient_income_detailed_report', compact('department', 'tag_id', 'date_from', 'date_to', 'deposits', 'insurance_expenditure')); } } return view('reports::hmis_reports.streamline_outpatient_income_detailed_report', compact('department', 'tag_id', 'date_from', 'date_to', 'deposits', 'insurance_expenditure')); } public function streamline_outpatient_details(Request $request) { $patients_lists = []; $patient_array_adults = json_decode($request->patient_array_adults); $patient_array_males = json_decode($request->patient_array_males); $patient_array_females = json_decode($request->patient_array_females); $patient_array_children = json_decode($request->patient_array_children); $patient_array_children_males = json_decode($request->patient_array_children_males); $patient_array_children_females = json_decode($request->patient_array_children_females); $patient_array = json_decode($request->patient_array); $patient_array_admitted = json_decode($request->patient_array_admitted); $patients = Patient::get(); $patient_category = "Adults"; $patient_data = []; if ($patient_array_adults) { foreach ($patient_array_adults as $patient_array_adult) { $patient = Patient::where('id', $patient_array_adult)->first(); $patient_data[] = $patient; $patient_category = "Adults"; } return view('reports::hmis_reports.streamline_outpatient_list_report', compact('patient_category','patient_data', 'patients', 'patient_array_adults')); } if ($patient_array_males) { foreach (collect($patient_array_males) as $patient_array_male) { $patient = Patient::where('id', $patient_array_male)->first(); $patient_data[] = $patient; $patient_category = "Male Adults"; } return view('reports::hmis_reports.streamline_outpatient_list_report', compact('patient_category','patient_data', 'patients', 'patient_array_males')); } if ($patient_array_females) { foreach ($patient_array_females as $patient_array_female) { $patient = Patient::where('id', $patient_array_female)->first(); $patient_data[] = $patient; $patient_category = "Female Adults"; } return view('reports::hmis_reports.streamline_outpatient_list_report', compact('patient_category','patient_data', 'patients', 'patient_array_females')); } if ($patient_array_children) { foreach ($patient_array_children as $patient_array_child) { $patient = Patient::where('id', $patient_array_child)->first(); $patient_data[] = $patient; $patient_category = "Children"; } return view('reports::hmis_reports.streamline_outpatient_list_report', compact('patient_category','patient_data', 'patient_array_children')); } if ($patient_array_children_males) { foreach ($patient_array_children_males as $patient_array_children_male) { $patient = Patient::where('id', $patient_array_children_male)->first(); $patient_data[] = $patient; $patient_category = "Male Children"; } return view('reports::hmis_reports.streamline_outpatient_list_report', compact('patient_category','patient_data', 'patient_array_children_males')); } if ($patient_array_children_females) { foreach ($patient_array_children_females as $patient_array_children_female) { $patient = Patient::where('id', $patient_array_children_female)->first(); $patient_data[] = $patient; $patient_category = "Female Children"; } return view('reports::hmis_reports.streamline_outpatient_list_report', compact('patient_category', 'patient_data', 'patient_array_children_females')); } if ($patient_array) { foreach ($patient_array as $patient_arr) { $patient = Patient::where('id', $patient_arr)->first(); $patient_data[] = $patient; $patient_category = "All Patients"; } return view('reports::hmis_reports.streamline_outpatient_list_report', compact('patient_category','patient_data', 'patient_array')); } if ($patient_array_admitted) { foreach ($patient_array_admitted as $patient_array_admit) { $patient = Patient::where('id', $patient_array_admit)->first(); $patient_data[] = $patient; $patient_category = "Admitted Patients"; } return view('reports::hmis_reports.streamline_outpatient_list_report', compact('patient_category','patient_data', 'patient_array_admitted')); } } /* * out patient streamline report attendance drill down */ public function streamline_outpatient_attendance_details(Request $request) { $date_from = $request->from; $date_to = $request->to; $patient_array = json_decode($request->patient_array); $department_id = $request->department; return view('reports::hmis_reports.streamline_outpatient_attendance_detailed_report', compact('date_from', 'date_to', 'patient_array')); } /** * Reprint Investigations Receipt coing from streamline outpatient report * * @param $id * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View */ public function reprint_investigation_receipt($id) { // get payment details for the services $investigation_payment = InvestigationDeposit::where(['receipt_number' => $id])->first(); $patient_to_pay = $investigation_payment->patient_amount_paid; $investigation_prices_array = explode(",", $investigation_payment->investigation_amounts); $investigation_ids_array = explode(",", $investigation_payment->investigation_items); $total_amount_pay = 0; foreach ($investigation_prices_array as $price) { $total_amount_pay += $price; } $receipt_date = $investigation_payment->created_at; // receipt number $receipt_number = $investigation_payment->receipt_number; // details to be used for receipt $hospital_information = HospitalInformation::first(); $discounts_applied = $total_amount_pay - $patient_to_pay; $patient = Patient::find($investigation_payment->patient_id); $compact_values = compact('hospital_information', 'receipt_date', 'receipt_number', 'discounts_applied', 'patient', 'investigation_ids_array', 'investigation_prices_array', 'total_amount_pay', 'patient_to_pay'); return view('patient_finance::patient_finance.receipts.investigations_reprint', $compact_values); } public function disease_prevalence_charts(Request $request) { $month_array = []; $data_array = []; $array_tracker = []; // check for date search if (!is_null($request->start_date) && !is_null($request->end_date)) { $start_date = $request->start_date; $end_date = $request->end_date; } else { $start_date = date('Y-m-d'); $end_date = date('Y-m-d'); } // check for selected diagnosis if (!is_null($request->diagnosis_id)) { $diagnosis_id = $request->diagnosis_id; $diagnosis_name = get_name($diagnosis_id, 'id', 'name', 'diagnoses'); } else { // get a random diagnosis $diagnosis_id = 11; $diagnosis_name = get_name($diagnosis_id, 'id', 'name', 'diagnoses'); } // prep the dates for search queries $start_date_clean = Carbon::parse($start_date)->startOfDay()->toDateTimeString(); $end_date_clean = Carbon::parse($end_date)->endOfDay()->toDateTimeString(); // get drugs dispensed $diagnoses = DB::table('consultations')->where([['created_at', '>', $start_date_clean], ['created_at', '<', $end_date_clean], ['primary_diagnosis', '=', $diagnosis_id]])->select('primary_diagnosis', 'created_at')->get(); $label = 'Disease Prevalence For ' . $diagnosis_name; foreach ($diagnoses as $diagnosis) { $month = (int) Carbon::parse($diagnosis->created_at)->format('m'); $year = (int) Carbon::parse($diagnosis->created_at)->format('Y'); $string_tracker = $year . $month; if (in_array($string_tracker, $array_tracker)) { $key = array_search($string_tracker, $array_tracker); $current_count = $data_array[$key]; $data_array[$key] = $current_count + 1; } else { array_push($data_array, 1); array_push($array_tracker, $string_tracker); $month_name = ""; switch ($month) { case 1: $month_name = "January"; break; case 2: $month_name = "February"; break; case 3: $month_name = "March"; break; case 4: $month_name = "April"; break; case 5: $month_name = "May"; break; case 6: $month_name = "June"; break; case 7: $month_name = "July"; break; case 8: $month_name = "August"; break; case 9: $month_name = "September"; break; case 10: $month_name = "October"; break; case 11: $month_name = "November"; break; case 12: $month_name = "December"; break; default: # code... break; } $result = $month_name . " " . $year; // add the new date array_push($month_array, $result); } } $diagnoses = Diagnosis::pluck('name', 'id')->toArray(); $diagnoses = ['' => '- select -'] + $diagnoses; return view('reports::hmis_reports.disease_prevalence_charts', compact('month_array', 'data_array', 'label', 'diagnoses')); } /** * * opd attendance referrals diagnosis totals steamline report * */ public function opd_attendance_referrals_diagnosis_totals(Request $request) { $hospital_information = HospitalInformation::find(1); if (isset($request->date_from) && isset($request->date_to)) { $attendance_from = Carbon::createFromFormat('d/m/Y', $request->date_from)->toDateString(); $attendance_to = Carbon::createFromFormat('d/m/Y', $request->date_to)->toDateString(); $search_button = $request->filterBtn; } else { $date = date_create(date("d-m-Y")); date_sub($date, date_interval_create_from_date_string("0 days")); $startDate = date_format($date, "d-m-Y"); $attendance_from = date_format($date, "Y-m-d"); $attendance_to = date("Y-m-d"); } return view('reports::hmis_reports.opd_attendance_referrals_diagnosis_totals', compact('hospital_information', 'attendance_from', 'attendance_to')); } // Inpatient monthly report 108 public function hmis_108(Request $request) { $valid = Validator::make($request->all(), [ 'date_from' => 'nullable|date|required_with:date_to', 'date_to' => 'bail|nullable|required_with:date_from|date|after:date_from', ]); if($valid->fails()){ $string = ""; foreach ($valid->errors()->getMessages() as $item) { $string .= "{$item[0]}
"; } flash($string)->error(); return back()->withErrors($valid)->withInput(); } $start = !empty($request->date_from)? $request->date_from : Carbon::now()->subMonth()->startOfMonth()->format('Y-m-d'); $end = !empty($request->date_to)? $request->date_to : date("Y-m-t", strtotime($start)); $citizenship = isset($request->type)? $request->type :1; $page = 'census'; $dates = $ward_data = $referral_data = []; $counter = $referred_from = $self_referred = $referred_to = $ran_away=0; if(empty($request->date_from)){ $dates['last_month'] = date('F', strtotime($start)); $dates['last_year'] = date('Y', strtotime($start)); $dates['days'] = date('t', strtotime($start)); $dates['citizenship'] = $citizenship; }else { $dates['start'] = date('d-M-Y', strtotime($start)); $dates['end'] = date('d-M-Y', strtotime($end)); $dates['days'] = intval((new DateTime($start))->diff(new DateTime($end))->format("%a")); $dates['citizenship'] = $citizenship; } $ward_types = HmisWard::all('name', 'id'); foreach ($ward_types as $ward_type) { $ward_info = Ward::select('id', 'name', 'beds')->where('hmis_ward_id', $ward_type['id'])->get(); if (!empty($ward_info)) { $ward_ids = $patient_ids = $dead_ids = $ward_beds = [];$ward_days_count = $ward_deaths = $ward_admissions =0; foreach ($ward_info as $ward){ $ward_ids[] = $ward->id; $ward_beds[] = $ward->beds; } $admissions = DB::table('inpatient_info as i')->leftjoin('triage AS t', 't.episode_id', '=', 'i.episode_id') ->leftjoin('patients AS p', 'p.id', '=', 'i.patient_id') ->whereIn('i.ward_id', $ward_ids)->where('p.citizenship', $citizenship) ->whereBetween('i.admitted_on', [$start, $end]) ->select('i.id','i.outcome_id','i.patient_id','i.admitted_on','i.discharged_on', 't.referral') ->get(); $ward_admissions = !empty($admissions)? count($admissions):0; foreach ($admissions as $admission) { $admitted_on = new DateTime($admission->admitted_on); if($admission->outcome_id == '8'){ $ran_away +=1; $referral_data['ran_away_ids'][] = $admission->patient_id; } elseif($admission->outcome_id == '4') { $referred_from +=1; $referral_data['referred_from_ids'][] = $admission->patient_id; } elseif($admission->outcome_id == '5') { $ward_deaths +=1; $dead_ids[] = $admission->patient_id; } if($admission->referral == '1') { $self_referred +=1; $referral_data['self_referred_ids'][] = $admission->patient_id; } else { $referred_to +=1; $referral_data['referred_to_ids'][] = $admission->patient_id; } if(!empty($admission->discharged_on) && ($admission->discharged_on !== "0000-00-00") ){ if(intval($admitted_on->diff(new DateTime($admission->discharged_on))->format("%a")) > 30) $test[] =['id' =>$admission->id,'count'=>intval($admitted_on->diff(new DateTime($admission->discharged_on))->format("%a"))]; $ward_days_count += intval($admitted_on->diff(new DateTime($admission->discharged_on))->format("%a")); }else { $ward_days_count += intval($admitted_on->diff(new DateTime($end))->format("%a")); } $patient_ids[] = $admission->patient_id; } $ward_data[$counter]['admissions'] = $ward_admissions; $ward_data[$counter]['deaths'] = $ward_deaths; $ward_data[$counter]['days_count'] = $ward_days_count; $ward_data[$counter]['ward_beds'] = array_sum($ward_beds); $ward_data[$counter]['ward_name'] = $ward_type['name']; $ward_data[$counter]['id'] = $ward_type['id']; $ward_data[$counter]['patient_ids'] = $patient_ids; $ward_data[$counter]['dead_ids'] = $dead_ids; $counter++; $referral_data['referred_to'] = $referred_to; $referral_data['referred_to_ids'] = isset($referral_data['referred_to_ids'])? $referral_data['referred_to_ids']:[]; $referral_data['self_referred'] = $self_referred; $referral_data['self_referred_ids'] = isset($referral_data['self_referred_ids'])? $referral_data['self_referred_ids']:[]; $referral_data['referred_from'] = $referred_from; $referral_data['referred_from_ids'] = isset($referral_data['referred_from_ids'])? $referral_data['referred_from_ids']:[]; $referral_data['ran_away'] = $ran_away; $referral_data['ran_away_ids'] = isset($referral_data['ran_away_ids'])? $referral_data['ran_away_ids']:[]; }else { $ward_data[$counter]['admissions'] = 0; $ward_data[$counter]['deaths'] = 0; $ward_data[$counter]['days_count'] = 0; $ward_data[$counter]['ward_beds'] = 0; $ward_data[$counter]['ward_name'] = $ward_type['name']; $ward_data[$counter]['id'] = $ward_type['id']; $ward_data[$counter]['patient_ids'] = []; $ward_data[$counter]['dead_ids'] =[]; $counter++; } } return view('reports::hmis_reports.108.index', compact('ward_data','referral_data', 'dates','page')); } public function hmis_108_drill(Request $request) { $patientIDs = unserialize($request->patients); $page = $request->page; $diagnoses = unserialize($request->diagnoses); $patients = DB::table('patients')->whereIn('id', array_unique($patientIDs))->orderBy('last_name','asc')->get(); $categories = DB::table('patient_categories')->pluck('name', 'id'); return view('reports::hmis_reports.108.drill-down', compact('patients', 'categories','page', 'diagnoses')); } function print_Hmis_108_information(Request $request) { $ward_data = !empty($request->ward_data)? unserialize($request->ward_data):[]; $referral_data = !empty($request->referral_data)? unserialize($request->referral_data):[]; $dates = !empty($request->dates)? unserialize($request->dates):[]; $counted_procedures =!empty($request->counted_procedures)? unserialize($request->counted_procedures):[]; $counted_investigations =!empty($request->counted_investigations)? unserialize($request->counted_investigations):[]; $diagnoses_data =!empty($request->diagnoses_data)? unserialize($request->diagnoses_data):[]; $table_options = !empty($request->table_options)? unserialize($request->table_options):[]; $page = $request->page; $pdf = SnappyPDF::loadView('reports::hmis_reports.108.print-census-information', compact('ward_data','referral_data', 'dates','page','counted_investigations','table_options','counted_procedures','diagnoses_data')) ->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(__('hmis_reports.hmis_108_report_census') . date(" d-m-y h:ia") . '.pdf'); } public function hmis_108_procedures(Request $request) { request()->validate([ 'date_from' => 'nullable|date|required_with:date_to', 'date_to' => 'bail|nullable|required_with:date_from|date|after:date_from', ]); $start = !empty($request->date_from)? $request->date_from : Carbon::now()->subMonth()->startOfMonth()->format('Y-m-d'); $end = !empty($request->date_to)? $request->date_to : date("Y-m-t", strtotime($start)); $citizenship = isset($request->type)? $request->type :1; $page = 'procedures';$table_options =[]; $dates = $new_procedure = $counted_procedures = $table_options = $actual_procedures =[]; if(empty($request->date_from)){ $dates['last_month'] = date('F', strtotime($start)); $dates['last_year'] = date('Y', strtotime($start)); $dates['days'] = date('t', strtotime($start)); $dates['citizenship'] = $citizenship; }else { $dates['start'] = date('d-M-Y', strtotime($start)); $dates['end'] = date('d-M-Y', strtotime($end)); $dates['days'] = intval((new DateTime($start))->diff(new DateTime($end))->format("%a")); $dates['citizenship'] = $citizenship; } $procedures = WardProcedure::where([['procedure_id','<>', ''], ['citizenship', $citizenship]])->whereBetween('ward_procedures.created_at', [$start, $end])->select('ward_procedures.id','patient_id','episode_id','procedure_date as admitted_on','procedure_id as procedures','performed_by as procedures_done_by')->leftJoin('patients', 'patients.id','ward_procedures.patient_id')->get()->toArray(); foreach($procedures as $procedure) { $new_procedure[] =['id'=>$procedure['id'],'patient_id'=>$procedure['patient_id'],'episode_id'=>$procedure['episode_id'],'admitted_on'=>$procedure['admitted_on'], 'procedures_done_by'=>$procedure['procedures_done_by'], 'procedure_ids'=> $procedure['procedures']]; $actual_procedures[] = $procedure['procedures']; } $procedures_count = !empty($actual_procedures)? array_unique($actual_procedures) : []; foreach($procedures_count as $value){ $procedure_info = DB::table('procedures AS p')->leftJoin('hmis_category_options AS a','a.id', 'p.hmis_no_inpatient') ->leftJoin('hmis_categories AS h','h.id', 'p.hmis_category_inpatient')->where([['p.id', $value],['p.hmis_inpatient_type', 1]]) ->select('h.id as category_id','h.number as category_number', 'h.title as category_name','a.id as option_id','a.name as option_name','a.number as option_number','p.id','p.name', 'p.hmis_no_inpatient')->first(); if(!empty($procedure_info)) { $patient_ids = []; foreach($new_procedure as $pro) if($value == $pro['procedure_ids']) $patient_ids[] = $pro['patient_id']; $counted_procedures[] =['id'=>$value, 'count'=>count($patient_ids), 'name'=>$procedure_info->name, 'chosen_option'=>$procedure_info->hmis_no_inpatient ?? 'None', 'category_id'=>$procedure_info->category_id ?? '58','category_number'=>$procedure_info->category_number ?? '3.13','category_name'=>$procedure_info->category_name ?? 'Other Un-classified Surgical Procedures','option_id'=>$procedure_info->option_id ?? '98','option_name'=>$procedure_info->option_name ?? 'Others','option_number'=>$procedure_info->option_number ?? 'OT04', 'patient_ids' => $patient_ids]; } } $inpatient_categories = HmisCategory::where('section_number', '3')->select('id','number', 'title')->get()->toArray(); foreach($inpatient_categories as $inpatient_category) { $category_options = HmisCategoryOptions::where('hmis_category_id', $inpatient_category['id'])->select('id','number', 'name')->get()->toArray(); $table_options[] = ['category_id'=>$inpatient_category['id'],'category_name'=>$inpatient_category['title'],'category_number'=>$inpatient_category['number'],'category_options'=>$category_options]; } return view('reports::hmis_reports.108.index', compact('dates','counted_procedures','table_options','page')); } public function hmis_108_radiology_and_imaging(Request $request) { request()->validate([ 'date_from' => 'nullable|date|required_with:date_to', 'date_to' => 'bail|nullable|required_with:date_from|date|after:date_from', ]); $start = !empty($request->date_from)? $request->date_from : Carbon::now()->subMonth()->startOfMonth()->format('Y-m-d'); $end = !empty($request->date_to)? $request->date_to : date("Y-m-t", strtotime($start)); $citizenship = isset($request->type)? $request->type :1; $page = 'radiology and Imaging';$table_options =[]; $dates = $investigation_ids = $ids_count = $counted_investigations =[]; if(empty($request->date_from)){ $dates['last_month'] = date('F', strtotime($start)); $dates['last_year'] = date('Y', strtotime($start)); $dates['days'] = date('t', strtotime($start)); $dates['citizenship'] = $citizenship; }else { $dates['start'] = date('d-M-Y', strtotime($start)); $dates['end'] = date('d-M-Y', strtotime($end)); $dates['days'] = intval((new DateTime($start))->diff(new DateTime($end))->format("%a")); $dates['citizenship'] = $citizenship; } $investigations = OrderedInvestigation::whereBetween('created_at', [$start, $end])->where('inpatient', 1)->get(['id', 'patient_id','episode_id','investigation_id']); foreach($investigations as $investigation) { $ordered_investigations = explode(',', $investigation->investigation_id); foreach ($ordered_investigations as $ordered_investigation) if(!empty($ordered_investigation)) { $investigation_ids[] =$ordered_investigation; $ids_count[] = ['id' => $investigation->id, 'patient_id' => $investigation->patient_id, 'episode_id' => $investigation->episode_id, 'investigation_id' => $ordered_investigation]; } } $investigations_count = (!empty($investigation_ids))? array_unique($investigation_ids):[]; foreach($investigations_count as $value){ $investigation_info = DB::table('investigations AS p')->leftJoin('hmis_category_options AS a','a.id', 'p.hmis_no_inpatient') ->leftJoin('hmis_categories AS h','h.id', 'p.hmis_category_inpatient')->where('p.id', $value) ->select('h.id as category_id','h.number as category_number', 'h.title as category_name','a.id as option_id','a.name as option_name','a.number as option_number','p.id','p.name', 'p.hmis_no_inpatient')->first(); if(!empty($investigation_info)) { $male_under_four = $male_over_five = $female_under_four = $female_over_five = 0; $patientIds = $male_under_four_ids = $male_over_five_ids = $female_under_four_ids = $female_over_five_ids = $patients = []; $patient_ids = array_filter($ids_count, function ($item) use ($value) { return $item['investigation_id'] == $value; }); foreach ($patient_ids as $options) $patientIds[]=$options['patient_id']; $patients = Patient::whereIn('id', array_unique($patientIds))->where('citizenship', $citizenship)->select('id','date_of_birth', 'gender')->get(); foreach ($patients as $patient){ $age = Carbon::parse($patient->dob)->age; if($age < 4) { if($patient->gender == '1'){ $male_over_five++; $male_over_five_ids[] = $patient->id; } elseif($patient->gender == '2'){ $female_over_five++; $female_over_five_ids[] = $patient->id; } } else{ if($patient->gender == '1'){ $male_under_four++; $male_under_four_ids[] = $patient->id; } elseif($patient->gender == '2'){ $female_under_four++; $female_under_four_ids[] = $patient->id; } } } $counted_investigations[] =[ 'id'=>$value, 'count'=>count(array_unique($patientIds)), 'name'=>$investigation_info->name, 'chosen_option'=>$investigation_info->hmis_no_inpatient ?? 'None', 'category_id'=>$investigation_info->category_id ?? '58','category_number'=>$investigation_info->category_number ?? '3.13', 'category_name'=>$investigation_info->category_name ?? 'Other Un-classified Surgical Procedures','option_id'=>$investigation_info->option_id ?? '98', 'option_name'=>$investigation_info->option_name ?? 'Others', 'female_under_four'=>$female_under_four, 'male_under_four'=>$male_under_four, 'option_number'=>$investigation_info->option_number ?? 'OT04', 'patient_ids' => $patient_ids, 'male_over_five'=>$male_over_five, 'female_under_four_ids' =>$female_under_four_ids, 'male_under_four_ids'=>$male_under_four_ids, 'female_over_five'=>$female_over_five, 'female_over_five_ids'=>$female_over_five_ids, 'male_over_five_ids'=>$male_over_five_ids ]; } } $inpatient_categories = HmisCategory::where('section_number', '5')->select('id','number', 'title')->get()->toArray(); foreach($inpatient_categories as $inpatient_category) { $category_options = HmisCategoryOptions::where('hmis_category_id', $inpatient_category['id'])->select('id','number', 'name')->get()->toArray(); $table_options[] = ['category_id'=>$inpatient_category['id'],'category_name'=>$inpatient_category['title'],'category_number'=>$inpatient_category['number'],'category_options'=>$category_options]; } return view('reports::hmis_reports.108.index', compact('dates','counted_investigations','table_options','page')); } public function hmis_108_admissions_and_deaths (Request $request) { request()->validate([ 'date_from' => 'nullable|date|required_with:date_to', 'date_to' => 'bail|nullable|required_with:date_from|date|after:date_from', ]); $start = !empty($request->date_from)? $request->date_from : Carbon::now()->subMonth()->startOfMonth()->format('Y-m-d'); $end = !empty($request->date_to)? $request->date_to : date("Y-m-t", strtotime($start)); $citizenship = isset($request->type)? $request->type :1; $page = 'Admissions and Deaths by Diagnosis'; $dates = $primary_diagnosis = $other_diagnoses = $patients = $table_options = $dependent_options = $diagnoses_data =[]; if(empty($request->date_from)){ $dates['last_month'] = date('F', strtotime($start)); $dates['last_year'] = date('Y', strtotime($start)); $dates['days'] = date('t', strtotime($start)); $dates['citizenship'] = $citizenship; }else { $dates['start'] = date('d-M-Y', strtotime($start)); $dates['end'] = date('d-M-Y', strtotime($end)); $dates['days'] = intval((new DateTime($start))->diff(new DateTime($end))->format("%a")); $dates['citizenship'] = $citizenship; } $parent_categories = array_unique(HmisCategoryOptions::where('parent_option', '<>','')->pluck('parent_option')->toArray()); $episodes = DB::table('inpatient_info as i')->leftJoin('patients as p', 'i.patient_id','p.id') ->select('i.id','i.patient_id', 'gender', 'date_of_birth as dob','admitted_on', 'outcome_id', 'primary_diagnosis', 'other_diagnoses') ->whereBetween('admitted_on', [$start, $end]) ->where([['gender','<>',''], ['primary_diagnosis','<>',''],['citizenship', $citizenship]]) ->get(); foreach ($episodes as $episode) { $primary_diagnosis[] = $episode->primary_diagnosis; $others = (!empty($episode->other_diagnoses))? unserialize($episode->other_diagnoses):[]; if(!empty($others)) foreach($others as $other) if(!empty($other)) $other_diagnoses[] = $other; $patients[] = ['id'=> $episode->id,'patient_id'=> $episode->patient_id, 'gender'=> $episode->gender, 'age'=> Carbon::parse($episode->dob)->age,'admitted_on'=> $episode->admitted_on, 'outcome_id'=> $episode->outcome_id, 'primary_diagnosis'=> $episode->primary_diagnosis, 'other_diagnoses'=> $others]; } $all_diagnoses = array_unique(array_merge($primary_diagnosis,$other_diagnoses)); $diag = Diagnosis::where([['hmis_category','<>',''],['hmis_no_inpatient','<>','']])->whereIn('id', $all_diagnoses)->select('id','name', 'hmis_no_inpatient','hmis_category','dependent_option')->get(); foreach($diag as $dia) { $diagnosis = $dia->id;$other = []; $primary = array_filter($patients, function ($item) use ($diagnosis) { return $item['primary_diagnosis'] == $diagnosis; }); foreach ($patients as $patient) if(!empty($patient['other_diagnoses']) && in_array($diagnosis, $patient['other_diagnoses'])) $other[] =$patient; $diagnoses_data[]=['id'=>$diagnosis,'name'=>$dia->name, 'hmis_category'=>$dia->hmis_category, 'hmis_category_option'=>$dia->hmis_no_inpatient, 'dependent_option'=>$dia->dependent_option, 'primary'=>$primary, 'other'=>$other]; } $diagnosis_categories = HmisCategory::where('section_number', '6')->select('id','number', 'title')->get()->toArray(); foreach($diagnosis_categories as $diagnosis_category) { $options=[]; $category_options = HmisCategoryOptions::where('hmis_category_id', $diagnosis_category['id'])->select('id','number', 'name')->get()->toArray(); foreach($category_options as $category_option) { $dependent_options = []; if(in_array($category_option['id'], $parent_categories)) $dependent_options = HmisCategoryOptions::where('parent_option', $category_option['id'])->select('id','number', 'name')->get()->toArray(); $options[]=['id'=>$category_option['id'], 'name'=>$category_option['name'], 'number'=>$category_option['number'], 'dependent_options'=>$dependent_options]; } $table_options[] = ['category_id'=>$diagnosis_category['id'],'category_name'=>$diagnosis_category['title'],'category_number'=>$diagnosis_category['number'],'category_options'=>$options, 'dependent_options'=>$dependent_options]; } return view('reports::hmis_reports.108.index', compact('dates','diagnoses_data','table_options','page')); } public function hmis_108_mental_health (Request $request) { request()->validate([ 'date_from' => 'nullable|date|required_with:date_to', 'date_to' => 'bail|nullable|required_with:date_from|date|after:date_from', ]); $start = !empty($request->date_from)? $request->date_from : Carbon::now()->subMonth()->startOfMonth()->format('Y-m-d'); $end = !empty($request->date_to)? $request->date_to : date("Y-m-t", strtotime($start)); $citizenship = isset($request->type)? $request->type :1; $page = 'Mental Health'; $dates = $investigation_ids = $patients = $primary_diagnosis = $table_options = $other_diagnoses = $diagnoses_data =[]; if(empty($request->date_from)){ $dates['last_month'] = date('F', strtotime($start)); $dates['last_year'] = date('Y', strtotime($start)); $dates['days'] = date('t', strtotime($start)); $dates['citizenship'] = $citizenship; }else { $dates['start'] = date('d-M-Y', strtotime($start)); $dates['end'] = date('d-M-Y', strtotime($end)); $dates['days'] = intval((new DateTime($start))->diff(new DateTime($end))->format("%a")); $dates['citizenship'] = $citizenship; } $episodes = DB::table('inpatient_info as i')->leftJoin('patients as p', 'i.patient_id','p.id') ->select('i.id','i.patient_id', 'gender', 'date_of_birth as dob','admitted_on', 'outcome_id', 'primary_diagnosis', 'other_diagnoses') ->whereBetween('admitted_on', [$start, $end]) ->where([['gender','<>',''], ['primary_diagnosis','<>',''], ['citizenship', $citizenship]]) ->get(); foreach ($episodes as $episode) { $primary_diagnosis[] = $episode->primary_diagnosis; $others = (!empty($episode->other_diagnoses))? unserialize($episode->other_diagnoses):[]; if(!empty($others)) foreach($others as $other) if(!empty($other)) $other_diagnoses[] = $other; $patients[] = ['id'=> $episode->id,'patient_id'=> $episode->patient_id, 'gender'=> $episode->gender, 'age'=> Carbon::parse($episode->dob)->age,'admitted_on'=> $episode->admitted_on, 'outcome_id'=> $episode->outcome_id, 'primary_diagnosis'=> $episode->primary_diagnosis, 'other_diagnoses'=> $others]; } $all_diagnoses = array_unique(array_merge($primary_diagnosis,$other_diagnoses)); $diag = Diagnosis::where([['hmis_category','<>',''],['hmis_no_inpatient','<>','']])->whereIn('id', $all_diagnoses)->select('id','name', 'hmis_no_inpatient','hmis_category','dependent_option')->get(); foreach($diag as $dia) { $diagnosis = $dia->id;$other = []; $primary = array_filter($patients, function ($item) use ($diagnosis) { return $item['primary_diagnosis'] == $diagnosis; }); foreach ($patients as $patient) if(!empty($patient['other_diagnoses']) && in_array($diagnosis, $patient['other_diagnoses'])) $other[] =$patient; $diagnoses_data[]=['id'=>$diagnosis,'name'=>$dia->name, 'hmis_category'=>$dia->hmis_category, 'hmis_category_option'=>$dia->hmis_no_inpatient, 'dependent_option'=>$dia->dependent_option, 'primary'=>$primary, 'other'=>$other]; } $diagnosis_categories = HmisCategory::where('section_number', '7')->select('id','number', 'title')->get()->toArray(); foreach($diagnosis_categories as $diagnosis_category) { $options=[]; $category_options = HmisCategoryOptions::where('hmis_category_id', $diagnosis_category['id'])->select('id','number', 'name')->get()->toArray(); foreach($category_options as $category_option) $options[]=['id'=>$category_option['id'], 'name'=>$category_option['name'], 'number'=>$category_option['number']]; $table_options[] = ['category_id'=>$diagnosis_category['id'],'category_name'=>$diagnosis_category['title'],'category_number'=>$diagnosis_category['number'],'category_options'=>$options]; } return view('reports::hmis_reports.108.index', compact('dates','diagnoses_data','table_options','page')); } public function hmis_108_special_services (Request $request) { request()->validate([ 'date_from' => 'nullable|date|required_with:date_to', 'date_to' => 'bail|nullable|required_with:date_from|date|after:date_from', ]); $start = !empty($request->date_from)? $request->date_from : Carbon::now()->subMonth()->startOfMonth()->format('Y-m-d'); $end = !empty($request->date_to)? $request->date_to : date("Y-m-t", strtotime($start)); $citizenship = isset($request->type)? $request->type :1; $page = 'Utilization of Special Services';$table_options =[]; $dates = $investigation_ids = $counted_investigations =[]; if(empty($request->date_from)){ $dates['last_month'] = date('F', strtotime($start)); $dates['last_year'] = date('Y', strtotime($start)); $dates['days'] = date('t', strtotime($start)); $dates['citizenship'] = $citizenship; }else { $dates['start'] = date('d-M-Y', strtotime($start)); $dates['end'] = date('d-M-Y', strtotime($end)); $dates['days'] = intval((new DateTime($start))->diff(new DateTime($end))->format("%a")); $dates['citizenship'] = $citizenship; } return view('reports::hmis_reports.108.index', compact('dates','counted_investigations','table_options','page')); } public function hmis_108_others (Request $request) { request()->validate([ 'date_from' => 'nullable|date|required_with:date_to', 'date_to' => 'bail|nullable|required_with:date_from|date|after:date_from', ]); $start = !empty($request->date_from)? $request->date_from : Carbon::now()->subMonth()->startOfMonth()->format('Y-m-d'); $end = !empty($request->date_to)? $request->date_to : date("Y-m-t", strtotime($start)); $citizenship = isset($request->type)? $request->type :1; $page = 'others'; $dates = $table_options =[];$counter = 0; $alc_male_10_to_19 = $alc_male_over_25 = $alc_male_over_25 = $tob_male_10_to_19=$tob_male_20_to_24=$tob_male_over_25=$alc_female_10_to_19=$alc_female_20_to_24=$alc_female_over_25=$tob_female_10_to_19=$tob_female_20_to_24=$tob_female_over_25 = []; if(empty($request->date_from)){ $dates['last_month'] = date('F', strtotime($start)); $dates['last_year'] = date('Y', strtotime($start)); $dates['days'] = date('t', strtotime($start)); $dates['citizenship'] = $citizenship; }else { $dates['start'] = date('d-M-Y', strtotime($start)); $dates['end'] = date('d-M-Y', strtotime($end)); $dates['days'] = intval((new DateTime($start))->diff(new DateTime($end))->format("%a")); $dates['citizenship'] = $citizenship; } $risky_behaviours = DB::table('inpatient_info as i')->leftJoin('patient_episodes as e', 'i.episode_id','e.id') ->leftJoin('triage as t', 't.id','e.triage_id')->leftJoin('patients as p', 'i.patient_id','p.id') ->select('i.id','i.patient_id', 't.id as triage_id', 't.observations','p.gender', 'p.date_of_birth as dob','admitted_on') ->where([['observations','<>',''],['gender','<>',''],['citizenship', $citizenship]])->whereBetween('i.admitted_on', [$start, $end]) ->orWhere([ ['observations', 'LIKE', '%Alcohol use=High%'], ['observations', 'LIKE', '%Alcohol use=Moderate%'], ['observations', 'LIKE', '%Alcohol use=Low%'], ['observations', 'LIKE', '%Tobacco use=High%'], ['observations', 'LIKE', '%Tobacco use=Moderate%'], ['observations', 'LIKE', '%Tobacco use=Low%'] ]) ->orderBy('patient_id', 'desc') ->get(); foreach($risky_behaviours as $risky_behaviour){ $age = Carbon::parse($risky_behaviour->dob)->age; $observations = explode(',', $risky_behaviour->observations); if($risky_behaviour->gender == '1'){ if($age >9 && $age < 20 && (in_array('Alcohol use=High', $observations) || in_array('Alcohol use=Moderate', $observations) || in_array('Alcohol use=Low', $observations))) $alc_male_10_to_19[] = $risky_behaviour->patient_id; elseif ($age >19 && $age < 25 && (in_array('Alcohol use=High', $observations) || in_array('Alcohol use=Moderate', $observations) || in_array('Alcohol use=Low', $observations))) $alc_male_20_to_24[] = $risky_behaviour->patient_id; elseif ($age > 24 && (in_array('Alcohol use=High', $observations) || in_array('Alcohol use=Moderate', $observations) || in_array('Alcohol use=Low', $observations))) $alc_male_over_25[] = $risky_behaviour->patient_id; elseif($age >9 && $age < 20 && (in_array('Tobacco use=High', $observations) || in_array('Tobacco use=Moderate', $observations) || in_array('Tobacco use=Low', $observations))) $tob_male_10_to_19[] = $risky_behaviour->patient_id; elseif ($age >19 && $age < 25 && (in_array('Tobacco use=High', $observations) || in_array('Tobacco use=Moderate', $observations) || in_array('Tobacco use=Low', $observations))) $tob_male_20_to_24[] = $risky_behaviour->patient_id; elseif ($age > 24 && (in_array('Tobacco use=High', $observations) || in_array('Tobacco use=Moderate', $observations) || in_array('Tobacco use=Low', $observations))) $tob_male_over_25[] = $risky_behaviour->patient_id; }elseif ($risky_behaviour->gender == '2') { if($age >9 && $age < 20 && (in_array('Alcohol use=High', $observations) || in_array('Alcohol use=Moderate', $observations) || in_array('Alcohol use=Low', $observations))) $alc_female_10_to_19[] = $risky_behaviour->patient_id; elseif ($age >19 && $age < 25 && (in_array('Alcohol use=High', $observations) || in_array('Alcohol use=Moderate', $observations) || in_array('Alcohol use=Low', $observations))) $alc_female_20_to_24[] = $risky_behaviour->patient_id; elseif ($age > 24 && (in_array('Alcohol use=High', $observations) || in_array('Alcohol use=Moderate', $observations) || in_array('Alcohol use=Low', $observations))) $alc_female_over_25[] = $risky_behaviour->patient_id; elseif($age >9 && $age < 20 && (in_array('Tobacco use=High', $observations) || in_array('Tobacco use=Moderate', $observations) || in_array('Tobacco use=Low', $observations))) $tob_female_10_to_19[] = $risky_behaviour->patient_id; elseif ($age >19 && $age < 25 && (in_array('Tobacco use=High', $observations) || in_array('Tobacco use=Moderate', $observations) || in_array('Tobacco use=Low', $observations))) $tob_female_20_to_24[] = $risky_behaviour->patient_id; elseif ($age > 24 && (in_array('Tobacco use=High', $observations) || in_array('Tobacco use=Moderate', $observations) || in_array('Tobacco use=Low', $observations))) $tob_female_over_25[] = $risky_behaviour->patient_id; } } $table_options[$counter] = ['alc_male_10_to_19'=>$alc_male_10_to_19,'alc_male_20_to_24'=>$alc_male_over_25,'alc_male_over_25'=>$alc_male_over_25, 'tob_male_10_to_19'=>$tob_male_10_to_19,'tob_male_20_to_24'=>$tob_male_20_to_24,'tob_male_over_25'=>$tob_male_over_25, 'alc_female_10_to_19'=>$alc_female_10_to_19,'alc_female_20_to_24'=>$alc_female_20_to_24,'alc_female_over_25'=>$alc_female_over_25,'tob_female_10_to_19'=>$tob_female_10_to_19,'tob_female_20_to_24'=>$tob_female_20_to_24,'tob_female_over_25'=>$tob_female_over_25]; $counter++; $totals= $diagnosed = $presumptive = $screened = []; $tuberculosis_screenings = DB::table('inpatient_info as i')->leftJoin('patient_episodes as e', 'i.episode_id','e.id') ->leftJoin('triage as t', 't.id','e.triage_id')->leftJoin('patients as p', 'i.patient_id','p.id') ->select('i.id','i.patient_id', 't.id as triage_id', 't.observations','p.gender', 'any_tb_sysmptoms','p.date_of_birth as dob','admitted_on', 'tb_status_assessment') ->where([['any_tb_sysmptoms','<>',''],['gender','<>',''],['tb_status_assessment','<>','']])->whereBetween('i.admitted_on', [$start, $end]) ->orderBy('patient_id', 'desc') ->get()->toArray(); foreach ($tuberculosis_screenings as $key => $tuberculosis_screening) { $age = Carbon::parse($tuberculosis_screening->dob)->age; $totals['total_tb_screened'][] = $tuberculosis_screening->patient_id; if ($tuberculosis_screening->tb_status_assessment == '1') $totals['total_tb_diagnosed'][] = $tuberculosis_screening->patient_id; if ($tuberculosis_screening->any_tb_sysmptoms == '1') $totals['total_tb_presumptive'][] = $tuberculosis_screening->patient_id; if ($age < 10) { if ($tuberculosis_screening->gender == '1') { $screened['male_screened_0_9'][] = $tuberculosis_screening->patient_id; if($tuberculosis_screening->tb_status_assessment == '1') $diagnosed['male_diagnosed_0_9'][] = $tuberculosis_screening->patient_id; if ($tuberculosis_screening->any_tb_sysmptoms == '1') $presumptive['male_presumptive_0_9'][] = $tuberculosis_screening->patient_id; } elseif ($tuberculosis_screening->gender == '2') { $screened['female_screened_0_9'][] = $tuberculosis_screening->patient_id; if($tuberculosis_screening->tb_status_assessment == '1') $diagnosed['female_diagnosed_0_9'][] = $tuberculosis_screening->patient_id; if ($tuberculosis_screening->any_tb_sysmptoms == '1') $presumptive['female_presumptive_0_9'][] = $tuberculosis_screening->patient_id; } } elseif ($age >9 && $age < 15) { if ($tuberculosis_screening->gender == '1') { $screened['male_screened_10_14'][] = $tuberculosis_screening->patient_id; if($tuberculosis_screening->tb_status_assessment == '1') $diagnosed['male_diagnosed_10_14'][] = $tuberculosis_screening->patient_id; if ($tuberculosis_screening->any_tb_sysmptoms == '1') $presumptive['male_presumptive_10_14'][] = $tuberculosis_screening->patient_id; } elseif ($tuberculosis_screening->gender == '2') { $screened['female_screened_10_14'][] = $tuberculosis_screening->patient_id; if($tuberculosis_screening->tb_status_assessment == '1') $diagnosed['female_diagnosed_10_14'][] = $tuberculosis_screening->patient_id; if ($tuberculosis_screening->any_tb_sysmptoms == '1') $presumptive['female_presumptive_10_14'][] = $tuberculosis_screening->patient_id; } }elseif ($age >14 && $age < 20) { if ($tuberculosis_screening->gender == '1') { $screened['male_screened_15_19'][] = $tuberculosis_screening->patient_id; if($tuberculosis_screening->tb_status_assessment == '1') $diagnosed['male_diagnosed_15_19'][] = $tuberculosis_screening->patient_id; if ($tuberculosis_screening->any_tb_sysmptoms == '1') $presumptive['male_presumptive_15_19'][] = $tuberculosis_screening->patient_id; } elseif ($tuberculosis_screening->gender == '2') { $screened['female_screened_15_19'][] = $tuberculosis_screening->patient_id; if($tuberculosis_screening->tb_status_assessment == '1') $diagnosed['female_diagnosed_15_19'][] = $tuberculosis_screening->patient_id; if ($tuberculosis_screening->any_tb_sysmptoms == '1') $presumptive['female_presumptive_15_19'][] = $tuberculosis_screening->patient_id; } } else { if ($tuberculosis_screening->gender == '1') { $screened['male_screened_over_20'][] = $tuberculosis_screening->patient_id; if($tuberculosis_screening->tb_status_assessment == '1') $diagnosed['male_diagnosed_over_20'][] = $tuberculosis_screening->patient_id; if ($tuberculosis_screening->any_tb_sysmptoms == '1') $presumptive['male_presumptive_over_20'][] = $tuberculosis_screening->patient_id; } elseif ($tuberculosis_screening->gender == '2') { $screened['female_screened_over_20'][] = $tuberculosis_screening->patient_id; if($tuberculosis_screening->tb_status_assessment == '1') $diagnosed['female_diagnosed_over_20'][] = $tuberculosis_screening->patient_id; if ($tuberculosis_screening->any_tb_sysmptoms == '1') $presumptive['female_presumptive_over_20'][] = $tuberculosis_screening->patient_id; } } } $table_options[$counter] =['totals'=>$totals, 'diagnosed'=>$diagnosed, 'presumptive'=>$presumptive,'screened'=>$screened]; $counter++; return view('reports::hmis_reports.108.index', compact('dates','table_options','page')); } //HMIS 033b: HEALTH UNIT WEEKLY EPIDEMIOLOGICAL SURVEILLANCE REPORT public function weekly_cases_and_deaths (Request $request){ request()->validate([ 'date_from' => 'nullable|date|required_with:date_to', 'date_to' => 'bail|nullable|required_with:date_from|date|after:date_from', ]); $start = !empty($request->date_from)? Carbon::parse($request->date_from)->startOfDay()->toDateString() : Carbon::now()->subWeek()->startOfWeek()->toDateString(); $end = !empty($request->date_to)? Carbon::parse($request->date_to)->endOfDay()->toDateString() : Carbon::parse($start)->endOfWeek()->toDateString(); $week_number = empty($request->date_to)? idate('W', strtotime($start)):''; $hospital_information = HospitalInformation::find(1); $diagnoses_data = $other_diagnoses_data = []; $diagnoses = [ ['name'=>'Malaria (diagnosed)', 'code'=>'MA', 'icd10'=>['B54', 'B531','B538'],'group'=>'1'], ['name'=>'Dysentery', 'code'=>'DY', 'icd10'=>['A03.9'],'group'=>'1'], ['name'=>'Severe Acute Respiratory Infection (SARI)', 'code'=>'SA', 'icd10'=>['U04'],'group'=>'1'], ['name'=>'Acute Flaccid Paralysis', 'code'=>'AF', 'icd10'=>['A80'],'group'=>'1'], ['name'=>'Adverse Events Following Immunization (AEFI)', 'code'=>'AE', 'icd10'=>['T80'],'group'=>'1'], ['name'=>'Animal Bites (suspected rabies)', 'code'=>'AB', 'icd10'=>['A82'],'group'=>'1'], ['name'=>'Bacterial Meningitis', 'code'=>'MG', 'icd10'=>['KH987'],'group'=>'1'], ['name'=>'Cholera', 'code'=>'CH', 'icd10'=>['A00','A001', 'A009'],'group'=>'1'], ['name'=>'Guinea Worm', 'code'=>'GW', 'icd10'=>['B72'],'group'=>'1'], ['name'=>'Measles', 'code'=>'ME', 'icd10'=>['B05','B050','B051','B052','B053','B054','B0581','B0589', 'B059'],'group'=>'1'], ['name'=>'Neonatal tetanus', 'code'=>'NT', 'icd10'=>['A33', 'A34', 'A35'],'group'=>'1'], ['name'=>'Plague', 'code'=>'PL', 'icd10'=>['A20'],'group'=>'1'], ['name'=>'Typhoid Fever', 'code'=>'TF', 'icd10'=>['A01.0'],'group'=>'1'], ['name'=>'Hepatitis B', 'code'=>'HB', 'icd10'=>['B180', 'B181', 'B191', 'B182', 'B192'],'group'=>'1'], ['name'=>'Rifampicin resistant TB cases', 'code'=>'DR', 'icd10'=>['U50.2'],'group'=>'1'], ['name'=>'Yellow Fever', 'code'=>'YF', 'icd10'=>['A95'],'group'=>'1'], ['name'=>'Other Viral Hemorrhagic Fevers (EVD, MVD, RVF, CCHF)', 'code'=>'VF', 'icd10'=>[],'group'=>'1'], ['name'=>'Leprosy', 'code'=>'LP', 'icd10'=>['A30'],'group'=>'1'], ['name'=>'Anthrax', 'code'=>'AX', 'icd10'=>['A22'],'group'=>'1'], ['name'=>'Maternal death', 'code'=>'MD', 'icd10'=>[],'group'=>'1'], ['name'=>'Macerated Still births', 'code'=>'MB', 'icd10'=>[],'group'=>'1'], ['name'=>'Fresh Still Birth', 'code'=>'FB', 'icd10'=>[],'group'=>'2'], ['name'=>'Early Neonatal deaths 0-7 days', 'code'=>'ND', 'icd10'=>[],'group'=>'1'], ['name'=>'Chikungunya', 'code'=>'CG', 'icd10'=>['A920'],'group'=>'2'], ['name'=>'Dengue', 'code'=>'DG', 'icd10'=>['A90', 'A91'],'group'=>'2'], ['name'=>'Influenza-like Illness', 'code'=>'IL', 'icd10'=>[],'group'=>'2'], ['name'=>'Acute viral hepatitis', 'code'=>'HP', 'icd10'=>['B179'],'group'=>'2'], ['name'=>'Dracunculiasis', 'code'=>'DC', 'icd10'=>['B72'],'group'=>'2'], ['name'=>'Onchocerciasis', 'code'=>'OC', 'icd10'=>['B7300','B7301','B7302','B7309','B731'],'group'=>'2'], ['name'=>'Buruli ulcer', 'code'=>'BU', 'icd10'=>[],'group'=>'2'], ['name'=>'Lymphatic Filariasis', 'code'=>'LF', 'icd10'=>['B74.0','B74.9'],'group'=>'2'], ['name'=>'Noma', 'code'=>'NO', 'icd10'=>[],'group'=>'2'], ['name'=>'Human Influenza due to a new subtype', 'code'=>'HN', 'icd10'=>[],'group'=>'2'], ['name'=>'Severe Acute Respiratory Syndrome (SARS)', 'code'=>'SS', 'icd10'=>['U04.9'],'group'=>'2'], ['name'=>'Smallpox', 'code'=>'SP', 'icd10'=>['B03'],'group'=>'2'], ['name'=>'Diarrhoea with dehydration <5', 'code'=>'DD', 'icd10'=>['A09.0'],'group'=>'2'], ['name'=>'Severe pneumonia <5', 'code'=>'PN', 'icd10'=>[],'group'=>'2'], ['name'=>'Human African Trypanosomiasis', 'code'=>'TX', 'icd10'=>['B569'],'group'=>'2'], ['name'=>'Trachoma', 'code'=>'TR', 'icd10'=>['B940'],'group'=>'2'], ['name'=>'Schistosomiasis', 'code'=>'SC', 'icd10'=>['B650','B651','B652','B658','B659'],'group'=>'2'], ['name'=>'Diphtheria', 'code'=>'DP', 'icd10'=>['A360','A361','A362','A363', 'A369'],'group'=>'2'], ['name'=>'Pertussis (Whooping cough)', 'code'=>'WC', 'icd10'=>['A3700','A3701'],'group'=>'2'], ['name'=>'Brucellosis', 'code'=>'BC', 'icd10'=>['A230','A231','A232','A233','A238','A239','A23.9'],'group'=>'2'], ['name'=>'Kala azar', 'code'=>'KA', 'icd10'=>['B55','B550','B551','B552','B559'],'group'=>'2'], ['name'=>'Nodding Syndrome', 'code'=>'NS', 'icd10'=>[],'group'=>'2'], ['name'=>'Adverse Drug Reactions (ADR)', 'code'=>'AR', 'icd10'=>[],'group'=>'2'], ]; foreach ($diagnoses as $diagnosis) { $diagnosis_ids = !empty($diagnosis['icd10'])? Diagnosis::whereIn('icd10_code', $diagnosis['icd10'])->pluck('id')->toArray():[]; $case_ids = $death_ids =[]; foreach($diagnosis_ids as $id){ $inpatient_episodes = InpatientInfo::whereBetween('admitted_on', [$start, $end])->where(function ($query) use($id) { $query->where('primary_diagnosis', $id)->orWhere('other_diagnoses', 'LIKE', '%'.$id.'%'); })->select('id', 'patient_id', 'primary_diagnosis', 'other_diagnoses', 'outcome_id'); $outpatient_episodes = Consultation::whereBetween('created_at', [$start, $end])->where(function ($query) use($id) { $query->where('primary_diagnosis', $id)->orWhere('other_diagnoses', 'LIKE', '%'.$id.'%'); })->select('id', 'patient_id', 'primary_diagnosis', 'other_diagnoses', 'outcome_id')->union($inpatient_episodes)->get(); foreach ($outpatient_episodes as $episodes){ if(in_array($episodes->primary_diagnosis, $diagnosis_ids)){ if($episodes->outcome_id == '5') $death_ids[] = $episodes->patient_id; $case_ids[] = $episodes->patient_id; } else { $other_ids = unserialize($episodes->other_diagnoses); if(!empty($other_ids[0])) if(in_array($id, $other_ids)) { if($episodes->outcome_id == '5') $death_ids[] = $episodes->patient_id; $case_ids[] = $episodes->patient_id; } } } } if($diagnosis['group'] == '2' && (!empty($case_ids) || !empty($death_ids))) $other_diagnoses_data[] = ['name'=>$diagnosis['name'], 'code'=>$diagnosis['code'], 'deaths'=>array_unique($death_ids), 'cases'=>array_unique($case_ids)]; elseif($diagnosis['group'] == '1') $diagnoses_data[]=['name'=>$diagnosis['name'], 'code'=>$diagnosis['code'], 'deaths'=>array_unique($death_ids), 'cases'=>array_unique($case_ids)]; } $new_attendance = $all_attendances = $rdt_data = $tb_episodes = $tb_data = []; $attendances = Triage::whereBetween('created_at', [$start, $end])->select('patient_id', 're_attendance', 'new_attendance','any_tb_sysmptoms', 'episode_id')->get(); $rdt_tests = Consultation::whereBetween('consultations.created_at', [$start, $end])->whereIn('rdt', [0,1])->leftJoin('treatments', 'treatments.episode_id','consultations.episode_id')->select('consultations.patient_id', 'dispense_status', 'rdt')->get(); foreach ($attendances as $attendance) { if($attendance->new_attendance == '1') $new_attendance[] = $attendance->patient_id; $all_attendances[] = $attendance->patient_id; if(!is_null($attendance->any_tb_sysmptoms)) { if($attendance->any_tb_sysmptoms == '1') $tb_presumptive[] = $attendance->patient_id; $tb_cases[] = $attendance->patient_id; $tb_episodes[] = $attendance->episode_id; } } foreach ($rdt_tests as $rdt_test) { $rdt_cases[] = $rdt_test->patient_id; if(!empty($rdt_test->rdt)) { $positive_rdt[] = $rdt_test->patient_id; if($rdt_test->dispense_status == '1') $positive_rdt_treated[] = $rdt_test->patient_id; } elseif ($rdt_test->rdt =='0' && $rdt_test->dispense_status == '1') $negative_rdt_treated[] = $rdt_test->patient_id; } if (!empty($tb_episodes)) { $episodes=[]; $episodes[] =Consultation::whereIn('consultations.episode_id', $tb_episodes)->leftJoin('treatments', 'treatments.episode_id','consultations.episode_id')->select('consultations.patient_id', 'dispense_status', 'tb_status_assessment')->get()->toArray(); $episodes[] =InpatientInfo::whereIn('inpatient_info.episode_id', $tb_episodes)->leftJoin('treatments', 'treatments.episode_id','inpatient_info.episode_id')->select('inpatient_info.patient_id', 'dispense_status', 'tb_status_assessment')->get()->toArray(); foreach ($episodes as $episode) { foreach ($episode as $value) { if ($value['tb_status_assessment'] == '1') { $def_tb[] = $value['patient_id']; if ($value['dispense_status'] == '1') $tb_treated[] = $value['patient_id']; } } } } $rdt_data['rdt_cases'] = $rdt_cases ?? []; $rdt_data['positive_rdt'] = $positive_rdt ?? []; $rdt_data['positive_rdt_treated'] = $positive_rdt_treated ?? []; $rdt_data['negative_rdt_treated'] = $negative_rdt_treated ?? []; $tb_data['tb_cases'] = $tb_cases ?? []; $tb_data['tb_presumptive'] = $tb_presumptive ?? []; $tb_data['def_tb'] = $def_tb ?? []; $tb_data['tb_treated'] = $tb_treated ?? []; return view('reports::hmis_reports.033.cases_and_deaths', compact('start','end', 'week_number','hospital_information', 'diagnoses_data', 'other_diagnoses_data', 'new_attendance', 'all_attendances','rdt_data','tb_data')); } public function print_hmis_033b (Request $request){ $diagnoses_data = !empty($request->diagnoses_data)? unserialize($request->diagnoses_data):[]; $other_diagnoses_data = !empty($request->other_diagnoses_data)? unserialize($request->other_diagnoses_data):[]; $start = $request->start; $end = $request->end; $week_number = !empty($request->week_number)? $request->week_number:''; $pdf = SnappyPDF::loadView('reports::hmis_reports.033.print_033b', compact('start','end', 'week_number','diagnoses_data','other_diagnoses_data')) ->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(__('hmis_reports.hmis_108_report_census') . date(" d-m-y h:ia") . '.pdf'); } }