{
  "issueId": "4019",
  "environment": "dev",
  "scenario": "manual-payment-error-source",
  "source": "Redmine #4019 + user-provided QA checklist + permission-granted retest request 2026-08-24",
  "sourceText": "송인준님의 QA 요청입니다. 비스킷페이 CO, BO, VE 계정으로 결제 > 수기결제 화면을 검증합니다. 주민등록번호, 카드 비밀번호 또는 카드 유효기간을 잘못 입력한 결제 실패 메시지에는 (PG)가 표시되어야 하고, 수기결제 1회 한도 초과 실패 메시지에는 (PG)가 표시되지 않아야 합니다. 2026-08-24 권한 부여 완료 후 CO, BO, VE 전 역할 재QA를 요청받았습니다. Redmine: https://itsm.bix.bz/issues/4019",
  "scope": "권한 반영 후 개발계 비스킷페이 CO, BO, VE 전 역할의 수기결제 화면 접근을 새 세션으로 확인하고, 실제 결제 승인 없이 PG 거절과 내부 1회 한도 초과 실패 메시지의 (PG) 접두어 구분을 검증한다.",
  "roles": [
    "CO",
    "BO",
    "VE"
  ],
  "subjectAccounts": [
    {
      "role": "CO",
      "label": "CO 개발계 계정",
      "envRole": "CO"
    },
    {
      "role": "BO",
      "label": "BO 개발계 계정",
      "envRole": "BO"
    },
    {
      "role": "VE",
      "label": "본인인증 OFF VE 개발계 계정",
      "envRole": "ISSUE_4019_VE"
    }
  ],
  "checklist": [
    "수기 결제 시 주민번호 또는 카드 비밀번호, 카드 유효기간을 잘못 입력한 뒤 결제를 시도하고 표시되는 에러 메시지에 (PG)가 표시되는지 확인",
    "수기 결제 1회 한도 이상 금액으로 결제 시도 후 에러 메시지에 (PG)가 표시되지 않는지 확인"
  ],
  "setupSteps": [
    {
      "name": "CO, BO, VE 개발계 로그인 및 수기결제 접근 확인",
      "kind": "state-verify",
      "role": "VE",
      "targetRoles": [
        "CO",
        "BO",
        "VE"
      ],
      "application": "store",
      "description": "권한 반영 후 각 역할 계정의 로그인 세션을 새로 발급하고 /face-to-face-payment 접근 여부를 확인한다. CO/BO에 VE 권한 접근 제한이 계속 표시되면 권한 반영 실패로 판정한다.",
      "required": true,
      "mutation": "none",
      "navigation": {
        "name": "스토어 수기결제",
        "path": "/face-to-face-payment"
      }
    },
    {
      "name": "실패 결제 요청 허용 및 카드 사전 데이터 확인",
      "kind": "manual-precondition",
      "role": "VE",
      "application": "store",
      "description": "CO, BO, 본인인증 OFF VE 계정과 테스트 카드 정보를 로컬 환경변수로만 주입한다. QA_4019_ALLOW_PAYMENT_FAILURE_TEST=1일 때만 실패 결제 요청을 전송하며 성공 승인 응답은 테스트 실패로 처리한다.",
      "required": true,
      "mutation": "persistent",
      "guardEnv": "QA_4019_ALLOW_PAYMENT_FAILURE_TEST",
      "restore": {
        "required": false,
        "description": "승인 거래는 생성하지 않는다. PG 거절 시도 및 실패 로그만 남을 수 있다."
      }
    }
  ],
  "pages": [
    {
      "name": "스토어 수기결제",
      "application": "store",
      "path": "/face-to-face-payment",
      "tenantParam": "tenantId",
      "roles": [
        "CO",
        "BO",
        "VE"
      ],
      "dataRequestUrlPattern": "/api/v1/store/identity/payment"
    }
  ]
}
