{
  "openapi": "3.1.0",
  "info": {
    "title": "OK COMPUTER · API pública",
    "version": "1.0.0",
    "summary": "Datos públicos de OK COMPUTER en JSON, para agentes de IA e integraciones.",
    "description": "API de solo lectura y sin autenticación. Devuelve lo que ya está publicado en okcomputer.es: servicios, casos en producción, política de precios, preguntas frecuentes e índice de páginas. Incluye la misma calculadora de tiempo perdido que la web, con idénticos supuestos. Existen dos puertas equivalentes: MCP en https://okcomputer.es/mcp y A2A en https://okcomputer.es/a2a.",
    "contact": { "name": "OK COMPUTER", "email": "hola@okcomputer.es", "url": "https://okcomputer.es" },
    "license": { "name": "Uso libre citando la fuente (okcomputer.es)", "url": "https://okcomputer.es/aviso-legal" }
  },
  "servers": [{ "url": "https://okcomputer.es/api/v1", "description": "Producción" }],
  "externalDocs": { "description": "OK COMPUTER para agentes de IA", "url": "https://okcomputer.es/para-agentes" },
  "paths": {
    "/health": {
      "get": {
        "operationId": "health",
        "summary": "Estado del servicio",
        "responses": { "200": { "description": "Servicio vivo", "content": { "application/json": { "schema": { "type": "object", "properties": { "ok": { "type": "boolean" }, "servicio": { "type": "string" }, "version": { "type": "string" } } } } } } }
      }
    },
    "/info": {
      "get": {
        "operationId": "info",
        "summary": "Ficha de la empresa y proceso de trabajo",
        "responses": { "200": { "description": "Datos de la empresa", "content": { "application/json": { "schema": { "type": "object", "properties": { "empresa": { "type": "object" }, "proceso": { "type": "array", "items": { "type": "string" } } } } } } } }
      }
    },
    "/servicios": {
      "get": {
        "operationId": "listarServicios",
        "summary": "Catálogo de servicios",
        "responses": { "200": { "description": "Servicios", "content": { "application/json": { "schema": { "type": "object", "properties": { "total": { "type": "integer" }, "servicios": { "type": "array", "items": { "$ref": "#/components/schemas/Servicio" } } } } } } } }
      }
    },
    "/casos": {
      "get": {
        "operationId": "listarCasos",
        "summary": "Casos en producción",
        "responses": { "200": { "description": "Casos", "content": { "application/json": { "schema": { "type": "object", "properties": { "total": { "type": "integer" }, "casos": { "type": "array", "items": { "$ref": "#/components/schemas/Caso" } } } } } } } }
      }
    },
    "/precios": {
      "get": {
        "operationId": "consultarPrecios",
        "summary": "Política de precios y subvenciones",
        "description": "No devuelve una tarifa: OK COMPUTER no publica precios cerrados. Devuelve la política, la horquilla y las subvenciones vigentes.",
        "responses": { "200": { "description": "Política de precios", "content": { "application/json": { "schema": { "type": "object" } } } } }
      }
    },
    "/faq": {
      "get": {
        "operationId": "preguntasFrecuentes",
        "summary": "Preguntas frecuentes, con búsqueda",
        "parameters": [{ "name": "q", "in": "query", "required": false, "schema": { "type": "string" }, "description": "Texto a buscar. Sin él devuelve todas." }],
        "responses": { "200": { "description": "Preguntas y respuestas oficiales", "content": { "application/json": { "schema": { "type": "object" } } } } }
      }
    },
    "/paginas": {
      "get": {
        "operationId": "buscarPaginas",
        "summary": "Índice de páginas públicas, con búsqueda",
        "parameters": [{ "name": "q", "in": "query", "required": false, "schema": { "type": "string" }, "description": "Texto a buscar. Insensible a tildes." }],
        "responses": { "200": { "description": "Páginas relevantes con su URL", "content": { "application/json": { "schema": { "type": "object" } } } } }
      }
    },
    "/herramientas": {
      "get": {
        "operationId": "listarHerramientas",
        "summary": "Catálogo de herramientas invocables",
        "description": "Las mismas herramientas que expone el servidor MCP, con su esquema de entrada.",
        "responses": { "200": { "description": "Herramientas disponibles", "content": { "application/json": { "schema": { "type": "object" } } } } }
      }
    },
    "/herramientas/{nombre}": {
      "post": {
        "operationId": "invocarHerramienta",
        "summary": "Invoca una herramienta del catálogo",
        "parameters": [{ "name": "nombre", "in": "path", "required": true, "schema": { "type": "string" }, "example": "listar_casos" }],
        "requestBody": { "required": false, "content": { "application/json": { "schema": { "type": "object", "description": "Argumentos según el esquema de la herramienta." } } } },
        "responses": {
          "200": { "description": "Resultado", "content": { "application/json": { "schema": { "type": "object" } } } },
          "400": { "description": "Faltan argumentos obligatorios" },
          "404": { "description": "Herramienta desconocida" }
        }
      }
    },
    "/calculadora/tiempo-perdido": {
      "post": {
        "operationId": "calcularTiempoPerdido",
        "summary": "Coste anual del tiempo administrativo",
        "description": "Mismos supuestos que la calculadora de la web: 1.720 h de jornada anual, 46 semanas trabajadas y 50 % automatizable.",
        "requestBody": {
          "required": true,
          "content": { "application/json": { "schema": { "$ref": "#/components/schemas/EntradaCalculadora" }, "example": { "empleados": 10, "coste_anual_bruto": 30000, "horas_semana": 12 } } }
        },
        "responses": { "200": { "description": "Horas y euros al año, y lo recuperable", "content": { "application/json": { "schema": { "type": "object" } } } } }
      },
      "get": {
        "operationId": "calcularTiempoPerdidoGet",
        "summary": "Igual, por query string",
        "parameters": [
          { "name": "empleados", "in": "query", "required": true, "schema": { "type": "number" } },
          { "name": "coste_anual_bruto", "in": "query", "required": true, "schema": { "type": "number" } },
          { "name": "horas_semana", "in": "query", "required": true, "schema": { "type": "number" } }
        ],
        "responses": { "200": { "description": "Horas y euros al año", "content": { "application/json": { "schema": { "type": "object" } } } } }
      }
    }
  },
  "components": {
    "schemas": {
      "Servicio": {
        "type": "object",
        "properties": {
          "id": { "type": "string" },
          "nombre": { "type": "string" },
          "resumen": { "type": "string" },
          "url": { "type": "string", "format": "uri" },
          "destacado": { "type": "boolean" }
        },
        "required": ["id", "nombre", "resumen", "url"]
      },
      "Caso": {
        "type": "object",
        "properties": {
          "id": { "type": "string" },
          "nombre": { "type": "string" },
          "resumen": { "type": "string" },
          "estado": { "type": "string" },
          "url": { "type": "string", "format": "uri" },
          "prueba": { "type": "string" },
          "destacado": { "type": "boolean" }
        },
        "required": ["id", "nombre", "resumen", "estado"]
      },
      "EntradaCalculadora": {
        "type": "object",
        "properties": {
          "empleados": { "type": "number", "minimum": 0, "description": "Nº de personas afectadas." },
          "coste_anual_bruto": { "type": "number", "minimum": 0, "description": "Coste bruto anual por empleado, en euros." },
          "horas_semana": { "type": "number", "minimum": 0, "description": "Horas semanales por empleado en tareas administrativas. La media española está en 15-16." }
        },
        "required": ["empleados", "coste_anual_bruto", "horas_semana"]
      }
    }
  }
}
