{
  "issueId": "2911",
  "environment": "dev",
  "source": "local checklist",
  "sourceText": "주홍석님의 QA 요청입니다\n조지민 프로님 안녕하세요, 비스킷 링크 개발계 QA 요청드립니다\n[1] QA 요청 배경\n- https://itsm.bix.bz/issues/2911\n[2] 사전 데이터\n- 개발계 테스트 가맹점 계정 인증정보는 .env.local에만 보관\n- 루시페이먼츠 ISP 결제와 취소를 진행할 수 있는 테스트 상품 및 거래 데이터 준비\n[3] 사전 작업\n- 가맹점 계정으로 결제 테스트 화면 접근 가능 여부 확인\n- admin, ta, co, bo 권한 계정으로 거래 로그 화면 접근 가능 여부 확인\n[4] 권한별 테스트\n- ve\n- admin\n- ta\n- co\n- bo\n[5] 검증 대상\n- 가맹점 결제 테스트 화면\n- admin 거래 로그 화면\n- ta 거래 로그 화면\n- co 거래 로그 화면\n- bo 거래 로그 화면\n- 승인번호 클릭 시 노출되는 영수증 화면\n[6] 체크리스트\n- [ve] 가맹점 결제 테스트 화면에서 스토어의 결제하기 버튼 클릭 후, 루시페이먼츠 ISP 모달창에서는 별도 결제하기 버튼 클릭 없이 ISP 창이 바로 열리는지 확인\n- [ve] 루시페이먼츠 ISP 결제 진행 후 결제창이 닫히면 스토어 결과 화면에 결제요청에 성공했습니다. 안내가 표시되는지 확인\n- [admin] 거래 로그 화면에서 루시페이먼츠 ISP 결제 통보 반영 후 결제 완료 상태, 승인번호, 금액, 카드 정보가 정상 표시되는지 확인\n- [ta] 거래 로그 화면에서 루시페이먼츠 ISP 결제 통보 반영 후 결제 완료 상태, 승인번호, 금액, 카드 정보가 정상 표시되는지 확인\n- [co] 거래 로그 화면에서 루시페이먼츠 ISP 결제 통보 반영 후 결제 완료 상태, 승인번호, 금액, 카드 정보가 정상 표시되는지 확인\n- [bo] 거래 로그 화면에서 루시페이먼츠 ISP 결제 통보 반영 후 결제 완료 상태, 승인번호, 금액, 카드 정보가 정상 표시되는지 확인\n- [admin] 거래 로그 화면에서 루시페이먼츠 ISP 거래 취소가 정상 수행되고 취소 상태와 취소 금액이 정상 표시되는지 확인\n- [ta] 거래 로그 화면에서 루시페이먼츠 ISP 거래 취소가 정상 수행되고 취소 상태와 취소 금액이 정상 표시되는지 확인\n- [co] 거래 로그 화면에서 루시페이먼츠 ISP 거래 취소가 정상 수행되고 취소 상태와 취소 금액이 정상 표시되는지 확인\n- [bo] 거래 로그 화면에서 루시페이먼츠 ISP 거래 취소가 정상 수행되고 취소 상태와 취소 금액이 정상 표시되는지 확인\n- [admin, ta, co, bo] 부분취소를 여러 번 진행했을 때 화면에서 현재 취소 금액과 누적 취소 금액이 구분되어 이상 없이 보이는지 확인\n- [admin, ta, co, bo] 거래 로그 화면에서 승인번호 버튼 클릭 시 영수증 화면이 정상 노출되는지 확인",
  "scope": "dev 환경에서 루시페이먼츠 ISP 결제 흐름을 가맹점 결제 테스트 화면에서 확인하고, ADMIN/TA/CO/BO 계정으로 거래 로그 조회, 영수증 확인, 전체취소 및 다중 부분취소의 취소 금액 표시를 검증한다. QA 중 생성된 결제는 반드시 취소 또는 보정 취소한다.",
  "scenario": "lucypay-payment-log",
  "checklist": [
    "[ve] 가맹점 결제 테스트 화면에서 스토어의 결제하기 버튼 클릭 후, 루시페이먼츠 ISP 모달창에서는 별도 결제하기 버튼 클릭 없이 ISP 창이 바로 열리는지 확인",
    "[ve] 루시페이먼츠 ISP 결제 진행 후 결제창이 닫히면 스토어 결과 화면에 결제요청에 성공했습니다. 안내가 표시되는지 확인",
    "[admin] 거래 로그 화면에서 루시페이먼츠 ISP 결제 통보 반영 후 결제 완료 상태, 승인번호, 금액, 카드 정보가 정상 표시되는지 확인",
    "[ta] 거래 로그 화면에서 루시페이먼츠 ISP 결제 통보 반영 후 결제 완료 상태, 승인번호, 금액, 카드 정보가 정상 표시되는지 확인",
    "[co] 거래 로그 화면에서 루시페이먼츠 ISP 결제 통보 반영 후 결제 완료 상태, 승인번호, 금액, 카드 정보가 정상 표시되는지 확인",
    "[bo] 거래 로그 화면에서 루시페이먼츠 ISP 결제 통보 반영 후 결제 완료 상태, 승인번호, 금액, 카드 정보가 정상 표시되는지 확인",
    "[admin] 거래 로그 화면에서 루시페이먼츠 ISP 거래 취소가 정상 수행되고 취소 상태와 취소 금액이 정상 표시되는지 확인",
    "[ta] 거래 로그 화면에서 루시페이먼츠 ISP 거래 취소가 정상 수행되고 취소 상태와 취소 금액이 정상 표시되는지 확인",
    "[co] 거래 로그 화면에서 루시페이먼츠 ISP 거래 취소가 정상 수행되고 취소 상태와 취소 금액이 정상 표시되는지 확인",
    "[bo] 거래 로그 화면에서 루시페이먼츠 ISP 거래 취소가 정상 수행되고 취소 상태와 취소 금액이 정상 표시되는지 확인",
    "[admin, ta, co, bo] 부분취소를 여러 번 진행했을 때 화면에서 현재 취소 금액과 누적 취소 금액이 구분되어 이상 없이 보이는지 확인",
    "[admin, ta, co, bo] 거래 로그 화면에서 승인번호 버튼 클릭 시 영수증 화면이 정상 노출되는지 확인"
  ],
  "roles": [
    "ADMIN",
    "VE",
    "TA",
    "CO",
    "BO"
  ],
  "routeCandidates": "../../../../qa-results/issues/2911/dev/route-candidates.json",
  "setupSteps": [
    {
      "name": "루시페이먼츠 ISP 가맹점 결제 계정 로컬 설정",
      "kind": "manual-precondition",
      "role": "VE",
      "application": "store",
      "description": "루시페이먼츠 가맹점 계정 정보는 BIX_STORE_DEV_LUCY_VE_* 환경변수로 .env.local에만 저장한다. report에는 계정/인증값을 남기지 않는다.",
      "required": true,
      "mutation": "none"
    },
    {
      "name": "테스트 ISP 결제 후 취소",
      "kind": "state-verify",
      "role": "ADMIN",
      "application": "admin",
      "description": "QA 중 생성된 루시페이먼츠 ISP 결제는 검증 후 role별 취소 또는 ADMIN 보정 절차로 취소 상태까지 확인한다.",
      "required": true,
      "mutation": "temporary",
      "guardEnv": "QA_2911_ALLOW_PAYMENT_MUTATION",
      "restore": {
        "required": true,
        "description": "생성된 테스트 ISP 결제를 취소 상태로 되돌린다."
      }
    }
  ],
  "subjectAccounts": [
    {
      "role": "VE",
      "label": "루시페이먼츠 ISP 가맹점",
      "envRole": "LUCY_VE"
    }
  ],
  "pages": [
    {
      "name": "가맹점 결제 테스트",
      "application": "store",
      "roles": [
        "VE"
      ],
      "path": "/face-to-face-payment",
      "tenantParam": "tenantId",
      "searchButtonSelector": "button:has-text('결제하기')"
    },
    {
      "name": "스토어 거래내역",
      "application": "store",
      "roles": [
        "VE"
      ],
      "path": "/transactions",
      "tenantParam": "tenantId",
      "searchButtonSelector": "button:has-text('검색'), button:has-text('조회')"
    },
    {
      "name": "거래로그",
      "application": "admin",
      "roles": [
        "ADMIN",
        "TA",
        "CO",
        "BO"
      ],
      "path": "/payment-history",
      "tenantParam": "tenantId",
      "searchButtonSelector": "button:has-text('검색'), button:has-text('조회'), [data-testid='search-button']"
    }
  ]
}
