import { Calendar, CheckCircle, Clock, MessageSquare, RotateCcw, Target, TrendingUp, User, XCircle, } from 'lucide-react'; const BG = { surface: 'var(--gi-bg-surface)', elevated: 'var(--gi-bg-raised)' }; const BORDER = { subtle: 'rgba(255,255,255,0.04)', muted: 'rgba(255,255,255,0.07)' }; const TEXT = { primary: 'rgba(255,255,255,0.88)', secondary: 'rgba(255,255,255,0.55)', tertiary: 'rgba(255,255,255,0.28)', muted: 'rgba(255,255,255,0.14)', }; export type OutcomeResult = 'achieved' | 'partial' | 'missed' | 'pending' | 'exceeded'; export interface OutcomeRecord { id: string; result: OutcomeResult; executedAction: string; executedAt: string; executedBy: string; executedByRole: string; outcomeRecordedAt?: string; predictedImpact: string; actualImpact?: string; accuracy?: number; feedbackNote?: string; laterImpact?: string; timeToOutcome?: string; } const RESULT_CFG: Record< OutcomeResult, { color: string; bg: string; icon: typeof CheckCircle; label: string } > = { achieved: { color: '#6b8f71', bg: 'rgba(107,143,113,0.1)', icon: CheckCircle, label: 'Achieved' }, exceeded: { color: '#22c55e', bg: 'rgba(34,197,94,0.1)', icon: TrendingUp, label: 'Exceeded' }, partial: { color: '#c8953c', bg: 'rgba(200,149,60,0.1)', icon: Clock, label: 'Partial' }, missed: { color: '#c45a4a', bg: 'rgba(196,90,74,0.1)', icon: XCircle, label: 'Missed' }, pending: { color: TEXT.tertiary, bg: 'rgba(255,255,255,0.03)', icon: Clock, label: 'Pending' }, }; interface OutcomePanelProps { outcome: OutcomeRecord; compact?: boolean; } export function OutcomePanel({ outcome, compact }: OutcomePanelProps) { const cfg = RESULT_CFG[outcome.result]; const ResultIcon = cfg.icon; if (compact) { return (
Outcome
{cfg.label}
{outcome.actualImpact && (
{outcome.actualImpact}
)}
{outcome.accuracy != null && (
= 80 ? '#6b8f71' : '#c8953c' }} > {outcome.accuracy}%
Accuracy
)}
); } return (
Outcome — Post-Execution Record
{cfg.label}
{outcome.executedAction}
Predicted
{outcome.predictedImpact}
Actual
{outcome.actualImpact ?? 'Pending'}
{outcome.accuracy != null && (
Prediction Accuracy
= 80 ? '#6b8f71' : '#c8953c', }} />
= 80 ? '#6b8f71' : '#c8953c' }} > {outcome.accuracy}%
)} {outcome.timeToOutcome && (
Time to Outcome
{outcome.timeToOutcome}
)}
{outcome.executedBy} {outcome.executedByRole}
{outcome.executedAt}
{outcome.feedbackNote && (
Operator Feedback
"{outcome.feedbackNote}"
)} {outcome.laterImpact && (
Downstream: {outcome.laterImpact}
)}
); }