Inspiration and problem

To a computer, a rumour and a verified report look exactly the same. Citizens already photograph foamy, stagnant, smelly streams. But a city can't tell which reports to trust, a health system can't read them, and nothing says what a report is allowed to be used for. OneAquaHealth's FHIR guide says what was observed, but not how far to trust it. That is the missing layer between "a citizen saw foam" and "a city acts on it". StreamProof fixes that inside OneAquaHealth's own FHIR standard. It grades every report, lets neighbours and experts strengthen it, and writes the answer into the record, with a published rule that every system downstream can enforce.

What it does

  • Report in a minute, in 45 languages, with the camera inside the page. It works offline.
  • Graded at once, A to D, with seven reasons anyone can read and argue with. Neighbours count as people, not reports.
  • A permitted-use gate sits in front of every output. The rule is a published FHIR CodeSystem, so the app and any receiving system enforce the same thing.
  • Experts verify in one tap, and the record upgrades. Only then can it leave as FHIR.
  • The River Health Brief gives a city next steps from the real OneAquaHealth Catalogue of Measures, and flags stretches nobody has checked.
  • DipteraCAST ground truth: verified mosquito records leave as labelled CSV or FHIR. A visual all-clear is "not seen", never "absent".

What the hackathon asked for, and what we built

They asked for What we built
Impact (30%): better monitoring and awareness of water ecosystems Citizen photos become evidence a city can act on, with measures from OAH's own Catalogue and verified data for DipteraCAST.
Innovation (20%) Trust travels inside the FHIR record. The gate is the published rule file.
Technical (20%) 0 errors, 0 warnings against the official OAH profiles (HL7 Validator). 93 backend tests, 27 end-to-end tests.
Usability (15%) One minute to report, offline, 45 languages (right-to-left too), every grade explained, accessibility checks clean.
Feasibility (15%) Built on the OAH guide, works for any city, can sit behind OAH's Citizen Science App.
Track 7: FHIR models and integration Profiles derived from ObservationIndicatorsOah and LocationOah, a ConceptMap to OAH codes, FHIR export.

Research we built on

Source What we took
Alabri & Hunter (2010), "Enhancing the Quality and Trust of Citizen Science Data", IEEE e-Science Automatic quality checks plus a trust measure per observer → our seven checks and track record.
Baker et al. (2021), Citizen Science: Theory and Practice, doi:10.5334/cstp.351 A hierarchy: community checks most, experts check the flagged → our evidence graph.
OAH Catalogue of Measures (Dias, Serra, Feio 2025), CC BY 4.0 Real measures with section and page → the brief.
HL7 Europe OAH FHIR guide The profiles and codes we derive from.

New here: a machine-readable rule for what each trust level may be used for, carried inside standard FHIR records.

How we built it

Python + FastAPI + SQLite for the evidence engine and gate. Next.js PWA for citizens and organisers. FHIR Shorthand compiled with SUSHI against the OAH guide and checked with the HL7 Validator. Real OpenStreetMap streams and Open-Meteo rainfall; the demo reports are synthetic and labelled.

Challenges we ran into

  • The OAH guide isn't published as a package, so we built a pipeline that compiles it locally (it has no licence, so we never copy it).
  • Reaching zero warnings meant fixing real modelling issues, such as permits needing to be a Coding.
  • Staying honest: "not seen" is not "absent", and foam and odour have no Catalogue measure, so we label those "team inference".

Accomplishments that we're proud of

  • Records that validate against the official OAH profiles, and a profile that refuses unverified records on its own.
  • The gate and the published rule can't disagree: the gate is the file, and a test proves it.
  • A test checks every Catalogue quote and page number, so a wrong citation fails the build.

What we learned

Trust is a data problem, not only a UI problem. And honesty is a feature: "not seen", "team inference" and "interface only" are what make the rest believable.

What's next for StreamProof

Propose the trust add-on to HL7 Europe's OAH guide. Calibrate the grade with OAH ecologists on real expert-labelled reports. Native-speaker review of translations. Connect DipteraCAST once a model interface is public.

Built With

Share this project:

Updates

Submission history