Files
sam-scenarios/daily-report.json
light cff20a6c0e refactor: navigation 속성 추가 (targetUrl, urlPattern, menuHints)
- 54개 시나리오 파일에 URL 기반 메뉴 탐색을 위한 navigation 속성 추가
- targetUrl: 정확한 페이지 URL 경로
- urlPattern: ko 버전 포함 URL 패턴 (regex)
- menuHints: 메뉴명 힌트 배열 (fallback용)

메뉴 탐색 실패율 41.8% → URL 기반 방식으로 개선 예정

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-30 21:47:29 +09:00

937 lines
28 KiB
JSON

{
"id": "daily-report",
"name": "일일리포트 테스트",
"screenshotPolicy": {
"onErrorOnly": true,
"captureOn": ["error", "fail", "timeout", "404", "500", "blocked"]
},
"description": "회계관리 > 일일리포트 메뉴의 날짜 선택, 테이블 데이터 표시, 새로고침, 엑셀 다운로드 기능 테스트",
"baseUrl": "https://dev.codebridge-x.com",
"url": "/ko/accounting/daily-report",
"navigation": {
"targetUrl": "/accounting/daily-report",
"urlPattern": "/accounting/daily-report|/ko/accounting/daily-report",
"menuHints": ["일일 일보", "일일리포트", "일일보고", "회계관리"]
},
"menuNavigation": {
"level1": "회계관리",
"level2": "일일 일보",
"expectedUrl": "/ko/accounting/daily-report"
},
"menuNavigationEnhanced": {
"strategy": "scroll-and-search",
"description": "사이드바를 스크롤하며 메뉴를 찾고 클릭하여 404를 방지",
"level1": "회계관리",
"level2": "일일 일보",
"alternativeLevel1Names": ["회계관리", "회계 관리", "Accounting"],
"alternativeLevel2Names": ["일일 일보", "일일리포트", "일일 리포트", "Daily Report"],
"scrollConfig": {
"sidebarSelector": "nav, aside, [role='navigation'], .sidebar, #sidebar",
"menuItemSelector": "a, button, [role='menuitem'], [role='treeitem']",
"scrollStep": 200,
"maxScrollAttempts": 10,
"scrollDelay": 300
}
},
"testFocus": {
"primary": "날짜별 데이터 조회 및 테이블 표시 검증",
"description": "날짜 선택, 어음 및 외상매출채권 테이블, 일자별 상세 테이블(KRW/USD 분리), 매칭 상태, 합계 검증"
},
"prerequisites": {
"authentication": true,
"testData": {
"testDate": "2026-01-10",
"todayDate": "2026-01-15"
}
},
"expectedAPIs": [
{
"method": "GET",
"endpoint": "/api/v1/daily-report/note-receivables",
"params": "date=YYYY-MM-DD",
"description": "어음 및 외상매출채권 데이터 조회"
},
{
"method": "GET",
"endpoint": "/api/v1/daily-report/daily-accounts",
"params": "date=YYYY-MM-DD",
"description": "일자별 계좌 상세 데이터 조회"
},
{
"method": "GET",
"endpoint": "/api/v1/daily-report/summary",
"params": "date=YYYY-MM-DD",
"description": "일일리포트 요약 데이터 조회"
},
{
"method": "GET",
"endpoint": "/api/v1/daily-report/export",
"params": "date=YYYY-MM-DD",
"description": "엑셀 다운로드"
}
],
"steps": [
{
"id": "step-0",
"name": "사이드바 메뉴 전체 펼치기",
"description": "모두 펼치기 버튼을 클릭하여 전체 메뉴를 펼친 후 메뉴 탐색 준비",
"actions": [
{ "type": "scroll", "target": "sidebar", "direction": "top", "description": "사이드바 최상단으로 스크롤" },
{ "type": "wait", "duration": 300 },
{ "type": "evaluate", "script": "Array.from(document.querySelectorAll('button')).find(b => b.innerText?.includes('모두 펼치기'))?.click()" },
{ "type": "wait", "duration": 2000 }
]
},
{
"id": "step-1",
"name": "2단계 메뉴 진입: 회계관리 > 일일리포트",
"description": "사이드바를 스크롤하며 회계관리 > 일일리포트 메뉴를 찾아 클릭",
"actions": [
{
"type": "scrollAndFind",
"target": "회계관리",
"alternativeTexts": ["회계관리", "회계 관리", "Accounting"],
"scrollContainer": "sidebar",
"maxAttempts": 10,
"description": "스크롤하며 회계관리 메뉴 찾기"
},
{ "type": "click", "target": "회계관리", "description": "회계관리 메뉴 클릭" },
{ "type": "wait", "duration": 500, "description": "서브메뉴 펼쳐지기 대기" },
{
"type": "scrollAndFind",
"target": "일일리포트",
"alternativeTexts": ["일일리포트", "일일 리포트", "Daily Report"],
"scrollContainer": "submenu",
"maxAttempts": 5,
"description": "서브메뉴에서 일일리포트 찾기"
},
{ "type": "click", "target": "일일리포트", "description": "일일리포트 메뉴 클릭" },
{ "type": "wait", "target": "페이지 로드 완료", "timeout": 10000 }
],
"expected": {
"url": "/ko/accounting/daily-report",
"pageTitle": "일일리포트",
"elements": ["페이지 타이틀", "날짜 선택", "테이블"],
"authenticated": true
},
"verification": [
"회계관리 메뉴가 펼쳐졌는지 확인",
"일일리포트 서브메뉴 클릭 성공",
"404 에러 없이 페이지 로드 완료"
]
},
{
"id": "step-2",
"name": "페이지 구조 확인",
"description": "날짜 선택, 버튼, 테이블 구조 확인",
"actions": [
{
"type": "verify",
"target": "페이지 구조"
}
],
"expected": {
"datePicker": "조회 일자 입력 필드",
"buttons": ["새로고침", "엑셀 다운로드"],
"tables": ["어음 및 외상매출채권현황", "일자별 상세"]
}
},
{
"id": "step-3",
"name": "날짜 선택 필드 기본값 확인",
"description": "날짜 입력 필드의 기본값이 오늘 날짜인지 확인",
"actions": [
{
"type": "verify",
"target": "date input value"
}
],
"expected": {
"dateValue": "2026-01-15",
"dateFormat": "YYYY-MM-DD"
}
},
{
"id": "step-4",
"name": "페이지 타이틀 날짜 표시 확인",
"description": "페이지 타이틀에 선택된 날짜와 요일이 표시되는지 확인",
"actions": [
{
"type": "verify",
"target": "title date format"
}
],
"expected": {
"titleFormat": "2026년 1월 15일 수요일",
"includesDayOfWeek": true
}
},
{
"id": "step-5",
"name": "어음 및 외상매출채권현황 테이블 구조 확인",
"description": "첫 번째 테이블의 컬럼 헤더 확인",
"actions": [
{
"type": "verify",
"target": "note receivables table columns"
}
],
"expected": {
"tableTitle": "어음 및 외상매출채권현황",
"columns": ["내용", "현재 잔액", "발행일", "만기일"]
}
},
{
"id": "step-6",
"name": "어음 및 외상매출채권 데이터 로드 확인",
"description": "테이블에 데이터가 표시되는지 확인 (또는 '데이터가 없습니다' 메시지)",
"actions": [
{
"type": "verify",
"target": "table data or empty message"
}
],
"expected": {
"dataExists": "데이터 행 존재 또는 '데이터가 없습니다' 메시지",
"apiCalled": "GET /api/v1/daily-report/note-receivables"
}
},
{
"id": "step-7",
"name": "어음 및 외상매출채권 합계 확인",
"description": "테이블 하단의 합계 행이 표시되는지 확인",
"actions": [
{
"type": "verify",
"target": "table footer total"
}
],
"expected": {
"footerExists": true,
"footerLabel": "합계",
"totalCalculation": "현재 잔액 합계 표시"
}
},
{
"id": "step-8",
"name": "일자별 상세 테이블 구조 확인",
"description": "두 번째 테이블의 컬럼 헤더 확인",
"actions": [
{
"type": "verify",
"target": "daily accounts table columns"
}
],
"expected": {
"tableTitle": "일자별 상세",
"columns": ["구분", "상태", "전월 이월", "수입", "지출", "잔액"]
}
},
{
"id": "step-9",
"name": "일자별 상세 데이터 로드 확인",
"description": "테이블에 데이터가 표시되는지 확인",
"actions": [
{
"type": "verify",
"target": "daily accounts data"
}
],
"expected": {
"dataExists": "데이터 행 존재 또는 '데이터가 없습니다' 메시지",
"apiCalled": "GET /api/v1/daily-report/daily-accounts"
}
},
{
"id": "step-10",
"name": "KRW 계좌 데이터 확인",
"description": "원화(KRW) 계좌 데이터가 표시되는지 확인",
"actions": [
{
"type": "verify",
"target": "KRW accounts"
}
],
"expected": {
"krwAccountsExist": true,
"currencyType": "KRW"
}
},
{
"id": "step-11",
"name": "USD 계좌 데이터 확인",
"description": "외화(USD) 계좌 데이터가 별도로 표시되는지 확인",
"actions": [
{
"type": "verify",
"target": "USD accounts"
}
],
"expected": {
"usdAccountsExist": "USD 계좌 존재 또는 없음",
"currencyType": "USD"
}
},
{
"id": "step-12",
"name": "매칭 상태 Badge 확인",
"description": "상태 컬럼의 매칭/비매칭 Badge가 표시되는지 확인",
"actions": [
{
"type": "verify",
"target": "match status badges"
}
],
"expected": {
"badgeTypes": ["매칭", "비매칭"],
"matchedStyle": "green background",
"unmatchedStyle": "orange background"
}
},
{
"id": "step-13",
"name": "외화원(USD) 합계 행 확인",
"description": "일자별 상세 테이블의 첫 번째 합계 행 확인",
"actions": [
{
"type": "verify",
"target": "USD total row"
}
],
"expected": {
"footerLabel": "외화원 (USD) 합계",
"totalCalculation": "USD 계좌 합계 표시"
}
},
{
"id": "step-14",
"name": "현금성 자산 합계 행 확인",
"description": "일자별 상세 테이블의 두 번째 합계 행 확인",
"actions": [
{
"type": "verify",
"target": "cash asset total row"
}
],
"expected": {
"footerLabel": "현금성 자산 합계",
"totalCalculation": "전체 현금성 자산 합계 표시"
}
},
{
"id": "step-15",
"name": "로딩 상태 확인 - 어음 테이블",
"description": "데이터 로딩 중 어음 테이블에 로딩 스피너가 표시되는지 확인",
"actions": [
{
"type": "verify",
"target": "note receivables loading state"
}
],
"expected": {
"loadingSpinner": "Loader2 spinner",
"loadingMessage": "데이터를 불러오는 중..."
}
},
{
"id": "step-16",
"name": "로딩 상태 확인 - 일자별 상세 테이블",
"description": "데이터 로딩 중 일자별 상세 테이블에 로딩 스피너가 표시되는지 확인",
"actions": [
{
"type": "verify",
"target": "daily accounts loading state"
}
],
"expected": {
"loadingSpinner": "Loader2 spinner",
"loadingMessage": "데이터를 불러오는 중..."
}
},
{
"id": "step-17",
"name": "날짜 변경 - 과거 날짜 선택",
"description": "날짜 선택 필드에서 과거 날짜(2026-01-10)로 변경",
"actions": [
{
"type": "clear",
"target": "date input"
},
{
"type": "type",
"target": "date input",
"value": "2026-01-10"
},
{
"type": "wait",
"target": "데이터 로드"
}
],
"expected": {
"dateChanged": "2026-01-10",
"dataReloaded": true
}
},
{
"id": "step-18",
"name": "날짜 변경 후 페이지 타이틀 확인",
"description": "변경된 날짜가 페이지 타이틀에 반영되는지 확인",
"actions": [
{
"type": "verify",
"target": "title date update"
}
],
"expected": {
"titleFormat": "2026년 1월 10일 금요일",
"dateMatches": "2026-01-10"
}
},
{
"id": "step-19",
"name": "날짜 변경 후 데이터 리로드 확인",
"description": "새로운 날짜에 대한 데이터가 로드되는지 확인",
"actions": [
{
"type": "verify",
"target": "data reload for new date"
}
],
"expected": {
"apiCalledWithDate": "2026-01-10",
"dataUpdated": true
}
},
{
"id": "step-20",
"name": "날짜 변경 후 어음 테이블 데이터 확인",
"description": "변경된 날짜의 어음 데이터가 표시되는지 확인",
"actions": [
{
"type": "verify",
"target": "note receivables data for 2026-01-10"
}
],
"expected": {
"dataForDate": "2026-01-10",
"tableUpdated": true
}
},
{
"id": "step-21",
"name": "날짜 변경 후 일자별 상세 테이블 데이터 확인",
"description": "변경된 날짜의 계좌 상세 데이터가 표시되는지 확인",
"actions": [
{
"type": "verify",
"target": "daily accounts data for 2026-01-10"
}
],
"expected": {
"dataForDate": "2026-01-10",
"tableUpdated": true
}
},
{
"id": "step-22",
"name": "날짜를 오늘로 되돌리기",
"description": "날짜 선택 필드를 다시 오늘 날짜(2026-01-15)로 변경",
"actions": [
{
"type": "clear",
"target": "date input"
},
{
"type": "type",
"target": "date input",
"value": "2026-01-15"
},
{
"type": "wait",
"target": "데이터 로드"
}
],
"expected": {
"dateChanged": "2026-01-15",
"dataReloaded": true
}
},
{
"id": "step-23",
"name": "새로고침 버튼 존재 확인",
"description": "새로고침 버튼이 표시되는지 확인",
"actions": [
{
"type": "verify",
"target": "refresh button"
}
],
"expected": {
"buttonExists": true,
"buttonText": "새로고침",
"icon": "RefreshCw"
}
},
{
"id": "step-24",
"name": "새로고침 버튼 클릭",
"description": "새로고침 버튼 클릭하여 데이터 리로드 확인",
"actions": [
{
"type": "click",
"target": "새로고침 버튼"
},
{
"type": "wait",
"target": "데이터 리로드"
}
],
"expected": {
"buttonClicked": true,
"loadingStateShown": true,
"dataReloaded": true
}
},
{
"id": "step-25",
"name": "새로고침 버튼 로딩 상태 확인",
"description": "새로고침 버튼 클릭 시 버튼이 비활성화되고 로딩 스피너가 표시되는지 확인",
"actions": [
{
"type": "verify",
"target": "refresh button loading state"
}
],
"expected": {
"buttonDisabled": true,
"loadingSpinner": "Loader2 spinner",
"iconChanged": "RefreshCw → Loader2"
}
},
{
"id": "step-26",
"name": "새로고침 후 API 호출 확인",
"description": "새로고침 버튼 클릭 후 모든 API가 다시 호출되는지 확인",
"actions": [
{
"type": "verify",
"target": "API calls after refresh"
}
],
"expected": {
"apiCalls": [
"GET /api/v1/daily-report/note-receivables",
"GET /api/v1/daily-report/daily-accounts",
"GET /api/v1/daily-report/summary"
]
}
},
{
"id": "step-27",
"name": "새로고침 후 데이터 표시 확인",
"description": "새로고침 후 두 테이블 모두 데이터가 정상적으로 표시되는지 확인",
"actions": [
{
"type": "verify",
"target": "both tables data after refresh"
}
],
"expected": {
"noteReceivablesTableUpdated": true,
"dailyAccountsTableUpdated": true,
"noError": "에러 없이 정상 동작"
}
},
{
"id": "step-28",
"name": "엑셀 다운로드 버튼 존재 확인",
"description": "엑셀 다운로드 버튼이 표시되는지 확인",
"actions": [
{
"type": "verify",
"target": "excel download button"
}
],
"expected": {
"buttonExists": true,
"buttonText": "엑셀 다운로드",
"icon": "Download"
}
},
{
"id": "step-29",
"name": "엑셀 다운로드 버튼 클릭 전 Network 상태 확인",
"description": "다운로드 전 Network Request 기록",
"actions": [
{
"type": "verify",
"target": "network state before download"
}
],
"expected": {
"networkRecorded": true
}
},
{
"id": "step-30",
"name": "엑셀 다운로드 버튼 클릭",
"description": "엑셀 다운로드 버튼 클릭 후 다운로드 처리 확인",
"actions": [
{
"type": "click",
"target": "엑셀 다운로드 버튼"
},
{
"type": "wait",
"target": "다운로드 처리"
}
],
"expected": {
"buttonClicked": true,
"downloadInitiated": true
}
},
{
"id": "step-31",
"name": "엑셀 다운로드 API 호출 확인",
"description": "다운로드 버튼 클릭 후 Export API가 호출되는지 확인",
"actions": [
{
"type": "verify",
"target": "export API call"
}
],
"expected": {
"apiCall": "GET /api/v1/daily-report/export?date=2026-01-15",
"apiResponse": "200 OK",
"contentType": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
}
},
{
"id": "step-32",
"name": "엑셀 다운로드 이벤트 확인",
"description": "실제 파일 다운로드 이벤트가 발생하는지 확인",
"actions": [
{
"type": "verify",
"target": "download event"
}
],
"expected": {
"downloadEvent": "발생",
"fileFormat": "xlsx 또는 xls",
"filenamePattern": "daily_report_*.xlsx"
}
},
{
"id": "step-33",
"name": "엑셀 다운로드 성공 토스트 확인",
"description": "다운로드 성공 시 토스트 메시지가 표시되는지 확인",
"actions": [
{
"type": "verify",
"target": "success toast message"
}
],
"expected": {
"toastMessage": "엑셀 다운로드가 완료되었습니다.",
"toastType": "success"
}
},
{
"id": "step-34",
"name": "어음 데이터 내용 형식 확인",
"description": "어음 테이블의 '내용' 컬럼 형식이 올바른지 확인",
"actions": [
{
"type": "verify",
"target": "note receivable content format"
}
],
"expected": {
"contentFormat": "(수취어음) 거래처명 - 어음번호",
"exampleFormat": "(수취어음) ABC상사 - N2026-001"
}
},
{
"id": "step-35",
"name": "어음 현재 잔액 표시 확인",
"description": "어음 테이블의 현재 잔액이 올바른 형식으로 표시되는지 확인",
"actions": [
{
"type": "verify",
"target": "current balance format"
}
],
"expected": {
"formatType": "통화 형식 (₩1,000,000)",
"alignment": "right-aligned"
}
},
{
"id": "step-36",
"name": "어음 발행일/만기일 형식 확인",
"description": "날짜 형식이 올바르게 표시되는지 확인",
"actions": [
{
"type": "verify",
"target": "date format in note table"
}
],
"expected": {
"dateFormat": "YYYY-MM-DD 또는 YYYY.MM.DD",
"exampleFormat": "2026-01-15 또는 2026.01.15"
}
},
{
"id": "step-37",
"name": "일자별 상세 구분 컬럼 형식 확인",
"description": "계좌 '구분' 컬럼이 올바른 형식으로 표시되는지 확인",
"actions": [
{
"type": "verify",
"target": "account category format"
}
],
"expected": {
"categoryFormat": "은행명 계좌번호 축약",
"exampleFormat": "국민은행 ***1234"
}
},
{
"id": "step-38",
"name": "일자별 상세 금액 컬럼 정렬 확인",
"description": "전월 이월, 수입, 지출, 잔액 컬럼이 우측 정렬되는지 확인",
"actions": [
{
"type": "verify",
"target": "amount columns alignment"
}
],
"expected": {
"alignment": "right-aligned",
"columns": ["전월 이월", "수입", "지출", "잔액"]
}
},
{
"id": "step-39",
"name": "일자별 상세 금액 형식 확인",
"description": "금액이 통화 형식으로 표시되는지 확인",
"actions": [
{
"type": "verify",
"target": "amount format"
}
],
"expected": {
"formatType": "통화 형식 (₩1,000,000 또는 $1,000.00)",
"thousandsSeparator": "쉼표(,) 사용"
}
},
{
"id": "step-40",
"name": "어음 테이블 빈 데이터 처리 확인",
"description": "어음 데이터가 없을 때 적절한 메시지가 표시되는지 확인",
"actions": [
{
"type": "verify",
"target": "empty state message for note table"
}
],
"expected": {
"emptyMessage": "데이터가 없습니다.",
"messagePosition": "table center"
}
},
{
"id": "step-41",
"name": "일자별 상세 테이블 빈 데이터 처리 확인",
"description": "계좌 데이터가 없을 때 적절한 메시지가 표시되는지 확인",
"actions": [
{
"type": "verify",
"target": "empty state message for daily accounts table"
}
],
"expected": {
"emptyMessage": "데이터가 없습니다.",
"messagePosition": "table center"
}
},
{
"id": "step-42",
"name": "매칭 상태 필터링 확인",
"description": "매칭/비매칭 상태에 따라 데이터가 올바르게 분류되는지 확인",
"actions": [
{
"type": "verify",
"target": "match status filtering"
}
],
"expected": {
"matchedItems": "매칭 Badge 표시",
"unmatchedItems": "비매칭 Badge 표시",
"correctColors": "매칭=green, 비매칭=orange"
}
},
{
"id": "step-43",
"name": "KRW/USD 계좌 분리 확인",
"description": "원화와 외화 계좌가 올바르게 분리되어 표시되는지 확인",
"actions": [
{
"type": "verify",
"target": "currency separation"
}
],
"expected": {
"krwAccountsFirst": "KRW 계좌 먼저 표시",
"usdAccountsAfter": "USD 계좌 나중에 표시",
"separateGroups": "통화별 그룹화"
}
},
{
"id": "step-44",
"name": "외화원(USD) 합계 계산 확인",
"description": "외화원 합계가 USD 계좌만 합산하는지 확인",
"actions": [
{
"type": "verify",
"target": "USD total calculation"
}
],
"expected": {
"includesOnlyUSD": "USD 계좌만 합산",
"excludesKRW": "KRW 계좌 제외",
"correctTotal": "USD 계좌 잔액 합계"
}
},
{
"id": "step-45",
"name": "현금성 자산 합계 계산 확인",
"description": "현금성 자산 합계가 전체 계좌를 합산하는지 확인",
"actions": [
{
"type": "verify",
"target": "cash asset total calculation"
}
],
"expected": {
"includesAllAccounts": "KRW + USD 계좌 전체 합산",
"correctTotal": "전체 계좌 잔액 합계"
}
},
{
"id": "step-46",
"name": "어음 합계 계산 정확성 확인",
"description": "어음 테이블 합계가 현재 잔액의 정확한 합계인지 확인",
"actions": [
{
"type": "verify",
"target": "note receivables total accuracy"
}
],
"expected": {
"correctCalculation": "모든 어음 현재 잔액의 합계",
"matchesData": "개별 행 합계와 일치"
}
},
{
"id": "step-47",
"name": "페이지 반응형 동작 확인",
"description": "브라우저 크기 조절 시 테이블이 올바르게 표시되는지 확인",
"actions": [
{
"type": "verify",
"target": "responsive behavior"
}
],
"expected": {
"tableScrollable": "테이블 스크롤 가능",
"layoutPreserved": "레이아웃 유지"
}
},
{
"id": "step-48",
"name": "날짜 선택 필드 제약 확인",
"description": "날짜 입력 필드에 유효하지 않은 날짜를 입력할 수 없는지 확인",
"actions": [
{
"type": "verify",
"target": "date input validation"
}
],
"expected": {
"inputType": "date",
"validationExists": "브라우저 기본 날짜 검증"
}
},
{
"id": "step-49",
"name": "콘솔 에러 확인",
"description": "페이지 동작 중 콘솔에 에러가 발생하지 않는지 확인",
"actions": [
{
"type": "verify",
"target": "console errors"
}
],
"expected": {
"noErrors": "콘솔 에러 없음",
"warningsAcceptable": "경고는 허용"
}
},
{
"id": "step-50",
"name": "전체 페이지 기능 통합 테스트",
"description": "날짜 변경, 새로고침, 다운로드를 순차적으로 실행하여 모든 기능이 정상 동작하는지 확인",
"actions": [
{
"type": "type",
"target": "date input",
"value": "2026-01-12"
},
{
"type": "wait",
"target": "데이터 로드"
},
{
"type": "click",
"target": "새로고침 버튼"
},
{
"type": "wait",
"target": "데이터 리로드"
},
{
"type": "click",
"target": "엑셀 다운로드 버튼"
},
{
"type": "wait",
"target": "다운로드 완료"
}
],
"expected": {
"allFunctionsWork": "모든 기능 정상 동작",
"dataConsistency": "데이터 일관성 유지",
"noErrors": "에러 없이 완료"
}
}
],
"cleanup": {
"description": "테스트 후 날짜를 오늘로 복원 (필요시)",
"actions": []
},
"notes": [
"날짜 선택에 따른 데이터 필터링 정상 동작 확인",
"두 개의 테이블(어음, 일자별 상세) 모두 데이터 표시 확인",
"KRW/USD 계좌 분리 및 합계 계산 정확성 확인",
"매칭/비매칭 상태 Badge 표시 확인",
"새로고침 버튼 동작 및 로딩 상태 확인",
"엑셀 다운로드는 Network Request 및 실제 다운로드 이벤트 확인 필수",
"모든 금액 표시 형식 및 정렬 확인",
"빈 데이터 처리 및 로딩 상태 표시 확인"
]
}