# genomicsengland/panelapp architecture

> Architecture diagram of the GitHub repository genomicsengland/panelapp, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-24). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/genomicsengland/panelapp
- Repository: https://github.com/genomicsengland/panelapp

## Overview

PanelApp is a Django application for managing gene panels and reviewing their genes and related entities. The tree shows web, account, and API surfaces alongside panel, gene, region, and STR review forms; sampled forms save evaluations through panel entities and update panel statistics. Panel snapshots, evidence, activity, imports, and asynchronous tasks are also represented. The README only announces the repository move, and most views and models were not sampled, so their detailed wiring is not asserted.

Main entry points: [`panelapp/panels/models`](https://github.com/genomicsengland/panelapp/tree/panelapp-moved/panelapp/panels/models) (Panel domain models), [`panelapp/panels/tasks.py`](https://github.com/genomicsengland/panelapp/blob/panelapp-moved/panelapp/panels/tasks.py) (Panel tasks), [`panelapp/accounts/tasks.py`](https://github.com/genomicsengland/panelapp/blob/panelapp-moved/panelapp/accounts/tasks.py) (Account tasks), [`panelapp/panelapp/tasks.py`](https://github.com/genomicsengland/panelapp/blob/panelapp-moved/panelapp/panelapp/tasks.py) (Email tasks)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Web application"]
  node_panel_routes["Panel routes<br/>[urls.py]"]
  node_panel_views["Panel views"]
  node_api_routes["API routes<br/>[urls.py]"]
  node_api_views["API viewsets<br/>[viewsets.py]"]
  node_api_serializers["API serializers<br/>[serializers.py]"]
  node_webservices["Web services"]
end

subgraph group_review["Panel review"]
  node_review_forms["Review forms"]
  node_gene_review["Gene review form<br/>[genereview.py]"]
  node_region_review["Region review form<br/>[region_review.py]"]
  node_str_review["STR review form<br/>[strreview.py]"]
  node_panel_models["Panel domain models"]
  node_panel_data[("Panel and review data")]
end

subgraph group_identity["Accounts"]
  node_account_views["Account views<br/>[views.py]"]
  node_user_data[("User records<br/>[models.py]")]
end

subgraph group_async["Background work"]
  node_panel_tasks["Panel tasks<br/>[tasks.py]"]
  node_account_tasks["Account tasks<br/>[tasks.py]"]
  node_mail_tasks["Email tasks<br/>[tasks.py]"]
  node_task_queue["Celery queue"]
end

node_reviewer(("Reviewer or curator"))
node_mail_service["Email service"]

node_reviewer -->|"requests"| node_panel_routes
node_panel_routes -->|"dispatches"| node_panel_views
node_reviewer -->|"API requests"| node_api_routes
node_api_routes -->|"dispatches"| node_api_views
node_api_views -->|"serializes"| node_api_serializers
node_reviewer -->|"account requests"| node_account_views
node_gene_review -->|"updates evaluation"| node_panel_models
node_gene_review -->|"updates statistics"| node_panel_models
node_region_review -->|"updates evaluation"| node_panel_models
node_region_review -->|"updates statistics"| node_panel_models
node_str_review -->|"updates evaluation"| node_panel_models
node_str_review -->|"updates statistics"| node_panel_models
node_panel_models -->|"persists"| node_panel_data
node_panel_tasks -->|"reads and writes"| node_panel_data
node_panel_tasks -->|"sends email task"| node_mail_tasks
node_account_tasks -->|"reads"| node_user_data
node_account_tasks -->|"calls"| node_mail_tasks
node_mail_tasks -->|"sends mail"| node_mail_service
node_panel_tasks -.->|"registers tasks"| node_task_queue
node_account_tasks -.->|"registers tasks"| node_task_queue

click node_panel_routes "https://github.com/genomicsengland/panelapp/blob/panelapp-moved/panelapp/panels/urls.py"
click node_panel_views "https://github.com/genomicsengland/panelapp/tree/panelapp-moved/panelapp/panels/views"
click node_api_routes "https://github.com/genomicsengland/panelapp/blob/panelapp-moved/panelapp/api/v1/urls.py"
click node_api_views "https://github.com/genomicsengland/panelapp/blob/panelapp-moved/panelapp/api/v1/viewsets.py"
click node_api_serializers "https://github.com/genomicsengland/panelapp/blob/panelapp-moved/panelapp/api/v1/serializers.py"
click node_webservices "https://github.com/genomicsengland/panelapp/tree/panelapp-moved/panelapp/webservices"
click node_account_views "https://github.com/genomicsengland/panelapp/blob/panelapp-moved/panelapp/accounts/views.py"
click node_user_data "https://github.com/genomicsengland/panelapp/blob/panelapp-moved/panelapp/accounts/models.py"
click node_review_forms "https://github.com/genomicsengland/panelapp/tree/panelapp-moved/panelapp/panels/forms"
click node_gene_review "https://github.com/genomicsengland/panelapp/blob/panelapp-moved/panelapp/panels/forms/genereview.py"
click node_region_review "https://github.com/genomicsengland/panelapp/blob/panelapp-moved/panelapp/panels/forms/region_review.py"
click node_str_review "https://github.com/genomicsengland/panelapp/blob/panelapp-moved/panelapp/panels/forms/strreview.py"
click node_panel_models "https://github.com/genomicsengland/panelapp/tree/panelapp-moved/panelapp/panels/models"
click node_panel_data "https://github.com/genomicsengland/panelapp/tree/panelapp-moved/panelapp/panels/models"
click node_panel_tasks "https://github.com/genomicsengland/panelapp/blob/panelapp-moved/panelapp/panels/tasks.py"
click node_account_tasks "https://github.com/genomicsengland/panelapp/blob/panelapp-moved/panelapp/accounts/tasks.py"
click node_mail_tasks "https://github.com/genomicsengland/panelapp/blob/panelapp-moved/panelapp/panelapp/tasks.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_panel_routes,node_panel_views,node_api_routes,node_api_views,node_api_serializers,node_webservices,node_reviewer toneBlue
class node_review_forms,node_gene_review,node_region_review,node_str_review,node_panel_models,node_panel_data toneAmber
class node_account_views,node_user_data toneMint
class node_panel_tasks,node_account_tasks,node_mail_tasks,node_task_queue toneRose
class node_mail_service toneIndigo
```

## Components

### Web application

- [Panel routes](https://github.com/genomicsengland/panelapp/blob/panelapp-moved/panelapp/panels/urls.py): `panelapp/panels/urls.py`
- [Panel views](https://github.com/genomicsengland/panelapp/tree/panelapp-moved/panelapp/panels/views): `panelapp/panels/views`
- [API routes](https://github.com/genomicsengland/panelapp/blob/panelapp-moved/panelapp/api/v1/urls.py): `panelapp/api/v1/urls.py`
- [API viewsets](https://github.com/genomicsengland/panelapp/blob/panelapp-moved/panelapp/api/v1/viewsets.py): `panelapp/api/v1/viewsets.py`
- [API serializers](https://github.com/genomicsengland/panelapp/blob/panelapp-moved/panelapp/api/v1/serializers.py): `panelapp/api/v1/serializers.py`
- [Web services](https://github.com/genomicsengland/panelapp/tree/panelapp-moved/panelapp/webservices): `panelapp/webservices`

### Panel review

- [Review forms](https://github.com/genomicsengland/panelapp/tree/panelapp-moved/panelapp/panels/forms): `panelapp/panels/forms`
- [Gene review form](https://github.com/genomicsengland/panelapp/blob/panelapp-moved/panelapp/panels/forms/genereview.py): `panelapp/panels/forms/genereview.py`
- [Region review form](https://github.com/genomicsengland/panelapp/blob/panelapp-moved/panelapp/panels/forms/region_review.py): `panelapp/panels/forms/region_review.py`
- [STR review form](https://github.com/genomicsengland/panelapp/blob/panelapp-moved/panelapp/panels/forms/strreview.py): `panelapp/panels/forms/strreview.py`
- [Panel domain models](https://github.com/genomicsengland/panelapp/tree/panelapp-moved/panelapp/panels/models): `panelapp/panels/models`
- [Panel and review data](https://github.com/genomicsengland/panelapp/tree/panelapp-moved/panelapp/panels/models): `panelapp/panels/models`

### Accounts

- [Account views](https://github.com/genomicsengland/panelapp/blob/panelapp-moved/panelapp/accounts/views.py): `panelapp/accounts/views.py`
- [User records](https://github.com/genomicsengland/panelapp/blob/panelapp-moved/panelapp/accounts/models.py): `panelapp/accounts/models.py`

### Background work

- [Panel tasks](https://github.com/genomicsengland/panelapp/blob/panelapp-moved/panelapp/panels/tasks.py): `panelapp/panels/tasks.py`
- [Account tasks](https://github.com/genomicsengland/panelapp/blob/panelapp-moved/panelapp/accounts/tasks.py): `panelapp/accounts/tasks.py`
- [Email tasks](https://github.com/genomicsengland/panelapp/blob/panelapp-moved/panelapp/panelapp/tasks.py): `panelapp/panelapp/tasks.py`
- **Celery queue**

### Other components

- **Reviewer or curator**
- **Email service**

## Connections

- Reviewer or curator → Panel routes: requests
- Panel routes → Panel views: dispatches
- Reviewer or curator → API routes: API requests
- API routes → API viewsets: dispatches
- API viewsets → API serializers: serializes
- Reviewer or curator → Account views: account requests
- Gene review form → Panel domain models: updates evaluation
- Gene review form → Panel domain models: updates statistics
- Region review form → Panel domain models: updates evaluation
- Region review form → Panel domain models: updates statistics
- STR review form → Panel domain models: updates evaluation
- STR review form → Panel domain models: updates statistics
- Panel domain models → Panel and review data: persists
- Panel tasks → Panel and review data: reads and writes
- Panel tasks → Email tasks: sends email task
- Account tasks → User records: reads
- Account tasks → Email tasks: calls
- Email tasks → Email service: sends mail
- Panel tasks → Celery queue: registers tasks
- Account tasks → Celery queue: registers tasks
