手机分期交机试算首付范围口径调整 — 迭代需求
Down Payment的可输入范围必须使用政策试算接口返回的out_dp_min和out_dp_max。out_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_min 或 out_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-08 | tiers 为无效 JSON,min/max 有效 | 隐藏快捷档位,仍允许 ₦30,000–₦80,000 手工输入 |
| DP-09 | min/max 缺失,tiers 有效 | 禁用继续操作,不使用 tiers 的 30%/50% 兜底 |
| DP-10 | 售价从 ₦100,000 改为 ₦120,000 | 重新政策试算并按新结果重新计算,不复用旧金额范围 |
| DP-11 | 服务端收到 65% 的合法手工输入 | 校验通过并正常调用后续金额试算 |
| DP-12 | out_financial_product_level=DDP | 后续查询金融产品仍使用 DDP |