Rohit Patil commited on
Commit
09a4647
·
1 Parent(s): 9b4162d

fix(dashboard): resolve action_taken from audit log, improve UI

Browse files

cases_demo.json stores action_taken as null for all cases; the real
Razorpay data (order_id, notes_verified, tool, timestamp) only lives
in audit_log.jsonl. Dashboard and detail pages were reading only from
the cases JSON so Order ID, Notes Verified, Tool Used and Timestamp
always rendered as dashes.

Changes:
- _build_dashboard(): accept audit_map, fall back to audit record for
action_taken when case JSON has null; verified column now shows
coloured Yes/No instead of plain dashes
- dashboard(): build audit_map from audit_log and pass to _build_dashboard
- case_detail_html(): fall back to audit record for action_taken,
llm_narrative and llm_confidence_statement when case JSON has null
- Fixed broken footer anchor (was HTML-escaped, rendered as literal text)
- Case ID cells in table are now proper links; risk score bold; order_id
in monospace font

Files changed (3) hide show
  1. api/main.py +47 -17
  2. audit/audit_log.jsonl +28 -0
  3. data/synthetic/cases_demo.json +50 -50
api/main.py CHANGED
@@ -70,16 +70,26 @@ def health():
70
  def get_cases():
71
  """Return all cases as a JSON list."""
72
  cases = _load_cases()
 
 
 
 
 
 
 
73
  # Return a summary view (without full narrative for list)
74
  summary = []
75
  for c in cases:
 
 
 
76
  summary.append({
77
- "case_id": c.get("case_id"),
78
  "cluster_id": c.get("cluster_id"),
79
  "cluster_size": len(c.get("customer_ids", [])),
80
  "risk_score": round(c.get("risk_probability", 0), 4),
81
  "policy_decision": c.get("policy_decision"),
82
- "action_taken": bool(c.get("action_taken") and c["action_taken"].get("order_id")),
83
  "timestamp": c.get("timestamp"),
84
  })
85
  return summary
@@ -120,7 +130,9 @@ def _decision_badge(decision: str) -> str:
120
  )
121
 
122
 
123
- def _build_dashboard(cases: list) -> str:
 
 
124
  rows = ""
125
  for c in cases:
126
  decision = c.get("policy_decision", "")
@@ -129,18 +141,25 @@ def _build_dashboard(cases: list) -> str:
129
  cluster = c.get("cluster_id", "")
130
  case_id = c.get("case_id", "")
131
  size = len(c.get("customer_ids", []))
132
- action = c.get("action_taken") or {}
 
133
  order_id = action.get("order_id") or "—"
134
- verified = "Yes" if action.get("notes_verified") else "—"
 
 
 
 
 
 
135
 
136
  rows += (
137
  f'<tr onclick="window.location=\'/cases/{case_id}/detail\'" style="cursor:pointer">'
138
- f'<td>{case_id}</td>'
139
- f'<td>{cluster}</td>'
140
  f'<td style="text-align:center">{size}</td>'
141
- f'<td style="text-align:right">{risk}%</td>'
142
  f'<td>{badge}</td>'
143
- f'<td style="font-size:11px;color:#57606a">{order_id}</td>'
144
  f'<td style="text-align:center">{verified}</td>'
145
  f'</tr>\n'
146
  )
@@ -229,7 +248,7 @@ def _build_dashboard(cases: list) -> str:
229
  Click any row to view the full evidence bundle, LLM narrative, and audit chain.
230
  </p>
231
 
232
- <div class="footer">Built by &lt;a href="https://github.com/rohitdecodes" target="_blank"&gt;Rohit&lt;/a&gt; &middot; RingGuard v3.0</div>
233
  </div>
234
  </body>
235
  </html>"""
@@ -238,8 +257,14 @@ def _build_dashboard(cases: list) -> str:
238
  @app.get("/", response_class=HTMLResponse)
239
  def dashboard():
240
  """Serve the HTML dashboard."""
241
- cases = _load_cases()
242
- html = _build_dashboard(cases)
 
 
 
 
 
 
243
  return HTMLResponse(content=html)
244
 
245
 
@@ -345,18 +370,23 @@ def case_detail_html(case_id: str):
345
  decision = case.get("policy_decision", "")
346
  badge = _decision_badge(decision)
347
  risk = round(case.get("risk_probability", 0) * 100, 2)
348
- narrative = case.get("llm_narrative") or "<em>No narrative (log_only case)</em>"
349
- confidence = case.get("llm_confidence_statement") or "—"
 
 
 
 
350
  members = ", ".join(case.get("customer_ids", []))
351
 
352
- action = case.get("action_taken") or {}
 
353
  order_id = action.get("order_id") or "—"
354
- verified = "Yes" if action.get("notes_verified") else "—"
355
  tool_used = action.get("tool") or "—"
356
  timestamp = action.get("timestamp") or "—"
357
 
358
  # Pull graph score inputs from audit record for the cluster diagram
359
- audit_rec = audit_records[0] if audit_records else {}
360
  score_inputs = audit_rec.get("graph_score_inputs", {})
361
  strong_links = int(score_inputs.get("strong_link_count", case.get("strong_link_count", 0)))
362
  weak_links = int(score_inputs.get("weak_link_count", case.get("weak_link_count", 0)))
 
70
  def get_cases():
71
  """Return all cases as a JSON list."""
72
  cases = _load_cases()
73
+ audit_all = _load_audit()
74
+ # Build a lookup: case_id -> first audit record
75
+ audit_map = {}
76
+ for r in audit_all:
77
+ cid = r.get("case_id")
78
+ if cid and cid not in audit_map:
79
+ audit_map[cid] = r
80
  # Return a summary view (without full narrative for list)
81
  summary = []
82
  for c in cases:
83
+ case_id = c.get("case_id")
84
+ # Prefer action_taken from audit record when case has null
85
+ action = c.get("action_taken") or audit_map.get(case_id, {}).get("action_taken") or {}
86
  summary.append({
87
+ "case_id": case_id,
88
  "cluster_id": c.get("cluster_id"),
89
  "cluster_size": len(c.get("customer_ids", [])),
90
  "risk_score": round(c.get("risk_probability", 0), 4),
91
  "policy_decision": c.get("policy_decision"),
92
+ "action_taken": bool(action.get("order_id")),
93
  "timestamp": c.get("timestamp"),
94
  })
95
  return summary
 
130
  )
131
 
132
 
133
+ def _build_dashboard(cases: list, audit_map: dict = None) -> str:
134
+ if audit_map is None:
135
+ audit_map = {}
136
  rows = ""
137
  for c in cases:
138
  decision = c.get("policy_decision", "")
 
141
  cluster = c.get("cluster_id", "")
142
  case_id = c.get("case_id", "")
143
  size = len(c.get("customer_ids", []))
144
+ # Prefer action_taken from audit record when case JSON has null
145
+ action = c.get("action_taken") or audit_map.get(case_id, {}).get("action_taken") or {}
146
  order_id = action.get("order_id") or "—"
147
+ verified_val = action.get("notes_verified")
148
+ if verified_val is True:
149
+ verified = '<span style="color:#27ae60;font-weight:600">✓ Yes</span>'
150
+ elif action:
151
+ verified = '<span style="color:#c0392b">No</span>'
152
+ else:
153
+ verified = "—"
154
 
155
  rows += (
156
  f'<tr onclick="window.location=\'/cases/{case_id}/detail\'" style="cursor:pointer">'
157
+ f'<td><a href="/cases/{case_id}/detail" style="color:#1f2328;font-weight:500">{case_id}</a></td>'
158
+ f'<td style="color:#57606a">{cluster}</td>'
159
  f'<td style="text-align:center">{size}</td>'
160
+ f'<td style="text-align:right;font-weight:600">{risk}%</td>'
161
  f'<td>{badge}</td>'
162
+ f'<td style="font-size:11px;font-family:monospace;color:#57606a">{order_id}</td>'
163
  f'<td style="text-align:center">{verified}</td>'
164
  f'</tr>\n'
165
  )
 
248
  Click any row to view the full evidence bundle, LLM narrative, and audit chain.
249
  </p>
250
 
251
+ <div class="footer">Built by <a href="https://github.com/rohitdecodes" target="_blank">Rohit</a> &middot; RingGuard v3.0</div>
252
  </div>
253
  </body>
254
  </html>"""
 
257
  @app.get("/", response_class=HTMLResponse)
258
  def dashboard():
259
  """Serve the HTML dashboard."""
260
+ cases = _load_cases()
261
+ audit_all = _load_audit()
262
+ audit_map = {}
263
+ for r in audit_all:
264
+ cid = r.get("case_id")
265
+ if cid and cid not in audit_map:
266
+ audit_map[cid] = r
267
+ html = _build_dashboard(cases, audit_map)
268
  return HTMLResponse(content=html)
269
 
270
 
 
370
  decision = case.get("policy_decision", "")
371
  badge = _decision_badge(decision)
372
  risk = round(case.get("risk_probability", 0) * 100, 2)
373
+ # Prefer audit narrative/confidence when case JSON has null
374
+ audit_rec0 = audit_records[0] if audit_records else {}
375
+ narrative = (case.get("llm_narrative") or audit_rec0.get("llm_narrative")
376
+ or "<em>No narrative available for this case.</em>")
377
+ confidence = (case.get("llm_confidence_statement") or
378
+ audit_rec0.get("llm_confidence_statement") or "—")
379
  members = ", ".join(case.get("customer_ids", []))
380
 
381
+ # Prefer action_taken from audit record when case JSON has null
382
+ action = case.get("action_taken") or audit_rec0.get("action_taken") or {}
383
  order_id = action.get("order_id") or "—"
384
+ verified = "Yes" if action.get("notes_verified") else "No"
385
  tool_used = action.get("tool") or "—"
386
  timestamp = action.get("timestamp") or "—"
387
 
388
  # Pull graph score inputs from audit record for the cluster diagram
389
+ audit_rec = audit_rec0
390
  score_inputs = audit_rec.get("graph_score_inputs", {})
391
  strong_links = int(score_inputs.get("strong_link_count", case.get("strong_link_count", 0)))
392
  weak_links = int(score_inputs.get("weak_link_count", case.get("weak_link_count", 0)))
audit/audit_log.jsonl CHANGED
@@ -54,3 +54,31 @@
54
  {"case_id": "CAND26", "timestamp": "2026-08-22T05:11:19.291421+00:00", "cluster_members": ["CUST0045", "CUST0046", "CUST0047", "CUST0048"], "evidence_bundle": {"cluster_id": "CAND26", "size": 4, "customer_ids": ["CUST0045", "CUST0046", "CUST0047", "CUST0048"], "formation_type": null}, "graph_score_inputs": {"size": 4, "strong_link_count": 0, "weak_link_count": 6, "strong_link_density": 0.0, "has_same_contact_edge": 0, "order_count": 11, "total_amount": 25534, "avg_order_amount": 2321.2727272727275, "return_rate": 0.36363636363636365, "chargeback_rate": 0.0, "shared_coupon_count": 0, "time_span_days": 157.74650462962964, "order_velocity": 0.06973213147148151, "formation_type_strong": 0}, "lightgbm_probability": 0.0035484719416527992, "llm_narrative": null, "llm_confidence_statement": null, "policy_decision": "log_only", "action_taken": null, "human_reviewer": null, "outcome": null, "reason_if_not_auto_actioned": "risk=0.0035 < 0.50 threshold — insufficient signal for action"}
