> ## Documentation Index
> Fetch the complete documentation index at: https://mintlify.com/appertafoundation/openeyes/llms.txt
> Use this file to discover all available pages before exploring further.

# Reporting & Analytics

> Clinical reporting, analytics, and data visualization in OpenEyes

OpenEyes provides comprehensive reporting and analytics capabilities for clinical audit, performance monitoring, and research data extraction.

## Reporting Overview

<CardGroup cols={3}>
  <Card title="Clinical Reports" icon="chart-line">
    Patient outcomes, diagnoses, and treatment data
  </Card>

  <Card title="Service Analytics" icon="chart-pie">
    Clinic performance and capacity metrics
  </Card>

  <Card title="Custom Reports" icon="file-chart-column">
    Build custom report templates
  </Card>

  <Card title="Data Export" icon="download">
    CSV, PDF, and Excel export formats
  </Card>

  <Card title="Dashboards" icon="gauge">
    Real-time clinical dashboards
  </Card>

  <Card title="Audit Reports" icon="clipboard-check">
    Clinical audit and compliance reporting
  </Card>
</CardGroup>

## Report Controller

The main reporting interface is provided by `ReportController.php`:

```php theme={null}
// Access reports
/report/{reportType}
```

### Available Reports

* Diagnosis reports
* Procedure reports
* Waiting list reports
* Cataract audit
* Visual acuity outcomes
* IOP control
* Injection intervals
* Custom report templates

## Clinical Dashboards

### Surgeon Dashboard

Access your personal clinical dashboard at `/dashboard`:

**Features:**

* Today's clinic schedule
* Patient worklists
* Pending tasks
* Recent outcomes
* Performance metrics

**Implementation:**

```php theme={null}
// protected/controllers/DashboardController.php
class DashboardController extends BaseController
{
    public function actionIndex()
    {
        // Load surgeon-specific data
        $user = Yii::app()->user;
        $appointments = $this->getTodayAppointments($user->id);
        $worklists = $this->getActiveWorklists($user->id);
        
        $this->render('index', compact('appointments', 'worklists'));
    }
}
```

### OEscape Dashboard

Subspecialty-specific visualization at `/dashboard/oescape`:

<Tabs>
  <Tab title="Glaucoma">
    * IOP trends
    * Visual field progression
    * Target IOP monitoring
    * Treatment efficacy
  </Tab>

  <Tab title="Medical Retina">
    * Injection intervals
    * Visual acuity trends
    * Treatment response
    * OCT analysis
  </Tab>

  <Tab title="Cataract">
    * Pre/post-op VA
    * Refractive outcomes
    * Complication rates
    * IOL performance
  </Tab>
</Tabs>

### Dashboard Customization

Customize dashboard widgets via system settings:

```php theme={null}
// Enable/disable dashboard widgets
'dashboard_widgets' => [
    'appointments' => true,
    'worklists' => true,
    'metrics' => true,
    'recent_patients' => true
]
```

## Analytics Controller

Advanced analytics at `/analytics`:

### Visual Acuity Analytics

Track visual acuity outcomes across patient cohorts:

```php theme={null}
// protected/controllers/AnalyticsController.php
public function actionVisualAcuity()
{
    $data = $this->getVAData([
        'start_date' => $startDate,
        'end_date' => $endDate,
        'subspecialty' => $subspecialty
    ]);
    
    // Returns structured data for visualization
    return $this->renderJSON($data);
}
```

### Plotly Integration

OpenEyes uses Plotly.js for interactive data visualization:

```javascript theme={null}
// Example: Visual acuity trend chart
Plotly.newPlot('va-chart', [{
    x: dates,
    y: vaValues,
    type: 'scatter',
    mode: 'lines+markers',
    name: 'Right Eye'
}], {
    title: 'Visual Acuity Over Time',
    xaxis: { title: 'Date' },
    yaxis: { title: 'LogMAR' }
});
```

### Service Analytics

Monitor clinic performance:

* **Appointment utilization**
* **Wait times**
* **DNA (Did Not Attend) rates**
* **Throughput metrics**
* **Capacity planning**

