# Instructions

- Following Playwright test failed.
- Explain why, be concise, respect Playwright best practices.
- Provide a snippet of code with the fix, if possible.

# Test info

- Name: 3289/dev/access-history-permission.spec.ts >> [3289][dev] 영업라인 변경이력 권한 추가 >> [TA] role >> 영업라인 변경이력 >> 변경이력 진입 권한이 role 정책과 일치한다
- Location: src/qa/scenarios/accessHistoryPermission.ts:57:13

# Error details

```
Error: TA role은 영업라인 변경이력 변경이력 화면 또는 버튼에 접근 가능해야 합니다. <repo>/qa/issues/3289/dev/checklist.json의 historyButtonSelector/path를 확인하세요.

expect(locator).toBeVisible() failed

Locator: locator('button[aria-label="영업라인 변경이력"]').first()
Expected: visible
Timeout: 7000ms
Error: element(s) not found

Call log:
  - TA role은 영업라인 변경이력 변경이력 화면 또는 버튼에 접근 가능해야 합니다. <repo>/qa/issues/3289/dev/checklist.json의 historyButtonSelector/path를 확인하세요. with timeout 7000ms
  - waiting for locator('button[aria-label="영업라인 변경이력"]').first()

```

```yaml
- button "공지 배너 닫기"
- text: 테스트
- link "logo 빅스페이먼츠":
  - /url: /
  - img "logo"
  - text: 빅스페이먼츠
- button "사이드바 접기":
  - img
  - img "메뉴 열기"
- text: 업체관리 > 가맹점관리 > 가맹점관리
- img
- textbox "메뉴 입력"
- img
- button "다운로드 이력":
  - img
  - text: 다운로드 이력
- img
- text: 167:58:50
- button "연장"
- button "secret-redacted"
- button "범례 범례 설명":
  - text: 범례
  - img
  - img
- text: 법인 영업점
- list:
  - listitem:
    - link "홈":
      - /url: /?tenantId=redacted
      - img
      - text: 홈
  - listitem:
    - img
    - text: 거래내역(크로스페이)
    - button
    - list:
      - link "결제내역":
        - /url: /crosspay/transactions?tenantId=redacted
      - link "보류내역":
        - /url: /crosspay/hold?tenantId=redacted
      - link "차감내역":
        - /url: /crosspay/deduction?tenantId=redacted
      - link "단말기미등록 결제내역":
        - /url: /crosspay/unregistered-mid?tenantId=redacted
      - link "가맹점 정산차감 내역":
        - /url: /crosspay/negative-settlement?tenantId=redacted
  - listitem:
    - img
    - text: 계좌관리
    - button
    - list:
      - link "법인계좌관리":
        - /url: /master-accounting/corporation-accounts?tenantId=redacted
      - link "계좌조회":
        - /url: /account/account-inquiry?tenantId=redacted
      - link "지급계좌관리":
        - /url: /master-accounting/disbursement-accounts?tenantId=redacted
      - link "입금확인":
        - /url: /account/deposit-confirmation?tenantId=redacted
      - link "이체내역":
        - /url: /account/transfer-details?tenantId=redacted
      - link "이체하기":
        - /url: /account/remittance-manage?tenantId=redacted
      - link "이체하기(렌탈페이)":
        - /url: /account/remittance-manage-rentalpay?tenantId=redacted
  - listitem:
    - img
    - text: 매출집계
    - button
    - list:
      - link "매출집계":
        - /url: /admin/sales-history
  - listitem:
    - img
    - text: 업체관리
    - button
    - list:
      - text: 법인관리
      - list:
        - listitem:
          - link "법인관리":
            - /url: /business/corporation?tenantId=redacted
        - listitem:
          - link "부서별 운영상태관리":
            - /url: /saleline-status-control?tenantId=redacted
        - listitem:
          - link "계약관리":
            - /url: /business/pg-contract-manage?tenantId=redacted
      - text: 영업점관리
      - list:
        - listitem:
          - link "영업점관리":
            - /url: /business/branch?tenantId=redacted
        - listitem:
          - link "영업라인조회":
            - /url: /business/salesline-management?tenantId=redacted
        - listitem:
          - link "영업라인일괄적용":
            - /url: /business/salesline-preset?tenantId=redacted
      - text: 가맹점관리
      - list:
        - listitem: 가맹점관리
        - listitem:
          - link "TID/MID관리":
            - /url: /business/pg-mid-manage?tenantId=redacted
      - link "사용자프리셋":
        - /url: /business/member-preset?tenantId=redacted
      - link "역할별사용가능 권한관리":
        - /url: /business/permission-available?tenantId=redacted
      - link "사용자 보호 정책":
        - /url: /business/user-protection?tenantId=redacted
      - link "사용자":
        - /url: /business/member?tenantId=redacted
      - link "부서 설정 관리":
        - /url: /admin/ta-department-setting
  - listitem:
    - img
    - text: 비스킷관리
    - button
    - list:
      - link "연결계좌관리":
        - /url: /admin/biscuit-card/linked-account-setting
      - link "비스킷카드관리":
        - /url: /admin/biscuit-card/card-manage
      - link "비스킷카드 신청관리":
        - /url: /admin/biscuit-card/application-manage
      - link "법인별 수수료 관리":
        - /url: /admin/biscuit-card/corporation-commission
      - link "카드통계":
        - /url: /admin/statistics/biscuit-card-corporation
      - link "비스킷카드사용관리":
        - /url: /admin/biscuit-card/usage-history
- text: 상태
- combobox "상태"
- text: 잠금 설정
- combobox "잠금 설정"
- text: 법인명
- textbox "법인명"
- text: 가맹점명
- textbox "가맹점명"
- text: 가맹점 유형
- combobox "가맹점 유형"
- checkbox
- text: 완전 일치 완전 일치
- button "초기화"
- button "검색"
- button "상세검색":
  - text: 상세검색
  - img
- button "테이블 프리셋 설정":
  - img
  - text: 테이블 프리셋 설정
- button "프리셋 1" [disabled]
- button "프리셋 2"
- button "프리셋 3"
- button "필터":
  - img
  - text: 필터
- button "엑셀":
  - img
  - text: 엑셀
  - img
- list:
  - listitem: 가맹점 엑셀 다운로드
  - listitem: 영업라인 엑셀 다운로드
  - listitem: 가맹점 일괄등록
  - listitem: 영업라인 일괄등록
- button "동기화"
- button "잠금 예약"
- button "일괄적용"
- button "프리셋 설정"
- grid:
  - row "# 작업 영업라인 상태 상태옵션 형식 도움말 잠금 설정 결제 실패 횟수 결제 실패 횟수 (Click) 법인명 가맹점명 기본수수료(%) 이체수수료 지갑잔고 정산방식 정산주기 가맹점 유형 단말기 수 대표자명 연락처 비고 등록일시 구간 최근 거래일 지난 거래일":
    - columnheader "#"
    - columnheader:
      - checkbox
    - columnheader "작업"
    - columnheader "영업라인"
    - columnheader "상태 상태옵션 형식 도움말":
      - text: 상태
      - button "상태옵션 형식 도움말"
    - columnheader "잠금 설정"
    - columnheader "결제 실패 횟수 결제 실패 횟수 (Click)":
      - text: 결제 실패 횟수
      - button "결제 실패 횟수 (Click)"
    - columnheader "법인명"
    - columnheader "가맹점명"
    - columnheader "기본수수료(%)"
    - columnheader "이체수수료"
    - columnheader "지갑잔고"
    - columnheader "정산방식"
    - columnheader "정산주기"
    - columnheader "가맹점 유형"
    - columnheader "단말기 수"
    - columnheader "대표자명"
    - columnheader "연락처"
    - columnheader "비고"
    - columnheader "등록일시"
    - columnheader "구간"
    - columnheader "최근 거래일"
    - columnheader "지난 거래일"
  - rowgroup:
    - row "1 현재 영업라인 조회 정상 - 도난 / 분실 / 위변조 / 신고 한도초과 기타(카드번호, 유효기간, 비밀번호, 생년월일 등) 링크샵 만료 결제 실패 횟수 초기화 BP100482 A_주홍석_법인 BP100486 A_주홍석_가맹1 10.000 330 0 지갑 D+3 설정안함 0 주홍석 phone-redacted 2026-04-23 22:52 비신고 2026-05-22 5일 전":
      - gridcell "1"
      - gridcell:
        - checkbox
      - gridcell:
        - img
      - gridcell "현재 영업라인 조회":
        - button "3":
          - img
          - text: "3"
      - gridcell "정상":
        - img
        - text: 정상
      - gridcell "-"
      - gridcell "도난 / 분실 / 위변조 / 신고 한도초과 기타(카드번호, 유효기간, 비밀번호, 생년월일 등) 링크샵 만료 결제 실패 횟수 초기화":
        - text: 0 / 1 0 / 5 0 / 5 0 / 0
        - button "결제 실패 횟수 초기화":
          - img
      - gridcell "BP100482 A_주홍석_법인":
        - button "BP100482"
        - text: A_주홍석_법인
      - gridcell "BP100486 A_주홍석_가맹1":
        - button "BP100486"
        - text: A_주홍석_가맹1
      - gridcell "10.000"
      - gridcell "330"
      - gridcell "0"
      - gridcell "지갑":
        - img
        - text: 지갑
      - gridcell "D+3"
      - gridcell "설정안함"
      - gridcell "0"
      - gridcell "주홍석"
      - gridcell "phone-redacted"
      - gridcell
      - gridcell "2026-04-23 22:52"
      - gridcell "비신고"
      - gridcell "2026-05-22"
      - gridcell "5일 전"
    - row "2 현재 영업라인 조회 정상 - 도난 / 분실 / 위변조 / 신고 한도초과 기타(카드번호, 유효기간, 비밀번호, 생년월일 등) 링크샵 만료 결제 실패 횟수 초기화 BP100482 A_주홍석_법인 BP100487 A_주홍석_가맹2 10.000 330 0 지갑 매시 5분 간격 설정안함 0 주홍석 phone-redacted 2026-04-23 22:54 비신고 - -":
      - gridcell "2"
      - gridcell:
        - checkbox
      - gridcell:
        - img
      - gridcell "현재 영업라인 조회":
        - button "2":
          - img
          - text: "2"
      - gridcell "정상":
        - img
        - text: 정상
      - gridcell "-"
      - gridcell "도난 / 분실 / 위변조 / 신고 한도초과 기타(카드번호, 유효기간, 비밀번호, 생년월일 등) 링크샵 만료 결제 실패 횟수 초기화":
        - text: 0 / 1 0 / 5 0 / 5 0 / 0
        - button "결제 실패 횟수 초기화":
          - img
      - gridcell "BP100482 A_주홍석_법인":
        - button "BP100482"
        - text: A_주홍석_법인
      - gridcell "BP100487 A_주홍석_가맹2":
        - button "BP100487"
        - text: A_주홍석_가맹2
      - gridcell "10.000"
      - gridcell "330"
      - gridcell "0"
      - gridcell "지갑":
        - img
        - text: 지갑
      - gridcell "매시 5분 간격"
      - gridcell "설정안함"
      - gridcell "0"
      - gridcell "주홍석"
      - gridcell "phone-redacted"
      - gridcell
      - gridcell "2026-04-23 22:54"
      - gridcell "비신고"
      - gridcell "-"
      - gridcell "-"
    - row "3 현재 영업라인 조회 정상 - 도난 / 분실 / 위변조 / 신고 한도초과 기타(카드번호, 유효기간, 비밀번호, 생년월일 등) 링크샵 만료 결제 실패 횟수 초기화 BP100482 A_주홍석_법인 BP100488 A_주홍석_가맹3 10.000 330 0 지갑 매시 5분 간격 설정안함 0 주홍석 phone-redacted 2026-04-23 22:55 비신고 2026-05-27 -":
      - gridcell "3"
      - gridcell:
        - checkbox
      - gridcell:
        - img
      - gridcell "현재 영업라인 조회":
        - button "1":
          - img
          - text: "1"
      - gridcell "정상":
        - img
        - text: 정상
      - gridcell "-"
      - gridcell "도난 / 분실 / 위변조 / 신고 한도초과 기타(카드번호, 유효기간, 비밀번호, 생년월일 등) 링크샵 만료 결제 실패 횟수 초기화":
        - text: 0 / 1 0 / 5 0 / 5 0 / 0
        - button "결제 실패 횟수 초기화":
          - img
      - gridcell "BP100482 A_주홍석_법인":
        - button "BP100482"
        - text: A_주홍석_법인
      - gridcell "BP100488 A_주홍석_가맹3":
        - button "BP100488"
        - text: A_주홍석_가맹3
      - gridcell "10.000"
      - gridcell "330"
      - gridcell "0"
      - gridcell "지갑":
        - img
        - text: 지갑
      - gridcell "매시 5분 간격"
      - gridcell "설정안함"
      - gridcell "0"
      - gridcell "주홍석"
      - gridcell "phone-redacted"
      - gridcell
      - gridcell "2026-04-23 22:55"
      - gridcell "비신고"
      - gridcell "2026-05-27"
      - gridcell "-"
    - row "4 현재 영업라인 조회 정상 - 도난 / 분실 / 위변조 / 신고 한도초과 기타(카드번호, 유효기간, 비밀번호, 생년월일 등) 링크샵 만료 결제 실패 횟수 초기화 BP100482 A_주홍석_법인 BP100515 A_주홍석_가맹4_루시페이먼츠 0.000 330 0 지갑 매시 5분 간격 설정안함 0 주홍서 phone-redacted 2026-05-22 08:57 비신고 - -":
      - gridcell "4"
      - gridcell:
        - checkbox
      - gridcell:
        - img
      - gridcell "현재 영업라인 조회":
        - button "1":
          - img
          - text: "1"
      - gridcell "정상":
        - img
        - text: 정상
      - gridcell "-"
      - gridcell "도난 / 분실 / 위변조 / 신고 한도초과 기타(카드번호, 유효기간, 비밀번호, 생년월일 등) 링크샵 만료 결제 실패 횟수 초기화":
        - text: 0 / 1 0 / 5 0 / 5 0 / 0
        - button "결제 실패 횟수 초기화":
          - img
      - gridcell "BP100482 A_주홍석_법인":
        - button "BP100482"
        - text: A_주홍석_법인
      - gridcell "BP100515 A_주홍석_가맹4_루시페이먼츠":
        - button "BP100515"
        - text: A_주홍석_가맹4_루시페이먼츠
      - gridcell "0.000"
      - gridcell "330"
      - gridcell "0"
      - gridcell "지갑":
        - img
        - text: 지갑
      - gridcell "매시 5분 간격"
      - gridcell "설정안함"
      - gridcell "0"
      - gridcell "주홍서"
      - gridcell "phone-redacted"
      - gridcell
      - gridcell "2026-05-22 08:57"
      - gridcell "비신고"
      - gridcell "-"
      - gridcell "-"
    - row "5 현재 영업라인 조회 정상 - 도난 / 분실 / 위변조 / 신고 한도초과 기타(카드번호, 유효기간, 비밀번호, 생년월일 등) 링크샵 만료 결제 실패 횟수 초기화 BP100482 A_주홍석_법인 BP100516 A_주홍석_가맹5_페이레터 0.000 330 0 지갑 매시 5분 간격 설정안함 0 주홍석 phone-redacted 2026-05-23 14:33 비신고 2026-05-26 1일 전":
      - gridcell "5"
      - gridcell:
        - checkbox
      - gridcell:
        - img
      - gridcell "현재 영업라인 조회":
        - button "1":
          - img
          - text: "1"
      - gridcell "정상":
        - img
        - text: 정상
      - gridcell "-"
      - gridcell "도난 / 분실 / 위변조 / 신고 한도초과 기타(카드번호, 유효기간, 비밀번호, 생년월일 등) 링크샵 만료 결제 실패 횟수 초기화":
        - text: 0 / 1 0 / 5 0 / 5 0 / 0
        - button "결제 실패 횟수 초기화":
          - img
      - gridcell "BP100482 A_주홍석_법인":
        - button "BP100482"
        - text: A_주홍석_법인
      - gridcell "BP100516 A_주홍석_가맹5_페이레터":
        - button "BP100516"
        - text: A_주홍석_가맹5_페이레터
      - gridcell "0.000"
      - gridcell "330"
      - gridcell "0"
      - gridcell "지갑":
        - img
        - text: 지갑
      - gridcell "매시 5분 간격"
      - gridcell "설정안함"
      - gridcell "0"
      - gridcell "주홍석"
      - gridcell "phone-redacted"
      - gridcell
      - gridcell "2026-05-23 14:33"
      - gridcell "비신고"
      - gridcell "2026-05-26"
      - gridcell "1일 전"
    - row "6 현재 영업라인 조회 정상 - 도난 / 분실 / 위변조 / 신고 한도초과 기타(카드번호, 유효기간, 비밀번호, 생년월일 등) 링크샵 만료 결제 실패 횟수 초기화 BP100491 JMC테스트법인 BP100492 JMC가맹점 0.000 330 0 지갑 매시 5분 간격 설정안함 0 JMC phone-redacted 2026-04-29 00:06 비신고 2026-04-29 28일 전":
      - gridcell "6"
      - gridcell:
        - checkbox
      - gridcell:
        - img
      - gridcell "현재 영업라인 조회":
        - button "2":
          - img
          - text: "2"
      - gridcell "정상":
        - img
        - text: 정상
      - gridcell "-"
      - gridcell "도난 / 분실 / 위변조 / 신고 한도초과 기타(카드번호, 유효기간, 비밀번호, 생년월일 등) 링크샵 만료 결제 실패 횟수 초기화":
        - text: 0 / 1 0 / 5 0 / 5 0 / 0
        - button "결제 실패 횟수 초기화":
          - img
      - gridcell "BP100491 JMC테스트법인":
        - button "BP100491"
        - text: JMC테스트법인
      - gridcell "BP100492 JMC가맹점":
        - button "BP100492"
        - text: JMC가맹점
      - gridcell "0.000"
      - gridcell "330"
      - gridcell "0"
      - gridcell "지갑":
        - img
        - text: 지갑
      - gridcell "매시 5분 간격"
      - gridcell "설정안함"
      - gridcell "0"
      - gridcell "JMC"
      - gridcell "phone-redacted"
      - gridcell
      - gridcell "2026-04-29 00:06"
      - gridcell "비신고"
      - gridcell "2026-04-29"
      - gridcell "28일 전"
    - row "7 등록된 영업라인이 없습니다. 정상 - 도난 / 분실 / 위변조 / 신고 한도초과 기타(카드번호, 유효기간, 비밀번호, 생년월일 등) 링크샵 만료 결제 실패 횟수 초기화 BP100003 주홍석_법인 BP100462 ㄹㅇㄹㄹㅇㅇ 0.000 330 0 외부 매시 10분 간격 수기+단말기 0 ㄱㄱㄱㄱ 209-3093-2029 2026-04-15 20:11 비신고 - -":
      - gridcell "7"
      - gridcell:
        - checkbox
      - gridcell:
        - img
      - gridcell "등록된 영업라인이 없습니다.":
        - button "0" [disabled]:
          - img
          - text: "0"
      - gridcell "정상":
        - img
        - text: 정상
      - gridcell "-"
      - gridcell "도난 / 분실 / 위변조 / 신고 한도초과 기타(카드번호, 유효기간, 비밀번호, 생년월일 등) 링크샵 만료 결제 실패 횟수 초기화":
        - text: 0 / 0 0 / 0 0 / 0 0 / 0
        - button "결제 실패 횟수 초기화":
          - img
      - gridcell "BP100003 주홍석_법인":
        - button "BP100003"
        - text: 주홍석_법인
      - gridcell "BP100462 ㄹㅇㄹㄹㅇㅇ":
        - button "BP100462"
        - text: ㄹㅇㄹㄹㅇㅇ
      - gridcell "0.000"
      - gridcell "330"
      - gridcell "0"
      - gridcell "외부":
        - img
        - text: 외부
      - gridcell "매시 10분 간격"
      - gridcell "수기+단말기"
      - gridcell "0"
      - gridcell "ㄱㄱㄱㄱ"
      - gridcell "209-3093-2029"
      - gridcell
      - gridcell "2026-04-15 20:11"
      - gridcell "비신고"
      - gridcell "-"
      - gridcell "-"
    - row "8 등록된 영업라인이 없습니다. 정상 - 도난 / 분실 / 위변조 / 신고 한도초과 기타(카드번호, 유효기간, 비밀번호, 생년월일 등) 링크샵 만료 결제 실패 횟수 초기화 BP100009 안법인 BP100509 ㅁㄴㅇㄹㅇㄴ 0.000 330 0 자동 매시 5분 간격 설정안함 0 ㄴㅇㄹㅁㅇㄴㄹ 123-1231-2312 2026-05-08 16:28 비신고 - -":
      - gridcell "8"
      - gridcell:
        - checkbox
      - gridcell:
        - img
      - gridcell "등록된 영업라인이 없습니다.":
        - button "0" [disabled]:
          - img
          - text: "0"
      - gridcell "정상":
        - img
        - text: 정상
      - gridcell "-"
      - gridcell "도난 / 분실 / 위변조 / 신고 한도초과 기타(카드번호, 유효기간, 비밀번호, 생년월일 등) 링크샵 만료 결제 실패 횟수 초기화":
        - text: 0 / 1 0 / 5 0 / 5 0 / 0
        - button "결제 실패 횟수 초기화":
          - img
      - gridcell "BP100009 안법인":
        - button "BP100009"
        - text: 안법인
      - gridcell "BP100509 ㅁㄴㅇㄹㅇㄴ":
        - button "BP100509"
        - text: ㅁㄴㅇㄹㅇㄴ
      - gridcell "0.000"
      - gridcell "330"
      - gridcell "0"
      - gridcell "자동":
        - img
        - text: 자동
      - gridcell "매시 5분 간격"
      - gridcell "설정안함"
      - gridcell "0"
      - gridcell "ㄴㅇㄹㅁㅇㄴㄹ"
      - gridcell "123-1231-2312"
      - gridcell
      - gridcell "2026-05-08 16:28"
      - gridcell "비신고"
      - gridcell "-"
      - gridcell "-"
    - row "9 등록된 영업라인이 없습니다. 잠금 - 도난 / 분실 / 위변조 / 신고 한도초과 기타(카드번호, 유효기간, 비밀번호, 생년월일 등) 링크샵 만료 결제 실패 횟수 초기화 BP100009 안법인 BP100048 ㅂ스킷 테스트 0.000 0 0 지갑 매시 5분 간격 설정안함 0 송인준. phone-redacted 2026-04-09 09:17 비신고 - -":
      - gridcell "9"
      - gridcell:
        - checkbox
      - gridcell:
        - img
      - gridcell "등록된 영업라인이 없습니다.":
        - button "0" [disabled]:
          - img
          - text: "0"
      - gridcell "잠금":
        - img
        - text: 잠금
      - gridcell "-"
      - gridcell "도난 / 분실 / 위변조 / 신고 한도초과 기타(카드번호, 유효기간, 비밀번호, 생년월일 등) 링크샵 만료 결제 실패 횟수 초기화":
        - text: 0 / 1 0 / 5 0 / 5 0 / 0
        - button "결제 실패 횟수 초기화":
          - img
      - gridcell "BP100009 안법인":
        - button "BP100009"
        - text: 안법인
      - gridcell "BP100048 ㅂ스킷 테스트":
        - button "BP100048"
        - text: ㅂ스킷 테스트
      - gridcell "0.000"
      - gridcell "0"
      - gridcell "0"
      - gridcell "지갑":
        - img
        - text: 지갑
      - gridcell "매시 5분 간격"
      - gridcell "설정안함"
      - gridcell "0"
      - gridcell "송인준."
      - gridcell "phone-redacted"
      - gridcell
      - gridcell "2026-04-09 09:17"
      - gridcell "비신고"
      - gridcell "-"
      - gridcell "-"
    - row "10 등록된 영업라인이 없습니다. 잠금 - 도난 / 분실 / 위변조 / 신고 한도초과 기타(카드번호, 유효기간, 비밀번호, 생년월일 등) 링크샵 만료 결제 실패 횟수 초기화 BP100009 안법인 BP100467 가맹 엑셀 테스트 1.000 330 0 지갑 D+1 수기 1 안승현 phone-redacted 2026-04-16 11:11 신고 - -":
      - gridcell "10"
      - gridcell:
        - checkbox
      - gridcell:
        - img
      - gridcell "등록된 영업라인이 없습니다.":
        - button "0" [disabled]:
          - img
          - text: "0"
      - gridcell "잠금":
        - img
        - text: 잠금
      - gridcell "-"
      - gridcell "도난 / 분실 / 위변조 / 신고 한도초과 기타(카드번호, 유효기간, 비밀번호, 생년월일 등) 링크샵 만료 결제 실패 횟수 초기화":
        - text: 0 / 1 0 / 5 0 / 5 0 / 0
        - button "결제 실패 횟수 초기화":
          - img
      - gridcell "BP100009 안법인":
        - button "BP100009"
        - text: 안법인
      - gridcell "BP100467 가맹 엑셀 테스트":
        - button "BP100467"
        - text: 가맹 엑셀 테스트
      - gridcell "1.000"
      - gridcell "330"
      - gridcell "0"
      - gridcell "지갑":
        - img
        - text: 지갑
      - gridcell "D+1"
      - gridcell "수기"
      - gridcell "1"
      - gridcell "안승현"
      - gridcell "phone-redacted"
      - gridcell
      - gridcell "2026-04-16 11:11"
      - gridcell "신고"
      - gridcell "-"
      - gridcell "-"
    - row "11 등록된 영업라인이 없습니다. 정상 - 도난 / 분실 / 위변조 / 신고 한도초과 기타(카드번호, 유효기간, 비밀번호, 생년월일 등) 링크샵 만료 결제 실패 횟수 초기화 BP100006 박재민_법인 BP100470 가맹점유형단말기 0.000 330 0 지갑 매시 10분 간격 설정안함 0 재민 phone-redacted 2026-04-16 13:07 비신고 - -":
      - gridcell "11"
      - gridcell:
        - checkbox
      - gridcell:
        - img
      - gridcell "등록된 영업라인이 없습니다.":
        - button "0" [disabled]:
          - img
          - text: "0"
      - gridcell "정상":
        - img
        - text: 정상
      - gridcell "-"
      - gridcell "도난 / 분실 / 위변조 / 신고 한도초과 기타(카드번호, 유효기간, 비밀번호, 생년월일 등) 링크샵 만료 결제 실패 횟수 초기화":
        - text: 0 / 1 0 / 5 0 / 5 0 / 0
        - button "결제 실패 횟수 초기화":
          - img
      - gridcell "BP100006 박재민_법인":
        - button "BP100006"
        - text: 박재민_법인
      - gridcell "BP100470 가맹점유형단말기":
        - button "BP100470"
        - text: 가맹점유형단말기
      - gridcell "0.000"
      - gridcell "330"
      - gridcell "0"
      - gridcell "지갑":
        - img
        - text: 지갑
      - gridcell "매시 10분 간격"
      - gridcell "설정안함"
      - gridcell "0"
      - gridcell "재민"
      - gridcell "phone-redacted"
      - gridcell
      - gridcell "2026-04-16 13:07"
      - gridcell "비신고"
      - gridcell "-"
      - gridcell "-"
    - row "12 등록된 영업라인이 없습니다. 정상 - 도난 / 분실 / 위변조 / 신고 한도초과 기타(카드번호, 유효기간, 비밀번호, 생년월일 등) 링크샵 만료 결제 실패 횟수 초기화 BP100006 박재민_법인 BP100469 가맹점유형텟 0.000 330 0 지갑 D+1 설정안함 0 박재민 001-2312-3123 2026-04-16 13:06 비신고 - -":
      - gridcell "12"
      - gridcell:
        - checkbox
      - gridcell:
        - img
      - gridcell "등록된 영업라인이 없습니다.":
        - button "0" [disabled]:
          - img
          - text: "0"
      - gridcell "정상":
        - img
        - text: 정상
      - gridcell "-"
      - gridcell "도난 / 분실 / 위변조 / 신고 한도초과 기타(카드번호, 유효기간, 비밀번호, 생년월일 등) 링크샵 만료 결제 실패 횟수 초기화":
        - text: 0 / 1 0 / 5 0 / 5 0 / 0
        - button "결제 실패 횟수 초기화":
          - img
      - gridcell "BP100006 박재민_법인":
        - button "BP100006"
        - text: 박재민_법인
      - gridcell "BP100469 가맹점유형텟":
        - button "BP100469"
        - text: 가맹점유형텟
      - gridcell "0.000"
      - gridcell "330"
      - gridcell "0"
      - gridcell "지갑":
        - img
        - text: 지갑
      - gridcell "D+1"
      - gridcell "설정안함"
      - gridcell "0"
      - gridcell "박재민"
      - gridcell "001-2312-3123"
      - gridcell
      - gridcell "2026-04-16 13:06"
      - gridcell "비신고"
      - gridcell "-"
      - gridcell "-"
    - row "13 현재 영업라인 조회 정상 - 도난 / 분실 / 위변조 / 신고 한도초과 기타(카드번호, 유효기간, 비밀번호, 생년월일 등) 링크샵 만료 결제 실패 횟수 초기화 BP100463 구정산법인 BP100465 구정산가맹 0.000 330 -100 지갑 매시 5분 간격 설정안함 0 김경주 321-3131-2321 2026-04-15 23:20 비신고 - -":
      - gridcell "13"
      - gridcell:
        - checkbox
      - gridcell:
        - img
      - gridcell "현재 영업라인 조회":
        - button "1":
          - img
          - text: "1"
      - gridcell "정상":
        - img
        - text: 정상
      - gridcell "-"
      - gridcell "도난 / 분실 / 위변조 / 신고 한도초과 기타(카드번호, 유효기간, 비밀번호, 생년월일 등) 링크샵 만료 결제 실패 횟수 초기화":
        - text: 0 / 0 0 / 0 0 / 0 0 / 0
        - button "결제 실패 횟수 초기화":
          - img
      - gridcell "BP100463 구정산법인":
        - button "BP100463"
        - text: 구정산법인
      - gridcell "BP100465 구정산가맹":
        - button "BP100465"
        - text: 구정산가맹
      - gridcell "0.000"
      - gridcell "330"
      - gridcell "-100"
      - gridcell "지갑":
        - img
        - text: 지갑
      - gridcell "매시 5분 간격"
      - gridcell "설정안함"
      - gridcell "0"
      - gridcell "김경주"
      - gridcell "321-3131-2321"
      - gridcell
      - gridcell "2026-04-15 23:20"
      - gridcell "비신고"
      - gridcell "-"
      - gridcell "-"
    - row "14 등록된 영업라인이 없습니다. 정상 - 도난 / 분실 / 위변조 / 신고 한도초과 기타(카드번호, 유효기간, 비밀번호, 생년월일 등) 링크샵 만료 결제 실패 횟수 초기화 BP100006 박재민_법인 BP100014 김경주_가맹_테스트0 5.000 330 0 지갑 D+1 설정안함 1 김경주 phone-redacted 2026-04-07 22:32 비신고 - -":
      - gridcell "14"
      - gridcell:
        - checkbox
      - gridcell:
        - img
      - gridcell "등록된 영업라인이 없습니다.":
        - button "0" [disabled]:
          - img
          - text: "0"
      - gridcell "정상":
        - img
        - text: 정상
      - gridcell "-"
      - gridcell "도난 / 분실 / 위변조 / 신고 한도초과 기타(카드번호, 유효기간, 비밀번호, 생년월일 등) 링크샵 만료 결제 실패 횟수 초기화":
        - text: 0 / 1 0 / 5 0 / 5 0 / 0
        - button "결제 실패 횟수 초기화":
          - img
      - gridcell "BP100006 박재민_법인":
        - button "BP100006"
        - text: 박재민_법인
      - gridcell "BP100014 김경주_가맹_테스트0":
        - button "BP100014"
        - text: 김경주_가맹_테스트0
      - gridcell "5.000"
      - gridcell "330"
      - gridcell "0"
      - gridcell "지갑":
        - img
        - text: 지갑
      - gridcell "D+1"
      - gridcell "설정안함"
      - gridcell "1"
      - gridcell "김경주"
      - gridcell "phone-redacted"
      - gridcell
      - gridcell "2026-04-07 22:32"
      - gridcell "비신고"
      - gridcell "-"
      - gridcell "-"
    - row "15 현재 영업라인 조회 정상 - 도난 / 분실 / 위변조 / 신고 한도초과 기타(카드번호, 유효기간, 비밀번호, 생년월일 등) 링크샵 만료 결제 실패 횟수 초기화 BP100009 안법인 BP100015 김경주_가맹_테스트1 0.000 330 0 지갑 매시 5분 간격 설정안함 1 김경주 phone-redacted 2026-04-07 22:32 비신고 - -":
      - gridcell "15"
      - gridcell:
        - checkbox
      - gridcell:
        - img
      - gridcell "현재 영업라인 조회":
        - button "1":
          - img
          - text: "1"
      - gridcell "정상":
        - img
        - text: 정상
      - gridcell "-"
      - gridcell "도난 / 분실 / 위변조 / 신고 한도초과 기타(카드번호, 유효기간, 비밀번호, 생년월일 등) 링크샵 만료 결제 실패 횟수 초기화":
        - text: 0 / 1 0 / 5 0 / 5 0 / 0
        - button "결제 실패 횟수 초기화":
          - img
      - gridcell "BP100009 안법인":
        - button "BP100009"
        - text: 안법인
      - gridcell "BP100015 김경주_가맹_테스트1":
        - button "BP100015"
        - text: 김경주_가맹_테스트1
      - gridcell "0.000"
      - gridcell "330"
      - gridcell "0"
      - gridcell "지갑":
        - img
        - text: 지갑
      - gridcell "매시 5분 간격"
      - gridcell "설정안함"
      - gridcell "1"
      - gridcell "김경주"
      - gridcell "phone-redacted"
      - gridcell
      - gridcell "2026-04-07 22:32"
      - gridcell "비신고"
      - gridcell "-"
      - gridcell "-"
    - row "16 등록된 영업라인이 없습니다. 정상 - 도난 / 분실 / 위변조 / 신고 한도초과 기타(카드번호, 유효기간, 비밀번호, 생년월일 등) 링크샵 만료 결제 실패 횟수 초기화 BP100003 주홍석_법인 BP100024 김경주_가맹_테스트10 10.000 0 0 수동 매시 5분 간격 설정안함 1 김경주 phone-redacted 2026-04-07 22:32 비신고 - -":
      - gridcell "16"
      - gridcell:
        - checkbox
      - gridcell:
        - img
      - gridcell "등록된 영업라인이 없습니다.":
        - button "0" [disabled]:
          - img
          - text: "0"
      - gridcell "정상":
        - img
        - text: 정상
      - gridcell "-"
      - gridcell "도난 / 분실 / 위변조 / 신고 한도초과 기타(카드번호, 유효기간, 비밀번호, 생년월일 등) 링크샵 만료 결제 실패 횟수 초기화":
        - text: 0 / 0 0 / 0 0 / 0 0 / 0
        - button "결제 실패 횟수 초기화":
          - img
      - gridcell "BP100003 주홍석_법인":
        - button "BP100003"
        - text: 주홍석_법인
      - gridcell "BP100024 김경주_가맹_테스트10":
        - button "BP100024"
        - text: 김경주_가맹_테스트10
      - gridcell "10.000"
      - gridcell "0"
      - gridcell "0"
      - gridcell "수동":
        - img
        - text: 수동
      - gridcell "매시 5분 간격"
      - gridcell "설정안함"
      - gridcell "1"
      - gridcell "김경주"
      - gridcell "phone-redacted"
      - gridcell
      - gridcell "2026-04-07 22:32"
      - gridcell "비신고"
      - gridcell "-"
      - gridcell "-"
    - row "17 등록된 영업라인이 없습니다. 정상 - 도난 / 분실 / 위변조 / 신고 한도초과 기타(카드번호, 유효기간, 비밀번호, 생년월일 등) 링크샵 만료 결제 실패 횟수 초기화 BP100000 최인석 법인 BP100025 김경주_가맹_테스트11 0.000 330 0 지갑 매시 10분 간격 설정안함 1 김경주 phone-redacted 2026-04-07 22:32 비신고 - -":
      - gridcell "17"
      - gridcell:
        - checkbox
      - gridcell:
        - img
      - gridcell "등록된 영업라인이 없습니다.":
        - button "0" [disabled]:
          - img
          - text: "0"
      - gridcell "정상":
        - img
        - text: 정상
      - gridcell "-"
      - gridcell "도난 / 분실 / 위변조 / 신고 한도초과 기타(카드번호, 유효기간, 비밀번호, 생년월일 등) 링크샵 만료 결제 실패 횟수 초기화":
        - text: 0 / 1 0 / 5 0 / 5 0 / 0
        - button "결제 실패 횟수 초기화":
          - img
      - gridcell "BP100000 최인석 법인":
        - button "BP100000"
        - text: 최인석 법인
      - gridcell "BP100025 김경주_가맹_테스트11":
        - button "BP100025"
        - text: 김경주_가맹_테스트11
      - gridcell "0.000"
      - gridcell "330"
      - gridcell "0"
      - gridcell "지갑":
        - img
        - text: 지갑
      - gridcell "매시 10분 간격"
      - gridcell "설정안함"
      - gridcell "1"
      - gridcell "김경주"
      - gridcell "phone-redacted"
      - gridcell
      - gridcell "2026-04-07 22:32"
      - gridcell "비신고"
      - gridcell "-"
      - gridcell "-"
    - row "18 등록된 영업라인이 없습니다. 정상 - 도난 / 분실 / 위변조 / 신고 한도초과 기타(카드번호, 유효기간, 비밀번호, 생년월일 등) 링크샵 만료 결제 실패 횟수 초기화 BP100006 박재민_법인 BP100026 김경주_가맹_테스트12 5.000 330 0 지갑 D+1 설정안함 1 김경주 phone-redacted 2026-04-07 22:32 비신고 - -":
      - gridcell "18"
      - gridcell:
        - checkbox
      - gridcell:
        - img
      - gridcell "등록된 영업라인이 없습니다.":
        - button "0" [disabled]:
          - img
          - text: "0"
      - gridcell "정상":
        - img
        - text: 정상
      - gridcell "-"
      - gridcell "도난 / 분실 / 위변조 / 신고 한도초과 기타(카드번호, 유효기간, 비밀번호, 생년월일 등) 링크샵 만료 결제 실패 횟수 초기화":
        - text: 0 / 1 0 / 5 0 / 5 0 / 0
        - button "결제 실패 횟수 초기화":
          - img
      - gridcell "BP100006 박재민_법인":
        - button "BP100006"
        - text: 박재민_법인
      - gridcell "BP100026 김경주_가맹_테스트12":
        - button "BP100026"
        - text: 김경주_가맹_테스트12
      - gridcell "5.000"
      - gridcell "330"
      - gridcell "0"
      - gridcell "지갑":
        - img
        - text: 지갑
      - gridcell "D+1"
      - gridcell "설정안함"
      - gridcell "1"
      - gridcell "김경주"
      - gridcell "phone-redacted"
      - gridcell
      - gridcell "2026-04-07 22:32"
      - gridcell "비신고"
      - gridcell "-"
      - gridcell "-"
    - row "19 등록된 영업라인이 없습니다. 정상 - 도난 / 분실 / 위변조 / 신고 한도초과 기타(카드번호, 유효기간, 비밀번호, 생년월일 등) 링크샵 만료 결제 실패 횟수 초기화 BP100009 안법인 BP100027 김경주_가맹_테스트13 0.000 330 0 지갑 매시 5분 간격 설정안함 1 김경주 phone-redacted 2026-04-07 22:32 비신고 - -":
      - gridcell "19"
      - gridcell:
        - checkbox
      - gridcell:
        - img
      - gridcell "등록된 영업라인이 없습니다.":
        - button "0" [disabled]:
          - img
          - text: "0"
      - gridcell "정상":
        - img
        - text: 정상
      - gridcell "-"
      - gridcell "도난 / 분실 / 위변조 / 신고 한도초과 기타(카드번호, 유효기간, 비밀번호, 생년월일 등) 링크샵 만료 결제 실패 횟수 초기화":
        - text: 0 / 1 0 / 5 0 / 5 0 / 0
        - button "결제 실패 횟수 초기화":
          - img
      - gridcell "BP100009 안법인":
        - button "BP100009"
        - text: 안법인
      - gridcell "BP100027 김경주_가맹_테스트13":
        - button "BP100027"
        - text: 김경주_가맹_테스트13
      - gridcell "0.000"
      - gridcell "330"
      - gridcell "0"
      - gridcell "지갑":
        - img
        - text: 지갑
      - gridcell "매시 5분 간격"
      - gridcell "설정안함"
      - gridcell "1"
      - gridcell "김경주"
      - gridcell "phone-redacted"
      - gridcell
      - gridcell "2026-04-07 22:32"
      - gridcell "비신고"
      - gridcell "-"
      - gridcell "-"
    - row "20 등록된 영업라인이 없습니다. 정상 - 도난 / 분실 / 위변조 / 신고 한도초과 기타(카드번호, 유효기간, 비밀번호, 생년월일 등) 링크샵 만료 결제 실패 횟수 초기화 BP100003 주홍석_법인 BP100028 김경주_가맹_테스트14 10.000 0 0 수동 매시 5분 간격 설정안함 1 김경주 phone-redacted 2026-04-07 22:32 비신고 - -":
      - gridcell "20"
      - gridcell:
        - checkbox
      - gridcell:
        - img
      - gridcell "등록된 영업라인이 없습니다.":
        - button "0" [disabled]:
          - img
          - text: "0"
      - gridcell "정상":
        - img
        - text: 정상
      - gridcell "-"
      - gridcell "도난 / 분실 / 위변조 / 신고 한도초과 기타(카드번호, 유효기간, 비밀번호, 생년월일 등) 링크샵 만료 결제 실패 횟수 초기화":
        - text: 0 / 0 0 / 0 0 / 0 0 / 0
        - button "결제 실패 횟수 초기화":
          - img
      - gridcell "BP100003 주홍석_법인":
        - button "BP100003"
        - text: 주홍석_법인
      - gridcell "BP100028 김경주_가맹_테스트14":
        - button "BP100028"
        - text: 김경주_가맹_테스트14
      - gridcell "10.000"
      - gridcell "0"
      - gridcell "0"
      - gridcell "수동":
        - img
        - text: 수동
      - gridcell "매시 5분 간격"
      - gridcell "설정안함"
      - gridcell "1"
      - gridcell "김경주"
      - gridcell "phone-redacted"
      - gridcell
      - gridcell "2026-04-07 22:32"
      - gridcell "비신고"
      - gridcell "-"
      - gridcell "-"
    - row "21 등록된 영업라인이 없습니다. 정상 - 도난 / 분실 / 위변조 / 신고 한도초과 기타(카드번호, 유효기간, 비밀번호, 생년월일 등) 링크샵 만료 결제 실패 횟수 초기화 BP100000 최인석 법인 BP100029 김경주_가맹_테스트15 0.000 330 0 지갑 매시 10분 간격 설정안함 1 김경주 phone-redacted 2026-04-07 22:32 비신고 - -":
      - gridcell "21"
      - gridcell:
        - checkbox
      - gridcell:
        - img
      - gridcell "등록된 영업라인이 없습니다.":
        - button "0" [disabled]:
          - img
          - text: "0"
      - gridcell "정상":
        - img
        - text: 정상
      - gridcell "-"
      - gridcell "도난 / 분실 / 위변조 / 신고 한도초과 기타(카드번호, 유효기간, 비밀번호, 생년월일 등) 링크샵 만료 결제 실패 횟수 초기화":
        - text: 0 / 1 0 / 5 0 / 5 0 / 0
        - button "결제 실패 횟수 초기화":
          - img
      - gridcell "BP100000 최인석 법인":
        - button "BP100000"
        - text: 최인석 법인
      - gridcell "BP100029 김경주_가맹_테스트15":
        - button "BP100029"
        - text: 김경주_가맹_테스트15
      - gridcell "0.000"
      - gridcell "330"
      - gridcell "0"
      - gridcell "지갑":
        - img
        - text: 지갑
      - gridcell "매시 10분 간격"
      - gridcell "설정안함"
      - gridcell "1"
      - gridcell "김경주"
      - gridcell "phone-redacted"
      - gridcell
      - gridcell "2026-04-07 22:32"
      - gridcell "비신고"
      - gridcell "-"
      - gridcell "-"
    - row "22 등록된 영업라인이 없습니다. 정상 - 도난 / 분실 / 위변조 / 신고 한도초과 기타(카드번호, 유효기간, 비밀번호, 생년월일 등) 링크샵 만료 결제 실패 횟수 초기화 BP100003 주홍석_법인 BP100016 김경주_가맹_테스트2 10.000 0 0 수동 매시 5분 간격 설정안함 1 김경주 phone-redacted 2026-04-07 22:32 비신고 - -":
      - gridcell "22"
      - gridcell:
        - checkbox
      - gridcell:
        - img
      - gridcell "등록된 영업라인이 없습니다.":
        - button "0" [disabled]:
          - img
          - text: "0"
      - gridcell "정상":
        - img
        - text: 정상
      - gridcell "-"
      - gridcell "도난 / 분실 / 위변조 / 신고 한도초과 기타(카드번호, 유효기간, 비밀번호, 생년월일 등) 링크샵 만료 결제 실패 횟수 초기화":
        - text: 0 / 0 0 / 0 0 / 0 0 / 0
        - button "결제 실패 횟수 초기화":
          - img
      - gridcell "BP100003 주홍석_법인":
        - button "BP100003"
        - text: 주홍석_법인
      - gridcell "BP100016 김경주_가맹_테스트2":
        - button "BP100016"
        - text: 김경주_가맹_테스트2
      - gridcell "10.000"
      - gridcell "0"
      - gridcell "0"
      - gridcell "수동":
        - img
        - text: 수동
      - gridcell "매시 5분 간격"
      - gridcell "설정안함"
      - gridcell "1"
      - gridcell "김경주"
      - gridcell "phone-redacted"
      - gridcell
      - gridcell "2026-04-07 22:32"
      - gridcell "비신고"
      - gridcell "-"
      - gridcell "-"
    - row "23 등록된 영업라인이 없습니다. 정상 - 도난 / 분실 / 위변조 / 신고 한도초과 기타(카드번호, 유효기간, 비밀번호, 생년월일 등) 링크샵 만료 결제 실패 횟수 초기화 BP100000 최인석 법인 BP100017 김경주_가맹_테스트3 0.000 330 0 지갑 매시 10분 간격 설정안함 1 김경주 phone-redacted 2026-04-07 22:32 비신고 - -":
      - gridcell "23"
      - gridcell:
        - checkbox
      - gridcell:
        - img
      - gridcell "등록된 영업라인이 없습니다.":
        - button "0" [disabled]:
          - img
          - text: "0"
      - gridcell "정상":
        - img
        - text: 정상
      - gridcell "-"
      - gridcell "도난 / 분실 / 위변조 / 신고 한도초과 기타(카드번호, 유효기간, 비밀번호, 생년월일 등) 링크샵 만료 결제 실패 횟수 초기화":
        - text: 0 / 1 0 / 5 0 / 5 0 / 0
        - button "결제 실패 횟수 초기화":
          - img
      - gridcell "BP100000 최인석 법인":
        - button "BP100000"
        - text: 최인석 법인
      - gridcell "BP100017 김경주_가맹_테스트3":
        - button "BP100017"
        - text: 김경주_가맹_테스트3
      - gridcell "0.000"
      - gridcell "330"
      - gridcell "0"
      - gridcell "지갑":
        - img
        - text: 지갑
      - gridcell "매시 10분 간격"
      - gridcell "설정안함"
      - gridcell "1"
      - gridcell "김경주"
      - gridcell "phone-redacted"
      - gridcell
      - gridcell "2026-04-07 22:32"
      - gridcell "비신고"
      - gridcell "-"
      - gridcell "-"
    - row "24 등록된 영업라인이 없습니다. 정상 - 도난 / 분실 / 위변조 / 신고 한도초과 기타(카드번호, 유효기간, 비밀번호, 생년월일 등) 링크샵 만료 결제 실패 횟수 초기화 BP100006 박재민_법인 BP100018 김경주_가맹_테스트4 5.000 330 0 지갑 D+1 설정안함 1 김경주 phone-redacted 2026-04-07 22:32 비신고 - -":
      - gridcell "24"
      - gridcell:
        - checkbox
      - gridcell:
        - img
      - gridcell "등록된 영업라인이 없습니다.":
        - button "0" [disabled]:
          - img
          - text: "0"
      - gridcell "정상":
        - img
        - text: 정상
      - gridcell "-"
      - gridcell "도난 / 분실 / 위변조 / 신고 한도초과 기타(카드번호, 유효기간, 비밀번호, 생년월일 등) 링크샵 만료 결제 실패 횟수 초기화":
        - text: 0 / 1 0 / 5 0 / 5 0 / 0
        - button "결제 실패 횟수 초기화":
          - img
      - gridcell "BP100006 박재민_법인":
        - button "BP100006"
        - text: 박재민_법인
      - gridcell "BP100018 김경주_가맹_테스트4":
        - button "BP100018"
        - text: 김경주_가맹_테스트4
      - gridcell "5.000"
      - gridcell "330"
      - gridcell "0"
      - gridcell "지갑":
        - img
        - text: 지갑
      - gridcell "D+1"
      - gridcell "설정안함"
      - gridcell "1"
      - gridcell "김경주"
      - gridcell "phone-redacted"
      - gridcell
      - gridcell "2026-04-07 22:32"
      - gridcell "비신고"
      - gridcell "-"
      - gridcell "-"
    - row "25 등록된 영업라인이 없습니다. 정상 - 도난 / 분실 / 위변조 / 신고 한도초과 기타(카드번호, 유효기간, 비밀번호, 생년월일 등) 링크샵 만료 결제 실패 횟수 초기화 BP100009 안법인 BP100019 김경주_가맹_테스트5 0.000 330 0 지갑 매시 5분 간격 설정안함 1 김경주 phone-redacted 2026-04-07 22:32 비신고 - -":
      - gridcell "25"
      - gridcell:
        - checkbox
      - gridcell:
        - img
      - gridcell "등록된 영업라인이 없습니다.":
        - button "0" [disabled]:
          - img
          - text: "0"
      - gridcell "정상":
        - img
        - text: 정상
      - gridcell "-"
      - gridcell "도난 / 분실 / 위변조 / 신고 한도초과 기타(카드번호, 유효기간, 비밀번호, 생년월일 등) 링크샵 만료 결제 실패 횟수 초기화":
        - text: 0 / 1 0 / 5 0 / 5 0 / 0
        - button "결제 실패 횟수 초기화":
          - img
      - gridcell "BP100009 안법인":
        - button "BP100009"
        - text: 안법인
      - gridcell "BP100019 김경주_가맹_테스트5":
        - button "BP100019"
        - text: 김경주_가맹_테스트5
      - gridcell "0.000"
      - gridcell "330"
      - gridcell "0"
      - gridcell "지갑":
        - img
        - text: 지갑
      - gridcell "매시 5분 간격"
      - gridcell "설정안함"
      - gridcell "1"
      - gridcell "김경주"
      - gridcell "phone-redacted"
      - gridcell
      - gridcell "2026-04-07 22:32"
      - gridcell "비신고"
      - gridcell "-"
      - gridcell "-"
    - row "26 등록된 영업라인이 없습니다. 정상 - 도난 / 분실 / 위변조 / 신고 한도초과 기타(카드번호, 유효기간, 비밀번호, 생년월일 등) 링크샵 만료 결제 실패 횟수 초기화 BP100003 주홍석_법인 BP100020 김경주_가맹_테스트6 10.000 0 0 수동 매시 5분 간격 설정안함 1 김경주 phone-redacted 2026-04-07 22:32 비신고 - -":
      - gridcell "26"
      - gridcell:
        - checkbox
      - gridcell:
        - img
      - gridcell "등록된 영업라인이 없습니다.":
        - button "0" [disabled]:
          - img
          - text: "0"
      - gridcell "정상":
        - img
        - text: 정상
      - gridcell "-"
      - gridcell "도난 / 분실 / 위변조 / 신고 한도초과 기타(카드번호, 유효기간, 비밀번호, 생년월일 등) 링크샵 만료 결제 실패 횟수 초기화":
        - text: 0 / 0 0 / 0 0 / 0 0 / 0
        - button "결제 실패 횟수 초기화":
          - img
      - gridcell "BP100003 주홍석_법인":
        - button "BP100003"
        - text: 주홍석_법인
      - gridcell "BP100020 김경주_가맹_테스트6":
        - button "BP100020"
        - text: 김경주_가맹_테스트6
      - gridcell "10.000"
      - gridcell "0"
      - gridcell "0"
      - gridcell "수동":
        - img
        - text: 수동
      - gridcell "매시 5분 간격"
      - gridcell "설정안함"
      - gridcell "1"
      - gridcell "김경주"
      - gridcell "phone-redacted"
      - gridcell
      - gridcell "2026-04-07 22:32"
      - gridcell "비신고"
      - gridcell "-"
      - gridcell "-"
    - row "27 등록된 영업라인이 없습니다. 정상 - 도난 / 분실 / 위변조 / 신고 한도초과 기타(카드번호, 유효기간, 비밀번호, 생년월일 등) 링크샵 만료 결제 실패 횟수 초기화 BP100000 최인석 법인 BP100021 김경주_가맹_테스트7 0.000 330 0 지갑 매시 10분 간격 설정안함 1 김경주 phone-redacted 2026-04-07 22:32 비신고 - -":
      - gridcell "27"
      - gridcell:
        - checkbox
      - gridcell:
        - img
      - gridcell "등록된 영업라인이 없습니다.":
        - button "0" [disabled]:
          - img
          - text: "0"
      - gridcell "정상":
        - img
        - text: 정상
      - gridcell "-"
      - gridcell "도난 / 분실 / 위변조 / 신고 한도초과 기타(카드번호, 유효기간, 비밀번호, 생년월일 등) 링크샵 만료 결제 실패 횟수 초기화":
        - text: 0 / 1 0 / 5 0 / 5 0 / 0
        - button "결제 실패 횟수 초기화":
          - img
      - gridcell "BP100000 최인석 법인":
        - button "BP100000"
        - text: 최인석 법인
      - gridcell "BP100021 김경주_가맹_테스트7":
        - button "BP100021"
        - text: 김경주_가맹_테스트7
      - gridcell "0.000"
      - gridcell "330"
      - gridcell "0"
      - gridcell "지갑":
        - img
        - text: 지갑
      - gridcell "매시 10분 간격"
      - gridcell "설정안함"
      - gridcell "1"
      - gridcell "김경주"
      - gridcell "phone-redacted"
      - gridcell
      - gridcell "2026-04-07 22:32"
      - gridcell "비신고"
      - gridcell "-"
      - gridcell "-"
    - row "28 등록된 영업라인이 없습니다. 정상 - 도난 / 분실 / 위변조 / 신고 한도초과 기타(카드번호, 유효기간, 비밀번호, 생년월일 등) 링크샵 만료 결제 실패 횟수 초기화 BP100006 박재민_법인 BP100022 김경주_가맹_테스트8 5.000 330 0 지갑 D+1 설정안함 1 김경주 phone-redacted 2026-04-07 22:32 비신고 - -":
      - gridcell "28"
      - gridcell:
        - checkbox
      - gridcell:
        - img
      - gridcell "등록된 영업라인이 없습니다.":
        - button "0" [disabled]:
          - img
          - text: "0"
      - gridcell "정상":
        - img
        - text: 정상
      - gridcell "-"
      - gridcell "도난 / 분실 / 위변조 / 신고 한도초과 기타(카드번호, 유효기간, 비밀번호, 생년월일 등) 링크샵 만료 결제 실패 횟수 초기화":
        - text: 0 / 1 0 / 5 0 / 5 0 / 0
        - button "결제 실패 횟수 초기화":
          - img
      - gridcell "BP100006 박재민_법인":
        - button "BP100006"
        - text: 박재민_법인
      - gridcell "BP100022 김경주_가맹_테스트8":
        - button "BP100022"
        - text: 김경주_가맹_테스트8
      - gridcell "5.000"
      - gridcell "330"
      - gridcell "0"
      - gridcell "지갑":
        - img
        - text: 지갑
      - gridcell "D+1"
      - gridcell "설정안함"
      - gridcell "1"
      - gridcell "김경주"
      - gridcell "phone-redacted"
      - gridcell
      - gridcell "2026-04-07 22:32"
      - gridcell "비신고"
      - gridcell "-"
      - gridcell "-"
    - row "29 등록된 영업라인이 없습니다. 정상 - 도난 / 분실 / 위변조 / 신고 한도초과 기타(카드번호, 유효기간, 비밀번호, 생년월일 등) 링크샵 만료 결제 실패 횟수 초기화 BP100009 안법인 BP100023 김경주_가맹_테스트9 0.000 330 0 지갑 매시 5분 간격 설정안함 1 김경주 phone-redacted 2026-04-07 22:32 비신고 - -":
      - gridcell "29"
      - gridcell:
        - checkbox
      - gridcell:
        - img
      - gridcell "등록된 영업라인이 없습니다.":
        - button "0" [disabled]:
          - img
          - text: "0"
      - gridcell "정상":
        - img
        - text: 정상
      - gridcell "-"
      - gridcell "도난 / 분실 / 위변조 / 신고 한도초과 기타(카드번호, 유효기간, 비밀번호, 생년월일 등) 링크샵 만료 결제 실패 횟수 초기화":
        - text: 0 / 1 0 / 5 0 / 5 0 / 0
        - button "결제 실패 횟수 초기화":
          - img
      - gridcell "BP100009 안법인":
        - button "BP100009"
        - text: 안법인
      - gridcell "BP100023 김경주_가맹_테스트9":
        - button "BP100023"
        - text: 김경주_가맹_테스트9
      - gridcell "0.000"
      - gridcell "330"
      - gridcell "0"
      - gridcell "지갑":
        - img
        - text: 지갑
      - gridcell "매시 5분 간격"
      - gridcell "설정안함"
      - gridcell "1"
      - gridcell "김경주"
      - gridcell "phone-redacted"
      - gridcell
      - gridcell "2026-04-07 22:32"
      - gridcell "비신고"
      - gridcell "-"
      - gridcell "-"
    - row "30 현재 영업라인 조회 정상 - 도난 / 분실 / 위변조 / 신고 한도초과 기타(카드번호, 유효기간, 비밀번호, 생년월일 등) 링크샵 만료 결제 실패 횟수 초기화 BP100075 안법인2 BP100493 두바이소금빵가맹 0.000 330 0 지갑 매시 5분 간격 설정안함 0 둡아이 phone-redacted 2026-04-29 15:36 비신고 - -":
      - gridcell "30"
      - gridcell:
        - checkbox
      - gridcell:
        - img
      - gridcell "현재 영업라인 조회":
        - button "2":
          - img
          - text: "2"
      - gridcell "정상":
        - img
        - text: 정상
      - gridcell "-"
      - gridcell "도난 / 분실 / 위변조 / 신고 한도초과 기타(카드번호, 유효기간, 비밀번호, 생년월일 등) 링크샵 만료 결제 실패 횟수 초기화":
        - text: 0 / 0 0 / 0 0 / 0 0 / 0
        - button "결제 실패 횟수 초기화":
          - img
      - gridcell "BP100075 안법인2":
        - button "BP100075"
        - text: 안법인2
      - gridcell "BP100493 두바이소금빵가맹":
        - button "BP100493"
        - text: 두바이소금빵가맹
      - gridcell "0.000"
      - gridcell "330"
      - gridcell "0"
      - gridcell "지갑":
        - img
        - text: 지갑
      - gridcell "매시 5분 간격"
      - gridcell "설정안함"
      - gridcell "0"
      - gridcell "둡아이"
      - gridcell "phone-redacted"
      - gridcell
      - gridcell "2026-04-29 15:36"
      - gridcell "비신고"
      - gridcell "-"
      - gridcell "-"
    - row "31 현재 영업라인 조회 정상 - 도난 / 분실 / 위변조 / 신고 한도초과 기타(카드번호, 유효기간, 비밀번호, 생년월일 등) 링크샵 만료 결제 실패 횟수 초기화 BP100006 박재민_법인 BP100008 박재민_가맹 5.000 0 2,852,649 지갑 D+1 수기+단말기 1 박재민 001-2312-5117 2026-04-06 16:31 비신고 2026-05-13 14일 전":
      - gridcell "31"
      - gridcell:
        - checkbox
      - gridcell:
        - img
      - gridcell "현재 영업라인 조회":
        - button "5":
          - img
          - text: "5"
      - gridcell "정상":
        - img
        - text: 정상
      - gridcell "-"
      - gridcell "도난 / 분실 / 위변조 / 신고 한도초과 기타(카드번호, 유효기간, 비밀번호, 생년월일 등) 링크샵 만료 결제 실패 횟수 초기화":
        - text: 0 / 1 0 / 5 0 / 5 0 / 0
        - button "결제 실패 횟수 초기화":
          - img
      - gridcell "BP100006 박재민_법인":
        - button "BP100006"
        - text: 박재민_법인
      - gridcell "BP100008 박재민_가맹":
        - button "BP100008"
        - text: 박재민_가맹
      - gridcell "5.000"
      - gridcell "0"
      - gridcell "2,852,649"
      - gridcell "지갑":
        - img
        - text: 지갑
      - gridcell "D+1"
      - gridcell "수기+단말기"
      - gridcell "1"
      - gridcell "박재민"
      - gridcell "001-2312-5117"
      - gridcell
      - gridcell "2026-04-06 16:31"
      - gridcell "비신고"
      - gridcell "2026-05-13"
      - gridcell "14일 전"
    - row "32 현재 영업라인 조회 정상 - 도난 / 분실 / 위변조 / 신고 한도초과 기타(카드번호, 유효기간, 비밀번호, 생년월일 등) 링크샵 만료 결제 실패 횟수 초기화 BP100006 박재민_법인 BP100058 박재민_가맹2 5.000 330 0 지갑 매시 5분 간격 수기 1 박재민 001-2312-5117 2026-04-09 17:10 비신고 2026-04-27 30일 전":
      - gridcell "32"
      - gridcell:
        - checkbox
      - gridcell:
        - img
      - gridcell "현재 영업라인 조회":
        - button "3":
          - img
          - text: "3"
      - gridcell "정상":
        - img
        - text: 정상
      - gridcell "-"
      - gridcell "도난 / 분실 / 위변조 / 신고 한도초과 기타(카드번호, 유효기간, 비밀번호, 생년월일 등) 링크샵 만료 결제 실패 횟수 초기화":
        - text: 0 / 1 0 / 5 0 / 5 0 / 0
        - button "결제 실패 횟수 초기화":
          - img
      - gridcell "BP100006 박재민_법인":
        - button "BP100006"
        - text: 박재민_법인
      - gridcell "BP100058 박재민_가맹2":
        - button "BP100058"
        - text: 박재민_가맹2
      - gridcell "5.000"
      - gridcell "330"
      - gridcell "0"
      - gridcell "지갑":
        - img
        - text: 지갑
      - gridcell "매시 5분 간격"
      - gridcell "수기"
      - gridcell "1"
      - gridcell "박재민"
      - gridcell "001-2312-5117"
      - gridcell
      - gridcell "2026-04-09 17:10"
      - gridcell "비신고"
      - gridcell "2026-04-27"
      - gridcell "30일 전"
    - row "33 현재 영업라인 조회 정상 - 도난 / 분실 / 위변조 / 신고 한도초과 기타(카드번호, 유효기간, 비밀번호, 생년월일 등) 링크샵 만료 결제 실패 횟수 초기화 BP100006 박재민_법인 BP100059 박재민_가맹3 5.000 330 3,166 지갑 매시 10분 간격 수기+단말기 1 박재민 001-2312-5117 2026-04-09 17:10 비신고 2026-05-08 19일 전":
      - gridcell "33"
      - gridcell:
        - checkbox
      - gridcell:
        - img
      - gridcell "현재 영업라인 조회":
        - button "2":
          - img
          - text: "2"
      - gridcell "정상":
        - img
        - text: 정상
      - gridcell "-"
      - gridcell "도난 / 분실 / 위변조 / 신고 한도초과 기타(카드번호, 유효기간, 비밀번호, 생년월일 등) 링크샵 만료 결제 실패 횟수 초기화":
        - text: 0 / 1 0 / 5 0 / 5 0 / 0
        - button "결제 실패 횟수 초기화":
          - img
      - gridcell "BP100006 박재민_법인":
        - button "BP100006"
        - text: 박재민_법인
      - gridcell "BP100059 박재민_가맹3":
        - button "BP100059"
        - text: 박재민_가맹3
      - gridcell "5.000"
      - gridcell "330"
      - gridcell "3,166"
      - gridcell "지갑":
        - img
        - text: 지갑
      - gridcell "매시 10분 간격"
      - gridcell "수기+단말기"
      - gridcell "1"
      - gridcell "박재민"
      - gridcell "001-2312-5117"
      - gridcell
      - gridcell "2026-04-09 17:10"
      - gridcell "비신고"
      - gridcell "2026-05-08"
      - gridcell "19일 전"
    - row "34 현재 영업라인 조회 정상 - 도난 / 분실 / 위변조 / 신고 한도초과 기타(카드번호, 유효기간, 비밀번호, 생년월일 등) 링크샵 만료 결제 실패 횟수 초기화 BP100006 박재민_법인 BP100060 박재민_가맹4 5.000 330 0 지갑 D+1 설정안함 1 박재민 001-2312-5117 2026-04-09 17:10 비신고 2026-05-27 -":
      - gridcell "34"
      - gridcell:
        - checkbox
      - gridcell:
        - img
      - gridcell "현재 영업라인 조회":
        - button "2":
          - img
          - text: "2"
      - gridcell "정상":
        - img
        - text: 정상
      - gridcell "-"
      - gridcell "도난 / 분실 / 위변조 / 신고 한도초과 기타(카드번호, 유효기간, 비밀번호, 생년월일 등) 링크샵 만료 결제 실패 횟수 초기화":
        - text: 0 / 1 0 / 5 0 / 5 0 / 0
        - button "결제 실패 횟수 초기화":
          - img
      - gridcell "BP100006 박재민_법인":
        - button "BP100006"
        - text: 박재민_법인
      - gridcell "BP100060 박재민_가맹4":
        - button "BP100060"
        - text: 박재민_가맹4
      - gridcell "5.000"
      - gridcell "330"
      - gridcell "0"
      - gridcell "지갑":
        - img
        - text: 지갑
      - gridcell "D+1"
      - gridcell "설정안함"
      - gridcell "1"
      - gridcell "박재민"
      - gridcell "001-2312-5117"
      - gridcell
      - gridcell "2026-04-09 17:10"
      - gridcell "비신고"
      - gridcell "2026-05-27"
      - gridcell "-"
    - row "35 현재 영업라인 조회 정상 - 도난 / 분실 / 위변조 / 신고 한도초과 기타(카드번호, 유효기간, 비밀번호, 생년월일 등) 링크샵 만료 결제 실패 횟수 초기화 BP100006 박재민_법인 BP100061 박재민_가맹5 5.000 330 0 외부 D+1 설정안함 1 박재민 001-2312-5117 2025-04-09 17:10 비신고 2026-05-08 19일 전":
      - gridcell "35"
      - gridcell:
        - checkbox
      - gridcell:
        - img
      - gridcell "현재 영업라인 조회":
        - button "1":
          - img
          - text: "1"
      - gridcell "정상":
        - img
        - text: 정상
      - gridcell "-"
      - gridcell "도난 / 분실 / 위변조 / 신고 한도초과 기타(카드번호, 유효기간, 비밀번호, 생년월일 등) 링크샵 만료 결제 실패 횟수 초기화":
        - text: 0 / 1 0 / 5 0 / 5 0 / 0
        - button "결제 실패 횟수 초기화":
          - img
      - gridcell "BP100006 박재민_법인":
        - button "BP100006"
        - text: 박재민_법인
      - gridcell "BP100061 박재민_가맹5":
        - button "BP100061"
        - text: 박재민_가맹5
      - gridcell "5.000"
      - gridcell "330"
      - gridcell "0"
      - gridcell "외부":
        - img
        - text: 외부
      - gridcell "D+1"
      - gridcell "설정안함"
      - gridcell "1"
      - gridcell "박재민"
      - gridcell "001-2312-5117"
      - gridcell
      - gridcell "2025-04-09 17:10"
      - gridcell "비신고"
      - gridcell "2026-05-08"
      - gridcell "19일 전"
    - row "36 현재 영업라인 조회 정상 - 도난 / 분실 / 위변조 / 신고 한도초과 기타(카드번호, 유효기간, 비밀번호, 생년월일 등) 링크샵 만료 결제 실패 횟수 초기화 BP100006 박재민_법인 BP100062 박재민_가맹6 5.000 330 0 외부 D+1 설정안함 1 박재민 001-2312-5117 2026-04-09 17:10 비신고 2026-04-10 47일 전":
      - gridcell "36"
      - gridcell:
        - checkbox
      - gridcell:
        - img
      - gridcell "현재 영업라인 조회":
        - button "1":
          - img
          - text: "1"
      - gridcell "정상":
        - img
        - text: 정상
      - gridcell "-"
      - gridcell "도난 / 분실 / 위변조 / 신고 한도초과 기타(카드번호, 유효기간, 비밀번호, 생년월일 등) 링크샵 만료 결제 실패 횟수 초기화":
        - text: 0 / 1 0 / 5 0 / 5 0 / 0
        - button "결제 실패 횟수 초기화":
          - img
      - gridcell "BP100006 박재민_법인":
        - button "BP100006"
        - text: 박재민_법인
      - gridcell "BP100062 박재민_가맹6":
        - button "BP100062"
        - text: 박재민_가맹6
      - gridcell "5.000"
      - gridcell "330"
      - gridcell "0"
      - gridcell "외부":
        - img
        - text: 외부
      - gridcell "D+1"
      - gridcell "설정안함"
      - gridcell "1"
      - gridcell "박재민"
      - gridcell "001-2312-5117"
      - gridcell
      - gridcell "2026-04-09 17:10"
      - gridcell "비신고"
      - gridcell "2026-04-10"
      - gridcell "47일 전"
    - row "37 현재 영업라인 조회 정상 - 도난 / 분실 / 위변조 / 신고 한도초과 기타(카드번호, 유효기간, 비밀번호, 생년월일 등) 링크샵 만료 결제 실패 횟수 초기화 BP100006 박재민_법인 BP100063 박재민_가맹7 5.000 330 0 지갑 D+1 설정안함 1 박재민 001-2312-5117 2026-04-09 17:10 비신고 2026-04-10 47일 전":
      - gridcell "37"
      - gridcell:
        - checkbox
      - gridcell:
        - img
      - gridcell "현재 영업라인 조회":
        - button "1":
          - img
          - text: "1"
      - gridcell "정상":
        - img
        - text: 정상
      - gridcell "-"
      - gridcell "도난 / 분실 / 위변조 / 신고 한도초과 기타(카드번호, 유효기간, 비밀번호, 생년월일 등) 링크샵 만료 결제 실패 횟수 초기화":
        - text: 0 / 1 0 / 5 0 / 5 0 / 0
        - button "결제 실패 횟수 초기화":
          - img
      - gridcell "BP100006 박재민_법인":
        - button "BP100006"
        - text: 박재민_법인
      - gridcell "BP100063 박재민_가맹7":
        - button "BP100063"
        - text: 박재민_가맹7
      - gridcell "5.000"
      - gridcell "330"
      - gridcell "0"
      - gridcell "지갑":
        - img
        - text: 지갑
      - gridcell "D+1"
      - gridcell "설정안함"
      - gridcell "1"
      - gridcell "박재민"
      - gridcell "001-2312-5117"
      - gridcell
      - gridcell "2026-04-09 17:10"
      - gridcell "비신고"
      - gridcell "2026-04-10"
      - gridcell "47일 전"
    - row "38 현재 영업라인 조회 정상 - 도난 / 분실 / 위변조 / 신고 한도초과 기타(카드번호, 유효기간, 비밀번호, 생년월일 등) 링크샵 만료 결제 실패 횟수 초기화 BP100006 박재민_법인 BP100064 박재민_가맹8 5.000 330 0 지갑 D+1 설정안함 1 박재민 001-2312-5117 2026-04-09 17:10 비신고 2026-04-10 47일 전":
      - gridcell "38"
      - gridcell:
        - checkbox
      - gridcell:
        - img
      - gridcell "현재 영업라인 조회":
        - button "1":
          - img
          - text: "1"
      - gridcell "정상":
        - img
        - text: 정상
      - gridcell "-"
      - gridcell "도난 / 분실 / 위변조 / 신고 한도초과 기타(카드번호, 유효기간, 비밀번호, 생년월일 등) 링크샵 만료 결제 실패 횟수 초기화":
        - text: 0 / 1 0 / 5 0 / 5 0 / 0
        - button "결제 실패 횟수 초기화":
          - img
      - gridcell "BP100006 박재민_법인":
        - button "BP100006"
        - text: 박재민_법인
      - gridcell "BP100064 박재민_가맹8":
        - button "BP100064"
        - text: 박재민_가맹8
      - gridcell "5.000"
      - gridcell "330"
      - gridcell "0"
      - gridcell "지갑":
        - img
        - text: 지갑
      - gridcell "D+1"
      - gridcell "설정안함"
      - gridcell "1"
      - gridcell "박재민"
      - gridcell "001-2312-5117"
      - gridcell
      - gridcell "2026-04-09 17:10"
      - gridcell "비신고"
      - gridcell "2026-04-10"
      - gridcell "47일 전"
    - row "39 현재 영업라인 조회 정상 - 도난 / 분실 / 위변조 / 신고 한도초과 기타(카드번호, 유효기간, 비밀번호, 생년월일 등) 링크샵 만료 결제 실패 횟수 초기화 BP100065 반길현_법인 BP100066 반길현_가맹1 0.000 0 35,762 지갑 매시 5분 간격 설정안함 0 반길현 phone-redacted 2026-04-10 09:56 비신고 2026-05-13 14일 전":
      - gridcell "39"
      - gridcell:
        - checkbox
      - gridcell:
        - img
      - gridcell "현재 영업라인 조회":
        - button "6":
          - img
          - text: "6"
      - gridcell "정상":
        - img
        - text: 정상
      - gridcell "-"
      - gridcell "도난 / 분실 / 위변조 / 신고 한도초과 기타(카드번호, 유효기간, 비밀번호, 생년월일 등) 링크샵 만료 결제 실패 횟수 초기화":
        - text: 0 / 1 0 / 5 0 / 5 0 / 0
        - button "결제 실패 횟수 초기화":
          - img
      - gridcell "BP100065 반길현_법인":
        - button "BP100065"
        - text: 반길현_법인
      - gridcell "BP100066 반길현_가맹1":
        - button "BP100066"
        - text: 반길현_가맹1
      - gridcell "0.000"
      - gridcell "0"
      - gridcell "35,762"
      - gridcell "지갑":
        - img
        - text: 지갑
      - gridcell "매시 5분 간격"
      - gridcell "설정안함"
      - gridcell "0"
      - gridcell "반길현"
      - gridcell "phone-redacted"
      - gridcell
      - gridcell "2026-04-10 09:56"
      - gridcell "비신고"
      - gridcell "2026-05-13"
      - gridcell "14일 전"
    - row "40 현재 영업라인 조회 정상 - 도난 / 분실 / 위변조 / 신고 한도초과 기타(카드번호, 유효기간, 비밀번호, 생년월일 등) 링크샵 만료 결제 실패 횟수 초기화 BP100065 반길현_법인 BP100267 반길현_가맹10 0.000 330 0 지갑 매시 5분 간격 설정안함 0 반길현 phone-redacted 2026-04-14 17:56 비신고 - -":
      - gridcell "40"
      - gridcell:
        - checkbox
      - gridcell:
        - img
      - gridcell "현재 영업라인 조회":
        - button "1":
          - img
          - text: "1"
      - gridcell "정상":
        - img
        - text: 정상
      - gridcell "-"
      - gridcell "도난 / 분실 / 위변조 / 신고 한도초과 기타(카드번호, 유효기간, 비밀번호, 생년월일 등) 링크샵 만료 결제 실패 횟수 초기화":
        - text: 0 / 1 0 / 5 0 / 5 0 / 0
        - button "결제 실패 횟수 초기화":
          - img
      - gridcell "BP100065 반길현_법인":
        - button "BP100065"
        - text: 반길현_법인
      - gridcell "BP100267 반길현_가맹10":
        - button "BP100267"
        - text: 반길현_가맹10
      - gridcell "0.000"
      - gridcell "330"
      - gridcell "0"
      - gridcell "지갑":
        - img
        - text: 지갑
      - gridcell "매시 5분 간격"
      - gridcell "설정안함"
      - gridcell "0"
      - gridcell "반길현"
      - gridcell "phone-redacted"
      - gridcell
      - gridcell "2026-04-14 17:56"
      - gridcell "비신고"
      - gridcell "-"
      - gridcell "-"
    - row "41 현재 영업라인 조회 정상 - 도난 / 분실 / 위변조 / 신고 한도초과 기타(카드번호, 유효기간, 비밀번호, 생년월일 등) 링크샵 만료 결제 실패 횟수 초기화 BP100065 반길현_법인 BP100268 반길현_가맹11 0.000 330 0 지갑 매시 5분 간격 설정안함 0 반길현 phone-redacted 2026-04-14 17:56 비신고 - -":
      - gridcell "41"
      - gridcell:
        - checkbox
      - gridcell:
        - img
      - gridcell "현재 영업라인 조회":
        - button "1":
          - img
          - text: "1"
      - gridcell "정상":
        - img
        - text: 정상
      - gridcell "-"
      - gridcell "도난 / 분실 / 위변조 / 신고 한도초과 기타(카드번호, 유효기간, 비밀번호, 생년월일 등) 링크샵 만료 결제 실패 횟수 초기화":
        - text: 0 / 1 0 / 5 0 / 5 0 / 0
        - button "결제 실패 횟수 초기화":
          - img
      - gridcell "BP100065 반길현_법인":
        - button "BP100065"
        - text: 반길현_법인
      - gridcell "BP100268 반길현_가맹11":
        - button "BP100268"
        - text: 반길현_가맹11
      - gridcell "0.000"
      - gridcell "330"
      - gridcell "0"
      - gridcell "지갑":
        - img
        - text: 지갑
      - gridcell "매시 5분 간격"
      - gridcell "설정안함"
      - gridcell "0"
      - gridcell "반길현"
      - gridcell "phone-redacted"
      - gridcell
      - gridcell "2026-04-14 17:56"
      - gridcell "비신고"
      - gridcell "-"
      - gridcell "-"
    - row "42 현재 영업라인 조회 정상 - 도난 / 분실 / 위변조 / 신고 한도초과 기타(카드번호, 유효기간, 비밀번호, 생년월일 등) 링크샵 만료 결제 실패 횟수 초기화 BP100065 반길현_법인 BP100269 반길현_가맹12 0.000 330 0 지갑 매시 5분 간격 설정안함 0 반길현 phone-redacted 2026-04-14 17:57 비신고 - -":
      - gridcell "42"
      - gridcell:
        - checkbox
      - gridcell:
        - img
      - gridcell "현재 영업라인 조회":
        - button "1":
          - img
          - text: "1"
      - gridcell "정상":
        - img
        - text: 정상
      - gridcell "-"
      - gridcell "도난 / 분실 / 위변조 / 신고 한도초과 기타(카드번호, 유효기간, 비밀번호, 생년월일 등) 링크샵 만료 결제 실패 횟수 초기화":
        - text: 0 / 1 0 / 5 0 / 5 0 / 0
        - button "결제 실패 횟수 초기화":
          - img
      - gridcell "BP100065 반길현_법인":
        - button "BP100065"
        - text: 반길현_법인
      - gridcell "BP100269 반길현_가맹12":
        - button "BP100269"
        - text: 반길현_가맹12
      - gridcell "0.000"
      - gridcell "330"
      - gridcell "0"
      - gridcell "지갑":
        - img
        - text: 지갑
      - gridcell "매시 5분 간격"
      - gridcell "설정안함"
      - gridcell "0"
      - gridcell "반길현"
      - gridcell "phone-redacted"
      - gridcell
      - gridcell "2026-04-14 17:57"
      - gridcell "비신고"
      - gridcell "-"
      - gridcell "-"
    - row "43 현재 영업라인 조회 정상 - 도난 / 분실 / 위변조 / 신고 한도초과 기타(카드번호, 유효기간, 비밀번호, 생년월일 등) 링크샵 만료 결제 실패 횟수 초기화 BP100065 반길현_법인 BP100070 반길현_가맹2 0.000 330 20,910 지갑 매달 30일 설정안함 0 반길현 phone-redacted 2026-04-10 12:30 비신고 2026-04-16 41일 전":
      - gridcell "43"
      - gridcell:
        - checkbox
      - gridcell:
        - img
      - gridcell "현재 영업라인 조회":
        - button "1":
          - img
          - text: "1"
      - gridcell "정상":
        - img
        - text: 정상
      - gridcell "-"
      - gridcell "도난 / 분실 / 위변조 / 신고 한도초과 기타(카드번호, 유효기간, 비밀번호, 생년월일 등) 링크샵 만료 결제 실패 횟수 초기화":
        - text: 0 / 1 0 / 5 0 / 5 0 / 0
        - button "결제 실패 횟수 초기화":
          - img
      - gridcell "BP100065 반길현_법인":
        - button "BP100065"
        - text: 반길현_법인
      - gridcell "BP100070 반길현_가맹2":
        - button "BP100070"
        - text: 반길현_가맹2
      - gridcell "0.000"
      - gridcell "330"
      - gridcell "20,910"
      - gridcell "지갑":
        - img
        - text: 지갑
      - gridcell "매달 30일"
      - gridcell "설정안함"
      - gridcell "0"
      - gridcell "반길현"
      - gridcell "phone-redacted"
      - gridcell
      - gridcell "2026-04-10 12:30"
      - gridcell "비신고"
      - gridcell "2026-04-16"
      - gridcell "41일 전"
    - row "44 현재 영업라인 조회 정상 - 도난 / 분실 / 위변조 / 신고 한도초과 기타(카드번호, 유효기간, 비밀번호, 생년월일 등) 링크샵 만료 결제 실패 횟수 초기화 BP100065 반길현_법인 BP100077 반길현_가맹3 0.000 0 0 지갑 D+0 설정안함 0 반길현 phone-redacted 2026-04-13 18:27 비신고 2026-04-08 49일 전":
      - gridcell "44"
      - gridcell:
        - checkbox
      - gridcell:
        - img
      - gridcell "현재 영업라인 조회":
        - button "1":
          - img
          - text: "1"
      - gridcell "정상":
        - img
        - text: 정상
      - gridcell "-"
      - gridcell "도난 / 분실 / 위변조 / 신고 한도초과 기타(카드번호, 유효기간, 비밀번호, 생년월일 등) 링크샵 만료 결제 실패 횟수 초기화":
        - text: 0 / 1 0 / 5 0 / 5 0 / 0
        - button "결제 실패 횟수 초기화":
          - img
      - gridcell "BP100065 반길현_법인":
        - button "BP100065"
        - text: 반길현_법인
      - gridcell "BP100077 반길현_가맹3":
        - button "BP100077"
        - text: 반길현_가맹3
      - gridcell "0.000"
      - gridcell "0"
      - gridcell "0"
      - gridcell "지갑":
        - img
        - text: 지갑
      - gridcell "D+0"
      - gridcell "설정안함"
      - gridcell "0"
      - gridcell "반길현"
      - gridcell "phone-redacted"
      - gridcell
      - gridcell "2026-04-13 18:27"
      - gridcell "비신고"
      - gridcell "2026-04-08"
      - gridcell "49일 전"
    - row "45 현재 영업라인 조회 정상 - 도난 / 분실 / 위변조 / 신고 한도초과 기타(카드번호, 유효기간, 비밀번호, 생년월일 등) 링크샵 만료 결제 실패 횟수 초기화 BP100065 반길현_법인 BP100145 반길현_가맹4 0.000 330 0 지갑 매시 5분 간격 설정안함 0 반길현 phone-redacted 2026-04-14 15:06 비신고 - -":
      - gridcell "45"
      - gridcell:
        - checkbox
      - gridcell:
        - img
      - gridcell "현재 영업라인 조회":
        - button "1":
          - img
          - text: "1"
      - gridcell "정상":
        - img
        - text: 정상
      - gridcell "-"
      - gridcell "도난 / 분실 / 위변조 / 신고 한도초과 기타(카드번호, 유효기간, 비밀번호, 생년월일 등) 링크샵 만료 결제 실패 횟수 초기화":
        - text: 0 / 1 0 / 5 0 / 5 0 / 0
        - button "결제 실패 횟수 초기화":
          - img
      - gridcell "BP100065 반길현_법인":
        - button "BP100065"
        - text: 반길현_법인
      - gridcell "BP100145 반길현_가맹4":
        - button "BP100145"
        - text: 반길현_가맹4
      - gridcell "0.000"
      - gridcell "330"
      - gridcell "0"
      - gridcell "지갑":
        - img
        - text: 지갑
      - gridcell "매시 5분 간격"
      - gridcell "설정안함"
      - gridcell "0"
      - gridcell "반길현"
      - gridcell "phone-redacted"
      - gridcell
      - gridcell "2026-04-14 15:06"
      - gridcell "비신고"
      - gridcell "-"
      - gridcell "-"
    - row "46 현재 영업라인 조회 정상 - 도난 / 분실 / 위변조 / 신고 한도초과 기타(카드번호, 유효기간, 비밀번호, 생년월일 등) 링크샵 만료 결제 실패 횟수 초기화 BP100065 반길현_법인 BP100146 반길현_가맹5 0.000 330 0 지갑 매시 5분 간격 설정안함 0 반길현 112-3123-1231 2026-04-14 15:07 비신고 - -":
      - gridcell "46"
      - gridcell:
        - checkbox
      - gridcell:
        - img
      - gridcell "현재 영업라인 조회":
        - button "1":
          - img
          - text: "1"
      - gridcell "정상":
        - img
        - text: 정상
      - gridcell "-"
      - gridcell "도난 / 분실 / 위변조 / 신고 한도초과 기타(카드번호, 유효기간, 비밀번호, 생년월일 등) 링크샵 만료 결제 실패 횟수 초기화":
        - text: 0 / 1 0 / 5 0 / 5 0 / 0
        - button "결제 실패 횟수 초기화":
          - img
      - gridcell "BP100065 반길현_법인":
        - button "BP100065"
        - text: 반길현_법인
      - gridcell "BP100146 반길현_가맹5":
        - button "BP100146"
        - text: 반길현_가맹5
      - gridcell "0.000"
      - gridcell "330"
      - gridcell "0"
      - gridcell "지갑":
        - img
        - text: 지갑
      - gridcell "매시 5분 간격"
      - gridcell "설정안함"
      - gridcell "0"
      - gridcell "반길현"
      - gridcell "112-3123-1231"
      - gridcell
      - gridcell "2026-04-14 15:07"
      - gridcell "비신고"
      - gridcell "-"
      - gridcell "-"
    - row "47 현재 영업라인 조회 정상 - 도난 / 분실 / 위변조 / 신고 한도초과 기타(카드번호, 유효기간, 비밀번호, 생년월일 등) 링크샵 만료 결제 실패 횟수 초기화 BP100065 반길현_법인 BP100147 반길현_가맹6 0.000 330 0 지갑 매시 5분 간격 설정안함 0 반길현 phone-redacted 2026-04-14 15:07 비신고 - -":
      - gridcell "47"
      - gridcell:
        - checkbox
      - gridcell:
        - img
      - gridcell "현재 영업라인 조회":
        - button "1":
          - img
          - text: "1"
      - gridcell "정상":
        - img
        - text: 정상
      - gridcell "-"
      - gridcell "도난 / 분실 / 위변조 / 신고 한도초과 기타(카드번호, 유효기간, 비밀번호, 생년월일 등) 링크샵 만료 결제 실패 횟수 초기화":
        - text: 0 / 1 0 / 5 0 / 5 0 / 0
        - button "결제 실패 횟수 초기화":
          - img
      - gridcell "BP100065 반길현_법인":
        - button "BP100065"
        - text: 반길현_법인
      - gridcell "BP100147 반길현_가맹6":
        - button "BP100147"
        - text: 반길현_가맹6
      - gridcell "0.000"
      - gridcell "330"
      - gridcell "0"
      - gridcell "지갑":
        - img
        - text: 지갑
      - gridcell "매시 5분 간격"
      - gridcell "설정안함"
      - gridcell "0"
      - gridcell "반길현"
      - gridcell "phone-redacted"
      - gridcell
      - gridcell "2026-04-14 15:07"
      - gridcell "비신고"
      - gridcell "-"
      - gridcell "-"
    - row "48 현재 영업라인 조회 정상 - 도난 / 분실 / 위변조 / 신고 한도초과 기타(카드번호, 유효기간, 비밀번호, 생년월일 등) 링크샵 만료 결제 실패 횟수 초기화 BP100065 반길현_법인 BP100148 반길현_가맹7 0.000 330 0 지갑 매시 5분 간격 설정안함 0 반길현 phone-redacted 2026-04-14 15:08 비신고 - -":
      - gridcell "48"
      - gridcell:
        - checkbox
      - gridcell:
        - img
      - gridcell "현재 영업라인 조회":
        - button "1":
          - img
          - text: "1"
      - gridcell "정상":
        - img
        - text: 정상
      - gridcell "-"
      - gridcell "도난 / 분실 / 위변조 / 신고 한도초과 기타(카드번호, 유효기간, 비밀번호, 생년월일 등) 링크샵 만료 결제 실패 횟수 초기화":
        - text: 0 / 1 0 / 5 0 / 5 0 / 0
        - button "결제 실패 횟수 초기화":
          - img
      - gridcell "BP100065 반길현_법인":
        - button "BP100065"
        - text: 반길현_법인
      - gridcell "BP100148 반길현_가맹7":
        - button "BP100148"
        - text: 반길현_가맹7
      - gridcell "0.000"
      - gridcell "330"
      - gridcell "0"
      - gridcell "지갑":
        - img
        - text: 지갑
      - gridcell "매시 5분 간격"
      - gridcell "설정안함"
      - gridcell "0"
      - gridcell "반길현"
      - gridcell "phone-redacted"
      - gridcell
      - gridcell "2026-04-14 15:08"
      - gridcell "비신고"
      - gridcell "-"
      - gridcell "-"
    - row "49 현재 영업라인 조회 정상 - 도난 / 분실 / 위변조 / 신고 한도초과 기타(카드번호, 유효기간, 비밀번호, 생년월일 등) 링크샵 만료 결제 실패 횟수 초기화 BP100065 반길현_법인 BP100149 반길현_가맹8 0.000 330 0 지갑 매시 5분 간격 설정안함 0 반길현 phone-redacted 2026-04-14 15:08 비신고 - -":
      - gridcell "49"
      - gridcell:
        - checkbox
      - gridcell:
        - img
      - gridcell "현재 영업라인 조회":
        - button "1":
          - img
          - text: "1"
      - gridcell "정상":
        - img
        - text: 정상
      - gridcell "-"
      - gridcell "도난 / 분실 / 위변조 / 신고 한도초과 기타(카드번호, 유효기간, 비밀번호, 생년월일 등) 링크샵 만료 결제 실패 횟수 초기화":
        - text: 0 / 1 0 / 5 0 / 5 0 / 0
        - button "결제 실패 횟수 초기화":
          - img
      - gridcell "BP100065 반길현_법인":
        - button "BP100065"
        - text: 반길현_법인
      - gridcell "BP100149 반길현_가맹8":
        - button "BP100149"
        - text: 반길현_가맹8
      - gridcell "0.000"
      - gridcell "330"
      - gridcell "0"
      - gridcell "지갑":
        - img
        - text: 지갑
      - gridcell "매시 5분 간격"
      - gridcell "설정안함"
      - gridcell "0"
      - gridcell "반길현"
      - gridcell "phone-redacted"
      - gridcell
      - gridcell "2026-04-14 15:08"
      - gridcell "비신고"
      - gridcell "-"
      - gridcell "-"
    - row "50 현재 영업라인 조회 정상 - 도난 / 분실 / 위변조 / 신고 한도초과 기타(카드번호, 유효기간, 비밀번호, 생년월일 등) 링크샵 만료 결제 실패 횟수 초기화 BP100065 반길현_법인 BP100150 반길현_가맹9 0.000 330 0 지갑 매시 5분 간격 설정안함 0 반길현 phone-redacted 2026-04-14 15:09 비신고 - -":
      - gridcell "50"
      - gridcell:
        - checkbox
      - gridcell:
        - img
      - gridcell "현재 영업라인 조회":
        - button "1":
          - img
          - text: "1"
      - gridcell "정상":
        - img
        - text: 정상
      - gridcell "-"
      - gridcell "도난 / 분실 / 위변조 / 신고 한도초과 기타(카드번호, 유효기간, 비밀번호, 생년월일 등) 링크샵 만료 결제 실패 횟수 초기화":
        - text: 0 / 1 0 / 5 0 / 5 0 / 0
        - button "결제 실패 횟수 초기화":
          - img
      - gridcell "BP100065 반길현_법인":
        - button "BP100065"
        - text: 반길현_법인
      - gridcell "BP100150 반길현_가맹9":
        - button "BP100150"
        - text: 반길현_가맹9
      - gridcell "0.000"
      - gridcell "330"
      - gridcell "0"
      - gridcell "지갑":
        - img
        - text: 지갑
      - gridcell "매시 5분 간격"
      - gridcell "설정안함"
      - gridcell "0"
      - gridcell "반길현"
      - gridcell "phone-redacted"
      - gridcell
      - gridcell "2026-04-14 15:09"
      - gridcell "비신고"
      - gridcell "-"
      - gridcell "-"
- text: 총 50 / 93건
```

