Files
HighCostDrugsDemo/dash_app/data/queries.py
T
Andrew Charlwood 10739ca84d feat: Trust Comparison landing page + directorate selector (Task 10.7)
- Add get_directorate_summary() query for per-directorate patient/drug counts
- Create trust_comparison.py with landing grid and 6-chart dashboard layout
- Wire directorate card clicks and back button through app-state callbacks
- Add TC landing and dashboard CSS per Phase 10 design spec
- Placeholder charts for 6 dashboard graphs (filled in Task 10.8)
- Chart type toggle clears selected directorate when switching modes
2026-02-06 22:15:10 +00:00

183 lines
5.8 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""
Thin wrapper around shared pathway query functions.
Resolves the database path relative to this file's location and delegates
to the shared functions in src/data_processing/pathway_queries.py.
"""
from pathlib import Path
from typing import Optional
from data_processing.pathway_queries import (
load_initial_data as _load_initial_data,
load_pathway_nodes as _load_pathway_nodes,
get_drug_market_share as _get_drug_market_share,
get_pathway_costs as _get_pathway_costs,
get_cost_waterfall as _get_cost_waterfall,
get_drug_transitions as _get_drug_transitions,
get_dosing_intervals as _get_dosing_intervals,
get_drug_directory_matrix as _get_drug_directory_matrix,
get_treatment_durations as _get_treatment_durations,
get_trust_market_share as _get_trust_market_share,
get_trust_cost_waterfall as _get_trust_cost_waterfall,
get_trust_dosing as _get_trust_dosing,
get_trust_heatmap as _get_trust_heatmap,
get_trust_durations as _get_trust_durations,
get_directorate_summary as _get_directorate_summary,
)
DB_PATH = Path(__file__).resolve().parents[2] / "data" / "pathways.db"
def load_initial_data() -> dict:
"""Load reference data (drugs, directorates, indications, refresh info)."""
return _load_initial_data(DB_PATH)
def load_pathway_data(
filter_id: str = "all_6mo",
chart_type: str = "directory",
selected_drugs: Optional[list[str]] = None,
selected_directorates: Optional[list[str]] = None,
selected_trusts: Optional[list[str]] = None,
) -> dict:
"""Load pre-computed pathway nodes with optional filters."""
return _load_pathway_nodes(
DB_PATH,
filter_id=filter_id,
chart_type=chart_type,
selected_drugs=selected_drugs,
selected_directorates=selected_directorates,
selected_trusts=selected_trusts,
)
# --- Analytics chart query wrappers (Phase 9) ---
def get_drug_market_share(
date_filter_id: str = "all_6mo",
chart_type: str = "directory",
directory: Optional[str] = None,
trust: Optional[str] = None,
) -> list[dict]:
"""Level 3 drug nodes grouped by directory with patient counts."""
return _get_drug_market_share(DB_PATH, date_filter_id, chart_type, directory, trust)
def get_pathway_costs(
date_filter_id: str = "all_6mo",
chart_type: str = "directory",
directory: Optional[str] = None,
trust: Optional[str] = None,
) -> list[dict]:
"""Level 4+ pathway nodes with annualized cost."""
return _get_pathway_costs(DB_PATH, date_filter_id, chart_type, directory, trust)
def get_cost_waterfall(
date_filter_id: str = "all_6mo",
chart_type: str = "directory",
trust: Optional[str] = None,
) -> list[dict]:
"""Level 2 directorate nodes with cost per patient."""
return _get_cost_waterfall(DB_PATH, date_filter_id, chart_type, trust)
def get_drug_transitions(
date_filter_id: str = "all_6mo",
chart_type: str = "directory",
directory: Optional[str] = None,
trust: Optional[str] = None,
) -> dict:
"""Drug transition data for Sankey diagram."""
return _get_drug_transitions(DB_PATH, date_filter_id, chart_type, directory, trust)
def get_dosing_intervals(
date_filter_id: str = "all_6mo",
chart_type: str = "directory",
drug: Optional[str] = None,
trust: Optional[str] = None,
) -> list[dict]:
"""Dosing interval data parsed from average_spacing."""
return _get_dosing_intervals(DB_PATH, date_filter_id, chart_type, drug, trust)
def get_drug_directory_matrix(
date_filter_id: str = "all_6mo",
chart_type: str = "directory",
trust: Optional[str] = None,
) -> dict:
"""Directory × drug matrix with patient counts and costs."""
return _get_drug_directory_matrix(DB_PATH, date_filter_id, chart_type, trust)
def get_treatment_durations(
date_filter_id: str = "all_6mo",
chart_type: str = "directory",
directory: Optional[str] = None,
trust: Optional[str] = None,
) -> list[dict]:
"""Treatment duration data (avg_days) by drug."""
return _get_treatment_durations(DB_PATH, date_filter_id, chart_type, directory, trust)
# --- Trust Comparison query wrappers (Phase 10) ---
def get_trust_market_share(
date_filter_id: str = "all_6mo",
chart_type: str = "directory",
directory: str = "",
) -> list[dict]:
"""Drug market share by trust within a single directorate."""
return _get_trust_market_share(DB_PATH, date_filter_id, chart_type, directory)
def get_trust_cost_waterfall(
date_filter_id: str = "all_6mo",
chart_type: str = "directory",
directory: str = "",
) -> list[dict]:
"""Cost per patient by trust within a single directorate."""
return _get_trust_cost_waterfall(DB_PATH, date_filter_id, chart_type, directory)
def get_trust_dosing(
date_filter_id: str = "all_6mo",
chart_type: str = "directory",
directory: str = "",
) -> list[dict]:
"""Drug dosing intervals by trust within a single directorate."""
return _get_trust_dosing(DB_PATH, date_filter_id, chart_type, directory)
def get_trust_heatmap(
date_filter_id: str = "all_6mo",
chart_type: str = "directory",
directory: str = "",
) -> dict:
"""Trust x drug matrix for a single directorate."""
return _get_trust_heatmap(DB_PATH, date_filter_id, chart_type, directory)
def get_trust_durations(
date_filter_id: str = "all_6mo",
chart_type: str = "directory",
directory: str = "",
) -> list[dict]:
"""Drug durations by trust within a single directorate."""
return _get_trust_durations(DB_PATH, date_filter_id, chart_type, directory)
# --- Directorate summary for Trust Comparison landing page ---
def get_directorate_summary(
date_filter_id: str = "all_6mo",
chart_type: str = "directory",
) -> list[dict]:
"""Per-directorate summary (name, patient count, drug count) for landing cards."""
return _get_directorate_summary(DB_PATH, date_filter_id, chart_type)