{
  "issueId": "3143",
  "environment": "dev",
  "scenario": "payletter-terminal-notification",
  "source": "Redmine #3143 + user-provided retest checklist",
  "sourceText": "주홍석님의 QA 요청입니다\n조지민 프로님 안녕하세요, 비스킷 링크 개발계 QA 요청드립니다\n[1] QA 요청 배경\n- https://itsm.bix.bz/issues/3143\n- 페이레터 KoVan 단말기 승인/취소 통보가 개발계 화면에 정상 반영되는지 확인 요청드립니다.\n[2] 사전 데이터\n- 페이레터 단말기 MID: payletter1234\n- 이번 QA 테스트 세트: cid=000002, tid=000001, 승인 거래일시=2026-05-26 15:35:00, 취소 거래일시=2026-05-26 15:36:00\n- 승인/취소 금액: 1,004원, 주문번호: 000000997981\n[3] 사전 작업\n- admin 계정으로 개발계 어드민 접속\n- 결제/거래 내역을 확인할 수 있는 메뉴 접근 가능 여부 확인\n- 아래 후속 메시지의 curl로 승인 통보와 취소 통보를 각각 전송 후 화면 확인\n[4] 권한별 테스트\n- admin\n[5] 검증 대상\n- 어드민 결제/거래 내역 화면\n- 결제 승인 상태 및 취소 상태 표시\n- 거래 금액, 거래 일시, 카드 정보 표시\n[6] 체크리스트\n- 승인 통보 전송 후 거래 내역 화면에서 승인 거래가 조회되는지 확인\n- 승인 거래 금액이 1,004원으로 표시되는지 확인\n- 승인 거래 일시가 2026-05-26 15:35:00 기준으로 표시되는지 확인\n- 카드 정보가 테스트카드 / 244112******9428 기준으로 확인되는지 확인\n- 취소 통보 전송 후 동일 거래가 취소 상태로 반영되는지 확인\n- 취소 거래 금액이 1,004원으로 표시되는지 확인\n- 취소 거래 일시가 2026-05-26 15:36:00 기준으로 표시되는지 확인\n- 화면 새로고침 후에도 승인/취소 상태가 유지되는지 확인\n- 주의: 승인/취소 한 세트에서는 같은 tid를 사용하고, 이전 테스트의 tid/cid/transaction_date는 재사용하지 말아주세요\n\n[페이레터 KoVan 단말기 통보 테스트 curl]\n\n주의:\n승인/취소 한 세트에서는 같은 tid를 사용해주세요.\n이전 테스트의 tid/cid/transaction_date는 재사용하지 말아주세요.\n\n승인 통보:\ncurl -X POST 'https://api-dev.biscuitpay.com/api/v1/payment/notification/terminal/payletter-noti' \\\n  -H 'Content-Type: application/json' \\\n  -H 'X-Forwarded-Host: api.biscuitpay.com' \\\n  -H 'X-Forwarded-Proto: https' \\\n  -d '{\"amount\":1004,\"business_number\":\"2138140742\",\"buy_company_code\":\"15\",\"card_info\":\"테스트카드\",\"cat_id\":\"payletter1234\",\"check_card\":\"0\",\"cid\":\"000002\",\"client_business_number\":\"7318701628\",\"enc_card_no\":\"244112******9428\",\"installment\":\"00\",\"issue_company_code\":\"15\",\"order_no\":\"000000997981\",\"pay_type\":\"offline\",\"pltid\":\"tsjtest1-202605149351347\",\"pos_entry_mode\":\"S\",\"service_amount\":0,\"store_number\":\"139634181\",\"tax_amount\":364,\"tid\":\"000001\",\"transaction_date\":\"20260526153500\",\"use_state\":\"0\",\"user_name\":\"1047263358\"}'\n\n취소 통보:\ncurl -X POST 'https://api-dev.biscuitpay.com/api/v1/payment/notification/terminal/payletter-noti' \\\n  -H 'Content-Type: application/json' \\\n  -H 'X-Forwarded-Host: api.biscuitpay.com' \\\n  -H 'X-Forwarded-Proto: https' \\\n  -d '{\"amount\":1004,\"business_number\":\"2138140742\",\"buy_company_code\":\"15\",\"card_info\":\"테스트카드\",\"cat_id\":\"payletter1234\",\"check_card\":\"0\",\"cid\":\"000002\",\"client_business_number\":\"7318701628\",\"enc_card_no\":\"244112******9428\",\"installment\":\"00\",\"issue_company_code\":\"15\",\"order_no\":\"000000997981\",\"pay_type\":\"offline\",\"pltid\":\"tsjtest1-202605149351347\",\"pos_entry_mode\":\"S\",\"service_amount\":0,\"store_number\":\"139634181\",\"tax_amount\":364,\"tid\":\"000001\",\"transaction_date\":\"20260526153600\",\"use_state\":\"1\",\"user_name\":\"1047263358\"}'",
  "scope": "dev ADMIN 계정으로 페이레터 KoVan 단말기 승인/취소 통보를 새 cid/tid/거래일시 세트로 발송한 뒤 어드민 거래내역 화면의 승인/취소 상태, 금액, 거래일시, 카드 정보 유지 여부를 검증",
  "checklist": [
    "승인 통보 전송 후 거래 내역 화면에서 승인 거래가 조회되는지 확인",
    "승인 거래 금액이 1,004원으로 표시되는지 확인",
    "승인 거래 일시가 2026-05-26 15:35:00 기준으로 표시되는지 확인",
    "카드 정보가 테스트카드 / 244112******9428 기준으로 확인되는지 확인",
    "취소 통보 전송 후 동일 거래가 취소 상태로 반영되는지 확인",
    "취소 거래 금액이 1,004원으로 표시되는지 확인",
    "취소 거래 일시가 2026-05-26 15:36:00 기준으로 표시되는지 확인",
    "화면 새로고침 후에도 승인/취소 상태가 유지되는지 확인"
  ],
  "roles": [],
  "routeCandidates": "../../../../qa-results/issues/3143/dev/route-candidates.json",
  "setupSteps": [
    {
      "name": "페이레터 KoVan 승인/취소 통보 실행 허용",
      "kind": "data-create",
      "role": "ADMIN",
      "application": "admin",
      "description": "QA_3143_ALLOW_NOTIFICATION_MUTATION=1일 때만 개발계 페이레터 단말기 승인/취소 통보 POST를 실제 발송한다. 동일 tid=000001, cid=000002 기준으로 승인 1회, 취소 1회를 순서대로 발송하며 이전 테스트의 tid/cid/transaction_date는 재사용하지 않는다.",
      "required": true,
      "mutation": "temporary",
      "guardEnv": "QA_3143_ALLOW_NOTIFICATION_MUTATION",
      "restore": {
        "required": true,
        "description": "승인 통보 후 취소 통보까지 발송해 최종 상태를 취소로 유지한다. 취소 통보 실패 시 보고서에 재 QA 대상으로 남긴다."
      }
    }
  ],
  "pages": [
    {
      "name": "거래내역",
      "application": "admin",
      "path": "/trade-history-v2",
      "tenantParam": "tenantId",
      "searchButtonSelector": "button:has-text('검색'), button:has-text('조회'), [data-testid='search-button']",
      "dataRequestUrlPattern": "transactions|trade-history|payment|payletter"
    }
  ]
}
