{
  "issueId": "4252",
  "environment": "dev",
  "source": "사용자 승인된 내부 전달 및 로그인 항목 사전작업 이동 정정",
  "sourceText": "# #4252 개발계 QA 내부 접수\n\n- 원본: https://itsm.bix.bz/issues/4252\n- 대상: 개발계 스토어(비스킷페이), 일반 가맹점 VE 두 계정\n- 요청자: 김경주\n- 이 문서는 내부 준비 자료이며 외부 전송·등록·PR·공개 배포 승인 없음.\n- 실제 이체·승인 생성·생체 등록·카드 신청/충전 실행 금지.\n- #4233 결과와 파일은 보존.\n\n## 사전 작업\n\n**사전 확인: 두 가맹점 계정 로그인 후 홈 정상 진입.** 로그인·문자 인증은 독립 테스트 항목에서 제거한다. 계정별 인증 준비 상태와 결과는 사전 확인 기록으로 관리한다.\n\n- A: 박재민_한결데, 가맹점, ID [계정 A 로그인 ID 비공개]\n- B: 김경주_코페이_수, 가맹점, ID [계정 B 로그인 ID 비공개]\n- 비밀번호·제공 인증값·은행 계좌정보는 git 제외 private 자료에 보존. 공개 보고서·스크린샷·커밋에 노출하지 않음.\n- 최초 전달 기록: 로컬에서 두 계정 모두 6자리 문자 인증 화면, 제공된 값은 4자리여서 제출 불가. 임의 변환·우회 금지.\n- 최신 작업 세션 기록: 사용자 PIN 변경 후 두 계정 로컬 로그인 성공. 이 기록을 개발계 사이트의 인증 준비 완료 또는 수정본 QA 통과로 대체하지 않음.\n- 정상 지갑·잔액·소속 비교 기준, 타 부서 지갑 권한 오류 재현 조건, 수정본의 개발계 반영 증거 확보 필요.\n\n## 테스트 목록 (로그인은 사전 작업으로 이동)\n\n1. 계정별 홈/새로고침에서 소속·지갑·잔액·정산 정보가 현재 계정과 일치한다.\n2. 본인 지갑 선택 → 금액 입력 → 출금 확인 정상 진입, 입력·수수료가 정확하고 권한 오류가 없다.\n3. 다른 부서 출금 지갑 접근 권한 오류 조건에서 **선택한 출금 지갑에 접근 권한이 없습니다. 출금 지갑을 확인해 주세요.** 표시, 기존 생체인증 정책 조회 실패 문구 미표시.\n4. 생체인증 미사용 계정은 기존 비밀번호 인증 안내가 정상이다.\n5. **개인 수동 테스트 예정:** 생체인증 사용 계정은 기존 앱 환경에서 정상 인증 안내, 불필요한 오류가 없다. 자동 QA는 통과로 처리하지 않는다.\n6. 같은 계정·부서에서 화면 내 뒤로가기·재진입 시 지갑·입력·수수료가 불필요하게 초기화되지 않는다. 새로고침 입력 보존은 요구하지 않는다.\n7. A 출금 입력 후 로그아웃 → B 로그인 → 출금 진입 시 A 지갑·금액·인증 상태가 남지 않는다.\n8. A → B → A 로그인 때 홈 소속·지갑·잔액이 매번 현재 계정 기준이다.\n9. 응답 지연 중 로그아웃 후 늦은 조회 결과로 인증이 복구되지 않는다.\n10. A 조회 중 B 로그인 후 늦은 A 결과가 B 정보를 덮어쓰지 않는다.\n11. 출금 확인 정책 조회 대기 중 계정 변경 시 이전 인증 안내·출금 정보를 채택하지 않는다.\n12. 메뉴 노출·접근권한은 기존 가맹점 권한을 유지한다.\n\n## 회귀 목록\n\n- R1 지갑 목록/지갑 교환: 현재 계정 정보와 진입 정상.\n- R2 결제/MID 표시 정상. 결제 실행 제외.\n- R3 비스킷 카드 정보/이용권한/수수료 정상. 신청/충전 실행 제외.\n- R4 거래·매출·정산·내 정보가 현재 계정 기준으로 조회된다.\n\n## 판정 원칙\n\n- 성공/실패/확인불가/개인 수동 예정으로 구분한다.\n- 계정·상황·재현 순서·화면 증거를 기록하고 인증정보를 가린다.\n- 실제 서버 403과 브라우저 강제 재현/모킹을 구분한다. 두 계정 존재만으로 실제 403을 재현했다고 하지 않는다.\n- 로컬 코드·로컬 브라우저 결과와 개발계 배포본 결과를 구분한다.\n- 수정된 실제 코드의 개발계 반영이 확인되지 않으면 수정 검증 통과로 판정하지 않는다.\n",
  "scope": "개발계 비스킷페이 일반 가맹점 VE A/B, 본 항목 12개 및 조회 회귀 R1/R2/R4. 비스킷카드 회귀 제외.",
  "roles": [
    "VE"
  ],
  "subjectAccounts": [
    {
      "role": "VE",
      "label": "박재민_한결데",
      "envRole": "VE_4252_A"
    },
    {
      "role": "VE",
      "label": "김경주_코페이_수",
      "envRole": "VE_4252_B"
    }
  ],
  "checklist": [
    "계정별 홈/새로고침에서 소속·지갑·잔액·정산 정보가 현재 계정과 일치한다.",
    "본인 지갑 선택 → 금액 입력 → 출금 확인 정상 진입, 입력·수수료가 정확하고 권한 오류가 없다.",
    "다른 부서 출금 지갑 접근 권한 오류 조건에서 **선택한 출금 지갑에 접근 권한이 없습니다. 출금 지갑을 확인해 주세요.** 표시, 기존 생체인증 정책 조회 실패 문구 미표시.",
    "생체인증 미사용 계정은 기존 비밀번호 인증 안내가 정상이다.",
    "생체인증 사용 계정의 기존 앱 인증 안내와 정상 이체 흐름을 사용자 수동 결과로 확인한다.",
    "같은 계정·부서에서 화면 내 뒤로가기·재진입 시 지갑·입력·수수료가 불필요하게 초기화되지 않는다. 새로고침 입력 보존은 요구하지 않는다.",
    "A 출금 입력 후 로그아웃 → B 로그인 → 출금 진입 시 A 지갑·금액·인증 상태가 남지 않는다.",
    "A → B → A 로그인 때 홈 소속·지갑·잔액이 매번 현재 계정 기준이다.",
    "응답 지연 중 로그아웃 후 늦은 조회 결과로 인증이 복구되지 않는다.",
    "A 조회 중 B 로그인 후 늦은 A 결과가 B 정보를 덮어쓰지 않는다.",
    "출금 확인 정책 조회 대기 중 계정 변경 시 이전 인증 안내·출금 정보를 채택하지 않는다.",
    "메뉴 노출·접근권한은 기존 가맹점 권한을 유지한다."
  ],
  "manualChecks": [
    {
      "number": 5,
      "status": "PASS",
      "description": "사용자 앱 수동 결과: 등록 후 이체 성공, 재로그인 후 생체인증 성공",
      "verificationMethod": "USER_REPORTED_MANUAL",
      "evidence": "artifacts/biometric-manual-result.json"
    }
  ],
  "setupSteps": [
    {
      "name": "사전 확인: 두 가맹점 계정 로그인 후 홈 정상 진입",
      "kind": "state-verify",
      "role": "VE",
      "application": "store",
      "required": true,
      "mutation": "none",
      "description": "두 제공 계정 개발계 PIN 로그인 및 홈 진입 PASS. 초기 문자 인증 불일치는 과거 기록."
    },
    {
      "name": "수정본 개발계 반영 확인",
      "kind": "manual-precondition",
      "role": "VE",
      "application": "store",
      "required": true,
      "mutation": "none",
      "description": "원격 커밋, 실제 dev 배포 commit/build, 실제 접근 URL을 분리해서 기록."
    },
    {
      "name": "실제 타 부서 출금 지갑 403 재현 조건",
      "kind": "manual-precondition",
      "role": "VE",
      "application": "store",
      "required": true,
      "mutation": "none",
      "description": "실제 서버 권한 오류를 재현할 조건이 없으면 확인불가. 모킹 통과를 실제 서버 통과로 대체하지 않음."
    }
  ],
  "pages": [
    {
      "name": "스토어 로그인(사전 확인)",
      "application": "store",
      "path": "/sign-in",
      "roles": [
        "VE"
      ]
    },
    {
      "name": "본인 지갑 출금 준비",
      "application": "store",
      "path": "/transfer/step1",
      "roles": [
        "VE"
      ]
    }
  ],
  "executionPolicy": {
    "externalPublishAuthorized": true,
    "persistentMutationAllowed": false,
    "mockedResultsAreSeparate": true
  },
  "readiness": {
    "baseUrl": "https://store-dev.biscuitpay.com",
    "loginPrecondition": "PASS",
    "homePrecondition": "PASS",
    "authMethod": "PIN",
    "frontendDevDeployment": "DELIVERED_TARGET_AND_CONTEXT_GUARD_MARKERS_VERIFIED",
    "backendDevDeployment": "DIAGNOSTIC_DEV_DEPLOYMENT_UNVERIFIED",
    "actualCrossDepartment403Condition": "PASS_CONTROLLED_SOURCE_QUERY_REAL_SERVER_RESPONSE",
    "previousSmsMismatch": "HISTORICAL; latest dev PIN precondition succeeded",
    "transferPasswordRequired": "ENABLED_VERIFIED; A/B password guidance PASS"
  },
  "scopeExclusions": [
    "R3 비스킷카드 정보·상세·이용권한·수수료"
  ],
  "regressions": [
    {
      "number": "R1",
      "description": "지갑 목록/잔고 교환 현재 정보 및 진입"
    },
    {
      "number": "R2",
      "description": "결제/MID 표시, 실행 제외"
    },
    {
      "number": "R4",
      "description": "거래·매출·정산·내 정보 현재 계정 조회"
    }
  ]
}
