@extends('layouts.app') @section('title', 'Dispense | ' . ($visit->patient->full_name ?? '')) @section('content') {{-- ═══ Drug Safety Warnings Banner ═══ --}} @if(session('safety_warnings'))

Drug Safety Warnings | Review Required

    @foreach(session('safety_warnings') as $warning)
  • {{ $warning }}
  • @endforeach
@csrf @if(session('pending_prescription_id')) @endif
@endif {{-- ═══ Payment Block Banner ═══ --}} @if(session('payment_block') && !session('payment_block')['allowed']) @php $pb = session('payment_block'); @endphp

Payment Verification Failed

{{ $pb['message'] }}

@if($isAdmin)
@csrf @if(session('pending_prescription_id')) @endif
@else

Only Hospital Admin can override payment blocks. Ask the patient to settle their bill first.

@endif
@endif {{-- ═══ Bulk Payment Blocks Banner ═══ --}} @if(session('payment_blocks'))

Payment Verification Failed | Multiple Items

@if($isAdmin)
@csrf
@else

Only Hospital Admin can override payment blocks.

@endif
@endif
Back to Queue

Dispensing Workspace

{{-- LEFT PANEL --}}
{{ strtoupper(substr($visit->patient->full_name ?? 'P', 0, 2)) }}

{{ $visit->patient->full_name ?? '' }}

{{ $visit->patient->mrn ?? '' }} · {{ $visit->patient->gender ?? '' }} · {{ $visit->patient->age ?? '' }}

Visit{{ $visit->visit_number }}
Type @php $isIPD = strtoupper($visit->visit_type ?? '') === 'IPD' || in_array($visit->status,['admitted','pending_admission']); @endphp {{ $isIPD ? 'IPD' : 'OPD' }}
Payment{{ ucfirst($visit->payment_mode ?? 'Cash') }}
{{-- Invoice summary --}} @if($visit->invoice) @php $inv = $visit->invoice; @endphp

Invoice

TotalKES {{ number_format($inv->total_amount) }}
PaidKES {{ number_format($inv->amount_paid) }}
BalanceKES {{ number_format($inv->balance) }}
@if($inv->financial_hold)

⛔ Financial Hold

{{ ucfirst(str_replace('_',' ',$inv->hold_reason ?? '')) }}

@endif
@endif {{-- Allergies --}} @if($visit->patient->allergies && count($visit->patient->allergies))

⚠ Allergies

{{ implode(', ', $visit->patient->allergies) }}

@endif
{{-- Actions Panel --}}

Actions

@csrf
{{-- Financial hold controls (Admin/Finance only) --}} @if($isAdmin || auth()->user()->hasRole('Finance User')) @if($visit->invoice)

Financial Hold

@if($visit->invoice?->financial_hold)
@csrf
@else @endif
@endif @endif
{{-- CENTER PANEL: Prescription Items --}}

Prescription Items

{{ $prescriptions->count() }} item(s)
@foreach($prescriptions as $rx) @php $drug = $rx->drugItem; $batches = $drug ? $drug->batches()->where('quantity_remaining', '>', 0)->where('expiry_date', '>', now())->orderBy('expiry_date')->get() : collect(); $stockAvail= $batches->sum('quantity_remaining'); $earliestExpiry = $batches->isNotEmpty() ? $batches->first()->expiry_date : null; $nearExpiry = $earliestExpiry && $earliestExpiry->diffInDays(now(), false) >= -30 && $earliestExpiry->isFuture(); $alreadyDispensed = \App\Models\PharmacyDispense::where('prescription_id', $rx->id) ->whereNull('reversed_at')->sum('quantity_dispensed'); $balance = max(0, $rx->quantity - $alreadyDispensed); $auth = $authResults[$rx->id] ?? ['allowed' => true, 'status' => 'allowed', 'message' => '']; @endphp

{{ $rx->drug_name }}

{{ $rx->dosage }} · {{ $rx->frequency }} · {{ $rx->duration }} · Route: {{ $rx->route ?? 'Oral' }}

@if($rx->instructions)

{{ $rx->instructions }}

@endif

Prescribed

{{ $rx->quantity }}

@if($alreadyDispensed > 0)

Already Given

{{ $alreadyDispensed }}

Balance

{{ $balance }}

@endif

In Stock

{{ $stockAvail }}

{{-- Partial dispense banner --}} @if($alreadyDispensed > 0 && $rx->status !== 'dispensed')
{{ $alreadyDispensed }} of {{ $rx->quantity }} already dispensed · {{ $balance }} remaining to give.
@endif {{-- Near-expiry stock warning --}} @if($nearExpiry && $rx->status !== 'dispensed' && $stockAvail > 0)
Earliest stock expires {{ $earliestExpiry->format('d M Y') }} ({{ $earliestExpiry->diffForHumans() }}) — dispense soon.
@endif @if($rx->status === 'dispensed')
Dispensed
@elseif($stockAvail <= 0)
Out of Stock | No valid batches
@else {{-- Payment auth status badge --}} @if($auth['status'] === 'allowed_with_warning')
⚠ {{ $auth['message'] }}
@elseif(!$auth['allowed'])

⛔ Payment Verification Required

{{ $auth['message'] }}

@if($isAdmin)
Admin Override ▾
@csrf
@else

Ask patient to pay at cashier, then refresh this page.

@endif
@endif {{-- Normal dispense form | only rendered if auth allows --}} @if($auth['allowed'])
@csrf

Earliest expiry: {{ $earliestExpiry?->format('M Y') ?? '—' }}. Stock is auto-deducted from oldest first.

@endif @endif
@endforeach
{{-- Financial Hold Modal --}} @endsection