RoyAalekh's picture
enhancements, added view for scehduled cases as tickets
9eaac57
"""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")