diff --git a/migrations/0019_kennzahlen_policy_rule.down.sql b/migrations/0019_kennzahlen_policy_rule.down.sql
new file mode 100644
index 00000000..45030c44
--- /dev/null
+++ b/migrations/0019_kennzahlen_policy_rule.down.sql
@@ -0,0 +1 @@
+DELETE FROM policy_rules WHERE granted_by = 'migration:0019_kennzahlen_policy_rule';
diff --git a/migrations/0019_kennzahlen_policy_rule.up.sql b/migrations/0019_kennzahlen_policy_rule.up.sql
new file mode 100644
index 00000000..52cb0e93
--- /dev/null
+++ b/migrations/0019_kennzahlen_policy_rule.up.sql
@@ -0,0 +1,18 @@
+-- ANA-02: Kennzahlen-Dashboard braucht ein eigenes Recht, analog zum
+-- core.tenant.admin-Muster aus 0018 — nur tenant_admin, da aggregierte
+-- Loeschkennzahlen ueber alle Module hinweg sensibler sind als einzelne
+-- Modul-Leserechte.
+WITH grants(role, permission) AS (
+ VALUES
+ ('tenant_admin', 'kennzahlen.read')
+),
+ins AS (
+ INSERT INTO policy_rules (role, permission, granted_by)
+ SELECT role, permission, 'migration:0019_kennzahlen_policy_rule' FROM grants
+ ON CONFLICT (role, permission) DO NOTHING
+ RETURNING role, permission
+)
+INSERT INTO policy_rule_changes (role, permission, action, actor, version)
+SELECT i.role, i.permission, 'grant', 'migration:0019_kennzahlen_policy_rule',
+ COALESCE((SELECT MAX(c.version) FROM policy_rule_changes c WHERE c.role = i.role AND c.permission = i.permission), 0) + 1
+FROM ins i;
diff --git a/web/ai-extraction-review/app/layout.tsx b/web/ai-extraction-review/app/layout.tsx
index e0334991..d8d1c583 100644
--- a/web/ai-extraction-review/app/layout.tsx
+++ b/web/ai-extraction-review/app/layout.tsx
@@ -1,5 +1,5 @@
import Script from "next/script";
-import { ThemeProvider, I18nProvider, ToastProvider, typography, themeInitScript, focusVisibleStyles } from "@nexarch/shl";
+import { ThemeProvider, I18nProvider, ToastProvider, ModuleNavShell, typography, themeInitScript, focusVisibleStyles } from "@nexarch/shl";
export const metadata = {
title: "NEXARCH Extraktions-Korrektur",
@@ -36,7 +36,7 @@ export default function RootLayout({
- {children}
+ {children}