"""Main dashboard application for Court Scheduling System. This is the entry point for the Streamlit multi-page dashboard. Launch with: uv run court-scheduler dashboard (or `streamlit run` directly) """ from __future__ import annotations import streamlit as st from src.dashboard.utils import get_data_status # Page configuration st.set_page_config( page_title="Court Scheduling System Dashboard", page_icon="scales", layout="wide", initial_sidebar_state="expanded", ) # Main page content st.title("Court Scheduling System Dashboard") st.markdown( "**Karnataka High Court - Algorithmic Decision Support for Fair Scheduling**" ) st.markdown("---") # Introduction st.markdown( """ ### Overview This system provides data-driven scheduling recommendations while maintaining judicial control and autonomy. **Key Capabilities:** - Historical data analysis and pattern identification - Case ripeness classification (identifying bottlenecks) - Multi-courtroom scheduling simulation - Algorithmic suggestions with full explainability - Judge override and approval system - Reinforcement learning optimization Use the sidebar to navigate between sections. """ ) # System status status_header_col1, status_header_col2 = st.columns([3, 1]) with status_header_col1: st.markdown("### System Status") with status_header_col2: if st.button("Refresh Status", use_container_width=True): st.rerun() data_status = get_data_status() col1, col2, col3 = st.columns(3) with col1: status = "Ready" if data_status["cleaned_data"] else "Missing" color = "green" if data_status["cleaned_data"] else "red" st.markdown(f":{color}[{status}] **Cleaned Data**") if not data_status["cleaned_data"]: st.caption("Run EDA pipeline to process raw data") with col2: status = "Ready" if data_status["parameters"] else "Missing" color = "green" if data_status["parameters"] else "red" st.markdown(f":{color}[{status}] **Parameters**") if not data_status["parameters"]: st.caption("Run EDA pipeline to extract parameters") with col3: status = "Ready" if data_status["eda_figures"] else "Missing" color = "green" if data_status["eda_figures"] else "red" st.markdown(f":{color}[{status}] **Analysis Figures**") if not data_status["eda_figures"]: st.caption("Run EDA pipeline to generate visualizations") # Setup Controls eda_ready = ( data_status["cleaned_data"] and data_status["parameters"] and data_status["eda_figures"] ) if not eda_ready: st.markdown("---") st.markdown("### Initial Setup") st.warning( "Run the EDA pipeline to process historical data and extract parameters." ) col1, col2 = st.columns([2, 1]) with col1: st.markdown( """ The EDA pipeline: - Loads and cleans historical court case data - Extracts statistical parameters (distributions, transition probabilities) - Generates analysis visualizations This is required before using other dashboard features. """ ) with col2: if st.button("Run EDA Pipeline", type="primary", use_container_width=True): from eda.load_clean import run_load_and_clean from eda.exploration import run_exploration from eda.parameters import run_parameter_export with st.spinner("Running EDA pipeline... This may take a few minutes."): try: # Step 1: Load & clean data run_load_and_clean() # Step 2: Generate visualizations run_exploration() # Step 3: Extract parameters run_parameter_export() st.success("EDA pipeline completed") st.rerun() except Exception as e: st.error("Pipeline failed while running inside the dashboard.") with st.expander("Show error details"): st.exception(e) with st.expander("Run manually via CLI"): st.code("uv run court-scheduler eda", language="bash") else: st.success("System ready - all data processed") # Allow user to override and re-run EDA even if it's already completed st.markdown("\n") if st.button("Re-run EDA Pipeline (override)", use_container_width=False): from eda.load_clean import run_load_and_clean from eda.exploration import run_exploration from eda.parameters import run_parameter_export with st.spinner("Re-running EDA pipeline... This may take a few minutes."): try: # Step 1: Load & clean data run_load_and_clean() # Step 2: Generate visualizations run_exploration() # Step 3: Extract parameters run_parameter_export() st.success("EDA pipeline re-run completed") st.rerun() except Exception as e: st.error("Pipeline failed while re-running inside the dashboard.") with st.expander("Show error details"): st.exception(e) st.markdown("---") # Navigation Guide st.markdown("### Dashboard Sections") col1, col2 = st.columns(2) with col1: st.markdown( """ #### 1. Data & Insights Explore historical case data, view analysis visualizations, and review extracted parameters. #### 2. Ripeness Classifier Test case ripeness classification with interactive threshold tuning and explainability. #### 3. Simulation Workflow Generate cases, configure simulation parameters, run scheduling simulations, and view results. """ ) with col2: st.markdown( """ #### 4. Cause Lists & Overrides View generated cause lists, make judge overrides, and track modification history. #### 5. Scheduled Cases Explorer Browse individual case, view status timelines, and understand scheduling decisions. #### 6. Analytics & Reports Compare simulation runs, analyze performance metrics, and export comprehensive reports. """ ) st.markdown("---") # Typical Workflow with st.expander("Typical Usage Workflow"): st.markdown( """ **Step 1: Initial Setup** - Run EDA pipeline to process historical data (one-time setup) **Step 2: Understand the Data** - Explore Data & Insights to understand case patterns - Review extracted parameters and distributions **Step 3: Test Ripeness Classifier** - Adjust thresholds for your court's specific needs - Test classification on sample cases **Step 4: Run Simulation** - Go to Simulation Workflow - Generate or upload case dataset - Configure simulation parameters - Run simulation and review results **Step 5: Review & Override** - View generated cause lists in Cause Lists & Overrides - Make judicial overrides as needed - Approve final cause lists **Step 6: Analyze Performance** - Use Analytics & Reports to evaluate fairness and efficiency - Compare different scheduling policies - Identify bottlenecks and improvement opportunities """ ) # Footer st.markdown("---") st.caption("Court Scheduling System - Code4Change Hackathon - Karnataka High Court") st.caption("Developed by Aalekh Roy")