55
  {"case_id": "CAND27", "timestamp": "2026-08-22T05:11:19.313676+00:00", "cluster_members": ["CUST0049", "CUST0050", "CUST0051", "CUST0052"], "evidence_bundle": {"cluster_id": "CAND27", "size": 4, "customer_ids": ["CUST0049", "CUST0050", "CUST0051", "CUST0052"], "formation_type": null}, "graph_score_inputs": {"size": 4, "strong_link_count": 0, "weak_link_count": 6, "strong_link_density": 0.0, "has_same_contact_edge": 0, "order_count": 8, "total_amount": 20046, "avg_order_amount": 2505.75, "return_rate": 0.25, "chargeback_rate": 0.0, "shared_coupon_count": 0, "time_span_days": 173.32074074074075, "order_velocity": 0.046157199454661235, "formation_type_strong": 0}, "lightgbm_probability": 0.0031715868230902835, "llm_narrative": null, "llm_confidence_statement": null, "policy_decision": "log_only", "action_taken": null, "human_reviewer": null, "outcome": null, "reason_if_not_auto_actioned": "risk=0.0032 < 0.50 threshold — insufficient signal for action"}
56
  {"case_id": "CAND28", "timestamp": "2026-08-22T05:11:19.325432+00:00", "cluster_members": ["CUST0053", "CUST0054", "CUST0055", "CUST0056"], "evidence_bundle": {"cluster_id": "CAND28", "size": 4, "customer_ids": ["CUST0053", "CUST0054", "CUST0055", "CUST0056"], "formation_type": null}, "graph_score_inputs": {"size": 4, "strong_link_count": 0, "weak_link_count": 6, "strong_link_density": 0.0, "has_same_contact_edge": 0, "order_count": 9, "total_amount": 26589, "avg_order_amount": 2954.3333333333335, "return_rate": 0.6666666666666666, "chargeback_rate": 0.0, "shared_coupon_count": 0, "time_span_days": 146.59680555555556, "order_velocity": 0.06139287937341366, "formation_type_strong": 0}, "lightgbm_probability": 0.003058997865465553, "llm_narrative": null, "llm_confidence_statement": null, "policy_decision": "log_only", "action_taken": null, "human_reviewer": null, "outcome": null, "reason_if_not_auto_actioned": "risk=0.0031 < 0.50 threshold — insufficient signal for action"}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
54
  {"case_id": "CAND26", "timestamp": "2026-08-22T05:11:19.291421+00:00", "cluster_members": ["CUST0045", "CUST0046", "CUST0047", "CUST0048"], "evidence_bundle": {"cluster_id": "CAND26", "size": 4, "customer_ids": ["CUST0045", "CUST0046", "CUST0047", "CUST0048"], "formation_type": null}, "graph_score_inputs": {"size": 4, "strong_link_count": 0, "weak_link_count": 6, "strong_link_density": 0.0, "has_same_contact_edge": 0, "order_count": 11, "total_amount": 25534, "avg_order_amount": 2321.2727272727275, "return_rate": 0.36363636363636365, "chargeback_rate": 0.0, "shared_coupon_count": 0, "time_span_days": 157.74650462962964, "order_velocity": 0.06973213147148151, "formation_type_strong": 0}, "lightgbm_probability": 0.0035484719416527992, "llm_narrative": null, "llm_confidence_statement": null, "policy_decision": "log_only", "action_taken": null, "human_reviewer": null, "outcome": null, "reason_if_not_auto_actioned": "risk=0.0035 < 0.50 threshold — insufficient signal for action"}
55
  {"case_id": "CAND27", "timestamp": "2026-08-22T05:11:19.313676+00:00", "cluster_members": ["CUST0049", "CUST0050", "CUST0051", "CUST0052"], "evidence_bundle": {"cluster_id": "CAND27", "size": 4, "customer_ids": ["CUST0049", "CUST0050", "CUST0051", "CUST0052"], "formation_type": null}, "graph_score_inputs": {"size": 4, "strong_link_count": 0, "weak_link_count": 6, "strong_link_density": 0.0, "has_same_contact_edge": 0, "order_count": 8, "total_amount": 20046, "avg_order_amount": 2505.75, "return_rate": 0.25, "chargeback_rate": 0.0, "shared_coupon_count": 0, "time_span_days": 173.32074074074075, "order_velocity": 0.046157199454661235, "formation_type_strong": 0}, "lightgbm_probability": 0.0031715868230902835, "llm_narrative": null, "llm_confidence_statement": null, "policy_decision": "log_only", "action_taken": null, "human_reviewer": null, "outcome": null, "reason_if_not_auto_actioned": "risk=0.0032 < 0.50 threshold — insufficient signal for action"}
56
  {"case_id": "CAND28", "timestamp": "2026-08-22T05:11:19.325432+00:00", "cluster_members": ["CUST0053", "CUST0054", "CUST0055", "CUST0056"], "evidence_bundle": {"cluster_id": "CAND28", "size": 4, "customer_ids": ["CUST0053", "CUST0054", "CUST0055", "CUST0056"], "formation_type": null}, "graph_score_inputs": {"size": 4, "strong_link_count": 0, "weak_link_count": 6, "strong_link_density": 0.0, "has_same_contact_edge": 0, "order_count": 9, "total_amount": 26589, "avg_order_amount": 2954.3333333333335, "return_rate": 0.6666666666666666, "chargeback_rate": 0.0, "shared_coupon_count": 0, "time_span_days": 146.59680555555556, "order_velocity": 0.06139287937341366, "formation_type_strong": 0}, "lightgbm_probability": 0.003058997865465553, "llm_narrative": null, "llm_confidence_statement": null, "policy_decision": "log_only", "action_taken": null, "human_reviewer": null, "outcome": null, "reason_if_not_auto_actioned": "risk=0.0031 < 0.50 threshold — insufficient signal for action"}
