{
  "openapi": "3.1.0",
  "info": {
    "title": "Quale · Demande d’inventaire gratuit",
    "version": "1.0.0",
    "description": "Permet à une personne, ou à un agent d’intelligence artificielle agissant pour elle avec son accord, de demander la rencontre d’inventaire gratuite de 2 heures. La demande arrive par e-mail chez Quale, qui recontacte la personne.",
    "contact": { "name": "Quale", "url": "https://quale.ch/" }
  },
  "servers": [{ "url": "https://quale.ch" }],
  "paths": {
    "/demande.php": {
      "post": {
        "operationId": "demanderInventaire",
        "summary": "Demander l’inventaire gratuit (rencontre de 2 heures)",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": { "$ref": "#/components/schemas/Demande" },
              "example": { "nom": "Marie Dupont", "entreprise": "Dupont Sanitaire Sàrl", "email": "marie@exemple.ch", "telephone": "079 000 00 00", "taille": "6-20", "message": "Offres et factures fournisseurs", "consentement": true, "agent": "Assistant de Marie" }
            },
            "application/x-www-form-urlencoded": { "schema": { "allOf": [{ "$ref": "#/components/schemas/Demande" }], "properties": { "consentement": { "type": "string", "enum": ["oui", "on", "1", "true"] } } } }
          }
        },
        "responses": {
          "200": { "description": "Demande envoyée.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Reponse" } } } },
          "405": { "description": "Méthode refusée : envoyer en POST." },
          "400": { "description": "Contenu JSON illisible.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Reponse" } } } },
          "422": { "description": "Champs à corriger (liste dans « erreurs »).", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Reponse" } } } },
          "429": { "description": "Plus de 5 demandes en une heure depuis la même adresse.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Reponse" } } } },
          "502": { "description": "L’e-mail n’a pas pu partir ; appeler le 078 874 89 25.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Reponse" } } } },
          "503": { "description": "Formulaire pas encore relié ; appeler le 078 874 89 25.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Reponse" } } } }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "Demande": {
        "type": "object",
        "required": ["nom", "entreprise", "email", "consentement"],
        "properties": {
          "nom": { "type": "string", "minLength": 2, "maxLength": 100, "description": "Nom de la personne." },
          "entreprise": { "type": "string", "minLength": 2, "maxLength": 150, "description": "Nom de l’entreprise." },
          "email": { "type": "string", "format": "email", "maxLength": 200 },
          "telephone": { "type": "string", "maxLength": 30, "description": "Facultatif." },
          "taille": { "type": "string", "enum": ["1-5", "6-20", "21+"], "description": "Facultatif : nombre de personnes dans l’entreprise." },
          "message": { "type": "string", "maxLength": 2000, "description": "Facultatif : ce que la personne aimerait automatiser." },
          "consentement": { "type": "boolean", "const": true, "description": "La personne accepte que ces coordonnées servent uniquement à la recontacter. Un agent ne l’envoie qu’avec son accord explicite." },
          "agent": { "type": "string", "maxLength": 120, "description": "Facultatif : nom de l’agent qui remplit la demande pour la personne." }
        }
      },
      "Reponse": {
        "type": "object",
        "required": ["ok"],
        "properties": {
          "ok": { "type": "boolean" },
          "message": { "type": "string" },
          "erreurs": { "type": "array", "items": { "type": "string" } }
        }
      }
    }
  }
}
