Files
streamline-emr/docker/streamline-src/Modules/Maternity/Http/Controllers/MaternityController.php
T

2991 lines
173 KiB
PHP
Executable File

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