'use client' import { ScatterChart, Scatter, XAxis, YAxis, CartesianGrid, Tooltip, ResponsiveContainer, ReferenceLine, } from 'recharts' import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card' import { Badge } from '@/components/ui/badge' import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from '@/components/ui/table' import { AlertTriangle } from 'lucide-react' interface JurorMetric { userId: string name: string email: string evaluationCount: number averageScore: number stddev: number deviationFromOverall: number isOutlier: boolean } interface JurorConsistencyProps { data: { overallAverage: number jurors: JurorMetric[] } } export function JurorConsistencyChart({ data }: JurorConsistencyProps) { const scatterData = data.jurors.map((j) => ({ name: j.name, avgScore: parseFloat(j.averageScore.toFixed(2)), stddev: parseFloat(j.stddev.toFixed(2)), evaluations: j.evaluationCount, isOutlier: j.isOutlier, })) const outlierCount = data.jurors.filter((j) => j.isOutlier).length return (
Dot size represents number of evaluations. Red dots indicate outlier jurors (2+ points from mean).