Track

Track 3: AI-Supported Assessment. StreamCheck checks citizen stream assessments with explainable rules and leaves every decision to the citizen. It also contributes to Track 7: the export follows the OneAquaHealth FHIR IG profiles.

Problem

The OneAquaHealth Citizen Science App asks volunteers about the channel, the water, the margins and an overall rating (Good, Moderate or Poor). Volunteers are not ecologists. Some records contradict themselves: a stretch rated Good next to a sewage discharge, clear water the day after a storm, a margin with no plant cover but a "dominant" plant type. Today these slip through until an expert cleans the data, long after anyone can go back and look.

What StreamCheck does

  • Same questions, plain words. The channel, water and margin questions and their answer codes (NAT, FAS, CL, ...) come from the OAH app. Each question shows the scientific term underneath. Left and right margins are asked side by side.
  • 106 research sites on a map. Benevento, Coimbra, Ghent, Oslo and Toulouse, from the OAH public API, or any point the citizen taps.
  • Weather context. Rain over 48 hours, mean air temperature over 3 days and today's high for that point, from Open-Meteo.
  • Second look. 15 rules compare answers with each other, with the weather and with the citizen's own rating. Each flag names the answers involved, the reason and the data source. The citizen keeps the answer (optionally saying why) or changes it. Nothing is changed automatically. Safety notes (foam next to a discharge, possible cyanobacteria, oil next to an outfall) never block the record.
  • Field evidence. "Confirm I'm here" compares the phone's position with the chosen site. Upstream, downstream and surroundings photos, as in the OAH app, are read on the device for their capture time and GPS. A phone far from the site, a photo taken elsewhere or a photo older than two days each raise a second-look check. Photos never leave the device; the export keeps only size, hash and those findings.
  • Result. The citizen's rating stays the recorded one. Next to it: an indicator view on the same three-class scale (channel and banks, water, margins, flow pressures), how far apart the two are, a confidence level, and One Health notes for the ecosystem, animals and people.
  • FHIR R4 export. A Location claiming LocationOah with the OAH site code, and Observations claiming ObservationIndicatorsOah, coded first with the project's TemporaryOahSystem indicators. The IG does not model the citizen questions yet, so StreamCheck publishes two proposed CodeSystems for them. Second-look decisions travel as Observation.note, and photos as Media with their hash. The example bundle has 0 errors on validator.fhir.org (FHIR 4.0.1).

Who it is for

Volunteers using the OAH app, who get feedback while they are still standing at the stream. And the researchers and city teams who read the data and need to know which records to trust and why.

Expected impact

Fewer contradictory records reach the city dashboards, and the ones that remain carry the citizen's explanation. Volunteers learn the terms and the reasoning behind a good assessment as they go. Health-relevant signals (sewage, possible toxic algae, children or dogs in polluted water) are pointed out on the spot, which is the One Health link this project is about.

How it was built

Plain HTML, CSS and JavaScript modules, no build step and no server, hosted on GitHub Pages. It installs as a PWA and works offline after the first visit, so it still runs at a stream with no signal (weather checks are then skipped, and the app says so). Leaflet with OpenStreetMap tiles. 22 Node tests cover the answer codes, every rule, the indicator view, the One Health notes, the FHIR bundle, the weather summary, and EXIF and distance parsing. Records stay in the browser.

Limits and next steps

The indicator view is decision support, not a validated ecological index. Weather comes from a model grid, not a gauge at the stream. Video is not included yet, and phones that strip location from photos leave the photo check with less to compare. Next: add the rules as a check step inside the official app, and submit the proposed citizen codes to the OAH IG.

Share this project:

Updates

Submission history