Add full Vaccination, Pathology, and Infusion specialty clinical suites.
Deploy Ladill Care / deploy (push) Successful in 34s
Deploy Ladill Care / deploy (push) Successful in 34s
Mirror Oncology-depth stage flows, workspace controllers, clinical forms, reports/print, demo seed, and suite tests. Pathology stays clinic specialty complementary to the Lab app. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -0,0 +1,31 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Infusion summary · {{ $patient->fullName() }}</title>
|
||||
<style>
|
||||
body { font-family: system-ui, sans-serif; color: #0f172a; margin: 2rem; }
|
||||
h1 { font-size: 1.25rem; margin: 0 0 .25rem; }
|
||||
h2 { font-size: .95rem; margin: 1.25rem 0 .5rem; border-bottom: 1px solid #e2e8f0; padding-bottom: .25rem; }
|
||||
.meta { color: #64748b; font-size: .875rem; }
|
||||
dl { display: grid; grid-template-columns: 10rem 1fr; gap: .35rem .75rem; font-size: .875rem; }
|
||||
dt { color: #64748b; }
|
||||
dd { margin: 0; font-weight: 500; }
|
||||
@media print { .no-print { display: none; } }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<p class="no-print"><a href="{{ route('care.specialty.workspace', ['module' => 'infusion', 'visit' => $visit]) }}">Back</a></p>
|
||||
<h1>{{ $patient->fullName() }}</h1>
|
||||
<p class="meta">{{ $patient->patient_number }} · Visit #{{ $visit->id }} · Stage {{ $visit->specialty_stage ?? '—' }}</p>
|
||||
<h2>Assessment</h2>
|
||||
@if ($assessment)<dl><dt>Indication</dt><dd>{{ $assessment->payload['indication'] ?? '—' }}</dd><dt>Fit</dt><dd>{{ ! empty($assessment->payload['fit_for_infusion']) ? 'Yes' : 'No' }}</dd></dl>@else<p class="meta">No assessment recorded.</p>@endif
|
||||
<h2>Protocol</h2>
|
||||
@if ($protocol)<dl><dt>Medication</dt><dd>{{ $protocol->payload['medication'] ?? '—' }}</dd><dt>Dose</dt><dd>{{ $protocol->payload['dose'] ?? '—' }}</dd><dt>Rate</dt><dd>{{ $protocol->payload['rate'] ?? '—' }}</dd></dl>@else<p class="meta">No protocol recorded.</p>@endif
|
||||
<h2>Session</h2>
|
||||
@if ($session)<dl><dt>Medication</dt><dd>{{ $session->payload['medication'] ?? '—' }}</dd><dt>Start</dt><dd>{{ $session->payload['start_time'] ?? '—' }}</dd><dt>End</dt><dd>{{ $session->payload['end_time'] ?? '—' }}</dd></dl>@else<p class="meta">No session recorded.</p>@endif
|
||||
<h2>Monitoring</h2>
|
||||
@if ($monitoring)<dl><dt>Reaction</dt><dd>{{ $monitoring->payload['reaction'] ?? '—' }}</dd><dt>Outcome</dt><dd>{{ $monitoring->payload['outcome'] ?? '—' }}</dd></dl>@else<p class="meta">No monitoring recorded.</p>@endif
|
||||
<script>window.print();</script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,87 @@
|
||||
<x-app-layout title="Infusion reports">
|
||||
<div class="space-y-6">
|
||||
<div class="flex flex-wrap items-center justify-between gap-3">
|
||||
<div>
|
||||
<h1 class="text-xl font-semibold text-slate-900">Infusion reports</h1>
|
||||
<p class="mt-1 text-sm text-slate-500">Arrivals, open sessions, medications, reactions, length of stay, and infusion revenue.</p>
|
||||
</div>
|
||||
<a href="{{ route('care.specialty.show', 'infusion') }}" class="text-sm font-medium text-indigo-600">← Specialty home</a>
|
||||
</div>
|
||||
|
||||
<form method="GET" class="flex flex-wrap items-end gap-3 rounded-2xl border border-slate-200 bg-white p-4">
|
||||
<div>
|
||||
<label class="block text-xs font-medium text-slate-600">From</label>
|
||||
<input type="date" name="from" value="{{ $report['from'] ?? '' }}" class="mt-1 rounded-xl border border-slate-200 px-3 py-2 text-sm">
|
||||
</div>
|
||||
<div>
|
||||
<label class="block text-xs font-medium text-slate-600">To</label>
|
||||
<input type="date" name="to" value="{{ $report['to'] ?? '' }}" class="mt-1 rounded-xl border border-slate-200 px-3 py-2 text-sm">
|
||||
</div>
|
||||
<button type="submit" class="rounded-xl bg-indigo-600 px-4 py-2 text-sm font-semibold text-white">Apply</button>
|
||||
</form>
|
||||
|
||||
<div class="grid gap-4 sm:grid-cols-4">
|
||||
<div class="rounded-2xl border border-slate-200 bg-white p-4">
|
||||
<p class="text-xs font-semibold uppercase tracking-wide text-slate-500">Arrivals today</p>
|
||||
<p class="mt-2 text-2xl font-semibold tabular-nums text-slate-900">{{ number_format($report['arrivals_today']) }}</p>
|
||||
</div>
|
||||
<div class="rounded-2xl border border-slate-200 bg-white p-4">
|
||||
<p class="text-xs font-semibold uppercase tracking-wide text-slate-500">Completed today</p>
|
||||
<p class="mt-2 text-2xl font-semibold tabular-nums text-slate-900">{{ number_format($report['completed_today']) }}</p>
|
||||
</div>
|
||||
<div class="rounded-2xl border border-slate-200 bg-white p-4">
|
||||
<p class="text-xs font-semibold uppercase tracking-wide text-slate-500">Sessions open</p>
|
||||
<p class="mt-2 text-2xl font-semibold tabular-nums text-rose-700">{{ number_format($report['sessions_open']) }}</p>
|
||||
</div>
|
||||
<div class="rounded-2xl border border-slate-200 bg-white p-4">
|
||||
<p class="text-xs font-semibold uppercase tracking-wide text-slate-500">Avg LOS (range)</p>
|
||||
<p class="mt-2 text-2xl font-semibold tabular-nums text-slate-900">
|
||||
{{ $report['avg_los_minutes'] !== null ? $report['avg_los_minutes'].' min' : '—' }}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="grid gap-4 lg:grid-cols-2">
|
||||
<section class="rounded-2xl border border-slate-200 bg-white p-5">
|
||||
<h2 class="text-sm font-semibold text-slate-900">Medications / regimens</h2>
|
||||
<ul class="mt-3 space-y-2 text-sm">
|
||||
@forelse ($report['medication_breakdown'] as $row)
|
||||
<li class="flex justify-between gap-3">
|
||||
<span>{{ $row['medication'] }}</span>
|
||||
<span class="tabular-nums text-slate-600">{{ $row['total'] }}</span>
|
||||
</li>
|
||||
@empty
|
||||
<li class="text-slate-500">No sessions in range.</li>
|
||||
@endforelse
|
||||
</ul>
|
||||
</section>
|
||||
<section class="rounded-2xl border border-slate-200 bg-white p-5">
|
||||
<h2 class="text-sm font-semibold text-slate-900">Reactions</h2>
|
||||
<ul class="mt-3 space-y-2 text-sm">
|
||||
@forelse ($report['reaction_breakdown'] as $row)
|
||||
<li class="flex justify-between gap-3">
|
||||
<span>{{ $row['reaction'] }}</span>
|
||||
<span class="tabular-nums text-slate-600">{{ $row['total'] }}</span>
|
||||
</li>
|
||||
@empty
|
||||
<li class="text-slate-500">No monitoring records in range.</li>
|
||||
@endforelse
|
||||
</ul>
|
||||
</section>
|
||||
</div>
|
||||
|
||||
<section class="rounded-2xl border border-slate-200 bg-white p-5">
|
||||
<h2 class="text-sm font-semibold text-slate-900">Infusion service revenue</h2>
|
||||
<ul class="mt-3 space-y-2 text-sm">
|
||||
@forelse ($report['revenue_by_service'] as $row)
|
||||
<li class="flex justify-between gap-3">
|
||||
<span>{{ $row->description }} <span class="text-slate-400">×{{ $row->total }}</span></span>
|
||||
<span class="tabular-nums">{{ $currency }} {{ number_format($row->amount_minor / 100, 2) }}</span>
|
||||
</li>
|
||||
@empty
|
||||
<li class="text-slate-500">No billed infusion services in range.</li>
|
||||
@endforelse
|
||||
</ul>
|
||||
</section>
|
||||
</div>
|
||||
</x-app-layout>
|
||||
@@ -0,0 +1,70 @@
|
||||
@php
|
||||
$record = $infusionMonitoring;
|
||||
$payload = $record?->payload ?? [];
|
||||
$canManage = $canManageClinical ?? $canConsult ?? false;
|
||||
@endphp
|
||||
|
||||
<section class="rounded-2xl border border-slate-200 bg-white p-5">
|
||||
<div class="flex flex-wrap items-start justify-between gap-3">
|
||||
<div>
|
||||
<h3 class="text-sm font-semibold text-slate-900">Monitoring</h3>
|
||||
<p class="mt-0.5 text-xs text-slate-500">Completed monitoring can close the infusion visit.</p>
|
||||
</div>
|
||||
<a href="{{ route('care.specialty.infusion.print', $workspaceVisit) }}" target="_blank" class="text-sm font-medium text-indigo-600">Print summary</a>
|
||||
</div>
|
||||
|
||||
@if ($canManage)
|
||||
<form method="POST" action="{{ route('care.specialty.infusion.monitoring', $workspaceVisit) }}" class="mt-4 space-y-4">
|
||||
@csrf
|
||||
<input type="hidden" name="tab" value="monitoring">
|
||||
<div class="grid gap-3 sm:grid-cols-2">
|
||||
@foreach ($clinicalFields ?? [] as $field)
|
||||
@php
|
||||
$name = $field['name'];
|
||||
$value = old('payload.'.$name, $payload[$name] ?? '');
|
||||
$type = $field['type'] ?? 'text';
|
||||
@endphp
|
||||
<div @class(['sm:col-span-2' => in_array($type, ['textarea'], true)])>
|
||||
<label class="block text-xs font-medium text-slate-600">
|
||||
{{ $field['label'] }}
|
||||
@if (! empty($field['required'])) <span class="text-rose-600">*</span> @endif
|
||||
</label>
|
||||
@if ($type === 'textarea')
|
||||
<textarea name="payload[{{ $name }}]" rows="{{ $field['rows'] ?? 3 }}" @required(! empty($field['required']))
|
||||
class="mt-1 w-full rounded-xl border border-slate-200 px-3 py-2 text-sm">{{ $value }}</textarea>
|
||||
@elseif ($type === 'select')
|
||||
<select name="payload[{{ $name }}]" @required(! empty($field['required']))
|
||||
class="mt-1 w-full rounded-xl border border-slate-200 px-3 py-2 text-sm">
|
||||
<option value="">Select…</option>
|
||||
@foreach ($field['options'] ?? [] as $option)
|
||||
<option value="{{ $option }}" @selected((string) $value === (string) $option)>{{ $option }}</option>
|
||||
@endforeach
|
||||
</select>
|
||||
@elseif ($type === 'boolean')
|
||||
<label class="mt-2 inline-flex items-center gap-2 text-sm text-slate-700">
|
||||
<input type="checkbox" name="payload[{{ $name }}]" value="1" @checked(old('payload.'.$name, ! empty($payload[$name])))>
|
||||
Yes
|
||||
</label>
|
||||
@else
|
||||
<input type="{{ $type === 'number' ? 'number' : 'text' }}" name="payload[{{ $name }}]" value="{{ $value }}"
|
||||
@required(! empty($field['required']))
|
||||
class="mt-1 w-full rounded-xl border border-slate-200 px-3 py-2 text-sm">
|
||||
@endif
|
||||
</div>
|
||||
@endforeach
|
||||
</div>
|
||||
<button type="submit" class="btn-primary">Save monitoring</button>
|
||||
</form>
|
||||
@elseif ($record)
|
||||
<dl class="mt-4 grid gap-3 text-sm sm:grid-cols-2">
|
||||
@foreach ($clinicalFields ?? [] as $field)
|
||||
<div>
|
||||
<dt class="text-slate-500">{{ $field['label'] }}</dt>
|
||||
<dd class="font-medium text-slate-900">{{ $payload[$field['name']] ?? '—' }}</dd>
|
||||
</div>
|
||||
@endforeach
|
||||
</dl>
|
||||
@else
|
||||
<p class="mt-4 text-sm text-slate-500">No monitoring recorded yet.</p>
|
||||
@endif
|
||||
</section>
|
||||
@@ -0,0 +1,48 @@
|
||||
@php
|
||||
$assess = $infusionAssessment?->payload ?? [];
|
||||
$proto = $infusionProtocol?->payload ?? [];
|
||||
$sess = $infusionSession?->payload ?? [];
|
||||
$mon = $infusionMonitoring?->payload ?? [];
|
||||
@endphp
|
||||
|
||||
<section class="rounded-2xl border border-slate-200 bg-white p-5">
|
||||
<div class="flex flex-wrap items-start justify-between gap-3">
|
||||
<div>
|
||||
<h3 class="text-sm font-semibold text-slate-900">Infusion overview</h3>
|
||||
<p class="mt-0.5 text-xs text-slate-500">Assessment, protocol, session, and post-infusion monitoring for this episode.</p>
|
||||
</div>
|
||||
<div class="flex flex-wrap gap-3 text-sm">
|
||||
<a href="{{ route('care.specialty.infusion.print', $workspaceVisit) }}" target="_blank" class="font-medium text-indigo-600">Print summary</a>
|
||||
<a href="{{ route('care.specialty.infusion.reports') }}" class="font-medium text-indigo-600">Infusion reports</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="mt-4 grid gap-3 sm:grid-cols-3">
|
||||
<div class="rounded-xl border border-slate-100 bg-slate-50 px-3 py-3">
|
||||
<p class="text-xs font-semibold uppercase tracking-wide text-slate-500">Indication</p>
|
||||
<p class="mt-1 text-sm font-semibold text-slate-900">{{ $assess['indication'] ?? '—' }}</p>
|
||||
<p class="mt-1 text-xs text-slate-500">{{ ! empty($assess['fit_for_infusion']) ? 'Fit for infusion' : '—' }}</p>
|
||||
</div>
|
||||
<div class="rounded-xl border border-slate-100 bg-slate-50 px-3 py-3">
|
||||
<p class="text-xs font-semibold uppercase tracking-wide text-slate-500">Protocol</p>
|
||||
<p class="mt-1 text-sm font-semibold text-slate-900">{{ $proto['medication'] ?? ($sess['medication'] ?? '—') }}</p>
|
||||
<p class="mt-1 text-xs text-slate-500">{{ $proto['dose'] ?? ($sess['dose'] ?? '—') }}</p>
|
||||
</div>
|
||||
<div class="rounded-xl border border-slate-100 bg-slate-50 px-3 py-3">
|
||||
<p class="text-xs font-semibold uppercase tracking-wide text-slate-500">Monitoring</p>
|
||||
<p class="mt-1 text-sm font-semibold text-slate-900">{{ $mon['reaction'] ?? '—' }}</p>
|
||||
<p class="mt-1 text-xs text-slate-500">{{ $mon['outcome'] ?? ($sess['outcome'] ?? '—') }}</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@if (! empty($clinicalAlerts))
|
||||
<div class="mt-4 space-y-1.5 border-t border-slate-100 pt-4">
|
||||
<p class="text-xs font-semibold uppercase tracking-wide text-slate-500">Alerts</p>
|
||||
@foreach ($clinicalAlerts as $alert)
|
||||
<p class="text-sm {{ ($alert['severity'] ?? '') === 'critical' ? 'text-rose-700' : 'text-amber-800' }}">
|
||||
{{ $alert['message'] ?? '' }}
|
||||
</p>
|
||||
@endforeach
|
||||
</div>
|
||||
@endif
|
||||
</section>
|
||||
@@ -0,0 +1,33 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Pathology summary · {{ $patient->fullName() }}</title>
|
||||
<style>
|
||||
body { font-family: system-ui, sans-serif; color: #0f172a; margin: 2rem; }
|
||||
h1 { font-size: 1.25rem; margin: 0 0 .25rem; }
|
||||
h2 { font-size: .95rem; margin: 1.25rem 0 .5rem; border-bottom: 1px solid #e2e8f0; padding-bottom: .25rem; }
|
||||
.meta { color: #64748b; font-size: .875rem; }
|
||||
dl { display: grid; grid-template-columns: 10rem 1fr; gap: .35rem .75rem; font-size: .875rem; }
|
||||
dt { color: #64748b; }
|
||||
dd { margin: 0; font-weight: 500; }
|
||||
@media print { .no-print { display: none; } }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<p class="no-print"><a href="{{ route('care.specialty.workspace', ['module' => 'pathology', 'visit' => $visit]) }}">Back</a></p>
|
||||
<h1>{{ $patient->fullName() }}</h1>
|
||||
<p class="meta">{{ $patient->patient_number }} · Visit #{{ $visit->id }} · Stage {{ $visit->specialty_stage ?? '—' }}</p>
|
||||
<h2>Request</h2>
|
||||
@if ($requestRecord)<dl><dt>Specimen</dt><dd>{{ $requestRecord->payload['specimen_type'] ?? '—' }}</dd><dt>Site</dt><dd>{{ $requestRecord->payload['site'] ?? '—' }}</dd><dt>History</dt><dd>{{ $requestRecord->payload['clinical_history'] ?? '—' }}</dd></dl>@else<p class="meta">No request recorded.</p>@endif
|
||||
<h2>Specimen</h2>
|
||||
@if ($specimen)<dl><dt>Label</dt><dd>{{ $specimen->payload['container_label'] ?? '—' }}</dd><dt>Adequacy</dt><dd>{{ $specimen->payload['adequacy'] ?? '—' }}</dd></dl>@else<p class="meta">No specimen receipt recorded.</p>@endif
|
||||
<h2>Processing</h2>
|
||||
@if ($processing)<dl><dt>Status</dt><dd>{{ $processing->payload['status'] ?? '—' }}</dd><dt>Gross</dt><dd>{{ $processing->payload['gross'] ?? '—' }}</dd></dl>@else<p class="meta">No processing recorded.</p>@endif
|
||||
<h2>Report</h2>
|
||||
@if ($report)<dl><dt>Microscopy</dt><dd>{{ $report->payload['microscopy'] ?? '—' }}</dd><dt>Diagnosis</dt><dd>{{ $report->payload['diagnosis'] ?? '—' }}</dd></dl>@else<p class="meta">No report recorded.</p>@endif
|
||||
<h2>Verification</h2>
|
||||
@if ($verification)<dl><dt>Verified</dt><dd>{{ ! empty($verification->payload['verified']) ? 'Yes' : 'No' }}</dd><dt>Outcome</dt><dd>{{ $verification->payload['outcome'] ?? '—' }}</dd></dl>@else<p class="meta">No verification recorded.</p>@endif
|
||||
<script>window.print();</script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,87 @@
|
||||
<x-app-layout title="Pathology reports">
|
||||
<div class="space-y-6">
|
||||
<div class="flex flex-wrap items-center justify-between gap-3">
|
||||
<div>
|
||||
<h1 class="text-xl font-semibold text-slate-900">Pathology reports</h1>
|
||||
<p class="mt-1 text-sm text-slate-500">Arrivals, open reports, diagnoses, specimens, length of stay, and pathology revenue.</p>
|
||||
</div>
|
||||
<a href="{{ route('care.specialty.show', 'pathology') }}" class="text-sm font-medium text-indigo-600">← Specialty home</a>
|
||||
</div>
|
||||
|
||||
<form method="GET" class="flex flex-wrap items-end gap-3 rounded-2xl border border-slate-200 bg-white p-4">
|
||||
<div>
|
||||
<label class="block text-xs font-medium text-slate-600">From</label>
|
||||
<input type="date" name="from" value="{{ $report['from'] ?? '' }}" class="mt-1 rounded-xl border border-slate-200 px-3 py-2 text-sm">
|
||||
</div>
|
||||
<div>
|
||||
<label class="block text-xs font-medium text-slate-600">To</label>
|
||||
<input type="date" name="to" value="{{ $report['to'] ?? '' }}" class="mt-1 rounded-xl border border-slate-200 px-3 py-2 text-sm">
|
||||
</div>
|
||||
<button type="submit" class="rounded-xl bg-indigo-600 px-4 py-2 text-sm font-semibold text-white">Apply</button>
|
||||
</form>
|
||||
|
||||
<div class="grid gap-4 sm:grid-cols-4">
|
||||
<div class="rounded-2xl border border-slate-200 bg-white p-4">
|
||||
<p class="text-xs font-semibold uppercase tracking-wide text-slate-500">Arrivals today</p>
|
||||
<p class="mt-2 text-2xl font-semibold tabular-nums text-slate-900">{{ number_format($report['arrivals_today']) }}</p>
|
||||
</div>
|
||||
<div class="rounded-2xl border border-slate-200 bg-white p-4">
|
||||
<p class="text-xs font-semibold uppercase tracking-wide text-slate-500">Completed today</p>
|
||||
<p class="mt-2 text-2xl font-semibold tabular-nums text-slate-900">{{ number_format($report['completed_today']) }}</p>
|
||||
</div>
|
||||
<div class="rounded-2xl border border-slate-200 bg-white p-4">
|
||||
<p class="text-xs font-semibold uppercase tracking-wide text-slate-500">Reports open</p>
|
||||
<p class="mt-2 text-2xl font-semibold tabular-nums text-rose-700">{{ number_format($report['reports_open']) }}</p>
|
||||
</div>
|
||||
<div class="rounded-2xl border border-slate-200 bg-white p-4">
|
||||
<p class="text-xs font-semibold uppercase tracking-wide text-slate-500">Avg LOS (range)</p>
|
||||
<p class="mt-2 text-2xl font-semibold tabular-nums text-slate-900">
|
||||
{{ $report['avg_los_minutes'] !== null ? $report['avg_los_minutes'].' min' : '—' }}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="grid gap-4 lg:grid-cols-2">
|
||||
<section class="rounded-2xl border border-slate-200 bg-white p-5">
|
||||
<h2 class="text-sm font-semibold text-slate-900">Diagnoses</h2>
|
||||
<ul class="mt-3 space-y-2 text-sm">
|
||||
@forelse ($report['diagnosis_breakdown'] as $row)
|
||||
<li class="flex justify-between gap-3">
|
||||
<span>{{ $row['diagnosis'] }}</span>
|
||||
<span class="tabular-nums text-slate-600">{{ $row['total'] }}</span>
|
||||
</li>
|
||||
@empty
|
||||
<li class="text-slate-500">No pathology reports in range.</li>
|
||||
@endforelse
|
||||
</ul>
|
||||
</section>
|
||||
<section class="rounded-2xl border border-slate-200 bg-white p-5">
|
||||
<h2 class="text-sm font-semibold text-slate-900">Specimen types</h2>
|
||||
<ul class="mt-3 space-y-2 text-sm">
|
||||
@forelse ($report['specimen_breakdown'] as $row)
|
||||
<li class="flex justify-between gap-3">
|
||||
<span>{{ $row['specimen'] }}</span>
|
||||
<span class="tabular-nums text-slate-600">{{ $row['total'] }}</span>
|
||||
</li>
|
||||
@empty
|
||||
<li class="text-slate-500">No requests in range.</li>
|
||||
@endforelse
|
||||
</ul>
|
||||
</section>
|
||||
</div>
|
||||
|
||||
<section class="rounded-2xl border border-slate-200 bg-white p-5">
|
||||
<h2 class="text-sm font-semibold text-slate-900">Pathology service revenue</h2>
|
||||
<ul class="mt-3 space-y-2 text-sm">
|
||||
@forelse ($report['revenue_by_service'] as $row)
|
||||
<li class="flex justify-between gap-3">
|
||||
<span>{{ $row->description }} <span class="text-slate-400">×{{ $row->total }}</span></span>
|
||||
<span class="tabular-nums">{{ $currency }} {{ number_format($row->amount_minor / 100, 2) }}</span>
|
||||
</li>
|
||||
@empty
|
||||
<li class="text-slate-500">No billed pathology services in range.</li>
|
||||
@endforelse
|
||||
</ul>
|
||||
</section>
|
||||
</div>
|
||||
</x-app-layout>
|
||||
@@ -0,0 +1,47 @@
|
||||
@php
|
||||
$req = $pathologyRequest?->payload ?? [];
|
||||
$rep = $pathologyReport?->payload ?? [];
|
||||
$ver = $pathologyVerification?->payload ?? [];
|
||||
@endphp
|
||||
|
||||
<section class="rounded-2xl border border-slate-200 bg-white p-5">
|
||||
<div class="flex flex-wrap items-start justify-between gap-3">
|
||||
<div>
|
||||
<h3 class="text-sm font-semibold text-slate-900">Pathology overview</h3>
|
||||
<p class="mt-0.5 text-xs text-slate-500">Clinic pathology request through verification — complementary to the Lab app queue.</p>
|
||||
</div>
|
||||
<div class="flex flex-wrap gap-3 text-sm">
|
||||
<a href="{{ route('care.specialty.pathology.print', $workspaceVisit) }}" target="_blank" class="font-medium text-indigo-600">Print summary</a>
|
||||
<a href="{{ route('care.specialty.pathology.reports') }}" class="font-medium text-indigo-600">Pathology reports</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="mt-4 grid gap-3 sm:grid-cols-3">
|
||||
<div class="rounded-xl border border-slate-100 bg-slate-50 px-3 py-3">
|
||||
<p class="text-xs font-semibold uppercase tracking-wide text-slate-500">Specimen</p>
|
||||
<p class="mt-1 text-sm font-semibold text-slate-900">{{ $req['specimen_type'] ?? '—' }}</p>
|
||||
<p class="mt-1 text-xs text-slate-500">{{ $req['site'] ?? '—' }}</p>
|
||||
</div>
|
||||
<div class="rounded-xl border border-slate-100 bg-slate-50 px-3 py-3">
|
||||
<p class="text-xs font-semibold uppercase tracking-wide text-slate-500">Urgency</p>
|
||||
<p class="mt-1 text-sm font-semibold text-slate-900">{{ $req['urgency'] ?? '—' }}</p>
|
||||
<p class="mt-1 text-xs text-slate-500">{{ \Illuminate\Support\Str::limit($req['clinical_history'] ?? '—', 40) }}</p>
|
||||
</div>
|
||||
<div class="rounded-xl border border-slate-100 bg-slate-50 px-3 py-3">
|
||||
<p class="text-xs font-semibold uppercase tracking-wide text-slate-500">Diagnosis</p>
|
||||
<p class="mt-1 text-sm font-semibold text-slate-900">{{ \Illuminate\Support\Str::limit($rep['diagnosis'] ?? '—', 40) }}</p>
|
||||
<p class="mt-1 text-xs text-slate-500">{{ $ver['outcome'] ?? (! empty($ver['verified']) ? 'Verified' : '—') }}</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@if (! empty($clinicalAlerts))
|
||||
<div class="mt-4 space-y-1.5 border-t border-slate-100 pt-4">
|
||||
<p class="text-xs font-semibold uppercase tracking-wide text-slate-500">Alerts</p>
|
||||
@foreach ($clinicalAlerts as $alert)
|
||||
<p class="text-sm {{ ($alert['severity'] ?? '') === 'critical' ? 'text-rose-700' : 'text-amber-800' }}">
|
||||
{{ $alert['message'] ?? '' }}
|
||||
</p>
|
||||
@endforeach
|
||||
</div>
|
||||
@endif
|
||||
</section>
|
||||
@@ -0,0 +1,70 @@
|
||||
@php
|
||||
$record = $pathologyVerification;
|
||||
$payload = $record?->payload ?? [];
|
||||
$canManage = $canManageClinical ?? $canConsult ?? false;
|
||||
@endphp
|
||||
|
||||
<section class="rounded-2xl border border-slate-200 bg-white p-5">
|
||||
<div class="flex flex-wrap items-start justify-between gap-3">
|
||||
<div>
|
||||
<h3 class="text-sm font-semibold text-slate-900">Verification</h3>
|
||||
<p class="mt-0.5 text-xs text-slate-500">Verified / released reports can close the pathology visit.</p>
|
||||
</div>
|
||||
<a href="{{ route('care.specialty.pathology.print', $workspaceVisit) }}" target="_blank" class="text-sm font-medium text-indigo-600">Print summary</a>
|
||||
</div>
|
||||
|
||||
@if ($canManage)
|
||||
<form method="POST" action="{{ route('care.specialty.pathology.verification', $workspaceVisit) }}" class="mt-4 space-y-4">
|
||||
@csrf
|
||||
<input type="hidden" name="tab" value="verification">
|
||||
<div class="grid gap-3 sm:grid-cols-2">
|
||||
@foreach ($clinicalFields ?? [] as $field)
|
||||
@php
|
||||
$name = $field['name'];
|
||||
$value = old('payload.'.$name, $payload[$name] ?? '');
|
||||
$type = $field['type'] ?? 'text';
|
||||
@endphp
|
||||
<div @class(['sm:col-span-2' => in_array($type, ['textarea'], true)])>
|
||||
<label class="block text-xs font-medium text-slate-600">
|
||||
{{ $field['label'] }}
|
||||
@if (! empty($field['required'])) <span class="text-rose-600">*</span> @endif
|
||||
</label>
|
||||
@if ($type === 'textarea')
|
||||
<textarea name="payload[{{ $name }}]" rows="{{ $field['rows'] ?? 3 }}" @required(! empty($field['required']))
|
||||
class="mt-1 w-full rounded-xl border border-slate-200 px-3 py-2 text-sm">{{ $value }}</textarea>
|
||||
@elseif ($type === 'select')
|
||||
<select name="payload[{{ $name }}]" @required(! empty($field['required']))
|
||||
class="mt-1 w-full rounded-xl border border-slate-200 px-3 py-2 text-sm">
|
||||
<option value="">Select…</option>
|
||||
@foreach ($field['options'] ?? [] as $option)
|
||||
<option value="{{ $option }}" @selected((string) $value === (string) $option)>{{ $option }}</option>
|
||||
@endforeach
|
||||
</select>
|
||||
@elseif ($type === 'boolean')
|
||||
<label class="mt-2 inline-flex items-center gap-2 text-sm text-slate-700">
|
||||
<input type="checkbox" name="payload[{{ $name }}]" value="1" @checked(old('payload.'.$name, ! empty($payload[$name])))>
|
||||
Yes
|
||||
</label>
|
||||
@else
|
||||
<input type="{{ $type === 'number' ? 'number' : 'text' }}" name="payload[{{ $name }}]" value="{{ $value }}"
|
||||
@required(! empty($field['required']))
|
||||
class="mt-1 w-full rounded-xl border border-slate-200 px-3 py-2 text-sm">
|
||||
@endif
|
||||
</div>
|
||||
@endforeach
|
||||
</div>
|
||||
<button type="submit" class="btn-primary">Save verification</button>
|
||||
</form>
|
||||
@elseif ($record)
|
||||
<dl class="mt-4 grid gap-3 text-sm sm:grid-cols-2">
|
||||
@foreach ($clinicalFields ?? [] as $field)
|
||||
<div>
|
||||
<dt class="text-slate-500">{{ $field['label'] }}</dt>
|
||||
<dd class="font-medium text-slate-900">{{ is_bool($payload[$field['name']] ?? null) ? (! empty($payload[$field['name']]) ? 'Yes' : 'No') : ($payload[$field['name']] ?? '—') }}</dd>
|
||||
</div>
|
||||
@endforeach
|
||||
</dl>
|
||||
@else
|
||||
<p class="mt-4 text-sm text-slate-500">No verification recorded yet.</p>
|
||||
@endif
|
||||
</section>
|
||||
@@ -85,6 +85,12 @@
|
||||
@include('care.specialty.renal.workspace-'.$activeTab)
|
||||
@elseif ($moduleKey === 'surgery' && in_array($activeTab, ['overview', 'postop'], true))
|
||||
@include('care.specialty.surgery.workspace-'.$activeTab)
|
||||
@elseif ($moduleKey === 'vaccination' && in_array($activeTab, ['overview', 'observation'], true))
|
||||
@include('care.specialty.vaccination.workspace-'.$activeTab)
|
||||
@elseif ($moduleKey === 'pathology' && in_array($activeTab, ['overview', 'verification'], true))
|
||||
@include('care.specialty.pathology.workspace-'.$activeTab)
|
||||
@elseif ($moduleKey === 'infusion' && in_array($activeTab, ['overview', 'monitoring'], true))
|
||||
@include('care.specialty.infusion.workspace-'.$activeTab)
|
||||
@elseif ($activeTab === 'billing')
|
||||
<section class="rounded-2xl border border-slate-200 bg-white p-5">
|
||||
<h3 class="text-sm font-semibold text-slate-900">
|
||||
|
||||
@@ -70,6 +70,15 @@
|
||||
@if ($moduleKey === 'surgery')
|
||||
<a href="{{ route('care.specialty.surgery.reports') }}" class="text-slate-600 hover:text-slate-900">Reports</a>
|
||||
@endif
|
||||
@if ($moduleKey === 'vaccination')
|
||||
<a href="{{ route('care.specialty.vaccination.reports') }}" class="text-slate-600 hover:text-slate-900">Reports</a>
|
||||
@endif
|
||||
@if ($moduleKey === 'pathology')
|
||||
<a href="{{ route('care.specialty.pathology.reports') }}" class="text-slate-600 hover:text-slate-900">Reports</a>
|
||||
@endif
|
||||
@if ($moduleKey === 'infusion')
|
||||
<a href="{{ route('care.specialty.infusion.reports') }}" class="text-slate-600 hover:text-slate-900">Reports</a>
|
||||
@endif
|
||||
<a href="{{ route('care.specialty.history', $moduleKey) }}" class="text-slate-600 hover:text-slate-900">History</a>
|
||||
@if ($canManageClinical ?? $canManageSpecialty ?? true)
|
||||
<a href="{{ route('care.specialty.billing', $moduleKey) }}" class="text-slate-600 hover:text-slate-900">Billing</a>
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Vaccination summary · {{ $patient->fullName() }}</title>
|
||||
<style>
|
||||
body { font-family: system-ui, sans-serif; color: #0f172a; margin: 2rem; }
|
||||
h1 { font-size: 1.25rem; margin: 0 0 .25rem; }
|
||||
h2 { font-size: .95rem; margin: 1.25rem 0 .5rem; border-bottom: 1px solid #e2e8f0; padding-bottom: .25rem; }
|
||||
.meta { color: #64748b; font-size: .875rem; }
|
||||
dl { display: grid; grid-template-columns: 10rem 1fr; gap: .35rem .75rem; font-size: .875rem; }
|
||||
dt { color: #64748b; }
|
||||
dd { margin: 0; font-weight: 500; }
|
||||
@media print { .no-print { display: none; } }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<p class="no-print"><a href="{{ route('care.specialty.workspace', ['module' => 'vaccination', 'visit' => $visit]) }}">Back</a></p>
|
||||
<h1>{{ $patient->fullName() }}</h1>
|
||||
<p class="meta">{{ $patient->patient_number }} · Visit #{{ $visit->id }} · Stage {{ $visit->specialty_stage ?? '—' }}</p>
|
||||
<h2>Eligibility</h2>
|
||||
@if ($eligibility)<dl><dt>Vaccine</dt><dd>{{ $eligibility->payload['vaccine'] ?? '—' }}</dd><dt>Cleared</dt><dd>{{ ! empty($eligibility->payload['cleared']) ? 'Yes' : 'No' }}</dd></dl>@else<p class="meta">No eligibility recorded.</p>@endif
|
||||
<h2>Consent</h2>
|
||||
@if ($consent)<dl><dt>Consent</dt><dd>{{ ! empty($consent->payload['consent_obtained']) ? 'Obtained' : '—' }}</dd><dt>Type</dt><dd>{{ $consent->payload['consent_type'] ?? '—' }}</dd></dl>@else<p class="meta">No consent recorded.</p>@endif
|
||||
<h2>Administration</h2>
|
||||
@if ($admin)<dl><dt>Vaccine</dt><dd>{{ $admin->payload['vaccine'] ?? '—' }}</dd><dt>Lot</dt><dd>{{ $admin->payload['batch'] ?? '—' }}</dd><dt>Site</dt><dd>{{ $admin->payload['site'] ?? '—' }}</dd></dl>@else<p class="meta">No administration recorded.</p>@endif
|
||||
<h2>Observation / AEFI</h2>
|
||||
@if ($observation)<dl><dt>AEFI</dt><dd>{{ $observation->payload['aefi'] ?? '—' }}</dd><dt>Outcome</dt><dd>{{ $observation->payload['outcome'] ?? '—' }}</dd></dl>@else<p class="meta">No observation recorded.</p>@endif
|
||||
<script>window.print();</script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,87 @@
|
||||
<x-app-layout title="Vaccination reports">
|
||||
<div class="space-y-6">
|
||||
<div class="flex flex-wrap items-center justify-between gap-3">
|
||||
<div>
|
||||
<h1 class="text-xl font-semibold text-slate-900">Vaccination reports</h1>
|
||||
<p class="mt-1 text-sm text-slate-500">Arrivals, open observation notes, vaccines, AEFI, length of stay, and vaccination revenue.</p>
|
||||
</div>
|
||||
<a href="{{ route('care.specialty.show', 'vaccination') }}" class="text-sm font-medium text-indigo-600">← Specialty home</a>
|
||||
</div>
|
||||
|
||||
<form method="GET" class="flex flex-wrap items-end gap-3 rounded-2xl border border-slate-200 bg-white p-4">
|
||||
<div>
|
||||
<label class="block text-xs font-medium text-slate-600">From</label>
|
||||
<input type="date" name="from" value="{{ $report['from'] ?? '' }}" class="mt-1 rounded-xl border border-slate-200 px-3 py-2 text-sm">
|
||||
</div>
|
||||
<div>
|
||||
<label class="block text-xs font-medium text-slate-600">To</label>
|
||||
<input type="date" name="to" value="{{ $report['to'] ?? '' }}" class="mt-1 rounded-xl border border-slate-200 px-3 py-2 text-sm">
|
||||
</div>
|
||||
<button type="submit" class="rounded-xl bg-indigo-600 px-4 py-2 text-sm font-semibold text-white">Apply</button>
|
||||
</form>
|
||||
|
||||
<div class="grid gap-4 sm:grid-cols-4">
|
||||
<div class="rounded-2xl border border-slate-200 bg-white p-4">
|
||||
<p class="text-xs font-semibold uppercase tracking-wide text-slate-500">Arrivals today</p>
|
||||
<p class="mt-2 text-2xl font-semibold tabular-nums text-slate-900">{{ number_format($report['arrivals_today']) }}</p>
|
||||
</div>
|
||||
<div class="rounded-2xl border border-slate-200 bg-white p-4">
|
||||
<p class="text-xs font-semibold uppercase tracking-wide text-slate-500">Completed today</p>
|
||||
<p class="mt-2 text-2xl font-semibold tabular-nums text-slate-900">{{ number_format($report['completed_today']) }}</p>
|
||||
</div>
|
||||
<div class="rounded-2xl border border-slate-200 bg-white p-4">
|
||||
<p class="text-xs font-semibold uppercase tracking-wide text-slate-500">Observation open</p>
|
||||
<p class="mt-2 text-2xl font-semibold tabular-nums text-rose-700">{{ number_format($report['observation_open']) }}</p>
|
||||
</div>
|
||||
<div class="rounded-2xl border border-slate-200 bg-white p-4">
|
||||
<p class="text-xs font-semibold uppercase tracking-wide text-slate-500">Avg LOS (range)</p>
|
||||
<p class="mt-2 text-2xl font-semibold tabular-nums text-slate-900">
|
||||
{{ $report['avg_los_minutes'] !== null ? $report['avg_los_minutes'].' min' : '—' }}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="grid gap-4 lg:grid-cols-2">
|
||||
<section class="rounded-2xl border border-slate-200 bg-white p-5">
|
||||
<h2 class="text-sm font-semibold text-slate-900">Vaccines administered</h2>
|
||||
<ul class="mt-3 space-y-2 text-sm">
|
||||
@forelse ($report['vaccine_breakdown'] as $row)
|
||||
<li class="flex justify-between gap-3">
|
||||
<span>{{ $row['vaccine'] }}</span>
|
||||
<span class="tabular-nums text-slate-600">{{ $row['total'] }}</span>
|
||||
</li>
|
||||
@empty
|
||||
<li class="text-slate-500">No administrations in range.</li>
|
||||
@endforelse
|
||||
</ul>
|
||||
</section>
|
||||
<section class="rounded-2xl border border-slate-200 bg-white p-5">
|
||||
<h2 class="text-sm font-semibold text-slate-900">AEFI</h2>
|
||||
<ul class="mt-3 space-y-2 text-sm">
|
||||
@forelse ($report['aefi_breakdown'] as $row)
|
||||
<li class="flex justify-between gap-3">
|
||||
<span>{{ $row['aefi'] }}</span>
|
||||
<span class="tabular-nums text-slate-600">{{ $row['total'] }}</span>
|
||||
</li>
|
||||
@empty
|
||||
<li class="text-slate-500">No observation records in range.</li>
|
||||
@endforelse
|
||||
</ul>
|
||||
</section>
|
||||
</div>
|
||||
|
||||
<section class="rounded-2xl border border-slate-200 bg-white p-5">
|
||||
<h2 class="text-sm font-semibold text-slate-900">Vaccination service revenue</h2>
|
||||
<ul class="mt-3 space-y-2 text-sm">
|
||||
@forelse ($report['revenue_by_service'] as $row)
|
||||
<li class="flex justify-between gap-3">
|
||||
<span>{{ $row->description }} <span class="text-slate-400">×{{ $row->total }}</span></span>
|
||||
<span class="tabular-nums">{{ $currency }} {{ number_format($row->amount_minor / 100, 2) }}</span>
|
||||
</li>
|
||||
@empty
|
||||
<li class="text-slate-500">No billed vaccination services in range.</li>
|
||||
@endforelse
|
||||
</ul>
|
||||
</section>
|
||||
</div>
|
||||
</x-app-layout>
|
||||
@@ -0,0 +1,70 @@
|
||||
@php
|
||||
$record = $vaccinationObservation;
|
||||
$payload = $record?->payload ?? [];
|
||||
$canManage = $canManageClinical ?? $canConsult ?? false;
|
||||
@endphp
|
||||
|
||||
<section class="rounded-2xl border border-slate-200 bg-white p-5">
|
||||
<div class="flex flex-wrap items-start justify-between gap-3">
|
||||
<div>
|
||||
<h3 class="text-sm font-semibold text-slate-900">Observation / AEFI</h3>
|
||||
<p class="mt-0.5 text-xs text-slate-500">Completed observation can close the vaccination visit.</p>
|
||||
</div>
|
||||
<a href="{{ route('care.specialty.vaccination.print', $workspaceVisit) }}" target="_blank" class="text-sm font-medium text-indigo-600">Print summary</a>
|
||||
</div>
|
||||
|
||||
@if ($canManage)
|
||||
<form method="POST" action="{{ route('care.specialty.vaccination.observation', $workspaceVisit) }}" class="mt-4 space-y-4">
|
||||
@csrf
|
||||
<input type="hidden" name="tab" value="observation">
|
||||
<div class="grid gap-3 sm:grid-cols-2">
|
||||
@foreach ($clinicalFields ?? [] as $field)
|
||||
@php
|
||||
$name = $field['name'];
|
||||
$value = old('payload.'.$name, $payload[$name] ?? '');
|
||||
$type = $field['type'] ?? 'text';
|
||||
@endphp
|
||||
<div @class(['sm:col-span-2' => in_array($type, ['textarea'], true)])>
|
||||
<label class="block text-xs font-medium text-slate-600">
|
||||
{{ $field['label'] }}
|
||||
@if (! empty($field['required'])) <span class="text-rose-600">*</span> @endif
|
||||
</label>
|
||||
@if ($type === 'textarea')
|
||||
<textarea name="payload[{{ $name }}]" rows="{{ $field['rows'] ?? 3 }}" @required(! empty($field['required']))
|
||||
class="mt-1 w-full rounded-xl border border-slate-200 px-3 py-2 text-sm">{{ $value }}</textarea>
|
||||
@elseif ($type === 'select')
|
||||
<select name="payload[{{ $name }}]" @required(! empty($field['required']))
|
||||
class="mt-1 w-full rounded-xl border border-slate-200 px-3 py-2 text-sm">
|
||||
<option value="">Select…</option>
|
||||
@foreach ($field['options'] ?? [] as $option)
|
||||
<option value="{{ $option }}" @selected((string) $value === (string) $option)>{{ $option }}</option>
|
||||
@endforeach
|
||||
</select>
|
||||
@elseif ($type === 'boolean')
|
||||
<label class="mt-2 inline-flex items-center gap-2 text-sm text-slate-700">
|
||||
<input type="checkbox" name="payload[{{ $name }}]" value="1" @checked(old('payload.'.$name, ! empty($payload[$name])))>
|
||||
Yes
|
||||
</label>
|
||||
@else
|
||||
<input type="{{ $type === 'number' ? 'number' : 'text' }}" name="payload[{{ $name }}]" value="{{ $value }}"
|
||||
@required(! empty($field['required']))
|
||||
class="mt-1 w-full rounded-xl border border-slate-200 px-3 py-2 text-sm">
|
||||
@endif
|
||||
</div>
|
||||
@endforeach
|
||||
</div>
|
||||
<button type="submit" class="btn-primary">Save observation</button>
|
||||
</form>
|
||||
@elseif ($record)
|
||||
<dl class="mt-4 grid gap-3 text-sm sm:grid-cols-2">
|
||||
@foreach ($clinicalFields ?? [] as $field)
|
||||
<div>
|
||||
<dt class="text-slate-500">{{ $field['label'] }}</dt>
|
||||
<dd class="font-medium text-slate-900">{{ $payload[$field['name']] ?? '—' }}</dd>
|
||||
</div>
|
||||
@endforeach
|
||||
</dl>
|
||||
@else
|
||||
<p class="mt-4 text-sm text-slate-500">No observation recorded yet.</p>
|
||||
@endif
|
||||
</section>
|
||||
@@ -0,0 +1,47 @@
|
||||
@php
|
||||
$elig = $vaccinationEligibility?->payload ?? [];
|
||||
$admin = $vaccinationAdmin?->payload ?? [];
|
||||
$obs = $vaccinationObservation?->payload ?? [];
|
||||
@endphp
|
||||
|
||||
<section class="rounded-2xl border border-slate-200 bg-white p-5">
|
||||
<div class="flex flex-wrap items-start justify-between gap-3">
|
||||
<div>
|
||||
<h3 class="text-sm font-semibold text-slate-900">Vaccination overview</h3>
|
||||
<p class="mt-0.5 text-xs text-slate-500">Eligibility, consent, administration, and AEFI observation for this episode.</p>
|
||||
</div>
|
||||
<div class="flex flex-wrap gap-3 text-sm">
|
||||
<a href="{{ route('care.specialty.vaccination.print', $workspaceVisit) }}" target="_blank" class="font-medium text-indigo-600">Print summary</a>
|
||||
<a href="{{ route('care.specialty.vaccination.reports') }}" class="font-medium text-indigo-600">Vaccination reports</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="mt-4 grid gap-3 sm:grid-cols-3">
|
||||
<div class="rounded-xl border border-slate-100 bg-slate-50 px-3 py-3">
|
||||
<p class="text-xs font-semibold uppercase tracking-wide text-slate-500">Vaccine</p>
|
||||
<p class="mt-1 text-sm font-semibold text-slate-900">{{ $admin['vaccine'] ?? ($elig['vaccine'] ?? '—') }}</p>
|
||||
<p class="mt-1 text-xs text-slate-500">Lot {{ $admin['batch'] ?? '—' }}</p>
|
||||
</div>
|
||||
<div class="rounded-xl border border-slate-100 bg-slate-50 px-3 py-3">
|
||||
<p class="text-xs font-semibold uppercase tracking-wide text-slate-500">Cleared</p>
|
||||
<p class="mt-1 text-sm font-semibold text-slate-900">{{ ! empty($elig['cleared']) ? 'Yes' : '—' }}</p>
|
||||
<p class="mt-1 text-xs text-slate-500">{{ $elig['schedule'] ?? '—' }}</p>
|
||||
</div>
|
||||
<div class="rounded-xl border border-slate-100 bg-slate-50 px-3 py-3">
|
||||
<p class="text-xs font-semibold uppercase tracking-wide text-slate-500">AEFI / disposition</p>
|
||||
<p class="mt-1 text-sm font-semibold text-slate-900">{{ $obs['aefi'] ?? '—' }}</p>
|
||||
<p class="mt-1 text-xs text-slate-500">{{ $obs['outcome'] ?? '—' }}</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@if (! empty($clinicalAlerts))
|
||||
<div class="mt-4 space-y-1.5 border-t border-slate-100 pt-4">
|
||||
<p class="text-xs font-semibold uppercase tracking-wide text-slate-500">Alerts</p>
|
||||
@foreach ($clinicalAlerts as $alert)
|
||||
<p class="text-sm {{ ($alert['severity'] ?? '') === 'critical' ? 'text-rose-700' : 'text-amber-800' }}">
|
||||
{{ $alert['message'] ?? '' }}
|
||||
</p>
|
||||
@endforeach
|
||||
</div>
|
||||
@endif
|
||||
</section>
|
||||
Reference in New Issue
Block a user