Files
group_fqcd_jr/docs/风控业务演示文档/26-演示机数据插入规则.md
T

9.4 KiB

演示机数据插入规则

文档定位

本文交给演示机实施人员使用,用于准备风控模块演示所需的上游业务数据。 风控预警和通知是派生数据,必须由扫描器生成,不允许为了让页面“有数据”而直接插入。

适用前置条件:

  1. 演示机已完成最新 Alembic 迁移。
  2. 风控角色、权限和数据范围已经初始化。
  3. 演示环境时间口径为北京时间,数据库时间字段使用 UTC naive。
  4. 风控页面使用正式主项目前端。

一、固定原则

  • 可以写入 sys_user、fin_customer_profile、fin_product、fin_sim_account、 fin_holding、fin_sim_order、fin_transaction、fin_capital_flow、 sys_login_record、biz_work_order、fin_risk_assessment。
  • 禁止直接写入 fin_risk_alert 和 fin_risk_notification。
  • 演示客户和产品使用独立号段,不覆盖真实或已有演示数据。
  • 所有业务编号必须唯一,重复执行时按业务编号做幂等更新。
  • 时间字段必须是 UTC naive。业务判断中的凌晨、当日、日期范围按北京时间换算。
  • 客户风险等级在 sys_user.investor_type 和 fin_customer_profile.investor_type 中必须一致。
  • 预警扫描产生的结果由系统负责生成证据快照、合并规则和通知记录。

二、建议插入顺序

  1. fin_product,并确认产品风险等级和风险揭示要求。
  2. sys_user 和 sys_user_role,客户绑定 customer 角色。
  3. fin_customer_profile,同步客户风险等级、年龄、总资产和行为分。
  4. fin_risk_assessment,保证客户画像和适当性链路完整。
  5. fin_sim_account,保证客户有模拟账户。
  6. fin_holding,保证持仓和豁免额度证据存在。
  7. biz_work_order,先建工单,再让交易引用。
  8. fin_sim_order,为每笔交易建立模拟委托。
  9. fin_transaction,写入申购或赎回成交记录。
  10. fin_capital_flow,补入金、出金和资金到账时间。
  11. sys_login_record,补交易前的成功登录和非固定设备证据。
  12. 回到风控页面执行手动扫描,生成预警和通知。

三、字段和取值规则

sys_user

必须满足:

  • user_type = 'customer'。
  • status = '正常'。
  • fund_account_status = '已开户'。
  • investor_type 必须为 C1、C2、C3、C4 或 C5。
  • is_professional_investor = 0,除非该演示场景需要专业投资者身份。
  • professional_investor_status = 'none',除非有单独的合规依据。
  • sys_user_role 必须关联 customer 角色,不能只建用户不建角色。

fin_customer_profile

  • customer_id 必须与 sys_user.id 一致。
  • trade_account 必须与模拟账户号一致。
  • investor_type 必须与 sys_user.investor_type 一致。
  • birth_date 必须可计算年龄,RW-012 年龄要求不小于 65 岁。
  • total_asset 必须为正数,豁免比例场景需要它。
  • behavior_score 使用 0 至 20 分制。
  • preferred_asset_class 建议写 JSON 数组,例如 ["固定收益类", "权益类"]。

fin_product

  • product_code 使用独立演示编码,不能与正式产品重复。
  • status = '上市'。
  • risk_level 必须为 R1、R2、R3、R4 或 R5。
  • risk_disclosure_required、second_confirmation_required、recording_required 只能为 0 或 1。
  • 要触发 RW-007 缺失留痕场景,相关要求字段必须为 1,且对应工单字段为空。
  • C3 配置 R4、C4 配置 R5 时,还要保证 total_asset 和 fin_holding.current_value 口径一致,才能测试豁免额度。

fin_sim_account

  • customer_id 必须存在。
  • currency = 'CNY'。
  • status = '正常'。
  • cash_balance、available_cash、initial_balance 必须为合理正数。
  • account_no 建议使用稳定编号,例如 FSA{客户ID}。

fin_holding

  • customer_id、trade_account、product_id 必须有效。
  • shares、total_quantity、available_quantity、current_value 必须为正。
  • current_value 应与持仓数量和最新净值口径一致。
  • RW-007 豁免场景中,current_value / fin_customer_profile.total_asset 必须能够超过 20% 或 10% 的豁免上限。

fin_sim_order

  • 每笔 fin_transaction 必须关联一个有效 order_id。
  • order_side 使用交易接口实际口径 buy 或 sell。
  • status 使用 已成交。
  • quote_source 可以使用演示来源,但必须能让页面识别。
  • quote_at、submitted_at、created_at、updated_at 使用 UTC naive 时间。