57
+ {"case_id": "CAND01", "timestamp": "2026-08-23T03:31:13.685527+00:00", "cluster_members": ["CUST0014", "CUST0015", "CUST0016", "CUST0017", "CUST0018"], "evidence_bundle": {"cluster_id": "CAND01", "size": 5, "customer_ids": ["CUST0014", "CUST0015", "CUST0016", "CUST0017", "CUST0018"], "formation_type": null}, "graph_score_inputs": {"size": 5, "strong_link_count": 10, "weak_link_count": 0, "strong_link_density": 1.0, "has_same_contact_edge": 0, "order_count": 16, "total_amount": 62087, "avg_order_amount": 3880.4375, "return_rate": 0.5, "chargeback_rate": 0.125, "shared_coupon_count": 1, "time_span_days": 158.5827314814815, "order_velocity": 0.10089370923635782, "formation_type_strong": 1}, "lightgbm_probability": 0.9955003588432927, "llm_narrative": "The five‑customer cluster is classified as a strong_anchored formation with ten strong links and no weak links. It exhibits a 50% return rate, a 12.5% chargeback rate, and the members shared one coupon while generating a total transaction amount of $62,087. The calculated risk probability of 99.55% triggered an escalation decision.", "llm_confidence_statement": "The assessment is made with very high confidence based on the presented evidence.", "policy_decision": "escalate", "action_taken": null, "human_reviewer": null, "outcome": null, "reason_if_not_auto_actioned": "risk=0.9955 >= 0.85 but total_amount=₹62087 > ₹25,000 auto_hold cap"}
58
+ {"case_id": "CAND02", "timestamp": "2026-08-23T03:31:17.944236+00:00", "cluster_members": ["CUST0019", "CUST0020", "CUST0021", "CUST0022", "CUST0023"], "evidence_bundle": {"cluster_id": "CAND02", "size": 5, "customer_ids": ["CUST0019", "CUST0020", "CUST0021", "CUST0022", "CUST0023"], "formation_type": null}, "graph_score_inputs": {"size": 5, "strong_link_count": 10, "weak_link_count": 0, "strong_link_density": 1.0, "has_same_contact_edge": 0, "order_count": 18, "total_amount": 70841, "avg_order_amount": 3935.6111111111113, "return_rate": 0.3333333333333333, "chargeback_rate": 0.05555555555555555, "shared_coupon_count": 0, "time_span_days": 144.96715277777778, "order_velocity": 0.12416605869049836, "formation_type_strong": 1}, "lightgbm_probability": 0.9940850384979173, "llm_narrative": "A cluster of five customers (CUST0019, CUST0020, CUST0021, CUST0022, CUST0023) is connected by ten strong links with no weak links, forming a strong_anchored network. The group generated a total transaction amount of 70,841, exhibited a return rate of 33.33% and a chargeback rate of 5.56%, and no shared coupons were used. The risk probability for this cluster is 0.994, leading to an escalation decision.", "llm_confidence_statement": "The assessment is made with very high confidence, reflected by a risk probability of approximately 99.4%.", "policy_decision": "escalate", "action_taken": null, "human_reviewer": null, "outcome": null, "reason_if_not_auto_actioned": "risk=0.9941 >= 0.85 but total_amount=₹70841 > ₹25,000 auto_hold cap"}
59
+ {"case_id": "CAND03", "timestamp": "2026-08-23T03:31:22.227721+00:00", "cluster_members": ["CUST0004", "CUST0005", "CUST0006", "CUST0007", "CUST0008"], "evidence_bundle": {"cluster_id": "CAND03", "size": 5, "customer_ids": ["CUST0004", "CUST0005", "CUST0006", "CUST0007", "CUST0008"], "formation_type": null}, "graph_score_inputs": {"size": 5, "strong_link_count": 7, "weak_link_count": 0, "strong_link_density": 0.7, "has_same_contact_edge": 1, "order_count": 16, "total_amount": 63837, "avg_order_amount": 3989.8125, "return_rate": 0.375, "chargeback_rate": 0.0625, "shared_coupon_count": 0, "time_span_days": 173.6175462962963, "order_velocity": 0.09215658406261741, "formation_type_strong": 1}, "lightgbm_probability": 0.9959231873282086, "llm_narrative": "The five customers (CUST0004‑CUST0008) form a strong‑anchored cluster with seven strong links and no weak links, collectively transacting $63,837. Their return rate of 37.5% and chargeback rate of 6.25% are elevated, contributing to a risk probability of 99.6%.", "llm_confidence_statement": "The analysis is made with very high confidence.", "policy_decision": "escalate", "action_taken": null, "human_reviewer": null, "outcome": null, "reason_if_not_auto_actioned": "risk=0.9959 >= 0.85 but total_amount=₹63837 > ₹25,000 auto_hold cap"}
60
+ {"case_id": "CAND04", "timestamp": "2026-08-23T03:31:26.525006+00:00", "cluster_members": ["CUST0024", "CUST0025", "CUST0026", "CUST0027", "CUST0028", "CUST0029"], "evidence_bundle": {"cluster_id": "CAND04", "size": 6, "customer_ids": ["CUST0024", "CUST0025", "CUST0026", "CUST0027", "CUST0028", "CUST0029"], "formation_type": null}, "graph_score_inputs": {"size": 6, "strong_link_count": 15, "weak_link_count": 0, "strong_link_density": 1.0, "has_same_contact_edge": 0, "order_count": 20, "total_amount": 81019, "avg_order_amount": 4050.95, "return_rate": 0.55, "chargeback_rate": 0.05, "shared_coupon_count": 0, "time_span_days": 174.1008564814815, "order_velocity": 0.11487594262425316, "formation_type_strong": 1}, "lightgbm_probability": 0.9913203009684713, "llm_narrative": "The six customers (CUST0024‑CUST0029) form a strong_anchored cluster with 15 strong links and no weak links, indicating tightly connected activity. The group exhibits a high return rate of 55% and a chargeback rate of 5% across a total transaction volume of $81,019. Combined with a risk probability of 99.13%, these metrics point to coordinated fraudulent behavior.", "llm_confidence_statement": "We are highly confident in this assessment.", "policy_decision": "escalate", "action_taken": null, "human_reviewer": null, "outcome": null, "reason_if_not_auto_actioned": "risk=0.9913 >= 0.85 but total_amount=₹81019 > ₹25,000 auto_hold cap"}
61
+ {"case_id": "CAND05", "timestamp": "2026-08-23T03:31:30.743055+00:00", "cluster_members": ["CUST0036", "CUST0037", "CUST0038", "CUST0039", "CUST0040"], "evidence_bundle": {"cluster_id": "CAND05", "size": 5, "customer_ids": ["CUST0036", "CUST0037", "CUST0038", "CUST0039", "CUST0040"], "formation_type": null}, "graph_score_inputs": {"size": 5, "strong_link_count": 10, "weak_link_count": 0, "strong_link_density": 1.0, "has_same_contact_edge": 0, "order_count": 15, "total_amount": 62270, "avg_order_amount": 4151.333333333333, "return_rate": 0.26666666666666666, "chargeback_rate": 0.2, "shared_coupon_count": 0, "time_span_days": 145.8427199074074, "order_velocity": 0.10285052287507526, "formation_type_strong": 1}, "lightgbm_probability": 0.9969377389203431, "llm_narrative": "The flagged cluster consists of five customers (CUST0036‑CUST0040) linked by ten strong connections in a strong‑anchored formation. The group exhibits a 26.7% return rate and a 20% chargeback rate on a total transaction volume of $62,270, with no weak links or shared coupons.", "llm_confidence_statement": "Given the 99.7% risk probability and the observed high return and chargeback metrics, confidence in the fraud assessment is very high.", "policy_decision": "escalate", "action_taken": null, "human_reviewer": null, "outcome": null, "reason_if_not_auto_actioned": "risk=0.9969 >= 0.85 but total_amount=₹62270 > ₹25,000 auto_hold cap"}
62
+ {"case_id": "CAND06", "timestamp": "2026-08-23T03:31:35.220961+00:00", "cluster_members": ["CUST0001", "CUST0002", "CUST0003"], "evidence_bundle": {"cluster_id": "CAND06", "size": 3, "customer_ids": ["CUST0001", "CUST0002", "CUST0003"], "formation_type": null}, "graph_score_inputs": {"size": 3, "strong_link_count": 3, "weak_link_count": 0, "strong_link_density": 1.0, "has_same_contact_edge": 0, "order_count": 8, "total_amount": 32897, "avg_order_amount": 4112.125, "return_rate": 0.25, "chargeback_rate": 0.125, "shared_coupon_count": 1, "time_span_days": 127.71112268518519, "order_velocity": 0.06264137243331916, "formation_type_strong": 1}, "lightgbm_probability": 0.9950028638127228, "llm_narrative": "The three flagged customers (CUST0001, CUST0002, CUST0003) form a strong‑anchored cluster with three strong links and no weak links, share one coupon, and together generated $32,897 in transactions. Their combined return rate of 25 % and chargeback rate of 12.5 % further indicate suspicious activity.", "llm_confidence_statement": "The model assigns a risk probability of 99.5 %, indicating very high confidence in the escalation decision.", "policy_decision": "escalate", "action_taken": null, "human_reviewer": null, "outcome": null, "reason_if_not_auto_actioned": "risk=0.9950 >= 0.85 but total_amount=₹32897 > ₹25,000 auto_hold cap"}
63
+ {"case_id": "CAND07", "timestamp": "2026-08-23T03:31:39.409564+00:00", "cluster_members": ["CUST0041", "CUST0042", "CUST0043", "CUST0044"], "evidence_bundle": {"cluster_id": "CAND07", "size": 4, "customer_ids": ["CUST0041", "CUST0042", "CUST0043", "CUST0044"], "formation_type": null}, "graph_score_inputs": {"size": 4, "strong_link_count": 6, "weak_link_count": 0, "strong_link_density": 1.0, "has_same_contact_edge": 0, "order_count": 12, "total_amount": 58186, "avg_order_amount": 4848.833333333333, "return_rate": 0.3333333333333333, "chargeback_rate": 0.16666666666666666, "shared_coupon_count": 0, "time_span_days": 118.78427083333334, "order_velocity": 0.10102347655808104, "formation_type_strong": 1}, "lightgbm_probability": 0.9958773824170732, "llm_narrative": "The four customers (CUST0041‑CUST0044) form a strong‑anchored cluster with six strong links and no weak links, indicating tightly connected activity. Their combined transaction volume is $58,186, with a return rate of 33.3% and a chargeback rate of 16.7%, both elevated for a group of this size. The risk probability is 99.6%, leading to an escalation decision.", "llm_confidence_statement": "The model’s confidence in this high‑risk classification is extremely high.", "policy_decision": "escalate", "action_taken": null, "human_reviewer": null, "outcome": null, "reason_if_not_auto_actioned": "risk=0.9959 >= 0.85 but total_amount=₹58186 > ₹25,000 auto_hold cap"}
64
+ {"case_id": "CAND08", "timestamp": "2026-08-23T03:31:44.120044+00:00", "cluster_members": ["CUST0009", "CUST0010", "CUST0011", "CUST0012", "CUST0013"], "evidence_bundle": {"cluster_id": "CAND08", "size": 5, "customer_ids": ["CUST0009", "CUST0010", "CUST0011", "CUST0012", "CUST0013"], "formation_type": null}, "graph_score_inputs": {"size": 5, "strong_link_count": 10, "weak_link_count": 0, "strong_link_density": 1.0, "has_same_contact_edge": 0, "order_count": 17, "total_amount": 59830, "avg_order_amount": 3519.4117647058824, "return_rate": 0.47058823529411764, "chargeback_rate": 0.17647058823529413, "shared_coupon_count": 0, "time_span_days": 153.46033564814815, "order_velocity": 0.11077781061926893, "formation_type_strong": 1}, "lightgbm_probability": 0.9968053865328341, "llm_narrative": "The five-customer cluster (CUST0009, CUST0010, CUST0011, CUST0012, CUST0013) forms a strong-anchored network with ten strong links and no weak links. It shows a high return rate of 47.06% and a chargeback rate of 17.65% on a total transaction amount of $59,830, resulting in a risk probability of 99.68%.", "llm_confidence_statement": "The model’s confidence in this high-risk assessment is very high.", "policy_decision": "escalate", "action_taken": null, "human_reviewer": null, "outcome": null, "reason_if_not_auto_actioned": "risk=0.9968 >= 0.85 but total_amount=₹59830 > ₹25,000 auto_hold cap"}
65
+ {"case_id": "CAND09", "timestamp": "2026-08-23T03:31:47.138032+00:00", "cluster_members": ["CUST0504", "CUST0505", "CUST0506"], "evidence_bundle": {"cluster_id": "CAND09", "size": 3, "customer_ids": ["CUST0504", "CUST0505", "CUST0506"], "formation_type": null}, "graph_score_inputs": {"size": 3, "strong_link_count": 3, "weak_link_count": 0, "strong_link_density": 1.0, "has_same_contact_edge": 0, "order_count": 9, "total_amount": 10650, "avg_order_amount": 1183.3333333333333, "return_rate": 0.1111111111111111, "chargeback_rate": 0.0, "shared_coupon_count": 0, "time_span_days": 6.166666666666667, "order_velocity": 1.4594594594594594, "formation_type_strong": 1}, "lightgbm_probability": 0.020831929989439942, "llm_narrative": null, "llm_confidence_statement": null, "policy_decision": "log_only", "action_taken": null, "human_reviewer": null, "outcome": null, "reason_if_not_auto_actioned": "risk=0.0208 < 0.50 threshold — insufficient signal for action"}
66
+ {"case_id": "CAND10", "timestamp": "2026-08-23T03:31:49.299130+00:00", "cluster_members": ["CUST0030", "CUST0031", "CUST0032"], "evidence_bundle": {"cluster_id": "CAND10", "size": 3, "customer_ids": ["CUST0030", "CUST0031", "CUST0032"], "formation_type": null}, "graph_score_inputs": {"size": 3, "strong_link_count": 2, "weak_link_count": 0, "strong_link_density": 0.6666666666666666, "has_same_contact_edge": 1, "order_count": 7, "total_amount": 26235, "avg_order_amount": 3747.8571428571427, "return_rate": 0.2857142857142857, "chargeback_rate": 0.2857142857142857, "shared_coupon_count": 0, "time_span_days": 99.31296296296296, "order_velocity": 0.07048425292285891, "formation_type_strong": 1}, "lightgbm_probability": 0.9927212653417073, "llm_narrative": "The three customers (CUST0030, CUST0031, CUST0032) are linked by two strong connections with no weak links, forming a strong‑anchored cluster. Their combined purchase total is $26,235, and both the return rate and chargeback rate are 28.6%, while the model assigns a risk probability of 99.27%.", "llm_confidence_statement": "The assessment is made with high confidence.", "policy_decision": "escalate", "action_taken": null, "human_reviewer": null, "outcome": null, "reason_if_not_auto_actioned": "risk=0.9927 >= 0.85 but total_amount=₹26235 > ₹25,000 auto_hold cap"}
67
+ {"case_id": "CAND11", "timestamp": "2026-08-23T03:31:58.751403+00:00", "cluster_members": ["CUST0033", "CUST0034", "CUST0035"], "evidence_bundle": {"cluster_id": "CAND11", "size": 3, "customer_ids": ["CUST0033", "CUST0034", "CUST0035"], "formation_type": null}, "graph_score_inputs": {"size": 3, "strong_link_count": 3, "weak_link_count": 0, "strong_link_density": 1.0, "has_same_contact_edge": 0, "order_count": 11, "total_amount": 50134, "avg_order_amount": 4557.636363636364, "return_rate": 0.18181818181818182, "chargeback_rate": 0.09090909090909091, "shared_coupon_count": 1, "time_span_days": 170.66708333333332, "order_velocity": 0.06445296764412196, "formation_type_strong": 1}, "lightgbm_probability": 0.9969893801631614, "llm_narrative": "The three customers (CUST0033, CUST0034, CUST0035) are connected by three strong links, forming a strong-anchored cluster. They collectively generated $50,134 in transactions, share one coupon, and exhibit a return rate of 18.2% and a chargeback rate of 9.1%.", "llm_confidence_statement": "The model assigns a 99.7% probability that this cluster is high risk.", "policy_decision": "escalate", "action_taken": null, "human_reviewer": null, "outcome": null, "reason_if_not_auto_actioned": "risk=0.9970 >= 0.85 but total_amount=₹50134 > ₹25,000 auto_hold cap"}
68
+ {"case_id": "CAND12", "timestamp": "2026-08-23T03:32:05.060085+00:00", "cluster_members": ["CUST0501", "CUST0502", "CUST0503"], "evidence_bundle": {"cluster_id": "CAND12", "size": 3, "customer_ids": ["CUST0501", "CUST0502", "CUST0503"], "formation_type": null}, "graph_score_inputs": {"size": 3, "strong_link_count": 3, "weak_link_count": 0, "strong_link_density": 1.0, "has_same_contact_edge": 0, "order_count": 6, "total_amount": 19800, "avg_order_amount": 3300.0, "return_rate": 0.16666666666666666, "chargeback_rate": 0.16666666666666666, "shared_coupon_count": 1, "time_span_days": 3.0625, "order_velocity": 1.9591836734693877, "formation_type_strong": 1}, "lightgbm_probability": 0.9867466290228035, "llm_narrative": "The three customers (CUST0501, CUST0502, CUST0503) are connected by three strong links, forming a strong‑anchored cluster. They share one coupon, have a combined transaction amount of $19,800, and exhibit a 16.7% return and chargeback rate each.", "llm_confidence_statement": "The model assigns a risk probability of 98.7%, indicating very high confidence in the high‑risk classification.", "policy_decision": "auto_hold", "action_taken": null, "human_reviewer": null, "outcome": null, "reason_if_not_auto_actioned": null}
69
+ {"case_id": "CAND13", "timestamp": "2026-08-23T03:32:08.070482+00:00", "cluster_members": ["CUST0001", "CUST0019", "CUST0040", "CUST0126", "CUST0138", "CUST0168", "CUST0211", "CUST0219", "CUST0258", "CUST0281", "CUST0292", "CUST0322", "CUST0325", "CUST0371", "CUST0373", "CUST0400", "CUST0419", "CUST0465"], "evidence_bundle": {"cluster_id": "CAND13", "size": 18, "customer_ids": ["CUST0001", "CUST0019", "CUST0040", "CUST0126", "CUST0138", "CUST0168", "CUST0211", "CUST0219", "CUST0258", "CUST0281", "CUST0292", "CUST0322", "CUST0325", "CUST0371", "CUST0373", "CUST0400", "CUST0419", "CUST0465"], "formation_type": null}, "graph_score_inputs": {"size": 18, "strong_link_count": 0, "weak_link_count": 41, "strong_link_density": 0.0, "has_same_contact_edge": 0, "order_count": 47, "total_amount": 141392, "avg_order_amount": 3008.340425531915, "return_rate": 0.23404255319148937, "chargeback_rate": 0.1276595744680851, "shared_coupon_count": 0, "time_span_days": 166.15458333333333, "order_velocity": 0.28286911535693415, "formation_type_strong": 0}, "lightgbm_probability": 0.00720344453548541, "llm_narrative": null, "llm_confidence_statement": null, "policy_decision": "log_only", "action_taken": null, "human_reviewer": null, "outcome": null, "reason_if_not_auto_actioned": "risk=0.0072 < 0.50 threshold — insufficient signal for action"}
70
+ {"case_id": "CAND14", "timestamp": "2026-08-23T03:32:08.078553+00:00", "cluster_members": ["CUST0002", "CUST0009", "CUST0020", "CUST0041", "CUST0064", "CUST0073", "CUST0074", "CUST0080", "CUST0081", "CUST0086", "CUST0089", "CUST0103", "CUST0162", "CUST0167", "CUST0173", "CUST0181", "CUST0226", "CUST0240", "CUST0253", "CUST0262", "CUST0272", "CUST0286", "CUST0287", "CUST0324", "CUST0331", "CUST0333", "CUST0369", "CUST0392", "CUST0393", "CUST0398", "CUST0406", "CUST0410", "CUST0411", "CUST0413", "CUST0415", "CUST0423", "CUST0446", "CUST0468", "CUST0476", "CUST0478", "CUST0485"], "evidence_bundle": {"cluster_id": "CAND14", "size": 41, "customer_ids": ["CUST0002", "CUST0009", "CUST0020", "CUST0041", "CUST0064", "CUST0073", "CUST0074", "CUST0080", "CUST0081", "CUST0086", "CUST0089", "CUST0103", "CUST0162", "CUST0167", "CUST0173", "CUST0181", "CUST0226", "CUST0240", "CUST0253", "CUST0262", "CUST0272", "CUST0286", "CUST0287", "CUST0324", "CUST0331", "CUST0333", "CUST0369", "CUST0392", "CUST0393", "CUST0398", "CUST0406", "CUST0410", "CUST0411", "CUST0413", "CUST0415", "CUST0423", "CUST0446", "CUST0468", "CUST0476", "CUST0478", "CUST0485"], "formation_type": null}, "graph_score_inputs": {"size": 41, "strong_link_count": 0, "weak_link_count": 146, "strong_link_density": 0.0, "has_same_contact_edge": 0, "order_count": 127, "total_amount": 369082, "avg_order_amount": 2906.1574803149606, "return_rate": 0.15748031496062992, "chargeback_rate": 0.08661417322834646, "shared_coupon_count": 0, "time_span_days": 177.8061226851852, "order_velocity": 0.7142611181329227, "formation_type_strong": 0}, "lightgbm_probability": 0.007559966037372132, "llm_narrative": null, "llm_confidence_statement": null, "policy_decision": "log_only", "action_taken": null, "human_reviewer": null, "outcome": null, "reason_if_not_auto_actioned": "risk=0.0076 < 0.50 threshold — insufficient signal for action"}
71
+ {"case_id": "CAND15", "timestamp": "2026-08-23T03:32:08.090328+00:00", "cluster_members": ["CUST0003", "CUST0012", "CUST0043", "CUST0077", "CUST0088", "CUST0098", "CUST0109", "CUST0125", "CUST0139", "CUST0153", "CUST0159", "CUST0166", "CUST0180", "CUST0201", "CUST0209", "CUST0245", "CUST0261", "CUST0265", "CUST0273", "CUST0277", "CUST0297", "CUST0315", "CUST0334", "CUST0347", "CUST0381", "CUST0405", "CUST0412", "CUST0428", "CUST0429", "CUST0462", "CUST0471"], "evidence_bundle": {"cluster_id": "CAND15", "size": 31, "customer_ids": ["CUST0003", "CUST0012", "CUST0043", "CUST0077", "CUST0088", "CUST0098", "CUST0109", "CUST0125", "CUST0139", "CUST0153", "CUST0159", "CUST0166", "CUST0180", "CUST0201", "CUST0209", "CUST0245", "CUST0261", "CUST0265", "CUST0273", "CUST0277", "CUST0297", "CUST0315", "CUST0334", "CUST0347", "CUST0381", "CUST0405", "CUST0412", "CUST0428", "CUST0429", "CUST0462", "CUST0471"], "formation_type": null}, "graph_score_inputs": {"size": 31, "strong_link_count": 0, "weak_link_count": 84, "strong_link_density": 0.0, "has_same_contact_edge": 0, "order_count": 90, "total_amount": 268965, "avg_order_amount": 2988.5, "return_rate": 0.08888888888888889, "chargeback_rate": 0.022222222222222223, "shared_coupon_count": 0, "time_span_days": 178.87412037037038, "order_velocity": 0.5031471283472937, "formation_type_strong": 0}, "lightgbm_probability": 0.0033586500336385537, "llm_narrative": null, "llm_confidence_statement": null, "policy_decision": "log_only", "action_taken": null, "human_reviewer": null, "outcome": null, "reason_if_not_auto_actioned": "risk=0.0034 < 0.50 threshold — insufficient signal for action"}
72
+ {"case_id": "CAND16", "timestamp": "2026-08-23T03:32:08.098119+00:00", "cluster_members": ["CUST0004", "CUST0008", "CUST0027", "CUST0030", "CUST0042", "CUST0063", "CUST0075", "CUST0087", "CUST0110", "CUST0117", "CUST0120", "CUST0133", "CUST0135", "CUST0137", "CUST0144", "CUST0152", "CUST0154", "CUST0163", "CUST0170", "CUST0178", "CUST0179", "CUST0195", "CUST0198", "CUST0208", "CUST0210", "CUST0221", "CUST0228", "CUST0231", "CUST0237", "CUST0246", "CUST0251", "CUST0254", "CUST0266", "CUST0282", "CUST0295", "CUST0300", "CUST0303", "CUST0304", "CUST0335", "CUST0355", "CUST0365", "CUST0399", "CUST0420", "CUST0425", "CUST0470", "CUST0483", "CUST0486", "CUST0487", "CUST0491", "CUST0492", "CUST0498"], "evidence_bundle": {"cluster_id": "CAND16", "size": 51, "customer_ids": ["CUST0004", "CUST0008", "CUST0027", "CUST0030", "CUST0042", "CUST0063", "CUST0075", "CUST0087", "CUST0110", "CUST0117", "CUST0120", "CUST0133", "CUST0135", "CUST0137", "CUST0144", "CUST0152", "CUST0154", "CUST0163", "CUST0170", "CUST0178", "CUST0179", "CUST0195", "CUST0198", "CUST0208", "CUST0210", "CUST0221", "CUST0228", "CUST0231", "CUST0237", "CUST0246", "CUST0251", "CUST0254", "CUST0266", "CUST0282", "CUST0295", "CUST0300", "CUST0303", "CUST0304", "CUST0335", "CUST0355", "CUST0365", "CUST0399", "CUST0420", "CUST0425", "CUST0470", "CUST0483", "CUST0486", "CUST0487", "CUST0491", "CUST0492", "CUST0498"], "formation_type": null}, "graph_score_inputs": {"size": 51, "strong_link_count": 1, "weak_link_count": 167, "strong_link_density": 0.000784313725490196, "has_same_contact_edge": 1, "order_count": 145, "total_amount": 381606, "avg_order_amount": 2631.7655172413793, "return_rate": 0.2, "chargeback_rate": 0.0896551724137931, "shared_coupon_count": 0, "time_span_days": 180.07700231481482, "order_velocity": 0.8052110937881319, "formation_type_strong": 0}, "lightgbm_probability": 0.007646314104742993, "llm_narrative": null, "llm_confidence_statement": null, "policy_decision": "log_only", "action_taken": null, "human_reviewer": null, "outcome": null, "reason_if_not_auto_actioned": "risk=0.0076 < 0.50 threshold — insufficient signal for action"}
73
+ {"case_id": "CAND17", "timestamp": "2026-08-23T03:32:08.110140+00:00", "cluster_members": ["CUST0005", "CUST0022", "CUST0028", "CUST0038", "CUST0102", "CUST0111", "CUST0113", "CUST0140", "CUST0161", "CUST0171", "CUST0177", "CUST0202", "CUST0222", "CUST0235", "CUST0252", "CUST0257", "CUST0263", "CUST0288", "CUST0293", "CUST0299", "CUST0308", "CUST0311", "CUST0353", "CUST0357", "CUST0364", "CUST0370", "CUST0383", "CUST0386", "CUST0387", "CUST0391", "CUST0396", "CUST0438", "CUST0442", "CUST0456", "CUST0460", "CUST0488", "CUST0490", "CUST0495", "CUST0496", "CUST0500"], "evidence_bundle": {"cluster_id": "CAND17", "size": 40, "customer_ids": ["CUST0005", "CUST0022", "CUST0028", "CUST0038", "CUST0102", "CUST0111", "CUST0113", "CUST0140", "CUST0161", "CUST0171", "CUST0177", "CUST0202", "CUST0222", "CUST0235", "CUST0252", "CUST0257", "CUST0263", "CUST0288", "CUST0293", "CUST0299", "CUST0308", "CUST0311", "CUST0353", "CUST0357", "CUST0364", "CUST0370", "CUST0383", "CUST0386", "CUST0387", "CUST0391", "CUST0396", "CUST0438", "CUST0442", "CUST0456", "CUST0460", "CUST0488", "CUST0490", "CUST0495", "CUST0496", "CUST0500"], "formation_type": null}, "graph_score_inputs": {"size": 40, "strong_link_count": 0, "weak_link_count": 112, "strong_link_density": 0.0, "has_same_contact_edge": 0, "order_count": 99, "total_amount": 276653, "avg_order_amount": 2794.4747474747473, "return_rate": 0.15151515151515152, "chargeback_rate": 0.030303030303030304, "shared_coupon_count": 0, "time_span_days": 172.41998842592594, "order_velocity": 0.5741793680871972, "formation_type_strong": 0}, "lightgbm_probability": 0.0035456513474297945, "llm_narrative": null, "llm_confidence_statement": null, "policy_decision": "log_only", "action_taken": null, "human_reviewer": null, "outcome": null, "reason_if_not_auto_actioned": "risk=0.0035 < 0.50 threshold — insufficient signal for action"}
74
+ {"case_id": "CAND18", "timestamp": "2026-08-23T03:32:08.120050+00:00", "cluster_members": ["CUST0006", "CUST0011", "CUST0024", "CUST0025", "CUST0033", "CUST0044", "CUST0079", "CUST0084", "CUST0101", "CUST0107", "CUST0108", "CUST0114", "CUST0132", "CUST0145", "CUST0157", "CUST0172", "CUST0227", "CUST0244", "CUST0255", "CUST0256", "CUST0267", "CUST0271", "CUST0284", "CUST0291", "CUST0296", "CUST0316", "CUST0319", "CUST0329", "CUST0336", "CUST0342", "CUST0348", "CUST0349", "CUST0367", "CUST0375", "CUST0389", "CUST0407", "CUST0455", "CUST0489", "CUST0499"], "evidence_bundle": {"cluster_id": "CAND18", "size": 39, "customer_ids": ["CUST0006", "CUST0011", "CUST0024", "CUST0025", "CUST0033", "CUST0044", "CUST0079", "CUST0084", "CUST0101", "CUST0107", "CUST0108", "CUST0114", "CUST0132", "CUST0145", "CUST0157", "CUST0172", "CUST0227", "CUST0244", "CUST0255", "CUST0256", "CUST0267", "CUST0271", "CUST0284", "CUST0291", "CUST0296", "CUST0316", "CUST0319", "CUST0329", "CUST0336", "CUST0342", "CUST0348", "CUST0349", "CUST0367", "CUST0375", "CUST0389", "CUST0407", "CUST0455", "CUST0489", "CUST0499"], "formation_type": null}, "graph_score_inputs": {"size": 39, "strong_link_count": 1, "weak_link_count": 95, "strong_link_density": 0.001349527665317139, "has_same_contact_edge": 0, "order_count": 108, "total_amount": 321113, "avg_order_amount": 2973.2685185185187, "return_rate": 0.18518518518518517, "chargeback_rate": 0.10185185185185185, "shared_coupon_count": 0, "time_span_days": 176.43193287037036, "order_velocity": 0.6121340861767395, "formation_type_strong": 0}, "lightgbm_probability": 0.006896318028648148, "llm_narrative": null, "llm_confidence_statement": null, "policy_decision": "log_only", "action_taken": null, "human_reviewer": null, "outcome": null, "reason_if_not_auto_actioned": "risk=0.0069 < 0.50 threshold — insufficient signal for action"}
75
+ {"case_id": "CAND19", "timestamp": "2026-08-23T03:32:08.126760+00:00", "cluster_members": ["CUST0007", "CUST0014", "CUST0015", "CUST0016", "CUST0032", "CUST0037", "CUST0065", "CUST0069", "CUST0070", "CUST0095", "CUST0106", "CUST0115", "CUST0124", "CUST0131", "CUST0149", "CUST0191", "CUST0200", "CUST0204", "CUST0215", "CUST0218", "CUST0223", "CUST0238", "CUST0239", "CUST0241", "CUST0242", "CUST0264", "CUST0276", "CUST0280", "CUST0305", "CUST0314", "CUST0323", "CUST0327", "CUST0339", "CUST0350", "CUST0352", "CUST0356", "CUST0358", "CUST0362", "CUST0379", "CUST0401", "CUST0418", "CUST0440", "CUST0443", "CUST0449", "CUST0479"], "evidence_bundle": {"cluster_id": "CAND19", "size": 45, "customer_ids": ["CUST0007", "CUST0014", "CUST0015", "CUST0016", "CUST0032", "CUST0037", "CUST0065", "CUST0069", "CUST0070", "CUST0095", "CUST0106", "CUST0115", "CUST0124", "CUST0131", "CUST0149", "CUST0191", "CUST0200", "CUST0204", "CUST0215", "CUST0218", "CUST0223", "CUST0238", "CUST0239", "CUST0241", "CUST0242", "CUST0264", "CUST0276", "CUST0280", "CUST0305", "CUST0314", "CUST0323", "CUST0327", "CUST0339", "CUST0350", "CUST0352", "CUST0356", "CUST0358", "CUST0362", "CUST0379", "CUST0401", "CUST0418", "CUST0440", "CUST0443", "CUST0449", "CUST0479"], "formation_type": null}, "graph_score_inputs": {"size": 45, "strong_link_count": 3, "weak_link_count": 106, "strong_link_density": 0.0030303030303030303, "has_same_contact_edge": 0, "order_count": 110, "total_amount": 308935, "avg_order_amount": 2808.5, "return_rate": 0.17272727272727273, "chargeback_rate": 0.045454545454545456, "shared_coupon_count": 1, "time_span_days": 180.25027777777777, "order_velocity": 0.610262582427828, "formation_type_strong": 0}, "lightgbm_probability": 0.0034784417949967547, "llm_narrative": null, "llm_confidence_statement": null, "policy_decision": "log_only", "action_taken": null, "human_reviewer": null, "outcome": null, "reason_if_not_auto_actioned": "risk=0.0035 < 0.50 threshold — insufficient signal for action"}
76
+ {"case_id": "CAND20", "timestamp": "2026-08-23T03:32:08.137991+00:00", "cluster_members": ["CUST0010", "CUST0023", "CUST0029", "CUST0090", "CUST0119", "CUST0121", "CUST0129", "CUST0141", "CUST0143", "CUST0155", "CUST0196", "CUST0207", "CUST0230", "CUST0233", "CUST0247", "CUST0330", "CUST0338", "CUST0372", "CUST0374", "CUST0380", "CUST0461", "CUST0467", "CUST0480", "CUST0493"], "evidence_bundle": {"cluster_id": "CAND20", "size": 24, "customer_ids": ["CUST0010", "CUST0023", "CUST0029", "CUST0090", "CUST0119", "CUST0121", "CUST0129", "CUST0141", "CUST0143", "CUST0155", "CUST0196", "CUST0207", "CUST0230", "CUST0233", "CUST0247", "CUST0330", "CUST0338", "CUST0372", "CUST0374", "CUST0380", "CUST0461", "CUST0467", "CUST0480", "CUST0493"], "formation_type": null}, "graph_score_inputs": {"size": 24, "strong_link_count": 0, "weak_link_count": 47, "strong_link_density": 0.0, "has_same_contact_edge": 0, "order_count": 61, "total_amount": 165404, "avg_order_amount": 2711.5409836065573, "return_rate": 0.18032786885245902, "chargeback_rate": 0.08196721311475409, "shared_coupon_count": 0, "time_span_days": 169.00943287037038, "order_velocity": 0.3609266001548374, "formation_type_strong": 0}, "lightgbm_probability": 0.007559966037372132, "llm_narrative": null, "llm_confidence_statement": null, "policy_decision": "log_only", "action_taken": null, "human_reviewer": null, "outcome": null, "reason_if_not_auto_actioned": "risk=0.0076 < 0.50 threshold — insufficient signal for action"}
77
+ {"case_id": "CAND21", "timestamp": "2026-08-23T03:32:08.146573+00:00", "cluster_members": ["CUST0013", "CUST0026", "CUST0031", "CUST0035", "CUST0039", "CUST0067", "CUST0068", "CUST0094", "CUST0116", "CUST0122", "CUST0128", "CUST0184", "CUST0193", "CUST0203", "CUST0212", "CUST0217", "CUST0248", "CUST0268", "CUST0283", "CUST0312", "CUST0340", "CUST0351", "CUST0384", "CUST0402", "CUST0417", "CUST0427", "CUST0430", "CUST0434", "CUST0451", "CUST0463", "CUST0466", "CUST0469", "CUST0473", "CUST0482", "CUST0497"], "evidence_bundle": {"cluster_id": "CAND21", "size": 35, "customer_ids": ["CUST0013", "CUST0026", "CUST0031", "CUST0035", "CUST0039", "CUST0067", "CUST0068", "CUST0094", "CUST0116", "CUST0122", "CUST0128", "CUST0184", "CUST0193", "CUST0203", "CUST0212", "CUST0217", "CUST0248", "CUST0268", "CUST0283", "CUST0312", "CUST0340", "CUST0351", "CUST0384", "CUST0402", "CUST0417", "CUST0427", "CUST0430", "CUST0434", "CUST0451", "CUST0463", "CUST0466", "CUST0469", "CUST0473", "CUST0482", "CUST0497"], "formation_type": null}, "graph_score_inputs": {"size": 35, "strong_link_count": 0, "weak_link_count": 84, "strong_link_density": 0.0, "has_same_contact_edge": 0, "order_count": 89, "total_amount": 250715, "avg_order_amount": 2817.0224719101125, "return_rate": 0.23595505617977527, "chargeback_rate": 0.07865168539325842, "shared_coupon_count": 0, "time_span_days": 179.63657407407408, "order_velocity": 0.4954447637333608, "formation_type_strong": 0}, "lightgbm_probability": 0.007561351403107364, "llm_narrative": null, "llm_confidence_statement": null, "policy_decision": "log_only", "action_taken": null, "human_reviewer": null, "outcome": null, "reason_if_not_auto_actioned": "risk=0.0076 < 0.50 threshold — insufficient signal for action"}
78
+ {"case_id": "CAND22", "timestamp": "2026-08-23T03:32:08.154043+00:00", "cluster_members": ["CUST0017", "CUST0036", "CUST0062", "CUST0071", "CUST0082", "CUST0083", "CUST0085", "CUST0096", "CUST0123", "CUST0142", "CUST0147", "CUST0175", "CUST0189", "CUST0216", "CUST0220", "CUST0224", "CUST0232", "CUST0234", "CUST0306", "CUST0328", "CUST0337", "CUST0341", "CUST0345", "CUST0346", "CUST0361", "CUST0388", "CUST0421", "CUST0426", "CUST0433", "CUST0435", "CUST0444", "CUST0450", "CUST0454", "CUST0477"], "evidence_bundle": {"cluster_id": "CAND22", "size": 34, "customer_ids": ["CUST0017", "CUST0036", "CUST0062", "CUST0071", "CUST0082", "CUST0083", "CUST0085", "CUST0096", "CUST0123", "CUST0142", "CUST0147", "CUST0175", "CUST0189", "CUST0216", "CUST0220", "CUST0224", "CUST0232", "CUST0234", "CUST0306", "CUST0328", "CUST0337", "CUST0341", "CUST0345", "CUST0346", "CUST0361", "CUST0388", "CUST0421", "CUST0426", "CUST0433", "CUST0435", "CUST0444", "CUST0450", "CUST0454", "CUST0477"], "formation_type": null}, "graph_score_inputs": {"size": 34, "strong_link_count": 0, "weak_link_count": 79, "strong_link_density": 0.0, "has_same_contact_edge": 0, "order_count": 86, "total_amount": 244617, "avg_order_amount": 2844.3837209302324, "return_rate": 0.09302325581395349, "chargeback_rate": 0.03488372093023256, "shared_coupon_count": 0, "time_span_days": 176.02006944444443, "order_velocity": 0.4885806503283046, "formation_type_strong": 0}, "lightgbm_probability": 0.0035456513474297945, "llm_narrative": null, "llm_confidence_statement": null, "policy_decision": "log_only", "action_taken": null, "human_reviewer": null, "outcome": null, "reason_if_not_auto_actioned": "risk=0.0035 < 0.50 threshold — insufficient signal for action"}
79
+ {"case_id": "CAND23", "timestamp": "2026-08-23T03:32:08.167111+00:00", "cluster_members": ["CUST0018", "CUST0021", "CUST0091", "CUST0092", "CUST0112", "CUST0160", "CUST0174", "CUST0187", "CUST0270", "CUST0298", "CUST0307", "CUST0310", "CUST0332", "CUST0343", "CUST0431", "CUST0474", "CUST0475", "CUST0494"], "evidence_bundle": {"cluster_id": "CAND23", "size": 18, "customer_ids": ["CUST0018", "CUST0021", "CUST0091", "CUST0092", "CUST0112", "CUST0160", "CUST0174", "CUST0187", "CUST0270", "CUST0298", "CUST0307", "CUST0310", "CUST0332", "CUST0343", "CUST0431", "CUST0474", "CUST0475", "CUST0494"], "formation_type": null}, "graph_score_inputs": {"size": 18, "strong_link_count": 0, "weak_link_count": 35, "strong_link_density": 0.0, "has_same_contact_edge": 0, "order_count": 44, "total_amount": 140230, "avg_order_amount": 3187.0454545454545, "return_rate": 0.25, "chargeback_rate": 0.022727272727272728, "shared_coupon_count": 0, "time_span_days": 165.36368055555556, "order_velocity": 0.26608019277375583, "formation_type_strong": 0}, "lightgbm_probability": 0.03305941612108949, "llm_narrative": null, "llm_confidence_statement": null, "policy_decision": "log_only", "action_taken": null, "human_reviewer": null, "outcome": null, "reason_if_not_auto_actioned": "risk=0.0331 < 0.50 threshold — insufficient signal for action"}
80
+ {"case_id": "CAND24", "timestamp": "2026-08-23T03:32:08.189940+00:00", "cluster_members": ["CUST0034", "CUST0066", "CUST0078", "CUST0100", "CUST0104", "CUST0134", "CUST0146", "CUST0150", "CUST0151", "CUST0158", "CUST0182", "CUST0183", "CUST0185", "CUST0188", "CUST0190", "CUST0259", "CUST0269", "CUST0279", "CUST0285", "CUST0289", "CUST0301", "CUST0302", "CUST0344", "CUST0354", "CUST0366", "CUST0368", "CUST0378", "CUST0404", "CUST0408", "CUST0432", "CUST0436", "CUST0437", "CUST0439", "CUST0441", "CUST0447", "CUST0448", "CUST0457", "CUST0481"], "evidence_bundle": {"cluster_id": "CAND24", "size": 38, "customer_ids": ["CUST0034", "CUST0066", "CUST0078", "CUST0100", "CUST0104", "CUST0134", "CUST0146", "CUST0150", "CUST0151", "CUST0158", "CUST0182", "CUST0183", "CUST0185", "CUST0188", "CUST0190", "CUST0259", "CUST0269", "CUST0279", "CUST0285", "CUST0289", "CUST0301", "CUST0302", "CUST0344", "CUST0354", "CUST0366", "CUST0368", "CUST0378", "CUST0404", "CUST0408", "CUST0432", "CUST0436", "CUST0437", "CUST0439", "CUST0441", "CUST0447", "CUST0448", "CUST0457", "CUST0481"], "formation_type": null}, "graph_score_inputs": {"size": 38, "strong_link_count": 0, "weak_link_count": 90, "strong_link_density": 0.0, "has_same_contact_edge": 0, "order_count": 91, "total_amount": 244127, "avg_order_amount": 2682.714285714286, "return_rate": 0.12087912087912088, "chargeback_rate": 0.04395604395604396, "shared_coupon_count": 0, "time_span_days": 178.13104166666668, "order_velocity": 0.510859865571811, "formation_type_strong": 0}, "lightgbm_probability": 0.0035456513474297945, "llm_narrative": null, "llm_confidence_statement": null, "policy_decision": "log_only", "action_taken": null, "human_reviewer": null, "outcome": null, "reason_if_not_auto_actioned": "risk=0.0035 < 0.50 threshold — insufficient signal for action"}
81
+ {"case_id": "CAND25", "timestamp": "2026-08-23T03:32:08.198347+00:00", "cluster_members": ["CUST0061", "CUST0093", "CUST0105", "CUST0130", "CUST0136", "CUST0148", "CUST0164", "CUST0186", "CUST0197", "CUST0205", "CUST0206", "CUST0214", "CUST0260", "CUST0309", "CUST0320", "CUST0321", "CUST0359", "CUST0363", "CUST0376", "CUST0377", "CUST0385", "CUST0394", "CUST0403", "CUST0416", "CUST0424", "CUST0453"], "evidence_bundle": {"cluster_id": "CAND25", "size": 26, "customer_ids": ["CUST0061", "CUST0093", "CUST0105", "CUST0130", "CUST0136", "CUST0148", "CUST0164", "CUST0186", "CUST0197", "CUST0205", "CUST0206", "CUST0214", "CUST0260", "CUST0309", "CUST0320", "CUST0321", "CUST0359", "CUST0363", "CUST0376", "CUST0377", "CUST0385", "CUST0394", "CUST0403", "CUST0416", "CUST0424", "CUST0453"], "formation_type": null}, "graph_score_inputs": {"size": 26, "strong_link_count": 0, "weak_link_count": 71, "strong_link_density": 0.0, "has_same_contact_edge": 0, "order_count": 62, "total_amount": 169608, "avg_order_amount": 2735.6129032258063, "return_rate": 0.16129032258064516, "chargeback_rate": 0.06451612903225806, "shared_coupon_count": 0, "time_span_days": 176.1874652777778, "order_velocity": 0.3518979054625173, "formation_type_strong": 0}, "lightgbm_probability": 0.0035456513474297945, "llm_narrative": null, "llm_confidence_statement": null, "policy_decision": "log_only", "action_taken": null, "human_reviewer": null, "outcome": null, "reason_if_not_auto_actioned": "risk=0.0035 < 0.50 threshold — insufficient signal for action"}
82
+ {"case_id": "CAND26", "timestamp": "2026-08-23T03:32:08.205211+00:00", "cluster_members": ["CUST0045", "CUST0046", "CUST0047", "CUST0048"], "evidence_bundle": {"cluster_id": "CAND26", "size": 4, "customer_ids": ["CUST0045", "CUST0046", "CUST0047", "CUST0048"], "formation_type": null}, "graph_score_inputs": {"size": 4, "strong_link_count": 0, "weak_link_count": 6, "strong_link_density": 0.0, "has_same_contact_edge": 0, "order_count": 11, "total_amount": 25534, "avg_order_amount": 2321.2727272727275, "return_rate": 0.36363636363636365, "chargeback_rate": 0.0, "shared_coupon_count": 0, "time_span_days": 157.74650462962964, "order_velocity": 0.06973213147148151, "formation_type_strong": 0}, "lightgbm_probability": 0.0035484719416527992, "llm_narrative": null, "llm_confidence_statement": null, "policy_decision": "log_only", "action_taken": null, "human_reviewer": null, "outcome": null, "reason_if_not_auto_actioned": "risk=0.0035 < 0.50 threshold — insufficient signal for action"}
83
+ {"case_id": "CAND27", "timestamp": "2026-08-23T03:32:08.214578+00:00", "cluster_members": ["CUST0049", "CUST0050", "CUST0051", "CUST0052"], "evidence_bundle": {"cluster_id": "CAND27", "size": 4, "customer_ids": ["CUST0049", "CUST0050", "CUST0051", "CUST0052"], "formation_type": null}, "graph_score_inputs": {"size": 4, "strong_link_count": 0, "weak_link_count": 6, "strong_link_density": 0.0, "has_same_contact_edge": 0, "order_count": 8, "total_amount": 20046, "avg_order_amount": 2505.75, "return_rate": 0.25, "chargeback_rate": 0.0, "shared_coupon_count": 0, "time_span_days": 173.32074074074075, "order_velocity": 0.046157199454661235, "formation_type_strong": 0}, "lightgbm_probability": 0.0031715868230902835, "llm_narrative": null, "llm_confidence_statement": null, "policy_decision": "log_only", "action_taken": null, "human_reviewer": null, "outcome": null, "reason_if_not_auto_actioned": "risk=0.0032 < 0.50 threshold — insufficient signal for action"}
84
+ {"case_id": "CAND28", "timestamp": "2026-08-23T03:32:08.254596+00:00", "cluster_members": ["CUST0053", "CUST0054", "CUST0055", "CUST0056"], "evidence_bundle": {"cluster_id": "CAND28", "size": 4, "customer_ids": ["CUST0053", "CUST0054", "CUST0055", "CUST0056"], "formation_type": null}, "graph_score_inputs": {"size": 4, "strong_link_count": 0, "weak_link_count": 6, "strong_link_density": 0.0, "has_same_contact_edge": 0, "order_count": 9, "total_amount": 26589, "avg_order_amount": 2954.3333333333335, "return_rate": 0.6666666666666666, "chargeback_rate": 0.0, "shared_coupon_count": 0, "time_span_days": 146.59680555555556, "order_velocity": 0.06139287937341366, "formation_type_strong": 0}, "lightgbm_probability": 0.003058997865465553, "llm_narrative": null, "llm_confidence_statement": null, "policy_decision": "log_only", "action_taken": null, "human_reviewer": null, "outcome": null, "reason_if_not_auto_actioned": "risk=0.0031 < 0.50 threshold — insufficient signal for action"}
data/synthetic/cases_demo.json CHANGED
@@ -11,10 +11,10 @@
11
  ],
