概念
裁决、等级带与资金池
三个裁决、不是分数的序数等级带,以及为什么资金要分池而不是全部扫进一个归集地址。
三个裁决
POST /v1/decide/deposit 的 verdict 只会是三者之一。
| 裁决 | 含义 |
|---|---|
CREDIT | 这笔入金可以贷记。 |
HOLD | 这笔入金暂时不得贷记。 |
REJECT | 这笔入金不得贷记。 |
没有第四个取值。任何输入处于降级、陈旧、不可用或超预算时,没有任何路径返回 CREDIT。所有降级路径都落在 HOLD。
裁决只会出现在 200 响应里。4xx 里没有裁决,5xx 里也没有。
等级带不是分数
API 里出现两种序数等级带。
- 暴露面匹配上的
severity:R0(最低)到R2。 - 裁决上的
risk_level:R0(最低)到R4。
它们是带,不是分数。Foreshock 不在任何接口、任何模式下发布数值化风险分数,也不存在能显示分数的 debug 或 verbose 模式——内部评分从不进入任何对外响应体。
第三方供应商的分数是另一回事。供应商给出分数时,它按供应商自己的量纲原样放在 VendorResult.score 里,与 vendor、verdict、categories、list_version 以及指向快照的 raw_ref 一起返回。不同供应商的分数量纲不同、不可比。Foreshock 不做换算:换算会制造出并不存在的精度,并切断回溯到供应商原始判断的审计链。
供应商之间不一致时,vendor_disagreement 为 true,两边的结果都还在。不一致被如实报告,绝不被调和成一个答案。
reason 做分类,不做推导
reasons 是一个 DecisionReason 数组,每条带 code,以及可选的 severity 带、vendor 与 raw_ref。一条 reason 陈述的是「适用了哪一类判定」。它不陈述这个判定是怎么得出的,也从不包含执法目标地址或分数。
reason code 分两族:风险分类,与降级。每一个降级码都在 HTTP 200 下产生 HOLD。完整枚举在生成的参考里。
新的码可能在 minor 版本里引入。把不认识的码当作至少与随附的 risk_level 同等严重。
资金池
pool 告诉你资金该去哪里:clean、tagged 或 quarantine。
分池的意义在于防止分类不同的资金被扫进同一个归集地址。一个落进和其他资金同一个热钱包的 quarantine,什么都没做到——分类只在隔离还在时才存在。这件事要紧时,required_actions 里会出现 QUARANTINE_ROUTE。
待办动作与截止时间
required_actions 列出这笔入金离开 HOLD 之前,你的工作流必须完成的操作步骤——取证资金来源、一线或升级复核、路由到隔离池、通知合规负责人、开案,或在降级恢复后重新裁决。
sla_deadline 是这些动作在你所配置的服务水平下的到期时间,不适用时为 null。这是你的截止时间,不是我们的。