Show nursing care on patient chart for floor nurses.
Deploy Ladill Care / deploy (push) Successful in 1m11s

Nurses without consult rights see unit placement, MAR, nursing assessments, and meds/labs instead of the GP consult/pathways toolkit.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
isaacclad
2026-07-20 16:24:55 +00:00
co-authored by Cursor
parent 2bfaa9af4a
commit d4b645d85b
3 changed files with 278 additions and 84 deletions
+61 -11
View File
@@ -193,33 +193,83 @@ class PatientController extends Controller
if ($assessmentsEnabled) {
$careFeatures->ensureAssessmentCatalog();
}
$isNurseStation = $permissions->can($member, 'nursing.station.view');
$canConsult = $permissions->can($member, 'consultations.manage');
$canViewLab = $permissions->can($member, 'lab.view') || $permissions->can($member, 'lab.results.view');
$canViewRx = $permissions->can($member, 'prescriptions.view') || $permissions->can($member, 'prescriptions.manage');
$canViewBills = $permissions->can($member, 'bills.view');
$canViewMar = $permissions->can($member, 'mar.view') || $permissions->can($member, 'mar.manage');
$canViewAssessments = $assessmentsEnabled && $permissions->can($member, 'assessments.view');
$canCaptureAssessment = $assessmentsEnabled && (
// GP instruments / pathways CTAs stay consult-gated; nurses capture via unit boards.
$canCaptureAssessment = $assessmentsEnabled && $canConsult && (
$permissions->can($member, 'assessments.capture')
|| $permissions->can($member, 'assessments.manage')
);
$canViewPathways = $canConsult && $permissions->can($member, 'pathways.manage');
$recentAssessments = collect();
$latestUniversalIntake = null;
$nursingAssessments = collect();
$activePlacedVisit = null;
$latestVitals = null;
if ($canViewAssessments) {
$branchScope = app(OrganizationResolver::class)->branchScope($member);
$recentAssessments = $patient->assessments()
$assessmentQuery = $patient->assessments()
->with('template')
->when($branchScope, fn ($q) => $q->where('branch_id', $branchScope))
->orderByDesc('created_at')
->limit(10)
->get();
->orderByDesc('created_at');
$latestUniversalIntake = $patient->assessments()
->with(['template', 'answers.question'])
->when($branchScope, fn ($q) => $q->where('branch_id', $branchScope))
->whereHas('template', fn ($q) => $q->where('code', 'universal_intake'))
->whereIn('status', [\App\Models\Assessment::STATUS_DRAFT, \App\Models\Assessment::STATUS_COMPLETED])
->orderByDesc('created_at')
if ($isNurseStation && ! $canConsult) {
$nursingAssessments = (clone $assessmentQuery)
->whereHas('template', fn ($q) => $q->whereIn(
'code',
\App\Services\Care\NursingAssessmentService::NURSING_PACK_CODES,
))
->limit(10)
->get();
} else {
$recentAssessments = (clone $assessmentQuery)->limit(10)->get();
$latestUniversalIntake = $patient->assessments()
->with(['template', 'answers.question'])
->when($branchScope, fn ($q) => $q->where('branch_id', $branchScope))
->whereHas('template', fn ($q) => $q->where('code', 'universal_intake'))
->whereIn('status', [\App\Models\Assessment::STATUS_DRAFT, \App\Models\Assessment::STATUS_COMPLETED])
->orderByDesc('created_at')
->first();
}
}
if ($isNurseStation) {
$activePlacedVisit = $patient->visits()
->whereIn('status', [Visit::STATUS_OPEN, Visit::STATUS_IN_PROGRESS])
->whereNotNull('care_unit_id')
->with(['careUnit', 'bed'])
->orderByDesc('placed_at')
->first();
if ($activePlacedVisit) {
$latestVitals = \App\Models\VisitVital::owned($this->ownerRef($request))
->where('visit_id', $activePlacedVisit->id)
->orderByDesc('recorded_at')
->first();
}
}
return view('care.patients.show', array_merge($dashboard, [
'canManage' => $canManage,
'isNurseStation' => $isNurseStation,
'canConsult' => $canConsult,
'canViewLab' => $canViewLab,
'canViewRx' => $canViewRx,
'canViewBills' => $canViewBills,
'canViewMar' => $canViewMar,
'canViewPathways' => $canViewPathways,
'activePlacedVisit' => $activePlacedVisit,
'latestVitals' => $latestVitals,
'nursingAssessments' => $nursingAssessments,
'messagingSmsReady' => $suiteSmsReady || $credential->hasValidSms(),
'messagingEmailReady' => $suiteEmailReady || $credential->hasValidBird(),
'suiteMessagingReady' => $suiteEmailReady || $suiteSmsReady,