{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://hejstack.com/export-specs/nutzer.schema.json",
  "title": "hejstack Export: nutzer.json",
  "description": "Nutzer, Teams und Rollen einer Organisation. Dieselben Nutzerdaten liegen zusätzlich als nutzer.csv (UTF-8, Semikolon) bei. Passwörter und Anmeldedaten sind nicht enthalten (Identitäten liegen im Identitätsdienst). Exportformat 1.0, Stand 15.09.2026.",
  "type": "object",
  "required": ["format_version", "users", "teams"],
  "properties": {
    "format_version": { "type": "string", "pattern": "^[0-9]+\\.[0-9]+$" },
    "users": { "type": "array", "items": { "$ref": "#/$defs/user" } },
    "teams": { "type": "array", "items": { "$ref": "#/$defs/team" } },
    "invitations": { "type": "array", "items": { "$ref": "#/$defs/invitation" }, "description": "Offene (noch nicht angenommene) Einladungen." }
  },
  "$defs": {
    "uuid": { "type": "string", "format": "uuid" },
    "role": { "type": "string", "enum": ["user", "knowledge_manager", "tenant_admin"], "description": "user = Nutzer, knowledge_manager = Wissensmanager, tenant_admin = Administrator." },
    "user": {
      "type": "object",
      "required": ["id", "email", "role", "is_active", "created_at"],
      "properties": {
        "id": { "$ref": "#/$defs/uuid", "description": "Nutzer-ID, auf die alle anderen Dateien verweisen (user_id, uploaded_by, …)." },
        "email": { "type": "string", "format": "email" },
        "display_name": { "type": ["string", "null"] },
        "role": { "$ref": "#/$defs/role" },
        "is_active": { "type": "boolean" },
        "prompt_admin": { "type": "boolean", "description": "Darf das Antwortverhalten (Prompts) verwalten." },
        "web_search_enabled": { "type": "boolean", "description": "Internetsuche im Chat freigeschaltet." },
        "general_knowledge_enabled": { "type": "boolean", "description": "Allgemeinwissen des Sprachmodells freigeschaltet." },
        "team_ids": { "type": "array", "items": { "$ref": "#/$defs/uuid" } },
        "created_at": { "type": "string", "format": "date-time" }
      }
    },
    "team": {
      "type": "object",
      "required": ["id", "name", "members", "created_at"],
      "properties": {
        "id": { "$ref": "#/$defs/uuid" },
        "name": { "type": "string", "maxLength": 120 },
        "description": { "type": ["string", "null"] },
        "knowledge_locked": { "type": "boolean", "description": "Team-Wissen ist in jedem Chat der Mitglieder verbindlich eingebunden." },
        "members": {
          "type": "array",
          "items": {
            "type": "object",
            "required": ["user_id"],
            "properties": {
              "user_id": { "$ref": "#/$defs/uuid" },
              "role": { "type": "string", "description": "Rolle im Team, derzeit member." }
            }
          }
        },
        "created_at": { "type": "string", "format": "date-time" }
      }
    },
    "invitation": {
      "type": "object",
      "required": ["email", "role", "expires_at"],
      "properties": {
        "email": { "type": "string", "format": "email" },
        "role": { "$ref": "#/$defs/role" },
        "team_ids": { "type": "array", "items": { "$ref": "#/$defs/uuid" } },
        "invited_by": { "type": ["string", "null"], "format": "uuid" },
        "created_at": { "type": "string", "format": "date-time" },
        "expires_at": { "type": "string", "format": "date-time" }
      }
    }
  }
}
