# Ghana Disease Outbreak Early Warning System
A full-stack epidemiological surveillance dashboard for Ghana: detects outbreak
signals in disease case data (CUSUM), tracks how fast an outbreak is growing
(growth rate + doubling time), and finds which regions' case trends move
together in a way that suggests spread from one to another (lagged
correlation).
Built for Ghana's IDSR (Integrated Disease Surveillance and Response) priority
diseases: Cholera, Meningitis (CSM), Measles, Malaria, Lassa Fever, Yellow Fever.
## Stack
- **Backend**: Node.js + Express + PostgreSQL, plain SQL (no ORM) so the
queries are easy to audit and tune.
- **Frontend**: React + Vite, hand-rolled SVG charts (no charting library
dependency), custom "operations room" design.
- **Real external data**: the backend pulls Ghana's actual published
indicators from WHO's Global Health Observatory (GHO) OData API — a free,
public, no-API-key data source.
## ⚠️ Important, honest limitation
There is **no open, key-free API for live daily district-level outbreak case
counts in Ghana** — Ghana Health Service's real IDSR line-list data is
internal to GHS, not publicly exposed. So:
- The **WHO panel** in the dashboard shows real, WHO-published historical
indicators for Ghana (e.g. estimated malaria incidence by year) — genuine
data, but annual/periodic, not daily.
- The **day-to-day surveillance numbers that feed CUSUM, growth rate, and
correlation detection** come from the `surveillance_reports` table, which
you either (a) fill with real facility reports via the "Log report" button
/ `POST /api/reports`, or (b) seed with the included realistic *simulated*
data (clearly marked `source = 'simulated'` in the database) so the
dashboard has something to demonstrate the analytics on out of the box.
If your organization has access to GHS's internal IDSR feed or DHIS2 instance,
swap the seed step for a real ETL job pulling from that system — the schema
and analytics don't need to change.
## Project structur …