diff --git a/agentic_ai/workflow/fraud_detection/backend.py b/agentic_ai/workflow/fraud_detection/backend.py
index f384ae54e..e15446a07 100644
--- a/agentic_ai/workflow/fraud_detection/backend.py
+++ b/agentic_ai/workflow/fraud_detection/backend.py
@@ -204,6 +204,14 @@ async def broadcast(self, message: dict):
timestamp=datetime.now().isoformat(),
severity="high",
),
+ "ALERT-004": SuspiciousActivityAlert(
+ alert_id="ALERT-004",
+ customer_id=4,
+ alert_type="routine_check",
+ description="Routine security check - password changed from usual device",
+ timestamp=datetime.now().isoformat(),
+ severity="low",
+ ),
}
diff --git a/agentic_ai/workflow/fraud_detection/ui/src/App.jsx b/agentic_ai/workflow/fraud_detection/ui/src/App.jsx
index 6144d9d68..c1aed94c1 100644
--- a/agentic_ai/workflow/fraud_detection/ui/src/App.jsx
+++ b/agentic_ai/workflow/fraud_detection/ui/src/App.jsx
@@ -68,8 +68,14 @@ function App() {
try {
const event = lastMessage;
- // Add to event log
- setEvents((prev) => [...prev, event]);
+ // Add to event log - prevent duplicates by checking timestamp + type + executor_id
+ setEvents((prev) => {
+ const eventKey = `${event.timestamp}-${event.type || event.event_type}-${event.executor_id || ''}`;
+ const isDuplicate = prev.some(
+ (e) => `${e.timestamp}-${e.type || e.event_type}-${e.executor_id || ''}` === eventKey
+ );
+ return isDuplicate ? prev : [...prev, event];
+ });
// Handle workflow initialization
if (event.type === 'workflow_initializing') {
@@ -212,7 +218,7 @@ function App() {
{/* Right Column - Event Log */}
-
+
diff --git a/agentic_ai/workflow/fraud_detection/ui/src/components/AnalystDecisionPanel.jsx b/agentic_ai/workflow/fraud_detection/ui/src/components/AnalystDecisionPanel.jsx
index 0c6ce849d..1ace37d1a 100644
--- a/agentic_ai/workflow/fraud_detection/ui/src/components/AnalystDecisionPanel.jsx
+++ b/agentic_ai/workflow/fraud_detection/ui/src/components/AnalystDecisionPanel.jsx
@@ -58,10 +58,10 @@ function AnalystDecisionPanel({ decision, onSubmit }) {
-
-
- Analyst Review Required
+
+
+ Analyst Review Required
-
-
+
+
Human Decision Needed
-
- The workflow is paused pending your review
-
-
+
{/* Risk Assessment */}
-
+
Risk Assessment
-
- Risk Score:
+
+ Risk Score:
-
- Alert ID:
-
+
+ Alert ID:
+
{/* Reasoning */}
{decision.data?.reasoning && (
-
+
AI Analysis
-
-
+
+
{decision.data.reasoning}
@@ -124,7 +122,7 @@ function AnalystDecisionPanel({ decision, onSubmit }) {
{/* Recommended Action */}
-
+
Recommended Action
opt.value === decision.data?.recommended_action)
?.color || 'default'
}
- size="medium"
+ size="small"
+ sx={{ height: 20, fontSize: '0.7rem' }}
/>
-
+
{/* Decision Form */}
-
- Your Decision
+
+ Your Decision