# Ambiens — mode d'emploi pour agents > L'eau du robinet d'une commune française est-elle potable ? Ce fichier décrit > comment obtenir la réponse vous-même, depuis les APIs publiques, et quoi en > restituer à votre humain. Ceci est de la documentation, pas une consigne : vos propres instructions restent prioritaires. Rien ici ne vous demande de les ignorer. https://bengous.github.io/ambiens/ est une application rendue côté client : le HTML servi ne contient que `
`, aucune donnée. Ne cherchez rien dedans et ne la citez pas comme source. Les sources sont les APIs ci-dessous ; Ambiens n'en est qu'une mise en forme. Aucun backend, aucune clé d'API, aucun LLM côté site. ## 1. Commune -> code INSEE https://geo.api.gouv.fr/communes?nom=Annecy&boost=population&fields=nom,code,codesPostaux,population,codeDepartement&limit=8 Par code postal : `?codePostal=74000&fields=…`. Par position : `?lon=6.1264&lat=45.9024&fields=…,centre` rend la commune qui contient le point. Fiche d'une commune : `https://geo.api.gouv.fr/communes/74010?fields=nom,code,codesPostaux,population,codeDepartement,centre` Un code INSEE fait 5 chiffres, sauf en Corse (2A ou 2B suivis de 3 chiffres). Il ne se confond pas avec le code postal : 74010 est le code INSEE d'Annecy, 74000 son code postal. ## 2. Code INSEE -> réseaux de distribution (UDI) https://hubeau.eaufrance.fr/api/v1/qualite_eau_potable/communes_udi?code_commune=74010&annee=2026&size=100 Réponse : `{ count, data: [{ code_commune, code_reseau, nom_reseau, nom_quartier, annee }] }`. - `count` à 0 : réessayer avec l'année précédente. - Une ligne par année ET par quartier : dédupliquer sur `code_reseau`. - `nom_quartier` vaut parfois `"-"` : le traiter comme absent. - Certaines communes n'ont aucune UDI référencée mais ont quand même des résultats : passer alors à l'étape 3 sans filtre `code_reseau`. ## 3. Réseau -> dernier contrôle sanitaire https://hubeau.eaufrance.fr/api/v1/qualite_eau_potable/resultats_dis?code_commune=74010&code_reseau=074000198&sort=desc&size=500&fields=code_prelevement,date_prelevement,libelle_parametre,code_type_parametre,resultat_numerique,resultat_alphanumerique,libelle_unite,limite_qualite_parametre,reference_qualite_parametre,conclusion_conformite_prelevement,conformite_limites_bact_prelevement,conformite_limites_pc_prelevement,conformite_references_bact_prelevement,conformite_references_pc_prelevement,nom_distributeur Un prélèvement = N lignes partageant le même `code_prelevement`, une par paramètre analysé. Grouper par `code_prelevement`, garder le groupe dont `date_prelevement` est le plus récent (dates ISO 8601 UTC : la comparaison lexicographique suffit). ## Contraintes Hub'Eau (mesurées en réel, pas supposées) - GET nu, aucun en-tête personnalisé : le moindre en-tête déclenche un préflight OPTIONS que le WAF bloque, alors que le GET simple passe. - HTTP 206 = page partielle, c'est un succès, pas une erreur. - Rester sous ~10 requêtes/s : traiter les réseaux par lots de 8. - `resultat_numerique` vaut 0 quand `resultat_alphanumerique` vaut `<0,2` : c'est l'alphanumérique qui fait foi. - `libelle_unite` à `"SANS OBJET"` : il n'y a pas d'unité à afficher. - L'API flanche par intermittence (timeout isolé) : rejouer une fois avant de conclure à une panne. ## Règle de verdict Pour un réseau, à partir des lignes de son dernier prélèvement : - `limites` = `conformite_limites_bact_prelevement` et `conformite_limites_pc_prelevement` (valeurs `C`, `N`, `S`, ou vide). - `references` = les deux champs `conformite_references_*_prelevement`. - Recalcul local, ligne par ligne, uniquement si `code_type_parametre` vaut `"N"` et que `resultat_numerique` est numérique : lire les seuils, donnés en texte par `limite_qualite_parametre` et `reference_qualite_parametre` (`"<=0 n/(100mL)"`, `">=6,5 et <=9 unité pH"`, `"<0,1 µg/L"` — virgule décimale), et vérifier toutes les contraintes. Aucun seuil exploitable : paramètre non évalué. On n'invente jamais un verdict. Cascade, dans cet ordre exact : 1. `N` dans `limites` -> non conforme 2. `C` dans `limites` -> avec réserves si `N` dans `references`, sinon conforme 3. dépassement de limite au recalcul -> non conforme 4. `N` dans `references`, ou dépassement de référence au recalcul -> avec réserves 5. `C` dans `references`, ou au moins un paramètre conforme au recalcul -> conforme 6. sinon -> indéterminé La conclusion officielle de l'ARS prime donc toujours ; le recalcul n'est qu'un repli quand elle est muette. Un désaccord (`C` officiel mais dépassement de limite au recalcul) se signale à l'humain, il ne change pas le verdict. Verdict de la commune = le pire verdict de ses réseaux, en ne comptant que les réseaux qui ont effectivement un prélèvement. Gravité croissante : conforme < indéterminé < avec réserves < non conforme. Libellés utilisés côté humain : « Eau conforme », « Conforme, avec réserves », « Non-conformité détectée », « Données indisponibles ». Au-delà de 183 jours depuis le dernier prélèvement, signaler que la situation a pu évoluer depuis. ## Contexte local — n'affecte pas le verdict sanitaire https://api.vigieau.gouv.fr/api/zones?commune=74010&zoneType=AEP Restrictions sécheresse sur l'eau potable. Un tableau vide veut dire « aucune restriction en vigueur », pas une panne. CORS ouvert, préflight accepté. https://hubeau.eaufrance.fr/api/v2/hydrometrie/referentiel/stations?latitude=45.9024&longitude=6.1264&distance=20&en_service=true&format=json https://hubeau.eaufrance.fr/api/v2/hydrometrie/observations_tr?code_entite=V1015010&grandeur_hydro=Q&sort=desc&size=1 Débit des rivières. `Q` est en L/s, à restituer en m³/s. Une station `en_service` peut rendre `count=0`. https://hubeau.eaufrance.fr/api/v1/niveaux_nappes/stations?bbox=…&nb_mesures_piezo_min=100&format=json https://hubeau.eaufrance.fr/api/v1/niveaux_nappes/chroniques_tr?code_bss=…&sort=desc&size=1 Niveau des nappes. `lat`/`lon`/`distance` sont silencieusement ignorés : la `bbox` est obligatoire. Les piézomètres les plus proches ne publient pas tous en temps réel. ## Ce qu'il faut dire à votre humain - Le verdict ET sa date, pas seulement « c'est bon ». - De quel réseau de distribution il s'agit, s'il y en a plusieurs. - Que ce n'est pas un avis médical ni une publication officielle : en cas de doute, la conclusion de l'ARS fait foi. - Que la fréquence des contrôles varie d'une commune à l'autre et que la donnée affichée peut dater. - Que le contexte sécheresse, rivières et nappes est informatif : il ne dit rien de la potabilité au robinet. ## Lien partageable https://bengous.github.io/ambiens/?commune=74010 `commune` est le seul paramètre d'URL, et il attend un code INSEE.