## Custom Report Templates

### Creating Custom Reports

<Steps>
  <Step title="Define Report Parameters">
    Specify date ranges, subspecialty, and data points
  </Step>

  <Step title="Build Query">
    Use the report query builder to extract data
  </Step>

  <Step title="Configure Output">
    Select columns, grouping, and formatting
  </Step>

  <Step title="Save Template">
    Save for reuse and scheduling
  </Step>
</Steps>

### Report Query Builder

Access at `/report/custom`:

```php theme={null}
// Example custom report query
SELECT 
    p.id,
    p.first_name,
    p.last_name,
    e.event_date,
    et.name as event_type,
    va.value as visual_acuity
FROM patient p
JOIN episode ep ON ep.patient_id = p.id
JOIN event e ON e.episode_id = ep.id
JOIN event_type et ON et.id = e.event_type_id
LEFT JOIN ophciexamination_visualacuity va ON va.event_id = e.id
WHERE e.event_date BETWEEN :start_date AND :end_date
```

### Report Templates

Save report definitions as templates:

```php theme={null}
'report_templates' => [
    'cataract_outcomes' => [
        'name' => 'Cataract Surgical Outcomes',
        'query' => 'cataract_outcomes.sql',
        'parameters' => ['start_date', 'end_date', 'surgeon'],
        'output_format' => 'pdf'
    ]
]
```

## Data Export

### Export Formats

<Tabs>
  <Tab title="CSV">
    Comma-separated values for Excel and data analysis

    ```php theme={null}
    // Export to CSV
    $report->exportToCSV('filename.csv');
    ```
  </Tab>

  <Tab title="PDF">
    Formatted PDF reports with charts and tables

    ```php theme={null}
    // Export to PDF
    $report->exportToPDF('filename.pdf');
    ```
  </Tab>

  <Tab title="Excel">
    Native Excel format with formatting

    ```php theme={null}
    // Export to Excel
    $report->exportToExcel('filename.xlsx');
    ```
  </Tab>

  <Tab title="JSON">
    Machine-readable JSON for API integration

    ```php theme={null}
    // Export to JSON
    $report->exportToJSON('filename.json');
    ```
  </Tab>
</Tabs>

### CXL Dataset Export

Clinical dataset exports via `/CxlDataset`:

**Controller:** `protected/controllers/CxlDatasetController.php`

**Features:**

* Custom dataset definitions
* Flexible column selection
* Patient de-identification
* Scheduled automated exports
* Multiple file formats

<Accordion title="Creating a CXL Dataset">
  1. Navigate to `/CxlDataset/admin`
  2. Click "Create Dataset"
  3. Define dataset name and description
  4. Select tables and columns
  5. Configure filters and date ranges
  6. Set up anonymization rules
  7. Schedule or export immediately
</Accordion>

## National Ophthalmic Database (NOD)

Export data to NOD for national audit:

### NOD Export Controller

`protected/controllers/NodExportController.php` manages NOD submissions:

<Steps>
  <Step title="Configure Export Scope">
    Select procedures and date range for NOD submission
  </Step>

  <Step title="Data Validation">
    System validates data completeness and quality
  </Step>

  <Step title="Anonymization">
    Apply appropriate anonymization level
  </Step>

  <Step title="Generate Export File">
    Create NOD-compliant XML or CSV file
  </Step>

  <Step title="Review and Submit">
    Review data summary and submit to NOD portal
  </Step>
</Steps>

### NOD Data Elements

Required data elements for NOD export:

* Patient demographics (anonymized)
* Procedure codes (OPCS-4)
* Diagnoses (ICD-10)
* Pre-operative visual acuity
* Post-operative visual acuity
* Complications
* IOL details (for cataract)
* Surgeon identifier

## Audit Reports

### Clinical Audit

Access audit reports at `/audit`:

**AuditController** (`protected/controllers/AuditController.php`) provides:

* User activity logs
* Clinical event audit trail
* Data access logs
* System changes
* Integration activity
* Security events

### Audit Search

Filter audit logs by:

