{
  "issueId": "3840",
  "environment": "dev",
  "generatedAt": "2026-07-16T16:41:13+09:00",
  "sourceResult": "qa-results redacted from tracked output",
  "timings": {
    "issueId": "3840",
    "environment": "dev",
    "generatedAt": "2026-07-16T07:39:53.188Z",
    "exitStatus": 0,
    "timings": [
      {
        "name": "qa:run",
        "startedAt": "2026-07-16T07:38:57.493Z",
        "detail": {
          "issueId": "3840",
          "environment": "dev",
          "exitStatus": 0
        },
        "finishedAt": "2026-07-16T07:39:53.188Z",
        "durationMs": 55695,
        "status": "ok"
      },
      {
        "name": "prepare-results",
        "startedAt": "2026-07-16T07:38:57.494Z",
        "detail": {},
        "finishedAt": "2026-07-16T07:38:57.495Z",
        "durationMs": 1,
        "status": "ok"
      },
      {
        "name": "auth-refresh",
        "startedAt": "2026-07-16T07:38:57.495Z",
        "detail": {},
        "finishedAt": "2026-07-16T07:38:58.691Z",
        "durationMs": 1196,
        "status": "ok"
      },
      {
        "name": "auth-refresh:admin/dev/ADMIN",
        "startedAt": "2026-07-16T07:38:57.495Z",
        "detail": {
          "application": "admin",
          "role": "ADMIN",
          "businessRole": "ADMIN"
        },
        "finishedAt": "2026-07-16T07:38:58.691Z",
        "durationMs": 1196,
        "status": "ok"
      },
      {
        "name": "playwright",
        "startedAt": "2026-07-16T07:38:58.691Z",
        "detail": {
          "command": "npx playwright test qa/issues/3840/dev --trace retain-on-failure",
          "exitStatus": 0
        },
        "finishedAt": "2026-07-16T07:39:53.188Z",
        "durationMs": 54497,
        "status": "ok"
      }
    ]
  },
  "summary": {
    "status": "BLOCKED",
    "passed": 0,
    "failed": 0,
    "skipped": 0,
    "blocked": 8,
    "flaky": 0,
    "durationMs": 53852
  },
  "rows": [
    {
      "title": "3840/dev/bond-settlement-recovery.spec.ts / [3840][dev] [QA] 채권 정산 반환총액·회수이력·엑셀 표시 검증 / 선정산 웰컴*선/sayhi 채권 15,000원을 등록하고 채권총액·반환총액·잔여채권을 확인",
      "status": "BLOCKED",
      "statusText": "확인 불가",
      "durationMs": 6798,
      "evidence": [
        "artifacts/screenshots/01-채권관리-ADMIN-early-register.png",
        "artifacts/logs/01-early-register-preflight-evidence.md",
        "artifacts/traces/01-early-register-trace.zip"
      ],
      "screenshots": [
        "artifacts/screenshots/01-채권관리-ADMIN-early-register.png"
      ],
      "traces": [
        "artifacts/traces/01-early-register-trace.zip"
      ],
      "logs": [
        "artifacts/logs/01-early-register-preflight-evidence.md"
      ],
      "files": [],
      "role": "전체",
      "page": "[3840][dev] [QA] 채권 정산 반환총액·회수이력·엑셀 표시 검증",
      "checklistItem": "선정산 웰컴*선/sayhi 채권 15,000원을 등록하고 채권총액·반환총액·잔여채권을 확인",
      "action": "전체 계정으로 [3840][dev] [QA] 채권 정산 반환총액·회수이력·엑셀 표시 검증 항목을 확인",
      "expected": "전체 계정에서 [3840][dev] [QA] 채권 정산 반환총액·회수이력·엑셀 표시 검증 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "확인을 끝내지 못했습니다: skip: BLOCKED: 박재민_가맹/sayhi에 기존 PENDING 정산 66건이 있어 신규 채권이 등록 즉시 회수됩니다. 정산 ID=tenant-id-redacted, tenant-id-redacted, tenant-id-redacted, tenant-id-redacted, tenant-id-redacted. 기존 PENDING 정산 정리 또는 테스트 데이터 초기화 후 재실행해야 합니다.",
      "error": "skip: BLOCKED: 박재민_가맹/sayhi에 기존 PENDING 정산 66건이 있어 신규 채권이 등록 즉시 회수됩니다. 정산 ID=tenant-id-redacted, tenant-id-redacted, tenant-id-redacted, tenant-id-redacted, tenant-id-redacted. 기존 PENDING 정산 정리 또는 테스트 데이터 초기화 후 재실행해야 합니다.",
      "failureCategory": "blocked",
      "failureCategoryText": "확인 조건 부족",
      "reproduction": {
        "required": false,
        "reason": "확인 조건이 부족해 본 시나리오를 끝까지 실행하지 못했습니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "3840/dev/bond-settlement-recovery.spec.ts / [3840][dev] [QA] 채권 정산 반환총액·회수이력·엑셀 표시 검증 / sayhi 첫 통보 후 반환총액 14,250원, 잔여채권 750원 및 선정산 표시를 확인",
      "status": "BLOCKED",
      "statusText": "확인 불가",
      "durationMs": 6600,
      "evidence": [
        "artifacts/screenshots/02-채권관리-ADMIN-early-first.png",
        "artifacts/logs/02-early-first-preflight-evidence.md",
        "artifacts/traces/02-early-first-trace.zip"
      ],
      "screenshots": [
        "artifacts/screenshots/02-채권관리-ADMIN-early-first.png"
      ],
      "traces": [
        "artifacts/traces/02-early-first-trace.zip"
      ],
      "logs": [
        "artifacts/logs/02-early-first-preflight-evidence.md"
      ],
      "files": [],
      "role": "전체",
      "page": "[3840][dev] [QA] 채권 정산 반환총액·회수이력·엑셀 표시 검증",
      "checklistItem": "sayhi 첫 통보 후 반환총액 14,250원, 잔여채권 750원 및 선정산 표시를 확인",
      "action": "전체 계정으로 [3840][dev] [QA] 채권 정산 반환총액·회수이력·엑셀 표시 검증 항목을 확인",
      "expected": "전체 계정에서 [3840][dev] [QA] 채권 정산 반환총액·회수이력·엑셀 표시 검증 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "확인을 끝내지 못했습니다: skip: BLOCKED: 박재민_가맹/sayhi에 기존 PENDING 정산 66건이 있어 신규 채권이 등록 즉시 회수됩니다. 정산 ID=tenant-id-redacted, tenant-id-redacted, tenant-id-redacted, tenant-id-redacted, tenant-id-redacted. 기존 PENDING 정산 정리 또는 테스트 데이터 초기화 후 재실행해야 합니다.",
      "error": "skip: BLOCKED: 박재민_가맹/sayhi에 기존 PENDING 정산 66건이 있어 신규 채권이 등록 즉시 회수됩니다. 정산 ID=tenant-id-redacted, tenant-id-redacted, tenant-id-redacted, tenant-id-redacted, tenant-id-redacted. 기존 PENDING 정산 정리 또는 테스트 데이터 초기화 후 재실행해야 합니다.",
      "failureCategory": "blocked",
      "failureCategoryText": "확인 조건 부족",
      "reproduction": {
        "required": false,
        "reason": "확인 조건이 부족해 본 시나리오를 끝까지 실행하지 못했습니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "3840/dev/bond-settlement-recovery.spec.ts / [3840][dev] [QA] 채권 정산 반환총액·회수이력·엑셀 표시 검증 / 선정산 상세보기에서 회수금액·거래일·정산일·거래정보를 확인",
      "status": "BLOCKED",
      "statusText": "확인 불가",
      "durationMs": 6458,
      "evidence": [
        "artifacts/screenshots/03-채권관리-ADMIN-early-detail.png",
        "artifacts/logs/03-early-detail-preflight-evidence.md",
        "artifacts/traces/03-early-detail-trace.zip"
      ],
      "screenshots": [
        "artifacts/screenshots/03-채권관리-ADMIN-early-detail.png"
      ],
      "traces": [
        "artifacts/traces/03-early-detail-trace.zip"
      ],
      "logs": [
        "artifacts/logs/03-early-detail-preflight-evidence.md"
      ],
      "files": [],
      "role": "전체",
      "page": "[3840][dev] [QA] 채권 정산 반환총액·회수이력·엑셀 표시 검증",
      "checklistItem": "선정산 상세보기에서 회수금액·거래일·정산일·거래정보를 확인",
      "action": "전체 계정으로 [3840][dev] [QA] 채권 정산 반환총액·회수이력·엑셀 표시 검증 항목을 확인",
      "expected": "전체 계정에서 [3840][dev] [QA] 채권 정산 반환총액·회수이력·엑셀 표시 검증 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "확인을 끝내지 못했습니다: skip: BLOCKED: 박재민_가맹/sayhi에 기존 PENDING 정산 66건이 있어 신규 채권이 등록 즉시 회수됩니다. 정산 ID=tenant-id-redacted, tenant-id-redacted, tenant-id-redacted, tenant-id-redacted, tenant-id-redacted. 기존 PENDING 정산 정리 또는 테스트 데이터 초기화 후 재실행해야 합니다.",
      "error": "skip: BLOCKED: 박재민_가맹/sayhi에 기존 PENDING 정산 66건이 있어 신규 채권이 등록 즉시 회수됩니다. 정산 ID=tenant-id-redacted, tenant-id-redacted, tenant-id-redacted, tenant-id-redacted, tenant-id-redacted. 기존 PENDING 정산 정리 또는 테스트 데이터 초기화 후 재실행해야 합니다.",
      "failureCategory": "blocked",
      "failureCategoryText": "확인 조건 부족",
      "reproduction": {
        "required": false,
        "reason": "확인 조건이 부족해 본 시나리오를 끝까지 실행하지 못했습니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "3840/dev/bond-settlement-recovery.spec.ts / [3840][dev] [QA] 채권 정산 반환총액·회수이력·엑셀 표시 검증 / sayhi 두 번째 통보 후 반환총액 15,000원, 잔여채권 0원 및 두 번째 회수금액 750원을 확인",
      "status": "BLOCKED",
      "statusText": "확인 불가",
      "durationMs": 6498,
      "evidence": [
        "artifacts/screenshots/04-채권관리-ADMIN-early-second.png",
        "artifacts/logs/04-early-second-preflight-evidence.md",
        "artifacts/traces/04-early-second-trace.zip"
      ],
      "screenshots": [
        "artifacts/screenshots/04-채권관리-ADMIN-early-second.png"
      ],
      "traces": [
        "artifacts/traces/04-early-second-trace.zip"
      ],
      "logs": [
        "artifacts/logs/04-early-second-preflight-evidence.md"
      ],
      "files": [],
      "role": "전체",
      "page": "[3840][dev] [QA] 채권 정산 반환총액·회수이력·엑셀 표시 검증",
      "checklistItem": "sayhi 두 번째 통보 후 반환총액 15,000원, 잔여채권 0원 및 두 번째 회수금액 750원을 확인",
      "action": "전체 계정으로 [3840][dev] [QA] 채권 정산 반환총액·회수이력·엑셀 표시 검증 항목을 확인",
      "expected": "전체 계정에서 [3840][dev] [QA] 채권 정산 반환총액·회수이력·엑셀 표시 검증 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "확인을 끝내지 못했습니다: skip: BLOCKED: 박재민_가맹/sayhi에 기존 PENDING 정산 66건이 있어 신규 채권이 등록 즉시 회수됩니다. 정산 ID=tenant-id-redacted, tenant-id-redacted, tenant-id-redacted, tenant-id-redacted, tenant-id-redacted. 기존 PENDING 정산 정리 또는 테스트 데이터 초기화 후 재실행해야 합니다.",
      "error": "skip: BLOCKED: 박재민_가맹/sayhi에 기존 PENDING 정산 66건이 있어 신규 채권이 등록 즉시 회수됩니다. 정산 ID=tenant-id-redacted, tenant-id-redacted, tenant-id-redacted, tenant-id-redacted, tenant-id-redacted. 기존 PENDING 정산 정리 또는 테스트 데이터 초기화 후 재실행해야 합니다.",
      "failureCategory": "blocked",
      "failureCategoryText": "확인 조건 부족",
      "reproduction": {
        "required": false,
        "reason": "확인 조건이 부족해 본 시나리오를 끝까지 실행하지 못했습니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "3840/dev/bond-settlement-recovery.spec.ts / [3840][dev] [QA] 채권 정산 반환총액·회수이력·엑셀 표시 검증 / 채권을 추가 등록하면 잔여채권 증가 및 회수일자 초기화를 확인",
      "status": "BLOCKED",
      "statusText": "확인 불가",
      "durationMs": 6589,
      "evidence": [
        "artifacts/screenshots/05-채권관리-ADMIN-early-additional.png",
        "artifacts/logs/05-early-additional-preflight-evidence.md",
        "artifacts/traces/05-early-additional-trace.zip"
      ],
      "screenshots": [
        "artifacts/screenshots/05-채권관리-ADMIN-early-additional.png"
      ],
      "traces": [
        "artifacts/traces/05-early-additional-trace.zip"
      ],
      "logs": [
        "artifacts/logs/05-early-additional-preflight-evidence.md"
      ],
      "files": [],
      "role": "전체",
      "page": "[3840][dev] [QA] 채권 정산 반환총액·회수이력·엑셀 표시 검증",
      "checklistItem": "채권을 추가 등록하면 잔여채권 증가 및 회수일자 초기화를 확인",
      "action": "전체 계정으로 [3840][dev] [QA] 채권 정산 반환총액·회수이력·엑셀 표시 검증 항목을 확인",
      "expected": "전체 계정에서 [3840][dev] [QA] 채권 정산 반환총액·회수이력·엑셀 표시 검증 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "확인을 끝내지 못했습니다: skip: BLOCKED: 박재민_가맹/sayhi에 기존 PENDING 정산 66건이 있어 신규 채권이 등록 즉시 회수됩니다. 정산 ID=tenant-id-redacted, tenant-id-redacted, tenant-id-redacted, tenant-id-redacted, tenant-id-redacted. 기존 PENDING 정산 정리 또는 테스트 데이터 초기화 후 재실행해야 합니다.",
      "error": "skip: BLOCKED: 박재민_가맹/sayhi에 기존 PENDING 정산 66건이 있어 신규 채권이 등록 즉시 회수됩니다. 정산 ID=tenant-id-redacted, tenant-id-redacted, tenant-id-redacted, tenant-id-redacted, tenant-id-redacted. 기존 PENDING 정산 정리 또는 테스트 데이터 초기화 후 재실행해야 합니다.",
      "failureCategory": "blocked",
      "failureCategoryText": "확인 조건 부족",
      "reproduction": {
        "required": false,
        "reason": "확인 조건이 부족해 본 시나리오를 끝까지 실행하지 못했습니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "3840/dev/bond-settlement-recovery.spec.ts / [3840][dev] [QA] 채권 정산 반환총액·회수이력·엑셀 표시 검증 / 일반정산 웰컴*일/sayhello 채권 15,000원을 등록하고 반환총액·잔여채권을 확인",
      "status": "BLOCKED",
      "statusText": "확인 불가",
      "durationMs": 7294,
      "evidence": [
        "artifacts/screenshots/06-채권관리-ADMIN-normal-register.png",
        "artifacts/logs/06-normal-register-preflight-evidence.md",
        "artifacts/traces/06-normal-register-trace.zip"
      ],
      "screenshots": [
        "artifacts/screenshots/06-채권관리-ADMIN-normal-register.png"
      ],
      "traces": [
        "artifacts/traces/06-normal-register-trace.zip"
      ],
      "logs": [
        "artifacts/logs/06-normal-register-preflight-evidence.md"
      ],
      "files": [],
      "role": "전체",
      "page": "[3840][dev] [QA] 채권 정산 반환총액·회수이력·엑셀 표시 검증",
      "checklistItem": "일반정산 웰컴*일/sayhello 채권 15,000원을 등록하고 반환총액·잔여채권을 확인",
      "action": "전체 계정으로 [3840][dev] [QA] 채권 정산 반환총액·회수이력·엑셀 표시 검증 항목을 확인",
      "expected": "전체 계정에서 [3840][dev] [QA] 채권 정산 반환총액·회수이력·엑셀 표시 검증 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "확인을 끝내지 못했습니다: skip: BLOCKED: 박재민_가맹/sayhi에 기존 PENDING 정산 66건이 있어 신규 채권이 등록 즉시 회수됩니다. 정산 ID=tenant-id-redacted, tenant-id-redacted, tenant-id-redacted, tenant-id-redacted, tenant-id-redacted. 기존 PENDING 정산 정리 또는 테스트 데이터 초기화 후 재실행해야 합니다.",
      "error": "skip: BLOCKED: 박재민_가맹/sayhi에 기존 PENDING 정산 66건이 있어 신규 채권이 등록 즉시 회수됩니다. 정산 ID=tenant-id-redacted, tenant-id-redacted, tenant-id-redacted, tenant-id-redacted, tenant-id-redacted. 기존 PENDING 정산 정리 또는 테스트 데이터 초기화 후 재실행해야 합니다.",
      "failureCategory": "blocked",
      "failureCategoryText": "확인 조건 부족",
      "reproduction": {
        "required": false,
        "reason": "확인 조건이 부족해 본 시나리오를 끝까지 실행하지 못했습니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "3840/dev/bond-settlement-recovery.spec.ts / [3840][dev] [QA] 채권 정산 반환총액·회수이력·엑셀 표시 검증 / sayhello 통보 후 일반정산 표시와 회수금액 상한 15,000원을 확인",
      "status": "BLOCKED",
      "statusText": "확인 불가",
      "durationMs": 6686,
      "evidence": [
        "artifacts/screenshots/07-정산내역-ADMIN-normal-recovery.png",
        "artifacts/logs/07-normal-recovery-preflight-evidence.md",
        "artifacts/traces/07-normal-recovery-trace.zip"
      ],
      "screenshots": [
        "artifacts/screenshots/07-정산내역-ADMIN-normal-recovery.png"
      ],
      "traces": [
        "artifacts/traces/07-normal-recovery-trace.zip"
      ],
      "logs": [
        "artifacts/logs/07-normal-recovery-preflight-evidence.md"
      ],
      "files": [],
      "role": "전체",
      "page": "[3840][dev] [QA] 채권 정산 반환총액·회수이력·엑셀 표시 검증",
      "checklistItem": "sayhello 통보 후 일반정산 표시와 회수금액 상한 15,000원을 확인",
      "action": "전체 계정으로 [3840][dev] [QA] 채권 정산 반환총액·회수이력·엑셀 표시 검증 항목을 확인",
      "expected": "전체 계정에서 [3840][dev] [QA] 채권 정산 반환총액·회수이력·엑셀 표시 검증 확인 결과가 체크리스트와 일치해야 합니다.",
      "actual": "확인을 끝내지 못했습니다: skip: BLOCKED: 박재민_가맹/sayhi에 기존 PENDING 정산 66건이 있어 신규 채권이 등록 즉시 회수됩니다. 정산 ID=tenant-id-redacted, tenant-id-redacted, tenant-id-redacted, tenant-id-redacted, tenant-id-redacted. 기존 PENDING 정산 정리 또는 테스트 데이터 초기화 후 재실행해야 합니다.",
      "error": "skip: BLOCKED: 박재민_가맹/sayhi에 기존 PENDING 정산 66건이 있어 신규 채권이 등록 즉시 회수됩니다. 정산 ID=tenant-id-redacted, tenant-id-redacted, tenant-id-redacted, tenant-id-redacted, tenant-id-redacted. 기존 PENDING 정산 정리 또는 테스트 데이터 초기화 후 재실행해야 합니다.",
      "failureCategory": "blocked",
      "failureCategoryText": "확인 조건 부족",
      "reproduction": {
        "required": false,
        "reason": "확인 조건이 부족해 본 시나리오를 끝까지 실행하지 못했습니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    },
    {
      "title": "3840/dev/bond-settlement-recovery.spec.ts / [3840][dev] [QA] 채권 정산 반환총액·회수이력·엑셀 표시 검증 / 채권 목록 엑셀의 채권총액·반환총액·잔여채권·회수일자가 화면과 일치하는지 확인",
      "status": "BLOCKED",
      "statusText": "확인 불가",
      "durationMs": 6479,
      "evidence": [
        "artifacts/screenshots/08-채권관리-ADMIN-excel-api.png",
        "artifacts/logs/08-excel-api-preflight-evidence.md",
        "artifacts/traces/08-excel-api-trace.zip"
      ],
      "screenshots": [
        "artifacts/screenshots/08-채권관리-ADMIN-excel-api.png"
      ],
      "traces": [
        "artifacts/traces/08-excel-api-trace.zip"
      ],
      "logs": [
        "artifacts/logs/08-excel-api-preflight-evidence.md"
      ],
      "files": [],
      "role": "전체",
      "page": "[3840][dev] [QA] 채권 정산 반환총액·회수이력·엑셀 표시 검증",
      "checklistItem": "채권 목록 엑셀의 채권총액·반환총액·잔여채권·회수일자가 화면과 일치하는지 확인",
      "action": "전체 계정으로 [3840][dev] [QA] 채권 정산 반환총액·회수이력·엑셀 표시 검증 엑셀 다운로드를 시도하고 화면 범위와 파일 범위를 비교",
      "expected": "전체 계정으로 받은 엑셀 파일은 화면에 보이는 범위와 같아야 합니다.",
      "actual": "확인을 끝내지 못했습니다: skip: BLOCKED: 박재민_가맹/sayhi에 기존 PENDING 정산 66건이 있어 신규 채권이 등록 즉시 회수됩니다. 정산 ID=tenant-id-redacted, tenant-id-redacted, tenant-id-redacted, tenant-id-redacted, tenant-id-redacted. 기존 PENDING 정산 정리 또는 테스트 데이터 초기화 후 재실행해야 합니다.",
      "error": "skip: BLOCKED: 박재민_가맹/sayhi에 기존 PENDING 정산 66건이 있어 신규 채권이 등록 즉시 회수됩니다. 정산 ID=tenant-id-redacted, tenant-id-redacted, tenant-id-redacted, tenant-id-redacted, tenant-id-redacted. 기존 PENDING 정산 정리 또는 테스트 데이터 초기화 후 재실행해야 합니다.",
      "failureCategory": "blocked",
      "failureCategoryText": "확인 조건 부족",
      "reproduction": {
        "required": false,
        "reason": "확인 조건이 부족해 본 시나리오를 끝까지 실행하지 못했습니다.",
        "debugCommand": "",
        "notifyMessage": "",
        "manualSteps": []
      }
    }
  ]
}
