+ +
+ {{ screenReaderAnnouncement() }} +
+ + + + + +
+
+

Exception Center

+

Manage policy exceptions with workflow approvals

+
+ +
+ + +
+
+ + +
+
+ {{ s.total }} + Total +
+
+ {{ s.pendingApproval }} + Pending Review +
+
+ {{ s.expiringWithin7Days }} + Expiring Soon +
+
+ {{ s.byStatus['approved'] ?? 0 }} + Approved +
+
+ + +
+ {{ msg }} +
+ + +
+ +
+ + +
+ + + + + +
+
+ + +
+ +
+ + +
+
+
+ + +
+ + Loading exceptions... +
+ + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + +
+ Name {{ getSortIcon('name') }} + + Status {{ getSortIcon('status') }} + + Severity {{ getSortIcon('severity') }} + ScopeTimebox + Created {{ getSortIcon('createdAt') }} + Actions
+
+ {{ exc.displayName || exc.name }} + {{ exc.exceptionId }} +
+
+ + {{ statusLabels[exc.status] }} + + + + {{ severityLabels[exc.severity] }} + + + {{ exc.scope.type }} + +
+ {{ formatDate(exc.timebox.startDate) }} + - + + {{ formatDate(exc.timebox.endDate) }} + +
+
+ {{ formatDate(exc.createdAt) }} + +
+ + +
+
+ +
+

No exceptions found matching your filters.

+
+
+ + +
+
+
+

{{ column.label }}

+ {{ column.count }} +
+ +
+
+
+ + {{ severityLabels[exc.severity] }} + + + Expiring soon + +
+ +

{{ exc.displayName || exc.name }}

+ +

+ {{ exc.description | slice:0:80 }}{{ exc.description.length > 80 ? '...' : '' }} +

+ +
+ {{ exc.scope.type }} + {{ formatDate(exc.createdAt) }} +
+ +
+ +
+
+ +
+ No exceptions +
+
+
+
+
+ + +
+
+

{{ exc.displayName || exc.name }}

+ +
+ +
+
+

Status

+ + {{ statusLabels[exc.status] }} + +
+ +
+

Severity

+ + {{ severityLabels[exc.severity] }} + +
+ +
+

Description

+

{{ exc.description || 'No description provided.' }}

+
+ +
+

Scope

+
+
+ Type: + {{ exc.scope.type }} +
+
+ Vulnerabilities: + {{ exc.scope.vulnIds.join(', ') }} +
+
+ Components: + {{ exc.scope.componentPurls.join(', ') }} +
+
+ Assets: + {{ exc.scope.assetIds.join(', ') }} +
+
+
+ +
+

Justification

+

{{ exc.justification.text }}

+ + Template: {{ exc.justification.template }} + +
+ +
+

Timebox

+
+
+ Start: + {{ formatDateTime(exc.timebox.startDate) }} +
+
+ End: + + {{ formatDateTime(exc.timebox.endDate) }} + +
+
+ Auto-renew: + Yes ({{ exc.timebox.renewalCount || 0 }}/{{ exc.timebox.maxRenewals || 'unlimited' }}) +
+
+
+ +
+

Approvals

+
+
+
+ {{ approval.approvedBy }} + {{ formatDateTime(approval.approvedAt) }} +
+

{{ approval.comment }}

+
+
+
+ +
+

Metadata

+ +
+ + +
+ +
+ + +
+

Audit Trail

+
+
+
+ {{ entry.action }} + {{ formatDateTime(entry.timestamp) }} +
+
by {{ entry.actor }}
+
+ {{ statusLabels[entry.previousStatus] }} → {{ statusLabels[entry.newStatus] }} +
+
+
+
+ +
+

No audit entries recorded.

+
+
+ + +
+ + +
+
+ + +
+
+
+ +
+
+