12
  "risk_probability": 0.9955003588432927,
13
  "policy_decision": "escalate",
14
- "llm_narrative": "The five customers (CUST0014‑CUST0018) form a strong‑anchored cluster with ten strong links and no weak links. Their activity shows a 50% return rate, a 12.5% chargeback rate, a shared coupon, and a combined transaction value of $62,087. With a risk probability of 99.55%, the cluster meets the criteria for escalation.",
15
- "llm_confidence_statement": "Confidence in this risk assessment is extremely high.",
16
  "action_taken": null,
17
- "timestamp": "2026-08-22T05:10:35.452282+00:00"
18
  },
19
  {
20
  "case_id": "CASE02",
@@ -28,10 +28,10 @@
28
  ],
29
  "risk_probability": 0.9940850384979173,
30
  "policy_decision": "escalate",
31
- "llm_narrative": "The five customers are connected by ten strong links, forming a strong_anchored cluster with a total transaction amount of $70,841, a return rate of 33.33% and a chargeback rate of 5.56%. The risk probability for this cluster is 99.41%, indicating a very high likelihood of fraudulent behavior.",
32
- "llm_confidence_statement": "We are highly confident in this assessment.",
33
  "action_taken": null,
34
- "timestamp": "2026-08-22T05:10:39.729228+00:00"
35
  },
