# 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＝全通過


[1m── P0 前置：服務健康 ──[0m
  [32m✓[0m port 8099 /actuator/health（= 200）
  [32m✓[0m port 8087 /actuator/health（= 200）
  [32m✓[0m port 8091 /actuator/health（= 200）
  RUN_ID = E510171050

[1m── P1 退役今日生效之既有活動（避免疊加污染；本輪活動除外） ──[0m
  [32m✓[0m 退役後「今日生效」活動數（= 0）

[1m── P2 載體無關（AC 11）：同戶、同額、兩個不同載體 → 回饋逐分一致 ──[0m
  [32m✓[0m 建立 E2E-AC11-E510171050（= E2E-AC11-E510171050）
  [32m✓[0m 核准 E2E-AC11-E510171050（ACTIVE）（= ACTIVE）
  [32m✓[0m 入帳#1 已產生 postingId（= 36 ≥ 32）
  [32m✓[0m 入帳#2 已產生 postingId（= 36 ≥ 32）
  [32m✓[0m 兩筆指令皆已派發（SENT=2）
  [32m✓[0m 指令數（每載體各一筆）（= 2）
  [32m✓[0m 指令涵蓋之載體數（= 2）
  [32m✓[0m rewards 已入點 246（123+123）
  [32m✓[0m 載體#1 之回饋點數（= 123）
  [32m✓[0m 載體#2 之回饋點數（= 123）
  [32m✓[0m 兩載體逐分一致（= 123）

[1m── P3 比率 ＋ 上限（CR-047）：比率 5%／PER_HOUSEHOLD 1,000 分 → 第二筆精確截斷 ──[0m
  [32m✓[0m 建立 E2E-AC12-E510171050（= E2E-AC12-E510171050）
  [32m✓[0m 核准 E2E-AC12-E510171050（ACTIVE）（= ACTIVE）
  [32m✓[0m 比率檔已就緒（= 1）
  [32m✓[0m 入帳#1 已產生 postingId（= 36 ≥ 32）
  [32m✓[0m 比率路徑入點 6 點（617 分 ÷ 100）
  [32m✓[0m 上限用量已由 points.accrued 回填 600 分
  [32m✓[0m 入帳#2 已產生 postingId（= 36 ≥ 32）
  [32m✓[0m 上限截斷：指令仍僅 1 筆（600+617 > 1000）（= 1）
  [32m✓[0m 上限截斷：rewards 點數仍為 6（未重複入點）（= 6）

[1m── P4 回沖（SCS-026 §7.14）：CLAW_BACK → refund 指令 → rewards 反向扣回 ──[0m
  [32m✓[0m 建立 E2E-AC13-E510171050（clawback=CLAW_BACK）（= E2E-AC13-E510171050）
  [32m✓[0m 核准 E2E-AC13-E510171050（ACTIVE）（= ACTIVE）
  [32m✓[0m 入帳已產生 postingId（= 36 ≥ 32）
  [32m✓[0m 沖正前入點 123
  [32m✓[0m 沖正交易已產生 postingId（= 36 ≥ 32）
  [32m✓[0m 已下發 refund 指令（refund=true）（= 1）
  [32m✓[0m rewards 反向扣回（ADJUST -123）（= -123）
  [32m✓[0m 沖正後淨點數歸零（= 0）

[1m── 結果 ──[0m
[32m全部通過：32/32[0m
活動：E2E-AC11-E510171050 / E2E-AC12-E510171050 / E2E-AC13-E510171050