# Test source

```ts
  1   | import {
  2   |   expect,
  3   |   test,
  4   |   type Browser,
  5   |   type Download,
  6   |   type Locator,
  7   |   type Page,
  8   |   type TestInfo
  9   | } from "@playwright/test";
  10  | import fs from "node:fs";
  11  | import path from "node:path";
  12  | import { isLoginPage, loginWithCredentials } from "../auth";
  13  | import { getChecklistPath, loadChecklist, loadIssueMetadata } from "../checklist";
  14  | import {
  15  |   extractDownloadRows,
  16  |   extractDownloadBufferText,
  17  |   extractDownloadText,
  18  |   guessDownloadFileNameFromUrl
  19  | } from "../downloadText";
  20  | import { getRuntimeQaEnv, type RuntimeQaEnv } from "../env";
  21  | import { pageRunsForRole, resolveChecklistExecutionRoles } from "../roles";
  22  | import { buildPageUrl } from "../url";
  23  | import type { QaEnvironment, QaPageDefinition } from "../types";
  24  | 
  25  | interface ScenarioOptions {
  26  |   issueId: string;
  27  |   environment: QaEnvironment;
  28  | }
  29  | 
  30  | type AssertionSurface = "screen" | "excel";
  31  | 
  32  | export function runAccessHistoryPermissionSuite(options: ScenarioOptions): void {
  33  |   const metadata = loadIssueMetadata(options.issueId);
  34  |   const checklist = loadChecklist(options.issueId, options.environment);
  35  |   const checklistPath = getChecklistPath(options.issueId, options.environment);
  36  | 
  37  |   test.describe(`[${options.issueId}][${options.environment}] ${metadata.subject}`, () => {
  38  |     for (const role of resolveChecklistExecutionRoles(checklist)) {
  39  |       test.describe(`[${role}] role`, () => {
  40  |         for (const pageDefinition of checklist.pages) {
  41  |           if (!pageRunsForRole(checklist, pageDefinition, role)) {
  42  |             continue;
  43  |           }
  44  | 
  45  |           const runtimeEnv = getRuntimeQaEnv(
  46  |             options.environment,
  47  |             pageDefinition.application ?? "admin",
  48  |             role
  49  |           );
  50  |           const blockReason = getRuntimeBlockReason(runtimeEnv);
  51  |           const roleBlockReason = pageDefinition.blockedByRole?.[role];
  52  | 
  53  |           test.describe(pageDefinition.name, () => {
  54  |             test.skip(!!blockReason, blockReason);
  55  |             test.skip(!!roleBlockReason, roleBlockReason);
  56  | 
  57  |             test("변경이력 진입 권한이 role 정책과 일치한다", async ({ browser }, testInfo) => {
  58  |               await withRolePage(browser, runtimeEnv, async (page) => {
  59  |                 await openAuthenticatedTargetPage(page, pageDefinition, runtimeEnv);
  60  |                 const expectation = getAccessExpectation(pageDefinition, role);
  61  | 
  62  |                 if (expectation === "denied") {
  63  |                   const denied = await isAccessDenied(page, pageDefinition);
  64  |                   const historyEntryVisible = await getHistoryEntry(page, pageDefinition)
  65  |                     .first()
  66  |                     .isVisible({ timeout: 2_000 })
  67  |                     .catch(() => false);
  68  |                   expect(
  69  |                     denied || !historyEntryVisible,
  70  |                     `${role} role은 ${pageDefinition.name} 변경이력 진입이 제한되어야 합니다.`
  71  |                   ).toBe(true);
  72  |                   await attachPageScreenshot(page, testInfo, pageDefinition, role, "access-denied");
  73  |                   return;
  74  |                 }
  75  | 
  76  |                 await expect(
  77  |                   getHistoryEntry(page, pageDefinition).first(),
  78  |                   `${role} role은 ${pageDefinition.name} 변경이력 화면 또는 버튼에 접근 가능해야 합니다. ` +
  79  |                     `${checklistPath}의 historyButtonSelector/path를 확인하세요.`
> 80  |                 ).toBeVisible();
      |                   ^ Error: TA role은 영업라인 변경이력 변경이력 화면 또는 버튼에 접근 가능해야 합니다. <repo>/qa/issues/3289/dev/checklist.json의 historyButtonSelector/path를 확인하세요.
  81  |                 await attachPageScreenshot(page, testInfo, pageDefinition, role, "access-allowed");
  82  |               });
  83  |             });
  84  | 
  85  |             test("권한 범위의 변경이력만 노출된다", async ({ browser }, testInfo) => {
  86  |               test.skip(
  87  |                 getAccessExpectation(pageDefinition, role) === "denied",
  88  |                 `${role} role은 접근 제한 대상이므로 범위 검증을 생략합니다.`
  89  |               );
  90  |               test.skip(
  91  |                 !hasRoleTextExpectations(pageDefinition, role),
  92  |                 `${checklistPath}에 ${role} role의 expected/forbidden 노출 텍스트를 설정해야 합니다.`
  93  |               );
  94  | 
  95  |               await withRolePage(browser, runtimeEnv, async (page) => {
  96  |                 await openAuthenticatedTargetPage(page, pageDefinition, runtimeEnv);
  97  |                 await openHistoryEntry(page, pageDefinition);
  98  |                 await assertRoleTextExpectations(page.locator("body"), pageDefinition, role);
  99  |                 await attachPageScreenshot(page, testInfo, pageDefinition, role, "history-scope");
  100 |               });
  101 |             });
  102 | 
  103 |             test("상세 구성원 목록이 role 범위와 일치한다", async ({ browser }, testInfo) => {
  104 |               test.skip(
  105 |                 getAccessExpectation(pageDefinition, role) === "denied",
  106 |                 `${role} role은 접근 제한 대상이므로 상세 구성원 검증을 생략합니다.`
  107 |               );
  108 |               test.skip(
  109 |                 !pageDefinition.detailOpenSelector || !pageDefinition.memberListSelector,
  110 |                 `${checklistPath}에 detailOpenSelector/memberListSelector를 설정해야 합니다.`
  111 |               );
  112 |               test.skip(
  113 |                 !hasDetailTextExpectations(pageDefinition, role),
  114 |                 `${checklistPath}에 ${role} role의 상세 구성원 expected/forbidden 텍스트를 설정해야 합니다.`
  115 |               );
  116 | 
  117 |               await withRolePage(browser, runtimeEnv, async (page) => {
  118 |                 await openAuthenticatedTargetPage(page, pageDefinition, runtimeEnv);
  119 |                 await page.locator(pageDefinition.detailOpenSelector!).first().click();
  120 |                 await waitForNavigationToSettle(page);
  121 |                 const memberList = page.locator(pageDefinition.memberListSelector!).first();
  122 |                 await expect(memberList).toBeVisible();
  123 |                 await assertDetailTextExpectations(memberList, pageDefinition, role);
  124 |                 await attachPageScreenshot(page, testInfo, pageDefinition, role, "detail-members");
  125 |               });
  126 |             });
  127 | 
  128 |             test("엑셀 다운로드 범위가 화면 노출 범위와 일치한다", async ({ browser }, testInfo) => {
  129 |               test.setTimeout(
  130 |                 Math.max(240_000, (pageDefinition.excelDocumentReadyTimeoutMs ?? 10_000) + 180_000)
  131 |               );
  132 |               test.skip(
  133 |                 getAccessExpectation(pageDefinition, role) === "denied",
  134 |                 `${role} role은 접근 제한 대상이므로 엑셀 다운로드 검증을 생략합니다.`
  135 |               );
  136 |               test.skip(
  137 |                 !pageDefinition.excelDownloadButtonSelector,
  138 |                 `${checklistPath}에 excelDownloadButtonSelector를 설정해야 합니다.`
  139 |               );
  140 |               test.skip(
  141 |                 !hasExcelTextExpectations(pageDefinition, role),
  142 |                 `${checklistPath}에 ${role} role의 엑셀 expected/forbidden 텍스트를 설정해야 합니다.`
  143 |               );
  144 | 
  145 |               await withRolePage(browser, runtimeEnv, async (page) => {
  146 |                 await openAuthenticatedTargetPage(page, pageDefinition, runtimeEnv);
  147 |                 await openHistoryEntry(page, pageDefinition);
  148 | 
  149 |                 const downloadPromise = page
  150 |                   .waitForEvent("download", {
  151 |                     timeout: pageDefinition.excelDirectDownloadTimeoutMs ?? 3_000
  152 |                   })
  153 |                   .catch(() => undefined);
  154 |                 await page.locator(pageDefinition.excelDownloadButtonSelector!).first().click();
  155 |                 const directDownload = await downloadPromise;
  156 | 
  157 |                 if (directDownload) {
  158 |                   await assertDirectDownloadText(directDownload, pageDefinition, role, testInfo);
  159 |                   return;
  160 |                 }
  161 | 
  162 |                 await assertQueuedExcelRequest(page, pageDefinition);
  163 |                 await assertQueuedDocumentDownloadText(page, pageDefinition, runtimeEnv, role, testInfo);
  164 |               });
  165 |             });
  166 |           });
  167 |         }
  168 |       });
  169 |     }
  170 |   });
  171 | }
  172 | 
  173 | function getRuntimeBlockReason(runtimeEnv: RuntimeQaEnv): string | undefined {
  174 |   const appKey = runtimeEnv.application.toUpperCase();
  175 |   const envKey = runtimeEnv.environment.toUpperCase();
  176 | 
  177 |   if (!runtimeEnv.baseUrl) {
  178 |     return `BIX_${appKey}_${envKey}_BASE_URL 또는 BIX_${appKey}_${envKey}_LOGIN_URL이 필요합니다.`;
  179 |   }
  180 | 
```