# KYC (Know Your Customer) 模块 ## 概述 KYC 模块是 AML (Anti-Money Laundering) 系统的核心组成部分,用于对客户进行身份验证和合规检查。系统支持个人(Individual)和企业(Organization)两种实体类型。 ## 目录结构 ### 后端 (AML_Backend) ``` modules/iCON.Abp.AML/ ├── src/ │ ├── iCON.Abp.AML.Application/ │ │ └── KYC/ │ │ ├── KYCService.cs # 核心KYC服务 │ │ ├── HandlerService.cs # 证件处理器服务 │ │ ├── XiangyunService.cs # 祥云OCR识别服务 │ │ ├── WebSearchService.cs # 失信人网络搜索 │ │ ├── CardInfoContentReader.cs # 卡片信息读取 │ │ ├── CertificateEntityValueFinder.cs │ │ ├── ElasticResultJsonReader.cs │ │ ├── TranslateMapper.cs │ │ ├── JsonContentReader.cs # JSON内容读取器 │ │ ├── RealHttpClient.cs # HTTP客户端实现 │ │ ├── XiangyunCartTypeCodeConverter.cs # 祥云证件类型转换器 │ │ ├── MockKYCService.cs # KYC模拟服务(测试用) │ │ └── MockHandlerService.cs # 处理器模拟服务 │ ├── iCON.Abp.AML.Application.Contracts/ │ │ └── KYCAppLayer/ │ │ ├── IKYCService.cs # KYC服务接口 │ │ ├── ScanCertificateDto.cs │ │ ├── CertificateHandleDto.cs │ │ └── ... │ ├── iCON.Abp.AML.Domain/ │ │ └── KYC/ │ │ ├── KYCSetting.cs # KYC设置实体 │ │ ├── KYCCheckResultRecord.cs # KYC检查结果记录 │ │ ├── CertificateValidateRecord.cs │ │ ├── ScanAndValidateSetting.cs │ │ └── AttachmentFileSetting.cs │ └── iCON.Abp.AML.HttpApi/ │ └── Controllers/ │ └── KYCController.cs # API控制器 └── test/ └── iCON.Abp.AML.Application.Tests/ └── TestKYCService_*.cs # KYC单元测试 ``` ### 前端 (AML_Frontend) ``` AML_Frontend/src/app/ ├── services/ │ └── aml-kyc.service.ts # KYC服务 ├── util/interfaces/ │ └── aml-kyc.ts # KYC接口定义 └── components/ └── components-viewer/ └── viewer-customer-info/ └── components/ └── kyc-section/ # KYC区域组件 └── components-form/ └── form-kyc-org-inv/ # 企业KYC表单 ``` ## 支持的证件类型 证件类型配置位于: `AML_Backend/src/iCON.Abp.FX.HttpApi.Host/appsettings.json` 的 `CertificateMappings` 节点 ### 配置结构示例 ```json { "AMLConfig": { "CertificateMappings": [ { "CertificateCode": "IDCard_CHN", "EntityType": "Individual", "Description": "中国居民身份证" } ] } } ``` ### 个人证件 (Individual) | 证件类型 | 代码 | 说明 | |---------|------|------| | 中国居民身份证 | IDCard_CHN | 支持2012版 | | 香港居民身份证 | IDCard_HKG | 支持2003/2018版 | | 护照 | Passport_* | 支持多国护照 (USA, VNM, CHN, DEU, GBR, TWN等) | | 旅行证 | Travel_Permit_* | 往来内地/港澳通行证等 | ### 企业证件 (Organization) | 证件类型 | 代码 | 说明 | |---------|------|------| | 香港公司注册证书 | ORG_HKG | BR (Business Registration) | | 香港公司CI | ORG_HKG_CI | 公司注册证明书 | | 中国企业证件 | ORG_CHN | | ## API 接口 基础路径: `/api/aml/kyc` ### 证件扫描 | 接口 | 方法 | 说明 | |------|------|------| | `/ScanCertificate` | POST | 扫描证件 (v1) | | `/ScanCertificateV2` | POST | 扫描证件 (v2) | ### 证件处理 | 接口 | 方法 | 说明 | |------|------|------| | `/CertificateHandle` | POST | 证件识别/验证/失信人检测 | | `/ValidateCredit` | POST | 征信查询 | | `/GetLastValidateCredit` | POST | 获取上次征信结果 | ### 设置管理 | 接口 | 方法 | 说明 | |------|------|------| | `/GetScanAndValidateSetting` | POST | 获取扫描/验证设置 | | `/UpdateScanAndValidateSetting` | POST | 更新扫描/验证设置 | | `/GetAttachmentFileSetting` | POST | 获取附件文件设置 | | `/UpdateAttachmentFileSetting` | POST | 更新附件文件设置 | ### KYC 结果 | 接口 | 方法 | 说明 | |------|------|------| | `/GetKYCCheckResult` | POST | 获取KYC检查结果 | | `/SaveKYCCheckResult` | POST | 保存KYC检查结果 | | `/ReCheckKYCStatus` | POST | 重新检查KYC状态 | | `/GetReportIndividualKYCCheckResult` | POST | 获取个人KYC报告 | | `/GetReportOrganizationKYCCheckResult` | POST | 获取企业KYC报告 | ### 证件记录管理 | 接口 | 方法 | 说明 | |------|------|------| | `/GetValidateCertificateRecords` | POST | 获取证件验证记录 | | `/BindValidateCertificateRecords` | POST | 绑定证件验证记录 | ### 证件类型查询 | 接口 | 方法 | 说明 | |------|------|------| | `/GetIndividualSupportCertificate` | POST | 获取个人支持的证件类型 | | `/GetOrganizationSupportCertificate` | POST | 获取企业支持的证件类型 | ### 附件验证 | 接口 | 方法 | 说明 | |------|------|------| | `/ValidateAttachment` | POST | 验证附件 | ### 外部 API | 接口 | 方法 | 说明 | |------|------|------| | `/openApi/kycCertificateVerify` | POST | 外部证件验证 | | `/openApi/kycQueryCredit` | POST | 外部征信查询 | ## 核心流程 ### 证件扫描 (ScanCertificateV2) ``` 用户上传证件图片 ↓ 调用 OCR 服务识别证件内容 ↓ 提取证件信息 (姓名、证件号、有效期等) ↓ 返回识别结果 ``` ### 证件处理 (CertificateHandle) ``` 传入 EntityInfo + KYCCertificateCode + HandlerCodes ↓ 根据 HandlerCodes 执行对应处理器: - ValidateIDCard: 身份证验证 - ValidateBR: 商业登记证验证 - ValidateCredit: 失信人检测 - ScanCertificate: 证件扫描 ↓ 返回处理结果 (IsValidated, SourceResult 等) ``` ### KYC 状态检查 ``` 获取实体 (Individual/Organization) ↓ 检查所需证件是否齐全 ↓ 验证证件有效性 ↓ 检测失信人名单 ↓ 返回 KYC 状态评级 (RatingEnum) ``` ## 关键服务 ### KYCService 核心服务类,负责协调各子服务完成KYC流程。 ### HandlerService 证件处理器,根据不同证件类型调用对应的验证服务。 ### XiangyunService 调用祥云OCR服务进行证件识别。 ### WebSearchService 执行网络搜索检测实体是否在失信人名单中。 ### JsonContentReader JSON内容读取器,用于解析各种JSON格式的响应数据。 ### RealHttpClient HTTP客户端实现,用于与外部服务进行通信。 ### XiangyunCartTypeCodeConverter 祥云证件类型转换器,用于转换祥云OCR服务的证件类型代码。 ## 证件映射实现 证件类型映射通过 `CertificateMappings.cs` 类实现,该类定义了系统支持的所有证件类型及其属性: - **CertificateCode**: 证件类型代码 - **EntityType**: 实体类型 (Individual/Organization) - **Description**: 证件描述 - **SupportedCountries**: 支持的国家/地区 - **ValidationRules**: 验证规则 ## 数据模型 ### KYCSetting 存储租户的KYC配置,包括: - `AttachmentFileSetting`: 附件文件设置 - `ScanAndValidateSetting`: 扫描验证设置 ### KYCCheckResultRecord 存储KYC检查结果记录,关联到具体实体。 ### CertificateValidateRecord 存储证件验证记录,包含验证状态和来源结果。 ## 前端集成 ```typescript import { AmlKycService } from '@/services/aml-kyc.service'; constructor(private kycService: AmlKycService) {} // 扫描证件 this.kycService.scanCertificateV2(params); // 获取KYC结果 this.kycService.getKYCCheckResult(entityId); ``` ## 版本信息 **文档版本**: v1.1 **最后更新**: 2026-04-30 **适用系统版本**: AML Backend v2.x ## 更新日志 ### v1.1 (2026-04-30) - 修正证件映射配置文件路径 - 补充完整的KYC服务文件列表 - 添加证件映射实现说明 - 完善API接口分类 - 更新测试文件列表 - 添加配置结构示例 ### v1.0 (初始版本) - 基础KYC模块文档 - 核心功能说明 - API接口定义 - 数据模型描述 ## 测试 测试文件位于: `modules/iCON.Abp.AML/test/iCON.Abp.AML.Application.Tests/` ### 测试文件列表 - `TestKYCService_Base.cs` - KYC测试基类 - `TestKYCService_ScanCertificate.cs` - 证件扫描测试(v1) - `TestKYCService_ScanCertificateV2.cs` - 证件扫描测试(v2) - `TestKYCService_ScanCertificateV2_OCR.cs` - OCR识别测试 - `TestKYCService_ScanCertificateV2_OCR_Passport.cs` - 护照OCR测试 - `TestKYCService_GetAttachmentFileSettingAsync.cs` - 附件设置测试 - `TestKYCService_GetScanAndValidateSettingAsync.cs` - 扫描验证设置测试 ### 测试覆盖范围 - 证件扫描和识别 - OCR服务集成 - 设置管理 - 验证流程 - Mock服务测试