File size: 4,704 Bytes
7f10b99
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
"""FraudSimulator-AI - Fraud Detection System

Built using BDR Agent Factory v1
"""

import gradio as gr
from typing import Tuple
from agents.pattern_agent import PatternAnalysisAgent
from agents.anomaly_agent import AnomalyDetectionAgent
from agents.risk_scoring_agent import RiskScoringAgent
from governance.fraud_audit_logger import FraudAuditLogger
from governance.fraud_trace import FraudDetectionTrace


class FraudSimulatorAI:
    def __init__(self):
        self.pattern_agent = PatternAnalysisAgent()
        self.anomaly_agent = AnomalyDetectionAgent()
        self.risk_agent = RiskScoringAgent()
        self.audit_logger = FraudAuditLogger()
        self.trace = FraudDetectionTrace()
    
    def analyze_fraud(
        self,
        claim_id: str,
        claim_amount: float,
        prior_claims: int,
        fraud_flag: bool
    ) -> Tuple[str, str, str]:
        self.trace.start_trace(claim_id)
        
        claim_data = {"claim_id": claim_id, "claim_amount": claim_amount}
        historical_data = {"prior_claims": prior_claims, "fraud_flag": fraud_flag}
        
        pattern_results = self.pattern_agent.process(claim_data, historical_data)
        self.trace.add_step("pattern_analysis", pattern_results)
        
        anomaly_results = self.anomaly_agent.process(claim_data, historical_data)
        self.trace.add_step("anomaly_detection", anomaly_results)
        
        final_results = self.risk_agent.process(pattern_results, anomaly_results)
        self.trace.add_step("risk_scoring", final_results)
        
        audit_id = self.audit_logger.log_fraud_assessment(
            claim_id,
            final_results["fraud_score"],
            final_results["risk_level"],
            final_results["fraud_indicators"],
            final_results["recommended_action"]
        )
        
        score_text = f"**Fraud Score:** {final_results['fraud_score']:.1%}\n**Risk Level:** {final_results['risk_level'].upper()}"
        
        indicators_text = "**Fraud Indicators:**\n"
        if final_results['fraud_indicators']:
            indicators_text += "- " + "\n- ".join(final_results['fraud_indicators'])
        else:
            indicators_text += "No fraud indicators detected"
        
        indicators_text += f"\n\n**Recommended Action:**\n{final_results['recommended_action']}"
        
        if final_results['requires_investigation']:
            indicators_text += "\n\n⚠️ **Investigation Required**"
        
        audit_text = f"""**Audit Trail**

Audit ID: {audit_id}
Trace ID: {self.trace.get_trace()['trace_id']}

**Analysis Pipeline:**
1. βœ“ Pattern Analysis Agent
2. βœ“ Anomaly Detection Agent
3. βœ“ Risk Scoring Agent

**Compliance:** FRAUD_AUDIT | INVESTIGATION_READY
"""
        
        return score_text, indicators_text, audit_text


app = FraudSimulatorAI()

with gr.Blocks(title="FraudSimulator-AI", theme=gr.themes.Soft()) as demo:
    gr.Markdown(
        """
        # πŸ” FraudSimulator-AI
        ## AI-Powered Fraud Detection System
        
        **+15% precision improvement | Real-time scoring | Investigation routing**
        
        *Built using [BDR Agent Factory v1](https://huggingface.co/spaces/bdr-ai-org/BDR-Agent-Factory)*
        """
    )
    
    with gr.Row():
        with gr.Column(scale=1):
            gr.Markdown("### πŸ“‹ Claim Information")
            claim_id = gr.Textbox(label="Claim ID", value="CLM-FRAUD-001")
            claim_amount = gr.Number(label="Claim Amount ($)", value=5000.00)
            
            gr.Markdown("### πŸ“Š Historical Context")
            prior_claims = gr.Slider(label="Prior Claims", minimum=0, maximum=10, value=1, step=1)
            fraud_flag = gr.Checkbox(label="Previous Fraud Flag", value=False)
            
            analyze_btn = gr.Button("πŸ” Analyze Fraud Risk", variant="primary", size="lg")
        
        with gr.Column(scale=1):
            gr.Markdown("### 🎯 Fraud Analysis")
            score_output = gr.Textbox(label="Fraud Score & Risk Level", lines=2)
            indicators_output = gr.Textbox(label="Fraud Indicators", lines=8)
            audit_output = gr.Textbox(label="Audit Trail", lines=8)
    
    gr.Examples(
        examples=[
            ["CLM-FRAUD-001", 5000.00, 1, False],
            ["CLM-FRAUD-002", 15000.00, 4, True],
            ["CLM-FRAUD-003", 10000.00, 2, False],
        ],
        inputs=[claim_id, claim_amount, prior_claims, fraud_flag]
    )
    
    analyze_btn.click(
        fn=app.analyze_fraud,
        inputs=[claim_id, claim_amount, prior_claims, fraud_flag],
        outputs=[score_output, indicators_output, audit_output]
    )

if __name__ == "__main__":
    demo.launch()