36
  {
37
  "case_id": "CASE03",
@@ -45,10 +45,10 @@
45
  ],
46
  "risk_probability": 0.9959231873282086,
47
  "policy_decision": "escalate",
48
- "llm_narrative": "The five flagged customers (CUST0004‑CUST0008) form a strong‑anchored cluster with seven strong links and no weak links, indicating tightly connected behavior. The cluster generated a total transaction amount of $63,837, with a return rate of 37.5% and a chargeback rate of 6.25%, and the model assigned a risk probability of 99.6%.",
49
- "llm_confidence_statement": "The assessment is made with very high confidence.",
50
  "action_taken": null,
51
- "timestamp": "2026-08-22T05:10:43.986593+00:00"
52
  },
53
  {
54
  "case_id": "CASE04",
@@ -63,10 +63,10 @@
63
  ],
64
  "risk_probability": 0.9913203009684713,
65
  "policy_decision": "escalate",
66
- "llm_narrative": "The six customers (CUST0024‑CUST0029) form a strong_anchored cluster with 15 strong links and no weak links, generating a total transaction amount of $81,019. The cluster shows a high return rate of 55% and a chargeback rate of 5%, resulting in a risk probability of 99.13% and triggering an escalation decision.",
67
- "llm_confidence_statement": "The assessment is made with very high confidence based on the observed strong links, return and chargeback rates, and the calculated risk probability.",
68
  "action_taken": null,