fin_transaction

  • transaction_type 必须使用 申购 或 赎回,风控扫描按这两个值识别。
  • order_side 使用 buy 或 sell,规则不依赖该字段判断方向。
  • customer_id、account_id、product_id 必须有效。
  • amount 必须为正数,且与 gross_amount、net_amount 的口径保持一致。
  • confirmed_at 必须非空,风控扫描按该时间计算时间窗口。
  • 同一笔风险场景不要生成多笔近似重复交易,以免影响历史均值。
  • 需要触发工单规则时,work_order_id 必须指向有效工单。

fin_capital_flow

  • flow_type 使用 入金 或对应真实业务类型。
  • RW-003 必须使用 flow_type = '入金'。
  • RW-003 的 status 必须为 成功。
  • RW-003 的 settled_at 必须不晚于赎回交易 confirmed_at。
  • RW-003 的 settled_at 必须处于赎回时间前 3 天内。
  • customer_id、account_id 必须与交易一致。

sys_login_record

  • user_id 必须为目标客户。
  • login_result = '成功'。
  • login_at 必须早于或等于风险交易 confirmed_at。
  • RW-012 需要 is_common_device = 0。
  • 设备编号不能为空,建议使用可识别的演示设备号。

biz_work_order

  • work_order_no 必须唯一。
  • customer_id、product_id 必须有效。
  • channel 是 RW-018 的关键字段:
    • 定投
    • 自动定投
  • 要触发 RW-007 缺失留痕,按产品要求留空对应字段:
    • risk_disclosure_ack_at
    • second_confirmation_at
    • recording_reference
  • 要测试正常放行场景,则应把产品要求的字段全部补齐。

fin_risk_assessment

  • customer_id 必须存在。
  • questionnaire_version 使用独立演示版本。
  • investor_type 必须与客户画像一致。
  • assessed_at、valid_until 必须有效。
  • 风控扫描本身不依赖该表,但客户证据和画像页面需要它。

四、规则场景矩阵

规则 客户准备 产品准备 交易准备 其他证据 预期
RW-003 C3 或 C4 客户 R3 产品 赎回金额达到 50 万,赎回比例达到 80% 3 天内有成功入金流水 高风险
RW-007 C1 客户 R4 或 R5 产品,风险揭示或二次确认要求为 1 申购记录 工单对应留痕缺失 高风险
RW-007 C3 客户 R4 产品,风险揭示要求为 1 申购记录 工单缺少风险揭示 中风险
RW-012 65 岁以上客户 任意可赎回产品 赎回金额达到 30 万,且达到历史均值 3 倍 交易前成功登录,非固定设备 高风险
RW-015 任意客户 任意产品 北京时间 00:00 至 05:59,金额不超过 1 万 无需额外证据 低风险
RW-018 任意客户 任意产品 交易关联工单 工单渠道为 定投 或 自动定投 低风险
合并 任意客户 任意产品 同一交易同时满足 RW-015 和 RW-018 凌晨小额自动定投 一条合并预警

五、时间生成规则

演示机不要写死日期,建议按当前时间动态生成:

字段 时间关系
RW-003 入金 settled_at 当前时间减 1 天
RW-003 赎回 confirmed_at 当前时间
RW-012 历史交易 confirmed_at 当前时间减 30 至 60 天
RW-012 登录 login_at 当前时间减 2 小时
RW-012 当前赎回 confirmed_at 当前时间
RW-015 交易 confirmed_at 北京时间当天或前一天 02:00 至 05:59

数据库写入前必须将北京时间转换为 UTC naive。

六、插入后检查

至少执行以下检查:

  1. sys_user.investor_type 与 fin_customer_profile.investor_type 完全一致。
  2. 每个客户都有有效模拟账户和至少一笔持仓。
  3. 每笔交易都有对应的 order_id。
  4. 需要触发 RW-003 的客户都有成功入金流水,且入金时间处于赎回前 3 天内。
  5. 需要触发 RW-012 的客户都有交易前成功登录记录,且 is_common_device = 0。
  6. 需要触发 RW-007 的工单留痕字段确实缺失,或豁免比例确实超过上限。
  7. 每个演示客户的交易数量足以支持历史均值计算,至少应有一笔历史对比交易。
  8. 扫描后检查 fin_risk_alert.trigger_rule_codes、alert_level 和 related_transaction_id 是否符合预期。

七、扫描后的验收

数据插入完成后,由演示机执行风控扫描,再检查:

  • 预警数量是否新增。
  • 每笔交易命中的规则是否正确。
  • 风险等级是否正确。
  • 证据详情是否能关联到客户、产品、交易、资金、登录和工单。
  • 同一交易命中多条规则时是否合并为一条预警。
  • 高风险预警是否产生通知记录。
  • 邮件开关和收件人配置是否符合演示要求。

如果扫描没有产生预警,首先检查源数据字段、枚举值、时间和关联关系,不要通过直接修改 fin_risk_alert 来掩盖问题。