{{ live ? 'Live' : 'Paused' }} Updated {{ lastUpdated | date: 'HH:mm:ss' }}
cloud_off Could not reach the alert feed. Retrying automatically.
Period @for (m of periodModes; track m.key) { } @if (periodMode === 'day') { } @if (periodMode === 'week') { } @if (periodMode === 'month') { } @if (periodMode === 'year') { } @if (periodLabel) { {{ periodLabel }} }
Status
Top rules @for (n of topRuleOptions; track n) { } @if (topRules !== null) { {{ distinctRuleCount }} rule{{ distinctRuleCount === 1 ? '' : 's' }} in view }
@if (ruleFrequency.length > 1) {
@for (r of ruleFrequency; track r.code) { {{ r.code }} {{ r.count }} }
}
@if (selectedCount > 0) {
{{ selectedCount }} selected Low / medium only — a transaction that tripped a high-severity rule is decided on its own.
}
@if (selectableRows.length) { } @if (isSelectable(alert)) { } @else { — } Raised On {{ alert.raisedOnDate ? (alert.raisedOnDate | date: 'dd MMM yyyy, HH:mm') : '—' }} NEW Transaction {{ alert.transactionType }} #{{ alert.transactionId }} Client
{{ alert.clientDisplayName || '—' }} ID {{ alert.clientId }}
Rule Triggered
{{ alert.ruleCode }} {{ alert.ruleDescription }} @if (matchedRuleCount(alert) > 1) { }
@if (isExpanded(alert)) {
Rules matched by {{ alert.transactionType | lowercase }} #{{ alert.transactionId }} — {{ amount(alert) }} @if (selectableRulesOf(alert).length > 1) { }
@for (rule of matchedRules(alert); track rule.ruleCode) {
@if (isRuleSelectable(rule)) { } @else if (!isGradedRule(rule)) { gavel } @else { {{ !rule.directlyDecided ? 'remove_circle_outline' : rule.disposition === 'ESCALATE' ? 'report' : 'verified' }} } {{ severityLabel(rule.riskCategory) }}
{{ rule.ruleCode }} @if (rule.governing) { governing } @if (!isGradedRule(rule)) { → CTR filing } @if (rule.disposition) { {{ rule.directlyDecided ? ruleDispositionLabel(rule) : 'Closed with case' }} } {{ rule.ruleDescription }}
} @if (selectedRuleCount > 0) {
{{ selectedRuleCount }} rule{{ selectedRuleCount > 1 ? 's' : '' }} selected
}
@if (isHighSeverity(alert)) { A high-severity rule fired, so this transaction is decided on its own rather than in a batch. } @else if (!alert.highestSeverity) { A statutory return rather than a graded suspicion — decided on its own. } @else { Every rule here is low or medium, so this transaction can be decided together with others. }
}
Amount {{ amount(alert) }} Status {{ alert.status }} Action
@if (heldByAnother(alert)) {
lock with {{ heldBy(alert) }}
} @else {
{{ alert.reviewedByUsername ? 'by ' + alert.reviewedByUsername : 'Reviewed' }} description → STR
}
{{ activeStatus || activeSeverity !== null ? 'filter_alt_off' : 'verified_user' }} No transactions flagged. The feed updates automatically as the engine raises alerts. No alerts match the filters in force.