69
- "timestamp": "2026-08-22T05:10:48.269564+00:00"
70
  },
71
  {
72
  "case_id": "CASE05",
@@ -80,10 +80,10 @@
80
  ],
81
  "risk_probability": 0.9969377389203431,
82
  "policy_decision": "escalate",
83
- "llm_narrative": "The five customers (CUST0036‑CUST0040) form a strong‑anchored cluster with ten strong links and no weak links, collectively transacting $62,270. Their return rate of 26.7% and chargeback rate of 20% are elevated, contributing to a risk probability of 99.7%.",
84
- "llm_confidence_statement": "The analysis is made with very high confidence.",
85
  "action_taken": null,
86
- "timestamp": "2026-08-22T05:10:52.557378+00:00"
87
  },
88
  {
89
  "case_id": "CASE06",
@@ -95,10 +95,10 @@
95
  ],
96
  "risk_probability": 0.9950028638127228,
97
  "policy_decision": "escalate",
98
- "llm_narrative": "The three customers (CUST0001, CUST0002, CUST0003) form a strong anchored cluster with three strong links and no weak links, share one coupon, and together have a total transaction amount of 32897. Their return rate of 0.25 and chargeback rate of 0.125 further indicate suspicious behavior.",
99
- "llm_confidence_statement": "The model assigns a risk probability of 0.995, indicating very high confidence in the fraud assessment.",
100
  "action_taken": null,
