@extends('layouts.app')
@section('title', ($admission->patient->full_name ?? '') . ' | Inpatient')
@section('styles')
@endsection
@section('content')
@php $isDischarged = $admission->status === 'discharged'; @endphp
@if($isDischarged)
Overview
Daily Notes
Medication Chart
MAR
@if(isset($overdueDoses) && $overdueDoses > 0){{ $overdueDoses }} @endif
Orders
Billing
Discharge
{{-- OVERVIEW --}}
Admission
Admitted {{ $admission->admission_date->format('d M Y H:i') }}
Ward {{ $admission->ward->name ?? '-' }}
Bed {{ $admission->bed->bed_number ?? '-' }}
Days {{ $admission->length_of_stay }}
Clinician {{ $admission->clinician->name ?? '-' }}
Clinical
Admission Dx {{ $admission->diagnosis_on_admission ?? '-' }}
Reason {{ $admission->reason ?? '-' }}
Labs {{ $admission->visit?->labOrders?->count() ?? 0 }} orders
Prescriptions {{ $admission->visit?->prescriptions?->count() ?? 0 }} items
Billing
@if($admission->visit?->invoice)
Total KES {{ number_format($admission->visit?->invoice?->total_amount) }}
Paid KES {{ number_format($admission->visit?->invoice?->amount_paid) }}
Balance KES {{ number_format($admission->visit?->invoice?->balance) }}
@else
No invoice
@endif
Latest Note
@if($admission->nursingNotes->first())
{{ $admission->nursingNotes->first()->content }}
{{ $admission->nursingNotes->first()->nurse->name ?? '' }} · {{ $admission->nursingNotes->first()->created_at->format('d M H:i') }}
@else
No notes yet
@endif
{{-- DAILY NOTES (SOAP) --}}
{{-- Add Note Form | Nurse + Clinician only --}}
@if(auth()->user()->hasAnyRole('Nurse','Clinician','Super Admin','Hospital Admin'))
@endif {{-- /note-form guard --}}
{{-- Notes Timeline by Date --}}
@forelse($notesByDate as $date => $notes)
{{ \Carbon\Carbon::parse($date)->format('l, d M Y') }} | Day {{ (int) $admission->admission_date->copy()->startOfDay()->diffInDays(\Carbon\Carbon::parse($date)->startOfDay(), true) + 1 }}
@foreach($notes as $note)
{{ ucfirst(str_replace('_',' ',$note->note_type)) }}
{{ $note->created_at->format('H:i') }} · {{ $note->nurse->name ?? 'Unknown' }}
@if($note->vitals && is_array($note->vitals) && count(array_filter($note->vitals)))
@foreach(['bp'=>'BP','pulse'=>'Pulse','temp'=>'Temp','spo2'=>'SpO2','rr'=>'RR','weight'=>'Wt','rbs'=>'RBS'] as $key => $label)
@if(!empty($note->vitals[$key]))
{{ $label }}: {{ $note->vitals[$key] }}@if($key==='temp')°C @elseif($key==='spo2')% @elseif($key==='pulse') bpm @elseif($key==='rr') /min @elseif($key==='weight') kg @elseif($key==='bp') mmHg @endif
@endif
@endforeach
@endif
{{ $note->content }}
@endforeach
@empty
No notes recorded yet. Add the first progress note above.
@endforelse
{{-- MEDICATION CHART --}}
{{-- Safety warning banner --}}
@if(session('safety_warnings'))
Drug Safety Warnings
@foreach(session('safety_warnings') as $warning)
▸ {{ $warning }}
@endforeach
Re-submit the prescription with the acknowledgement checkbox checked to override.
@endif
@if($admission->visit?->prescriptions?->count())
{{-- Shared Rx action icon-buttons — byte-for-byte the OPD .enc-del-btn look,
reproduced here because this view is outside the .enc-page scope.
Keeps Dispense (green shield-check) and Reverse (amber) identical
across OPD / IPD / ANC / Maternity. --}}
@foreach($admission->visit->prescriptions as $rx)
@php
$freqTimes = ['OD'=>['08:00'],'BD'=>['08:00','20:00'],'TDS'=>['08:00','14:00','20:00'],'QID'=>['06:00','12:00','18:00','00:00'],'STAT'=>['Now'],'Nocte'=>['22:00'],'PRN'=>['As needed']];
$times = $freqTimes[$rx->frequency] ?? ['08:00'];
$hasSchedule = $rx->administrations->count() > 0;
@endphp
{{ $rx->created_at->format('d M Y') }}
{{ $rx->drug_name }}
{{ $rx->dosage ?? '-' }}
{{ $rx->frequency ?? '-' }}
{{ $rx->route ?? '—' }}
{{ $rx->duration ?? '-' }}
{{ $rx->quantity }}
@if($hasSchedule)
@php $scheduledTimes = $rx->administrations->pluck('scheduled_time')->unique()->sort(); @endphp
@foreach($scheduledTimes as $t)
{{ $t }}
@endforeach
@else
@foreach($times as $t)
{{ $t }}
@endforeach
@endif
@php $rxSC = ['pending'=>'badge-warning','dispensed'=>'badge-success','cancelled'=>'badge-danger']; @endphp
{{ ucfirst($rx->status) }}
@php
$ipdRxLocked = in_array($rx->status, ['dispensed','cancelled']);
$ipdRxCanEdit = !$ipdRxLocked && auth()->user()->hasAnyRole('Clinician','Nurse','Hospital Admin','Super Admin');
@endphp
@if($ipdRxCanEdit)
@endif
{{-- Dispense (green shield-check) & Reverse (amber) — identical
icons to the OPD encounter for cross-module uniformity.
Admin, Clinician or Nurse. --}}
@php
$ipdRxDispensedQty = \App\Models\PharmacyDispense::where('prescription_id', $rx->id)
->whereNull('reversed_at')->sum('quantity_dispensed');
$ipdRxRemainingQty = max(0, ((int) $rx->quantity) - (int) $ipdRxDispensedQty);
$ipdRxClinical = auth()->user()->hasAnyRole('Clinician','Nurse','Hospital Admin','Super Admin');
$ipdRxCanDispense = $ipdRxClinical && !$ipdRxLocked && $rx->drug_item_id && $ipdRxRemainingQty > 0;
@endphp
@if($ipdRxCanDispense)
@csrf
@endif
@if($ipdRxClinical && $ipdRxDispensedQty > 0 && $rx->status !== 'cancelled')
@csrf
@endif
@if($rx->status === 'dispensed' && !$hasSchedule)
@csrf
Generate
@elseif($hasSchedule)
@php
$doneCount = $rx->administrations->whereIn('status',['administered','partially_given'])->count();
$totalCount = $rx->administrations->count();
@endphp
{{ $doneCount }}/{{ $totalCount }} given
@elseif($rx->status === 'pending')
Awaiting pharmacy
@csrf @method('DELETE')✕
@endif
@if($ipdRxCanEdit)
@php
$ipdRxDispensed = \App\Models\PharmacyDispense::where('prescription_id', $rx->id)
->whereNull('reversed_at')->sum('quantity_dispensed');
@endphp
@csrf @method('PATCH')
✎ Editing: {{ $rx->drug_name }}
Drug & price cannot be changed.
@if($ipdRxDispensed > 0)
⚠ Partially dispensed: {{ $ipdRxDispensed }} of {{ $rx->quantity }} unit(s) already given.
Minimum new quantity is {{ $ipdRxDispensed }}
(set qty to {{ $ipdRxDispensed }} to close this prescription out).
@endif
@endif
@endforeach
@endif
@if(auth()->user()->hasAnyRole('Clinician','Super Admin','Hospital Admin'))
@endif {{-- /prescribe guard --}}
{{-- MEDICATION ADMINISTRATION RECORD (MAR) --}}
{{-- Overdue Alert --}}
@if(isset($overdueDoses) && $overdueDoses > 0)
{{ $overdueDoses }} Overdue Dose(s)
Some scheduled doses are past their administration time.
@endif
{{-- Today's Administration Schedule --}}
Today's Medication Administration | {{ now()->format('l, d M Y') }}
@if(isset($todayMAR) && $todayMAR->count())
@foreach($todayMAR as $mar)
@php
$marSC = ['scheduled'=>'badge-warning','administered'=>'badge-success','missed'=>'badge-danger','not_given'=>'badge-gray','partially_given'=>'badge-info'];
$isDue = $mar->is_due;
$isOverdue = $mar->is_overdue;
@endphp
{{ $mar->scheduled_time ? \Carbon\Carbon::createFromFormat('H:i:s', $mar->scheduled_time)->format('h:i A') : '-' }}
@if($isOverdue)OVERDUE @elseif($isDue)DUE @endif
{{ $mar->prescription->drug_name ?? '' }}
{{ $mar->prescription->dosage ?? '-' }}
{{ $mar->prescription->route ?? '—' }}
{{ $mar->dose_number }}
{{ ucfirst(str_replace('_',' ',$mar->status)) }}
{{ $mar->administered_at ? $mar->administered_at->format('H:i') : '-' }}
{{ $mar->nurse->name ?? '-' }}
@if($mar->status === 'scheduled')
@if(auth()->user()->hasAnyRole('Nurse','Clinician','Super Admin','Hospital Admin'))
@csrf @method('PUT')
Administer
Other
@endif {{-- /MAR administer guard --}}
@elseif($mar->comments)
{{ \Illuminate\Support\Str::limit($mar->comments, 20) }}
@endif
@endforeach
@else
No medication schedules for today. Generate schedules from the Medication Chart tab after pharmacy dispenses.
@endif
{{-- Full MAR History --}}
Medication Administration History
@php
$allMAR = \App\Models\MedicationAdministration::with(['prescription','nurse'])
->where('admission_id', $admission->id)
->orderBy('scheduled_date','desc')->orderBy('scheduled_time')
->limit(100)->get()->groupBy(fn($m) => $m->scheduled_date->format('Y-m-d'));
@endphp
@forelse($allMAR as $date => $doses)
{{ \Carbon\Carbon::parse($date)->format('l, d M Y') }}{{ $date === today()->format('Y-m-d') ? ' | TODAY' : '' }}
@foreach($doses as $d)
@php $dSC = ['scheduled'=>'badge-warning','administered'=>'badge-success','missed'=>'badge-danger','not_given'=>'badge-gray','partially_given'=>'badge-info']; @endphp
{{ $d->scheduled_time ? \Carbon\Carbon::createFromFormat('H:i:s',$d->scheduled_time)->format('h:i A') : '-' }}
{{ $d->prescription->drug_name ?? '' }}
{{ $d->prescription->dosage ?? '' }}
{{ ucfirst(str_replace('_',' ',$d->status)) }}
{{ $d->administered_at ? $d->administered_at->format('H:i') : '-' }}
{{ $d->nurse->name ?? '-' }}
{{ $d->comments ?? '-' }}
@endforeach
@empty
No administration records yet.
@endforelse
{{-- MAR Other Action Modal --}}
Record Administration Status
@csrf @method('PUT')
Status *
Administered
Partially Given
Missed
Not Given
Comments / Reason
Save
Cancel
{{-- ORDERS (Lab & Imaging) --}}
Lab Orders
@if($admission->visit?->labOrders?->count())
@foreach($admission->visit->labOrders as $lo)
{{ $lo->test_name }} {{ $lo->urgency }}
@if($lo->result && is_array($lo->result->results))
@php $resData = $lo->result->results; @endphp
@if(isset($resData['generic']))
{{ $resData['generic']['value'] ?? '-' }} {{ $resData['generic']['unit'] ?? '' }}
@else
@foreach($resData as $param)
@if(is_array($param) && isset($param['name']))
{{ $param['short_code'] ?? $param['name'] }}: {{ $param['value'] ?? '-' }} {{ $param['unit'] ?? '' }} @if(!$loop->last), @endif
@endif
@endforeach
@endif
@elseif($lo->result)
{{ $lo->result->results ?? '-' }}
@else - @endif
{{ ucfirst($lo->status) }}
@if(auth()->user()->hasAnyRole('Clinician','Nurse','Super Admin','Hospital Admin') && !in_array($lo->status, ['validated','cancelled','resulted']))
@csrf @method('DELETE')
@else
—
@endif
@endforeach
@endif
@if(auth()->user()->hasAnyRole('Clinician','Super Admin','Hospital Admin'))
@csrf
Routine Urgent
+ Order Lab
@endif {{-- /lab-order guard --}}
Imaging Orders
@if($admission->visit?->imagingRequests?->count())
@foreach($admission->visit->imagingRequests as $ir)
{{ $ir->imaging_type }} {{ $ir->body_part ?? '-' }} {{ ucfirst($ir->status) }}
@if(auth()->user()->hasAnyRole('Clinician','Nurse','Super Admin','Hospital Admin') && !in_array($ir->status, ['reported','cancelled','verified']))
@csrf @method('DELETE')
@else
—
@endif
@endforeach
@endif
@if(auth()->user()->hasAnyRole('Clinician','Super Admin','Hospital Admin'))
@csrf
+ Order
@endif {{-- /imaging-order guard --}}
{{-- BILLING --}}
@php $inv = $admission->visit?->invoice; @endphp
@if($inv)
Total
KES {{ number_format($inv->total_amount) }}
Paid
KES {{ number_format($inv->amount_paid) }}
Balance
KES {{ number_format($inv->balance) }}
{{-- Items --}}
@foreach($inv->items as $item)
@php $isEditable = in_array($item->source_type, ['auto_consultation','lab_order','imaging_request']) && auth()->user()->hasAnyRole('Receptionist','Clinician','Nurse','Triage Nurse','Dental User','Hospital Admin','Super Admin'); @endphp
{{ $item->description }}
{{ $item->category }}
@if($isEditable)
@else
{{ $item->quantity }}
@endif
@if($isEditable)
@else
{{ number_format($item->unit_price) }}
@endif
{{ number_format($item->total) }}
@if($item->source_type === 'prescription')
{{-- Pharmacy items are managed from the Prescriptions section to keep both sides in sync --}}
🔒
@elseif(auth()->user()->hasAnyRole('Receptionist','Clinician','Nurse','Triage Nurse','Dental User','Hospital Admin','Super Admin'))
@csrf @method('DELETE')
@endif
@endforeach
{{-- Manual add | search for services --}}
@if(auth()->user()->hasAnyRole('Receptionist','Clinician','Nurse','Triage Nurse','Dental User','Super Admin','Hospital Admin'))
@csrf
+ Add
@endif
Grand Total KES {{ number_format($inv->total_amount) }}
{{-- Payments --}}
Payments
@foreach($inv->payments as $pay)
{{ str_replace('_',' ',$pay->payment_method) }}
{{ $pay->description ?? '' }}
KES {{ number_format($pay->amount) }}
{{ $pay->reference_number ?? '' }}
@if(auth()->user()->hasAnyRole('Super Admin','Hospital Admin','Receptionist','Clinician','Nurse','Triage Nurse'))
@csrf @method('DELETE')
@endif
@endforeach
@if(auth()->user()->hasAnyRole('Receptionist','Clinician','Nurse','Triage Nurse','Dental User','Super Admin','Hospital Admin'))
@php
// SHA detection — same convention used by OPD/ANC/Dental/Maternity:
// identify SHA by company code 'SHA' (stable) rather than display
// name (mutable). $ipdShaName is the exact NAME value that the
// insurance_provider will carry for SHA, and what the
// server resolves back to the InsuranceCompany row on submit.
$ipdShaCompany = \App\Models\InsuranceCompany::where('code', 'SHA')->first();
$ipdShaName = $ipdShaCompany?->name ?? 'SHA (Social Health Authority)';
// Prefill from this patient's existing SHA cover.
// Written on first SHA capture, refreshed on every
// subsequent SHA payment. Auth reference is NOT
// prefilled (per-episode, not per-coverage).
$ipdShaCover = null;
if ($ipdShaCompany && ($admission->visit?->patient_id ?? null)) {
$ipdShaCover = \App\Models\PatientInsurance::where('patient_id', $admission->visit->patient_id)
->where('insurance_company_id', $ipdShaCompany->id)
->where('is_active', true)
->latest()
->first();
}
@endphp
@csrf
Cash M-Pesa Insurance Card Bank Transfer
Select Insurer...
@foreach(\App\Models\InsuranceCompany::where('is_active',true)->orderBy('name')->get() as $ic){{ $ic->name }} @endforeach
KCB Paybill Bingwa Sacco
Pay
{{-- SHA member-identity sub-panel — mirrors the OPD/ANC/Dental --}}
{{-- pattern. Reveals when insurance_provider = SHA. Server --}}
{{-- validates the three mandatory fields when payment_method --}}
{{-- = insurance AND insurer code = 'SHA'. --}}
@endif {{-- /payment guard --}}
Total Paid KES {{ number_format($inv->amount_paid) }}
Balance Due KES {{ number_format($inv->balance) }}
{{-- Print buttons: Invoice | Interim Receipt | Final Receipt
Mirrors the OPD/ANC pattern in resources/views/partials/_payment-section.blade.php.
Kept inline (rather than @including the partial) because IPD has
its own line-items + payments tables above; the partial would
duplicate them. Round 13.
Round 17: Case Summary button removed from the IPD ward at
clinician request. The route and template stay in place for
OPD/ANC, which still uses them via partials/_payment-section. --}}
@php
$ipdVisit = $admission->visit;
$ipdPayments = $inv?->payments ?? collect();
$ipdLastReceipt = $ipdPayments->last()?->receipt;
@endphp
@else
No invoice yet. Orders will auto-generate billing items.
@endif
{{-- DISCHARGE --}}
{{-- Transfer ward --}}
Transfer Ward / Bed
@csrf
New Ward Select... @foreach($wards as $w){{ $w->name }} ({{ $w->availableBeds->count() }}) @endforeach
Bed Select ward first
Reason
Transfer
{{-- Discharge Summary
──────────────────
Two visibility paths:
- Non-clinical roles (Receptionist, Triage Nurse) viewing
an admission that has already been discharged: see a
read-only summary card with a Print button. They can't
edit; they don't see the form. This block is brand-new
for Issue #3.
- Clinicians (Clinician/Super Admin/Hospital Admin): see
the original editable discharge form (whether discharged
or not — the form auto-disables once $isDischarged via
the page-wide read-only toggle). Block unchanged. --}}
@php $canEditDischarge = auth()->user()->hasAnyRole('Clinician','Super Admin','Hospital Admin'); @endphp
@if(!$canEditDischarge && $isDischarged)
@if($admission->discharge_diagnosis)
Final Diagnosis
{{ $admission->discharge_diagnosis }}
@endif
@if($admission->condition_on_discharge)
Condition on Discharge
{{ ucfirst(str_replace('_', ' ', $admission->condition_on_discharge)) }}
@endif
@if($admission->discharge_summary)
Hospital Course
{{ $admission->discharge_summary }}
@endif
@if($admission->discharge_instructions)
Discharge Instructions
{{ $admission->discharge_instructions }}
@endif
@if($admission->follow_up_plan)
Follow-up Plan
{{ $admission->follow_up_plan }}
@endif
@endif
{{-- Discharge Summary | Clinician only --}}
@if(auth()->user()->hasAnyRole('Clinician','Super Admin','Hospital Admin'))
@csrf
{{-- ── AUTO-POPULATED: Patient Demographics ── --}}
Patient Demographics
Name {{ $admission->patient->full_name ?? '' }}
MRN {{ $admission->patient->mrn ?? '' }}
Gender / Age {{ ucfirst($admission->patient->gender ?? '') }} · {{ $admission->patient->age ?? '' }}
Phone {{ $admission->patient->phone ?? '-' }}
@if($admission->patient->id_number)
ID Number {{ $admission->patient->id_number }}
@endif
@if($admission->patient->insuranceCompany)
Insurance {{ $admission->patient->insuranceCompany->name ?? '-' }}
@endif
@if($admission->patient->next_of_kin_name)
Next of Kin {{ $admission->patient->next_of_kin_name }} ({{ $admission->patient->next_of_kin_phone ?? '' }})
@endif
{{-- ── AUTO-POPULATED: Admission Details ── --}}
Admission Details
Admission Date {{ $admission->admission_date->format('d M Y H:i') }}
Ward / Bed {{ $admission->ward->name ?? '' }} · Bed {{ $admission->bed->bed_number ?? '' }}
Length of Stay {{ $admission->length_of_stay }} days
Admitting Clinician {{ $admission->clinician->name ?? '-' }}
Reason for Admission {{ $admission->reason ?? '-' }}
Diagnosis on Admission {{ $admission->diagnosis_on_admission ?? '-' }}
{{-- ── AUTO-POPULATED: Diagnoses ── --}}
Diagnoses
Admission Diagnosis {{ $admission->diagnosis_on_admission ?? '-' }}
@if($admission->visit?->consultation?->diagnosis)
Consultation Diagnosis {{ $admission->visit->consultation->diagnosis }}
@endif
{{-- ── AUTO-POPULATED: Investigations with Results ── --}}
Investigations & Results
@if($admission->visit?->labOrders?->count() || $admission->visit?->imagingRequests?->count())
@if($admission->visit->labOrders->count())
@foreach($admission->visit->labOrders as $lo)
{{ $lo->test_name ?? ($lo->labTest->name ?? '-') }}
@if($lo->result && is_array($lo->result->results))
@php $res = $lo->result->results; @endphp
@if(isset($res['generic']))
{{ $res['generic']['value'] ?? '-' }} {{ $res['generic']['unit'] ?? '' }}
@else
@foreach($res as $param)
@if(is_array($param) && isset($param['name']))
{{ $param['short_code'] ?? $param['name'] }}: {{ $param['value'] ?? '-' }} {{ $param['unit'] ?? '' }} @if(!$loop->last), @endif
@endif
@endforeach
@endif
@if($lo->result->is_critical) CRITICAL @elseif($lo->result->is_abnormal) ABN @endif
@elseif($lo->result)
{{ $lo->result->results ?? '-' }}
@else - @endif
{{ $lo->result->reference_range ?? '-' }}
{{ $lo->result->remarks ?? '-' }}
{{ ucfirst($lo->status) }}
@endforeach
@endif
@if($admission->visit->imagingRequests->count())
@foreach($admission->visit->imagingRequests as $ir)
{{ $ir->imaging_type }}
{{ $ir->body_part ?? '-' }}
{{ $ir->report ? \Illuminate\Support\Str::limit($ir->report->findings, 100) : '–' }}
{{ $ir->report->impression ?? '-' }}
{{ ucfirst($ir->status) }}
@endforeach
@endif
@else
No investigations ordered during this admission.
@endif
{{-- ── AUTO-POPULATED: Procedures ── --}}
Procedures
@php
$procedureNotes = $admission->nursingNotes->where('note_type', 'procedure');
@endphp
@if($procedureNotes->count())
@foreach($procedureNotes as $pn)
{{ $pn->created_at->format('d M Y H:i') }} · {{ $pn->nurse->name ?? '' }} {{ $pn->content }}
@endforeach
@else
No procedures recorded.
@endif
{{-- ── AUTO-POPULATED: Inpatient Medications ── --}}
Inpatient Medications
@if($admission->visit?->prescriptions?->count())
@foreach($admission->visit->prescriptions as $rx)
{{ $rx->drug_name }}
{{ $rx->dosage ?? '-' }}
{{ $rx->frequency ?? '-' }}
{{ $rx->route ?? '—' }}
{{ $rx->duration ?? '-' }}
{{ ucfirst($rx->status) }}
@endforeach
@else
No medications prescribed during admission.
@endif
{{-- ═══ CLINICIAN INPUT SECTION ═══ --}}
Clinician to Complete
Clinical Summary / Hospital Course *
{{ old('discharge_summary', $admission->discharge_summary) }}
Final Diagnosis *
Condition at Discharge *
condition_on_discharge)==='improved'?'selected':'' }}>Improved
condition_on_discharge)==='stable'?'selected':'' }}>Stable
condition_on_discharge)==='deteriorated'?'selected':'' }}>Deteriorated
condition_on_discharge)==='absconded'?'selected':'' }}>Absconded
condition_on_discharge)==='deceased'?'selected':'' }}>Deceased
Discharge Instructions
{{ old('discharge_instructions', $admission->discharge_instructions ?? '') }}
Follow-up Plan
{{ old('follow_up_plan', $admission->follow_up_plan ?? '') }}
{{-- Discharge Medications (clinician picks which dispensed meds are take-home) --}}
Take-Home Medications
(tick dispensed meds the patient should take home — leave unchecked for inpatient-only items like IV fluids, STAT injections, or PRN gloves/syringes)
@if($admission->visit?->prescriptions?->count())
@php
$dispensedRx = $admission->visit->prescriptions->where('status', 'dispensed');
$pendingRx = $admission->visit->prescriptions->where('status', '!=', 'dispensed');
@endphp
@foreach($dispensedRx as $rx)
is_take_home ?? false) ? 'checked' : '' }}
class="w-4 h-4 text-purple-600 rounded border-gray-300 focus:ring-purple-500">
{{ $rx->drug_name }}
{{ $rx->dosage ?? '' }}{{ $rx->frequency ? ' · ' . $rx->frequency : '' }}{{ $rx->duration ? ' · ' . $rx->duration : '' }}
Dispensed
@endforeach
@if($pendingRx->count())
{{-- Non-dispensed meds: shown read-only for context, cannot be ticked --}}
@foreach($pendingRx as $rx)
{{-- spacer to align with checkbox column --}}
{{ $rx->drug_name }}
{{ $rx->dosage ?? '' }}{{ $rx->frequency ? ' · ' . $rx->frequency : '' }}{{ $rx->duration ? ' · ' . $rx->duration : '' }}
{{ ucfirst($rx->status) }}
@endforeach
@endif
@if($pendingRx->count())
⚠ {{ $pendingRx->count() }} medication(s) not yet dispensed — ensure pharmacy completes them before discharge, or they can't be given as take-home meds.
@endif
Tip: Only ticked medications will appear on the printed discharge summary's "Medications on Discharge" list.
@else
No prescriptions recorded. Add take-home meds from the Medication Chart tab first.
@endif
@php $dischargeBalance = $admission->visit?->invoice?->balance ?? 0; @endphp
{{-- Save Draft button — always available, doesn't require validation --}}
💾 Save Draft
@if($dischargeBalance > 0)
Outstanding Balance: KES {{ number_format($dischargeBalance) }}
Bill must be cleared before discharge. Go to Billing tab to record payment.
Discharge Patient
@else
Discharge Patient
✓ Bill cleared
@endif
@else
Patient not yet discharged.
The discharge summary will be available to print here once the attending clinician completes the discharge.
@endif {{-- /discharge guard --}}
@endsection
@section('scripts')
@include('partials._tab-state-helper', ['defaultTab' => 'overview'])
@endsection