② 授信
产品定义:BVN/NIN 核验 → 个人信息 → 工作收入 → 紧急联系人 → 人脸识别 → 确认提交 → 授信审批。图例与服务名映射见 00-总览。
真实分支见下方「分支清单」(出处ApplyBusiness/BvnBusiness)。核验/判断环节多注释断裂——是本阶段核心结论。
时序
sequenceDiagram autonumber actor C as 客户 participant App as 客户端 H5/原生 participant GW as 业务网关 participant BNS as BNS 业务编排 participant FDS as FDS 反欺诈 participant EXT as 外部三方(Smile/Google) participant MISS as 未接下游(res/大数据/crs·注释) Note over C,MISS: ① 身份核验(verifyPersonalInfo) C->>App: 输入 BVN 或 NIN + 个人信息 App->>GW: POST /bns/apply/verifyPersonalInfo GW->>BNS: ApplyBusiness.verifyPersonalInfo alt 已认证(authIdentity 非空) Note over BNS: 直接 buildResponse 返回(含 creditStage),不可再认证 else 未认证 Note over BNS: 活跃 kycBvnMatch/kycDataPocket 仅构造本地 BnsBvnInfo, 不外呼 Note over BNS: ✗ 真实核验 queryBigdataBvn(大数据:127)/bankBvnMatch(银行卡:275) 整段注释 alt 自填姓名为空 Note over BNS: updateBvnInfoUser(BVN 回填) else 自填姓名非空(NIN 场景) Note over BNS: updateUser(身份类型 NIN, Goldman 页) end end Note over C,MISS: ② 人脸(faceDetection→applyFaceRecognition) C->>App: 活体 + 人脸 App->>GW: POST /bns/apply/faceDetection alt 已认证且非 FACE_CHECK 场景 Note over BNS: 直接返回 else Note over BNS: 人脸次数超限→BVN_FACE_FAILD,在途人脸 P 态→拒 Note over BNS: 设备检查 UF→faceScene=DEVICE_CHECK opt Google 审核员名单 Note over BNS: 跳过人脸检查, 直接建客 end Note over BNS: ✗ 人脸增强 enhanceFace 整段注释 BNS->>EXT: 活体检测(Smile 默认 / Google 渠道) alt 活体失败 Note over BNS: FAILED + CREDIT_STAGE_1 else 成功 Note over BNS: invokeCreateCustByFace 本地建客(BnsCust + 人脸记录) Note over MISS: ✗ 人脸风控图 uploadFaceImageforBvn 注释(目标 大数据/crs) Note over BNS: faceScene 非 FACE_CHECK 且非 DEVICE_CHECK 才 updateBlcUserInfo Note over BNS: 身份类型 NIN/BVN 分流,返回 creditStage end end Note over C,MISS: ③ 保存信息 + 发起授信(saveBaseInfo) C->>App: 工作/联系人等 + 提交 App->>GW: POST /bns/apply/saveBaseInfo BNS->>FDS: queryAccountIsFreeze(冻结校验, 内部闭环) ✓ Note over BNS: saveApply 落 BnsApplyMainCredit applyStatus=N(内部, 不进 FCS) BNS->>MISS: 风控决策 riskPrice Note over MISS: ✗ riskPrice 整段注释/TODO, 决策未接通(归 res)
分支清单(穷举授信全部分支)
出处 ApplyBusiness / BvnBusiness。状态:✓ 活跃 / ✗ 注释或缺失 / △ 外部依赖 / 待确认。
| # | 分支 | 触发条件 | 处理 | 出处 | 状态 |
|---|---|---|---|---|---|
| 1 | 未登录 | uid 无 user | NOT_LOGIN | ApplyBusiness:142 | ✓ |
| 2 | 已认证直返 | authIdentity 非空 | buildResponse(含 creditStage), 不可再认证 | :148 | ✓ |
| 3 | BVN 核验-活跃路径 | 未认证 | kycBvnMatch/kycDataPocket 仅构造本地 BnsBvnInfo | BvnBusiness:259 | ✗ 不外呼 |
| 4 | BVN 真实核验-大数据 | — | iBigdataClient.queryBigdataBvn | BvnBusiness:127 | ✗ 注释 |
| 5 | BVN 真实核验-银行卡 | — | imsServiceClient.bankBvnMatch | BvnBusiness:275 | ✗ 注释 |
| 6 | 回填 vs 自填 | 自填姓名空/非空 | updateBvnInfoUser(BVN 回填) / updateUser(自填) | ApplyBusiness:158 | ✓ |
| 7 | 身份类型 BVN/NIN | custId NIN 前缀 | identityType=NIN + Goldman 页(goldman_page_url_map/enable_goldman_page_switch) | QueryBusiness:386、ApplyBusiness:633 | ✓ |
| 8 | NIN 实名核验细节 | NIN 场景 | 疑经 Goldman 页/前端 NINIdentify(bank/ninMatch) | — | 待确认 |
| 9 | BVN 无数据异常 | 核验超时/异常 | MAKE_SURE_YOUR_BVN_NO_DATA | ApplyBusiness:167 | ✓ |
| 10 | 人脸-已认证直返 | authIdentity 非空且非 FACE_CHECK | 直接返回 | ApplyBusiness:198 | ✓ |
| 11 | 人脸次数超限 | 当日 > faceNumber | BVN_FACE_FAILD(DEVICE_CHECK 豁免) | :661 | ✓ |
| 12 | 在途人脸记录 | 最新记录 faceStatus=P | 拒(存在在途) | :673 | ✓ |
| 13 | 设备检查 UF | deviceCheckRecord=UF | faceScene=DEVICE_CHECK | :209 | ✓ |
| 14 | Google 审核员 | uid 在 googleReviewerUid 名单 | 跳过人脸检查直接建客 | :567 | ✓ |
| 15 | 人脸增强 | isNeedToCheckFace | enhanceFace(beforeFaceDetection) | :576 | ✗ 整段注释 |
| 16 | 活体渠道 | LiveDetectionWay | Google(liveDetectionChannel=Google) / 默认 Smile | :690 | ✓ |
| 17 | 活体失败 | createVerifyFaceReq 异常 | FAILED + CREDIT_STAGE_1 | :598 | ✓ |
| 18 | 人脸建客 | 活体成功 | invokeCreateCustByFace(bns 本地建客)→ resp null 则 FAILED | :616 | ✓ 本地 |
| 19 | 建客后更新用户 | faceScene 非 FACE_CHECK 且非 DEVICE_CHECK | updateBlcUserInfo | :627 | ✓ |
| 20 | 建客身份类型 | custId NIN/BVN 前缀 | 设 identityType + nin/bvn | :633 | ✓ |
| 21 | creditStage 返回 | 建客成功 | setStage(resp.creditStage), 阶段码 1/8/9/10 | :645、buildResponse:431 | ✓ |
| 22 | 设备检查建客 | UF 场景建客 | verifyToCreateNewCustByFace | :750 | ✓ |
| 23 | 冻结校验 | saveBaseInfo | queryAccountIsFreeze(FDS) | saveBasicInfo | ✓ |
| 24 | 落授信申请 | saveApply | BnsApplyMainCredit applyStatus=N(内部, 不进 FCS) | :1210 | ✓ |
| 25 | 风控决策 | 发起授信 | riskPrice(是否通过/给多少额度) | res | ✗ 注释/TODO |
接口落地
| # | 业务步骤 | 服务 | 真实接口 | 类型 | 现状 | 说明 |
|---|---|---|---|---|---|---|
| 1 | 身份核验+OTP | BNS | IApplyService.verifyPersonalInfo POST /bns/apply/verifyPersonalInfo | 端点 | ✓ | ApplyBusiness.verifyPersonalInfo;已认证直返(含 creditStage) |
| 2 | BVN 核验(活跃路径) | BNS | BvnBusiness.kycBvnMatch/kycDataPocket/kycBankNameMatch | 内部 | ✗ | 仅构造本地 BnsBvnInfo,不外呼无真实核验 |
| 3 | BVN 真实第三方核验 | 大数据/IMS | IBigdataClient.queryBigdataBvn(大数据:127) / IImsServiceClient.bankBvnMatch(银行卡:275) | 下游 | ✗ | 两处真实调用整段注释 |
| 4 | 身份类型 NIN 分支 | BNS | identityType=NIN + goldman_page_url_map/enable_goldman_page_switch | 内部 | ✓ | NIN 走 Goldman 页;实名核验细节待深入 |
| 5 | 人脸活体 | 外部 | IApplyService.faceDetection → applyFaceRecognition → Smile/Google | 端点+渠道 | △ | 活体渠道 Smile(默认)/Google;本地 verifyFaceRule 次数/在途校验 |
| 6 | 人脸增强 | — | enhanceFace | 内部 | ✗ | 整段注释 |
| 7 | 人脸建客 / 人脸风控图 | BNS 本地 / 大数据 | invokeCreateCustByFace(本地建客);uploadFaceImageforBvn(大数据人脸风控,注释) | 内部+下游 | ◐ | 建客本地活跃;人脸风控外呼注释 |
| 8 | 冻结校验 | FDS | queryAccountIsFreeze → IFdsServiceClient | 下游 | ✓ | saveBasicInfo 内真实调用 |
| 9 | 保存信息+发起授信 | BNS | IApplyService.saveBaseInfo POST /bns/apply/saveBaseInfo | 端点 | ✓ | saveApply 落本地 BnsApplyMainCredit(applyStatus=N),不调 FCS |
| 10 | 授信风控决策 | res | riskPrice(bns RiskPriceBusiness / fcs IRiskClient 均注释;ApplyBusiness callFace TODO) | 下游 | ✗ | 风控决策整体注释/TODO,未接通 |
缺口小结
授信阶段缺口集中且严重——信息采集与分支齐全,但核验与判断环节基本空转/注释:
- BVN/KYC 核验当前不做真实核验:活跃路径只构造本地对象不外呼;真实第三方调用(大数据
queryBigdataBvn:127、银行卡bankBvnMatch:275)整段注释。与改造方案”KYC/BVN 需在 crs 新建”一致。 - 身份类型 BVN/NIN 双分支真实存在(identityType 分流 + Goldman 页),但 NIN 实名核验细节(是否经 Goldman/前端 ninMatch)待深入——这是 13 早期版漏画的分支。
- 人脸:活体 Smile/Google 双渠道;
invokeCreateCustByFace是 bns 本地建客(非外部 Bridge);人脸增强enhanceFace、人脸风控图uploadFaceImageforBvn(目标大数据/crs)均注释;Google 审核员可跳过人脸;设备检查 UF 走 DEVICE_CHECK 场景。 - creditStage 状态机(CREDIT_STAGE_1/8/9/10)贯穿核验/建客/返回——早期版未提。
- 风控决策注释/TODO(
iRiskClient/callFace)——“是否通过/给多少额度”当前是断的。 - 真实有效的只有:信息采集落库 + FDS 冻结校验 + 身份类型/人脸场景分流。授信申请只落 bns 本地表(applyStatus=N),不进 FCS。
- 综合:现金贷授信采集与分支完整,但 BVN 核验/人脸比对/风控决策三大环节均不真实执行——评估授信能否独立跑通的核心结论。