Skip to main content
Glama

Statistiques d'une zone de chalandise

zone_stats
Read-onlyIdempotent

Rend ce que l'INSEE sait de ceux qui habitent une zone de chalandise : population, menages, menages_pauvres (sous le seuil de pauvreté), niveau_de_vie_moyen (euros par personne et par an — une moyenne, jamais une médiane), iris_couverts (quartiers IRIS touchés), surface_km2, et carreaux {total, estimes}. Les chiffres sont des sommes des carreaux INSEE Filosofi de 200 m pondérées par la part de chaque carreau dans la zone ; carreaux.estimes compte ceux que l'INSEE a imputés au titre du secret statistique — c'est la norme du fichier (souvent la majorité hors des villes denses), pas un défaut de la zone. Depuis la plateforme 1.11, la réponse porte aussi le PROFIL de la zone, en trois blocs de {effectif, part} : ages (onze tranches INSEE 0_3 … 80_plus et inconnu, parts rapportées à population), menages_profil (personnes seules, 5 personnes et plus, propriétaires, monoparentaux, en collectif, en maison, parts rapportées à menages, plus surface_moyenne_m2) et logements (total, cinq périodes de construction et sociaux, parts rapportées à logements.total). Les parts sont en pourcentage au dixième, calculées avant arrondi ; les effectifs sont arrondis séparément, leur somme peut différer du total de quelques unités. Depuis la plateforme 1.16, le bloc sexe donne hommes et femmes en {effectif, part} plus population_recensement — les parts sont rapportées à population_recensement (hommes + femmes, la population du recensement répartie sur la zone), pas à population : les deux diffèrent de quelques pour cent, c'est normal (ménages ordinaires 2021 contre population totale 2022). C'est une estimation : le sexe n'est diffusé qu'à l'IRIS et réparti sur les carreaux au prorata de leur population ; les limites sont celles de csp.fiabilite. Depuis la plateforme 1.12, le bloc csp donne les huit catégories socioprofessionnelles des 15 ans et plus (agriculteurs, artisans_commercants, cadres, professions_intermediaires, employes, ouvriers, retraites, autres_inactifs), chacune en {effectif, part, indice, reference_part} : l'indice vaut 100 × part de la zone / part de la France (100 = la moyenne nationale, 150 = une fois et demie) — ou du département qui pèse le plus dans la zone si reference vaut department (défaut france), son code étant rendu dans csp.reference.code et son nom dans csp.reference.libelle (null en référence France). C'est une estimation, pas une mesure : les CSP ne sont diffusées qu'à l'IRIS et sont réparties sur les carreaux au prorata de leur population — un indice est donc un ordre de grandeur estimé, et il n'y en a aucun d'exploitable quand csp.fiabilite.indices_fiables est faux (moins de 1 000 personnes de 15 ans et plus : la zone recopie le profil d'un ou deux IRIS). Un poste dont la part est inférieure à csp.fiabilite.part_min (0,5 %) n'a PAS d'indice : indice y vaut null, et ce n'est pas une donnée manquante — les CSP étant réparties de l'IRIS vers les carreaux, un poste rare porte une erreur relative trop grande pour être rapportée à une référence. Son effectif et sa part restent servis et se citent normalement ; ne jamais reconstituer l'indice à partir d'eux, ni à partir de leur rapport avec reference_part — ce rapport reconstituerait l'indice tout autant, et reste interdit. reference_part donne la part du même poste sur la référence : citer les deux parts côte à côte plutôt qu'un écart — un indice de 82 est un écart de 18 %, pas de 18 points. Le bloc potentiel_depense donne les unités de consommation reconstituées, le revenu disponible estimé des habitants (revenu_disponible_estime, en euros par an) et revenu_disponible_par_menage — le chiffre à citer de préférence, en disant « estimation » (niveau de vie écrêté, revenus 2021, unités de consommation reconstituées). potentiel_theorique = revenu disponible estimé × coefficient n'est calculé que si coefficient est passé (0 exclu à 1 : la part du revenu disponible que le secteur capte — le guide « Zone de chalandise » donne des repères par fonction de consommation, restauration ≈ 0,048) ; sinon il vaut null, une valeur qui ne s'invente pas. C'est un potentiel théorique, pas une prévision de chiffre d'affaires. Depuis septembre 2026, le bloc immobilier donne les PRIX DE VENTE immobiliers de la zone (DVF, DGFiP) : trois séries maisons, appartements et locaux_activite, chacune avec annees[] (par année sur cinq ans : ventes, prix_m2_median en euros par m² de surface réelle bâtie, reference_prix_m2_median sur le département), evolution_pct (première → dernière année fiable, non annualisée) et indice (100 = le département de reference, nommé par libelle). Ce sont des prix de vente déclarés dans les actes, pas des loyers — ne jamais en déduire un loyer ; les locaux d'activité mêlent boutiques, entrepôts et bureaux, un ordre de grandeur. Sous 20 ventes dans l'année, le prix médian vaut null (fiabilite.annees_fiables liste les années retenues) ; hors_couverture vrai signale une zone hors du jeu DVF (Alsace-Moselle et Mayotte ; les DROM 971-974 sont couverts), pas une zone sans vente. Depuis septembre 2026, le bloc activites compte les ÉTABLISSEMENTS de la zone par famille et sous-famille d'activité (boulangeries, tabac, comptabilité…), avec une densité pour 10 000 habitants et un indice contre la FRANCE par défaut — ou contre le département dominant de la zone si reference vaut department, activites.reference disant lequel des deux a servi. C'est un PLANCHER : seuls les établissements actifs et géolocalisés y figurent — fiabilite.taux_localisation dit quelle part cela représente. Ne jamais présenter ces comptes comme exhaustifs, ni les appeler des concurrents. familles[] porte les 14 familles, toutes, même à zéro ; chacune ses sous_familles[], dont celles à zéro sont omises. Chaque poste donne cle, libelle, etablissements, part (de total), densite (pour 10 000 habitants), reference_densite et indice (100 = la référence, que reference.libelle nomme). L'indice est moins biaisé que l'effectif : calculé de la même façon des deux côtés, le sous-compte s'y annule en grande partie — préférer l'indice pour comparer, l'effectif pour dénombrer. indice vaut null sous fiabilite.etablissements_min (5) établissements dans le poste, sur une zone sans habitant, et quand la référence n'a rien à comparer — soit qu'elle n'ait aucun établissement dans ce poste (reference_densite à 0.0 sur une sous-famille, null sur une famille), soit qu'aucune population de référence ne soit connue (reference_densite à null). densite est servie dès que la zone a des habitants, et vaut null sur une zone qui n'en a aucun (mer, étranger) — ne jamais l'annoncer comme toujours présente ; etablissements et part, eux, le sont. fiabilite.indices_fiables est faux sous 1 000 habitants. Deux limites de la nomenclature NAF à répercuter telles quelles : le tabac est sous-compté (un bar-tabac est codé en débit de boissons et reste donc dans « Cafés, hôtels, restaurants »), et la sous-famille « Rééducation, appareillage et pédicures-podologues » réunit ces trois métiers sans permettre d'en isoler un seul. Le détail des codes NAF de chaque sous-famille est dans le guide « Zone de chalandise », section Activités, avec ses hypothèses et limites. Depuis octobre 2026, le bloc defaillances rend, par année depuis 2017 (annees) et par activité (les mêmes 14 familles et sous-familles que activites), deux séries : les PROCÉDURES COLLECTIVES du BODACC (procedures.liquidation, .redressement, .sauvegarde, .autres), comptées sur chaque établissement de l'entreprise situé dans la zone — une chaîne en liquidation compte une fois par magasin —, et les arrêts d'activité (arrets : fermetures SIRENE sans reprise de la même activité à la même adresse (par un autre établissement, quel qu'en soit le SIREN) ni autre établissement du même SIREN). defaillances = liquidation + redressement, au sens de la Banque de France : une sauvegarde n'est PAS une défaillance, ne jamais l'additionner. Les procédures sont un PLANCHER (établissements positionnés seulement), les arrêts un PLAFOND (rapprochement par adresse brute) et sous-comptés sur les trois derniers mois ; annee_en_cours est partielle, le dire avec tout chiffre de l'année. periodes cumule les trois dernières années complètes et les trois d'avant, avec taux_defaillance (défaillances pour 100 établissements actifs et par an), reference_taux, indice (100 = la référence, celle de activites) et evolution_defaillances_pct — la période précédente contient le creux Covid tant qu'elle couvre 2020-2021, une hausse se lit avec cette réserve. taux_defaillance et indice valent null sous fiabilite.defaillances_min (5) défaillances ou sous fiabilite.actifs_min (20) établissements actifs du poste : lire alors les effectifs seuls, sans taux. fiabilite.procedures_sous_declarees vrai : le département dominant de la zone publie très peu de procédures au BODACC depuis 2022 (Bas-Rhin, codes dans fiabilite.departements_sous_declares) — les procédures y sont sous-comptées, taux_defaillance, indice et evolution_defaillances_pct ne sont pas servis : dire que les procédures collectives ne sont pas publiées de façon complète pour ce territoire, jamais un taux ; les arrêts d'activité se lisent. Sur une petite zone, préférer les périodes aux années. Ces blocs sont des comptes, jamais une liste : ne jamais nommer une entreprise, et ne jamais en déduire un risque ou une « santé ». Détail, règle d'arrêt et limites : guide « Zone de chalandise », section Défaillances. La zone se décrit d'UNE seule façon : soit minutes (1 à 30) de trajet depuis le centre, avec mode car (voiture, défaut), walking ou cycling ; soit radius_km (1 à 50) à vol d'oiseau. Avec minutes et mode car, traffic choisit les conditions : free (défaut, circulation libre) ou peak (heure de pointe du matin, un jour ouvré vers 08:30 — vitesses typiques modélisées par classe de voie et densité, pas de trafic temps réel). peak est refusé à pied et à vélo, et peut répondre « indisponible » si la plateforme ne l'a pas encore ouvert. Le centre est SOIT une adresse libre (address, un nom de commune suffit), SOIT un couple lat+lon WGS84 — jamais les deux ; point_central.precision dit comment il a été résolu. Plafond de surface : 10 000 km². Une zone sans habitant (mer, étranger) rend des zéros, pas une erreur. Plan minimum : Growth ; un appel compté quelle que soit la portée. attribution accompagne tout chiffre cité (INSEE Filosofi, IGN Contours IRIS ; SIRENE (INSEE) pour les établissements des blocs activites et defaillances, BODACC (DILA) pour les procédures collectives ; DGFiP DVF pour les prix immobiliers ; OpenStreetMap ODbL quand la portée est une durée).

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
latNoLatitude WGS84 du centre, avec `lon` et sans `address`.
lonNoLongitude WGS84 du centre, avec `lat` et sans `address`.
modeNoMode de déplacement de l'isochrone : `car` (défaut), `walking` ou `cycling` — avec `minutes` seulement.
addressNoCentre par adresse libre — un nom de commune suffit. Exclusif de `lat`/`lon`.
minutesNoPortée isochrone : minutes de trajet depuis le centre (1 à 30). Exclusif de `radius_km`.
trafficNoConditions de circulation de l'isochrone : `free` (défaut) ou `peak` (heure de pointe modélisée) — avec `minutes` et `mode: car` seulement.
radius_kmNoPortée rayon à vol d'oiseau, en km (1 à 50). Exclusif de `minutes`.
referenceNoRéférentiel des indices — UN réglage pour TROIS blocs, `csp`, `activites` et `defaillances` : `france` (défaut) ou `department` (département dominant de la zone).
coefficientNoPart du revenu disponible que le secteur capte (0 exclu à 1) ; déclenche `potentiel_theorique`.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / properties / reference / description
      Previous value: -"Référentiel des indices — UN réglage pour DEUX blocs, `csp` et `activites` : `france` (défaut) ou `department` (département dominant de la zone)."New value: +"Référentiel des indices — UN réglage pour TROIS blocs, `csp`, `activites` et `defaillances` : `france` (défaut) ou `department` (département dominant de la zone)."
  2. Changed1 schema field changed
    • changedInput schema / properties / reference / description
      Previous value: -"Référentiel de l'indice d'affinité CSP : `france` (défaut) ou `department` (département dominant de la zone)."New value: +"Référentiel des indices — UN réglage pour DEUX blocs, `csp` et `activites` : `france` (défaut) ou `department` (département dominant de la zone)."
  3. Changed10 schema fields changed
    • addedInput schema / properties / address / description
      Added value: +"Centre par adresse libre — un nom de commune suffit. Exclusif de `lat`/`lon`."
    • addedInput schema / properties / coefficient / description
      Added value: +"Part du revenu disponible que le secteur capte (0 exclu à 1) ; déclenche `potentiel_theorique`."
    • addedInput schema / properties / lat / description
      Added value: +"Latitude WGS84 du centre, avec `lon` et sans `address`."
    • addedInput schema / properties / lon / description
      Added value: +"Longitude WGS84 du centre, avec `lat` et sans `address`."
    • addedInput schema / properties / minutes / description
      Added value: +"Portée isochrone : minutes de trajet depuis le centre (1 à 30). Exclusif de `radius_km`."
    • addedInput schema / properties / mode / description
      Added value: +"Mode de déplacement de l'isochrone : `car` (défaut), `walking` ou `cycling` — avec `minutes` seulement."
    • addedInput schema / properties / radius_km / description
      Added value: +"Portée rayon à vol d'oiseau, en km (1 à 50). Exclusif de `minutes`."
    • addedInput schema / properties / reference / description
      Added value: +"Référentiel de l'indice d'affinité CSP : `france` (défaut) ou `department` (département dominant de la zone)."
    • addedInput schema / properties / traffic / description
      Added value: +"Conditions de circulation de l'isochrone : `free` (défaut) ou `peak` (heure de pointe modélisée) — avec `minutes` et `mode: car` seulement."
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "additionalProperties": true,
      +  "type": "object"
      +}
  4. Changed2 schema fields changed
    • addedInput schema / properties / coefficient
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "number"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null
      +}
    • addedInput schema / properties / reference
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null
      +}
  5. Changed1 schema field changed
    • addedInput schema / properties / traffic
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "default": null
      +}
  6. Added

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Far exceeds annotations: discloses imputation under statistical secrecy, estimation caveats, null-indice rules (part < 0.5%, <1000 residents), floor/ceiling semantics for procedures vs arrets, sous-declaration flag, DVF coverage gaps, active-year partiality, zero-result behavior, 10,000 km² cap, and required attribution string. Adds real behavioral depth beyond readOnlyHint.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single massive wall of text spanning many releases (1.11, 1.12, 1.16, Sept 2026, Oct 2026), repeating field names without a clear front-loaded hierarchy. Much content would be better placed in an output schema or guide; an agent must parse deeply for invocation essentials.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers nearly everything an agent needs to call and interpret results, including limits and attribution. However output_schema already exists, so much return-value detail is redundant, inflating length rather than filling gaps; a leaner invocation-focused description would be more complete in purpose.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3; description still adds value by explaining traffic rejection at walking/cycling, peak unavailability, reference applying to three blocks at once, and coefficient semantics. Much is redundant with schema but the exclusivity logic is reinforced.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Rend ce que l'INSEE sait de...') and resource (statistiques d'une zone de chalandise), then enumerates the exact returned blocks (population, menages, csp, activites, defaillances, immobilier). Clearly distinguishable from siblings like zone_compare (comparison) and get_address_details.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Spells out how to define a zone (minutes+mode OR radius_km, never both), center as address OR lat/lon, reference enum, coefficient optional, plan minimum Growth. Lacks explicit when-to-use vs zone_compare, though the radius-vs-isochrone and reference selection rules are thorough.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.