{
  "issueId": "3489",
  "environment": "dev",
  "scenario": "manual-mid-card-routing",
  "source": "Redmine #3489 + user-provided re-QA checklist 2026-06-12",
  "sourceText": "김경주님의 QA 요청입니다\n조지민 프로님 안녕하세요, 비스킷 링크 개발계 QA 요청드립니다\n[1] QA 요청 배경\n- https://itsm.bix.bz/issues/3489\n- 수기결제 MID 카드 제한 라우팅 변경 QA 요청입니다. 제한카드로 다음 MID를 찾을 때 카유/카유비생 동일 타입 내에서만 다음 후보를 찾는지 확인이 필요합니다. 비스킷페이 결제 화면의 카유/카유비생 UI 노출 기준은 기존과 동일하게 대표 수기 MID 기준입니다.\n[2] 사전 데이터\n- 카유 MID만 등록된 비스킷페이 가맹점 계정 준비 완료: ID 한결데카유 / PW Password1! / 2FA 1234\n- 카유비생 MID만 등록된 비스킷페이 가맹점 계정 준비 완료: ID 한결데카유비생 / PW Password1! / 2FA 1234\n- 카유 MID 2건과 카유비생 MID 2건이 모두 연결된 비스킷페이 테스트 가맹점 계정 준비 완료: ID 한결데테스트 / PW Password1! / 2FA 1234\n- 카유 수기 MID 2건: 루시 MID ㅇㅅㅇ(제외카드: 신한카드, 하나카드), 한결데 MID 12344(제외카드: 신한카드, KB국민카드)\n- 카유비생 수기 MID 2건: 루시 MID lucy04084m(제외카드: 신한카드), 한결데 MID bigshrtg000m(제외카드: KB국민카드)\n[3] 사전 작업\n- 가맹점 계정은 전산 로그인이 아닌 비스킷페이에서만 결제 테스트를 진행\n- 비스킷페이에서 각 가맹점 계정으로 로그인 후 수기결제 화면 접근 가능 여부 확인\n- 카유 결제는 실패할 수 있으므로, 실패 후 어드민 계정으로 비스킷링크 거래내역/수기결제내역에서 결제 시도 PG사를 확인\n- 결제 완료 건은 영수증을 클릭해 PG사 표시를 확인할 수 있는지 확인\n- 테스트 전 수기 MID 카드 제한 부서정책이 ON 상태인지 확인\n[4] 권한별 테스트\n- ve\n[5] 검증 대상\n- 비스킷페이 수기결제 화면\n- 비스킷페이 결제 완료 영수증 화면\n- 비스킷링크 거래내역/수기결제내역 화면\n[6] 체크리스트\n- 한결데카유 계정으로 비스킷페이에 로그인한 뒤 수기결제 화면에서 카유 UI가 노출되는지 확인\n- 한결데카유 계정으로 비스킷페이에서 KB국민카드로 수기결제를 시도\n- 카유 결제 실패 후 어드민 계정으로 비스킷링크 거래내역/수기결제내역 화면에 접속해 KB국민카드가 제한된 한결데 카유 MID가 제외되고, 같은 카유 타입 내 루시 카유 MID로 결제 시도되었는지 확인\n- 같은 카유 타입 내 결제 가능한 MID가 모두 KB국민카드 제한카드에 해당하는 상태에서 한결데카유 계정으로 KB국민카드 수기결제를 시도\n- 카유 결제 실패 후 비스킷페이 화면에 결제 가능한 카드사가 없다는 메시지가 표시되는지 확인\n- 한결데카유비생 계정으로 비스킷페이에 로그인한 뒤 수기결제 화면에서 카유비생 UI가 노출되는지 확인\n- 한결데카유비생 계정으로 비스킷페이에서 KB국민카드로 수기결제 시 KB국민카드가 제한된 한결데 카유비생 MID는 제외되고, 같은 카유비생 타입 내 결제 가능한 루시 카유비생 MID로 결제되는지 확인\n- 한결데카유비생 계정으로 결제 완료 후 영수증을 클릭해 실제 결제된 PG사가 루시 카유비생 MID의 PG사로 표시되는지 확인\n- 한결데테스트 계정으로 비스킷페이에 로그인한 뒤 카유/카유비생 MID가 함께 연결되어 있어도 대표 수기 MID 기준으로 카유비생 UI가 노출되는지 확인\n- 한결데테스트 계정으로 KB국민카드 수기결제 시 우선순위가 높은 카유비생 MID가 제한카드로 제외되는지 확인\n- 이후 후순위 MID를 찾을 때 카유 MID로 넘어가지 않고, 같은 카유비생 타입의 후순위 MID로만 결제 시도되는지 확인\n- 결제 완료 또는 실패 후 영수증 또는 비스킷링크 거래내역/수기결제내역 화면에서 실제 결제 시도 PG사가 후순위 카유비생 MID의 PG사인지 확인\n- 같은 카유비생 타입 내 결제 가능한 MID가 모두 KB국민카드 제한카드에 해당하는 상태에서 카유비생 결제 시 결제 가능한 카드사가 없다는 메시지가 표시되는지 확인",
  "scope": "dev 환경에서 한결데카유/한결데카유비생/한결데테스트 가맹점 계정으로 수기 MID 카드 제한 라우팅이 카유/카유비생 동일 타입 내 후보만 선택하는지 검증하고, 생성된 결제는 QA 후 취소한다.",
  "checklist": [
    "한결데카유 계정으로 비스킷페이에 로그인한 뒤 수기결제 화면에서 카유 UI가 노출되는지 확인",
    "한결데카유 계정으로 비스킷페이에서 KB국민카드로 수기결제를 시도",
    "카유 결제 실패 후 어드민 계정으로 비스킷링크 거래내역/수기결제내역 화면에 접속해 KB국민카드가 제한된 한결데 카유 MID가 제외되고, 같은 카유 타입 내 루시 카유 MID로 결제 시도되었는지 확인",
    "같은 카유 타입 내 결제 가능한 MID가 모두 KB국민카드 제한카드에 해당하는 상태에서 한결데카유 계정으로 KB국민카드 수기결제를 시도",
    "카유 결제 실패 후 비스킷페이 화면에 결제 가능한 카드사가 없다는 메시지가 표시되는지 확인",
    "한결데카유비생 계정으로 비스킷페이에 로그인한 뒤 수기결제 화면에서 카유비생 UI가 노출되는지 확인",
    "한결데카유비생 계정으로 비스킷페이에서 KB국민카드로 수기결제 시 KB국민카드가 제한된 한결데 카유비생 MID는 제외되고, 같은 카유비생 타입 내 결제 가능한 루시 카유비생 MID로 결제되는지 확인",
    "한결데카유비생 계정으로 결제 완료 후 영수증을 클릭해 실제 결제된 PG사가 루시 카유비생 MID의 PG사로 표시되는지 확인",
    "한결데테스트 계정으로 비스킷페이에 로그인한 뒤 카유/카유비생 MID가 함께 연결되어 있어도 대표 수기 MID 기준으로 카유비생 UI가 노출되는지 확인",
    "한결데테스트 계정으로 KB국민카드 수기결제 시 우선순위가 높은 카유비생 MID가 제한카드로 제외되는지 확인",
    "이후 후순위 MID를 찾을 때 카유 MID로 넘어가지 않고, 같은 카유비생 타입의 후순위 MID로만 결제 시도되는지 확인",
    "결제 완료 또는 실패 후 영수증 또는 비스킷링크 거래내역/수기결제내역 화면에서 실제 결제 시도 PG사가 후순위 카유비생 MID의 PG사인지 확인",
    "같은 카유비생 타입 내 결제 가능한 MID가 모두 KB국민카드 제한카드에 해당하는 상태에서 카유비생 결제 시 결제 가능한 카드사가 없다는 메시지가 표시되는지 확인"
  ],
  "roles": [
    "VE"
  ],
  "subjectAccounts": [
    {
      "role": "VE",
      "label": "한결데카유",
      "envRole": "HANGYEOL_KAYU_VE"
    },
    {
      "role": "VE",
      "label": "한결데카유비생",
      "envRole": "HANGYEOL_KAYU_NOAUTH_VE"
    },
    {
      "role": "VE",
      "label": "한결데테스트",
      "envRole": "HANGYEOL_TEST_VE"
    }
  ],
  "setupSteps": [
    {
      "name": "QA 제공 가맹점 계정 로그인 정보 로컬 주입",
      "kind": "manual-precondition",
      "role": "VE",
      "application": "store",
      "targetRoles": [
        "VE"
      ],
      "description": "한결데카유/한결데카유비생/한결데테스트 계정 정보는 로컬 환경변수에만 설정한다. 카드번호와 인증 정보는 report와 git 산출물에 남기지 않는다.",
      "required": true,
      "mutation": "none"
    },
    {
      "name": "요청 기준 수기 MID 제한카드 사전 데이터 정렬 및 원복",
      "kind": "data-update",
      "role": "ADMIN",
      "application": "admin",
      "description": "카유/카유비생 MID 제한카드가 요청 기준과 다르면 QA_3489_ALLOW_MID_RESTRICTION_MUTATION=1일 때 임시 정렬하고, 테스트 종료 후 시작 전 값으로 원복한다.",
      "required": true,
      "mutation": "temporary",
      "guardEnv": "QA_3489_ALLOW_MID_RESTRICTION_MUTATION",
      "restore": {
        "required": true,
        "description": "변경한 수기 MID 제한카드 목록을 시작 전 값으로 되돌린다."
      }
    },
    {
      "name": "수기 MID 카드 제한 부서정책 ON 확인",
      "kind": "manual-precondition",
      "role": "ADMIN",
      "application": "admin",
      "description": "테스트 전 박재민_법인의 수기 MID 카드 제한 부서정책이 ON 상태인지 확인한다.",
      "required": true,
      "mutation": "none"
    },
    {
      "name": "KB국민카드 실제 수기결제 실행 허용",
      "kind": "data-create",
      "role": "VE",
      "application": "store",
      "description": "카유/카유비생 타입별 라우팅 확인을 위해 실제 스토어 수기결제를 생성한다. QA_3489_ALLOW_PAYMENT_MUTATION=1과 KB국민카드 QA_3315_* 또는 QA_3489_KB_* 값이 필요하다.",
      "required": true,
      "mutation": "persistent",
      "guardEnv": "QA_3489_ALLOW_PAYMENT_MUTATION"
    }
  ],
  "pages": [
    {
      "name": "스토어 수기결제",
      "application": "store",
      "roles": [
        "VE"
      ],
      "path": "/face-to-face-payment",
      "tenantParam": "tenantId",
      "recordsSelector": "main, body",
      "dataRequestUrlPattern": "/store/identity/payment"
    },
    {
      "name": "전산 거래내역",
      "application": "admin",
      "roles": [
        "ADMIN"
      ],
      "path": "/log-management/transaction",
      "tenantParam": "tenantId",
      "recordsSelector": "main, [role='grid'], table tbody tr",
      "dataRequestUrlPattern": "/transactions"
    },
    {
      "name": "수기결제내역",
      "application": "admin",
      "roles": [
        "ADMIN"
      ],
      "path": "/log-management/manual-log",
      "tenantParam": "tenantId",
      "recordsSelector": "main, [role='grid'], table tbody tr",
      "dataRequestUrlPattern": "/manual"
    }
  ]
}
