Files
streamline-emr/docker/streamline-src/app/Http/Controllers/HomeController.php
T
alec.turner a424394109 Build modified streamline images
The official image from streamline does not currently work for the arm64
platform. As a temporary measure, the source code and docker build scripts
have been lifted from the official images and are used to build locally.

Some additional modifications are made to reduce overall image size, these
are documented in docker/README.md
2024-03-10 16:17:50 -07:00

148 lines
8.5 KiB
PHP
Executable File

<?php
namespace Streamline\Http\Controllers;
use Illuminate\Http\Request;
use flash;
use Auth;
use Streamline\Models\MessageBoard;
use Streamline\Models\HospitalInformation;
use Streamline\Models\PatientEpisode;
use Streamline\Models\StreamlineSetupStep;
use DB;
class HomeController extends Controller
{
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('auth');
}
/**
* Show the application dashboard.
*
* @return \Illuminate\Http\Response
*/
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 = \Streamline\Models\InsuranceMember::pluck('patient_id')->toArray();
$patient_registered_per_month_under_insurance = \Streamline\Models\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 = \Streamline\Models\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 = \Streamline\Models\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 = \Streamline\Models\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));
}
}