flowchart LR
  %% High-level dataflow for telemetry in serious games with governance controls

  subgraph C["Client / Spiel"]
    U["Lernende:r"]
    CG["Consent-Gate<br/>(Opt-in/Policy-Version)"]
    EL["Event Logger<br/>(Batching/Offline-Queue)"]
    U --> CG --> EL
  end

  subgraph I["Ingestion"]
    COL["Telemetry Collector<br/>(Auth, Schema-Validation, Rate-Limits)"]
  end

  subgraph G["Governance & Identitätstrennung"]
    PID["Pseudonymisierungs-/Mapping-Service<br/>(getrennte Identitätsdomäne)"]
    RB["RBAC/ABAC Policy Engine"]
    AUD["Audit Logs<br/>(Zugriffe/Exporte)"]
  end

  subgraph S["Persistenz"]
    LRS["LRS / Event Store<br/>(Rohdaten/Lernspur)"]
  end

  subgraph A["Analytics"]
    ETL["ETL/ELT & Qualitätschecks<br/>(Dedupe, Missing Data, Drift)"]
    AGG["Aggregation<br/>(KPIs, Zeitfenster, Kohorten)"]
    ADB["Analytics DB<br/>(materialisierte Sichten)"]
  end

  subgraph R["Reporting"]
    DASH["Dashboard/Reports<br/>(Filter, Drilldown, Exporte)"]
    ST["Stakeholder<br/>(z. B. Lehrkraft/Trainer:in)"]
  end

  %% Main flow
  EL --> COL
  COL --> PID
  PID --> LRS
  LRS --> ETL --> AGG --> ADB --> DASH --> ST

  %% Governance controls
  RB -. "Zugriffskontrolle" .-> LRS
  RB -. "Zugriffskontrolle" .-> ADB
  RB -. "Zugriffskontrolle" .-> DASH
  DASH --> AUD
  LRS --> AUD
  ADB --> AUD

  %% Data separation hint
  COL -. "Trennung: technisch vs. didaktisch" .- PID
