# prescriptio_chantiers

Objets de chantier (offre payante : chantier / grue / engin) annotés à l'œil sur une image datée, croisés avec un permis de construire officiel. Une annotation ne prouve pas que le chantier est encore en cours : citer detected_at, la date du relevé, et ne pas lire confidence comme une probabilité. Filtrer par localisation (commune / dept / region) et type d'objet. Prolonger avec prescriptio_permis (fiche du permis via fields.numero_permis) ou prescriptio_entreprises. Exemple : { "localisation": { "dept": "38" }, "type": "grue" }.

État : implémenté ; distribution : historique uniquement ; offre payante : true ; effets : lecture.

## Entrée MCP

```json
{
  "properties": {
    "cursor": {
      "description": "Pagination : repasser tel quel le `next_cursor` de la page precedente. Omettre pour la premiere page.",
      "type": "string"
    },
    "limit": {
      "description": "Resultats par page (defaut 20, max 50).",
      "maximum": 50,
      "minimum": 1,
      "type": "integer"
    },
    "localisation": {
      "description": "Zone geographique. UNE granularite : { region } (couvre tous ses departements en un appel — ne jamais les enumerer) OU { dept } OU { commune } (combinable avec dept pour lever un homonyme). National = OMETTRE localisation (jamais dept:\"all\" ni \"france\").",
      "properties": {
        "commune": {
          "description": "Nom de commune (accents/casse ignores), code postal ou code INSEE. Arrondissements de Paris/Lyon/Marseille inclus automatiquement.",
          "type": "string"
        },
        "dept": {
          "description": "Code departement : 2 chiffres (\"69\"), \"2A\"/\"2B\", ou DOM \"971\"-\"976\".",
          "type": "string"
        },
        "insee": {
          "description": "Code INSEE exact issu de la carte. Prioritaire sur commune; jamais interprété comme code postal.",
          "pattern": "^(?:[0-9]{5}|2[A-Ba-b][0-9]{3})$",
          "type": "string"
        },
        "region": {
          "description": "Nom officiel de region (ex. \"Auvergne-Rhone-Alpes\", \"Ile-de-France\").",
          "type": "string"
        }
      },
      "type": "object"
    },
    "type": {
      "description": "Type d'objet detecte. Omettre pour tous les types.",
      "enum": [
        "chantier",
        "grue",
        "engin"
      ],
      "type": "string"
    }
  },
  "type": "object"
}
```

## Sortie MCP

```json
{
  "properties": {
    "_meta": {
      "type": "object"
    },
    "next_cursor": {
      "description": "À repasser tel quel pour la page suivante ; null s'il n'y en a plus.",
      "type": [
        "string",
        "null"
      ]
    },
    "results": {
      "description": "Résultats de la page courante.",
      "items": {
        "properties": {
          "fields": {
            "description": "Champs propres à la source.",
            "type": "object"
          },
          "id": {
            "description": "Identifiant à citer (SIREN/SIRET, marche_id, réf DECP).",
            "type": "string"
          },
          "resume": {
            "type": "string"
          },
          "titre": {
            "type": "string"
          }
        },
        "required": [
          "id"
        ],
        "type": "object"
      },
      "type": "array"
    },
    "total_estimated": {
      "description": "Total connu ou estimation signalée par la source ; null si le total est inconnu. Ne jamais extrapoler depuis la taille de la page.",
      "type": [
        "integer",
        "null"
      ]
    }
  },
  "required": [
    "results"
  ],
  "type": "object"
}
```

[Contrats externes et limites](/docs/reference/concepts.md).
