Violation Dashboard
The scan results screen shows:- Compliance score: 0-100 (higher is better)
- Violation count by severity:
- CRITICAL: Immediate action required
- HIGH: Significant risk
- MEDIUM: Potential issue
- Violations grouped by:
- Rule (which policy requirement)
- Account (which entity has violations)
- Severity (risk prioritization)
Examine the evidence
The drawer shows:
- Policy excerpt: The exact regulatory clause violated
- Evidence grid: Field values from your data that triggered the rule
- Explanation: A deterministic summary of which conditions matched
- Confidence score: 0-1 scale indicating rule quality and historical precision
Make a decision
Two options:
- Approve: Confirms this is a true violation that requires action
- Dismiss: Marks this as a false positive (incorrect detection)
Evidence Components
Policy Excerpt
The exact text from your policy document or prebuilt framework that this violation references:“Transactions exceeding $10,000 must be reported via Currency Transaction Report (CTR) within 15 days.”Source: 31 CFR § 1010.311
Evidence Grid
Matched field values from the violating record:| Field | Value |
|---|---|
| Account | ACC-501234 |
| Amount | $12,500.00 |
| Transaction Type | WIRE |
| Timestamp | 2026-02-15 14:32:00 |
Explanation
Deterministic text generated from templates (no LLM calls during scanning):“This record violates the CTR threshold rule because the transaction amount (10,000 threshold AND the transaction type is WIRE.”
Explanations are reproducible — the same violation will always generate the same explanation text.
Review Actions
Approve (True Positive)
When you approve a violation:- Violation status changes to
approved - Rule’s
approved_countincrements by 1 - Compliance score is recalculated (may decrease slightly)
- Score history logs the approval
- Bayesian precision updates:
precision = (1 + TP) / (2 + TP + FP)
Dismiss (False Positive)
When you dismiss a violation:- Violation status changes to
false_positive - Rule’s
false_positive_countincrements by 1 - Compliance score is recalculated (increases)
- Score history logs the dismissal
- Bayesian precision decreases for this rule
Bayesian Feedback Loop
Yggdrasil uses a Bayesian precision model to improve rule accuracy over time.How It Works
Each rule tracks:approved_count: Number of confirmed true positives (TP)false_positive_count: Number of dismissed violations (FP)
Example Evolution
Initial state: Rule has no review history- TP = 0, FP = 0
- Precision = (1 + 0) / (2 + 0 + 0) = 0.5 (neutral)
- TP = 5, FP = 0
- Precision = (1 + 5) / (2 + 5 + 0) = 0.857 (high confidence)
- TP = 5, FP = 3
- Precision = (1 + 5) / (2 + 5 + 3) = 0.6 (reduced confidence)
Your reviews make the system smarter. Rules that consistently produce false positives will lose confidence, while accurate rules gain it.
Score History Tracking
Every review action updates the scan’sscore_history array:
Case Grouping
View violations grouped by account/entity:Bulk Actions
While reviewing:- Filter by severity (CRITICAL, HIGH, MEDIUM)
- Filter by rule
- Filter by account
- Sort by confidence score
- Sort by amount
Bulk approve/dismiss is not currently supported — each violation requires individual review for auditability.
Audit Trail
Every review is tracked:reviewed_by: User ID from Supabase Authreviewed_at: Timestampreview_note: Optional commentstatus:pending→approved|false_positive
Next Steps
After reviewing violations:- Generate remediation steps for approved violations → Remediation
- Export the compliance report with review notes
- Run a new scan to verify fixes