京东整单轧差 8 步骤 判定流程
摘要:京东 POP 收入对账脚本 v3.3.1(默认铺种于 2026-09-10)的整单轧差判定的 8 个步骤——前置过滤 + 防误判闸门、R0 无供应链分支(4 子层)、R1 主匹配、零金额红冲判定、R2 部分结算、R3 营销券差异、R4 差异诊断(3 子层)、R5 兜底(3 子层)——每一步都有明确的触发前提、命中即停、标签码落库、是否出单的工程纪律。配套承载行机制保证同一订单多体行只出一张物料明细、不翻倍差异合计;防误判闸门保证「净额 0 + 无供应链单」不会被脚本误判为成功。
关键词:京东整单轧差、8 步骤、判定流程、承载行、防误判闸门、R0 无供应链分支、营销券差异、R5 兜底
600 单对账成功,但「这一单为什么对不上」才是检验对账系统的真问题
京东 POP 2026-07 计划:600 体行、收入 98,837.12 元、差异 0.00 元。但点开 600 行 diffReason 列,会看到一段机读码的标签雨:4 行 CANCELLED_UNSHIPPED、1 行 PARTIAL_SETTLEMENT、6 行 MARKETING_COUPON_DIFF、9 行 INSTANT_REFUND——每一个标签都对应一个被自动识别的真实业务场景 [来源:京东 POP 2026-07 计划 cmtqn5ek60fh06hhdqyccm075 重跑实测]。

上图是京东 POP 整单轧差的 8 步骤判定流程图。判定纪律只有一条:每步有明确执行前提,不满足不进该轮;命中即停。这条纪律保证了脚本能稳定处理 600 行订单而不相互干扰,也是它能在 7 月实测中只翻 4 行结论、其余 596 行零变化的原因 [来源:2026-09-07 v3.2.0 重跑实测]。
整单轧差是什么?为什么京东 v3.0.0 要彻底废弃分向对账
整单轧差:拿平台账单上同一订单的全部货款(正的销售 + 负的退款)合并成账单净额,对供应链净额(全部行金额合并)——对齐抖音 v3.3 的合并口径 [来源:京东 POP 对账主流程图说明(2026-09 定稿)]。
旧版 v2.2.8 用「分向对账」:正/负体行各自独立匹配。4 类场景会出问题——
| 场景 | 分向口径问题 | 整单轧差处理 |
|---|---|---|
| 换货(重发 + 退货两行) | 正向匹配把重发行算进来虚增供应链收入 | 退/发自然互抵,差异 +17.62 = 自营券,走 R3 命中(3525402000291770) |
| 极速退款(结算全额 + 钱包扣收负行) | 扣收负行把收入轧成净额恰好对平(伪成功) | 池白名单剔除扣收行,对出真实差异 691.00(3537424007903740) |
| 取消未发货 | 同订单正/负各自匹配失败 → 落 INSTANT_REFUND | 互抵单前置识别 → SUCCESS + CANCELLED_UNSHIPPED(3532466005975710 等 3 单) |
| 部分结算 | 正向匹配把多行一起拉进来对不上 | 账单净额 = 某条单行金额 → 子集下推 |
用户 2026-09-05 拍板:「合并(整单轧差)在京东同样适用,按抖音方式处理;之前的剔除逻辑不用了」[来源:京东 POP 整单轧差改造需求文档(2026-09-05)]。v3.3.1 是当前 DB 默认版本,2026-09-10 铺种生效。
三角对账的世界观:平台账单 ↔ 供应链订单 ↔ 内部核算
8 步骤脚本处理的是收入侧三方核对的第一条边:平台账单 ↔ 供应链订单。完整三角对账还包括第三条边——内部核算(核算项目树 + 物料明细),由承载行机制统一承担。

