Initial commit before Ralph loop
This commit is contained in:
@@ -0,0 +1,403 @@
|
||||
# User Guide - NHS Patient Pathway Analysis Tool
|
||||
|
||||
This guide explains how to use the NHS High-Cost Drug Patient Pathway Analysis Tool to analyze treatment pathways for secondary care patients.
|
||||
|
||||
## Table of Contents
|
||||
|
||||
1. [Getting Started](#getting-started)
|
||||
2. [Interface Overview](#interface-overview)
|
||||
3. [Selecting Your Data Source](#selecting-your-data-source)
|
||||
4. [Configuring Analysis Filters](#configuring-analysis-filters)
|
||||
5. [Selecting Drugs, Trusts, and Directories](#selecting-drugs-trusts-and-directories)
|
||||
6. [Running the Analysis](#running-the-analysis)
|
||||
7. [Understanding the Pathway Chart](#understanding-the-pathway-chart)
|
||||
8. [Exporting Results](#exporting-results)
|
||||
9. [GP Indication Validation](#gp-indication-validation)
|
||||
10. [Keyboard Navigation and Accessibility](#keyboard-navigation-and-accessibility)
|
||||
11. [Troubleshooting](#troubleshooting)
|
||||
|
||||
---
|
||||
|
||||
## Getting Started
|
||||
|
||||
### Accessing the Application
|
||||
|
||||
Start the application by running:
|
||||
|
||||
```bash
|
||||
reflex run
|
||||
```
|
||||
|
||||
Then open your browser to **http://localhost:3000**
|
||||
|
||||
The application will automatically load reference data (drugs, trusts, directories) when you first access it.
|
||||
|
||||
### First-Time Setup
|
||||
|
||||
1. Click **Load Reference Data** on the Home page to populate the filter options
|
||||
2. Select your preferred data source (SQLite, File Upload, or Snowflake)
|
||||
3. Configure your date range and other filters
|
||||
4. Click **Run Analysis** to generate your first pathway chart
|
||||
|
||||
---
|
||||
|
||||
## Interface Overview
|
||||
|
||||
The application has four main pages, accessible from the sidebar navigation:
|
||||
|
||||
| Page | Purpose |
|
||||
|------|---------|
|
||||
| **Home** | Main analysis dashboard with data source selection, filters, and chart display |
|
||||
| **Drug Selection** | Select which high-cost drugs to include in the analysis |
|
||||
| **Trust Selection** | Filter by specific NHS trusts |
|
||||
| **Directory Selection** | Filter by medical directories/specialties |
|
||||
|
||||
### Navigation
|
||||
|
||||
- **Desktop**: Use the sidebar on the left to switch between pages
|
||||
- **Mobile**: Use the top navigation bar
|
||||
- **Keyboard**: Press Tab to navigate, Enter to select
|
||||
|
||||
---
|
||||
|
||||
## Selecting Your Data Source
|
||||
|
||||
The application supports three data sources:
|
||||
|
||||
### 1. SQLite Database (Recommended)
|
||||
|
||||
Pre-loaded patient data stored locally for fast performance.
|
||||
|
||||
**Advantages:**
|
||||
- Fastest analysis performance
|
||||
- Works offline
|
||||
- No authentication required
|
||||
|
||||
**To use:** Click "Use SQLite" in the Data Source section
|
||||
|
||||
### 2. File Upload
|
||||
|
||||
Upload CSV or Parquet files directly.
|
||||
|
||||
**Supported formats:**
|
||||
- CSV files (.csv)
|
||||
- Apache Parquet files (.parquet, .pq)
|
||||
|
||||
**To use:**
|
||||
1. Drag and drop a file, or click the upload area
|
||||
2. Wait for the file to process
|
||||
3. Click "Use File" to select it as your data source
|
||||
|
||||
### 3. Snowflake
|
||||
|
||||
Query live data from the NHS data warehouse.
|
||||
|
||||
**Requirements:**
|
||||
- Snowflake must be configured (see `config/snowflake.toml`)
|
||||
- Browser-based NHS SSO authentication
|
||||
|
||||
**To use:** Click "Use Snowflake" - you'll be prompted to authenticate via your browser
|
||||
|
||||
---
|
||||
|
||||
## Configuring Analysis Filters
|
||||
|
||||
The Home page provides several filter options:
|
||||
|
||||
### Date Range
|
||||
|
||||
| Field | Description |
|
||||
|-------|-------------|
|
||||
| **Start Date** | Include patients initiated from this date onwards |
|
||||
| **End Date** | Include patients initiated until this date |
|
||||
| **Last Seen After** | Only include patients with activity after this date (excludes patients who haven't been seen recently) |
|
||||
|
||||
**Tip:** The default range is the last 12 months.
|
||||
|
||||
### Minimum Patients
|
||||
|
||||
Filter out pathways with fewer patients than the threshold you set.
|
||||
|
||||
- Use the slider for quick adjustment (0-100)
|
||||
- Or type a specific number in the text field
|
||||
- Set to 0 to show all pathways regardless of patient count
|
||||
|
||||
### Custom Title
|
||||
|
||||
Override the automatically generated chart title with your own text.
|
||||
|
||||
- Leave empty to use the default title: "Patients initiated [start date] to [end date]"
|
||||
- Useful for specific reports or presentations
|
||||
|
||||
---
|
||||
|
||||
## Selecting Drugs, Trusts, and Directories
|
||||
|
||||
Each selection page works the same way:
|
||||
|
||||
### Navigation
|
||||
|
||||
1. Click "Drug Selection", "Trust Selection", or "Directory Selection" in the sidebar
|
||||
2. The page shows all available options with checkboxes
|
||||
|
||||
### Search
|
||||
|
||||
Type in the search box to filter the list. The list updates as you type.
|
||||
|
||||
### Selection Actions
|
||||
|
||||
| Button | Action |
|
||||
|--------|--------|
|
||||
| **Select All** | Check all visible items |
|
||||
| **Clear All** | Uncheck all items |
|
||||
| **Select Defaults** | (Drugs only) Select pre-configured default drugs (Include=1 in include.csv) |
|
||||
|
||||
### Selection Behavior
|
||||
|
||||
- **No items selected** = Include ALL items in analysis
|
||||
- **Some items selected** = Include ONLY the selected items
|
||||
|
||||
This means leaving a filter empty is equivalent to "select all".
|
||||
|
||||
---
|
||||
|
||||
## Running the Analysis
|
||||
|
||||
### Steps
|
||||
|
||||
1. Ensure your data source is selected and configured
|
||||
2. Set your date range and other filters
|
||||
3. Select desired drugs, trusts, and directories (or leave empty for all)
|
||||
4. Click the green **Run Analysis** button
|
||||
|
||||
### During Analysis
|
||||
|
||||
- The button shows a spinner while analysis is running
|
||||
- Status messages appear below the button
|
||||
- The interface remains responsive - you can review settings
|
||||
|
||||
### After Analysis
|
||||
|
||||
- The pathway chart appears in the chart section
|
||||
- Export buttons become available
|
||||
- GP indication validation results appear (if Snowflake is connected)
|
||||
|
||||
---
|
||||
|
||||
## Understanding the Pathway Chart
|
||||
|
||||
The analysis generates an interactive **icicle chart** showing patient treatment pathways.
|
||||
|
||||
### Hierarchy Structure
|
||||
|
||||
The chart displays a hierarchical structure:
|
||||
|
||||
```
|
||||
N&WICS (Regional Total)
|
||||
└─ Trust Name (e.g., "Norfolk and Norwich University Hospitals")
|
||||
└─ Directory (e.g., "Rheumatology", "Gastroenterology")
|
||||
└─ Drug Name (e.g., "ADALIMUMAB", "INFLIXIMAB")
|
||||
```
|
||||
|
||||
### Reading the Chart
|
||||
|
||||
- **Width** of each section indicates relative patient count
|
||||
- **Color intensity** indicates proportion of patients at that level
|
||||
- **Labels** show the category name and patient count
|
||||
|
||||
### Interacting with the Chart
|
||||
|
||||
| Action | Effect |
|
||||
|--------|--------|
|
||||
| **Click** a section | Zoom in to show details for that branch |
|
||||
| **Click** the root | Zoom out to show full hierarchy |
|
||||
| **Hover** over a section | See tooltip with patient count |
|
||||
| Use the **toolbar** | Reset, download image, pan, zoom |
|
||||
|
||||
### Plotly Toolbar
|
||||
|
||||
The chart includes a Plotly toolbar (top right) with:
|
||||
|
||||
- **Download as PNG** - Save static image
|
||||
- **Zoom controls** - Zoom in/out
|
||||
- **Pan** - Click and drag to move
|
||||
- **Reset** - Return to original view
|
||||
|
||||
---
|
||||
|
||||
## Exporting Results
|
||||
|
||||
Two export options are available after running an analysis:
|
||||
|
||||
### Export HTML
|
||||
|
||||
Creates an interactive HTML file that can be opened in any browser.
|
||||
|
||||
- **Output**: `data/exports/pathway_chart_[timestamp].html`
|
||||
- **Use case**: Sharing interactive charts via email or file share
|
||||
- **Features**: Full interactivity, no software required to view
|
||||
|
||||
### Export CSV
|
||||
|
||||
Exports the underlying data as a spreadsheet.
|
||||
|
||||
- **Output**: `data/exports/pathway_data_[timestamp].csv`
|
||||
- **Use case**: Further analysis in Excel, importing to other tools
|
||||
- **Includes**: Patient IDs, drugs, dates, costs, directories, indication validation status
|
||||
|
||||
### Export Location
|
||||
|
||||
All exports are saved to the `data/exports/` directory with timestamped filenames to prevent overwriting.
|
||||
|
||||
---
|
||||
|
||||
## GP Indication Validation
|
||||
|
||||
When connected to Snowflake, the application validates whether patients have appropriate GP diagnoses for their prescribed drugs.
|
||||
|
||||
### What It Does
|
||||
|
||||
1. Looks up the drug's licensed indications (e.g., ADALIMUMAB for rheumatoid arthritis)
|
||||
2. Finds corresponding SNOMED codes for those indications
|
||||
3. Checks each patient's GP records for matching diagnoses
|
||||
4. Reports the match rate per drug
|
||||
|
||||
### Understanding Results
|
||||
|
||||
After analysis, a table shows:
|
||||
|
||||
| Column | Meaning |
|
||||
|--------|---------|
|
||||
| **Drug Name** | The high-cost drug |
|
||||
| **Total Patients** | Number of patients prescribed this drug |
|
||||
| **With GP Indication** | Patients with matching GP diagnosis |
|
||||
| **Match Rate** | Percentage with valid indication |
|
||||
|
||||
### Match Rate Interpretation
|
||||
|
||||
| Rate | Meaning | Color |
|
||||
|------|---------|-------|
|
||||
| **80%+** | Good coverage - most patients have GP diagnoses | Green |
|
||||
| **50-79%** | Moderate coverage - investigate missing cases | Orange |
|
||||
| **<50%** | Low coverage - may indicate data quality issues or off-label use | Red |
|
||||
|
||||
### Why Rates May Be Low
|
||||
|
||||
Low match rates don't necessarily indicate problems:
|
||||
|
||||
- **Cross-provider treatment**: Patient's GP is outside the data coverage
|
||||
- **Recent diagnoses**: Diagnosis not yet recorded in GP system
|
||||
- **Specialist-only conditions**: Some conditions are only managed in secondary care
|
||||
- **Off-label prescribing**: Legitimate use for indications not in the mapping
|
||||
|
||||
### Enabling/Disabling
|
||||
|
||||
Indication validation is enabled by default when Snowflake is connected. It requires:
|
||||
- Active Snowflake connection
|
||||
- Drug-to-cluster mappings in the database
|
||||
|
||||
---
|
||||
|
||||
## Keyboard Navigation and Accessibility
|
||||
|
||||
The application is designed to be accessible:
|
||||
|
||||
### Skip Link
|
||||
|
||||
Press **Tab** when the page loads to reveal a "Skip to main content" link that bypasses navigation.
|
||||
|
||||
### Keyboard Navigation
|
||||
|
||||
| Key | Action |
|
||||
|-----|--------|
|
||||
| **Tab** | Move to next interactive element |
|
||||
| **Shift+Tab** | Move to previous element |
|
||||
| **Enter** | Activate buttons, links, checkboxes |
|
||||
| **Space** | Toggle checkboxes |
|
||||
| **Arrow keys** | Adjust sliders |
|
||||
|
||||
### Screen Reader Support
|
||||
|
||||
- All buttons and inputs have descriptive labels
|
||||
- Status messages announce via ARIA live regions
|
||||
- Charts include figure descriptions
|
||||
|
||||
### Theme Toggle
|
||||
|
||||
A dark/light mode toggle is available at the bottom of the sidebar for visual preference.
|
||||
|
||||
---
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### "No data available" Error
|
||||
|
||||
**Cause**: No data matches your current filter settings
|
||||
|
||||
**Solutions:**
|
||||
1. Check your date range - is it too narrow?
|
||||
2. Verify your data source has data loaded
|
||||
3. Check if selected trusts/drugs have any matching records
|
||||
4. Try clearing all selections (to include everything)
|
||||
|
||||
### Chart Not Displaying
|
||||
|
||||
**Cause**: Analysis completed but no data met the minimum patients threshold
|
||||
|
||||
**Solutions:**
|
||||
1. Lower the minimum patients threshold
|
||||
2. Expand your date range
|
||||
3. Select more drugs or trusts
|
||||
|
||||
### Snowflake Connection Failed
|
||||
|
||||
**Cause**: Unable to connect to Snowflake
|
||||
|
||||
**Solutions:**
|
||||
1. Check that `config/snowflake.toml` exists and is configured
|
||||
2. Complete browser authentication when prompted
|
||||
3. Verify your network allows Snowflake connections
|
||||
4. Try using SQLite as an alternative data source
|
||||
|
||||
### File Upload Failed
|
||||
|
||||
**Cause**: File format or content issue
|
||||
|
||||
**Solutions:**
|
||||
1. Ensure file is CSV or Parquet format
|
||||
2. Check file isn't corrupted or empty
|
||||
3. Verify file contains required columns
|
||||
4. Try a smaller file to test
|
||||
|
||||
### Slow Performance
|
||||
|
||||
**Cause**: Large data volume or complex filtering
|
||||
|
||||
**Solutions:**
|
||||
1. Use SQLite instead of file upload for large datasets
|
||||
2. Narrow your date range
|
||||
3. Select fewer drugs/trusts to analyze
|
||||
4. Increase minimum patients threshold to reduce chart complexity
|
||||
|
||||
### Reference Data Not Loading
|
||||
|
||||
**Cause**: Missing or corrupted reference files
|
||||
|
||||
**Solutions:**
|
||||
1. Click "Load Reference Data" to retry
|
||||
2. Check that `data/` directory contains required CSV files:
|
||||
- `include.csv`
|
||||
- `defaultTrusts.csv`
|
||||
- `directory_list.csv`
|
||||
3. Verify files aren't empty or malformed
|
||||
|
||||
---
|
||||
|
||||
## Getting Help
|
||||
|
||||
If you encounter issues not covered in this guide:
|
||||
|
||||
1. Check the [README](../README.md) for installation and setup information
|
||||
2. Review [DEPLOYMENT.md](./DEPLOYMENT.md) for server configuration
|
||||
3. Consult [CLAUDE.md](../CLAUDE.md) for technical architecture details
|
||||
4. Contact your local support team for NHS-specific questions
|
||||
Reference in New Issue
Block a user