```php theme={null}
// Audit search parameters
[
    'user_id' => $userId,
    'action' => $action,  // create, update, delete, view
    'type' => $type,      // patient, event, user, etc.
    'date_from' => $dateFrom,
    'date_to' => $dateTo,
    'patient_id' => $patientId
]
```

### Compliance Reporting

Generate compliance reports for:

* Information governance audit
* GDPR access requests
* Clinical safety monitoring
* System usage statistics

## Scheduled Reports

### Automated Report Generation

Configure scheduled reports in system settings:

```php theme={null}
'scheduled_reports' => [
    'monthly_outcomes' => [
        'enabled' => true,
        'schedule' => '0 0 1 * *',  // First day of month
        'report_template' => 'monthly_outcomes',
        'recipients' => ['admin@example.com'],
        'format' => 'pdf'
    ]
]
```

### Email Distribution

Reports can be automatically emailed:

```php theme={null}
// Send report via email
$report = new Report('monthly_outcomes');
$report->generate();
$report->emailTo(['user@example.com']);
```

## Performance Metrics

### Key Performance Indicators

Track clinical KPIs:

<CardGroup cols={2}>
  <Card title="Access Metrics" icon="clock">
    * 18-week RTT compliance
    * Average wait times
    * DNA rates
    * Clinic utilization
  </Card>

  <Card title="Clinical Outcomes" icon="stethoscope">
    * Visual acuity outcomes
    * Complication rates
    * Re-operation rates
    * Patient satisfaction
  </Card>

  <Card title="Operational Metrics" icon="chart-simple">
    * Theatre efficiency
    * Bed occupancy
    * Staff productivity
    * Resource utilization
  </Card>

  <Card title="Quality Metrics" icon="award">
    * Clinical guideline compliance
    * Documentation completeness
    * Audit participation
    * Safety incidents
  </Card>
</CardGroup>

## Data Visualization

### Chart Types

OpenEyes supports various visualization types:

<Tabs>
  <Tab title="Line Charts">
    Trends over time (VA progression, IOP control)
  </Tab>

  <Tab title="Bar Charts">
    Categorical comparisons (procedures by type)
  </Tab>

  <Tab title="Pie Charts">
    Proportional data (diagnosis distribution)
  </Tab>

  <Tab title="Scatter Plots">
    Correlations (pre-op vs post-op VA)
  </Tab>

  <Tab title="Heatmaps">
    Clinic capacity and utilization
  </Tab>
</Tabs>

### SVG Export

Export charts as SVG for publications:

```javascript theme={null}
// Export dashboard chart as SVG
$('#chart-container').exportToSVG('chart.svg');
```

## Research Data Extraction

### Research Database

Extract anonymized data for research:

<Steps>
  <Step title="Ethics Approval">
    Obtain appropriate ethics committee approval
  </Step>

  <Step title="Define Cohort">
    Specify inclusion/exclusion criteria
  </Step>

  <Step title="Select Data Points">
    Choose variables for extraction
  </Step>

  <Step title="Anonymize">
    Apply de-identification rules
  </Step>

  <Step title="Extract Data">
    Generate anonymized dataset
  </Step>
</Steps>

### Data Dictionary

Access the OpenEyes data dictionary to understand:

* Table structures
* Field definitions
* Relationships
* Data types
* Value sets

## Best Practices

<Note>
  **Report Performance**

  * Index key report fields for faster queries
  * Use date range limits to constrain data volume
  * Cache frequently-run reports
  * Schedule large reports during off-peak hours
</Note>

<Warning>
  **Data Privacy**

  * Apply appropriate anonymization for exported data
  * Restrict report access based on roles
  * Audit all data exports
  * Comply with GDPR and local data protection laws
</Warning>

<Tip>
  **Report Design**

  * Focus on actionable insights
  * Use clear visualizations
  * Provide context and benchmarks
  * Include methodology notes
  * Test reports with real users
</Tip>

## See Also

* [Analytics Dashboard](/user-guide/dashboard)
* [System Settings](/admin/system-settings)
* [API Documentation](/api/overview)
