receipt-lifecycle.sh

20260916-201504 轮 · 看它的历史
靶子 BASE=http://localhost:20098 clone=h8 container=wt_h8_tp8

== A) 限频两档必须分离 ==
  ✓ A1 首次放行(ok=1,reason 空)
  ✓ A2 立刻再来 = too_fast(不是 lifetime_cap)
  ✓ A3 造够 10 条
  ✓ A4 撞上限 = lifetime_cap(且不是 too_fast)
  ✓ A5 清掉间隔缓存后仍是 lifetime_cap

== 主链夹具:动态发现一条 eligible 订单 ==
eligible: ddnum=202609070018324482121240 uid=990863 真金=6000 MYR
  ✓ mint member Bearer

== C+D) 驳回 → 站内信 + 预填 ==
  ✓ apply→receipt_id
  ✓ C1 驳回 info=1
  ✓ C1 status→3
  ✓ C2 站内信落库(本次新增 1 行)
  ✓ C3 站内信用**收件人**的语言(简体)
  ✓ C3 守卫:没跟着操作者落成繁体
  ✓ C4 站内信是纯文本,没有字面 <br/>
  ✓ D1 prefill.title_name 解密正确
  ✓ D2 prefill.title_type
  ✓ D3 prefill.remark
  ✓ D4 驳回不占名额,可重新申请

== B) 手动作废已开具凭证 ==
  ✓ 重新申请→新 receipt_id
  ✓ 夹具:issue→status 2
  ✓ B1 空理由被拒(info=0)
  ✓ B1 守卫:status 仍是 2
  ✓ B2 作废 info=1
  ✓ B2 status→4
  ✓ B3 作废理由落 reject_reason 列
  ✓ B4 建了 1 条 receipt_void 红冲工单
  ✓ B4 工单正文带票号(ops 据此红冲)
  ✓ B5 重复作废被 CAS 拒(info=0)
  ✓ B5 工单仍只有 1 条(没建出第二条)
  ✓ B5 理由未被第二次覆盖
  ✓ C5 站内信本次共 3 行(驳回+开具+作废)
  ✓ C5 三种通知各 1 行(未通过|已开具|已作废)
  ✓ B6 作废后 can_apply=1(用户能重新申请)
  ✓ B7 作废后不再下发凭证文件签名 URL
  ✓ D5 作废也进 prefill(抬头通常没变,错的是票)
  ✓ D5 prefill.title_type=company
  ✓ D5 prefill.tax_no

== A6) HTTP 层:两档文案真的不同 ==
  ✓ A6 status=lifetime_cap
  ✓ A6 文案告诉他去找客服
  ✓ A6 🔴 不再说「稍后再试」(那是错误引导,再等也没用)

==== e2e-receipt-lifecycle: PASS=39 FAIL=0 ====