feat(helpdesk): add Risk Radar dashboard with customer risk scoring

New portfolio view scoring customers 0-100 across five dimensions:
- Open pressure (30%): open + critical ticket count
- Trend (25%): net ticket flow (created - closed) in period
- SLA overdue (20%): tickets exceeding escalation targets
- Resolution time (15%): median hours to close (null = neutral)
- Inactivity (10%): age of oldest open ticket

Card grid with score badges (color-coded high/medium/low), metric
pills, driver bars. Click opens detail dialog with all dimensions
and open ticket list. Clientside search filter.

PBI_LV_Tickets with client-driven paging ($skip/$top, hardcap 5000).
Escalation definitions cached separately (30min TTL). Truncated
banner when data is capped.

New: RiskRadarService, getTicketsForRiskRadar(), 13 PHPUnit tests,
permission helpdesk.risk-radar.view, 2 routes, i18n de+en.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-04-06 00:24:48 +02:00
parent c6c5d06936
commit 5a4974909b
17 changed files with 1487 additions and 5 deletions

View File

@@ -34,6 +34,8 @@ return [
['path' => 'helpdesk/debitor-controlling-dashboard-data', 'target' => 'helpdesk/debitor-controlling-dashboard-data'],
['path' => 'helpdesk/team', 'target' => 'helpdesk/team'],
['path' => 'helpdesk/team-workload-data', 'target' => 'helpdesk/team-workload-data'],
['path' => 'helpdesk/risk-radar', 'target' => 'helpdesk/risk-radar'],
['path' => 'helpdesk/risk-radar-data', 'target' => 'helpdesk/risk-radar-data'],
],
'public_paths' => [],
@@ -80,6 +82,12 @@ return [
'active' => true,
'is_system' => true,
],
[
'key' => 'helpdesk.risk-radar.view',
'description' => 'View helpdesk risk radar dashboard',
'active' => true,
'is_system' => true,
],
],
'search_resources' => [],