docs: record TEST inventory history rollout and verified turnover

This commit is contained in:
2026-10-15 14:20:01 +08:00
parent 265e270e72
commit 54d33faaa4
3 changed files with 26 additions and 5 deletions
+2 -2
View File
@@ -54,7 +54,7 @@
以 `账号+仓库+货主+SKU` 为统计身份,内部链进一步按 `库位+内部批次+品质` 区分。同名SKU不跨货主合并,跨仓独立。
1. **变动量**用有符号 `bookChangQty` 解析为DECIMAL;PA/DO样本中它与 `bookQty` 一致。两字段保留,不相加、不因业务类型再取负号。`bookQty` 不是期初量。其他类型是否同义由类型样本验证,未知语义不能用于正式日库存。
2. **链校验**:同一链前一笔结存+当前变动=当前结存;首笔前结存=首笔结存-首笔变动。`closeQty` 只对该库位/批次/品质有效,不能把多笔结存直接相加或取最新一笔当SKU总量。分组键、同秒顺序未确认时保留歧义,不仅按字符串ID排序猜时间。
2. **链校验**:同一链前一笔结存+当前变动=当前结存;首笔前结存=首笔结存-首笔变动。`closeQty` 只对该库位/批次/品质有效,不能把多笔结存直接相加或取最新一笔当SKU总量。分组键缺失时保留未知;同秒流水按“前结存→后结存”构成有向余额图,只有使用全部独立流水边的完整路径唯一时才接受,不按条数阈值或字符串ID猜顺序。无前序余额的多边回路、重复边引起的多解及真正分支歧义仍未知,断链/断开图拒绝;用相反边优先级的两次迭代欧拉路径核对唯一性,避免阶乘枚举。
3. **SKU锚点**:使用已保存、身份与单位明确的SKU分品质实物快照作为独立锚点,按同品质完整流水反推,再合计全品质。某批次在窗口内无变动就可能完全不出现在流水中,因此不能要求“出现过的链结存之和=SKU快照”,也不能把两者的差额自动判为漏账。例如活动批次10件、无变动批次90件,SKU锚点仍是100件;90件保留在锚点余额内。链连续性检查只约束实际观察到的链;只有另有完整同刻批次清单,才做全链总额对账。缺品质快照不能把总量任意拆分;快照缺行只有在供应商已核验的完整返回/零库存省略规则下才能认定零,否则未知。
库存扫描不是原子历史快照,`observed_at` 也不保证就是供应商扣账时刻;保存真实页面/整次扫描观测区间。若该SKU在区间内发生变动而无法确定先后,标记 `ANCHOR_TIME_AMBIGUOUS`,补稳定锚点或缩小对账区间,不能把秒级流水与毫秒响应时间机械相减。用其他独立库存观测点检验还原结果;仅从同一个锚点正推、反推互相吻合不能充当独立正确性证明。
4. **反推公式与尾段**:在已确认稳定的锚点状态A下,日期D日末为 `I_D = I_A − ΣΔ`,求和范围从 `D+1 00:00`(含)到锚点状态已包含的最后事件,不能漏掉次日零点至早晨锚点之间的流水。来源端点未核验或无法确认事件是否已包含于锚点时,不发布该SKU。目标日期片与锚点尾段分别冻结边界并记录覆盖;尾段必须覆盖锚点整个观测区间以检查歧义,不以“昨日片已完成”替代。跨片重复按来源ID只计一次,恰好零点的事件属于新一天。也可从已核验期初正推逐笔核对;没有变动的日子只有在完整流水范围与有效锚点支撑下才继承余额,这属于结存推导,不是缺日补零。
@@ -69,7 +69,7 @@
流程为:`固定片拉取 → stage落地 → 覆盖校验 → 幂等归并flow事实 → 固定输入构建day_version/daily → 锚点及链校验 → 原子发布日版本 → 查询读取`。
- 相同流水ID、相同内容重复采集只更新本次已见证据,不重复增减库存;同ID内容变化生成本地修订号,保留旧stage、标记受影响日版本需重算。同ID异身份先隔离冲突并使可能受影响范围待核验,不能自动搬移事实;只有身份更正得到确认后,才按新旧依赖并集重建。不能用 `ON DUPLICATE KEY` 累加delta,也不因为某一页没返回就删除历史流水。
- 每日候选在独立版本下批量写入;写入中断只留下未发布候选,页面读不到半批数据。输入流水修订号、锚点、范围、候选身份全集、规则版本及校验摘要冻结,指向可重放的不可变stage修订,不能只存摘要后再读flow表最新值。归并事实修订与发布校验共用同仓版本互斥;发布短事务内核对输入代次未变并切换日头,变化则重建,不能在校验和切换之间放入新的修订。
- 每日候选在独立版本下批量写入;写入中断只留下未发布候选,页面读不到半批数据。公开日末口径 `FLOW_EOD_V1` 与内部计算修订分开:计算修订号进入构建去重签名和版本证据;算法修复后用已存流水自动重算一次,相同输入和修订成功后不重复构建,无需重新请求来源。输入流水修订号、锚点、范围、候选身份全集、规则版本及校验摘要冻结,指向可重放的不可变stage修订,不能只存摘要后再读flow表最新值。归并事实修订与发布校验共用同仓版本互斥;发布短事务内核对输入代次未变并切换日头,变化则重建,不能在校验和切换之间放入新的修订。
- **首次补齐或新增日期,一天构建和校验通过即可发布一天**,不设30分钟等待,不等60天全跑完。版本包含全候选的有效/未知状态;个别SKU异常不阻塞其他SKU出结果,但未知不能被省略而使货主合计看似完整。若本次也修正已发布日期或改变既有候选全集,按下述校正组发布,不能借“逐日发布”跳过跨日一致性。
- 同一SKU历史变动修订会影响多个日余额,必须按实际计算依赖确定受影响日期,不能只重算发生当日或机械地重算“事件日至锚点”。以较晚锚点反推时,某笔delta修订影响求和范围包含它的更早日末;以较早锚点正推时则影响其后的日末。时间、身份、品质或锚点变化按新旧依赖范围并集失效重建;新发现的售空SKU也要重新核对候选全集。按依赖重建保留范围内的全部受影响日期,无需重拉其他未变化的历史销量。无修改时间或删除契约时,旧记录缺失只进入冲突核验,不自动抹账。
- **校正组原子发布**:一个重建任务保存不可变的组清单(publication_group_id、受影响日期、预期旧头、新候选ID、输入代次)。全部候选就绪后,在一个短事务内校验旧头和输入代次、切换全部日头及有效区间、标记整组完成;失败全部回滚。批量计算与daily写入在事务外提前完成,切换只涉及头记录;同仓重建互斥避免并发覆盖。查询可读完整旧组或完整新组,不能读到一半新、一半旧;重启用组清单确认整组是否已提交,不逐日猜测完成状态。