Files
streamline-emr/docker/_streamline-src/app/Http/Controllers/HomeController.php
T

144 lines
8.3 KiB
PHP
Executable File

<?php
namespace Streamline\Http\Controllers;
use Illuminate\Support\Facades\DB;
use Streamline\Models\InsuranceMember;
use Streamline\Models\MessageBoard;
use Streamline\Models\Patient;
use Streamline\Models\StreamlineSetupStep;
class HomeController extends Controller
{
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('auth');
}
/**
* Show the application dashboard.
*
*/
public function index() {
/*
* -check if it is the first time of using this system then go through the the process of setting up else show the home page
*/
$setup_steps = StreamlineSetupStep::where('completion_status', 1)->orderBy('id')->get();
$last_setup_step = $setup_steps->last();
if (is_null($last_setup_step)){
session()->put(['streamline_setup' => 1]);
return redirect('hospital_information/create');
} elseif ($last_setup_step->step == "hospital registration") {
session()->put(['streamline_setup' => 1]);
return redirect('clinics/create');
} elseif ($last_setup_step->step == "clinics registration") {
session()->put(['streamline_setup' => 1]);
return redirect('wards/create');
} elseif ($last_setup_step->step == "wards registration") {
session()->put(['streamline_setup' => 1]);
return redirect('service_items/create');
} elseif ($last_setup_step->step == "services registration") {
session()->put(['streamline_setup' => 1]);
return redirect('investigations/create');
} elseif ($last_setup_step->step == "investigations registration") {
session()->put(['streamline_setup' => 1]);
return redirect('drugs/create');
} elseif ($last_setup_step->step == "drugs registration") {
session()->put(['streamline_setup' => 1]);
return redirect('procedures/create');
} elseif ($last_setup_step->step == "procedures registration") {
session()->put(['streamline_setup' => 1]);
return redirect('sundries/create');
} elseif ($last_setup_step->step == "general settings configuration") {
session()->forget('streamline_setup');
$messages = MessageBoard::orderBy('created_at', 'desc')->paginate(3);
return view('home', compact('messages'));
} else {
$messages = MessageBoard::orderBy('created_at', 'desc')->paginate(3);
return view('home', compact('messages'));
}
}
public function quick_analysis_reports()
{
$insurance_members_array = InsuranceMember::pluck('patient_id')->toArray();
$patient_registered_per_month_under_insurance = Patient::whereIn('id',$insurance_members_array)->whereBetween('created_at', ['2018-01-01', '2022-12-31'])->select(DB::raw('count(id) as `data`'),DB::raw("DATE_FORMAT(created_at, '%Y-%m') episodes_year_month"))
->groupBy('episodes_year_month')->orderBy('episodes_year_month')->get();
return $patient_registered_per_month_under_insurance;
/* set_time_limit(0);
$patient_visits_per_month = PatientEpisode::select(DB::raw('count(id) as `data`'),DB::raw("DATE_FORMAT(created_at, '%Y-%m') episodes_year_month"))
->groupBy('episodes_year_month')->orderBy('episodes_year_month')->get();
//return $patient_visits_per_month;
$patient_visits_per_month_for_insured = PatientEpisode::whereIn('patient_id',$insurance_members_array)->whereBetween('created_at', ['2019-01-01', '2022-12-31'])->select(DB::raw('count(id) as `data`'),DB::raw("DATE_FORMAT(created_at, '%Y-%m') episodes_year_month"))
->groupBy('episodes_year_month')->orderBy('episodes_year_month')->get();
foreach ($patient_visits_per_month_for_insured as $record) {
$year_month_array = explode("-", $record->episodes_year_month);
$families_array = [];
$per_month_records = PatientEpisode::whereIn('patient_id',$insurance_members_array)->whereYear('created_at', '=', $year_month_array[0])->whereMonth('created_at', '=', $year_month_array[1])->get();
foreach ($per_month_records as $single_record) {
$family_id = get_name($single_record->patient_id, 'patient_id', 'family_id', 'insurance_members');
if (!in_array($family_id, $families_array)) {
$families_array[] = $family_id;
}
}
$total[$record->episodes_year_month] = count($families_array);
}
//return $total;
//mode of co_payments
$service_deposits = DB::select("SELECT patient_amount_paid, occurs FROM (SELECT patient_amount_paid,count(*) as occurs FROM service_deposits WHERE patient_id IN(SELECT patient_id FROM insurance_members) AND patient_amount_paid != 0 AND items_ids != 'Inpatient_Deposit' GROUP BY `patient_amount_paid` LIMIT 1) T1 ");
$treatment_deposits = DB::select("SELECT patient_amount_paid, occurs FROM (SELECT patient_amount_paid,count(*) as occurs FROM treatment_deposits WHERE patient_id IN(SELECT patient_id FROM insurance_members) AND patient_amount_paid != 0 GROUP BY `patient_amount_paid` LIMIT 1) T1 ");
$investigation_deposits = DB::select("SELECT patient_amount_paid, occurs FROM (SELECT patient_amount_paid,count(*) as occurs FROM investigation_deposits WHERE patient_id IN(SELECT patient_id FROM insurance_members) AND patient_amount_paid != 0 GROUP BY `patient_amount_paid` LIMIT 1) T1 ");
$procedure_deposits = DB::select("SELECT patient_amount_paid, occurs FROM (SELECT patient_amount_paid,count(*) as occurs FROM procedure_deposits WHERE patient_id IN(SELECT patient_id FROM insurance_members) AND patient_amount_paid != 0 GROUP BY `patient_amount_paid` LIMIT 1) T1 ");
$sundry_deposits = DB::select("SELECT patient_amount_paid, occurs FROM (SELECT patient_amount_paid,count(*) as occurs FROM sundries_deposits WHERE patient_id IN(SELECT patient_id FROM insurance_members) AND patient_amount_paid != 0 GROUP BY `patient_amount_paid` LIMIT 1) T1 ");
return [$service_deposits, $treatment_deposits, $investigation_deposits, $procedure_deposits, $sundry_deposits];
//average co_payments
$service_deposits_average = DB::select("SELECT AVG(patient_amount_paid) as average_co_payment FROM service_deposits WHERE patient_id IN(SELECT patient_id FROM insurance_members) AND patient_amount_paid != 0 AND items_ids != 'Inpatient_Deposit' ");
$treatment_deposits_average = DB::select("SELECT AVG(patient_amount_paid) as average_co_payment FROM treatment_deposits WHERE patient_id IN(SELECT patient_id FROM insurance_members) AND patient_amount_paid != 0 ");
$investigation_deposits_average = DB::select("SELECT AVG(patient_amount_paid) as average_co_payment FROM investigation_deposits WHERE patient_id IN(SELECT patient_id FROM insurance_members) AND patient_amount_paid != 0 ");
$procedure_deposits_average = DB::select("SELECT AVG(patient_amount_paid) as average_co_payment FROM procedure_deposits WHERE patient_id IN(SELECT patient_id FROM insurance_members) AND patient_amount_paid != 0 ");
$sundries_deposits_average = DB::select("SELECT AVG(patient_amount_paid) as average_co_payment FROM sundries_deposits WHERE patient_id IN(SELECT patient_id FROM insurance_members) AND patient_amount_paid != 0 ");
return [$service_deposits_average,$treatment_deposits_average,$investigation_deposits_average,$procedure_deposits_average,$sundries_deposits_average];
//average family size stuff
$family_numbers = DB::select("SELECT family_id, occurs FROM (SELECT family_id,count(*) as occurs FROM insurance_members GROUP BY `family_id`) T1 ");
$number_of_occurances = [];
foreach ($family_numbers as $record) {
$number_of_occurances[] = $record->occurs;
}
$counts = array_count_values($number_of_occurances);
arsort($counts);
return $counts; */
//mode of co_payments percentages
$number_of_insured_patients_in_service_deposits = DB::select("SELECT id FROM service_deposits WHERE patient_id IN(SELECT patient_id FROM insurance_members) AND patient_amount_paid ='2000'");
return (count($number_of_insured_patients_in_service_deposits));
}
}