Skip to content

开发文档

版本号修改修改时间备注
v1.0.0王小琱2024.12.20初次修订

1. 项目简介

  • 服务名称exchange-risk-service-backend
  • 服务描述:本项目为交易所、金融等业务提供KYC、风控、合规、反洗钱等能力,支持多种KYC流程、风控规则、专业投资者认证、企业及个人信息管理等功能。
  • 所属模块:风控与合规服务组件。
  • 负责人:王小琱(wang746277441@gmail.com

2. 功能描述

  • 用户KYC认证(个人/企业)
  • 风控事件与规则管理
  • 专业投资者认证
  • 反洗钱(AML)信息管理
  • 风控审核流程与记录
  • 附件、声明、协议签名等合规材料管理
  • 支持多角色(用户、审核员、管理员)操作
  • 支持多种风控、合规业务场景的快速接入

3. 系统架构

3.1 主要技术栈

备注:具体依赖版本详见go.mod文件。

3.2 架构图

3.3.1 Risk Task 架构图

3.2.2 Risk提供服务架构图

3.3 架构概括

  • 业务层(Business Layer)

    包含 Risk Service 和 Risk Task Service:

    • Risk Service:主要提供KYC认证与审核管理,并提供接口供业务系统和后台管理系统调用。
    • Risk Task Service:监听 Camunda 流程引擎,处理来自流程的风控查询任务,请求外部服务并返回结果,支持失败任务持久化和定时重试机制。
  • 基础服务层(Infrastructure Layer)

    包含以下基础能力服务:

    • Camunda:流程引擎,负责驱动风控任务流的执行。
    • MySQL:用于存储风控结果、查询任务记录、失败任务等持久化数据。
    • 外部服务(EllipticBridge、Notabene 等):提供 KYA/KYT/Travel Rule 数据查询能力。

3.4 业务流程

3.4.1 查询KYA/KYT/Travel Rule流程

3.4.2 KYC创建以及审核流程

4. 依赖组件

组件版本说明
MySQL8.x关系型数据库
Camunda-流程引擎
EllipticBridge-外部服务
Notabene-外部服务
User-外部服务
BankBridge-外部服务
LedgerManager-外部服务
Notify-外部服务
RabbitMQ-消息队列
Redis-缓存

5. 接口设计

接口文档

使用make doc可以重新生成接口文档。

6. 数据库设计

数据库设计文档

7. 项目部署

部署文档

8. 错误码定义

错误码错误信息说明
ErrSystem系统错误数据库、内部服务、未知异常
ErrParam参数错误请求参数校验失败
ErrKYCNotFoundKYC不存在未找到对应KYC信息
ErrKYCStateKYC状态异常当前KYC状态不允许此操作
ErrKycNotCompletedKYC未完成KYC流程未完成,无法进行后续操作
ErrKYCAuditRole审核角色错误审核人角色与流程要求不符
ErrProfessionalState专业投资者状态异常专业投资者信息不存在或状态异常
ErrCompanyInfoState企业信息状态异常企业信息未完善
ErrConnectPartyState关联方信息状态异常关联方信息未完善
ErrSignatureNotFound签名信息不存在未找到签名信息
ErrSignatureNotMatch签名与实名不匹配签名与实名信息不一致
ErrPersonalInfoNotFound个人信息不存在未找到个人信息
ErrAddressInfoNotFound地址信息不存在未找到地址信息
ErrCompanyInfoNotFound公司信息不存在未找到公司信息
ErrConnectedPartyInfoNotFound关联方信息不存在未找到关联方信息
ErrQAData问卷数据异常投资问卷等相关数据异常
ErrQADataNotFound问卷数据不存在未找到投资问卷数据
ErrCallWorldCheck外部合规服务调用失败WorldCheck等外部服务异常
ErrTravelRuleMessageTravelRule消息类型错误TravelRule回调消息类型不符
ErrTravelRuleStateTravelRule状态错误TravelRule回调状态不符
ErrFileUpload文件上传失败附件上传或处理失败
ErrDuplicate数据重复唯一性约束冲突
ErrTimeout超时操作超时
ErrUnmarshal数据解析失败JSON/结构体解析失败
ErrExternalService外部服务错误第三方服务调用失败

9. FAQ

1. 如何提交个人或企业KYC?
通过 /api/kyc/submit 或相关接口提交个人/企业KYC资料,需按要求填写所有必填信息并上传相关附件。

2. KYC审核流程是怎样的?
用户提交KYC后,系统会根据配置流转到相应审核员或管理员进行审核。审核员可通过管理端接口(如 /admin/kyc/audit)进行审核操作,审核结果会同步更新KYC状态。

3. 为什么KYC审核被拒绝?
常见原因包括:资料不全、信息不一致、风控规则不通过、合规材料缺失等。可通过接口返回的错误信息或联系管理员获取详细原因。

4. 如何查询KYC或风控审核进度?
可通过 /api/kyc/status/admin/kyc/list 等接口查询KYC状态和审核记录。

5. 专业投资者认证如何提交和审核?
用户可通过相关接口提交专业投资者材料,管理员通过 /admin/professional_investor/audit 等接口进行审核,审核通过后状态会更新。

6. 附件、声明等合规材料如何上传?
通过 /api/files/upload 或相关接口上传,需确保文件格式和大小符合要求。

7. 系统返回“状态异常”或“权限不足”怎么办?
请检查当前操作用户的角色和KYC/风控流程状态,部分操作仅限特定角色或特定状态下进行。

8. 如何处理“系统错误”或“数据库错误”?
请重试操作,如多次失败请联系技术支持或管理员,查看日志定位具体原因。

9. 如何扩展风控规则或KYC流程?
可在 /internal/repository/entity 和 service 层新增规则定义和处理逻辑,handler 层暴露管理接口。

10. 外部服务(如WorldCheck、TravelRule)调用失败怎么办?
请检查外部服务配置、网络连通性和密钥有效性,查看接口返回的详细错误信息。

11. 如何添加/修改数据库表结构?
修改 /internal/repository/entity 下对应 go 文件,并同步更新数据库结构,详见数据库设计文档。

如有其他问题,请联系项目负责人或查阅详细开发文档。

🚀 构建现代化数字资产交易平台