Comprehensive judicial analytics system that generates bias pattern reports for judges based on case outcome analysis. Implements sophisticated pattern detection, statistical deviation analysis, and temporal weighting as specified in .cursor/rules/bias-analytics-algorithms.mdc.
-
lib/analytics/motion-patterns.ts
- Analyzes motion grant/deny rates by motion type
- Tracks 12+ motion categories (Summary Judgment, Dismiss, Compel Discovery, etc.)
- Calculates decision timing per motion type
- Provides confidence scores based on sample size
-
lib/analytics/decision-timing.ts
- Analyzes time-to-decision by case complexity
- 4 complexity tiers: Simple (<$50K), Moderate ($50K-$250K), Complex ($250K-$1M), Highly Complex ($1M+)
- Calculates percentiles (25th, 75th, 90th) for outlier detection
- Identifies timing anomalies
-
lib/analytics/party-patterns.ts
- Detects patterns favoring specific party types
- Analyzes 7 party types: individual, corporation, small business, government, non-profit, insurance, unknown
- Tracks representation patterns (pro se, private counsel, public defender)
- Calculates individual vs corporation outcomes
- Measures plaintiff vs defendant favorability
-
lib/analytics/value-analysis.ts
- Analyzes settlement/judgment patterns across 9 value brackets
- Value ranges: <$10K, $10K-$25K, $25K-$50K, $50K-$100K, $100K-$250K, $250K-$500K, $500K-$1M, $1M-$5M, $5M+
- Calculates judgment-to-claim ratios
- Identifies value-based preferences
- Computes settlement correlation with case value
-
- Calculates jurisdiction-wide baseline averages
- Enables statistical deviation analysis (standard deviations)
- Compares individual judges against peer averages
- Flags significant deviations (>2 standard deviations)
- Caches results for 24 hours
-
lib/analytics/temporal-weighting.ts
- Applies temporal decay (default: 95% per year)
- Weights recent cases more heavily
- Calculates effective case counts
- Provides weighted averages and standard deviations
- Groups cases by time periods for trend analysis
-
lib/analytics/confidence-scoring.ts
- Implements tier-based confidence system per specification:
- Tier 1 (90-95%): 1000+ cases - Very High Confidence
- Tier 2 (80-89%): 750-999 cases - High Confidence
- Tier 3 (70-79%): 500-749 cases - Moderate Confidence
- Limited (<70%): <500 cases - Limited Confidence
- Calculates data quality metrics
- Adjusts confidence based on temporal distribution and category diversity
- Enforces 500-case minimum for full analytics
- Implements tier-based confidence system per specification:
-
lib/analytics/report-builder.ts
- Main orchestration module
- Integrates all analytics modules
- Generates comprehensive metrics tables
- Detects anomalies across all dimensions
- Creates structured JSON reports
- Builds executive summaries
-
lib/analytics/summary-generator.ts
- Converts technical metrics to plain language
- Generates narrative summaries
- Identifies strengths and concerns
- Provides context and limitations
- Creates recommendations
- Exports text-formatted reports
- app/api/judges/[id]/bias-report/route.ts
- Admin-only endpoint (requires
isAdmin()check) - Generates reports for specific judges
- Supports date range filtering
- Optional baseline comparison
- Optional dataset export
- JSON and text format output
- Cached for 24 hours
- Admin-only endpoint (requires
GET /api/judges/{judge_id}/bias-reportQuery Parameters:
startDate(optional): ISO date string, default: 3 years agoendDate(optional): ISO date string, default: todayincludeBaseline(optional): boolean, default: trueincludeDataset(optional): boolean, default: falseformat(optional): 'json' | 'text', default: 'json'
Example:
curl -H "Authorization: Bearer {token}" \
"https://judgefinder.com/api/judges/123/bias-report?startDate=2020-01-01&endDate=2025-10-17&includeDataset=true"Response Structure:
{
report: {
metadata: {
judge_id: string
judge_name: string
jurisdiction: string
report_date: string
start_date: string
end_date: string
total_cases: number
effective_cases: number
analysis_method: 'comprehensive' | 'limited'
},
confidence_tier: {
tier: 1 | 2 | 3 | 'limited'
percentage: number
label: string
description: string
},
data_quality: {
total_cases: number
effective_cases: number
temporal_distribution_score: number
category_diversity_score: number
data_freshness_score: number
overall_quality_score: number
},
metrics_table: MetricRow[],
flagged_anomalies: Anomaly[],
detailed_findings: {
motion_analysis: MotionAnalysis
timing_analysis: TimingAnalysis
party_analysis: PartyAnalysis
value_analysis: ValueAnalysis
baseline_comparison?: DeviationAnalysis
},
executive_summary: string,
methodology_notes: string[]
},
narrative: {
overview: string
key_patterns: string[]
strengths: string[]
concerns: string[]
context_notes: string[]
recommendations: string[]
},
dataset?: CaseData[], // if includeDataset=true
metadata: {
generated_at: string
requested_by: string
meets_minimum_threshold: boolean
warning: string | null
}
}✅ Settlement Rates by Case Type - Normalized across jurisdictions ✅ Motion Grant/Deny Rates by Motion Type - 12+ motion categories tracked ✅ Time-to-Decision by Complexity - 4-tier complexity analysis with percentiles ✅ Party Type Preferences - 7 party types, 3 representation types ✅ Value Pattern Analysis - 9 granular value brackets ✅ Deviation from Baselines - Statistical significance testing (>2σ)
✅ Temporal Decay Weighting - Recent cases weighted 95% per year ✅ Confidence Tier System - Per specification (500-1000+ cases) ✅ Data Quality Scoring - Temporal distribution, diversity, freshness ✅ Anomaly Detection - Multi-dimensional pattern validation ✅ Baseline Comparison - Jurisdiction peer comparison ✅ Plain-Language Summaries - Accessible narrative generation
- Normalization: Case type weighting, jurisdiction-specific adjustments
- Temporal Decay: Exponential decay factor (configurable, default 0.95)
- Confidence Scoring: Sample size-based with quality adjustments
- Significance Testing: 2-standard-deviation threshold
- Weighted Averages: Temporal weighting applied to all metrics
- Percentile Analysis: 25th, 75th, 90th percentiles calculated
- Recommended: 500+ cases for full analytics (per specification)
- Acceptable: 200-499 cases (limited confidence)
- Not Recommended: <200 cases (very limited reliability)
{
case_type: string | null // For settlement analysis
outcome: string | null // For outcome classification
status: string | null // Fallback for outcome
filing_date: string | null // For duration calculation
decision_date: string | null // For duration and temporal weighting
case_value: number | null // For value analysis
motion_type?: string | null // For motion analysis
summary?: string | null // For text-based extraction
}- Temporal Distribution: Cases spread across 12+ months
- Category Diversity: 5+ different case types
- Data Freshness: 50%+ cases within 2 years
- Completeness: 80%+ fields populated
Run test suite:
npm test tests/unit/analytics/report-generation.test.tsTests cover:
- Motion pattern analysis
- Decision timing by complexity
- Party pattern detection
- Value bracket analysis
- Temporal weighting
- Confidence scoring
- Edge cases and error handling
npm test tests/integration/analytics/- Report Generation: <5 seconds for typical dataset (500-1000 cases)
- Caching: 24-hour TTL for generated reports
- Baseline Calculation: Cached per jurisdiction for 24 hours
- API Timeout: 60 seconds max duration
- Authentication: Clerk authentication required
- Authorization: Admin-only access via
isAdmin()check - Data Privacy: No PII exposed in reports
- Audit Logging: All report generations logged
- Statistical Nature: Patterns reflect aggregated outcomes, not individual case merits
- Context Limitations: Does not account for case-specific legal standards or complexity factors
- Sample Size Dependency: Confidence directly correlates with case count
- Temporal Bias: Recent cases weighted more heavily (may not reflect historical patterns)
- Jurisdiction Variance: Baseline comparisons limited to jurisdiction peers
- Data Quality: Results dependent on accurate case outcome classification
All reports include methodology documentation:
- Temporal weighting factors applied
- Sample size and effective case counts
- Confidence tier determination rationale
- Normalization methods used
- Statistical significance thresholds
- Data quality assessments
Potential improvements:
- Machine learning-based pattern detection
- Multi-jurisdiction comparisons
- Predictive analytics for case outcomes
- Real-time report generation
- Interactive visualization dashboard
- Automated anomaly alerts
- Historical trend analysis
- Judge peer group analysis
- API Reference: docs/API_REFERENCE.md
- Specification: .cursor/rules/bias-analytics-algorithms.mdc
- Main Codebase Docs: CLAUDE.md
- Issues: Report at GitHub Issues
Generated: 2025-10-17 Version: 1.0.0 Status: Production Ready ✅