{
  "skill_name": "binzhou-one-card-regression-gate",
  "schema_version": "v1alpha1",
  "engine_name": "codex",
  "model_name": "",
  "start_time": "2026-08-12T14:54:33.390482+08:00",
  "end_time": "2026-08-12T14:57:31.075737+08:00",
  "case_results": [
    {
      "case_id": "recharge-arrival-not-closed",
      "title": "微信充值接口成功不等于最终到账闭环",
      "status": "FAIL",
      "duration_ms": 177677,
      "turns": 1,
      "input_tokens": 411713,
      "output_tokens": 3754,
      "grading": {
        "status": "FAIL",
        "turns_executed": 1,
        "turns_total": 1,
        "assertion_results": [
          {
            "text": "expect.must_contain",
            "passed": false,
            "evidence": "output does not contain \"现金余额\""
          }
        ],
        "summary": {
          "passed": 0,
          "failed": 1,
          "total": 1,
          "pass_rate": 0
        }
      },
      "configuration": "with_skill",
      "prompt": "滨州微信充值接口返回 success，前端也显示“充值成功”。同事准备关闭问题。\n请判断能否关单，并给出必须核对的服务端证据与失败回归项。\n",
      "response": "不能关单。\n\n目前只有“接口返回 success + 前端提示成功”，只能证明接口和展示层走到了成功分支，不能证明资金及一卡通账户真实、唯一、正确入账。应将问题保持为“待服务端补证/待回归”。\n\n### 必须核对的服务端证据\n\n要求使用同一笔小额测试订单，通过 `out_trade_no/订单号 + 微信 transaction_id + 一卡通交易流水号 + 用户/account map` 串起完整证据链：\n\n1. **微信支付事实**\n   - 微信侧最终交易状态为 `SUCCESS`，不能只看下单接口返回。\n   - 回调验签成功。\n   - `appid/mchid/out_trade_no/transaction_id/金额` 与本地订单完全一致。\n   - 支付回调原始时间、处理结果及脱敏日志可查。\n\n2. **充值对象正确**\n   - 当前 `one_card` 配置有效且 `enable=true`。\n   - 用户通过有效的 `business + staff_uuid/user_id` 映射到正确一卡通账户。\n   - 无串户、错卡、把访客误识别为一卡通用户。\n\n3. **一卡通真实入账**\n   - 服务端确实调用了一卡通充值接口。\n   - 保存了厂商交易号、业务状态码和业务消息；HTTP 200 或字段 `success` 本身不算入账证明。\n   - 厂商交易查询或余额查询确认该笔交易最终成功。\n   - 充值前余额、充值金额、充值后余额满足：`前余额 + 金额 = 后余额`。\n\n4. **本地财务落账**\n   - 充值订单从待支付到成功的状态迁移、成功时间、金额和用户正确。\n   - 本地资金流水/现金账本存在且只有一条。\n   - 本地余额镜像已更新，并与远端查询结果一致。\n   - 必须同时核对“财务流水”和“余额镜像”，只看页面余额不够。\n\n5. **幂等与异步闭环**\n   - 同一个微信回调、订单号或一卡通请求重复执行，不会重复入账。\n   - 数据库唯一约束、幂等键或锁有实际证据。\n   - 若经过队列、定时任务或 Supervisor：提供任务配置、worker 在线状态、执行日志、重试/补偿记录和死信情况。\n   - 日志中不存在未捕获异常、落账失败或一直处于处理中状态。\n\n### 必须执行的失败路径回归\n\n| 场景 | 必须达到的结果 |\n|---|---|\n| 微信下单成功但最终未支付 | 不显示充值成功，不调用一卡通入账 |\n| 微信回调验签失败、金额或商户号不匹配 | 拒绝处理、记录告警，不入账 |\n| 重复回调、重复提交、并发请求 | 订单只成功一次，微信和一卡通均不重复记账 |\n| 微信扣款成功、一卡通充值失败或超时 | 不伪报成功；进入明确的重试、补偿或退款状态 |\n| 一卡通已入账、本地写库失败 | 可按厂商流水查询恢复，重试不得再次充值 |\n| 一卡通返回 HTTP 200 但业务失败 | 前端显示处理中或失败，并提供可操作提示 |\n| 回调延迟、乱序、worker 重启、队列积压 | 最终可恢复，订单不会永久悬挂或重复入账 |\n| 用户映射缺失、失效或冲突 | 不给错误账户充值，明确阻断并告警 |\n| 零金额、负数、超限、精度异常 | 服务端校验拒绝，不依赖前端限制 |\n| 前端刷新、重复点击、网络重试 | 不生成多笔有效充值 |\n\n还必须通过四模式回归：\n\n- 一卡通关闭 + 访客：保持本地钱包逻辑，不调用一卡通接口。\n- 一卡通关闭 + 历史映射用户：仍走本地逻辑，不调用一卡通接口。\n- 一卡通开启 + 访客：仍走本地钱包，不能误充一卡通。\n- 一卡通开启 + 有效映射用户：才允许走一卡通充值，并完成上述账务闭环。\n\n**关单标准：**同一笔订单的微信支付、账户映射、一卡通入账、本地流水、余额对账和幂等证据全部齐全，且上述失败路径与四模式回归通过。任何一项缺失，都不能关单。\n\n"
    }
  ],
  "total_tokens": 415467
}
