{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/edifiable-fr/json-schema/edifiable-fr-street-schema.json",
  "title": "Street",
  "x-generated": "2026-11-06",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/edifiable-fr-openapi.json#/components/schemas/Street",
  "type": "object",
  "required": [
    "url",
    "municipality",
    "street",
    "zone_at_point",
    "neighbouring_zones",
    "rules",
    "answers",
    "page_url",
    "markdown_url"
  ],
  "properties": {
    "url": {
      "type": "string",
      "format": "uri"
    },
    "municipality": {
      "type": "object",
      "required": [
        "insee",
        "name",
        "department"
      ],
      "properties": {
        "insee": {
          "type": "string"
        },
        "name": {
          "type": "string"
        },
        "department": {
          "type": "string"
        }
      }
    },
    "street": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        },
        "postal_code": {
          "type": [
            "string",
            "null"
          ]
        }
      }
    },
    "zone_at_point": {
      "type": [
        "object",
        "null"
      ],
      "properties": {
        "code": {
          "type": "string",
          "description": "Le trait du plan au point de la voie : un secteur (UAa) ou une zone."
        },
        "label": {
          "type": [
            "string",
            "null"
          ]
        },
        "chapter": {
          "type": [
            "string",
            "null"
          ],
          "description": "Le chapitre du reglement qui porte ses regles."
        },
        "chapter_url": {
          "type": [
            "string",
            "null"
          ],
          "format": "uri"
        },
        "page_url": {
          "type": [
            "string",
            "null"
          ],
          "format": "uri"
        },
        "national_rule": {
          "type": [
            "object",
            "null"
          ],
          "description": "Quand le reglement du plan renvoie cette zone au reglement national d urbanisme au lieu de lui ecrire un chapitre : `family` vaut ZONE, `document_sentence` porte la phrase du document, et `answers` et `notes` ont la forme de `national_rule` du plan de la commune, sans la question de l usage. `null` sinon."
        },
        "no_written_rule": {
          "type": [
            "object",
            "null"
          ],
          "description": "Quand le reglement ecrit ne regit pas cette zone et qu une orientation d amenagement et de programmation de secteur d amenagement en tient lieu (article R.151-8 du code de l urbanisme) : `document_sentence` porte la phrase du document qui le dit, `where` ou la lire, `to_read` ce qu il faut lire a la place. `null` sinon."
        }
      }
    },
    "plan_labels": {
      "type": "array",
      "description": "Ce que le plan graphique impose ICI, quand le document etiquette ses traits.",
      "items": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "value": {
            "type": "string"
          }
        }
      }
    },
    "neighbouring_zones": {
      "type": "array",
      "description": "Ce que le plan porte a moins de 120 m : une voie change souvent de zone d un cote a l autre.",
      "items": {
        "type": "object",
        "properties": {
          "code": {
            "type": "string"
          },
          "label": {
            "type": [
              "string",
              "null"
            ]
          },
          "chapter": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      }
    },
    "rules": {
      "type": "array",
      "items": {
        "type": "object",
        "required": [
          "topic",
          "question",
          "article",
          "document_heading",
          "cases",
          "not_regulated",
          "note",
          "incomplete",
          "common",
          "chapter",
          "at_point"
        ],
        "properties": {
          "topic": {
            "type": "string",
            "enum": [
              "usage",
              "hauteur",
              "emprise",
              "voie",
              "limites",
              "stationnement",
              "verts"
            ],
            "description": "Cle stable du domaine."
          },
          "question": {
            "type": "string",
            "description": "La question en francais, telle que la page la pose."
          },
          "article": {
            "type": "integer"
          },
          "document_heading": {
            "type": [
              "string",
              "null"
            ],
            "description": "L intitule que le DOCUMENT donne a cet article. Le numero, lui, est celui de la grille du site : c est cet intitule qui se retrouve dans le PDF. Nul quand le document n en donne aucun de lisible."
          },
          "cases": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "value",
                "when",
                "sentence"
              ],
              "properties": {
                "value": {
                  "type": "string",
                  "description": "Ce qu on lit dans la colonne : « 9 m », « 50 % », « 2 places par logement »."
                },
                "when": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "description": "La condition qui declenche cette valeur. `null` quand elle vaut sans condition."
                },
                "sentence": {
                  "type": "string",
                  "description": "La phrase du reglement qui porte la valeur, retrouvee dans l article au moment de la reponse."
                }
              }
            }
          },
          "not_regulated": {
            "type": "boolean",
            "description": "Le document dit lui-meme qu il ne fixe rien."
          },
          "note": {
            "type": [
              "string",
              "null"
            ]
          },
          "incomplete": {
            "type": "boolean",
            "description": "Vrai quand au moins un cas n a pas retrouve sa phrase dans le document servi : il n est pas rendu."
          },
          "common": {
            "type": "boolean",
            "description": "Vrai quand la regle vient des dispositions communes a toutes les zones du document, et non du chapitre de la zone : `article` designe alors une rubrique du commun."
          },
          "chapter": {
            "type": [
              "string",
              "null"
            ],
            "description": "Le chapitre de tete dont `article` est une rubrique, quand la regle vient du chapitre qui vaut dans toute la famille de la zone (`U` pour une zone `UC`) ; null sinon."
          },
          "at_point": {
            "oneOf": [
              {
                "type": "object",
                "required": [
                  "value",
                  "when",
                  "sentence",
                  "figure"
                ],
                "properties": {
                  "value": {
                    "type": "string",
                    "description": "Ce qu on lit dans la colonne : « 9 m », « 50 % », « 2 places par logement »."
                  },
                  "when": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "La condition qui declenche cette valeur. `null` quand elle vaut sans condition."
                  },
                  "sentence": {
                    "type": "string",
                    "description": "La phrase du reglement qui porte la valeur, retrouvee dans l article au moment de la reponse."
                  },
                  "figure": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "Le chiffre seul de `value` (« 16 m », « 40 % »), pour la hauteur, l emprise au sol et le recul sur la voie, quand la valeur n en porte qu un. Nul sinon : « 24 m a l egout, 27 m au faitage » n a pas un chiffre, elle en a deux, et une emprise se dit en pour cent seul quand elle est rapportee au terrain."
                  }
                }
              },
              {
                "type": "null"
              }
            ],
            "description": "Le seul cas de `cases` qui vaut pour le secteur de `zone_at_point` : sa condition nomme ce secteur ou l indice que son code donne a cette regle, ou il n en porte aucune. Nul quand aucun cas seul ne vaut au point - plusieurs restent, ou le seul qui reste depend d une condition que le point ne tranche pas : la reponse est alors dans `cases`, avec leurs conditions."
          }
        }
      }
    },
    "answers": {
      "type": "array",
      "items": {
        "type": "object"
      }
    },
    "constraints": {
      "type": [
        "object",
        "null"
      ],
      "description": "Prescriptions, informations et servitudes d utilite publique dessinees a 120 m."
    },
    "permit_pieces_triggered": {
      "type": [
        "array",
        "null"
      ],
      "items": {
        "type": "object",
        "required": [
          "code",
          "title",
          "article",
          "trigger",
          "reason"
        ],
        "properties": {
          "code": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "article": {
            "type": "string",
            "description": "L article du code de l urbanisme qui exige la piece."
          },
          "trigger": {
            "type": "string",
            "enum": [
              "toujours",
              "lotissement",
              "zac",
              "natura2000",
              "etude-impact",
              "assainissement",
              "sismique",
              "ppr",
              "thermique",
              "exemplarite",
              "defrichement",
              "demolition",
              "domaine-public",
              "patrimoine",
              "parc-national",
              "stationnement",
              "derogation",
              "servitude",
              "cos",
              "pup",
              "logement-existant"
            ]
          },
          "reason": {
            "type": "string",
            "description": "Le declencheur, en francais."
          }
        }
      }
    },
    "risks": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "document": {
      "type": [
        "object",
        "null"
      ]
    },
    "page_url": {
      "type": "string",
      "format": "uri"
    },
    "markdown_url": {
      "type": "string",
      "format": "uri"
    },
    "source": {
      "type": "string",
      "description": "D'ou vient la DONNEE. Une citation recopie cette phrase."
    },
    "served_by": {
      "type": "object",
      "description": "Qui a REPONDU. Ne pas confondre avec `source`.",
      "properties": {
        "name": {
          "type": "string"
        },
        "url": {
          "type": "string",
          "format": "uri"
        }
      }
    },
    "terms": {
      "type": "string"
    },
    "documentation": {
      "type": "string",
      "format": "uri"
    },
    "notice": {
      "type": "string",
      "description": "La retenue : une lecture automatique ne remplace pas le certificat d'urbanisme delivre par la mairie."
    }
  }
}