{
  "openapi": "3.1.0",
  "info": {
    "title": "API Compta virtuelle",
    "version": "1.0.0",
    "description": "API en lecture seule exposant 30 dossiers comptables entièrement fictifs. Les montants sont en euros. Une clé API est distincte d'une clé MCP."
  },
  "servers": [{"url": "https://mcp-api-compta.notreserveur.net/api/v1"}],
  "security": [{"bearerAuth": []}, {"apiKeyHeader": []}],
  "components": {
    "securitySchemes": {
      "bearerAuth": {"type": "http", "scheme": "bearer", "bearerFormat": "acct_api_*"},
      "apiKeyHeader": {"type": "apiKey", "in": "header", "name": "X-API-Key"}
    },
    "parameters": {
      "CompanyCode": {"name": "code", "in": "path", "required": true, "schema": {"type": "string", "pattern": "^DOSSIER-[0-9]{3}$"}},
      "Page": {"name": "page", "in": "query", "schema": {"type": "integer", "minimum": 1, "default": 1}},
      "Limit": {"name": "limit", "in": "query", "schema": {"type": "integer", "minimum": 1, "maximum": 100, "default": 50}},
      "From": {"name": "from", "in": "query", "schema": {"type": "string", "format": "date"}},
      "To": {"name": "to", "in": "query", "schema": {"type": "string", "format": "date"}}
    },
    "schemas": {
      "Envelope": {"type": "object", "required": ["data", "meta"], "properties": {"data": {}, "meta": {"type": "object", "properties": {"generated_at": {"type": "string", "format": "date-time"}, "simulation": {"type": "boolean"}, "currency": {"type": "string"}}}}},
      "Error": {"type": "object", "properties": {"error": {"type": "object", "properties": {"code": {"type": "string"}, "message": {"type": "string"}}}}}
    }
  },
  "paths": {
    "/": {"get": {"summary": "Informations sur l'API", "responses": {"200": {"description": "Informations"}, "401": {"description": "Clé refusée"}}}},
    "/dossiers": {"get": {"summary": "Liste les dossiers autorisés", "responses": {"200": {"description": "Liste des dossiers"}}}},
    "/dossiers/{code}": {"get": {"summary": "Identité complète du dossier", "parameters": [{"$ref": "#/components/parameters/CompanyCode"}], "responses": {"200": {"description": "Dossier"}, "404": {"description": "Dossier non autorisé"}}}},
    "/dossiers/{code}/tableau-de-bord": {"get": {"summary": "Indicateurs principaux", "parameters": [{"$ref": "#/components/parameters/CompanyCode"}], "responses": {"200": {"description": "Tableau de bord"}}}},
    "/dossiers/{code}/exercices": {"get": {"summary": "Exercices comptables", "parameters": [{"$ref": "#/components/parameters/CompanyCode"}], "responses": {"200": {"description": "Exercices"}}}},
    "/dossiers/{code}/comptes": {"get": {"summary": "Plan comptable", "parameters": [{"$ref": "#/components/parameters/CompanyCode"}], "responses": {"200": {"description": "Comptes"}}}},
    "/dossiers/{code}/journaux": {"get": {"summary": "Journaux comptables", "parameters": [{"$ref": "#/components/parameters/CompanyCode"}], "responses": {"200": {"description": "Journaux"}}}},
    "/dossiers/{code}/tiers": {"get": {"summary": "Clients et fournisseurs", "parameters": [{"$ref": "#/components/parameters/CompanyCode"}, {"name": "kind", "in": "query", "schema": {"type": "string", "enum": ["customer", "supplier"]}}], "responses": {"200": {"description": "Tiers"}}}},
    "/dossiers/{code}/factures": {"get": {"summary": "Factures clients ou fournisseurs", "parameters": [{"$ref": "#/components/parameters/CompanyCode"}, {"$ref": "#/components/parameters/Page"}, {"$ref": "#/components/parameters/Limit"}, {"$ref": "#/components/parameters/From"}, {"$ref": "#/components/parameters/To"}, {"name": "kind", "in": "query", "schema": {"type": "string", "enum": ["customer", "supplier"]}}, {"name": "status", "in": "query", "schema": {"type": "string"}}], "responses": {"200": {"description": "Factures paginées"}}}},
    "/dossiers/{code}/ecritures": {"get": {"summary": "Écritures et lignes comptables", "parameters": [{"$ref": "#/components/parameters/CompanyCode"}, {"$ref": "#/components/parameters/Page"}, {"$ref": "#/components/parameters/Limit"}, {"$ref": "#/components/parameters/From"}, {"$ref": "#/components/parameters/To"}, {"name": "journal", "in": "query", "schema": {"type": "string"}}], "responses": {"200": {"description": "Écritures paginées"}}}},
    "/dossiers/{code}/balance": {"get": {"summary": "Balance générale", "parameters": [{"$ref": "#/components/parameters/CompanyCode"}], "responses": {"200": {"description": "Balance"}}}},
    "/dossiers/{code}/grand-livre": {"get": {"summary": "Grand livre", "parameters": [{"$ref": "#/components/parameters/CompanyCode"}, {"$ref": "#/components/parameters/Page"}, {"$ref": "#/components/parameters/Limit"}, {"$ref": "#/components/parameters/From"}, {"$ref": "#/components/parameters/To"}, {"name": "account", "in": "query", "schema": {"type": "string"}}], "responses": {"200": {"description": "Lignes paginées"}}}},
    "/dossiers/{code}/banque": {"get": {"summary": "Compte et transactions bancaires", "parameters": [{"$ref": "#/components/parameters/CompanyCode"}, {"$ref": "#/components/parameters/Page"}, {"$ref": "#/components/parameters/Limit"}], "responses": {"200": {"description": "Banque"}}}},
    "/dossiers/{code}/tva": {"get": {"summary": "Synthèse de TVA", "parameters": [{"$ref": "#/components/parameters/CompanyCode"}], "responses": {"200": {"description": "TVA"}}}},
    "/dossiers/{code}/bilan": {"get": {"summary": "Bilan simulé", "parameters": [{"$ref": "#/components/parameters/CompanyCode"}], "responses": {"200": {"description": "Bilan"}}}},
    "/dossiers/{code}/compte-resultat": {"get": {"summary": "Compte de résultat", "parameters": [{"$ref": "#/components/parameters/CompanyCode"}], "responses": {"200": {"description": "Compte de résultat"}}}},
    "/dossiers/{code}/balance-agee": {"get": {"summary": "Balance âgée clients", "parameters": [{"$ref": "#/components/parameters/CompanyCode"}], "responses": {"200": {"description": "Créances échues"}}}},
    "/dossiers/{code}/immobilisations": {"get": {"summary": "Immobilisations", "parameters": [{"$ref": "#/components/parameters/CompanyCode"}], "responses": {"200": {"description": "Immobilisations"}}}}
  }
}
