{
 "$schema": "https://json-schema.org/draft/2020-12/schema",
 "$id": "https://temoinpublic.fr/schema/adresse-des-actes/1.json",
 "title": "Adresse pérenne d’un acte local",
 "version": "1",
 "licence": "https://www.etalab.gouv.fr/licence-ouverte-open-licence/",
 "type": "object",
 "required": [
  "adresse",
  "schema",
  "collectivite",
  "jour",
  "nature",
  "sha256",
  "recu",
  "registre",
  "place",
  "objet",
  "source",
  "date_lue",
  "passage",
  "versions"
 ],
 "additionalProperties": true,
 "properties": {
  "adresse": {
   "type": "string",
   "description": "L’adresse canonique",
   "pattern": "/actes/(?:(?:0[1-9]|1\\d|2[1-9AB]|[3-8]\\d|9[0-8])\\d{3}|\\d{9})/\\d{4}-\\d{2}-\\d{2}/(?:deliberation|arrete|decision)-[0-9a-f]{12}$"
  },
  "schema": {
   "type": "string",
   "description": "L’identifiant de ce schéma",
   "const": "https://temoinpublic.fr/schema/adresse-des-actes/1.json"
  },
  "collectivite": {
   "type": "string",
   "description": "Code INSEE ou SIREN",
   "pattern": "^(?:0[1-9]|1\\d|2[1-9AB]|[3-8]\\d|9[0-8])\\d{3}$|^\\d{9}$"
  },
  "jour": {
   "type": "string",
   "description": "Jour de la datation (AAAA-MM-JJ)",
   "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
  },
  "nature": {
   "type": "string",
   "description": "deliberation, arrete ou decision",
   "enum": [
    "deliberation",
    "arrete",
    "decision"
   ]
  },
  "sha256": {
   "type": "string",
   "description": "Empreinte SHA-256 du document, 64 caractères",
   "pattern": "^[0-9a-f]{64}$"
  },
  "recu": {
   "type": "string",
   "description": "Identifiant du reçu, 64 caractères",
   "pattern": "^[0-9a-f]{64}$"
  },
  "registre": {
   "type": "string",
   "description": "Registre public du jour de la datation"
  },
  "place": {
   "type": "integer",
   "minimum": 1,
   "description": "Rang de la ligne dans ce registre"
  },
  "objet": {
   "type": [
    "string",
    "null"
   ],
   "description": "Objet de l’acte, null s’il pourrait nommer une personne"
  },
  "source": {
   "type": [
    "string",
    "null"
   ],
   "description": "Adresse lue sur le site officiel, null si elle pourrait nommer une personne"
  },
  "date_lue": {
   "type": [
    "object",
    "null"
   ],
   "description": "Date de l’acte lue dans l’objet ou le nom du fichier : date, precision (jour, mois), dans (libelle, fichier)"
  },
  "passage": {
   "type": [
    "object",
    "null"
   ],
   "description": "État de la source au dernier passage : jour, etat (vue, absente)"
  },
  "versions": {
   "type": "array",
   "items": {
    "type": "string",
    "format": "uri"
   },
   "description": "Adresses des versions datées à la même source, de la plus ancienne à la plus récente"
  }
 },
 "x-gabarit": "https://temoinpublic.fr/actes/{collectivite}/{jour}/{nature}-{empreinte}",
 "x-exemple": "https://temoinpublic.fr/actes/17003/2026-10-15/deliberation-64555826dbb9",
 "x-segments": [
  {
   "nom": "collectivite",
   "motif": "^(?:0[1-9]|1\\d|2[1-9AB]|[3-8]\\d|9[0-8])\\d{3}$|^\\d{9}$",
   "porte": "Code officiel géographique INSEE de la commune, ou SIREN du groupement (clé de Luhn juste)",
   "eli": "eli:jurisdiction"
  },
  {
   "nom": "jour",
   "motif": "^\\d{4}-\\d{2}-\\d{2}$",
   "porte": "Jour UTC de la première datation au registre public",
   "eli": "eli:date_publication, au plus tard"
  },
  {
   "nom": "nature",
   "motif": "^(?:deliberation|arrete|decision)$",
   "porte": "Nature de l’acte",
   "eli": "eli:type_document"
  },
  {
   "nom": "empreinte",
   "motif": "^[0-9a-f]{12}$",
   "porte": "12 premiers caractères hexadécimaux du SHA-256 du document",
   "eli": "eli:id_local"
  }
 ],
 "x-resolution": [
  {
   "cas": "Forme canonique",
   "statut": 200,
   "rend": "La page de l’acte, ou sa fiche JSON (Accept: application/json)"
  },
  {
   "cas": "Autre écriture du même acte : préfixe d’empreinte d’au moins 8 caractères ou empreinte entière, nature absente ou en capitales, code en minuscules",
   "statut": 301,
   "rend": "La forme canonique"
  },
  {
   "cas": "Préfixe partagé par plusieurs actes du même jour et de la même collectivité",
   "statut": 300,
   "rend": "Les adresses canoniques, 20 au plus"
  },
  {
   "cas": "Segment hors motif, nature inconnue, moins de 8 caractères, aucun acte",
   "statut": 404,
   "rend": "Rien"
  }
 ],
 "x-invariants": [
  "Une adresse ne change jamais et ne désigne qu’une version.",
  "Une source dont l’empreinte change reçoit une adresse neuve.",
  "Une adresse ne porte aucun nom : code, jour, nature, empreinte.",
  "Le jour est celui de la datation, jamais la date de l’acte."
 ],
 "x-api": [
  {
   "adresse": "GET /api/recus/{recu}",
   "champ": "acte",
   "porte": "L’adresse canonique de l’acte que le reçu date"
  },
  {
   "adresse": "POST /mcp, outil lire_recu",
   "champ": "acte",
   "porte": "La même adresse"
  },
  {
   "adresse": "GET /sitemap-actes.xml",
   "champ": "loc, lastmod",
   "porte": "Chaque adresse, datée du jour de sa datation"
  }
 ],
 "x-eli": {
  "profil": "Profil local : juridiction = la collectivité, type = la nature, date = la datation, identifiant naturel = l’empreinte",
  "ontologie": "http://data.europa.eu/eli/ontology#"
 },
 "x-resolveurs": [
  "https://temoinpublic.fr"
 ]
}