101
- "timestamp": "2026-08-22T05:10:57.058381+00:00"
102
  },
103
  {
104
  "case_id": "CASE07",
@@ -111,10 +111,10 @@
111
  ],
112
  "risk_probability": 0.9958773824170732,
113
  "policy_decision": "escalate",
114
- "llm_narrative": "The four flagged customers (CUST0041‑CUST0044) are connected by six strong links, forming a strong‑anchored cluster with no weak links. This group has a return rate of 33.3% and a chargeback rate of 16.7% on a total transaction amount of $58,186, which together drive a risk probability of 99.6%.",
115
- "llm_confidence_statement": "Given the near‑99.6% risk probability and the observed high return and chargeback rates, confidence in the fraud assessment is very high.",
116
  "action_taken": null,
117
- "timestamp": "2026-08-22T05:11:01.556594+00:00"
118
  },
119
  {
120
  "case_id": "CASE08",
@@ -128,10 +128,10 @@
128
  ],
129
  "risk_probability": 0.9968053865328341,
130
  "policy_decision": "escalate",
131
- "llm_narrative": "The five customers form a strong-anchored cluster linked by ten strong connections and no weak links, collectively generating $59,830 in transactions. Their return rate of 47% and chargeback rate of 18% are markedly high, contributing to a risk probability of 99.68%.",
132
- "llm_confidence_statement": "The analysis is made with very high confidence.",
133
  "action_taken": null,
134
- "timestamp": "2026-08-22T05:11:05.865391+00:00"
135
  },
136
  {
137
  "case_id": "CASE09",
@@ -146,7 +146,7 @@
146
  "llm_narrative": null,
147
  "llm_confidence_statement": null,
148
  "action_taken": null,
149
- "timestamp": "2026-08-22T05:11:05.878464+00:00"
150
  },
151
  {
152
  "case_id": "CASE10",
@@ -158,10 +158,10 @@
158
  ],
159
  "risk_probability": 0.9927212653417073,
160
  "policy_decision": "escalate",
161
- "llm_narrative": "The three customers (CUST0030, CUST0031, CUST0032) form a strong_anchored cluster with two strong links and no weak links. They show elevated return and chargeback rates of 28.6% each, and their combined transaction amount totals $26,235. These risk indicators correspond to a calculated risk probability of 99.3%.",
162
- "llm_confidence_statement": "The assessment is highly confident given the 99.3% risk probability.",
163
  "action_taken": null,
164
- "timestamp": "2026-08-22T05:11:10.124971+00:00"
165
  },
166
  {
167
  "case_id": "CASE11",
@@ -173,10 +173,10 @@
173
  ],
174
  "risk_probability": 0.9969893801631614,
175
  "policy_decision": "escalate",
176
- "llm_narrative": "The three customers (CUST0033, CUST0034, CUST0035) form a strong_anchored cluster with three strong links and no weak links, sharing one coupon and generating a total transaction amount of $50,134. Their return rate of 18.18% and chargeback rate of 9.09% are elevated, and the calculated risk probability is 0.9969, indicating near‑certain fraudulent activity.",
177
- "llm_confidence_statement": "The assessment is made with very high confidence, reflected by the 0.9969 risk probability.",
178
  "action_taken": null,
179
- "timestamp": "2026-08-22T05:11:14.465656+00:00"
180
  },
181
  {
182
  "case_id": "CASE12",
@@ -188,10 +188,10 @@
188
  ],
189
  "risk_probability": 0.9867466290228035,
190
  "policy_decision": "auto_hold",
191
- "llm_narrative": "The three customers (CUST0501, CUST0502, CUST0503) form a strong_anchored cluster with three strong links and no weak links, sharing one coupon and generating a total amount of $19,800. Their return and chargeback rates are each 16.7%, and the model assigns a risk probability of 0.9867, resulting in an auto_hold decision.",
192
- "llm_confidence_statement": "We are highly confident in this assessment given the near‑certain risk probability.",
193
  "action_taken": null,
194
- "timestamp": "2026-08-22T05:11:19.119512+00:00"
195
  },
196
  {
197
  "case_id": "CASE13",
@@ -221,7 +221,7 @@
221
  "llm_narrative": null,
222
  "llm_confidence_statement": null,
223
  "action_taken": null,
224
- "timestamp": "2026-08-22T05:11:19.123526+00:00"
225
  },
226
  {
227
  "case_id": "CASE14",
@@ -274,7 +274,7 @@
274
  "llm_narrative": null,
275
  "llm_confidence_statement": null,
276
  "action_taken": null,
277
- "timestamp": "2026-08-22T05:11:19.142472+00:00"
278
  },
279
  {
280
  "case_id": "CASE15",
@@ -317,7 +317,7 @@
317
  "llm_narrative": null,
318
  "llm_confidence_statement": null,
319
  "action_taken": null,
320
- "timestamp": "2026-08-22T05:11:19.155866+00:00"
321
  },
322
  {
323
  "case_id": "CASE16",
@@ -380,7 +380,7 @@
380
  "llm_narrative": null,
381
  "llm_confidence_statement": null,
382
  "action_taken": null,
383
- "timestamp": "2026-08-22T05:11:19.164057+00:00"
384
  },
385
  {
386
  "case_id": "CASE17",
@@ -432,7 +432,7 @@
432
  "llm_narrative": null,
433
  "llm_confidence_statement": null,
434
  "action_taken": null,
435
- "timestamp": "2026-08-22T05:11:19.178162+00:00"
436
  },
437
  {
438
  "case_id": "CASE18",
@@ -483,7 +483,7 @@
483
  "llm_narrative": null,
484
  "llm_confidence_statement": null,
485
  "action_taken": null,
486
- "timestamp": "2026-08-22T05:11:19.194594+00:00"
487
  },
488
  {
489
  "case_id": "CASE19",
@@ -540,7 +540,7 @@
540
  "llm_narrative": null,
541
  "llm_confidence_statement": null,
542
  "action_taken": null,
543
- "timestamp": "2026-08-22T05:11:19.205401+00:00"
544
  },
545
  {
546
  "case_id": "CASE20",
@@ -576,7 +576,7 @@
576
  "llm_narrative": null,
577
  "llm_confidence_statement": null,
578
  "action_taken": null,
579
- "timestamp": "2026-08-22T05:11:19.218290+00:00"
580
  },
581
  {
582
  "case_id": "CASE21",
@@ -623,7 +623,7 @@
623
  "llm_narrative": null,
624
  "llm_confidence_statement": null,
625
  "action_taken": null,
626
- "timestamp": "2026-08-22T05:11:19.231965+00:00"
627
  },
628
  {
629
  "case_id": "CASE22",
@@ -669,7 +669,7 @@
669
  "llm_narrative": null,
670
  "llm_confidence_statement": null,
671
  "action_taken": null,
672
- "timestamp": "2026-08-22T05:11:19.242854+00:00"
673
  },
674
  {
675
  "case_id": "CASE23",
@@ -699,7 +699,7 @@
699
  "llm_narrative": null,
700
  "llm_confidence_statement": null,
701
  "action_taken": null,
702
- "timestamp": "2026-08-22T05:11:19.257505+00:00"
703
  },
704
  {
705
  "case_id": "CASE24",
@@ -749,7 +749,7 @@
749
  "llm_narrative": null,
750
  "llm_confidence_statement": null,
751
  "action_taken": null,
752
- "timestamp": "2026-08-22T05:11:19.268368+00:00"
753
  },
754
  {
755
  "case_id": "CASE25",
@@ -787,7 +787,7 @@
787
  "llm_narrative": null,
788
  "llm_confidence_statement": null,
789
  "action_taken": null,
790
- "timestamp": "2026-08-22T05:11:19.278896+00:00"
791
  },
792
  {
793
  "case_id": "CASE26",
@@ -803,7 +803,7 @@
803
  "llm_narrative": null,
804
  "llm_confidence_statement": null,
805
  "action_taken": null,
806
- "timestamp": "2026-08-22T05:11:19.293467+00:00"
807
  },
808
  {
809
  "case_id": "CASE27",
@@ -819,7 +819,7 @@
819
  "llm_narrative": null,
820
  "llm_confidence_statement": null,
821
  "action_taken": null,
822
- "timestamp": "2026-08-22T05:11:19.314450+00:00"
823
  },
824
  {
825
  "case_id": "CASE28",
@@ -835,6 +835,6 @@
835
  "llm_narrative": null,
836
  "llm_confidence_statement": null,
837
  "action_taken": null,
838
- "timestamp": "2026-08-22T05:11:19.325432+00:00"
839
  }
840
  ]
 
11
  ],
12
  "risk_probability": 0.9955003588432927,
13
  "policy_decision": "escalate",
14
+ "llm_narrative": "The five‑customer cluster is classified as a strong_anchored formation with ten strong links and no weak links. It exhibits a 50% return rate, a 12.5% chargeback rate, and the members shared one coupon while generating a total transaction amount of $62,087. The calculated risk probability of 99.55% triggered an escalation decision.",
15
+ "llm_confidence_statement": "The assessment is made with very high confidence based on the presented evidence.",
16
  "action_taken": null,
