Trois régressions silencieuses au rejeu, une par question posée. Les contrats étaient remplacés comme les véhicules, au motif qu'une liste rejouée n'a pas d'identité stable. C'est vrai d'une voiture, faux d'un contrat : son type vient d'une énumération fermée. On appariait donc rien alors qu'il n'y avait rien à deviner, et on payait l'état utilisateur de la seule saisie opt-in du produit. La déclaration de travaux ne gardait qu'un mois pour tout le logement. Une piscine finie en juin et une véranda finie en août partageaient une date limite — celle de la dernière déclarée, l'autre disparaissant avec son sujet. Un mois par chantier, un sujet par mois, et deux chantiers du même mois restent une visite unique au service des impôts. Le formulaire repart à vide à chaque rejeu, parce que la question porte sur ce qui vient d'arriver ; le logement, lui, accumule et oublie à treize mois. Enfin, carte-grise-changement-adresse attendait depuis sa publication un demenagement_recent que personne n'écrivait. On attendait un écran de correction d'adresse pour le poser ; le rejeu du quiz le fait depuis le 28/07, il tient les deux adresses dans la même fonction. On pose le mois, jamais un booléen — sans quoi la fiche annoncerait un mois pour la carte grise à vie, ce que D-059 venait de corriger sur la piscine. Vérifié sur une copie de la production : deux déclarations foncières vivantes après rejeu, cinq contrats gardant leur identifiant, un second rejeu qui ne bouge plus rien. 905 tests. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
61 KiB
Pilier Logement — sources adressables et plan d'implémentation
Document de référence du pilier logement : ce qu'une adresse française permet de savoir gratuitement, ce qu'on en fait, et dans quel ordre. Le cadrage reste la source de vérité produit ; ce document le décline sur un pilier.
Statut des tests : toutes les API marquées ✅ ont été appelées réellement le 25 juillet 2026 et ont renvoyé une réponse exploitable, sans clé ni token. Les requêtes exactes sont reproduites pour ne pas avoir à les rechercher.
Adresse d'essai : 5 rue Lafayette, 31000 Toulouse → lat 43.604992, lon 1.444281, citycode 31555, banId 31555_4920_00005.
Mise à jour du 30 juillet 2026 (audit-2026-07-30.md) — trois choses ont changé depuis la rédaction de ce document, dont une erreur de fait :
Ce que ce document dit Ce qui est vrai depuis Phases 0/1/2 livrées, phases 3 et 4 « à l'état de plan » Toujours vrai — mais une carte des périmètres réglementaires est entrée dans le produit (D-022 → D-030), avec cinq couches dont quatre viennent du pilier logement : nucléaire, sécheresse, PPRT, inondation. Le § 4 et le § 5 en portent les corrections (D-024 sur les rayons de PPI, D-027 et D-029 sur les zones d'eau) Fermeture du cuivre : « ❌ non testé — pas d'API propre » (§ 2.6, § 6) Faux, et vérifiable en un appel — puis livré le 30/07/2026 (D-031) : table fermeture_cuivrerecopiée chaque semaine, fichefermeture-cuivre, et une question au quiz (fibre / ADSL / je ne sais pas), la seule chose du logement qu'aucune source publique ne sache direDeux couches de carte relèvent de ce pilier Trois depuis le 30/07/2026 : la couche inondation est entrée (D-031 § 5), et elle donne enfin un tracé à inondation-gestes, qui était muette depuis sa créationLe § 4 décrit un périmètre d'iode unique Corrigé par D-024 : un rayon par site, et un PPI n'implique pas la distribution de comprimés. Le § 9 en porte le détail
État d'avancement (25 juillet 2026)
Phase 0 : livrée, déployée, vérifiée en production. Voir le détail par item en § 3 (chaque case cochée renvoie au fichier réel). Résumé :
- Adapter ADEME réparé (0.a) et renforcé au-delà du plan initial : jointure
identifiant_ban, prise du DPE le plus récent en confiance haute pour une maison (peu importe le nombre de diagnostics à cette adresse — ce n'est jamais que le même logement au fil du temps), et enrichissement par unanimité pour les appartements en confiance basse (type,chauffage,periodeConstructionproposés seulement s'ils sont identiques sur tout l'échantillon DPE de l'immeuble — jamais l'étiquette ni la validité, qui restent propres à un logement précis). Voirsrc/adapters/adresse.ts. - Identifiants d'adresse conservés (0.b) —
citycode/banId/lat/lonjusqu'à l'assetlogement. revision-loyer-irlcorrigée (0.c) — v3, exclut les logements F/G confirmés.- Les 6 fiches calendaires (0.d) — livrées, validées par simulation (voir plus bas).
- Au-delà du plan initial : le principe des trois niveaux de vérité (§ 1) est implémenté, pas seulement conçu — écran de confirmation DPE dans le quiz (
src/app/quiz/quiz-client.tsx), avec bouton Annuler en cas de clic trop rapide, fonction pure testée (src/knowledge/dpe-confirmation.ts). Un bug de report (le chip visuel ne s'écrivait pas dans les réponses déclarées si l'utilisateur n'y touchait pas) a été trouvé et corrigé au passage, pour le type de logement et le chauffage. - Matrice de correspondance chauffage (au-delà du plan initial, demandée en cours de route) :
src/knowledge/dpe-chauffage.tsremplace la détection par sous-chaîne par une correspondance exacte et exhaustive des 155 valeurs de générateur + 15 valeurs d'énergie principale publiées par l'ADEME — c'est elle qui distingue enfin une PAC d'un simple radiateur électrique (les deux affichaient "Électricité" côté énergie principale, seul le générateur les sépare). - Validation par simulation : 5 profils de quiz couvrant chaque branche d'applicabilité (positive et négative) + les 8 fiches contrat testées via l'opt-in — 50 fiches sur 51 déclenchées correctement. La 51ᵉ (
carte-grise-changement-adresse, pilier véhicules) s'est révélée être une condition morte : rien dans l'application ne pose jamaisdemenagement_recentsur un asset véhicule — à corriger ou retirer, indépendamment de ce document. - Contrats intégrés au quiz (D-006, cf.
docs/decisions.md) : décision cross-pilier, hors périmètre de ce document — mentionnée ici seulement parce qu'elle a été validée par la même méthode de simulation.
Phase 1 : livrée, déployée, vérifiée en production. Voir le détail en § 4. Résumé :
- Adapter
src/adapters/georisques.ts— quatre endpoints indépendants (rapport de risques, argile, radon, débroussaillement), aucun bloquant pour les autres, aucune clé. - Appelé pendant l'écran de fabrication qui suit le quiz, sous plafond de 8 s, avec repli sur une file pg-boss au-delà (
src/jobs/enrichissement-georisques.ts). Le fond de tâche seul, tenté d'abord, faisait manquer la révélation : le hub se rendait 6 s avant que les risques n'existent — corrigé par D-009. - Les 6 fiches annoncées, toutes déclenchées sur des adresses réelles.
- Arbitrage tranché en cours de route (D-008,
docs/decisions.md) : un aléa du lieu est lu directement par le moteur, sans confirmation, contrairement à une donnée qui décrit le logement (le DPE). Demander à quelqu'un de valider le classement radon de sa commune serait une question mémoire posée à moins informé que la source. - Trois garde-fous ajoutés au plan initial, chacun né d'un relevé réel : seul le statut à l'adresse est lu ; une zone de débroussaillement n'est retenue que si son code commune est celui de l'adresse (l'endpoint renvoie volontiers celle du voisin) ; le volet technologique se limite aux installations classées, la pollution des sols et les canalisations étant « Concerne » à l'adresse dans la moitié des villes sans qu'aucun travail n'en découle.
Phase 2 : livrée, déployée, vérifiée en production. Voir le détail en § 5. Résumé :
- La seule évolution du moteur de réconciliation depuis son écriture : la clé devient
template × asset × sujet(§ 5.c). Sans elle, deux arrêtés CatNat sur la même commune se seraient écrasés l'un l'autre — le second aurait remplacé la date limite du premier, en silence, sur un délai d'assurance. - Deux adapters (
catnat.ts,vigieau.ts), deux fiches, une tablearretes_commune, une file quotidienne à 3 h. - Une limite mesurée qui conditionne la valeur réelle de 5.a : GASPAR recopie le Journal officiel par lots, avec une latence de plusieurs semaines que data.gouv.fr reconnaît lui-même. Un arrêté peut arriver après épuisement de ses 30 jours ; dans ce cas rien n'est annoncé.
- Le garde-fou du § 5.e est livré côté filtrage, pas côté budget d'envoi — il n'y a pas encore de moteur de notification à contraindre.
Phases 3 et 4 : toujours à l'état de plan, non entamées.
1. Les trois niveaux de vérité
Règle fondatrice du pilier, posée avant toute implémentation. Elle découle de § 4.2 du cadrage (inférence > saisie) et de sa limite : un propriétaire fait des travaux sans refaire son DPE, un diagnostic de 2019 décrit un logement qui n'existe plus.
| Niveau | Origine | Droits |
|---|---|---|
| déclaré | le quiz, l'utilisateur | crée des échéances |
| confirmé | l'utilisateur a validé une proposition | crée des échéances |
| dérivé | DPE, Géorisques, Hub'Eau… | peut seulement poser une question |
Résolution : déclaré > confirmé > dérivé.
Invariant nouveau : une valeur dérivée ne produit jamais une échéance à elle seule. Elle produit une question modulaire, ou rien.
Précisé par D-008 (25/07/2026) à la livraison de la Phase 1 : l'invariant vise les valeurs qui décrivent le logement — celles qu'un chantier peut démentir sans que la source le sache. Une valeur qui décrit le lieu (zone de débroussaillement, potentiel radon de la commune, exposition du sol aux argiles, périmètre d'un PPI) n'est pas réfutable par l'occupant : il n'a pas de meilleure information que l'État, et lui demander de la confirmer serait une question mémoire posée à moins informé que la source. Ces attributs-là (risque_*, cf. § 4) sont donc lus directement par le DSL, sans passer par contexte.
Stockage, sans nouvelle table :
assets.attributes = {
...déclaré, // le quiz, inchangé
contexte: { … }, // dérivé + horodaté, JAMAIS lu par applicabilite.when
contexte_confirme: { … } // validé par l'utilisateur, lu par le moteur
}
assets.provenance = "detection_adresse" // valeur déjà prévue dans src/db/schema.ts
Conséquence : src/engine/applicability.ts et src/engine/reconcile.ts restent inchangés — le DSL ne lit que du déclaré et du confirmé.
Les questions modulaires
Une seule à la fois, jamais bloquante, « je ne sais pas » toujours de première classe.
| Situation | Comportement |
|---|---|
type_batiment = maison et 1 seul DPE et statut_geocodage = "adresse géocodée ban à l'adresse" |
proposition pré-cochée : « Le diagnostic de ta maison date du 30/07/2024 : chauffage électrique, VMC simple flux. Toujours d'actualité ? » → [oui] [j'ai changé le chauffage] [j'ai isolé] [je ne sais pas] |
appartement, ou ≥ 2 DPE au même identifiant_ban |
on ne propose rien. Au mieux : « Plusieurs diagnostics à cette adresse — le tien, c'est lequel ? » (surface + étage), avec un « passer » visible |
| aucun résultat | silence, le quiz continue |
| DPE de plus de 2 ans | une question de fraîcheur : « Des travaux d'isolation ou de chauffage depuis ? » |
Preuve par l'exemple : sur l'adresse d'essai, la jointure exacte renvoie 2 DPE — un appartement de 24,5 m² étage 4 étiqueté F, et un de 42,3 m² étiqueté D. Proposer une valeur ici serait faux une fois sur deux.
Le test du geste (risques)
Un risque a le droit d'être remonté — au même titre qu'un rappel constructeur : échéance dormante, personne ne surveille, forte valeur quand ça tombe. La règle n'est pas « pas de risques », c'est :
Un risque n'entre dans le hub que s'il produit un geste concret et réalisable. S'il n'y a rien à faire, il n'y a rien à dire.
| Passe le test | Ne passe pas |
|---|---|
| Zone inondable → surélever le tableau électrique, batardeau, ne pas stocker en sous-sol, connaître le point de coupure | « Votre commune est en zone sismique 1 » |
| Argile → photographier et dater les fissures (c'est la preuve qui manque à l'expertise CatNat) | Un score de risque global |
| Radon zone 3 → kit de dépistage 30 €, à poser pendant la saison de chauffe | Une carte des aléas à consulter |
| Périmètre de distribution d'iode → pastilles gratuites en pharmacie | Un compteur « 4 risques sur votre commune » |
Et les interdits du cadrage tiennent : pas de dashboard à tenir, pas de rouge, pas de score, pas de comptabilité morale. Le ton reste déculpabilisant — on informe une fois, on propose un geste, on se tait.
2. Catalogue des sources
2.1 Socle d'identité
| Source | Appel | État |
|---|---|---|
BAN — géocodage, citycode, banId, lat/lon |
GET https://api-adresse.data.gouv.fr/search/?q=<adresse>&type=housenumber&limit=5 |
✅ testé — déjà utilisé par src/adapters/adresse.ts |
Le champ properties.id (ex. 31555_4920_00005) est la clé de jointure exacte avec le DPE. Il est aujourd'hui jeté — voir Phase 0.b.
2.2 Bâtiment et performance énergétique
| Source | Appel | État |
|---|---|---|
| Observatoire DPE ADEME — logements existants (9,77 M lignes) | GET https://data.ademe.fr/data-fair/api/v1/datasets/dpe03existant/lines?qs=identifiant_ban:"<banId>"&size=20&sort=-date_etablissement_dpe&select=<champs> |
✅ implémenté (src/adapters/adresse.ts) — jointure exacte, size=20 (relevé depuis 5, cf. § 3.0.a) |
| Observatoire DPE ADEME — logements neufs | .../datasets/dpe02neuf/lines |
✅ testé (HTTP 200), non exploité |
| BDNB (CSTB) — données au bâtiment | GET https://api.bdnb.io/v1/bdnb/donnees/batiment_groupe_complet?code_commune_insee=eq.<insee>&limit=1 |
✅ testé — licence à vérifier avant usage |
| RNB — référentiel national des bâtiments | GET https://rnb-api.beta.gouv.fr/api/alpha/buildings/?insee_code=<insee> |
✅ testé — exige bbox, insee_code ou cle_interop_ban |
✅ Corrigé : le dataset dpe-v2-logements-existants (mort, HTTP 404) a été remplacé par dpe03existant dans src/adapters/adresse.ts.
✅ Matrice de correspondance chauffage — implémentée (src/knowledge/dpe-chauffage.ts) : la détection par sous-chaîne initialement envisagée pour type_generateur_chauffage_principal/type_energie_principale_chauffage a été remplacée par une correspondance exacte et exhaustive, construite à partir du relevé réel des 155 valeurs de générateur + 15 valeurs d'énergie (GET .../values/<champ>?size=1000). Testée (10 cas) : distingue notamment une PAC d'une chaudière électrique, deux installations qui partagent pourtant la même énergie principale déclarée (« Électricité »).
Champs utiles retournés (tous vérifiés présents) :
etiquette_dpe · etiquette_ges · periode_construction · annee_construction (souvent null)
type_batiment · surface_habitable_logement · hauteur_sous_plafond · nombre_niveau_logement
type_energie_principale_chauffage · type_generateur_chauffage_principal · type_installation_chauffage
type_ventilation · type_energie_principale_ecs · zone_climatique (H1a…H3) · classe_altitude
cout_total_5_usages · date_etablissement_dpe · date_fin_validite_dpe
identifiant_ban · statut_geocodage · score_ban · complement_adresse_logement · id_rnb
⚠️ annee_construction est souvent null — mesuré le 26/07/2026 sur 500 DPE : renseignée à 57 %, contre 100 % pour periode_construction (tranche : « avant 1948 »). Ne pas convertir la tranche en nombre — ce serait inventer une donnée.
✅ Implémenté (D-010) : les deux sont désormais reportées dans les réponses du quiz et résolues en un attribut unique epoque_construction (avant_1949 / 1949_1997 / apres_1997, cf. src/knowledge/construction.ts), lu directement par le DSL — la datation est la seule caractéristique du DPE qu'aucun chantier ne peut démentir, elle ne passe donc pas par l'écran de confirmation. Elle ouvre les fiches plomb-crep et amiante-etat. La tranche « 1989-2000 » chevauche le pivot amiante du 1er juillet 1997 et ne produit rien : c'est là que l'année exacte, quand elle existe, fait la différence.
2.3 Risques (Géorisques — API v1, sans token)
| Endpoint | Appel | État |
|---|---|---|
| Rapport de risques à l'adresse | GET https://georisques.gouv.fr/api/v1/resultats_rapport_risque?latlon=<lon>,<lat>&rayon=1000 |
✅ implémenté (src/adapters/georisques.ts) — 12 risques naturels + 6 technologiques en un appel |
| Débroussaillement (OLD) | GET .../api/v1/old?latlon=<lon>,<lat> |
✅ implémenté — 404 propre hors zone ; ⚠️ peut renvoyer la zone d'une commune voisine, filtrage sur le code INSEE obligatoire |
| Arrêtés CatNat | GET .../api/v1/gaspar/catnat?code_insee=<insee>&page_size=500 |
✅ testé — données fraîches (dernier arrêté vu : 23/01/2026) ; Phase 2 |
| Argile (RGA) à l'adresse | GET .../api/v1/rga?latlon=<lon>,<lat> |
✅ implémenté — {"codeExposition":"2","exposition":"Exposition moyenne"} ; corps vide possible (relevé à Paris) |
| Radon | GET .../api/v1/radon?code_insee=<insee> |
✅ implémenté — classe_potentiel 1/2/3 |
| Zonage sismique | GET .../api/v1/zonage_sismique?code_insee=<insee> |
✅ testé |
| Risques de la commune (GASPAR) | GET .../api/v1/gaspar/risques?code_insee=<insee> |
✅ testé |
| ICPE | GET .../api/v1/installations_classees?code_insee=<insee>&rayon=1000 |
✅ testé |
Attention à l'ordre des coordonnées : latlon= attend en réalité <longitude>,<latitude>.
resultats_rapport_risque distingue, pour chaque risque, libelleStatutCommune et libelleStatutAdresse — c'est cette distinction qui rend l'info actionnable plutôt qu'anxiogène. Exemple réel sur l'adresse d'essai : inondation « Risque Existant » sur la commune mais « Risque non Connu » à l'adresse, alors que la remontée de nappe est « Risque Existant » à l'adresse.
Risques couverts : inondation · remonteeNappe · risqueCotier · seisme · mouvementTerrain · reculTraitCote · retraitGonflementArgile · avalanche · feuForet · eruptionVolcanique · cyclone · radon / icpe · nucleaire · canalisationsMatieresDangereuses · pollutionSols · ruptureBarrage · risqueMinier.
Réponse de old (testée sur Cassis et Bormes-les-Mimosas) : commune, coordonnées, URL de l'arrêté préfectoral, date d'approbation, et le flag zoneUrbaine qui détermine l'étendue de l'obligation.
⚠️ Les API v2 exigent un jeton (compte Cerbère ou FranceConnect, valable 1 an) ; la v1 reste libre mais l'État annonce une évolution. Quotas et SLA non documentés — à surveiller.
2.4 Eau
| Source | Appel | État |
|---|---|---|
| VigiEau — restrictions en vigueur | GET https://api.vigieau.beta.gouv.fr/api/zones?lon=<lon>&lat=<lat>&commune=<insee>&profil=particulier |
✅ testé — niveau, arrêté (dates + PDF), usages restreints nominatifs |
| SANDRE — tracé d'une zone d'alerte | GET https://services.sandre.eaufrance.fr/geo/zas (WFS 2.0, outputFormat=geojson, filtre OGC sur gid) |
✅ testé — 334 ko et 0,7 s pour une zone (D-027) |
| Hub'Eau — dureté de l'eau | GET https://hubeau.eaufrance.fr/api/v1/qualite_eau_potable/resultats_dis?code_commune=<insee>&code_parametre_se=TH&size=1&sort=desc |
✅ testé — 7.3 °f, prélèvement du 26/05/2026 |
| Hub'Eau — conformité, nitrates, pesticides | même endpoint sans filtre code_parametre_se |
✅ testé — conclusion_conformite_prelevement, nom_distributeur |
VigiEau renvoie niveauGravite (vigilance / alerte / crise), l'arrêté avec dateDebutValidite / dateFinValidite et son PDF, et la liste des usages avec concerneParticulier. Testé : zone Garonne aval, niveau alerte, arrêté valable jusqu'au 31/10/2026.
Il n'en sert aucune géométrie, et c'est ce qui a longtemps coûté cher : le seul jeu national qui les porte pèse 399 Mo pour tout le pays. Mais VigiEau déclare idSandre, l'identifiant de la zone au référentiel SANDRE — dont le WFS, lui, rend un tracé à la demande. C'est cette jointure qui permet à la carte d'être complète dès le quiz (D-027).
⚠️ Le SANDRE ne publie que des zones SUP et SOU. Une zone « eau potable » de VigiEau pointe alors sur la géométrie de sa zone superficielle — vérifié à Tressin (2160393 SUP et 2160402 AEP renvoient toutes deux vers le SANDRE 1072). C'est une équivalence déclarée par VigiEau, pas une observation généralisée : c'est l'une des deux réserves qui justifient de garder le fichier national en filet.
⚠️ Ce serveur est un MapServer, comme celui de Géorisques, et il partage son travers d'annoncer application/json dans ses capacités tout en le refusant — c'est geojson. En revanche il honore les filtres d'attribut, là où Géorisques les ignore en silence. Deux serveurs de la même famille, deux comportements : rien ne se suppose.
2.5 Urbanisme, énergie, services
| Source | Appel | État |
|---|---|---|
| API Carto / GPU — servitudes d'utilité publique | GET https://apicarto.ign.fr/api/gpu/assiette-sup-s?geom={"type":"Point","coordinates":[<lon>,<lat>]} |
✅ testé — 63 servitudes, dont ac1 « Périmètre des abords » (rayon 500 m, monument nommé) |
| API Carto / GPU — zonage PLU | GET https://apicarto.ign.fr/api/gpu/zone-urba?geom=<point> |
✅ testé |
| API Carto / GPU — prescriptions | GET https://apicarto.ign.fr/api/gpu/prescription-surf?geom=<point> |
✅ testé (0 résultat sur l'adresse d'essai) |
| France Chaleur Urbaine — éligibilité réseau de chaleur | GET https://france-chaleur-urbaine.beta.gouv.fr/api/v1/eligibility?lat=<lat>&lon=<lon> |
✅ testé — distance, gestionnaire, réseau futur, inPDP |
| Annuaire de l'administration — mairie, ARS, DDT | GET https://api-lannuaire.service-public.fr/api/explore/v2.1/catalog/datasets/api-lannuaire-administration/records?where=code_insee_commune="<insee>" and pivot like "mairie" |
✅ testé — horaires, site, SIREN |
| Annuaire RGE ADEME | GET https://data.ademe.fr/data-fair/api/v1/datasets/liste-des-entreprises-rge-2/lines?q=<cp> |
✅ testé — entreprise, domaine, lien_date_fin de qualification, géopoint |
2.6 Jeux de données (pas d'API dédiée)
| Donnée | Où | État |
|---|---|---|
| Zonage ABC (tension du marché) | data.gouv — « Liste des communes selon le zonage ABC » | ✅ jeu national identifié, non intégré |
| Communes « recul du trait de côte » | data.gouv — liste nationale | ✅ jeu national identifié |
| Base nationale consolidée des ZFE (BNZFE) | transport.data.gouv.fr | ✅ implémentée (D-011) — 35 périmètres, seuils Crit'Air, dates et arrêtés ; table zfe_zones rafraîchie par cron. Rien n'est gravé chez nous : une abrogation viderait la table et archiverait les fiches d'elle-même |
| Potentiel radon par commune (IRSN) | data.gouv | ✅ identifié — redondant avec l'API Géorisques |
| Fermeture du cuivre par commune | GET https://data.economie.gouv.fr/api/explore/v2.1/catalog/datasets/fermeture-reseau-cuivre/records?where=code_insee%3D%22<insee>%22 |
✅ testé le 30/07/2026 — 35 305 communes, indexé par code INSEE. Rend fermeture_commerciale, fermeture_technique, annee_fermeture_technique, lot et un message output_usager rédigé par l'État. Sur Toulouse : fermeture commerciale au 31/01/2027, lot 7 en présélection. 20 617 communes portent déjà une date technique — 766 en 2026, 2 155 en 2027, 6 824 en 2028, 10 702 en 2029. La ligne précédente (« pas d'API propre ») était fausse |
| Plans d'exposition au bruit (PEB/PGS) | départemental uniquement, pas de jeu national | ❌ non testé |
| Arrêtés termites | départemental uniquement | ❌ non testé |
quefairedemesdechets (ADEME) |
https://quefairedemesdechets.ademe.fr/api/lieux?latitude=&longitude= |
⚠️ testé — réponse vide, endpoint à confirmer |
2.7 Ce qui n'existe pas au national
Jours de collecte des déchets · horaires de bricolage et bruit de voisinage (arrêtés préfectoraux) · communes à permis de louer · communes à ravalement obligatoire · barèmes d'encadrement des loyers. Se traitent par un lien vers la mairie via l'annuaire de l'administration — c'est du contenu, pas de la personnalisation.
3. Phase 0 — « zéro nouvelle source »
Valeur maximale, coût minimal. Rien à intégrer : on répare ce qui est cassé, on cesse de jeter ce qu'on possède, on ajoute des fiches purement calendaires.
✅ 0.a — Réparer et durcir l'adapter existant — LIVRÉ
src/adapters/adresse.ts :
dpe-v2-logements-existants→dpe03existant(le premier est 404).- Passer de
?q=<texte libre>à?qs=identifiant_ban:"<banId>", tri-date_etablissement_dpe,size=20(relevé au-delà de la cible initiale de 5 : un immeuble parisien testé aligne 232 logements sur le mêmebanId— 5 était un échantillon trop mince pour que l'unanimité ci-dessous veuille dire quelque chose). selectélargi aux champs de 2.2.- Niveau de confiance implémenté (§ 1) — affiné en cours de route par rapport au plan initial :
- Maison : confiance haute dès que le plus récent des DPE trouvés est géocodé exactement — peu importe leur nombre. Plusieurs DPE sur l'adresse unique d'une maison ne sont jamais que son propre historique de diagnostics.
- Appartement (adresse partagée par plusieurs logements) : confiance basse, mais
type,chauffageetperiodeConstructionrestent proposés s'ils sont identiques sur tous les DPE de l'échantillon (valeurUnanime, testé) — jamais l'étiquette ni la validité, qui créent une échéance et doivent rester propres à un logement précis.
- Échecs journalisés (
console.error) — lecatch {}silencieux d'origine masquait une panne de source complète. - Chauffage : la détection par sous-chaîne initialement prévue a été remplacée par une vraie matrice de correspondance, voir
src/knowledge/dpe-chauffage.tset l'entrée correspondante en § 2.2.
| Source | État du test |
|---|---|
ADEME dpe03existant + jointure identifiant_ban |
✅ testé en production — maison multi-DPE (Sougé-le-Ganelon, PAC), appartement 232 logements (Paris 13ᵉ) |
✅ 0.b — Cesser de jeter les identifiants de l'adresse — LIVRÉ
QuizAnswers.adresse porte désormais citycode, banId, lat, lon (src/engine/quiz-to-assets.ts), propagés jusqu'aux attributs de l'asset logement.
Même leçon que le champ K de la carte grise : « la perdre obligerait à la redemander pour tout enrichissement ultérieur ».
C'était la seule dette bloquante du pilier — elle ne l'est plus.
✅ 0.c — Correctif de justesse, coût nul — LIVRÉ
revision-loyer-irl (v3, knowledge/templates/logement.yaml) exclut désormais les logements avec dpe_etiquette confirmé F ou G, via un nouvel opérateur not_in ajouté au DSL d'applicabilité (src/knowledge/schema.ts, src/engine/applicability.ts). knowledge/pages/revision-loyer.md documente le gel des loyers F/G.
✅ 0.d — Fiches nouvelles, aucune source externe — LIVRÉ
| Fiche | Déclencheur | Enjeu | Source réglementaire | Vérifié en simulation |
|---|---|---|---|---|
dpe-fin-validite |
date_fin_validite_dpe (donnée exacte, stratégie dpe_validite dans windows.ts) |
administratif |
DPE valable 10 ans ; ceux d'avant juillet 2021 sont caducs | ✅ |
decence-energetique |
DPE confirmé F/G + statut propriétaire | legal |
G interdit depuis le 01/01/2025, F au 01/01/2028, E au 01/01/2034 | ✅ |
cheque-energie-guichet |
foyer | argent |
Guichet 1ᵉʳ avril → 31 décembre pour les non-identifiés automatiquement. Sous plafond depuis D-051 : RFR/UC < 11 000 €, la fiche est retirée au foyer qui a déclaré une tranche au-dessus | ✅ |
spanc-controle-periodique |
equipements contains fosse_septique |
legal |
Arrêté du 27 avril 2012 — périodicité ≤ 10 ans ; rapport < 3 ans exigé à la vente | ✅ |
declaration-fonciere-90j |
equipements contains piscine |
legal |
Déclaration GMBI dans les 90 jours après achèvement + taxe d'aménagement | ✅ |
carnet-information-logement |
statut propriétaire | administratif |
Décret n° 2022-1674 — obligatoire depuis le 01/01/2023, remis à l'acquéreur | ✅ |
Test prioritaire livré : la résolution déclaré > confirmé > dérivé a son propre module pur et testé (src/knowledge/dpe-confirmation.ts, 5 cas), au même niveau d'exigence que reconcile.test.ts.
Validation de bout en bout : 5 profils de quiz construits pour couvrir chaque branche d'applicabilité (positive et négative) du pilier logement — voir la session du 25/07/2026. Cas sensibles confirmés en production : revision-loyer-irl exclue pour locataire+G, réactivée pour locataire+D (non F/G) ; decence-energetique déclenchée uniquement propriétaire+F ; fin-offre-energie-prix-fixe correctement absente pour un chauffage pac seul (ni gaz ni électrique).
4. ✅ Phase 1 — Géorisques : un adapter, tout le rapport — LIVRÉE
Valeur très forte, coût d'un adapter et quatre endpoints, sans clé.
src/adapters/georisques.ts, même contrat que adresse.ts : timeout court, dégradation douce, jamais bloquant. Appelé pendant l'écran de fabrication, sous plafond de 8 s (src/jobs/enrichissement-georisques.ts), avec repli sur la file pg-boss enrichissement-georisques au-delà du plafond. L'onboarding reste borné quoi qu'il arrive côté source, et le relevé arrive à temps pour le premier rendu du hub — voir D-009, qui corrige le fond de tâche pur retenu à la livraison initiale.
| Fiche | Condition (attribut de l'asset logement) |
Enjeu | Source API | État |
|---|---|---|---|---|
debroussaillement-old |
risque_debroussaillement: true |
legal+assurance — jusqu'à 50 €/m² non débroussaillé, contrôles satellite, saisonnier (mars-avril) |
/api/v1/old?latlon= |
✅ livrée — déclenchée à Bormes-les-Mimosas |
radon-depistage |
risque_radon: 3 |
securite — kit ~30 €, mesure pendant la saison de chauffe, seuil 300 Bq/m³ |
/api/v1/radon?code_insee= |
✅ livrée — déclenchée à Bormes et Quimper |
argile-fissures |
risque_argile in [moyenne, forte] |
argent — photographier et dater les fissures : c'est la preuve qui manque à l'expertise CatNat |
/api/v1/rga?latlon= |
✅ livrée — déclenchée à Golfech et Feyzin |
iode-pastilles |
risque_iode: true |
securite — gratuit en pharmacie, 20 km autour des centrales EDF, 1 063 communes |
champ nucleaire du rapport croisé avec le drapeau iode du site (D-024) |
✅ livrée — déclenchée à Golfech |
inondation-gestes |
risque_inondation: true |
securite — surélever le tableau électrique, batardeau, ne rien stocker en sous-sol, connaître le point de coupure |
champs inondation / remonteeNappe du rapport |
✅ livrée — déclenchée à Golfech |
pprt-travaux-prescrits |
risque_technologique: true |
argent — travaux financés à 90 %, plafonnés à 20 000 € ou 10 % de la valeur du bien |
champ icpe du rapport |
✅ livrée — déclenchée à Feyzin |
Ce qui est complet dès le quiz, et ce qui attend un passage (D-027) : tout ce qu'un écran révèle après le quiz est relevé dans le passage d'enrichissement lui-même — risques Géorisques, ZFE, CatNat, restrictions d'eau, et depuis D-027 le contour de la zone d'alerte, moissonné au SANDRE en 0,7 s plutôt que lu dans un fichier national de 399 Mo. Les passages quotidiens veillent sur ce qui évolue ensuite ; ils ne finissent pas le travail du jour même. Seuls les périmètres de PPRT font exception, et c'est assumé : ils se moissonnent par emprise spatiale, sans identifiant à demander.
Formulation obligatoire pour iode-pastilles : la réponse de Géorisques dit qu'une adresse est dans un plan particulier d'intervention, pas qu'elle ouvre droit à des comprimés. Elle répond « Risque Concerne » au pied du CEA de Fontenay-aux-Roses (PPI de 2 km, sans iode) comme à Golfech. La condition croise donc deux sources, et risque_nucleaire seul ne déclenche plus rien — voir D-024.
Formulation obligatoire pour pprt : le rapport donne le risque, pas le périmètre de prescription. La fiche dit « vérifie si ton logement est en zone de prescription » avec le lien préfecture — jamais une affirmation. Même réserve que celle déjà en place pour les rappels constructeur (src/db/schema.ts : « on ne peut jamais affirmer que ta voiture est rappelée »).
Ce que l'implémentation a ajouté au plan
- Le statut à l'adresse fait seul autorité.
statutPositif()ne reconnaît que « Risque Existant » (avec ou sans intensité accolée) et « Risque Concerne », surlibelleStatutAdresseuniquement. Piège évité de justesse : « Risque non Concerne » — le statut le plus fréquent de toute l'API — contient le mot « Concerne », et une comparaison par sous-chaîne aurait inversé le sens par défaut. oldrenvoie parfois la zone d'une commune voisine. Relevé : un point à Fréjus remonte Mandelieu-la-Napoule, un point à Porto-Vecchio remonte Cozzano. La zone n'est retenue que si soncommune.codeest celui de l'adresse — une amende à 50 €/m² ne s'affirme pas sur la foi du voisinage.- Le volet technologique se limite aux ICPE.
pollutionSolsetcanalisationsMatieresDangereusesressortent « Concerne » à l'adresse dans la moitié des villes (relevé à Toulouse) sans qu'aucune prescription de travaux n'en découle : les inclure aurait allumé la fiche PPRT pour la moitié des foyers urbains. - « Pas de réponse » n'est jamais « pas de risque ». Chaque appel distingue « la source a répondu, il n'y a rien ici » (le 404 de
oldhors zone, le corps vide dergaà Paris) de « la source n'a pas répondu » — dans le second cas, aucun attribut n'est écrit, et la fiche est simplement absente. - Régime de vérité tranché : les attributs
risque_*sont lus directement par le DSL, sans confirmation — voir D-008 dans decisions.md et le § 1 ci-dessus.
✅ Rafraîchissement périodique livré (26/07/2026) : rafraichirRisquesTousFoyers rejoue le relevé de tous les foyers en quatrième segment du passage hebdomadaire (dimanche 0h30), après les zones à faibles émissions dont le croisement dépend. Mesuré : 23 foyers, 7 enrichis, 0 échec, 40 s. Une seconde d'écart entre deux foyers — Géorisques n'a ni quota documenté ni SLA. Un foyer dont l'exposition change (la carte des argiles a été refondue en janvier 2026) voit sa fiche apparaître ou s'archiver au passage suivant, en silence.
Reste ouvert : pas de compte Cerbère — l'API v1 suffit, et le jour où elle ferme, seule la fonction appel() de l'adapter est concernée.
5. ✅ Phase 2 — La veille événementielle — LIVRÉE
Le meilleur cas d'usage de l'audit, et la seule évolution structurelle du moteur. Jusqu'ici le cron recalculait ; ici il observe le monde extérieur. Voir D-012 dans decisions.md.
✅ 5.a — Alerte CatNat — LIVRÉE
Un sinistre n'est indemnisable qu'après un arrêté interministériel, et l'assuré a 30 jours à compter de la publication au JO pour déclarer. Personne ne surveille le JO.
| Source | État |
|---|---|
GET https://georisques.gouv.fr/api/v1/gaspar/catnat?code_insee=<insee>&page_size=500 |
✅ implémenté (src/adapters/catnat.ts) — pagination suivie, dates JJ/MM/AAAA converties, déduplication sur code_national_catnat |
Fiche catnat-declaration-sinistre, stratégie de fenêtre catnat_declaration, un sujet par arrêté.
⚠️ Limite mesurée le 26/07/2026, et c'est le facteur limitant de la phase. La source n'est pas le JO mais le jeu GASPAR, qui le recopie par lots : l'arrêté publié au JO le 12/06/2026 y est (Amigny-Rouy), celui du 17/07/2026 n'y est pas (Saint-Louis-et-Parahou), et data.gouv.fr date la dernière mise à jour du fichier au 08/07/2026 en signalant que « la fréquence de mise à jour n'est pas respectée ». Un arrêté peut donc arriver après épuisement de ses 30 jours — auquel cas rien n'est annoncé, plutôt qu'un rappel arrivé trop tard. Basculer sur le JORF en open data (DILA) est la sortie, au prix d'un appariement nom de commune → code INSEE ; le reste de la chaîne ne bougerait pas.
✅ 5.b — Restrictions d'eau — LIVRÉE
| Source | État |
|---|---|
GET https://api.vigieau.beta.gouv.fr/api/zones?lon=&lat=&commune=&profil=particulier |
✅ implémenté (src/adapters/vigieau.ts) — niveau, arrêté daté + PDF, filtrage sur concerneParticulier |
Fiche restriction-eau-usages, stratégie restriction_eau. La fenêtre démarre à la prise d'effet de l'arrêté, pas à sa fin : une contrainte en vigueur aujourd'hui doit se ranger en tête, et un début calé sur « maintenant » aurait fait réécrire la ligne à chaque nuit. Trois garde-fous, chacun né d'un relevé réel : la vigilance ne déclenche rien, une zone sans usage domestique visé est ignorée, et c'est le niveau le plus strict qui s'impose quand plusieurs zones se superposent (relevé à Nantes : alerte renforcée sur l'eau potable, alerte sur la Loire).
✅ 5.c — L'évolution du moteur — LIVRÉE
src/engine/reconcile.ts clé désormais sur templateId::assetId::sujet. Rétrocompatible par construction (sujet absent = sujet vide = comportement d'avant), vérifié en base avant déploiement : les 423 échéances existantes portent toutes un sujet vide et ne bougent pas à la réconciliation suivante.
Le DSL d'applicabilité n'a pas changé d'un caractère : il répond toujours « cette fiche concerne-t-elle cet asset », et c'est un module pur séparé (src/engine/sujets.ts) qui répond « combien de fois ». Mettre le comptage dans le DSL aurait fait entrer une notion de cardinalité dans le langage des fiches, pour deux fiches sur soixante-quatre.
Six tests ajoutés à reconcile.test.ts, dont l'inviolabilité de l'état utilisateur avec sujets (un arrêté mis en sourdine n'est jamais réveillé par l'arrivée d'un autre arrêté) et l'idempotence du rejeu.
✅ 5.d — Stockage et cron — LIVRÉS
Table arretes_commune (indexée par code INSEE, rétention 12 mois, purge par commune, zéro donnée personnelle) et colonnes deadlines.sujet / deadlines.sujet_label.
File pg-boss veille-arretes-quotidienne à 3 h, une heure avant la réconciliation. Quotidienne et non hebdomadaire : sur un délai de 30 jours, un passage hebdomadaire en consommerait jusqu'à un quart avant de prévenir. Expiration portée à 45 min — le piège des 15 min par défaut, déjà rencontré sur le passage hebdomadaire.
✅ 5.e — Garde-fou notifications — LIVRÉ
Le filtrage est en place et il est structurel (§ 5.b ci-dessus) — c'est lui qui empêche le pilier de devenir bavard, et il se lit dans la fiche, pas dans l'adapter.
Le budget d'envoi n'est pas implémenté : il n'existe encore aucun moteur de notification à contraindre. Comblé le 26/07/2026 par D-013 : le scheduler de notifications existe (src/engine/notifications.ts, module pur, 18 tests), avec deux envois par mois et par foyer, trois échéances par envoi, priorité légal > confort, et l'envoi immédiat hors budget pour la reconnaissance CatNat — réservé au couple (enjeu assurantiel, date certaine), donc jamais à une restriction d'eau ni à une fenêtre estimée.
Vérification
Passage quotidien réel : 3 communes, 24 foyers, 0 échec, 14,3 s, dont un foyer en restriction d'eau alerte. Aucune des trois communes réelles n'ayant d'arrêté CatNat ouvert, la chaîne CatNat a été éprouvée sur un foyer de test avec trois arrêtés injectés (deux ouverts, un expiré) : deux échéances distinctes avec leurs sujets et leurs dates limites, l'expiré ignoré, rejeu idempotent, retrait d'un arrêté suivi de l'archivage de la seule échéance concernée. Foyer de test et arrêtés injectés supprimés.
6. Phase 3 — Personnalisation fine
Bonne valeur, mais améliore l'existant plus qu'elle n'ajoute. Sources simples.
| Item | Ce que ça change | Source API | État du test |
|---|---|---|---|
| Dureté de l'eau | adoucisseur-entretien et chauffe-eau-detartrage tournent sur une fréquence par défaut. À 7 °f l'adoucisseur est inutile et le détartrage s'espace ; au-delà de 25 °f il se resserre |
Hub'Eau code_parametre_se=TH |
✅ testé — 7,3 °f |
| Zone climatique | Cale les saisons du moteur : mise en chauffe, hivernage piscine, fenêtre ramonage. Amélioration silencieuse, zéro contenu | champ zone_climatique du DPE (déjà récupéré en Phase 0) |
✅ testé — H2c |
| Fermeture du cuivre | ADSL et ligne fixe coupés par lots : lot 3 janvier 2027, lot 4 en 2028, lot 5 en 2029. Emporte téléalarme, ascenseur, alarme reliée, terminal de paiement | jeu fermeture-reseau-cuivre sur data.economie.gouv.fr |
✅ testé le 30/07/2026 — voir § 2.6. Ce n'est plus un item de Phase 3 mais le meilleur rapport valeur/effort du pilier (audit du 30/07 § 4.2) : la mécanique existe déjà à l'identique — une table indexée par code INSEE, mutualisée entre foyers, rafraîchie au passage hebdomadaire, c'est-à-dire arretes_commune au mot près. Une fiche, un adapter, zéro question au foyer |
| Réseau de chaleur | Se greffe sur chaudiere-gaz-entretien / chaudiere-fioul-entretien au moment du remplacement — pas une fiche autonome |
France Chaleur Urbaine /api/v1/eligibility |
✅ testé |
| Annuaire RGE | Alimente les slot_affiliation existants avec des entreprises réellement qualifiées à proximité |
ADEME liste-des-entreprises-rge-2 |
✅ testé |
| MaPrimeRénov' | Rendez-vous France Rénov' désormais obligatoire avant dépôt pour la rénovation d'ampleur, réservée aux E/F/G | aucune (calendaire + DPE Phase 0) | — |
Effort : ~4-5 jours.
7. Phase 4 — ROI dégressif
Valeur réelle mais effort disproportionné, ou donnée absente au national.
| Item | Blocage |
|---|---|
| Aide à l'insonorisation (PGS, 11 aéroports) | Très forte valeur individuelle, taux de recours dérisoire — mais les PEB/PGS ne sont publiés qu'au niveau départemental. Il faudrait agréger 11 périmètres à la main |
| Servitudes ABF / abords de monument historique | Testé et disponible (assiette-sup-s, type ac1, rayon 500 m). Mais ce n'est pas une échéance : c'est un avertissement au moment d'un projet de travaux. À réserver au jour où la notion de « projet » existe |
| Moustique tigre, chenilles processionnaires, ambroisie | Gestes simples et peu faits (83 des 96 départements colonisés au 01/01/2026), mais le département suffit — l'adresse n'apporte rien. Bon rapport contenu/effort, faible rapport personnalisation/effort |
| Copropriété (DPE collectif ≤ 50 lots au 01/01/2026, PPPT) | Bloqué sur le nombre de lots, qu'on n'a pas et qu'on ne veut pas demander. Traitable seulement en fenêtre « libre » avec une question opt-in |
| Termites, permis de louer, ravalement, collecte des déchets, horaires de bricolage | Aucune donnée nationale (cf. § 2.7) |
Le statut reste instable — suppression votée en avril 2026, censurée le 21/05/2026 pour cavalier législatif, donc sur la procédure et non sur le fond. Le blocage n'était pas le sujet mais le fait d'en graver les règles : elles viennent désormais toutes de la base nationale, et le croisement adresse × véhicule se fait à la frontière (src/jobs/enrichissement-zfe.ts), pas dans le DSL |
8. RGPD, transverse
- Stocker les résultats dérivés (classes, booléens, dates), jamais les payloads bruts, jamais l'historique des appels. Cohérent avec « on indexe, on n'archive pas ».
banId+lat/lonsont de la localisation précise : même régime que le reste du foyer, purgés avec lui.- Les tables de référence externes (
arretes_commune) sont indexées par code INSEE — aucune donnée personnelle, purgeables librement, mutualisées entre foyers.
9. Références réglementaires
Textes à reporter dans le champ source: des fiches.
| Sujet | Texte / source officielle |
|---|---|
| Débroussaillement (OLD) | Code forestier art. L131-10 à L131-16-1 ; loi du 10 juillet 2023 ; information acquéreur/locataire obligatoire depuis le 01/01/2025 ; Service-Public F33298 |
| Décence énergétique | Loi Climat & Résilience ; décret n° 2023-796 ; G au 01/01/2025, F au 01/01/2028, E au 01/01/2034 ; ecologie.gouv.fr |
| Gel des loyers F/G | Depuis le 24/08/2022 — ni révision IRL, ni renouvellement, ni relocation ; ecologie.gouv.fr |
| CatNat — délai de déclaration | 30 jours après publication de l'arrêté au JO ; Service-Public F3076 ; economie.gouv.fr |
| Retrait-gonflement des argiles | Décret n° 2019-495 ; arrêté du 22 juillet 2020 ; carte actualisée par arrêté du 9 janvier 2026 (55 % du territoire en zone moyenne ou forte) ; ecologie.gouv.fr |
| Radon | Zone 3 = potentiel significatif, 12,2 M d'habitants, 72 départements ; niveau de référence 300 Bq/m³ ; obligation d'information (IAL) ; ASNR/IRSN |
| Pastilles d'iode | Extension du PPI de 10 à 20 km autour des centrales EDF, 1 063 communes, 2,2 M de personnes ; campagne 10-20 km prévue 2026 ; ASNR |
| PPI — rayon par site | Il n'y a pas un rayon : 20 km autour des 18 centrales EDF en service, 10 km à Marcoule, 5 km à La Hague et Cadarache, 2,5 km au CEA Saclay, 2 km à Fontenay-aux-Roses, 600 m à Romans-sur-Isère ; 56 installations sur 85 n'ont aucun PPI, et un PPI n'implique pas la distribution d'iode. Publié installation par installation par Géorisques (ppi, risque_iode, rayon_ppi, regle_georisques, site) — voir D-024 |
| PPRT — travaux prescrits | Loi du 16 juillet 2013 ; aide jusqu'à 90 % (crédit d'impôt + 25 % industriels + 25 % collectivités) ; plafond 20 000 € ou 10 % de la valeur ; ecologie.gouv.fr |
| Assainissement non collectif | Arrêté du 27 avril 2012 — contrôle périodique ≤ 10 ans ; rapport < 3 ans à la vente ; portail interministériel ANC |
| Carnet d'information du logement | Décret n° 2022-1674 du 27 décembre 2022 ; CCH art. L126-35-2 et s. ; Service-Public F36759 |
| Déclaration foncière / taxe d'aménagement | 90 jours après achèvement, service GMBI ; impots.gouv.fr ; economie.gouv.fr |
| Chèque énergie | Campagne 2026 : envois automatiques 1ᵉʳ-20 avril, guichet de demande 1ᵉʳ avril → 31 décembre ; economie.gouv.fr |
| MaPrimeRénov' | Guichet rouvert le 23/02/2026 ; isolation des murs et chaudières biomasse exclues depuis le 01/01/2026 ; rénovation d'ampleur réservée E/F/G, RDV France Rénov' obligatoire ; mode d'emploi Anah, mars 2026 |
| DPE collectif / PPPT | DPE collectif ≤ 50 lots au 01/01/2026 ; PPPT ≤ 50 lots depuis le 01/01/2025 ; Service-Public F37504 et F36760 |
| Zone tendue | Décret n° 2025-1267 du 22 décembre 2025 ; préavis 1 mois, TLV, encadrement ; simulateur Service-Public |
| Puits, forage, eau de pluie | CGCT art. L2224-9 ; arrêté du 17 décembre 2008 ; Cerfa 13837*03 ; télédéclaration DUPLOS depuis le 01/02/2024 ; Service-Public F172 |
| Permis de louer | CCH art. L635-1 et s. ; amende jusqu'à 5 000 €, 15 000 € en récidive |
| Ravalement | CCH art. L132-1 à L132-5 — au moins tous les 10 ans sur injonction municipale, dans les communes couvertes par arrêté ; Service-Public F640 |
| Termites | Déclaration en mairie sous 1 mois ; zones délimitées par arrêté préfectoral ; Service-Public F285 |
| Insonorisation aéroports | Dispositif PGS, 11 aéroports ; plafonds relevés par arrêté publié au JO du 05/01/2024 ; ecologie.gouv.fr |
| Fermeture du cuivre | Fermeture technique du lot 2 le 27/01/2026 ; lot 3 janvier 2027 (2 097 communes), lot 4 en 2028 (6 843), lot 5 en 2029 (10 488) ; Arcep |
| Moustique tigre | 83 des 96 départements métropolitains colonisés au 01/01/2026 ; actif mai-novembre ; sante.gouv.fr |
| Chenilles processionnaires, ambroisies | Décret n° 2022-686 du 25 avril 2022 — espèces dont la prolifération menace la santé humaine |
| Biodéchets | Tri à la source généralisé depuis le 01/01/2024 (obligation portée par la collectivité) ; ecologie.gouv.fr |
10. Décisions à trancher
- ✅ Périmètre de la Phase 0 — tranché : tout livré, y compris 0.b et 0.c.
- ✅ Forme de la confirmation modulaire — tranché : écran dédié dans le quiz (screen chauffage), pas une question différée dans le hub.
- ✅ Ordre Phase 2 / Phase 3 — tranché par les faits le 26/07/2026 : la Phase 2 est passée d'abord.
reconcile.tsn'a bougé que de sa clé, l'extension est rétrocompatible et vérifiée en base sur les 423 échéances existantes. Nouveau point ouvert à la place : la latence de GASPAR (§ 5.a) est le facteur limitant de la valeur réelle de l'alerte CatNat — basculer sur le JORF en open data (DILA) est la sortie connue, non chiffrée à ce jour. - ✅ Jeton Géorisques — tranché à la livraison de la Phase 1 : on reste sur l'API v1 libre. Les quatre endpoints répondent sans clé, et le jour où la v1 ferme, seule la fonction
appel()desrc/adapters/georisques.tschange (un en-tête d'authentification). Ouvrir un compte Cerbère maintenant aurait coûté une dépendance administrative pour une échéance sans date. - Licence BDNB — toujours ouvert. À vérifier avant tout usage (les autres sources sont en Licence Ouverte / Etalab).
- Nouveau, découvert en simulation —
carte-grise-changement-adresse(pilier véhicules, hors périmètre maison) est une condition morte :demenagement_recentn'est posé nulle part dans l'application. À traiter séparément. - ✅ Rafraîchissement des risques — tranché et livré le 26/07/2026 : hebdomadaire plutôt qu'annuel, en dernier segment du passage du dimanche 0h30. Le job était déjà idempotent, il n'y avait qu'à le rejouer.
Trois points ouverts ajoutés le 30/07/2026 (audit-2026-07-30.md) :
-
✅ Une couche « inondation » sur la carte — livrée le 30/07/2026 (D-031 § 5). Deux réglages ont dû être corrigés après mesure, et ils valent d'être retenus : la simplification à l'ingestion des PPRT (~20 m) réduisait les fragments urbains à cinq points, or ce contour n'est pas seulement dessiné — c'est lui qu'on interroge pour répondre « suis-je dedans ? » ; et une garde de proximité à 500 m ratait Nîmes de 52 mètres. La garde est passée à un kilomètre, et elle est désormais la même que la marge d'affichage de la couche. Le raisonnement d'origine, conservé ci-dessous, reste juste : c'est l'application la plus nette du critère de D-022 (« une couche se justifie quand la frontière EST la règle ») : dedans, le PPRi prescrit des travaux, l'assurance change, et les gestes de
inondation-gestesdeviennent concrets. La fiche existe déjà et est aujourd'hui muette et sans tracé. Le WFS de Géorisques publiems:PPRN_PERIMETRE_INOND,ms:PPRN_COMMUNE_RISQINOND_APPROUV/_PRESCRITetms:LIMITETRI_*— relevé dans les capacités le 30/07/2026, même famille de couche que lePPRT_PERIMETRE_RISQINDquesrc/carte/couches/pprt.tsexploite déjà (moissonnage spatial, calcul de ton, réserve « le périmètre n'est pas la zone de prescription » : tout se recopie). ❓ La récupération effective des géométries reste à faire depuis le code : les deuxGetFeaturetentés en ligne de commande — sur la couche inondation et sur la couche PPRT en production — ont renduHTTP 200aveccontent-length: 0. Comportement identique sur la couche qui marche, donc artefact d'appel et non verdict sur la source. -
Deux fiches sans
slot_affiliation, alors qu'il y a un artisan au bout :vmc-nettoyageetpiscine-securite-dispositif. Le § 10.4 du cadrage fait de ces slots le gisement d'affiliation, et ce sont deux lignes de YAML. (Les cinq autres fiches maison sansactions—redevance-ordures,spanc-controle-periodique,declaration-fonciere-90j,carnet-information-logement— n'ont personne à appeler, et c'est juste.) -
fosse-septique-vidangeetspanc-controle-periodiqueportentfreq: customsansinterval_years: le libellé de fenêtre retombe sur"récurrent"(windows.ts:430), un mot qui ne dit rien, là où les deux fiches connaissent leur vraie cadence (~4 ans, ≤ 10 ans). Une ligne par fiche.
11. Les fiches sans date, triées — et pourquoi l'iode n'a pas de déclencheur
Ajouté le 07/08/2026 (D-059). Quinze fiches de ce pilier et des autres n'ont jamais de date : leur fenêtre est libre, donc AVANCE_JOURS.libre === null, donc elles n'envoient aucun mail et restent affichées en permanence. Elles ne sont pas de même nature, et le tri se fait sur ce qui les ferait revenir — pas sur leur sujet.
| Famille | Fiches | Ce que « c'est fait » y fait |
|---|---|---|
| ① Fait une fois, fait à vie | plomb-crep, amiante-etat, recensement-jdc, critair-vignette, pprt-travaux-prescrits |
clôt définitivement — leur fenêtre ne bouge jamais, donc D-058 ne les rouvre jamais |
| ② Un événement du foyer la ramène | declaration-fonciere-90j, carte-grise-changement-adresse, fin-offre-energie-prix-fixe |
clôt cette occasion ; le sujet porte l'occasion, donc la suivante est une ligne neuve |
| ③ Un savoir qui ne se fait pas | inondation-gestes, decence-energetique, zfe-restriction-actuelle, courroie-humide-prise-en-charge, chaine-aac-dv5-prise-en-charge, iode-pastilles |
rien — comportement_fait: aucun, l'écran n'affiche aucun geste |
Pourquoi iode-pastilles est rangée en ③ alors que c'est un acte
Retirer les comprimés EST une chose qu'on fait. Mais les boîtes périment (« la péremption se compte en années », dit la page, sans pouvoir dire combien — c'est imprimé sur la boîte, et ça dépend du lot), et aucune source publique ne donne le calendrier des campagnes de distribution ASNR. Laisser un foyer clore la fiche lui ferait croire l'affaire réglée jusqu'à une péremption que rien ne peut lui rappeler. On ne veut pas non plus la lui faire déclarer. La ligne reste donc affichée : ça coûte une ligne, là où se taire coûterait la boîte au moment où elle sert.
Le flux d'avis d'incidents de l'ASNR — cherché, trouvé, écarté
Recherche du 07/08/2026, à ne pas refaire. Le jeu data.gouv « Avis d'incidents dans les installations nucléaires » est mort (2014, « tentative d'aspiration » par une organisation inconnue, URL classique.asn.fr disparue). Le vrai flux, lui, est vivant :
https://www.asn.fr/rss/avis-incidents-INB
→ 301 → reglementation-controle.asnr.fr/rss/avis-incidents-INB
HTTP 200 · 44 ko · 50 items · mars → août 2026 · déclaré horaire
Écarté pour trois raisons, chacune suffisante :
- Aucune clé de rattachement. Les champs sont
title,description,link,pubDate,guid,author— pas un champ de localisation. Mesuré sur les 50 items : 1 seul porte un n° INB, 0 un code INSEE. Le nom du site (Golfech, Chooz B, Cattenom) est en prose libre dans la description. L'extraire au motif serait deviner le rattachement d'une fiche de sécurité. - Ce n'est pas un signal de danger public. Ce sont des non-conformités d'exploitation déclarées par l'exploitant — détection tardive d'un système indisponible, contamination externe d'un intervenant, non-respect des règles de manutention. Une dizaine par mois sur tout le parc. 49 items sur 50 n'annoncent aucun niveau INES. Aucun n'appelle à prendre de l'iode, qui ne se prend que sur consigne du préfet.
- Le produit est un batch quotidien. Une urgence radiologique se joue en minutes, par FR-Alert et les sirènes. Un mail à J+1 arriverait après tout le monde — et ferait croire à une veille qui n'existe pas.
C'est le miroir de la leçon de D-024 : là-bas la source publiait plus que ce qu'on en lisait ; ici elle publie moins que ce qu'on espère, et la tentation serait de compléter au jugé.
Cherché aussi, sans résultat : distribution+iode+comprimes → 0 jeu sur data.gouv ; les 86 résultats de campagne+iode sont des campagnes d'irrigation. Le seul jeu « iode » publié est un périmètre communal de Brest métropole.
12. La déclaration de travaux (07/08/2026)
declaration-fonciere-90j se déclenchait sur equipements contains piscine — c'est-à-dire posséder une piscine, pas venir d'en construire une. Un foyer qui a la sienne depuis dix ans lisait « 90 jours pour déclarer » à vie, sans date, donc sans qu'aucun mail ne parte. Le déclencheur n'était pas approximatif, il était faux.
Le quiz collecte désormais les travaux terminés, sur l'écran des équipements — pas d'écran de plus, et le mois n'apparaît qu'une fois quelque chose de coché. Stratégie declaration_travaux : fenêtre = 1er du mois + 90 jours, confiance connue, avance de 90 jours pour que le rappel parte à l'ouverture du délai.
Deux choix à connaître : le 1er du mois plutôt que le jour réel avance la limite d'au plus trente jours, donc on prévient trop tôt et jamais trop tard sur un délai dont le dépassement coûte l'exonération de taxe foncière puis une amende ; et le sujet est le mois, sans quoi la clôture d'un chantier vaudrait pour le suivant.
carnet-information-logement n'a pas bougé : il s'applique déjà à tout propriétaire, indépendamment de tous travaux. Lui ajouter un sujet sur la déclaration produirait une seconde carte pour la même obligation.
Un mois par chantier, et une mémoire qui n'est pas le formulaire (D-063, 07/08/2026)
La première écriture gardait un seul travaux_mois pour tout le logement. Deux constructions finies à trois mois d'écart n'avaient donc qu'une date limite — celle de la dernière déclarée —, et le délai encore ouvert de la première disparaissait avec son sujet, sans un mot. Les travaux sont maintenant une liste de couples { type, mois } :
| Deux chantiers, deux mois | deux sujets, deux échéances, deux dates limites |
| Deux chantiers, un mois | un seul sujet, libellé « piscine et abri de jardin de juin 2026 » — c'est une visite au service des impôts, pas deux |
| Un chantier sans mois | sujet vide, fenêtre libre, libellé « extension — mois non précisé ». On ne dit jamais qu'une date manque à l'affichage quand c'est la réponse qui manque |
| Isolation, chauffage | aucun sujet : ils ne créent pas de surface, donc n'ouvrent aucun délai foncier. Ils restent déclarables pour le carnet d'information |
Le rejeu du quiz repose la question à vide et le logement accumule — c'est le point qui demande le plus d'attention. Ramener les cases cochées ferait redéclarer une piscine de mars huit mois plus tard sans que personne ne le remarque ; mais remettre l'asset à zéro effacerait un délai qui court encore. Le formulaire est un message daté, le logement est la mémoire. Elle s'oublie à treize mois, la profondeur de la liste de mois proposée : au-delà, le délai de 90 jours ne peut plus rien ouvrir, et sans borne la liste grossirait à chaque passage.
Une duplication assumée, tenue par un test. Le DSL d'applicabilité sait dire contains_any sur un tableau de chaînes, pas fouiller des objets. quizToAssets pose donc deux écritures de la même vérité : travaux (les couples, que lisent les sujets et les fenêtres) et travaux_recents (les types seuls, dérivés, que lit la fiche). La liste des quatre types fonciers vit dans src/engine/travaux.ts, la fiche garde la sienne en YAML, et un test vérifie qu'elles disent la même chose — sans quoi ajouter un type produirait une fiche qui ne s'applique pas, ou pire, une fiche qui s'applique sans qu'aucun sujet ne la date.
Une migration de reprise (0024) convertit l'ancienne forme sur les logements déjà déclarés. Sans elle, leur échéance datée aurait été archivée au profit d'une échéance sans date au premier passage de réconciliation.