整单轧差 8 步脚本只负责「平台账单 → 供应链订单」的判定与打标,不直接出单——「出什么单」完全在集成转换环节由 13 个 diffReason 机读码映射决定。v3 对账体系最关键的一条职责分界:
对账阶段只打标——在体行上落
reconcileResult与diffReason;「出不出单、出什么单」全部在集成转换环节按标签映射决定。
理解这条边界后,8 步骤脚本的输出才是稳定的:只回答「这一行应该挂什么标签」,不回答「这一行应该进金蝶哪张单」。
8 步骤判定流程(v3.3.1 现行默认)
下面 8 步对应收入对账脚本 v3.3.1 的现行默认实现。每步列出触发条件、规则、输出和典型样本。
步骤 0 · 整单轧差前置(立账过滤 + 财务数量过滤 + 防误判闸门)
脚本不是直接进 R0/R1 的——有 3 道前置过滤 + 1 道防误判闸门。
3 道过滤(按序):① 财务数量过滤(v3.3.0):salFinBaseQty ≠ 0 = 金蝶已下推财务应收 → 排除;= 0 或空参与。② 立账类型过滤(v2.2.1):有 setAccountType 值时只取 '2'(暂估应收);全空不过滤,防两套单据金额翻倍。③ 钱包扣收红冲对称剔除(v3.3.1):收入池只取结算资金表,账户流水负收入合计 > 0 且供应链红冲合计 ≈ 钱包扣收额(容差 0.01)→ 红冲行从净额合并中剔除;部分红冲/无钱包扣收不触发。
防误判闸门:过滤后供应链一行都没有时,即使账单净额 = 0 也不算成功 → 进 R0 链。互抵单必须前置识别:R0-a(取消订单互抵)必须先于闸门执行——互抵单账单净额为 0,不前置识别会被闸门全部落 MISSING_SUPPLY。
统一口径表:账单净额 = 同计划同订单号全部体行
incomeAmount合并;供应链净额 = 过滤后行amount合并;差异 = 账单净额 − 供应链净额;主匹配严格相等、无容差(v2.2 的 1 元尾差已废弃);标签「金额一致」判定容差 0.01 元。——对账阶段统一口径表
步骤 1 · R0 无供应链分支(0-a / 0-b / 0-b2 / 0-c / 0-d 五子分支按序判定)
闸门触发后进入 R0 链,按序匹配 4 个已知无供应链场景 + 1 个兜底,命中即停:
| # | 触发条件 | 输出 | 典型样本 |
|---|---|---|---|
| 0-a 取消订单互抵 | 同订单「订单·货款」正收入 与「取消退款单·货款」负收入 互抵(容差 0.01) | SUCCESS + CANCELLED_UNSHIPPED,正/负体行同标签不经承载行裁决,差异落 0、只打标不出单 | 3532466005975710(±310.96) |
| 0-b 补差价链接 | 结算收明细商品名含「邮费差 / 差价 / 补差」 | SUCCESS + PRICE_DIFF_ORDER,差异额保留,出费用应收单 | — |
| 0-b2 仅退款(v3.1.0) | 聚水潭售后分类任一行 = 仅退款 | SUCCESS + REFUND_ONLY,差异落 0、只打标不出单 | 3558441011808741(2026-07,¥339) |
| 0-c 聚水潭退货类 | 聚水潭售后分类 ∈ {普通退货, 拒收退货} | FAILURE + INSTANT_REFUND,只打标不出单 | — |
| 0-d 兜底 | 以上均未命中 | FAILURE + MISSING_SUPPLY,不出单,人工核对 | — |
0-a 与 0-b2 是 8 步里唯二不经承载行裁决的分支——因为它们的净额都是 0,没有翻倍风险。0-c 是失败分支、0-d 是真失败兜底。
步骤 2 · R1 主匹配(严格相等,无容差)
账单净额 = 供应链净额(严格相等、无容差) → 成功,差异原因为空;承载行落
matchedSupplyIncome/Quantity= 净额;非承载行 → SUCCESS +NET_MERGED+ 金额 0 +skipMaterialItems=true。
R1 是脚本的主路径——多数订单在这一步就结束。严格相等意味着 1 元尾差容忍度都没有,这是 v3.0.0 拍板的硬纪律。差异 ≠ 0 时不判失败,按序进下一步。
步骤 3 · 零金额红冲判定(CR-3,唯一「失败但出单」例外)
命中行全部为零金额行(
amount = 0 且 quantity < 0,金蝶红冲只冲数量)且账单净额 ≠ 0 → FAILURE +ZERO_AMOUNT_RETURN,差异全额出费用应收单。
混合行轧零(如一退一发互抵)不算,继续走 R2~R5。整单退款互抵且净额 = 0 的场景会落入 R1 成功——这与 v2.2 分向口径不同,2026-06 计划中 4 个样本单需财务确认(CR-10 标注 ⚠ 待确认)。它是 8 步里唯一的「失败但出单」例外——金蝶只冲数量没冲金额,但账单侧是真金白银的收入,必须出费用应收单让财务留痕。
步骤 4 · R2 部分结算(子集下推财务应收单)
账单净额 = 某一条供应链单行金额(严格相等;净额 = 0 不进本轮——零金额红冲行
amount=0会假命中)→ SUCCESS +PARTIAL_SETTLEMENT,返回matchedSupplyOrderIds子集,转换层按子集下推财务应收单。
覆盖场景:多款商品本期只结算其中一款、多款。注意:v3.0.0/v3.3.1 脚本把 R2 提到零金额红冲之后先于 R3 跑,避免被 R3 营销券误命中。
步骤 5 · R3 营销券差异(自营/立减各一张费用应收单)
差异 = 营销对账「联合按比例承担优惠劵-自营 / 立减」京东承担额(「-商家」已在收入中扣除,永不计入),容差 0.01。
R3 判定比看起来复杂——正向订单(无退款):订单全量券合计 = 差异 → 命中;含退款订单(CR-5):只勾稽商家实际承担金额——① 结算表「售后服务单·货款」负收入行定位退款 SKU → 退款 SKU 券合计 = 差异 → 命中;② 否则退款 SKU 券合计 − 某单一活动组 = 差异 → 命中(金蝶红冲已含该活动平台份额);③ 结算表无售后货款行(流水扣收路径、无 SKU)→ 逐 SKU 试配;不按订单全量券兜底(0903 口径,废弃 v2.2.1 兜底行为)。
命中 → SUCCESS + MARKETING_COUPON_DIFF,差异额保留:主单下推 + 差异出费用应收单(自营/立减兼有分两张)。
步骤 6 · R4 差异诊断(5-a 直赔代扣 / 5-b 聚水潭补差价 / 5-c 小额打款退还)
R3 没命中,按序走 R4 的 3 个子分支(R4-b 是预留的膨胀金,账单类型未上线恒空):
| # | 触发条件 | 输出 |
|---|---|---|
| 5-a(R4-a)直赔退款代扣 | 差异 = 账户流水「交易备注」含「直赔退款代扣」的金额合计 | FAILURE + DIRECT_COMPENSATION,不出单,人工处理 |
| 5-b(R4-c)聚水潭补差价 | 差异 = 聚水潭补差价商品行金额合计(行文本含「差价 / 补差」) | SUCCESS + PRICE_DIFF_ORDER,差异额保留,出费用应收单 |
| 5-c(R4-d)小额打款退还 | 差异 < 0 且 = 结算收明细「小额打款费用退还」金额合计 | SUCCESS + SMALL_PAYMENT,差异落 0 只留标签,不出单(费用侧已按 XEDKFYTH 出单) |
步骤 7 · R5 兜底(取消未发货·有供应链单 / 极速退款真差异 / AMOUNT_DIFF)
R4 都没命中,按序走 R5 的 3 个子分支:
| # | 名称 | 触发条件 | 输出 | 典型样本 |
|---|---|---|---|---|
| R5-① | 取消未发货·有供应链单形态(v3.2.0) | 同订单对账体行一正一负互抵(容差 0.01)且账单净额 = 0;聚水潭售后分类 ∈ {普通退货, 拒收退货} | SUCCESS + CANCELLED_UNSHIPPED(并入 R0-a 同标签),正/负体行同标签,差异落 0、只打标不出单 | 3545434018225983(红冲 −20)、3561492019513425(零金额红冲) |
| R5-② | 极速退款·真差异 | 聚水潭售后分类 ∈ {普通退货, 拒收退货};账单净额 ≠ 0;v3.3.1 起增加红冲覆盖校验(红冲已足额覆盖钱包扣收则不命中) | FAILURE + INSTANT_REFUND(v3.2.0 起仅真差异命中),只打标不出单 | 3532450006116157、3534400005838258(差 −98.89 / −100.05 = 自营券份额,R3 命中翻 SUCCESS) |
| R5-③ | 兜底 | 以上均未命中 | FAILURE + AMOUNT_DIFF,不出单,人工核对 | — |
R5-① 是 v3.2.0 翻案最彻底的一步——4 体行由 FAILURE/INSTANT_REFUND 翻 SUCCESS/CANCELLED_UNSHIPPED,差异 +20/−46.90 全部落 0,剩余 596 体行结论逐行对比零变化 [来源:2026-09-07 v3.2.0 重跑实测]。实证:3545434018225983(红冲 −20)、3561492019513425(零金额红冲)。
贯穿 8 步的两个机制:承载行 + 防误判闸门
8 步判定流程不是独立的——有两个机制贯穿所有成功路径。
承载行(Carrier Row)机制:保证同一订单多体行只出一张物料明细、不翻倍差异
整单轧差后,同一订单可能有 2~6 条体行(正的销售 + 负的退款 + 售后单 + 直赔代扣等)。如果每条体行都出单,物料明细会翻倍、计划差异合计会翻倍——这就是分向对账时代的「一单多物料」问题。
承载行挑选规则(确定性算法,跨体行一致):
净额 > 0 归 POSITIVE、< 0 归 NEGATIVE、= 0 或方向无匹配取 id 最小者 ——对账阶段承载行规则节
承载行裁决后的三种落库:
| 体行身份 | 承载行 | 非承载行(成功) | 非承载行(失败) |
|---|---|---|---|
reconcileResult | SUCCESS(带标签或不带) | SUCCESS + NET_MERGED | 同父体行结论的 FAILURE |
| 金额 | 净额 | 0 | 0 |
| 物料明细 | 完整生成 | 不写(skipMaterialItems=true) | 不写 |
| 出单 | 出单(按标签映射) | 不出单、不建物料 | 不出单 |
例外分支:R0-a / R0-b2 / R5-① 三个分支不经承载行裁决——互抵单净额为 0、无翻倍风险,正/负体行直返同一标签(不挂 NET_MERGED)。确定性保证:同一订单正/负体行各自独立执行必得同一承载行结论——每条体行独立跑脚本 → 必须返回同一结论 + 同一承载行 id,否则脚本有 bug。
防误判闸门:拦截「净额 0 + 无供应链单」的伪成功
旧版 v2.2.8 分向口径下,极速退款经常假对平——结算表确认全额收入、平台已走钱包扣收退款;扣收行在池内时收入被轧成退款后净额、恰好与供应链对上。脚本误以为 R1 成功,实际是漏判的 691.00 元差异 [来源:2026-09-09 收入池白名单整改说明,样本 3537424007903740]。
防误判闸门就是拦截这种伪成功:过滤后供应链一行都没有时,账单净额为 0 也不算成功,必须走 R0 链识别真实场景。但互抵单必须前置——R0-a 先于闸门执行:互抵单账单净额为 0,不前置识别会被闸门全部落
4533



被折叠的 条评论
为什么被折叠?



