{
  "issueId": "3861",
  "environment": "dev",
  "scenario": "paysis-shop-notification",
  "source": "Redmine #3861 + user-provided QA checklist 2026-07-27",
  "sourceText": "송인준님의 QA 요청입니다. 페이시스 쇼핑몰 결제/취소 통보 curl을 개발계에 순차 전송하고 기본 ADMIN 계정으로 거래관리 > 거래내역과 거래 로그에 정상 적재되는지 확인합니다. Redmine: https://itsm.bix.bz/issues/3861",
  "scope": "개발계 페이시스 쇼핑몰 결제 통보와 동일 TID/주문번호의 취소 통보를 순서대로 발송한 뒤 기본 ADMIN 계정의 거래내역 및 거래 로그에서 상태, 금액, 식별값, 승인/취소 history가 정상 적재되는지 검증한다.",
  "roles": [
    "ADMIN"
  ],
  "checklist": [
    "결제 통보 전송 후 거래내역에 대상 거래의 상태, 금액, 거래일시, TID, 주문번호가 정상 적재되는지 확인",
    "결제 통보 전송 후 거래 로그에 대상 거래와 성공한 승인 history가 정상 적재되는지 확인",
    "취소 통보 전송 후 거래내역에 동일 원거래의 취소 상태와 연결된 취소 거래가 정상 적재되는지 확인",
    "취소 통보 전송 후 거래 로그에 취소 상태와 성공한 승인/취소 history가 유지되는지 확인"
  ],
  "setupSteps": [
    {
      "name": "페이시스 쇼핑몰 결제/취소 통보 실행 허용",
      "kind": "data-create",
      "role": "ADMIN",
      "application": "admin",
      "description": "QA_3861_ALLOW_NOTIFICATION_MUTATION=1일 때만 제공된 개발계 페이시스 쇼핑몰 결제 통보를 먼저 발송하고 승인 적재 검증이 끝난 뒤 동일 TID/주문번호의 취소 통보를 발송한다.",
      "required": true,
      "mutation": "temporary",
      "guardEnv": "QA_3861_ALLOW_NOTIFICATION_MUTATION",
      "restore": {
        "required": true,
        "description": "결제 통보 후 취소 통보까지 발송해 최종 상태를 취소로 유지한다. 중간 검증 실패 시 afterAll에서 취소 통보를 재시도하고, 취소 실패는 재 QA 대상으로 기록한다."
      }
    }
  ],
  "pages": [
    {
      "name": "거래내역",
      "application": "admin",
      "roles": [
        "ADMIN"
      ],
      "path": "/trade-history-v2",
      "tenantParam": "tenantId",
      "searchButtonSelector": "button:has-text('검색'), button:has-text('조회'), [data-testid='search-button']",
      "dataRequestUrlPattern": "/api/v2/transactions"
    },
    {
      "name": "거래 로그",
      "application": "admin",
      "roles": [
        "ADMIN"
      ],
      "path": "/payment-history",
      "tenantParam": "tenantId",
      "searchButtonSelector": "button:has-text('검색'), button:has-text('조회'), [data-testid='search-button']",
      "dataRequestUrlPattern": "/api/v2/payments/manage"
    }
  ]
}
