Reporting-Dashboard Import
Verknüpft historische Daten aus dem Reporting-Dashboard mit bestehenden Cockpit-Centern — ohne neue Center anzulegen. Nach dem Import nutzt die Redaktion nur noch Kunden-Reporting; kein monatlicher manueller Upload im alten Tool.
Menü (SUPER_ADMIN): System → Reporting-Import
Pfad: /dashboard/system/reporting-import
Voraussetzungen (Render)
Reporting-Dashboard:
REPORTING_EXPORT_API_KEY=<gemeinsamer-geheimer-string>
Cockpit Dashboard:
REPORTING_DASHBOARD_EXPORT_URL=https://reporting-dashboard-1ex8.onrender.com/api/integrations/cockpit-export
REPORTING_DASHBOARD_EXPORT_API_KEY=<derselbe-wert>
Datenbank: Migration 20260707120000_add_reporting_import_SAFE.sql (Spalte reportingDashboardClientId, Tabelle reporting_channel_snapshots).
Ablauf (einmalig für IT/SMG)
- Match-Vorschau laden — prüfen, welche Reporting-Clients einem Cockpit-Center zugeordnet werden.
- Dry-Run — Zählung ohne DB-Schreibvorgänge.
- Import ausführen — Bestätigungsdialog, dann Snapshots schreiben und
reportingDashboardClientIdsetzen. - Ergebnis-Tabelle prüfen → Link Kunden-Reporting prüfen.
- Redaktion testet Kunden-Reporting für ein paar Center und Kalendermonate (Badge „Historie“ wo erwartet).
Match-Vorschau
UI: /dashboard/system/reporting-import → „Match-Vorschau laden“
API: GET /api/reporting-import/preview
Rolle: nur SUPER_ADMIN
- Holt den Match-Index vom Reporting-Dashboard (
?match_index=1). - Matcht jeden Client gegen
ShoppingCenter(Reihenfolge:cockpitCenterId→ exakterslug→slug_compact→slug_prefix→ Name+Stadt → exakter Name →name_prefix). - Liefert Zusammenfassung + Zeilen mit Kanal-Zählern und
legacyClientId.
Lokal:
cd apps/dashboard && set -a && source .env.local && set +a
node ../../scripts/reporting-import-preview.mjs
Import ausführen
UI: /dashboard/system/reporting-import → „Dry-Run“ / „Import ausführen“
API: POST /api/reporting-import/execute
Rolle: nur SUPER_ADMIN
| Query | Bedeutung |
|---|---|
?dryRun=1 | Nur Zählung, keine DB-Schreibvorgänge |
?skipTestClients=0 | Test-Slugs (test, demo, nur-test) nicht überspringen |
Verhalten:
- Nur gematchte Reporting-Clients werden importiert.
- Unmatched werden ignoriert (kein neues Center).
- Pro gematchtem Client: Voll-Export über integrations-Endpoint (
?client_id=…) → Kanal-Zeilen inreporting_channel_snapshots(idempotent überlegacyRowId). ShoppingCenter.reportingDashboardClientIdwird gesetzt (nur wenn noch leer).- Bereits vorhandene Snapshots werden nicht überschrieben.
- Live-Kanäle (Umami, Outstand, Chatbot) bleiben unangetastet.
Lokal (aus apps/dashboard):
pnpm exec tsx scripts/reporting-import-execute.ts --dry-run
pnpm exec tsx scripts/reporting-import-execute.ts
Was im Kunden-Reporting landet
Importierte Kanäle werden in Kunden-Reporting angezeigt, wenn Live-Daten fehlen oder für reine Historie-Kanäle:
| Snapshot-Kanal | Kunden-Reporting |
|---|---|
website_analytics_monthly | Website (Fallback) |
social_media | Social Media (Fallback) |
chatbot_metrics | KI-Assistent (Fallback) |
stelen_metrics | Digital Signage (Fallback) |
meta_ads | Meta Ads |
google_ads | Google Ads |
search_keywords | Suchbegriffe |
Reporting-Export-Endpunkte
GET /api/integrations/cockpit-export (API-Key):
?match_index=1— leichter Match-Index (ohne Kanal-Daten)?client_id=50— voller Client inkl. Kanal-Historie (für Cockpit-Import)- ohne Parameter — alle Clients (schwer, nur für manuelle Exporte)
Siehe auch Reporting-Repo docs/cockpit-export.md.
Nutzungsstatistik: Seitenaufrufe werden anonymisiert erfasst. Im Umami-Dashboard nach diesem Pfad filtern: /en/dashboard/reporting-import