手机分期交机试算首付范围口径调整 — 迭代需求

Down Payment 的可输入范围必须使用政策试算接口返回的 out_dp_minout_dp_maxout_dp_tiers 只用于展示快捷档位,不得再通过 tiers 的最小值和最大值推导输入边界。

1. 问题与目标

当前交机试算页面使用 out_dp_tiers 中的最小值和最大值限制 Down Payment。当政策允许范围大于快捷档位范围时,前端会错误拒绝合法输入。

示例政策结果:

{
  "out_dp_max": 80,
  "out_dp_min": 30,
  "out_dp_tiers": "[30,35,40,45,50]",
  "out_suggested_dp": 40,
  "out_financial_product_level": "DDP"
}

按正确口径:

  • Down Payment 合法比例范围为 30%–80%,包含边界。
  • 30%、35%、40%、45%、50% 是快捷档位。
  • 55%、60%、65%、70%、75%、80% 虽不在 out_dp_tiers 中,但只要输入值处于 30%–80% 就合法。
  • 低于 30% 或高于 80% 才阻断。

2. 字段职责

字段业务职责是否用于输入边界
out_dp_min政策允许的最低首付比例是,唯一最小值来源
out_dp_max政策允许的最高首付比例是,唯一最大值来源
out_dp_tiers推荐/快捷选择的首付比例集合
out_suggested_dp页面首次加载时的推荐首付比例否;只作为默认值,并需落在 min/max 内
out_financial_product_level后续查询金融产品的等级否;示例为 DDP

out_dp_tiers 不要求覆盖完整允许区间,也不要求包含 out_dp_max。前端不得使用 Math.min(...tiers)Math.max(...tiers) 作为校验上下限。

3. 页面计算规则

3.1 页面输入为比例时

min = out_dp_min
max = out_dp_max
default = clamp(out_suggested_dp, min, max)

输入校验采用闭区间:out_dp_min <= down_payment_ratio <= out_dp_max

3.2 页面输入为 NGN 金额时

政策字段按百分比解释,使用当前实际售价 price 换算:

min_down_payment_amount = ceil(price × out_dp_min / 100)
max_down_payment_amount = floor(price × out_dp_max / 100)
suggested_down_payment_amount = round(price × out_suggested_dp / 100)

推荐金额计算后必须再次限制在 [min_down_payment_amount, max_down_payment_amount] 内。NGN 金额使用整数,不允许因为小数截断导致实际比例低于最小值或高于最大值。

例如售价为 ₦100,000,上述政策结果对应:

项目结果
可输入最低金额₦30,000
可输入最高金额₦80,000
默认推荐金额₦40,000
快捷档位金额₦30,000 / ₦35,000 / ₦40,000 / ₦45,000 / ₦50,000
手工输入 ₦65,000合法
手工输入 ₦85,000非法

3.3 tiers 展示规则

  • out_dp_tiers 当前可能以 JSON 字符串返回,bns 应优先标准化为 number array 后再给 SA App。
  • tiers 只生成快捷选择 chip/tile;用户仍可在 min/max 内手工输入其他值。
  • tiers 中小于 out_dp_min、大于 out_dp_max、重复、非数字或空值应被过滤,并记录契约异常。
  • tiers 解析失败或过滤后为空时,隐藏快捷档位但保留合法的手工输入能力;不得回退到固定档位或用 tiers 推导范围。
  • 快捷档位按数值升序展示。

6. 异常处理

异常处理
out_dp_minout_dp_max 缺失/非数字禁用继续操作,提示重新试算;不得用 tiers 兜底
out_dp_min > out_dp_max视为接口契约错误,禁用继续操作并记录告警
min/max 超出 0–100视为接口契约错误,禁用继续操作
out_suggested_dp 不在范围内默认值 clamp 到范围内,同时上报契约异常
out_dp_tiers 解析失败隐藏快捷档位;若 min/max 有效,允许手工输入
tiers 中存在越界值过滤越界值并上报,不改变 min/max
金额换算后最小值大于最大值禁用继续操作,提示重新试算
政策接口超时/失败不沿用其他商品或上一次订单的范围;展示重试

8. 验收用例

基于示例响应,假设售价 ₦100,000

编号输入/场景预期结果
DP-01页面首次加载默认 ₦40,000,范围提示 ₦30,000–₦80,000
DP-02选择 tier 30%合法,首付 ₦30,000
DP-03选择 tier 50%合法,首付 ₦50,000
DP-04手工输入 ₦65,000合法,即使 tiers 最大值只有 50%
DP-05手工输入 ₦80,000合法,包含最大边界
DP-06手工输入 ₦29,999非法,提示最低 ₦30,000
DP-07手工输入 ₦80,001非法,提示最高 ₦80,000
DP-08tiers 为无效 JSON,min/max 有效隐藏快捷档位,仍允许 ₦30,000–₦80,000 手工输入
DP-09min/max 缺失,tiers 有效禁用继续操作,不使用 tiers 的 30%/50% 兜底
DP-10售价从 ₦100,000 改为 ₦120,000重新政策试算并按新结果重新计算,不复用旧金额范围
DP-11服务端收到 65% 的合法手工输入校验通过并正常调用后续金额试算
DP-12out_financial_product_level=DDP后续查询金融产品仍使用 DDP