// BriefPanel.jsx — Right column: Emergency Brief + Treatment Checker import { useState } from 'react'; import { ShieldAlert, FlaskConical, Stethoscope, ListChecks, AlertTriangle, Clock, Send, CheckCircle, XCircle, AlertCircle, Zap, FileText, Activity, Shield, User } from 'lucide-react'; const API_BASE = import.meta.env.VITE_API_BASE || ''; const renderText = (val) => { if (val === null || val === undefined) return ''; if (typeof val === 'string') return val; if (typeof val === 'object') return JSON.stringify(val); return String(val); }; function Section({ title, icon, children, accent }) { return (
{icon} {title}
{children}
); } function VerdictBadge({ verdict }) { const cls = `badge verdict-${(verdict || 'not_evaluated').toLowerCase()}`; const labels = { SAFE: '✓ SAFE', CAUTION: '⚠ CAUTION', CONTRAINDICATED: '✕ CONTRAINDICATED', NOT_EVALUATED: '? NOT EVALUATED' }; return {labels[verdict] || verdict}; } function TreatmentChecker({ patientId }) { const [input, setInput] = useState(''); const [loading, setLoading] = useState(false); const [result, setResult] = useState(null); const check = async () => { if (!input.trim() || !patientId) return; setLoading(true); setResult(null); try { const geminiKey = localStorage.getItem('gemini_key'); const headers = { 'Content-Type': 'application/json' }; if (geminiKey) headers['x-gemini-key'] = geminiKey; const res = await fetch(`${API_BASE}/check-treatment/${patientId}`, { method: 'POST', headers, body: JSON.stringify({ treatment: input.trim() }), }); const data = await res.json(); setResult(data.result); } catch { setResult({ treatment_verdict: 'NOT_EVALUATED', verdict_reason: 'Safety service unavailable.' }); } finally { setLoading(false); } }; const accent = result?.treatment_verdict === 'SAFE' ? 'var(--green-safe)' : result?.treatment_verdict === 'CONTRAINDICATED' ? 'var(--red-critical)' : result?.treatment_verdict === 'CAUTION' ? 'var(--amber-warning)' : 'var(--border-default)'; return (
Treatment Safety Check
setInput(e.target.value)} onKeyDown={e => e.key === 'Enter' && check()} />
{result && (

{result.verdict_reason}

{(result.allergy_risks || []).map((r, i) => (

⚠ Allergy: {r.substance} — {r.risk}

))} {(result.drug_interactions || []).map((d, i) => (

💊 Interaction: {d.drug_a} + {d.drug_b} → {d.interaction}

))}
)}
); } export function BriefPanel({ data, patient }) { if (!data) { return (
Emergency Brief

Run emergency snapshot to generate brief

{patient && }
); } const { agents, meta } = data; const triage = agents?.triage || {}; const action = agents?.action_protocol || {}; // Build collective reasoning log const collectiveReasoning = [ ...(triage.agent_reasoning || []).map(r => ({ agent: 'Triage', text: r })), ...(agents?.contraindication?.agent_reasoning || []).map(r => ({ agent: 'Guardian', text: r })), ...(agents?.labs?.agent_reasoning || []).map(r => ({ agent: 'Pathologist', text: r })), ...(agents?.differentials?.agent_reasoning || []).map(r => ({ agent: 'Resident', text: r })), ...(action.agent_reasoning || []).map(r => ({ agent: 'Attending', text: r })), ]; return (
Emergency Brief
{meta?.processing_ms}ms {meta?.gemini_enabled && · AI ACTIVE}
{/* Patient Hero Header */}
{patient?.display_name || 'Anonymous Patient'}
{patient?.age || '??'}y {patient?.gender || 'Unknown'}
{patient?.id} {(!patient?.age || patient?.age === '??') && ( Demographics Unverified )}
{patient?.risk_level?.toUpperCase()}
{/* Primary Clinical Directive */} {action.primary_directive && (
IMMEDIATE CLINICAL DIRECTIVE
{renderText(action.primary_directive)}
)} {/* Immediate Critical Risks (Condition-First) */} {triage.critical_risks?.length > 0 && ( } accent="var(--red-critical)">
{triage.critical_risks.map((r, i) => (
{renderText(r.finding || r.condition)}
Risk: {renderText(r.risk)}
Mechanism: {renderText(r.danger)}
))}
)} {/* Action Mapping */} {action.action_mapping?.length > 0 && ( } accent="var(--blue-accent)">
{action.action_mapping.map((m, i) => (
{i + 1}
{renderText(m.action)}
Objective: {renderText(m.condition)}
))}
)} {/* Clinical Synthesis */} {action.clinical_summary && ( } accent="var(--purple-ai)">
"{renderText(action.clinical_summary)}"
)} {/* Safety Checker */}
{/* Reasoning Pipeline */} {collectiveReasoning.length > 0 && (
Agent Reasoning Pipeline
CERTIFIED SYSTEM LOGIC
{collectiveReasoning.map((r, i) => (
{r.agent} {renderText(r.text)}
))}
)}
); } function SectionBlock({ title, icon, children, accent = 'var(--blue-accent)' }) { return (
{icon}
{title}
{children}
); }