# campaign → rewards 全鏈路真機端到端驗證(CR-046/CR-047/CR-049) # 產生時間:2026-10-17 10:51:15 CST # 腳本:ops/local/e2e/campaign_chain_e2e.sh # 環境:Oracle 23ai(cc-oracle)/Kafka 4.3.1/campaign:8099、posting:8087、rewards:8091 # 判定原則:一律讀權威資料表,不讀日誌;退出碼 0=全通過 ── P0 前置:服務健康 ── ✓ port 8099 /actuator/health(= 200) ✓ port 8087 /actuator/health(= 200) ✓ port 8091 /actuator/health(= 200) RUN_ID = E510171050 ── P1 退役今日生效之既有活動(避免疊加污染;本輪活動除外) ── ✓ 退役後「今日生效」活動數(= 0) ── P2 載體無關(AC 11):同戶、同額、兩個不同載體 → 回饋逐分一致 ── ✓ 建立 E2E-AC11-E510171050(= E2E-AC11-E510171050) ✓ 核准 E2E-AC11-E510171050(ACTIVE)(= ACTIVE) ✓ 入帳#1 已產生 postingId(= 36 ≥ 32) ✓ 入帳#2 已產生 postingId(= 36 ≥ 32) ✓ 兩筆指令皆已派發(SENT=2) ✓ 指令數(每載體各一筆)(= 2) ✓ 指令涵蓋之載體數(= 2) ✓ rewards 已入點 246(123+123) ✓ 載體#1 之回饋點數(= 123) ✓ 載體#2 之回饋點數(= 123) ✓ 兩載體逐分一致(= 123) ── P3 比率 + 上限(CR-047):比率 5%/PER_HOUSEHOLD 1,000 分 → 第二筆精確截斷 ── ✓ 建立 E2E-AC12-E510171050(= E2E-AC12-E510171050) ✓ 核准 E2E-AC12-E510171050(ACTIVE)(= ACTIVE) ✓ 比率檔已就緒(= 1) ✓ 入帳#1 已產生 postingId(= 36 ≥ 32) ✓ 比率路徑入點 6 點(617 分 ÷ 100) ✓ 上限用量已由 points.accrued 回填 600 分 ✓ 入帳#2 已產生 postingId(= 36 ≥ 32) ✓ 上限截斷:指令仍僅 1 筆(600+617 > 1000)(= 1) ✓ 上限截斷:rewards 點數仍為 6(未重複入點)(= 6) ── P4 回沖(SCS-026 §7.14):CLAW_BACK → refund 指令 → rewards 反向扣回 ── ✓ 建立 E2E-AC13-E510171050(clawback=CLAW_BACK)(= E2E-AC13-E510171050) ✓ 核准 E2E-AC13-E510171050(ACTIVE)(= ACTIVE) ✓ 入帳已產生 postingId(= 36 ≥ 32) ✓ 沖正前入點 123 ✓ 沖正交易已產生 postingId(= 36 ≥ 32) ✓ 已下發 refund 指令(refund=true)(= 1) ✓ rewards 反向扣回(ADJUST -123)(= -123) ✓ 沖正後淨點數歸零(= 0) ── 結果 ── 全部通過:32/32 活動:E2E-AC11-E510171050 / E2E-AC12-E510171050 / E2E-AC13-E510171050