SivaSaiBharath/Fraud-Detection-Engine
GitHub: SivaSaiBharath/Fraud-Detection-Engine
基于 Spring Boot 的实时交易欺诈检测引擎,采用可扩展策略模式实现可插拔规则评估与账户自动锁定。
Stars: 0 | Forks: 0
# 交易监控 — 欺诈检测引擎
这是一个 Spring Boot 服务,它可以实时根据可配置的欺诈规则评估传入的交易,发出警报,并在检测到高严重性违规时自动锁定账户。
## 概述
提交给系统的每笔交易都会:
1. 被保存为 `PENDING` 状态
2. 检查该账户的当前状态(如果账户已经是 `LOCKED` 状态则立即拒绝)
3. 由可插拔的规则引擎进行评估
4. 根据结果更新为 `SUCCESS`、`FLAGGED` 或 `REJECTED`
5. 如果违反了任何规则,将作为一条或多条 `Alert` 记录进行日志记录
发生 `HIGH` 严重性违规的账户将被自动锁定,在手动解锁之前,该账户的所有未来交易都将被阻止。
## 架构
```
TransactionController
│
▼
TransactionService
│
├── TransactionRepository (persist transaction)
├── AccountsRepository (fetch / lock account)
├── RuleEngine (evaluate fraud rules)
│ │
│ └── List (auto-injected by Spring)
│ ├── HighAmountRule
│ └── ... (add more rules here)
│
└── AlertsRepository (persist violations)
```
### 规则引擎
`RuleEngine` 是一个 `@Component`,在其构造函数中接收一个 `List`。Spring 会自动收集应用程序上下文中每个带有 `@Component` 注解的 `FraudRule` 实现并将它们注入 —— 无需手动连接。添加新的欺诈检查非常简单,只需创建一个实现 `FraudRule` 的新类即可。
```
public interface FraudRule {
RuleViolation check(Transaction txn, Accounts account);
}
```
`RuleEngine.evaluate(txn, account)` 会通过每个已注册的规则运行交易和账户,并将所有触发的违规收集到一个 `List` 中。
## 实体
| 实体 | 表 | 用途 |
|---|---|---|
| `Transaction` | `transaction` | 单个借记/贷记请求,具有状态生命周期 |
| `Accounts` | `accounts` | 账户余额、持有人信息和锁定状态 |
| `Alerts` | `alerts` | 每次规则违规对应一行记录,关联到某笔交易 |
### 交易状态生命周期
```
PENDING → SUCCESS (no violations)
PENDING → FLAGGED (violation(s), action = ALERT_ONLY)
PENDING → REJECTED (violation with action = LOCK_ACCOUNT,
OR account already LOCKED)
```
### 账户状态
```
ACTIVE → LOCKED (triggered by any HIGH severity violation)
```
## 欺诈规则
| 规则 | 触发条件 | 严重性 | 操作 |
|---|---|---|---|
| `HighAmountRule` | `amount > 50000` | `MEDIUM` | `ALERT_ONLY` |
## API
### `POST /requestTxn`
提交一笔新交易进行欺诈评估。
**请求体**
```
{
"accountId": 1,
"amount": 75000.00,
"type": "DEBIT",
"location": "Hyderabad"
}
```
**响应**
```
{
"id": 6,
"accountId": 1,
"amount": 75000.0,
"type": "DEBIT",
"location": "Hyderabad",
"status": "FLAGGED",
"flagged": true,
"timestamp": "2026-06-21T23:49:13.7073483"
}
```
如果账户已经是 `LOCKED` 状态,交易将被立即拒绝且不会评估任何规则:
```
{
"id": 7,
"status": "REJECTED",
"flagged": false
}
```
## 技术栈
- Java + Spring Boot
- Spring Data JPA / Hibernate
- MySQL
- Lombok
## 快速开始
1. 在 `application.properties`(或 `.yml`)中配置你的 MySQL 连接:
spring.datasource.url=jdbc:mysql://localhost:3306/transaction_monitor
spring.datasource.username=your_username
spring.datasource.password=your_password
spring.jpa.hibernate.ddl-auto=update
2. 构建并运行:
./mvnw spring-boot:run
3. 发送一笔测试交易:
curl -X POST http://localhost:8080/requestTxn \
-H "Content-Type: application/json" \
-d '{"accountId":1,"amount":75000.00,"type":"DEBIT","location":"Hyderabad"}'
## 路线图
- [ ] 附加的欺诈规则(频率检查、地理位置不匹配、异常时间段)
- [ ] 统一严重性与操作作为账户锁定的单一事实来源
- [ ] 用于手动解锁账户的端点
- [ ] 用于列出/解决警报的端点
- [ ] `/requestTxn` 上的身份验证
## 说明
这是一个学习/作品集项目,用于展示 Spring Boot 中的可插拔规则引擎模式 —— 而非生产级别的强健欺诈检测系统。账户查找仅在服务端通过 `accountId` 进行;账户状态绝不从请求体中获取。
标签:JS文件枚举, Spring Boot, 云计算, 反欺诈, 域名枚举, 实时交易监控, 规则引擎