17
+ "timestamp": "2026-08-23T03:31:16.700405+00:00"
18
  },
19
  {
20
  "case_id": "CASE02",
 
28
  ],
29
  "risk_probability": 0.9940850384979173,
30
  "policy_decision": "escalate",
31
+ "llm_narrative": "A cluster of five customers (CUST0019, CUST0020, CUST0021, CUST0022, CUST0023) is connected by ten strong links with no weak links, forming a strong_anchored network. The group generated a total transaction amount of 70,841, exhibited a return rate of 33.33% and a chargeback rate of 5.56%, and no shared coupons were used. The risk probability for this cluster is 0.994, leading to an escalation decision.",
32
+ "llm_confidence_statement": "The assessment is made with very high confidence, reflected by a risk probability of approximately 99.4%.",
33
  "action_taken": null,
34
+ "timestamp": "2026-08-23T03:31:20.946999+00:00"
35
  },
36
  {
37
  "case_id": "CASE03",
 
45
  ],
46
  "risk_probability": 0.9959231873282086,
47
  "policy_decision": "escalate",
48
+ "llm_narrative": "The five customers (CUST0004‑CUST0008) form a strong‑anchored cluster with seven strong links and no weak links, collectively transacting $63,837. Their return rate of 37.5% and chargeback rate of 6.25% are elevated, contributing to a risk probability of 99.6%.",
49
+ "llm_confidence_statement": "The analysis is made with very high confidence.",
50
  "action_taken": null,
51
+ "timestamp": "2026-08-23T03:31:25.232360+00:00"
52
  },
53
  {
54
  "case_id": "CASE04",
 
63
  ],
64
  "risk_probability": 0.9913203009684713,
65
  "policy_decision": "escalate",
66
+ "llm_narrative": "The six customers (CUST0024‑CUST0029) form a strong_anchored cluster with 15 strong links and no weak links, indicating tightly connected activity. The group exhibits a high return rate of 55% and a chargeback rate of 5% across a total transaction volume of $81,019. Combined with a risk probability of 99.13%, these metrics point to coordinated fraudulent behavior.",
67
+ "llm_confidence_statement": "We are highly confident in this assessment.",
68
  "action_taken": null,
69
+ "timestamp": "2026-08-23T03:31:29.527424+00:00"
70
  },
71
  {
72
  "case_id": "CASE05",
 
80
  ],
81
  "risk_probability": 0.9969377389203431,
82
  "policy_decision": "escalate",
83
+ "llm_narrative": "The flagged cluster consists of five customers (CUST0036‑CUST0040) linked by ten strong connections in a strong‑anchored formation. The group exhibits a 26.7% return rate and a 20% chargeback rate on a total transaction volume of $62,270, with no weak links or shared coupons.",
84
+ "llm_confidence_statement": "Given the 99.7% risk probability and the observed high return and chargeback metrics, confidence in the fraud assessment is very high.",
85
  "action_taken": null,
86
+ "timestamp": "2026-08-23T03:31:33.744406+00:00"
87
  },
88
  {
89
  "case_id": "CASE06",
 
95
  ],
96
  "risk_probability": 0.9950028638127228,
97
  "policy_decision": "escalate",
98
+ "llm_narrative": "The three flagged customers (CUST0001, CUST0002, CUST0003) form a strong‑anchored cluster with three strong links and no weak links, share one coupon, and together generated $32,897 in transactions. Their combined return rate of 25 % and chargeback rate of 12.5 % further indicate suspicious activity.",
99
+ "llm_confidence_statement": "The model assigns a risk probability of 99.5 %, indicating very high confidence in the escalation decision.",
100
  "action_taken": null,
101
+ "timestamp": "2026-08-23T03:31:38.223095+00:00"
102
  },
103
  {
104
  "case_id": "CASE07",
 
111
  ],
112
  "risk_probability": 0.9958773824170732,
113
  "policy_decision": "escalate",
114
+ "llm_narrative": "The four customers (CUST0041‑CUST0044) form a strong‑anchored cluster with six strong links and no weak links, indicating tightly connected activity. Their combined transaction volume is $58,186, with a return rate of 33.3% and a chargeback rate of 16.7%, both elevated for a group of this size. The risk probability is 99.6%, leading to an escalation decision.",
115
+ "llm_confidence_statement": "The model’s confidence in this high‑risk classification is extremely high.",
116
  "action_taken": null,
117
+ "timestamp": "2026-08-23T03:31:42.412917+00:00"
118
  },
119
  {
120
  "case_id": "CASE08",
 
128
  ],
129
  "risk_probability": 0.9968053865328341,
130
  "policy_decision": "escalate",
131
+ "llm_narrative": "The five-customer cluster (CUST0009, CUST0010, CUST0011, CUST0012, CUST0013) forms a strong-anchored network with ten strong links and no weak links. It shows a high return rate of 47.06% and a chargeback rate of 17.65% on a total transaction amount of $59,830, resulting in a risk probability of 99.68%.",
132
+ "llm_confidence_statement": "The model’s confidence in this high-risk assessment is very high.",
133
  "action_taken": null,
134
+ "timestamp": "2026-08-23T03:31:47.132113+00:00"
135
  },
136
  {
137
  "case_id": "CASE09",
 
146
  "llm_narrative": null,
147
  "llm_confidence_statement": null,
148
  "action_taken": null,
149
+ "timestamp": "2026-08-23T03:31:47.138032+00:00"
150
  },
151
  {
152
  "case_id": "CASE10",
 
158
  ],
159
  "risk_probability": 0.9927212653417073,
160
  "policy_decision": "escalate",
161
+ "llm_narrative": "The three customers (CUST0030, CUST0031, CUST0032) are linked by two strong connections with no weak links, forming a strong‑anchored cluster. Their combined purchase total is $26,235, and both the return rate and chargeback rate are 28.6%, while the model assigns a risk probability of 99.27%.",
162
+ "llm_confidence_statement": "The assessment is made with high confidence.",
163
  "action_taken": null,
164
+ "timestamp": "2026-08-23T03:31:52.303511+00:00"
165
  },
166
  {
167
  "case_id": "CASE11",
 
173
  ],
174
  "risk_probability": 0.9969893801631614,
175
  "policy_decision": "escalate",
176
+ "llm_narrative": "The three customers (CUST0033, CUST0034, CUST0035) are connected by three strong links, forming a strong-anchored cluster. They collectively generated $50,134 in transactions, share one coupon, and exhibit a return rate of 18.2% and a chargeback rate of 9.1%.",
177
+ "llm_confidence_statement": "The model assigns a 99.7% probability that this cluster is high risk.",
178
  "action_taken": null,
179
+ "timestamp": "2026-08-23T03:32:01.753802+00:00"
180
  },
181
  {
182
  "case_id": "CASE12",
 
188
  ],
189
  "risk_probability": 0.9867466290228035,
190
  "policy_decision": "auto_hold",
191
+ "llm_narrative": "The three customers (CUST0501, CUST0502, CUST0503) are connected by three strong links, forming a strong‑anchored cluster. They share one coupon, have a combined transaction amount of $19,800, and exhibit a 16.7% return and chargeback rate each.",
192
+ "llm_confidence_statement": "The model assigns a risk probability of 98.7%, indicating very high confidence in the high‑risk classification.",
193
  "action_taken": null,
194
+ "timestamp": "2026-08-23T03:32:08.061818+00:00"
195
  },
196
  {
197
  "case_id": "CASE13",
 
221
  "llm_narrative": null,
222
  "llm_confidence_statement": null,
223
  "action_taken": null,
224
+ "timestamp": "2026-08-23T03:32:08.070482+00:00"
225
  },
226
  {
227
  "case_id": "CASE14",
 
274
  "llm_narrative": null,
275
  "llm_confidence_statement": null,
276
  "action_taken": null,
277
+ "timestamp": "2026-08-23T03:32:08.081604+00:00"
278
  },
279
  {
280
  "case_id": "CASE15",
 
317
  "llm_narrative": null,
318
  "llm_confidence_statement": null,
319
  "action_taken": null,
320
+ "timestamp": "2026-08-23T03:32:08.090328+00:00"
321
  },
322
  {
323
  "case_id": "CASE16",
 
380
  "llm_narrative": null,
381
  "llm_confidence_statement": null,
382
  "action_taken": null,
383
+ "timestamp": "2026-08-23T03:32:08.100577+00:00"
384
  },
385
  {
386
  "case_id": "CASE17",
 
432
  "llm_narrative": null,
433
  "llm_confidence_statement": null,
434
  "action_taken": null,
435
+ "timestamp": "2026-08-23T03:32:08.111572+00:00"
436
  },
437
  {
438
  "case_id": "CASE18",
 
483
  "llm_narrative": null,
484
  "llm_confidence_statement": null,
485
  "action_taken": null,
486
+ "timestamp": "2026-08-23T03:32:08.120050+00:00"
487
  },
488
  {
489
  "case_id": "CASE19",
 
540
  "llm_narrative": null,
541
  "llm_confidence_statement": null,
542
  "action_taken": null,
543
+ "timestamp": "2026-08-23T03:32:08.126760+00:00"
544
  },
545
  {
546
  "case_id": "CASE20",
 
576
  "llm_narrative": null,
577
  "llm_confidence_statement": null,
578
  "action_taken": null,
579
+ "timestamp": "2026-08-23T03:32:08.137991+00:00"
580
  },
581
  {
582
  "case_id": "CASE21",
 
623
  "llm_narrative": null,
624
  "llm_confidence_statement": null,
625
  "action_taken": null,
626
+ "timestamp": "2026-08-23T03:32:08.147707+00:00"
627
  },
628
  {
629
  "case_id": "CASE22",
 
669
  "llm_narrative": null,
670
  "llm_confidence_statement": null,
671
  "action_taken": null,
672
+ "timestamp": "2026-08-23T03:32:08.154043+00:00"
673
  },
674
  {
675
  "case_id": "CASE23",
 
699
  "llm_narrative": null,
700
  "llm_confidence_statement": null,
701
  "action_taken": null,
702
+ "timestamp": "2026-08-23T03:32:08.167111+00:00"
703
  },
704
  {
705
  "case_id": "CASE24",
 
749
  "llm_narrative": null,
750
  "llm_confidence_statement": null,
751
  "action_taken": null,
752
+ "timestamp": "2026-08-23T03:32:08.191950+00:00"
753
  },
754
  {
755
  "case_id": "CASE25",
 
787
  "llm_narrative": null,
788
  "llm_confidence_statement": null,
789
  "action_taken": null,
790
+ "timestamp": "2026-08-23T03:32:08.198347+00:00"
791
  },
792
  {
793
  "case_id": "CASE26",
 
803
  "llm_narrative": null,
804
  "llm_confidence_statement": null,
805
  "action_taken": null,
806
+ "timestamp": "2026-08-23T03:32:08.205211+00:00"
807
  },
808
  {
809
  "case_id": "CASE27",
 
819
  "llm_narrative": null,
820
  "llm_confidence_statement": null,
821
  "action_taken": null,
822
+ "timestamp": "2026-08-23T03:32:08.214578+00:00"
823
  },
824
  {
825
  "case_id": "CASE28",
 
835
  "llm_narrative": null,
836
  "llm_confidence_statement": null,
837
  "action_taken": null,
838
+ "timestamp": "2026-08-23T03:32:08.254596+00:00"
839
  }
840
  ]