手机分期生产 KYC 与 OTP 跳过流程支持
目标:为手机分期生产环境增加受控的 KYC、OTP 跳过能力,便于已获授权的业务场景继续完成 PocketBuy SA 代客办单。
本文为增量需求,不改变两个开关关闭时的现有流程;正常流程仍按现有 OTP、BVN/NIN、活体/人脸核验规则执行。
1. 业务目标与范围
1.1 业务目标
- 在生产环境按产品、商户主体和生效时间启用 KYC 跳过或 OTP 跳过。
- 开关开启后,流程不因被跳过的三方能力阻塞,但仍保留订单、客户、门店和最终风险审批的正常业务边界。
- KYC 跳过对 SA 无感:页面沿用正常已完成样式,但不展示不存在的 KYC 返回资料;跳过来源只保留在订单审计和风险侧。
- 所有跳过行为可追溯到订单快照、开关版本、操作者、启用原因和生效时间。
1.2 适用范围
| 范围 | 说明 |
|---|---|
| 产品 | 手机分期 |
| 前端 | PocketBuy SA App 的 Verify OTP(Step 2)、Identity(Step 3)、Order Detail 与 Sign/Group Photo |
| KYC 跳过 | 主动开关跳过时 BVN/NIN 核验、活体/人脸三方校验均不发起;正常 KYC 流程出现连续技术异常时,按异常跳过规则处理 |
| OTP 跳过 | 客户手机号验证页不发送 SMS/Voice,不调用 OTP 三方能力 |
| 不在范围 | SA 登录 OTP、注册 OTP、重置密码 OTP、还款 OTP、绑卡 OTP |
2. 开关与默认规则
| 开关 | 默认值 | 开启后的业务结果 | 关闭时 |
|---|---|---|---|
phone_installment_kyc_skip_enabled | false | KYC 步骤直接记为 PASS_BY_BYPASS;不发起 BVN/NIN、活体或人脸三方校验;页面不展示三方返回姓名、生日、照片或其他资料 | 按现有 KYC 流程校验并展示可信返回结果 |
phone_installment_otp_skip_enabled | false | 系统仍生成本次验证专属的 6 位动态验证码,但不发送 SMS/Voice;前端自动取得并填写该值,再按原有验证和建单流程继续 | 按现有 OTP 发码、倒计时、输入和校验流程 |
规则:
- 两个开关相互独立,可分别开启;某一开关未开启时,不得因另一开关开启而跳过该步骤。
- 开关默认关闭;未取到配置、配置超时、配置格式错误或无法判断配置版本时,按关闭处理。
- 开关状态、配置版本和生效时间必须在订单进入流程时固化到订单快照;流程中途修改配置不得改变本单已固化的口径。
- 跳过结果只表示对应步骤完成,不等同于最终授信或放款通过;最终风险审批、反欺诈、额度、门店和商品准入规则仍然生效。
- OTP 跳过不使用固定码。每次进入验证都生成仅对当次手机号、订单草稿和有效期生效的动态验证码;前端自动取得并填写,SA 无需等待、查看或输入验证码。
- 动态验证码不得进入普通日志、埋点属性、错误提示、客服视图、页面文案或截图;只能由受控的 OTP 验证流程消费。
- 后台可为 KYC 配置“同一证件号连续技术异常阈值”。配置缺失、超时、格式错误、阈值小于 1 或无法识别配置版本时,异常跳过关闭;不得自动放行。
- 异常跳过只适用于三方技术异常(如超时、服务不可用或无法判定结果);证件号格式错误、未查到、资料不匹配、活体/人脸业务不通过及风险拒绝不计入阈值,也不得触发跳过。
3. 主流程
3.1 KYC 跳过开启
- SA 在 Verify OTP 完成后进入 Identity/KYC 页面。
- 页面读取本单已固化的 KYC 跳过状态。
- 系统不调用任何 BVN/NIN、活体或人脸三方校验。
- 系统将 KYC 步骤记为
PASS_BY_BYPASS,并允许进入下一步资料采集。 - 页面沿用正常的“BVN verified”完成态,不出现“跳过”“bypass”“无 KYC”等提示;不展示供应商返回的姓名、生日、照片、供应商名称、供应商原始结果或错误信息。
- SA 手工填写客户姓名和出生日期;该两项是本单采集资料,不是 KYC/供应商验证结果,页面不得标注为 Verified。
- 风险系统需要拉取该数据。
3.2 OTP 跳过开启
- SA 从 Calculate 页进入 Verify OTP 页面。
- 页面保留客户手机号输入和隐私政策确认;手机号仍须符合现有格式规则。
- 系统为本次验证生成动态验证码,前端自动取得并填写;该验证码不固定、不可由 SA 查看或修改。
- 不发送或触发 SMS/Voice、冷却倒计时、重发和通道失败提示;页面仍沿用正常 OTP 已就绪的视觉结构。
- SA 点击 Verify & Continue 后,系统消费本次动态验证码完成手机号验证,继续查询 30 天内活跃订单。
- 没有活跃订单时,按现有规则创建 Drafting 订单并进入 Identity;有活跃订单时,继续展示 View Existing / Continue New Application 弹层。
3.3 两个开关同时开启
OTP 页面自动取得动态验证码完成手机号验证;进入 Identity 后按普通 BVN 已验证样式完成但不展示 KYC 信息;之后按现有资料采集、提交审批和结果处理继续。
3.4 KYC 连续技术异常自动跳过
- 本规则只在 KYC 主动跳过开关关闭、SA 正常提交同一 BVN 或 NIN 核验时生效。
- 每次 SA 提交后,系统先完成本次初始核验;发生可重试技术异常时,系统自动重试最多 3 次(即本次提交最多 4 次核验尝试)。重试期间页面保持验证中,SA 不看到重试次数、供应商名称、异常原文或跳过提示。
- 同一 BVN/NIN 在同一配置有效期内的一次提交,无论发生多少次系统自动重试,只累计为一次连续技术异常失败;核验成功、SA 更换证件号,或证件号命中非技术业务失败时,按后台配置的连续失败计数规则重置或隔离。
- 累计达到本单已固化的异常阈值后,系统将本次 KYC 记为
PASS_BY_EXCEPTION_BYPASS,不再就该证件号继续调用三方,并进入与 KYC 主动跳过一致的手工 Customer name、Date of birth 采集页面。 - 手工资料校验通过后继续后续流程;最终风险审批、反欺诈、额度、门店与商品准入仍可拒绝、转人工或要求补充真实核验。
4. 页面要求
4.1 Verify OTP 页面
| 状态 | 页面要求 |
|---|---|
| OTP 跳过开启 | OTP 输入框自动填写当次动态验证码;Get Code、Voice OTP、倒计时和重发入口不展示;主按钮显示可提交状态 |
| 手机号未填或格式错误 | 保持现有格式校验;不得因为 OTP 跳过而放宽手机号格式 |
| 隐私政策未勾选 | 主按钮保持不可提交;沿用现有提示 |
| 提交处理中 | 主按钮 loading,防止重复提交 |
| 有活跃订单 | 沿用现有订单摘要弹层和两个动作,不因跳过 OTP 改变订单决策 |
| OTP 跳过关闭 | 完全沿用现有 SMS/Voice 发码、倒计时、错误和重试体验 |
页面不得出现“短信已发送”“语音呼叫中”“验证码校验成功”“跳过 OTP”或任何验证码值。对 SA 而言,该页面只表现为验证码已就绪、可继续验证。
4.2 Identity/KYC 页面
| 状态 | 页面要求 |
|---|---|
| KYC 跳过开启 | 参照现有“15 身份信息_BVN已验证”页面,展示普通 BVN 已验证完成态;在已验证输入框下增加 Customer name 与 Date of birth 两项手工输入,提供 Next 进入下一步 |
| KYC 跳过开启 | Customer name 去首尾空格后不得为空、不得仅包含数字;Date of birth 必须为真实日历日期、不得晚于当前日期,并继续适用既有产品年龄策略 |
| KYC 跳过开启 | 不展示三方返回姓名、生日、照片、匹配状态、供应商名称、供应商错误原因或原始报文;手工姓名和出生日期不得使用 Verified、供应商或 KYC 回显标签 |
| KYC 跳过开启 | 两项手工资料未填写或格式不合法时,Next 不可提交并在对应字段展示本地校验提示;不得因为缺少三方回显阻止继续 |
| KYC 跳过关闭 | 沿用现有 BVN/NIN 输入、Verify、成功回显、失败重试和必填规则 |
| 配置读取失败 | 按关闭处理,进入正常 KYC 流程;不得静默按跳过处理 |
4.3 Order Detail 无 KYC 信息样式
订单详情参照现有“22 订单详情”的 Identity 区块处理:当本单 KYC 跳过且无 KYC 返回资料时,保留该区块的位置、标题和正常已完成视觉,不展示空白照片框、BVN/NIN 值、供应商名称、三方返回状态或“跳过”说明。手工姓名与出生日期如需在详情展示,必须明确为“Customer-provided”,不得带 Verified 标识、不得与 KYC 返回资料混排;本次默认不在该区块回显。页面仍可展示不依赖 KYC 返回的订单信息、现场自拍/活体结果与合照证据(如已完成)。
5. 状态、数据归属与审计
5.1 业务状态
| 步骤 | 正常结果 | 跳过结果 | 说明 |
|---|---|---|---|
| OTP | OTP_VERIFIED | OTP_VERIFIED_BY_BYPASS | 两者均可进入后续订单处理,但来源必须可区分 |
| KYC | KYC_PASS | PASS_BY_BYPASS / PASS_BY_EXCEPTION_BYPASS | 两类跳过均不携带三方返回资料,且必须与供应商通过区分 |
5.2 订单快照与审计
订单至少需要能够追溯以下业务信息:
- OTP 跳过是否生效、KYC 跳过是否生效;
- 对应配置版本、生效时间和固化时间;
- 跳过原因和授权操作者;
- OTP 验证来源、KYC 结果来源;
- KYC 跳过时手工采集的姓名、出生日期及其填写/校验完成时间;
- 异常跳过阈值、配置版本、同一证件号的异常累计次数、每次自动重试结果及异常跳过触发时间;
- 订单后续风险审批是否仍通过。
完整 OTP、BVN/NIN、生日、账户号、人脸素材和供应商原始报文不得进入普通日志、前端埋点或页面展示。
6. 异常与边界
| 场景 | 处理规则 |
|---|---|
| 配置不存在、超时或格式错误 | 按开关关闭处理,并记录配置异常;不得自动放行 |
| 开关在流程中途关闭 | 已固化为跳过的订单继续按订单快照完成;新订单按最新配置执行 |
| OTP 跳过开启但手机号不合法 | 仍阻止提交并提示手机号格式错误 |
| OTP 跳过开启但订单创建失败 | 沿用现有订单创建失败提示和可重试路径,不重复创建订单 |
| KYC 跳过开启但后续风险要求真实 KYC | 风险节点可拒绝、转人工或要求补充核验;不得由前端自行改写为通过 |
| KYC 跳过开启但手工姓名或出生日期缺失/格式无效 | 停留在 Identity 页面;仅提示对应字段补充或修正,不披露跳过状态或供应商信息 |
| 正常 KYC 的单次提交发生技术异常 | 系统在后台自动重试最多 3 次;SA 页面保持验证中,不展示尝试次数或供应商异常信息 |
| 自动重试后仍为技术异常但未达阈值 | 按既有通用核验失败提示引导稍后重试;本次只累计一次异常失败,不跳过 |
| 同一证件号异常累计达阈值 | 自动进入手工姓名、出生日期采集;页面不展示异常跳过原因,订单审计和风险侧可追溯来源 |
| 证件号格式错误、未查到、资料不匹配、活体/人脸业务失败 | 沿用既有业务失败处理;不自动重试、不累计技术异常、不触发异常跳过 |
| 页面刷新或从 Applications 继续 | 以订单快照恢复跳过状态;不重新调用已跳过的三方能力 |
| 误将跳过结果当作供应商成功 | 视为阻断性缺陷:状态来源、审计和页面文案必须可区分 |
7. 合照与自拍比对
7.1 目的与边界
审批通过后的 Sign/Group Photo 环节,仍要求 SA 与客户同框、现场拍摄、店内背景。合照中的客户脸不再与 BVN/NIN 系统照片比对,改为与本单客户已留存、当天有效的自拍照比对。该自拍照来自客户活体采集,不复用历史订单或相册照片。
该逻辑是签约现场证据判断,不向 SA 展示人脸分数、底层照片、KYC 结果、比对阈值或“跳过 KYC”信息。
7.2 判断规则
- 合照须为现场相机拍摄,且检测到恰好两张清晰人脸。
- 系统以本单当天有效的
selfie_ref作为客户基准照片,在合照中定位与自拍匹配的一张脸;另一张脸按 SA 身份处理。 - 不再使用 BVN/NIN 系统照、证件照或 KYC 返回照片作为合照比对的基准。
- 自拍不存在、已过期、质量不合格、合照人脸不足/超过两张,或无法唯一定位客户脸时,合照不通过,SA 仅收到可执行的重拍/重新完成人脸采集引导。
- KYC 跳过不等于跳过合照现场证据判断。若签约仍要求合照,必须先具备有效自拍;否则不得进入签约确认。
- 重拍合照或重新采集自拍后,废弃旧的合照比对结论并对最新材料重新判断;签约中断或跨日沿用现有规则,需重新采集自拍和合照。
7.3 SA 页面反馈
| 判断结果 | SA 可见反馈 | 后续动作 |
|---|---|---|
| 合照符合要求 | 正常照片预览与 Next 可用 | 进入签署协议 |
| 未检测到两张清晰人脸 | “Make sure both you and the customer are clearly in the photo.” | 重拍 |
| 无有效自拍或无法定位客户 | “Please complete customer face capture, then retake the photo.” | 返回/引导完成人脸采集后重拍 |
| 比对未通过 | “Please retake the photo with the customer facing the camera.” | 重拍;按既有风险策略处理超限 |
8. 前端埋点要求(忽略)
页面 owner 为 PocketBuy SA App;事件名和页面名保持稳定,不拼接订单号、手机号、验证码、BVN/NIN、供应商返回值或错误文本。
| 页面/场景 | 事件名 | 事件类型 | 唯一触发时机 | 关键属性及来源 | 衡量指标 |
|---|---|---|---|---|---|
| Verify OTP | verify_enter | page_enter | 页面首次进入 | otp_skip_enabled:订单快照;merchant_id:当前办单上下文 | OTP 页面进入量、跳过开关覆盖量 |
| Verify OTP | verify_otp_autofill_result | result | 动态验证码自动填写结果确定时 | otp_skip_enabled=true:订单快照;result:success/failed;不记录验证码 | OTP 自动填写成功率 |
| Verify OTP | verify_continue_result | result | 业务结果已确定时 | verification_source:provider/bypass;result:success/invalid/order_create_failed;业务结果来源于服务端 | OTP 到订单创建转化率、失败率 |
| Identity/KYC | identity_enter | page_enter | Identity 页面首次进入 | kyc_skip_enabled:订单快照;merchant_id:当前办单上下文 | KYC 页面进入量、跳过覆盖量 |
| Identity/KYC | identity_verification_retry_result | result | 本次验证的自动重试流程结束且可信业务结果已确定时 | result:success/retry_exhausted/non_retriable; retry_count:0–3; 不记录 BVN/NIN、供应商错误原文或异常明细 | 自动重试成功率、技术异常率 |
| Identity/KYC | identity_exception_bypass_result | result | 同一证件号达到已固化异常阈值,异常跳过业务结果确定时 | result=triggered; threshold_reached=true; verification_source=exception_bypass; 不记录证件号、姓名、出生日期或供应商错误 | 异常跳过量、异常跳过后手工资料完成率 |
| Identity/KYC | identity_manual_profile_validation_result | result | SA 点击 Next 后,本地姓名与出生日期校验结果确定时 | result:success/name_invalid/dob_invalid/age_policy_failed;kyc_skip_enabled:订单快照;不记录姓名、出生日期或任何身份号码 | 跳过 KYC 订单的手工资料一次校验通过率 |
| Identity/KYC | identity_complete_result | result | 身份步骤业务状态已完成时 | verification_source:仅服务端审计关联,不展示给 SA;result=pass;不记录三方资料 | Identity 到 Personal 转化率 |
| Identity/KYC | identity_next_click | click | SA 点击 Next 时 | verification_source:页面业务状态;result:success/validation_failed | Identity 到 Personal 转化率 |
| Order Detail | detail_identity_section_view | view | Identity 区块进入可视区域时 | kyc_info_present:页面业务状态;不记录身份号码、姓名或照片 | 无 KYC 信息订单的详情浏览覆盖率 |
| Group Photo | group_photo_selfie_match_result | result | 合照判断结果由可信业务结果返回时 | result:pass/retake_required/selfie_required;不记录照片、分数或身份信息 | 合照一次通过率、重拍率 |
9. 验收标准
9.1 OTP 跳过
- 开关关闭时,现有 SMS/Voice 流程、倒计时、错误提示和活跃订单弹层不发生变化。
- 开关开启时,Verify 页面不发送 SMS/Voice,不触发倒计时和重发;每次验证由前端自动取得并填写当次动态验证码,禁止使用固定
123456。 - 手机号不合法或隐私政策未确认时仍不能提交。
- 点击 Verify & Continue 后,单无活跃订单时按现有规则创建 Drafting 订单并进入 Identity;有活跃订单时仍展示两个既有动作。
- 埋点记录
verification_source=bypass,不记录 OTP 值。
9.2 KYC 跳过
- 开关关闭时,BVN/NIN、活体/人脸的现有三方调用和页面回显保持不变。
- 开关开启时,不发起任何 KYC、活体或人脸三方校验,KYC 状态为
PASS_BY_BYPASS。 - KYC 主动跳过开关关闭时,同一 BVN/NIN 发生可重试技术异常后,系统自动重试最多 3 次;重试期间 SA 不看到次数、供应商信息、异常原文或跳过提示。
- 同一 BVN/NIN 的一次提交最多计为一次连续技术异常失败;达到本单固化阈值后,KYC 状态为
PASS_BY_EXCEPTION_BYPASS并进入手工姓名、出生日期采集。 - 格式错误、未查到、资料不匹配、活体/人脸业务失败、风险拒绝均不得自动重试、累计技术异常或触发异常跳过。
- Identity 页面展示可编辑的 Customer name 与 Date of birth;两项填写值不带 Verified 标签,且不作为供应商回显。
- 姓名为空、仅数字,出生日期无效/晚于当前日期或不符合既有年龄策略时,Next 不可提交;姓名和出生日期本身不得写入日志或埋点。
- Identity 页面不展示供应商返回的姓名、生日、照片、供应商名称、供应商返回状态或错误信息。
- KYC 跳过时,SA 看到的是现有 BVN 已验证样式,不出现“跳过”“bypass”或“无 KYC”提示。
- Order Detail 的 Identity 区块在无 KYC 信息时不显示空照片、身份信息或跳过说明,整体样式与“22 订单详情”保持一致。
- Identity 页面可以继续进入下一步,后续提交仍进入最终风险审批。
- 配置读取失败按关闭处理,不得默认通过。
9.3 生产安全与追溯
- 两个开关默认关闭,且按订单固化;流程中途改配置不改变已开始订单的口径。
- 订单和审计记录能区分 provider 通过与 bypass 通过。
- 普通日志、埋点和页面不出现 OTP、BVN/NIN、生日、完整手机号、供应商原始资料或人脸素材。
9.4 合照与自拍比对
- 合照只接受现场相机拍摄,且必须检测到恰好两张清晰人脸。
- 系统以本单当天有效自拍作为客户基准,在合照中唯一定位客户;不使用 BVN/NIN 系统照或证件照。
- 自拍缺失/过期、合照不满足两人、无法定位客户或比对未通过时,阻止进入签署协议并给出可执行的重拍或补采集引导。
- KYC 跳过订单如仍要求合照,仍必须通过自拍基准的合照判断;SA 页面不展示比对底图、分数或跳过原因。
10. Figma 页面同步范围
在用户提供的 PocketBuy SA App Figma 文件中新增同一 App 设计页面,建议页面名:Phone Installment · Production Bypass。
页面至少包含以下四个画板/状态:
Verify OTP · SMS Bypass:保留普通 Verify OTP 页面结构;不展示发码/Voice/倒计时/重发;验证码由前端自动填写,页面不显示固定码或跳过提示。15 Identity Information · BVN Verified · Manual Profile:参照现有 BVN 已验证页面,保留正常已验证输入态和 Next;增加 Customer name、Date of birth 手工输入及本地校验态;不出现跳过提示、供应商返回卡或 Verified 姓名/出生日期。22 Order Detail · No KYC Info:参照现有订单详情页面,保留 Identity 区块的布局和完成态;移除身份照片、BVN/NIN、供应商返回与跳过说明;本次不回显手工姓名和出生日期,可保留现场自拍/合照证据。Sign · Group Photo · Selfie Reference:在合照预览/失败状态中补充两人脸、自拍基准和重拍引导,不展示任何底层比对信息。15 Identity Information · KYC Retrying:参照现有 Identity 验证中状态,展示普通验证中反馈;不显示重试次数、供应商异常或异常跳过原因。达到阈值后转入 Manual Profile 画板。
视觉沿用 PocketBuy SA App 现有组件、字体、颜色、间距、圆角和底部合规信息;新页面只增加跳过状态,不重做正常流程页面。