Skip to content

How it works

From a forecast to the all-clear

Aheadwater watches a city's lakes and rivers, warns the right people before the water turns unsafe, and follows each case until it is safe again. Here is every step, and what sits underneath it.

Six steps

One shared case, from first signal to close

  1. 1

    Predict

    Every morning, each lake and river gets a risk score for the day ahead.

    A LightGBM model trained on 150,734 bathing-water samples from 7,246 lakes and rivers in 27 European countries. It reads rain and temperature from the days before, plus the site's own record. A site goes to Watch at 5 times its usual risk and to Alert at a 10% chance of failing the bathing limit.

  2. 2

    Detect

    Every signal lands in one officer console.

    The forecast, lab results, weather rules for algae, low oxygen and sewer overflow, and reports from people at the water. A reporter's photo is checked on their own device for light, focus and open water before it is sent. The photo never leaves the phone for that check.

  3. 3

    Verify

    Two sources must agree before a case opens.

    Each source adds to a trust score: a lab result over the limit counts most, then the model or official monitoring, then a citizen report and a clear photo. The officer can only open the case once two sources stand behind it.

  4. 4

    Act

    The right people hear at once, and a clock makes sure someone acts.

    The city's water officer owns the case. Public health and local vets are told the moment it opens, with the groups of people living near the water. If the officer is busy, the case moves up to their supervisor, then opens to nearby verified labs, groups and volunteers.

  5. 5

    Resolve

    The team closes the case with evidence.

    A responder claims the case, a clean follow-up sample comes back, and the case closes. The public page shows each step as it happens: warning, team on site, all-clear.

  6. 6

    Learn

    Every closed case teaches the next forecast.

    A closed case with a dated lab sample becomes a new labelled row for the next training run, so each city's forecast gets sharper with use.

The escalation clock

Every case gets picked up

The clock starts when a case opens. Public health and local vets hear at that moment, whatever happens next.

Time limits on the escalation clock
SeverityOfficer has not acknowledgedNobody has acted
highAfter 30 minutes, the supervisor is toldAfter 2 hours, verified responders nearby can claim it
mediumAfter 4 hours, the supervisor is toldAfter 24 hours, verified responders nearby can claim it
The forecast

Earned on places it has never seen

Every feature uses only data from before the sample day, and testing is grouped by site, so each score is earned on lakes and rivers the model never saw in training.

  • 1 alert in 5 is a real exceedance, against 1 in 50 for a random pick.
  • ROC-AUC 0.79 across Europe, and 0.77 when trained on 2020 to 2023 and tested on 2024.
  • 5.5 times the usual risk at Blaarmeersen, Ghent, on the morning of 17 May 2021. The lab sample that day came back over the limit. The model had never seen a Ghent sample.

The trained trees are exported to JSON and scored inside this web app. A test checks that the app's scores match Python's.

Weather rules

Other hazards, in any city from day one

  • Algae bloom. Calm wind (under 10 km/h) and a week averaging 20 °C or more.
  • Low oxygen. 3 days at 28 °C or more, or heavy rain after 7 dry days.
  • Sewer overflow. 20 mm of rain in a day, 40 mm for an alert.

Each city tunes these limits to its own water.

Built on HL7 FHIR

Health systems can read every case

Each step is stored as a FHIR R4 resource on the OneAquaHealth implementation guide. The official HL7 validator reports 0 errors across 3 full incident bundles.

FHIR resources Aheadwater writes
ResourceHoldsProfile
Locationthe lake or riverOneAquaHealth profile
Observationrisk scores, lab results, citizen reportsOneAquaHealth profile
Grouppeople living near the waterOneAquaHealth profile
DetectedIssuethe case itselfHL7 FHIR R4
Taskeach job on the escalation clockHL7 FHIR R4
CareTeamwho is working on itHL7 FHIR R4
Communicationevery alert and the public advisoryHL7 FHIR R4
Two real days

What the demo replays

Ghent, 17 May 2021

After a wet weekend, the forecast flags Blaarmeersen lake. A citizen report agrees, the case opens, and the lab result confirms it. The whole case runs to the all-clear.

Bengaluru, 16 August 2017

After record rain, foam from Varthur Lake spills onto the road. A citizen report and the Central Pollution Control Board's monitoring open the case on the same workflow. Bengaluru runs on reports and lab results, and its first dated sample becomes its first training row.

Real: every bacteria sample, the weather, each risk score, the Ghent lab results, the Bengaluru monitoring figures and the Oslo health cohorts. Written for the demo: the citizen reports, the responders and the Ghent cohorts. These carry the HL7 test-data tag in every record.

See it for yourself

Open the console, the responder view and the public page side by side. They share one live case.