Méthodologie de nettoyage DVF+ — VenduCombien
Statut : VALIDÉ le 2026-07-30 par le propriétaire du projet (bornes après analyse de sensibilité, seuil N = 5, périmètre, segment VEFA séparé). Les paramètres vivent dans
etl/config.toml. Ce document est versionné ; toute évolution des règles = nouvelle validation + commit.
Source et périmètre
- Source : DVF+ open-data (Cerema), millésime avril 2026 (édition 2026-1), distribué par région sur le partage Box officiel référencé par data.gouv.fr.
- Périmètre v1 : ventes classiques (
libnatmut = 'Vente') de biens mono-logement — une maison (codtypbien 111) ou un appartement (codtypbien 121). Les VEFA, adjudications, échanges et expropriations sont hors périmètre, de même que les mutations multi-biens dont le prix ne peut être ventilé par logement. - Panel d'étalonnage S2 : 5 départements contrastés — 75 (Paris), 06 (Alpes-Maritimes), 59 (Nord), 49 (Maine-et-Loire), 23 (Creuse) — soit 1 702 009 mutations brutes, années 2014-2025.
Entonnoir d'exclusion (mesuré sur le panel)
Chaque mutation reçoit la première règle qui l'exclut ; la somme retombe exactement sur le volume brut.
| # | Règle | Exclues | % du brut |
|---|---|---|---|
| 1 | Nature de mutation hors périmètre (≠ vente classique) | 99 817 | 5,86 % |
| 2 | Mutation multi-biens non ventilable (logements) | 526 592 | 30,94 % |
| 3 | Bien hors logement (terrain, local d'activité…) | 368 461 | 21,65 % |
| 4 | Mutation à cheval sur plusieurs communes | 1 637 | 0,10 % |
| 5 | Surface bâtie absente ou nulle | 0 | 0,00 % |
| 6 | Surface sous le seuil de décence (< 9 m²) | 0 | 0,00 % |
| 7 | Valeur foncière absente ou nulle | 300 | 0,02 % |
| 8 | Valeur foncière symbolique (< 1 000 €) | 1 703 | 0,10 % |
| 9 | Prix/m² hors bornes de plausibilité | 6 259 | 0,37 % |
| Ventes conservées | 697 240 | 41,0 % |
Lecture : l'essentiel de l'écart entre « mutations DVF » et « ventes de logements » vient du périmètre (règles 1-3, ~58 %), pas du filtrage qualité (règles 4-9, < 0,6 %). Les règles 5-6 ne retirent rien sur ce millésime : la typologie mono-logement de DVF+ garantit par construction une surface bâtie renseignée — on les conserve comme garde-fous à coût nul.
Bornes de plausibilité du prix/m² (PROPOSITION)
Percentiles observés sur le panel avant application des bornes :
| Type | n | p0,5 | p1 | p5 | p50 | p95 | p99 | p99,5 | p99,9 |
|---|---|---|---|---|---|---|---|---|---|
| appartement | 358 436 | 66 | 167 | 1 438 | 7 507 | 13 571 | 17 739 | 20 082 | 27 837 |
| maison | 345 063 | 166 | 250 | 561 | 1 806 | 4 787 | 9 000 | 12 742 | 24 097 |
Bornes proposées (révisées le 2026-07-30 après analyse de sensibilité) :
| Paramètre | Valeur | Justification |
|---|---|---|
prix_m2_min (tous types) | 100 €/m² | Sous p0,5 des deux types (66 € appart, 166 € maison). En dessous, il s'agit de démembrements, ventes intrafamiliales ou erreurs de saisie — pas d'un prix de marché. Un seuil plus haut (250 €) mordrait sur le bâti rural dégradé réellement vendu 300-500 €/m² (p5 maison = 561 € avec la Creuse dans le panel). |
prix_m2_max (tous types) | 40 000 €/m² | Garde-fou d'erreurs manifestes, pas de rognage statistique — voir l'analyse ci-dessous. |
surface_min_m2 | 9 m² | Seuil de décence locative ; garde-fou (0 exclusion constatée). |
valeur_min | 1 000 € | Écarte les ventes symboliques (1 €, 100 €) : 1 703 cas (0,10 %). |
Pourquoi 40 000 € et pas p99,5 (~15-20 000 €)
Une première proposition calait la borne haute sur p99,5 du panel (20 000 € appartement / 15 000 € maison). L'analyse de sensibilité l'a invalidée : les percentiles nationaux écrasent les marchés d'ultra-luxe, qui sont précisément les pages les plus scrutées.
Part des ventes de maisons au-dessus de 15 000 €/m², communes les plus touchées (panel, 2014-2025) :
| Commune | > borne | Part | Médiane des exclues | Max observé |
|---|---|---|---|---|
| Paris 6e (75106) | 12/12 | 100 % | 24 583 € | 42 581 € |
| Paris 8e (75108) | 12/14 | 86 % | 20 465 € | 53 750 € |
| Paris 7e (75107) | 34/41 | 83 % | 29 248 € | 113 718 € |
| Saint-Jean-Cap-Ferrat (06121) | 85/111 | 77 % | 23 162 € | 105 000 € |
| Paris 16e (75116) | 152/287 | 53 % | 20 325 € | 94 380 € |
À 15 000 €, la page « maisons à Paris 6e » serait vide ; les hôtels particuliers à 20-30 000 €/m² sont des ventes réelles. À l'inverse, les maximums observés (113 718 €, 281 128 €/m²) sont des erreurs manifestes. Distribution de la queue haute (ventes en périmètre) :
| Bande de prix/m² | Appartements | Maisons |
|---|---|---|
| 20 000 → 25 000 | 1 235 | 882 (dès 15 000) |
| 25 000 → 30 000 | 321 | 115 |
| 30 000 → 40 000 | 185 | 97 |
| > 40 000 | 72 | 96 |
Au-delà de 40 000 €/m² ne subsistent que 168 ventes sur ~700 000 (0,02 %) : records absolus et erreurs de saisie mêlés. La borne à 40 000 € conserve tout le luxe réel, coupe l'essentiel des erreurs, et la médiane — insensible à la queue — n'en dépend pas. Piste v2 : rognage par percentiles locaux (p0,5/p99,5 par département), qui rendrait la borne fixe superflue.
Seuil de significativité N (PROPOSITION : N = 5)
Distribution des séries commune × année × type de bien sur les ventes conservées du panel (18 000 séries) :
| Ventes/an dans la série | Séries | Part |
|---|---|---|
| 1-2 | 3 948 | 21,9 % |
| 3-4 | 2 595 | 14,4 % |
| 5-9 | 3 784 | 21,0 % |
| 10-29 | 4 431 | 24,6 % |
| 30+ | 3 242 | 18,0 % |
Avec N = 5 : la médiane est publiée pour 63,6 % des séries de ce panel ; les 36,4 % restantes affichent le volume avec la mention explicite « effectif insuffisant pour une médiane fiable ». Une médiane sur 3-4 ventes bouge de plusieurs dizaines de % d'une vente à l'autre : la publier nuirait à la crédibilité, la masquer sans rien dire cacherait de l'information — d'où volume affiché, médiane retenue. Le panel contenant Paris, la part nationale des petites séries sera plus élevée (poids des communes rurales) : N = 5 est un plancher, pas un plafond.
Seuils à étages (validés 2026-08-01)
Le seuil unique ne suffit pas à tous les usages ; trois régimes s'étagent :
| Ventes/an | Régime |
|---|---|
| < 5 | Volume affiché, médiane jamais (« donnée insuffisante ») |
| 5–19 | Médiane publiée avec mention « précision limitée » et amplitude min–max observée ; série exclue des classements et des comparaisons |
| ≥ 20 | Médiane publiée sans réserve ; éligible aux classements et comparaisons (S7) |
L'amplitude (min–max du prix/m² des ventes conservées, arrondie à l'euro) n'accompagne que les médianes publiées : sous le seuil, la publier sur une ou deux ventes reviendrait presque à désigner les transactions. Elle est calculée aux niveaux commune, VEFA et canton — pas au département, où elle n'aiderait pas la lecture.
Sous le seuil : la dernière médiane connue, datée (validé 2026-08-25)
Une commune de moins de 5 ventes sur 12 mois n'a pas de médiane publiable. Plutôt que de laisser la page muette, elle publie la dernière médiane qui atteignait le seuil, avec son année :
« 2 780 €/m² en 2022 — dernière année où la commune atteignait le seuil. »
Deux règles la bordent :
- Un seul millésime, jamais un cumul. L'option « médiane sur 5 ans cumulés » a été examinée et écartée : elle sauvait davantage de pages mais introduisait une notion nouvelle, mêlant cinq millésimes, qui aurait été citée sans sa date par un moteur ou un assistant. La règle retenue n'invente rien — c'est la doctrine déjà appliquée aux communes regroupées en canton (cf. CLAUDE.md), étendue aux pages ville.
- Elle n'entre ni dans les classements, ni dans les comparaisons, ni dans la phrase-réponse citable, qui restent adossés à la fenêtre courante.
Les communes n'ayant jamais atteint 5 ventes sur une année ne reçoivent pas de médiane du tout : la page répond par le volume, la fourchette observée et l'échelon supérieur (canton).
Le rang dans la distribution (validé 2026-09-11)
« Situez un prix » dit désormais, quand la donnée le permet : *« ce prix dépasse 60 à 70 % des appartements vendus à Bordeaux sur douze mois »*. C'est un rang dans une distribution, calculé sur les neuf déciles communaux de la fenêtre de 12 mois glissants — la même que le chiffre du héros.
Seuil de publication : 50 ventes du type concerné sur la fenêtre. Il est plus exigeant que celui de la médiane (5) et que celui des comparaisons (20), pour une raison arithmétique : neuf quantiles découpent les ventes en dix tranches, donc à 20 ventes chaque tranche reposerait sur deux actes et le rang annoncé sauterait d'un cran entier dès qu'une vente s'ajoute. À 50, chaque tranche porte au moins cinq actes.
Ce que le seuil couvre, mesuré sur la France entière au millésime avril 2026 : 1 034 communes, soit 6,4 % des pages ville — mais 39,6 % des ventes actées (139 429 sur 352 142, mesuré dans le bundle publié le 2026-09-11). C'est le second chiffre qui a emporté la décision : un rang sert là où l'on achète.
Le rang est toujours donné en tranche, jamais en point. « 60 à 70 % » et non « 67 % » : les déciles disent dans quelle tranche le prix tombe, pas où dans la tranche. Annoncer un pourcentage exact supposerait les prix uniformément répartis à l'intérieur de la tranche, ce que rien ne garantit. Le dessin suit la même règle — le prix saisi y est marqué par une bande, pas par une aiguille.
Sous le seuil, rien ne régresse : la page garde l'axe en écart à la médiane, qui reste juste et ne promet que ce que la donnée tient.
Le lavis : ce que dit la couleur (validé 2026-08-25)
La charte « L'Acte, 2e édition » colore la silhouette de chaque commune d'un lavis en 4 crans. Ce que ce lavis signifie est une décision méthodologique, pas graphique :
- Il porte le niveau de prix, et rien d'autre. La proposition initiale du pack — une « température » mêlant volume de ventes et niveau de prix — a été écartée : une seule couleur ne peut pas porter deux variables sans cesser d'être défendable. Le volume reste affiché en clair à côté du chiffre.
- Les paliers sont nationaux et fixes, pas des quartiles calculés département par département. Un cran a donc le même sens partout : la carte de France est vraie, et deux départements se comparent. Le coût assumé est que certains départements ressortent presque monochromes — « dans la Creuse, tout est abordable » est une information, pas un défaut de rendu.
- Le lavis est toujours doublé de son étiquette texte (abordable, modéré, élevé, très élevé). Seul, il ne signifie rien — même règle que les glyphes ▲▼◆.
- Sous le seuil de publication, le lavis se retire (trait pointillé, pas d'aplat) : la couleur ne prétend jamais savoir.
#### Les paliers (validés 2026-08-25)
| Cran | Libellé | Bornes | Communes | Part |
|---|---|---|---|---|
| 1 | abordable | < 1 500 €/m² | 3 557 | 25,1 % |
| 2 | modéré | 1 500 – 2 500 €/m² | 6 109 | 43,1 % |
| 3 | élevé | 2 500 – 4 000 €/m² | 3 366 | 23,8 % |
| 4 | très élevé | ≥ 4 000 €/m² | 1 130 | 8,0 % |
Calibrés sur la France entière (14 162 communes ayant une médiane publiable sur 12 mois glissants). Distribution observée : 1er quartile 1 496 €/m², médiane 2 035 €/m², 3e quartile 2 747 €/m², étendue 220 – 22 024 €/m².
Ce qui a guidé le choix :
- 1 500 € tombe sur le premier quartile réel (1 496). « Abordable » se définit donc sans arbitraire : *le quart le plus abordable de France*.
- ≥ 4 000 € garde son sens — 8 % des communes. À 3 500 €, « très élevé » aurait couvert 12,4 % des communes et commencé à se banaliser.
- Des nombres du langage courant, lisibles dans une légende.
Deux points assumés et documentés plutôt que tus :
- Le cran 2 rassemble 43 % des communes. Près de la moitié de la carte sera d'une seule teinte. C'est un fait du marché français — les communes se massent entre 1 500 et 2 500 €/m² — pas un défaut de calibration. Un jeu de paliers plus équilibré existait (1 500 / 2 200 / 3 500, soit 25/32/31/12 %) ; il a été écarté au profit de la lisibilité des seuils.
- Les quartiles bruts ne peuvent pas servir de paliers. Recalculés à chaque millésime, ils feraient changer une commune de couleur *sans que son prix ait bougé*. Les paliers sont donc figés dans
etl/config.tomlet ne bougeront qu'à une décision explicite — les changer, c'est repeindre 16 100 pages.
Le coût annoncé de l'option « paliers nationaux » — des départements monochromes — a été mesuré et s'avère négligeable : 3 départements sur 97. Calibration rejouable : python -m dvfplus lavis-probe --deps france.
Registre des ventes (S7a, rue ajoutée le 2026-08-04)
Chaque page ville publie les 10 dernières ventes actées de la commune : mois, rue sans numéro, type de bien et nombre de pièces, surface, prix, prix au m². Des actes réels issus des ventes nettoyées — jamais un échantillon choisi — sur une donnée déjà publique (DVF, Licence Ouverte).
D'où vient la rue. Le fichier mutation DVF+ (Cerema) ne porte aucun champ de voie : la rue vient de la DVF géolocalisée d'Etalab, rapprochée acte par acte — jamais par un identifiant supposé commun, il n'y en a pas. Clés du rapprochement : parcelle + date + valeur foncière (± 1 €), en ne retenant que les lignes Etalab portant un local du même type que le bien vendu (surface à ± 2 m² quand elle est connue) — c'est la parcelle du bâti qui porte la rue, pas celle du jardin. La voie n'est retenue que si elle est unique parmi les correspondances : une ambiguïté n'est pas une information. Taux mesuré sur département témoin (sonde du 2026-08-04) : 99,4 % des ventes de la fenêtre couverte par Etalab (~5 dernières années) ; les ventes plus anciennes du registre restent sans rue (« — »), structurellement. Un acte non apparié reste sans rue — affiché tel quel, jamais inventé. Une indisponibilité d'Etalab ne bloque pas le pipeline : le registre sort alors sans rues, et le log le dit.
Quartiers IRIS (S7b)
Dans les communes découpées en plusieurs IRIS (le maillage statistique nommé de l'INSEE), chaque page ville présente ses quartiers : ventes des 3 dernières années cumulées, volume public, médiane par type masquée sous N = 5 dans le quartier. Le rattachement est purement géométrique : DVF+ porte nativement le centroïde parcellaire de chaque mutation (Lambert 93) ; un point-dans-polygone avec les contours IRIS de l'IGN (WFS Géoplateforme, demandés en Lambert 93 natif) localise la vente — aucun géocodage, aucune adresse utilisée. Taux mesuré sur département témoin (sonde du 2026-08-04) : 99,2 % des ventes récentes des communes multi-IRIS. Les ventes du registre portent leur quartier ; une vente non localisée reste sans quartier. Les communes mono-IRIS n'ont pas de section quartiers : leur « quartier » serait la commune entière. Une indisponibilité du WFS ne bloque pas le pipeline — le site sort sans quartiers, et le log le dit.
Pages rue (v2)
Chaque voie ayant au moins une vente appariée a sa page, /rue/{commune}/{voie}/, rendue serveur : une fonction Pages lit un JSON pré-calculé par le pipeline et stocké dans R2 — jamais de calcul à la volée, jamais de base de données (constitution, amendée 2026-08-03). La page liste toutes les ventes appariées de la voie (mois, type, pièces, surface, prix, prix/m², quartier IRIS le cas échéant), sans numéro de rue, et publie la médiane par type sur les 3 dernières années sous les mêmes seuils que partout (volume public, médiane et amplitude masquées sous N = 5).
Limites dites sur la page. La rue vient du rapprochement Etalab ci-dessus : seules les ventes de la fenêtre couverte (~5 dernières années) et appariées avec certitude y figurent. Sonde du 2026-08-04 (département témoin 33) : 99,8 % des ventes de la fenêtre Etalab appariées ; sur l'ensemble du millésime (qui remonte plus loin que la fenêtre), cela représente ~31 % des ventes. Une vente non appariée n'apparaît sur aucune page rue mais reste comptée dans tous les chiffres de la commune. Quand deux voies distinctes d'une commune produisent le même slug d'URL (9 cas sur le département témoin), la voie la plus fournie garde l'URL. Les pages rue sont en noindex : leur indexation se tranchera à l'audit de lancement.
L'Indice VenduCombien (validé 2026-08-09)
L'indice mesure l'évolution des prix actés à structure de ventes constante. Une médiane France brute mélange les compositions : un trimestre où Paris vend plus que la Creuse « monte » sans qu'aucun prix n'ait bougé — l'écart mesuré entre la médiane brute et l'indice atteint 6,9 points en 2021 (2,9 points en moyenne sur la série).
Construction : les ventes sont réparties en strates département × type de bien ; à chaque période, la médiane du prix/m² de chaque strate est comparée à la médiane de la même strate sur l'année de base 2019 (= 100) ; les rapports sont agrégés en moyenne pondérée par des poids fixes — la part de chaque strate dans les ventes de 2019 (un Laspeyres de médianes). Une strate comptant moins de 50 ventes sur la période est exclue du point, et les poids sont renormalisés sur les strates présentes.
L'indice-titre est calculé sur des fenêtres de 12 mois glissants (un point par trimestre) : il lisse la saisonnalité. Une variante trimestrielle, plus réactive et plus volatile, l'accompagne sur la page /indice-venducombien. La médiane brute reste un témoin interne, jamais publiée seule. L'indice est recalculé à chaque millésime DVF (avril / octobre), chaque édition est datée ; les compléments tardifs de DVF peuvent réviser des points récents — toute révision est signalée comme telle, un indice qui réécrirait son passé sans le dire n'en serait pas un.
Fenêtre de 12 mois glissants et évolution (PROPOSITION S6)
Le chiffre-titre des pages ville et canton est la médiane des 12 mois se terminant à la dernière vente du millésime (période affichée en clair) — pour une publication d'avril, cela coïncide avec l'année civile ; pour octobre, la fenêtre chevauche deux années. L'évolution « sur un an » compare cette fenêtre aux 12 mois précédents, et n'est affichée que si les deux fenêtres comptent au moins 20 ventes (le seuil des comparaisons) — entre deux petites médianes, elle ne serait que du bruit. Sous ±1 %, le marché est dit stable (◆). La référence France est calculée de la même manière, sur le même type de bien. Les séries annuelles (graphiques, historique) restent en années civiles.
Décomposition par tranche de surface (PROPOSITION S6)
La médiane seule ne dit pas ce qui se vend. Chaque page ville décompose les ventes des trois dernières années du millésime, cumulées (fenêtre datée, affichée), par type de bien et par tranche de surface : moins de 40 m² · 40–59 · 60–79 · 80–99 · 100–139 · 140 m² et plus. Bornes rondes, identiques pour les maisons et les appartements — la comparabilité entre pages prime sur l'ajustement fin par type. Volume toujours public ; médiane (€/m² et prix de vente) masquée sous N = 5 dans la tranche, comme partout. Bornes à valider par le propriétaire du projet.
VEFA : segment « Neuf » séparé (PROPOSITION)
Diagnostic sur le panel (2014-2025) : 24 493 ventes VEFA mono-logement (23 780 appartements, 713 maisons), complétude 100 % sur la surface et la valeur — la qualité des données permet d'en faire un segment publié.
| Indicateur | VEFA (appart.) | Ancien (appart.) |
|---|---|---|
| Prix/m² médian panel | 3 882 € | 7 507 € |
L'écart illustre le biais de composition : le neuf se construit là où il y a du foncier (périphéries), pas dans Paris — mélanger VEFA et ancien dans une même médiane la déformerait dans les deux sens selon les communes. D'où la proposition :
- Le chiffre-titre de chaque page reste l'ancien (ventes classiques), comparable aux références notaires.
- Bloc « Neuf (VEFA) » séparé sur les pages où le volume atteint le seuil N sur la période : médiane, volume, mention explicite du régime (TVA incluse, vente sur plan).
- Volumes en forte baisse (3 219 ventes/an en 2014 → 203 en 2025 sur le panel, appartements) : cohérent avec la crise du neuf, mais impose le seuil N au même titre que l'ancien.
Contrôle de vraisemblance
Médianes annuelles du panel (extrait) : appartements 6 857 €/m² (2014) → 8 743 € (2020) → 7 667 € (2025) ; maisons 1 643 € (2014) → 2 145 € (2022) → 2 091 € (2025). Trajectoire cohérente avec le cycle connu (hausse jusqu'en 2021-2022, correction 2023-2024, stabilisation 2025).
Point d'attention pour S3 : les volumes d'appartements chutent fortement dès 2021 (25 694 contre 36 330 en 2020) alors que 2021 fut une année record au niveau national. À recouper en S3 avec les chiffres notaires lors du contrôle de cohérence (5-10 valeurs publiées) avant toute publication — possible effet de couverture du millésime sur Paris.
Où vit chaque commune : page dédiée ou section cantonale
Toutes les communes françaises sont couvertes, mais toutes n'ont pas une page à elles. Deux raisons, une éditoriale et une technique :
- Éditoriale : une commune dont aucune année récente n'atteint le seuil de N ventes n'a pas de prix médian publiable. Lui consacrer une page entière reviendrait à publier une page sans son chiffre principal.
- Technique : l'hébergement (Cloudflare Pages) plafonne un déploiement à 20 000 fichiers. 34 917 communes ne tiennent pas en pages individuelles.
Critère de page dédiée : au moins une médiane publiable — ancien ou VEFA — sur l'une des trois dernières années du millésime. Environ 16 100 communes remplissent ce critère.
Les autres sont regroupées par canton (rattachement COG, colonne CAN), à raison d'une page par canton (≈ 2 050). Chaque commune y dispose d'une section ancrée à URL stable (/canton/{slug}-{code}/#c{code_insee}) et d'un bloc factuel qui ne dépend d'aucun seuil :
- le volume de ventes enregistrées, année par année ;
- la dernière médiane connue avec son année, explicitement datée et jamais présentée comme le prix courant ;
- l'écart de cette médiane à la médiane cantonale du même type ;
- les deux bornes du marché local (vente la plus élevée et la moins élevée, avec année, type et surface).
La page canton porte ses propres médianes, recalculées depuis les ventes du canton — jamais une médiane de médianes communales.
Le critère est réévalué à chaque millésime : une commune peut gagner ou perdre sa page dédiée. Une URL publiée une fois continue de mener au bon contenu.
Avant d'écraser ses données, le pipeline mémorise quelles communes avaient une page dédiée. Au build suivant, la comparaison produit un fichier de redirections permanentes (301) :
- commune ayant perdu sa page → la section ancrée de son canton, qui porte exactement les mêmes faits ;
- commune renommée (fusion, changement de nom au COG) → sa nouvelle URL.
Les slugs des anciennes URLs sont recalculés avec la fonction qui produit les URLs actuelles : il ne peut pas y avoir d'écart entre l'adresse émise hier et l'adresse redirigée aujourd'hui. Le build échoue si le nombre de règles dépasse la limite de l'hébergement, plutôt que de laisser des URLs répondre 404 en silence.
Signaler une erreur de regroupement
Chaque page canton porte un formulaire de signalement. Le rattachement d'une commune à son canton vient du COG de l'INSEE ; il est juste dans l'immense majorité des cas, et un habitant est le mieux placé pour repérer l'exception.
Le circuit est entièrement automatique, mais ce n'est jamais le signalement qui décide. Il déclenche une re-vérification contre la source officielle, et c'est elle qui tranche :
- le formulaire ouvre un ticket, avec le canton, la commune visée, le millésime et l'URL — de quoi rejouer le cas sans rien redemander ;
- un passage quotidien confronte le cas au Code officiel géographique ;
- trois issues possibles, toutes tracées et publiées : - écart confirmé — notre publication est en retard sur le COG : un recalcul complet est déclenché, le ticket est clos avec la preuve ; - conforme — la publication suit le découpage officiel : rien ne bouge, le ticket est clos en citant la ligne du COG ; - à arbitrer — code périmé, ticket illisible, ou contestation du COG lui-même : aucune décision automatique, un humain instruit.
Le même passage mesure la dérive d'ensemble entre ce que le site publie et le COG courant, indépendamment de tout signalement — le découpage administratif évolue sans prévenir.
Deux principes tiennent l'ensemble :
- Un signalement ne peut pas faire bouger une donnée en l'affirmant. Il ne fait qu'attirer l'attention sur un endroit à re-contrôler. Sans cette règle, n'importe qui pourrait fausser l'observatoire depuis un formulaire public.
- Aucune donnée publiée n'est retouchée directement. Une correction passe par un recalcul du pipeline, ce qui garantit que tout chiffre affiché reste recalculable de bout en bout.
Le fichier etl/overrides/rattachements.toml reste la porte manuelle, réservée au cas où la source elle-même est en défaut — une décision qu'un automate ne doit pas prendre. Chaque décision, automatique ou non, est publiée sur le journal des corrections.
Communes fusionnées
DVF conserve le code INSEE en vigueur au moment de la mutation. Une commune nouvelle voit donc son histoire éclatée entre son propre code et ceux de ses communes fondatrices, disparus du COG. Ces codes sont rattachés à la commune actuelle avant le nettoyage (table v_mvt_commune du COG), en suivant la chaîne de fusions jusqu'à une commune vivante.
Conséquence assumée, validée le 2026-07-30 : les médianes d'une commune nouvelle portent sur l'ensemble de son territoire actuel, y compris pour les années antérieures à la fusion. C'est la convention usuelle, et l'alternative — laisser ces ventes sous un code sans nom — revenait à ne pas les publier du tout. 1 722 codes sont concernés au millésime avril 2026.
Limites connues
- Bas-Rhin, Haut-Rhin, Moselle et Mayotte absents de DVF (Livre foncier / couverture) : les pages concernées l'indiqueront, jamais de données inventées.
- Étalonnage sur 5 départements (~13 % des ventes nationales) : les bornes et N seront re-vérifiés sur la France entière en S3, sans être re-décidés.
- Le prix/m² rapporte la valeur foncière totale à la surface bâtie du logement (terrain inclus dans le prix pour les maisons) : convention standard DVF, à expliciter sur /methodologie.
Reproduction
cd etl && python -m dvfplus all --deps 49,75,23,06,59
Rapport détaillé : artefact rapport-nettoyage du workflow Pipeline ETL (run du 2026-07-29) ou data/out/avril_2026/rapport_nettoyage.md en local.