@php $isOpen = in_array($dose->status, ['scheduled', 'due', 'overdue'], true); $courseSize = $dose->vaccine?->doses_required ?? 1; @endphp
@if ($isOpen) @can('immunizations.record') Batch and expiry are the cold-chain record; recording here books dose {{ $dose->dose_number + 1 }} automatically when the course has more to give.
@csrf
@endcan @can('immunizations.record') Refusals, contraindications and missed visits stay on the register with a reason — the course does not silently forget them.
@csrf
@endcan @endif @if ($dose->status === 'administered')
Given at
{{ $dose->administered_at?->format('d M Y H:i') }}
Given by
{{ $dose->administeredBy?->name ?? '—' }}
Batch / expiry
{{ $dose->batch_number }} · {{ $dose->expiry_date?->format('d M Y') }}
Site / route / volume
{{ $dose->site }} · {{ $dose->route }} · {{ $dose->dose_given_ml }} ml
@if ($dose->adverse_reaction)
Adverse reaction
{{ $dose->adverse_reaction }}
@if ($dose->reaction_notes)
{{ $dose->reaction_notes }}
@endif
@endif
@endif @if (in_array($dose->status, ['refused', 'contraindicated', 'missed'], true))

@if ($dose->refusal_reason)

{{ $dose->refusal_reason }}

@endif
@endif @if ($dose->notes)

{{ $dose->notes }}

@endif

{{ $dose->patient?->full_name }}

{{ $dose->patient?->medical_record_number }}

{{ $dose->patient?->age_display }} · {{ $dose->patient?->gender_label }} @if ($dose->patient?->phone) · {{ $dose->patient->phone }} @endif

@if ($dose->patient?->isRestricted())

Restricted record — access is logged.

@endif

{{ $courseSize }} dose{{ $courseSize > 1 ? 's' : '' }} @if ($dose->vaccine?->interval_days) · {{ $dose->vaccine->interval_days }} days apart @endif @if ($dose->vaccine?->schedule_age_label) · due {{ $dose->vaccine->schedule_age_label }} @endif

    @foreach ($course as $entry)
  • Dose {{ $entry->dose_number }} @if ($entry->id === $dose->id) this dose @endif

    @if ($entry->status === 'administered') Given {{ $entry->administered_at?->format('d M Y') }} @if ($entry->administeredBy) by {{ $entry->administeredBy->name }} @endif @elseif (in_array($entry->status, ['refused', 'contraindicated', 'missed'], true)) {{ $entry->scheduled_date?->format('d M Y') }} @else Due {{ $entry->scheduled_date?->format('d M Y') }} @endif

  • @endforeach

Recorded by

{{ $dose->recordedBy?->name ?? '—' }}

@if ($isOpen && $dose->patient?->phone) @can('immunizations.schedule') @if ($dose->reminder_sent)

Reminder sent {{ $dose->reminder_sent_at?->format('d M Y H:i') }}.

@else
@csrf

One reminder per dose — it goes to {{ $dose->patient->phone }}.

@endif @endcan @elseif ($isOpen)

No phone on file — reminders cannot be queued for this patient.

@endif