dhruva8405/Tender-Trace
GitHub: dhruva8405/Tender-Trace
基于图数据库的印度政府采购欺诈检测平台,通过交叉分析公司注册、政治人物资产申报和采购合同数据,自动识别空壳公司和利益关联网络。
Stars: 0 | Forks: 0
# Tender Trace
## 🌐 在线站点
**[https://main.d2u2jsoniy7sml.amplifyapp.com](https://main.d2u2jsoniy7sml.amplifyapp.com)**
**黑客马拉松:** AI ASCEND 2026 · AWS & Kyndryl · Saveetha Engineering College
**日期:** 2026 年 3 月 7 日至 8 日
## Tender Trace 的功能
Tender Trace 交叉引用**三个开放的印度政府数据库** —— MCA21(公司注册)、MyNeta(政治人物 ECI 宣誓书)和 GeM(政府采购合同) —— 并在 Amazon Neptune 上构建**属性图**,以自动揭示可疑的供应商集群。
每个风险评分均由 **5 个确定性的 Gremlin 规则遍历** 生成 —— 无需机器学习,完全可审计。Amazon Bedrock (Claude 3 Haiku) 以通俗易懂的英语为部委监察官员叙述每一个发现。
## 架构
```
MCA21 + MyNeta + GeM
│
AWS Glue ETL (DIN entity resolution)
│
Amazon S3 (processed Parquet)
│
Amazon Neptune (Property Graph)
│
risk_scorer Lambda (5 Gremlin rules)
│
narrator Lambda (Bedrock · Claude 3 Haiku)
│
API Gateway → React Frontend (Amplify)
```
## 5 条警示规则
| # | 规则 | 标记 | 权重 |
|---|------|------|--------|
| 1 | 公司在首份合同签署前 < 90 天注册 | `FLAG_NEW_COMPANY` | +20 |
| 2 | 多个供应商共用一个注册地址 | `FLAG_SHARED_ADDRESS` | +20 |
| 3 | 董事在多个相互竞争的供应商董事会任职 | `FLAG_SHARED_DIRECTOR` | +25 |
| 4 | 董事是现任政治人物的已申报家庭成员 | `FLAG_POLITICAL_LINK` | +25 |
| 5 | 合同价值 > 实缴资本的 30 倍 | `FLAG_CAPITAL_MISMATCH` | +10 |
### 评分解读
每条规则针对**每个供应商**评估一次。触发的权重相加得出 0–100 的评分:
| 评分 | 等级 | 操作 |
|-------|-------|--------|
| 0–30 | 低 | 无需操作 |
| 31–60 | 中 | 监控并标记以定期审查 |
| 61–100 | 高 | 建议立即转介至部委监察部门 |
**示例:** 供应商 C001 触发了 `FLAG_NEW_COMPANY` (+20)、`FLAG_SHARED_ADDRESS` (+20)、`FLAG_SHARED_DIRECTOR` (+25) 和 `FLAG_POLITICAL_LINK` (+25) = **90/100 → 高风险**。
## 项目结构
```
├── frontend/ # React + Vite SPA
│ └── src/pages/ # Dashboard, VendorSearch, Analytics, GraphView, Pipeline
├── lambdas/
│ ├── risk_scorer/ # Gremlin rule engine (Neptune)
│ ├── data_ingestion/ # CSV → Neptune graph builder
│ └── narrator/ # Bedrock AI narration
├── glue/ # Glue ETL Spark job (entity resolution)
├── data/ # Demo CSVs (MCA21, MyNeta, GeM)
├── tests/ # Unit tests for all 5 rules
├── run_pipeline.py # One-click local end-to-end test
└── requirements.txt # Python dependencies
```
## 本地运行
### 前端
```
cd frontend
npm install
npm run dev
# → http://localhost:5173
```
### 后端(Lambda — 本地模式)
```
# 安装 Python 依赖项
pip install -r requirements.txt
# 在 local mode 下运行 risk scorer (使用 CSV 文件代替 Neptune)
cd lambdas/risk_scorer
LOCAL_MODE=true python lambda_function.py
```
`LOCAL_MODE=true` 使 Lambda 从 `data/*.csv` 文件读取数据,而不是查询 Amazon Neptune。本地测试无需 AWS 凭证。
### 运行测试
```
cd tests
python -m pytest test_risk_rules.py -v
```
### 将前端连接到后端
在生产环境中,前端调用 API Gateway 端点。对于本地开发,前端使用硬编码的演示数据 (`src/data.js`) —— 无需后端连接。
在 `.env` 中设置 `VITE_API_URL`,使其指向您部署的 API Gateway 端点以进行生产构建。
## 使用的 AWS 服务
- **Amazon Neptune** — 属性图数据库 (Gremlin)
- **Amazon S3** — 原始 CSV 暂存 + 已处理的 Parquet 存储
- **AWS Lambda** — 无服务器规则引擎 + AI 叙述
- **AWS Glue ETL** — 数据摄取 + DIN 实体解析
- **Amazon Bedrock** — Claude 3 Haiku AI 叙述
- **API Gateway** — 前端 REST API
- **AWS Amplify** — 前端托管
## 数据源 / API
| 来源 | 用途 | 链接 |
|--------|---------|------|
| **MyNeta API** | 政治人物宣誓书数据 (ECI) —— 家庭申报、资产 | [nini1294/myneta_api](https://github.com/nini1294/myneta_api) |
| **MCA21** | 公司注册数据 —— 董事、DIN、注册日期 | [mca.gov.in](https://www.mca.gov.in) |
| **GeM Portal** | 政府电子市场合同授予数据 | [gem.gov.in](https://gem.gov.in) |
## 演示数据集
该演示模拟了一个虚构的采购欺诈场景 —— 一群共用一个地址、拥有共同董事且存在政治关联的供应商 —— 以展示 Tender Trace 的图遍历引擎如何检测串通投标的模式。
在供应商扫描页面中尝试供应商 ID `C001`–`C008`,以探索不同的风险概况。
## 许可证
为 AI ASCEND 2026 构建。用于教育和演示目的。
标签:Amazon Amplify, Amazon Neptune, AWS Bedrock, AWS Glue, Claude 3 Haiku, DLL 劫持, ETL, GeM, JavaCC, Lambda, MCA21, Parquet, React, Syscalls, 人工智能, 公共采购, 利益冲突检测, 印度政府, 反腐败, 合规科技, 图遍历, 大语言模型, 实体解析, 尽职调查, 政治关联分析, 数据交叉引用, 用户模式Hook绕过, 空壳公司识别, 逆向工具, 采购欺诈检测, 金融犯罪, 风险缓解, 风险评分, 黑客马拉松