Bladeren bron

docs(kb/93): 加 ADR-12 dwd 支付/退款事件分离待办

当前 status 口径取"当前有效已支付"是分析师实时库口径改编,事件落盘
status 固化无法切退款,退款须独立成表。2026 退款仅 4.31%,继续 status
为权宜;反悔触发=需精确历史 GMV/退款分析。附 302 未中卡算消费确认。

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
tianyu.chu 1 week geleden
bovenliggende
commit
206ca7850d
1 gewijzigde bestanden met toevoegingen van 19 en 0 verwijderingen
  1. 19 0
      kb/93-架构决策.md

+ 19 - 0
kb/93-架构决策.md

@@ -480,3 +480,22 @@
   - 补数是调度中断的运维兜底;日调度保持连续(中断 ≤ N=2 天由 ADR-09 自愈),超期用本任务流回刷
   - 调度中断越久,补数 `start` 越往前,覆盖区间越大
   - 业务时间远早于补数 `start` 的极端漂移,由定期校验对账(Hive vs PG)兜底
+
+### ADR-12 dwd 订单事实表演进:支付/退款事件分离(待办)
+
+- **状态**:草案(方向记录,暂不实施)
+
+- **背景**:当前 `dwd_trd_order_pay_apd_d` 用 `status IN (101,103,104,105,106,301,302)` 取"当前有效已支付订单"快照,是从数据分析师实时业务库口径(取当前未退款)改编而来。问题:事件按 `payment_success_time` 分区落盘后,订单后续退款使 `status` 漂出集合,但 dwd 回算窗 N=2(ADR-09)外不再刷新 → 老分区状态过期,dwd 略高估"当前有效"(对账 Hive > PG 的来源)。`payment_success_time IS NOT NULL` 经实测是干净的支付成功判据(待支付/取消 0% 非空、已支付及之后 99.5%+)。
+
+- **决策方向**:支付事件 + 退款事件各 append-only,净值在下游组合。
+  - `dwd_trd_order_pay_apd_d`:筛 `payment_success_time IS NOT NULL`,收全部支付成功事件,`status` 仅存字段不过滤
+  - `dwd_trd_order_refund_apd_d`(新):退款事件,独立表,按退款时间分区
+  - 净 GMV / 当前有效 = 支付 LEFT JOIN 退款(支付事实落盘 status 固化,**无法靠 dwd_pay 的 status 切退款**,故退款必须独立成表)
+
+- **当前权宜**:继续 status 口径。2026 退款占比仅 4.31%(47.6万/1104万),status 口径真正高估的只是"N=2 窗外才退款"那部分(< 4.31%),对 tdm 标签 / 日常分析可接受。
+
+- **反悔触发**:需要精确历史 GMV / 退款分析 / dwd 当权威口径时实施。
+
+- **阻塞**:业务库退款字段口径混乱(`refund_time` / `refund_success_time` / `refund_fee` / `refund_status` 等多字段),退款判据需先查清才能建退款表。
+
+- **附口径确认**(2026 PG 实测):302 订单结束(未中卡) 占 2026 的 35%(390万),算消费偏好(拼团类刮刮乐,参与即反映品类偏好,中不中卡不影响信号),dwd 含 302、tdm 统计含未中卡,确认无误。