Track 7 · Digital Health Standards
Built on the standards health systems already speak.
StreamReach adds no new data silo. Stream data is stored with the official HL7 Europe OneAquaHealth FHIR IG profiles, risk is published as FHIR RiskAssessment, and alerts reach clinicians through CDS Hooks, the HL7 standard EHRs already use for decision support. Anything that speaks FHIR R4 can read it, including OneAquaHealth's own platform.
The loop
- 01
Citizen check
OAH indicator Observations
→ - 02
Weather forecast
Open-Meteo, 7 days
→ - 03
Risk engine
explainable logistic model
→ - 04
RiskAssessment
about an OAH cohort Group
→ - 05
CDS Hooks card
in the GP's EHR
→ - 06
Feedback
OAH health-measure Observation
Step 6 feeds back into step 3. Anonymous clinic signals raise the waterborne score for the reach, which closes the One Health loop between ecosystem and human health.
Resource map
| Concept | FHIR | Profile | From |
|---|---|---|---|
| Stream reach | Location | http://hl7.eu/fhir/ig/oah/StructureDefinition/location-oah | OAH IG |
| Citizen / lab indicator (foam, flow, algae, larvae, temperature, coliforms) | Observation | http://hl7.eu/fhir/ig/oah/StructureDefinition/observation-indicators-oah | OAH IG |
| Who reported it (pseudonymous volunteer, lab) | Provenance | core R4 | FHIR core |
| People exposed to a reach | Group | http://hl7.eu/fhir/ig/oah/StructureDefinition/group-oah + https://streamreach.io/fhir/StructureDefinition/stream-exposed-cohort | OAH IG + StreamReach |
| Hazard forecast with explanation | RiskAssessment | https://streamreach.io/fhir/StructureDefinition/stream-exposure-risk | StreamReach |
| Clinic-reported stream-linked cases (anonymous) | Observation | http://hl7.eu/fhir/ig/oah/StructureDefinition/observation-health-measure-oah | OAH IG |
| Alert inside the EHR | CDS Hooks card (patient-view) | CDS Hooks 2.0 | HL7 |
| Suggested work-up | ServiceRequest (draft, LOINC 625-4) | core R4 | FHIR core |
| AI-drafted, human-approved resident advisory | Communication (subject: exposed cohort) | core R4 | FHIR core |
| Who wrote and who approved the advisory | Provenance (author: AI agent, verifier: officer) | core R4 | FHIR core |
Indicator codes come from the OAH code system http://hl7.eu/fhir/ig/oah/CodeSystem/temporarySystem-oah-eu. StreamReach only adds codes the IG lacks: https://streamreach.io/fhir/CodeSystem/flow-state (citizen-observable flow) and https://streamreach.io/fhir/CodeSystem/stream-hazard.
FHIR R4 endpoints
- GET /fhir/metadata
- GET /fhir/Location
- GET /fhir/Observation?subject=Location/giofyros-1
- GET /fhir/RiskAssessment?location=Location/giofyros-1
- GET /fhir/RiskAssessment/risk-giofyros-1-waterborne
- GET /fhir/Group/cohort-giofyros-1
- GET /fhir/Observation/health-giofyros-1-gastrointestinal
- GET /fhir/Provenance?target=Observation/obs-1
- GET /fhir/CodeSystem/flow-state
- POST /fhir (transaction Bundle of OAH Observations)
CDS Hooks 2.0
- GET /cds-services
- POST /cds-services/streamreach-stream-exposure
- POST /cds-services/streamreach-stream-exposure/feedback
Register the discovery URL in any CDS Hooks client, for example the public CDS Hooks sandbox. Uses prefetch when the EHR provides it and otherwise queries the EHR's fhirServer. Returns at most two cards, with override reasons and feedback.
{
"services": [
{
"hook": "patient-view",
"id": "streamreach-stream-exposure",
"title": "StreamReach: urban stream exposure risk",
"description": "Warns when a patient lives near an urban stream with elevated waterborne-pathogen, toxic-algae or mosquito-borne risk (OneAquaHealth citizen science + weather forecast). Links matching symptoms to likely exposures and suggests work-up.",
"prefetch": {
"patient": "Patient/{{context.patientId}}",
"conditions": "Condition?patient={{context.patientId}}"
},
"usageRequirements": "Patient.address should carry the FHIR geolocation extension or a city. Feedback on the 'report' suggestion shares an anonymous, reach-level count and never the patient identity."
}
]
}Honest by design
- Explainable, not a black box. Each hazard is a small logistic model with named factors and published weights. Every RiskAssessment carries the factors that produced it as structured extensions.
- Expert priors, ready to learn. Weights are literature-informed priors, not fitted coefficients. They are built to be recalibrated against OneAquaHealth lab campaigns and syndromic data.
- Privacy. Volunteers are pseudonymous. Clinic feedback shares a count per stream reach, never the patient.
- Humans decide. Cards suggest, never order. Citizen checks stay “awaiting verification” until a coordinator reviews them. Low data freshness lowers the stated confidence.