# UniversalListPage 컴포넌트 통합 작업

> **목표**: 55개 리스트 페이지를 1개의 공통 컴포넌트로 통합
> **시작일**: 2026-01-14
> **원칙**: 기존 기능 100% 유지, 테이블 영역만 공통화
> **상태**: ✅ 전체 완료 (55/55 페이지, 100%)

---

## 📊 페이지 수 산정 (2026-01-16 확정)

### 최종 페이지 수: 55개

| 항목 | 개수 | 설명 |
|------|------|------|
| UniversalListPage 사용 파일 | 62개 | 전체 import 기준 |
| 템플릿 export 파일 | -1개 | `templates/index.ts` (export only) |
| 중복 파일 쌍 | -6개 | wrapper + client 패턴 |
| **실제 페이지 수** | **55개** | |

### 중복 파일 쌍 목록 (6쌍)

동일한 페이지인데 wrapper(index.tsx)와 client 컴포넌트가 분리된 경우:

| # | 페이지 | 파일 1 (wrapper) | 파일 2 (client) |
|---|--------|------------------|-----------------|
| 1 | 거래처관리(회계) | `VendorManagement/index.tsx` | `VendorManagementClient.tsx` |
| 2 | 어음관리 | `BillManagement/index.tsx` | `BillManagementClient.tsx` |
| 3 | 결제내역 | `PaymentHistoryManagement/index.tsx` | `PaymentHistoryClient.tsx` |
| 4 | 카드관리 | `CardManagement/index.tsx` | `CardManagementUnified.tsx` |
| 5 | 게시판목록 | `BoardList/index.tsx` | `BoardListUnified.tsx` |
| 6 | 발주관리 | `OrderManagementListClient.tsx` | `OrderManagementUnified.tsx` |

### 마이그레이션 제외 페이지

| 파일 | 제외 사유 |
|------|----------|
| `construction/projects/ProjectListClient.tsx` | PageLayout 직접 사용 (IntegratedListTemplateV2 미사용) |
| `settings/PermissionManagement/index.tsx` | IntegratedListTemplateV2 미사용 |
| `customer-center/FAQManagement/FAQList.tsx` | IntegratedListTemplateV2 미사용 |
| `pricing/PricingListClient.tsx` (일반) | IntegratedListTemplateV2 미사용 |
| 영업 도메인 3개 | 별도 구조 사용 (추후 검토) |

> **Note**: 수량이 변동되는 원인은 중복 파일(wrapper/client 패턴)과 제외 대상 파일 때문입니다.

---

## 🎯 핵심 목적 (절대 잊지 말 것!)

**이 공통화 작업의 근본적인 목적은 모바일에서 필터를 바텀시트로 보여주기 위함이다.**

### filterConfig 사용 규칙
- `filterConfig`를 사용하면 **자동으로** PC/모바일 분기 처리됨
  - **PC (1280px+)**: 인라인 필터 (테이블 헤더 영역)
  - **모바일 (~1279px)**: 바텀시트 필터 (MobileFilter 컴포넌트)
- **새로운 모바일 필터 기능을 만들지 말 것!** 이미 공통화되어 있음
- 정렬, 상태 필터 등 모든 필터는 `filterConfig`로 정의

### 예시
```typescript
// ✅ 올바른 방식 - filterConfig 사용
filterConfig: [
  {
    key: 'sort',
    label: '정렬',
    type: 'single',
    options: [{ value: 'latest', label: '최신순' }, ...],
  },
],

// ❌ 잘못된 방식 - 별도 모바일 필터 구현
mobileTableHeaderActions: ... // 이런 거 만들지 말 것!
```

---

## 🚨 작업 정책 (필독!)

### 본 페이지 직접 작업 원칙
- **테스트 페이지 생성 금지**: `-test` 접미사 페이지 만들지 말 것
- **feature 브랜치 활용**: 이미 `feature/universal-list-component` 브랜치에서 작업 중
- **본 페이지에 바로 적용**: 마이그레이션은 원본 파일에 직접 수행
- **롤백 가능**: 문제 발생 시 `git checkout` 또는 브랜치 전환으로 복구

### ❌ 삭제된 테스트 페이지 (2026-01-14)
| 삭제된 테스트 페이지 | 본 페이지 |
|---------------------|----------|
| `/board-test/` | `/board/` |
| `/construction/order/order-management-test/` | `/construction/order/order-management/` |
| `/hr/card-management-test/` | `/hr/card-management/` |
| `/customer-center/notices-test/` | `/customer-center/notices/` |

---

## Phase 1: 준비 작업

- [x] Git 브랜치 생성 (`feature/universal-list-component`) ✅
- [x] 기존 IntegratedListTemplateV2 분석 완료 확인 ✅
- [x] 공통 패턴 / 특이 케이스 최종 정리 ✅

---

## Phase 2: 핵심 컴포넌트 구현

### 2.1 타입 정의
- [x] `UniversalListConfig<T>` 인터페이스 정의 ✅
- [x] `TableColumn`, `FilterConfig` 등 공통 타입 정의 ✅
- [x] 특이 케이스용 옵션 타입 정의 (모달, 동적 탭 등) ✅

### 2.2 UniversalListPage 컴포넌트
- [x] 기본 구조 구현 (상태 관리, 핸들러) ✅
- [x] IntegratedListTemplateV2 연동 ✅
- [x] renderTableRow / renderMobileCard 콜백 처리 ✅
- [x] 삭제 AlertDialog 통합 ✅
- [x] 검색/필터/페이지네이션 통합 ✅

### 2.3 특이 케이스 지원
- [x] `detailMode: 'page' | 'modal'` 옵션 ✅
- [x] 동적 탭 지원 (`fetchTabs` 함수 옵션) ✅
- [x] 커스텀 액션 버튼 지원 (`customActions`) ✅
- [x] 문서 미리보기 모달 지원 (`DetailModalComponent`) ✅

---

## Phase 2.5: 공통 옵션화 리팩토링 ✅ 완료

> **목적**: headerActions의 달력/버튼을 config 옵션으로 통합하여 위치/스타일 공통 관리

### 2.5.1 DateRangeSelector 옵션화
- [x] `UniversalListConfig`에 `dateRangeSelector` 옵션 추가 ✅
- [x] IntegratedListTemplateV2에서 달력 렌더링 위치 통합 ✅
- [x] 기존 페이지 headerActions → config 옵션으로 마이그레이션 ✅

```typescript
// config 옵션 정의
dateRangeSelector?: {
  enabled: boolean;
  showPresets?: boolean;  // 당월, 전월, 오늘 등 프리셋 버튼
  startDate?: string;
  endDate?: string;
  onStartDateChange?: (date: string) => void;
  onEndDateChange?: (date: string) => void;
};
```

### 2.5.2 등록 버튼 옵션화
- [x] `UniversalListConfig`에 `createButton` 옵션 추가 ✅
- [x] 버튼 위치 오른쪽 끝 고정 (공통) ✅
- [x] 기존 페이지 headerActions → config 옵션으로 마이그레이션 ✅

```typescript
// config 옵션 정의
createButton?: {
  label: string;           // '등록', '공정 등록' 등
  onClick: () => void;
  icon?: LucideIcon;       // 기본값: Plus
};
```

### 2.5.3 레이아웃 규칙
```
[달력 (왼쪽)] -------------- [등록 버튼 (오른쪽 끝)]
```

### 마이그레이션 완료 파일 (Level 1)
| 파일 | 달력 | 등록버튼 | 상태 |
|-----|------|---------|------|
| InquiryList.tsx | ✅ | ✅ | ✅ 완료 |
| NoticeList.tsx | ✅ | ❌ | ✅ 완료 |
| EventList.tsx | ✅ | ❌ | ✅ 완료 |
| PopupList.tsx | ❌ | ✅ | ✅ 완료 |

> **Note**: 나머지 페이지들은 Level 2+ 마이그레이션 시 적용 예정

---

## Phase 3: 파일럿 마이그레이션

> ⚠️ **2026-01-14 수정**: 이전 세션에서 완료 표시했으나 실제 코드 미적용 확인됨. 파일럿은 건너뛰고 Level 1부터 순차 진행.

- [ ] ~~기본 케이스 - 카드관리(HR)~~ → Level 3으로 이동 (복잡한 상태)
- [ ] ~~특이 케이스 - 게시판목록~~ → Level 4로 이동 (동적 탭)
- [ ] ~~특이 케이스 - 발주관리~~ → Level 2로 이동 (ScheduleCalendar)

### Level 1 마이그레이션 진행 상황 (15/15 완료 ✅)

| # | 파일 | 상태 | 완료일 |
|---|-----|------|--------|
| 1 | `production/WorkOrders/WorkOrderList.tsx` | ✅ 완료 | 2026-01-14 |
| 2 | `production/WorkResults/WorkResultList.tsx` | ✅ 완료 | 2026-01-14 |
| 3 | `outbound/ShipmentManagement/ShipmentList.tsx` | ✅ 완료 | 2026-01-14 |
| 4 | `material/StockStatus/StockStatusList.tsx` | ✅ 완료 | 2026-01-14 |
| 5 | `material/ReceivingManagement/ReceivingList.tsx` | ✅ 완료 | 2026-01-14 |
| 6 | `quality/InspectionManagement/InspectionList.tsx` | ✅ 완료 | 2026-01-14 |
| 7 | `items/ItemListClient.tsx` | ✅ 완료 | 2026-01-14 |
| 8 | `settings/PaymentHistoryManagement/PaymentHistoryClient.tsx` | ✅ 완료 | 2026-01-14 |
| 9 | `settings/PopupManagement/PopupList.tsx` | ✅ 완료 | 2026-01-14 |
| 10 | `customer-center/EventManagement/EventList.tsx` | ✅ 완료 | 2026-01-14 |
| 11 | `customer-center/InquiryManagement/InquiryList.tsx` | ✅ 완료 | 2026-01-14 |
| 12 | `customer-center/NoticeManagement/NoticeList.tsx` | ✅ 완료 | 2026-01-14 |
| 13 | `quotes/QuoteManagementClient.tsx` | ✅ 완료 | 2026-01-14 |
| 14 | `process-management/ProcessListClient.tsx` | ✅ 완료 | 2026-01-14 |
| 15 | `settings/AccountManagement/index.tsx` | ✅ 완료 | 2026-01-14 |

### Level 2 마이그레이션 진행 상황 (건설 17개 + 회계 13개 = 총 30개)

> **Note**: ProjectListClient는 PageLayout 직접 사용 (IntegratedListTemplateV2 미사용)으로 마이그레이션 대상에서 제외

#### 건설 도메인 (17개 대상, 17개 완료 ✅)
| # | 파일 | 특이사항 | 상태 | 완료일 |
|---|-----|---------|------|--------|
| 1 | `construction/estimates/EstimateListClient.tsx` | 거래처(다중), 견적자(다중), 상태, 정렬 | ✅ 완료 | 2026-01-14 |
| 2 | `construction/bidding/BiddingListClient.tsx` | 거래처(다중), 입찰자(다중), 상태, 정렬 | ✅ 완료 | 2026-01-14 |
| 3 | `construction/site-briefings/SiteBriefingListClient.tsx` | 거래처(다중), 타입, 상태, 정렬 | ✅ 완료 | 2026-01-14 |
| 4 | `construction/contract/ContractListClient.tsx` | 거래처(다중), 계약담당자(다중), 공사PM(다중) | ✅ 완료 | 2026-01-14 |
| 5 | `construction/partners/PartnerListClient.tsx` | 탭(전체/신규), 악성채권, 정렬 | ✅ 완료 | 2026-01-14 |
| 6 | `construction/handover-report/HandoverReportListClient.tsx` | 거래처, 계약담당자, 공사PM | ✅ 완료 | 2026-01-15 |
| 7 | `construction/worker-status/WorkerStatusListClient.tsx` | 거래처, 현장, 구분, 부서, 이름 | ✅ 완료 | 2026-01-15 |
| 8 | `construction/utility-management/UtilityManagementListClient.tsx` | 7개 필터, AlertDialog | ✅ 완료 | 2026-01-15 |
| 9 | `construction/progress-billing/ProgressBillingManagementListClient.tsx` | showQuickButtons | ✅ 완료 | 2026-01-15 |
| 10 | `construction/structure-review/StructureReviewListClient.tsx` | AlertDialog, createButton | ✅ 완료 | 2026-01-15 |
| 11 | `construction/site-management/SiteManagementListClient.tsx` | AlertDialog | ✅ 완료 | 2026-01-15 |
| 12 | `construction/pricing-management/PricingListClient.tsx` | **renderCustomTableHeader (동적 컬럼)** | ✅ 완료 | 2026-01-15 |
| 13 | `construction/issue-management/IssueManagementListClient.tsx` | bulkActions (회수 기능) | ✅ 완료 | 2026-01-15 |
| 14 | `construction/order-management/OrderManagementListClient.tsx` | ScheduleCalendar (beforeTableContent) | ✅ 완료 | 2026-01-15 |
| 15 | `construction/management/ConstructionManagementListClient.tsx` | ScheduleCalendar (beforeTableContent) | ✅ 완료 | 2026-01-15 |
| 16 | `construction/labor-management/LaborManagementClient.tsx` | 노무 관리 필터 | ✅ 완료 | 2026-01-15 |
| 17 | `construction/item-management/ItemManagementClient.tsx` | 품목 분류 필터 | ✅ 완료 | 2026-01-15 |

#### 회계 도메인 (13개 대상, 13개 완료 ✅)
| # | 파일 | 특이사항 | 상태 | 완료일 |
|---|-----|---------|------|--------|
| 1 | `accounting/VendorManagement/index.tsx` | 5개 single 필터, Stats 카드 | ✅ 완료 | 2026-01-15 |
| 2 | `accounting/SalesManagement/index.tsx` | Switch, beforeTableContent, tableHeaderActions, tableFooter | ✅ 완료 | 2026-01-15 |
| 3 | `accounting/PurchaseManagement/index.tsx` | Switch, beforeTableContent, tableHeaderActions, tableFooter | ✅ 완료 | 2026-01-15 |
| 4 | `accounting/DepositManagement/index.tsx` | beforeTableContent (새로고침), tableHeaderActions | ✅ 완료 | 2026-01-15 |
| 5 | `accounting/WithdrawalManagement/index.tsx` | 계정과목명 저장, beforeTableContent, tableHeaderActions | ✅ 완료 | 2026-01-15 |
| 6 | `accounting/BillManagement/index.tsx` | 어음관리 필터, RadioGroup | ✅ 완료 | 2026-01-15 |
| 7 | `accounting/BadDebtCollection/index.tsx` | 부실채권 관리, Switch 토글, 3개 필터 | ✅ 완료 | 2026-01-15 |
| 8 | `accounting/BankTransactionInquiry/index.tsx` | 서버사이드 페이지네이션, tableFooter, 3개 필터 | ✅ 완료 | 2026-01-15 |
| 9 | `accounting/CardTransactionInquiry/index.tsx` | 상세 모달, 계정과목명 일괄 저장, 2개 필터 | ✅ 완료 | 2026-01-15 |
| 10 | `accounting/VendorLedger/index.tsx` | 서버사이드 페이지네이션, 엑셀 다운로드, tableFooter | ✅ 완료 | 2026-01-15 |
| 11 | `accounting/ExpectedExpenseManagement/index.tsx` | **매우 복잡** (월별 그룹핑, 폼 다이얼로그, externalPagination/externalSelection) | ✅ 완료 | 2026-01-15 |
| 12 | `accounting/BillManagement/BillManagementClient.tsx` | dateRangeSelector, beforeTableContent (상태+저장+라디오), externalPagination/Selection | ✅ 완료 | 2026-01-15 |
| 13 | `accounting/VendorManagement/VendorManagementClient.tsx` | computeStats, 5개 필터, 클라이언트 필터링, externalPagination/Selection | ✅ 완료 | 2026-01-15 |

---

## 📋 마이그레이션 페이지별 테스트 체크리스트

### 데스크톱 기능 테스트
- [ ] 테이블 렌더링 (데이터 표시, 컬럼 정렬)
- [ ] 행 선택 (체크박스 동작, 선택 카운터)
- [ ] 수정/삭제 버튼 (선택 시 표시, 페이지 이동)
- [ ] 필터 동작 (검색, 필터 적용, 초기화)
- [ ] 페이지네이션 (페이지 이동, 개수 변경)
- [ ] 탭 동작 (탭 전환, 데이터 필터링)

### 📱 모바일 반응형 테스트
> **최소 지원 너비**: 280px (모바일 최소 사이즈 기준)

- [ ] **레이아웃 깨짐 확인**: 280px까지 축소 시 요소 겹침/튀어나감 없음
- [ ] **줄바꿈 정상**: 긴 텍스트 줄바꿈 처리 확인
- [ ] **버튼/뱃지**: 영역 밖으로 튀어나가지 않음
- [ ] **모바일 필터**: 하단에서 슬라이드업 정상 동작
- [ ] **필터 적용/초기화**: 모바일 필터 버튼 정상 작동
- [ ] **모바일 카드 뷰**: renderMobileCard 정상 표시
- [ ] **터치 동작**: 체크박스, 버튼 터치 반응 정상

### 스크린샷 비교
- [ ] 데스크톱: 기존 페이지 vs 마이그레이션 페이지 비교
- [ ] 모바일: 기존 페이지 vs 마이그레이션 페이지 비교

---

## 📊 복잡도별 분류 (마이그레이션 우선순위)

> **통합 후 이점**: 새 기능 추가/버그 수정 시 55개 파일 → **1개 파일**만 수정

### Level 1 (기본) - 15개 ⭐ 1순위
단순 테이블 + 기본 탭 필터만 있는 경우

| 파일 | 설명 |
|-----|------|
| `production/WorkOrders/WorkOrderList.tsx` | 탭 기반 상태 필터링 |
| `production/WorkResults/WorkResultList.tsx` | 기본 리스트 |
| `outbound/ShipmentManagement/ShipmentList.tsx` | 상태별 통계, 탭 필터 |
| `material/StockStatus/StockStatusList.tsx` | 재고 현황 |
| `material/ReceivingManagement/ReceivingList.tsx` | 기본 수입 목록 |
| `quality/InspectionManagement/InspectionList.tsx` | 검사 상태별 탭 |
| `items/ItemListClient.tsx` | 품목 유형별 탭 |
| `settings/PaymentHistoryManagement/PaymentHistoryClient.tsx` | 결제 이력 |
| `settings/PopupManagement/PopupList.tsx` | 팝업 관리 |
| `customer-center/EventManagement/EventList.tsx` | 이벤트 관리 |
| `customer-center/InquiryManagement/InquiryList.tsx` | 문의 관리 |
| `customer-center/NoticeManagement/NoticeList.tsx` | 공지사항 |
| `quotes/QuoteManagementClient.tsx` | 견적 관리 |
| `process-management/ProcessListClient.tsx` | 프로세스 관리 |
| `settings/AccountManagement/index.tsx` | 계정 관리 |

### Level 2 (필터 복잡) - 30개 ⭐ 2순위
FilterFieldConfig 기반 다중 필터, 정렬 옵션 (주류 패턴)

#### 건설 도메인 (17개)
| 파일 | 특이사항 |
|-----|---------|
| `construction/site-briefings/SiteBriefingListClient.tsx` | 거래처(다중), 타입, 상태, 정렬 |
| `construction/estimates/EstimateListClient.tsx` | 거래처(다중), 견적자(다중), 상태, 정렬 |
| `construction/bidding/BiddingListClient.tsx` | 입찰 정보 필터 |
| `construction/contract/ContractListClient.tsx` | 계약 정보 필터 |
| `construction/partners/PartnerListClient.tsx` | 협력업체 필터 |
| `construction/handover-report/HandoverReportListClient.tsx` | 준공 보고 필터 |
| `construction/worker-status/WorkerStatusListClient.tsx` | 근로자 상태 필터 |
| `construction/utility-management/UtilityManagementListClient.tsx` | 유틸리티 관리 필터 |
| `construction/progress-billing/ProgressBillingManagementListClient.tsx` | 기성 청구 필터 |
| `construction/structure-review/StructureReviewListClient.tsx` | 구조 검토 필터 |
| `construction/site-management/SiteManagementListClient.tsx` | 현장 정보 필터 |
| `construction/pricing-management/PricingListClient.tsx` | **동적 컬럼 (renderCustomTableHeader)** |
| `construction/issue-management/IssueManagementListClient.tsx` | 거래처, 현장, 구분, 중요도, 상태 |
| `construction/order-management/OrderManagementListClient.tsx` | ScheduleCalendar (beforeTableContent) |
| `construction/management/ConstructionManagementListClient.tsx` | ScheduleCalendar (beforeTableContent) |
| `construction/labor-management/LaborManagementClient.tsx` | 노무 관리 필터 |
| `construction/item-management/ItemManagementClient.tsx` | 품목 분류 필터 |

#### 회계 도메인 (13개)
| 파일 | 특이사항 |
|-----|---------|
| `accounting/VendorManagement/VendorManagementClient.tsx` | 거래처 분류(다중), 신용등급, 거래등급 |
| `accounting/VendorManagement/index.tsx` | VendorManagementClient wrapper |
| `accounting/PurchaseManagement/index.tsx` | 구매 관리 필터 |
| `accounting/SalesManagement/index.tsx` | 판매 관리 필터 |
| `accounting/DepositManagement/index.tsx` | 입금 관리 필터 |
| `accounting/WithdrawalManagement/index.tsx` | 출금 관리 필터 |
| `accounting/BadDebtCollection/index.tsx` | 부실채권 관리 필터 |
| `accounting/ExpectedExpenseManagement/index.tsx` | 예상 지출 관리 필터 |
| `accounting/BillManagement/index.tsx` | 청구서 관리 wrapper |
| `accounting/BillManagement/BillManagementClient.tsx` | 청구서 관리 필터 |
| `accounting/BankTransactionInquiry/index.tsx` | 입출금계좌조회 |
| `accounting/CardTransactionInquiry/index.tsx` | 카드내역조회 |
| `accounting/VendorLedger/index.tsx` | 거래처원장 |

### Level 3~5 마이그레이션 (2026-01-15) ✅ 완료

> **결론 변경**: Level 3~5 컴포넌트(10개)도 **UniversalListPage로 마이그레이션 진행**
> **이유**: 장기적 유지보수 및 모바일 대응 일원화를 위해 모든 리스트 페이지 통합

#### Phase 3-1: UniversalListPage 기능 확장 ✅ 완료

| 기능 | 설명 | 상태 |
|------|------|------|
| `renderDialogs` | 커스텀 다이얼로그 슬롯 | [x] 완료 |
| `dynamicHeaderActions` | 선택 상태 기반 동적 헤더 액션 | [x] 완료 (tableHeaderActions에 selectedItems 전달) |
| `fetchTabs` | API 기반 동적 탭 생성 | [x] 완료 (이미 구현되어 있었음) |
| `columnsPerTab` | 탭별 다른 컬럼 구조 지원 | [x] 완료 |
| `extraFilters` | 추가 필터 슬롯 | [x] 완료 (이미 구현되어 있었음) |

#### Phase 3-2: 게시판 도메인 마이그레이션 (2개) ✅ 완료

| # | 파일 | 특이사항 | 상태 |
|---|------|---------|------|
| 1 | `board/BoardManagement/index.tsx` | AlertDialog + 선택 기반 수정/삭제 | [x] 완료 |
| 2 | `board/BoardList/index.tsx` | API 동적 탭 (fetchTabs) + 서버사이드 페이지네이션 | [x] 완료 |

#### Phase 3-3: 전자결재 도메인 마이그레이션 (3개) ✅ 완료

| # | 파일 | 특이사항 | 상태 |
|---|------|---------|------|
| 1 | `approval/DraftBox/index.tsx` | DocumentDetailModal + 상신/삭제 + 동적 헤더 | [x] 완료 |
| 2 | `approval/ApprovalBox/index.tsx` | DocumentDetailModal + 승인/반려 다이얼로그 | [x] 완료 |
| 3 | `approval/ReferenceBox/index.tsx` | DocumentDetailModal + 열람/미열람 처리 | [x] 완료 |

#### Phase 3-4: HR 도메인 마이그레이션 (5개) ✅ 완료

| # | 파일 | 특이사항 | 상태 |
|---|------|---------|------|
| 1 | `hr/CardManagement/index.tsx` | 3개 탭 + AlertDialog (가장 단순) | [x] 완료 |
| 2 | `hr/SalaryManagement/index.tsx` | SalaryDetailDialog + 선택 기반 동적 버튼 | [x] 완료 |
| 3 | `hr/AttendanceManagement/index.tsx` | 9개 탭 + 2개 다이얼로그 + extraFilters | [x] 완료 |
| 4 | `hr/EmployeeManagement/index.tsx` | 4개 탭 + 복수 다이얼로그 + DateRangeSelector | [x] 완료 |
| 5 | `hr/VacationManagement/index.tsx` | 3개 탭(탭별 상이한 컬럼) + 4개 다이얼로그 | [x] 완료 |

### 최종 분류 통계 ✅ 완료

| 레벨 | 개수 | 상태 | 비고 |
|-----|-----|------|-----|
| Level 1 (기본) | 15개 | ✅ 완료 | UniversalListPage 마이그레이션 |
| Level 2 (필터) | 30개 | ✅ 완료 | UniversalListPage 마이그레이션 |
| Level 3~5 (복잡) | 10개 | ✅ 완료 | UniversalListPage 마이그레이션 |
| **합계** | **55개** | ✅ **완료** | **전체 통합 완료!** |

---

## Phase 4: 도메인별 마이그레이션

### 4.1 건설 도메인 (18개)
- [ ] 현장설명회관리 (SiteBriefingListClient)
- [ ] 견적관리 (EstimateListClient)
- [ ] 입찰관리 (BiddingListClient)
- [ ] 계약관리 (ContractListClient)
- [ ] 인수인계보고서 (HandoverReportListClient)
- [ ] 현장관리 (SiteManagementListClient)
- [ ] 구조검토관리 (StructureReviewListClient)
- [ ] 이슈관리 (IssueManagementListClient)
- [ ] 작업인력현황 (WorkerStatusListClient)
- [ ] 품목관리 (ItemManagementClient)
- [ ] 단가관리 (PricingListClient)
- [ ] 노임관리 (LaborManagementClient)
- [ ] 발주관리 (OrderManagementListClient)
- [ ] 기성청구관리 (ProgressBillingManagementListClient)
- [ ] 공과관리 (UtilityManagementListClient)
- [ ] 시공관리 (ConstructionManagementListClient)
- [ ] 거래처관리 (PartnerListClient)
- [ ] 프로젝트관리 (ProjectListClient)

### 4.2 HR 도메인 (5개)
- [ ] 급여관리 (SalaryManagement)
- [ ] 사원관리 (EmployeeManagement)
- [ ] 휴가관리 (VacationManagement)
- [ ] 근태관리 (AttendanceManagement)
- [ ] 카드관리 (CardManagement)

### 4.3 회계 도메인 (11개)
- [ ] 거래처관리 (VendorManagement)
- [ ] 매입관리 (PurchaseManagement)
- [ ] 매출관리 (SalesManagement)
- [ ] 입금관리 (DepositManagement)
- [ ] 출금관리 (WithdrawalManagement)
- [ ] 어음관리 (BillManagement)
- [ ] 거래처원장 (VendorLedger)
- [ ] 지출예상내역서 (ExpectedExpenseManagement)
- [ ] 입출금계좌조회 (BankTransactionInquiry)
- [ ] 카드내역조회 (CardTransactionInquiry)
- [ ] 악성채권추심 (BadDebtCollection)

### 4.4 생산/자재/품질/출고 도메인 (6개)
- [ ] 작업지시관리 (WorkOrderList)
- [ ] 작업실적조회 (WorkResultList)
- [ ] 재고현황 (StockStatusList)
- [ ] 입고관리 (ReceivingList)
- [ ] 검사관리 (InspectionList)
- [ ] 출하관리 (ShipmentList)

### 4.5 전자결재 도메인 (3개) ⚠️ 특이 케이스
- [ ] 기안함 (DraftBox) - 문서 미리보기 모달 + 상신
- [ ] 결재함 (ApprovalBox) - 문서 미리보기 모달 + 승인/반려
- [ ] 참조함 (ReferenceBox) - 문서 미리보기 모달 + 읽음/안읽음

### 4.6 설정 도메인 (4개)
- [ ] 계좌관리 (AccountManagement)
- [ ] 팝업관리 (PopupList)
- [ ] 결제내역 (PaymentHistoryManagement)
- [ ] 권한관리 (PermissionManagement)

### 4.7 영업 도메인 (3개) 🆕
- [ ] 수주관리 (order-management-sales/page.tsx)
- [ ] 생산발주 (order-management-sales/production-orders/page.tsx)
- [ ] 거래처관리-영업 (client-management-sales-admin/page.tsx)

### 4.8 기타 도메인 (9개)
- [ ] 품목기준관리 (ItemListClient)
- [ ] 견적관리 (QuoteManagementClient)
- [ ] 단가관리-일반 (PricingListClient)
- [ ] 공정관리 (ProcessListClient)
- [ ] 게시판목록 (BoardList) ⚠️ 동적 탭
- [ ] 게시판관리 (BoardManagement)
- [ ] 공지사항 (NoticeList)
- [ ] 이벤트 (EventList)
- [ ] 1:1문의 (InquiryList)

---

## Phase 5: 최종 검증 (QA 체크리스트)

### QA 검수 기준
- ✅ **PC**: 테이블 렌더링, 필터, 페이지네이션, 행 선택, 수정/삭제
- ✅ **모바일**: 카드 뷰, 바텀시트 필터, 터치 동작
- ✅ **공통**: API 연동, 데이터 표시, 에러 처리

---

### Level 1 - 기본 페이지 (15개) ✅ QA 완료

| # | 페이지 | 경로 | PC | 모바일 | 비고 |
|---|--------|------|:--:|:------:|------|
| 1 | 작업지시관리 | `/production/work-orders` | [x] | [x] | |
| 2 | 작업실적조회 | `/production/work-results` | [x] | [x] | |
| 3 | 출하관리 | `/outbound/shipment` | [x] | [x] | |
| 4 | 재고현황 | `/material/stock-status` | [x] | [x] | |
| 5 | 입고관리 | `/material/receiving` | [x] | [x] | |
| 6 | 검사관리 | `/quality/inspection` | [x] | [x] | |
| 7 | 품목기준관리 | `/items` | [x] | [x] | |
| 8 | 결제내역 | `/settings/payment-history` | [x] | [x] | |
| 9 | 팝업관리 | `/settings/popup` | [x] | [x] | |
| 10 | 이벤트관리 | `/customer-center/events` | [x] | [x] | 모바일 탭 이슈 해결 완료 |
| 11 | 1:1문의 | `/customer-center/inquiries` | [x] | [x] | 필터 동작 검증 완료 |
| 12 | 공지사항 | `/customer-center/notices` | [x] | [x] | |
| 13 | 견적관리 | `/quotes` | [x] | [x] | |
| 14 | 공정관리 | `/process-management` | [x] | [x] | |
| 15 | 계좌관리 | `/settings/accounts` | [x] | [x] | |

---

### Level 2 - 건설 도메인 (17개) ✅ QA 완료

| # | 페이지 | 경로 | PC | 모바일 | 비고 |
|---|--------|------|:--:|:------:|------|
| 1 | 견적관리 | `/construction/estimates` | [x] | [x] | |
| 2 | 입찰관리 | `/construction/bidding` | [x] | [x] | |
| 3 | 현장설명회 | `/construction/site-briefings` | [x] | [x] | |
| 4 | 계약관리 | `/construction/contracts` | [x] | [x] | |
| 5 | 협력업체 | `/construction/partners` | [x] | [x] | |
| 6 | 인수인계보고서 | `/construction/handover-report` | [x] | [x] | |
| 7 | 작업인력현황 | `/construction/worker-status` | [x] | [x] | |
| 8 | 공과관리 | `/construction/utility` | [x] | [x] | |
| 9 | 기성청구관리 | `/construction/progress-billing` | [x] | [x] | |
| 10 | 구조검토관리 | `/construction/structure-review` | [x] | [x] | |
| 11 | 현장관리 | `/construction/sites` | [x] | [x] | |
| 12 | 단가관리 | `/construction/pricing` | [x] | [x] | 동적 컬럼 |
| 13 | 이슈관리 | `/construction/issues` | [x] | [x] | |
| 14 | 발주관리 | `/construction/order/order-management` | [x] | [x] | ScheduleCalendar |
| 15 | 시공관리 | `/construction/management` | [x] | [x] | ScheduleCalendar |
| 16 | 노임관리 | `/construction/labor` | [x] | [x] | |
| 17 | 품목관리 | `/construction/items` | [x] | [x] | |

---

### Level 2 - 회계 도메인 (13개) ✅ QA 완료

| # | 페이지 | 경로 | PC | 모바일 | 비고 |
|---|--------|------|:--:|:------:|------|
| 1 | 거래처관리 | `/accounting/vendors` | [x] | [x] | |
| 2 | 매출관리 | `/accounting/sales` | [x] | [x] | filterConfig 추가 |
| 3 | 매입관리 | `/accounting/purchases` | [x] | [x] | filterConfig 추가 |
| 4 | 입금관리 | `/accounting/deposits` | [x] | [x] | |
| 5 | 출금관리 | `/accounting/withdrawals` | [x] | [x] | |
| 6 | 어음관리 | `/accounting/bills` | [x] | [x] | |
| 7 | 악성채권추심 | `/accounting/bad-debt` | [x] | [x] | filterConfig 추가 |
| 8 | 입출금계좌조회 | `/accounting/bank-transactions` | [x] | [x] | filterConfig 추가 |
| 9 | 카드내역조회 | `/accounting/card-transactions` | [x] | [x] | |
| 10 | 거래처원장 | `/accounting/vendor-ledger` | [x] | [x] | |
| 11 | 지출예상내역서 | `/accounting/expected-expenses` | [x] | [x] | |
| 12 | 어음관리Client | `/accounting/bills` | [x] | [x] | |
| 13 | 거래처관리Client | `/accounting/vendors` | [x] | [x] | |

---

### Level 3~5 - 복잡 페이지 (10개) ✅ QA 완료

| # | 페이지 | 경로 | PC | 모바일 | 비고 |
|---|--------|------|:--:|:------:|------|
| 1 | 게시판관리 | `/board/management` | [x] | [x] | |
| 2 | 게시판목록 | `/board` | [x] | [x] | 동적 탭 |
| 3 | 기안함 | `/approval/draft` | [x] | [x] | 문서 모달, 모바일 필터 추가 |
| 4 | 결재함 | `/approval/approval` | [x] | [x] | 승인/반려, 모바일 필터 추가 |
| 5 | 참조함 | `/approval/reference` | [x] | [x] | 모바일 필터 추가 |
| 6 | 카드관리 | `/hr/card-management` | [x] | [x] | 탭 필터만 (PC필터 없음) |
| 7 | 급여관리 | `/hr/salary-management` | [x] | [x] | 정렬 필터 |
| 8 | 근태관리 | `/hr/attendance-management` | [x] | [x] | 9개 탭, 필터+정렬 |
| 9 | 사원관리 | `/hr/employee-management` | [x] | [x] | 필터+정렬 |
| 10 | 휴가관리 | `/hr/vacation-management` | [x] | [x] | 필터+정렬 |

---

### QA 진행 현황

| 레벨 | 전체 | PC 완료 | 모바일 완료 | 진행률 |
|-----|-----|---------|------------|--------|
| Level 1 | 15 | 15 | 15 | **100%** ✅ |
| Level 2 건설 | 17 | 17 | 17 | **100%** ✅ |
| Level 2 회계 | 13 | 13 | 13 | **100%** ✅ |
| Level 3~5 | 10 | 10 | 10 | **100%** ✅ |
| **합계** | **55** | **55** | **55** | **100%** ✅ |

### 🚨 알려진 이슈

| 이슈 | 영향 범위 | 상태 | 비고 |
|------|----------|------|------|
| 모바일 탭 미표시 | 탭 사용 페이지 전체 | ✅ 해결 완료 | IntegratedListTemplateV2 수정 (hidden → block) |

---

## Phase 6: 다음 개선 사항 (Next Steps)

### 6.1 모바일 인피니티 스크롤 (Infinite Scroll)

> **목적**: 모바일 카드 뷰에서 페이지네이션 대신 무한 스크롤로 UX 개선

#### 구현 계획

**config 옵션 추가**:
```typescript
// UniversalListConfig에 추가
infiniteScroll?: {
  enabled: boolean;
  mobileOnly?: boolean;  // 모바일에서만 적용 (기본: true)
  pageSize?: number;     // 한 번에 로드할 개수 (기본: 20)
  threshold?: number;    // 트리거 위치 (기본: 0.8 = 80% 스크롤)
};
```

**동작 방식**:
```
모바일 + infiniteScroll.enabled?
  ├─ Yes → 페이지네이션 숨김 + IntersectionObserver로 무한스크롤
  └─ No → 기존 페이지네이션 유지
```

**기술 스택**:
- `IntersectionObserver` (네이티브) 또는 `react-intersection-observer`
- 스크롤 80% 도달 시 다음 pageSize개 로드
- 로딩 스피너 표시 → 데이터 append → 스피너 제거

**적용 효과**:
- config 한 줄 추가로 55개 페이지 자동 적용
- PC는 기존 페이지네이션 유지
- 모바일만 무한스크롤 적용

#### 구현 체크리스트
- [ ] `IntersectionObserver` 훅 구현 (`useInfiniteScroll`)
- [ ] `UniversalListConfig`에 `infiniteScroll` 옵션 추가
- [ ] `IntegratedListTemplateV2`에 무한스크롤 로직 추가
- [ ] 모바일 감지 시 페이지네이션 → 무한스크롤 전환
- [ ] 로딩 스피너 컴포넌트 추가
- [ ] 파일럿 페이지 테스트
- [ ] 전체 페이지 적용

---

## 특이 케이스 정리

| 페이지 | 특이점 | 처리 방안 |
|--------|--------|----------|
| DraftBox | 문서 미리보기 모달 + 상신 | `detailMode: 'modal'` + `customActions` |
| ApprovalBox | 문서 미리보기 모달 + 승인/반려 | `detailMode: 'modal'` + `customActions` |
| ReferenceBox | 문서 미리보기 모달 + 읽음 처리 | `detailMode: 'modal'` + `customActions` |
| BoardList | 동적 탭 (API 기반) | `tabs: () => Promise<Tab[]>` |

---

## 변경 이력

| 날짜 | 작업 내용 |
|------|----------|
| 2026-01-14 | 체크리스트 문서 생성, 작업 시작 |
| 2026-01-14 | 영업 도메인 3개 발견 (마이그레이션 대상 검토 필요) |
| 2026-01-14 | ~~파일럿 3개 완료~~ → **실제 미적용 확인됨** |
| 2026-01-14 | 복잡도별 분류 완료 (Level 1~5, 55개 파일) |
| 2026-01-14 | 모바일 반응형 테스트 체크리스트 추가 |
| 2026-01-14 | "본 페이지 직접 작업" 정책 추가, 테스트 페이지 4개 삭제 |
| 2026-01-14 | Level 1: NoticeList, PopupList, EventList, InquiryList 마이그레이션 완료 (4/15) |
| 2026-01-14 | **체크리스트 정합성 수정** - 파일럿 3개 미완료 확인, Level 1 진행 상황 테이블 추가 |
| 2026-01-14 | Level 1 마이그레이션 진행: WorkOrderList, WorkResultList, ShipmentList, StockStatusList, ReceivingList, InspectionList 완료 (6개) |
| 2026-01-14 | Level 1 마이그레이션 진행: ItemListClient, PaymentHistoryClient, AccountManagement 완료 (3개 추가, 총 13/15) |
| 2026-01-14 | **Level 1 완료!** QuoteManagementClient, ProcessListClient 마이그레이션 완료 (15/15) |
| 2026-01-14 | Level 1 검수: 탭 기본값(ShipmentList, StockStatusList), optional chaining(UniversalListPage), 필터 중복(InquiryList), "총 N건" 위치 수정 |
| 2026-01-14 | **Phase 2.5 추가**: 달력/버튼 공통 옵션화 리팩토링 계획 문서화 |
| 2026-01-14 | **Phase 2.5 완료**: dateRangeSelector/createButton config 옵션 구현, Level 1 페이지 4개 마이그레이션 (InquiryList, NoticeList, EventList, PopupList) |
| 2026-01-14 | **Level 2 시작**: 건설 도메인 5개 완료 (EstimateListClient, BiddingListClient, SiteBriefingListClient, ContractListClient, PartnerListClient) |
| 2026-01-14 | ProjectListClient 제외 (PageLayout 직접 사용, IntegratedListTemplateV2 미사용) |
| 2026-01-15 | 건설 도메인 6개 추가 완료 (HandoverReport, WorkerStatus, Utility, ProgressBilling, StructureReview, SiteManagement) |
| 2026-01-15 | **UniversalListPage에 renderCustomTableHeader 지원 추가** (동적 컬럼용) |
| 2026-01-15 | 건설 도메인 6개 추가 완료 (PricingList, IssueManagement, OrderManagement, ConstructionManagement, LaborManagement, ItemManagement) |
| 2026-01-15 | **건설 도메인 17개 모두 완료!** ✅ |
| 2026-01-15 | 회계 도메인 5개 완료 (VendorManagement, SalesManagement, PurchaseManagement, DepositManagement, WithdrawalManagement) |
| 2026-01-15 | 회계 도메인 6개 추가 완료 (BillManagement, BadDebtCollection, BankTransactionInquiry, CardTransactionInquiry, VendorLedger, ExpectedExpenseManagement) |
| 2026-01-15 | **UniversalListPage에 externalPagination, externalSelection 지원 추가** (복잡한 외부 상태 관리용) |
| 2026-01-15 | 회계 도메인 11/13 완료 (남은 2개: BillManagementClient, VendorManagementClient 확인 필요) |
| 2026-01-15 | **회계 도메인 13/13 완료!** ✅ BillManagementClient, VendorManagementClient 마이그레이션 완료 |
| 2026-01-15 | **Level 3~5 분석 완료** - 전자결재(3), HR(5), 게시판(2) 총 10개 파일 분석 |
| 2026-01-15 | **마이그레이션 최종 결론 변경**: Level 3~5도 UniversalListPage로 마이그레이션 진행 결정 |
| 2026-01-15 | **Phase 3-1 완료**: UniversalListPage 기능 확장 (renderDialogs, headerActions with selectedItems) |
| 2026-01-15 | **Phase 3-2 완료**: 게시판 도메인 마이그레이션 2개 (BoardManagement, BoardList) |
| 2026-01-15 | **Phase 3-3 완료**: 전자결재 도메인 마이그레이션 3개 (DraftBox, ApprovalBox, ReferenceBox) |
| 2026-01-15 | **Phase 3-4 완료**: HR 도메인 마이그레이션 5개 (CardManagement, SalaryManagement, AttendanceManagement, EmployeeManagement, VacationManagement) |
| 2026-01-15 | **🎉 프로젝트 완료!** Level 1~5 (55개) 전체 마이그레이션 완료 |
| 2026-01-15 | **Level 1 QA 완료!** 15개 페이지 PC/모바일 검수, 이벤트관리 모바일 탭 이슈 발견 (공통 수정 예정) |
| 2026-01-15 | **Level 2 건설 QA 완료!** 17개 페이지 PC/모바일 검수 완료 |
| 2026-01-15 | **Level 2 회계 모바일 필터 추가!** 매출관리, 매입관리, 악성채권추심, 은행거래조회 4개 페이지 |
| 2026-01-15 | **결재 도메인 모바일 필터 추가!** 기안함, 결재함, 참조함 3개 페이지에 filterConfig + onFilterChange 추가 |
| 2026-01-15 | **Level 3~5 QA 완료!** HR 도메인 5개 페이지 (카드/급여/근태/사원/휴가) 전체 검수 완료 |
| 2026-01-15 | **🎉 전체 QA 완료!** 55개 페이지 PC/모바일 검수 100% 완료 |
| 2026-01-16 | **📊 페이지 수 최종 확정!** 62개 파일 중 중복(6쌍) 및 제외 대상 정리 → 55개 페이지 확정 |
| 2026-01-16 | **Phase 5 기능 검수 시작** - 수동 QA 진행, 오류 발견 및 수정 |
| 2026-01-16 | **휴가관리 탭 카운트 수정** - config.tabs 변경 감지 useEffect 추가 (UniversalListPage) |
| 2026-01-16 | **휴가관리 기능 검증** - 휴가신청/승인/거절 버튼 정상 동작 확인 |
| 2026-01-16 | **휴가관리 승인/거절 건수 표시 수정** - handleApproveClick/handleRejectClick에서 selected를 내부 state로 복사 |

---

## 백업 스크린샷 위치

| 폴더 | 개수 | 설명 |
|------|------|------|
| `~/Desktop/test-urls_리스트 게시판 스샷/` | 34개 | 일반 도메인 |
| `~/Desktop/construction-test-urls_리스트 게시판 스샷/` | 18개 | 건설 도메인 |
| `~/Desktop/추가_리스트_스샷/` | 7개 | 누락 페이지 |
| **합계** | **59개** | 스크린샷 기준 (제외 대상 포함) |

> **Note**: 스크린샷은 59개지만, 실제 마이그레이션 대상 페이지는 55개입니다. (제외 대상 4개, 중복 제거)

---

## 🔍 Phase 5: 전체 기능 검수 (2026-01-16)

> **목적**: UniversalListPage 적용 후 모든 핵심 기능 정상 동작 확인
> **검수 항목**: 검색 / 탭 / 필터 / 체크박스 / 상세이동 / 등록버튼

### 검수 항목 설명
| 항목 | 설명 |
|------|------|
| 🔍 검색 | 검색창 입력 후 필터링 동작 |
| 📑 탭 | 탭 버튼 클릭 시 데이터 전환 |
| 🎛️ 필터 | 필터 선택/적용/초기화 동작 |
| ☑️ 체크박스 | 테이블 행 체크박스 선택 동작 |
| 👁️ 상세 | 테이블 로우 클릭 → 상세페이지/모달 이동 |
| ➕ 등록 | 등록 버튼 클릭 → 등록페이지 이동 |

### HR 도메인 (5개)
| # | 페이지 | URL | 🔍 검색 | 📑 탭 | 🎛️ 필터 | ☑️ 체크 | 👁️ 상세 | ➕ 등록 | 상태 |
|---|--------|-----|---------|-------|---------|---------|---------|---------|------|
| 1 | 사원관리 | `/hr/employee-management` | [ ] | [ ] | [ ] | [ ] | [ ] | [ ] | 🔄 |
| 2 | 카드관리 | `/hr/card-management` | [ ] | [ ] | [ ] | [ ] | [ ] | [ ] | 🔄 |
| 3 | 근태관리 | `/hr/attendance-management` | [ ] | [ ] | [ ] | [ ] | [ ] | [ ] | 🔄 |
| 4 | 급여관리 | `/hr/salary-management` | [ ] | [ ] | [ ] | [ ] | [ ] | [ ] | 🔄 |
| 5 | 휴가관리 | `/hr/vacation-management` | [ ] | [ ] | [ ] | [ ] | [ ] | [ ] | 🔄 |

### 전자결재 도메인 (3개)
| # | 페이지 | URL | 🔍 검색 | 📑 탭 | 🎛️ 필터 | ☑️ 체크 | 👁️ 상세 | ➕ 등록 | 상태 |
|---|--------|-----|---------|-------|---------|---------|---------|---------|------|
| 1 | 기안함 | `/approval/draft-box` | [ ] | [ ] | [ ] | [ ] | [ ] | N/A | 🔄 |
| 2 | 결재함 | `/approval/approval-box` | [ ] | [ ] | [ ] | [ ] | [ ] | N/A | 🔄 |
| 3 | 참조함 | `/approval/reference-box` | [ ] | [ ] | [ ] | [ ] | [ ] | N/A | 🔄 |

### 게시판 도메인 (2개)
| # | 페이지 | URL | 🔍 검색 | 📑 탭 | 🎛️ 필터 | ☑️ 체크 | 👁️ 상세 | ➕ 등록 | 상태 |
|---|--------|-----|---------|-------|---------|---------|---------|---------|------|
| 1 | 게시판관리 | `/settings/board-management` | [ ] | [ ] | [ ] | [ ] | [ ] | [ ] | 🔄 |
| 2 | 게시판목록 | `/boards/[boardCode]` | [ ] | [ ] | [ ] | [ ] | [ ] | [ ] | 🔄 |

### 건설 도메인 (17개)
| # | 페이지 | URL | 🔍 검색 | 📑 탭 | 🎛️ 필터 | ☑️ 체크 | 👁️ 상세 | ➕ 등록 | 상태 |
|---|--------|-----|---------|-------|---------|---------|---------|---------|------|
| 1 | 견적관리 | `/construction/estimates` | [ ] | [ ] | [ ] | [ ] | [ ] | [ ] | 🔄 |
| 2 | 입찰관리 | `/construction/bidding` | [ ] | [ ] | [ ] | [ ] | [ ] | [ ] | 🔄 |
| 3 | 현장설명회 | `/construction/site-briefings` | [ ] | [ ] | [ ] | [ ] | [ ] | [ ] | 🔄 |
| 4 | 계약관리 | `/construction/contracts` | [ ] | [ ] | [ ] | [ ] | [ ] | [ ] | 🔄 |
| 5 | 협력업체 | `/construction/partners` | [ ] | [ ] | [ ] | [ ] | [ ] | [ ] | 🔄 |
| 6 | 준공보고 | `/construction/handover-reports` | [ ] | [ ] | [ ] | [ ] | [ ] | [ ] | 🔄 |
| 7 | 근로자현황 | `/construction/worker-status` | [ ] | [ ] | [ ] | [ ] | [ ] | [ ] | 🔄 |
| 8 | 유틸리티관리 | `/construction/utility-management` | [ ] | [ ] | [ ] | [ ] | [ ] | [ ] | 🔄 |
| 9 | 기성관리 | `/construction/progress-billing` | [ ] | [ ] | [ ] | [ ] | [ ] | [ ] | 🔄 |
| 10 | 구조검토 | `/construction/structure-review` | [ ] | [ ] | [ ] | [ ] | [ ] | [ ] | 🔄 |
| 11 | 현장관리 | `/construction/sites` | [ ] | [ ] | [ ] | [ ] | [ ] | [ ] | 🔄 |
| 12 | 단가관리 | `/construction/pricing` | [ ] | [ ] | [ ] | [ ] | [ ] | [ ] | 🔄 |
| 13 | 이슈관리 | `/construction/issues` | [ ] | [ ] | [ ] | [ ] | [ ] | [ ] | 🔄 |
| 14 | 발주관리 | `/construction/order-management` | [ ] | [ ] | [ ] | [ ] | [ ] | [ ] | 🔄 |
| 15 | 공사관리 | `/construction/management` | [ ] | [ ] | [ ] | [ ] | [ ] | [ ] | 🔄 |
| 16 | 노무관리 | `/construction/labor-management` | [ ] | [ ] | [ ] | [ ] | [ ] | [ ] | 🔄 |
| 17 | 품목관리 | `/construction/item-management` | [ ] | [ ] | [ ] | [ ] | [ ] | [ ] | 🔄 |

### 회계 도메인 (13개)
| # | 페이지 | URL | 🔍 검색 | 📑 탭 | 🎛️ 필터 | ☑️ 체크 | 👁️ 상세 | ➕ 등록 | 상태 |
|---|--------|-----|---------|-------|---------|---------|---------|---------|------|
| 1 | 거래처관리 | `/accounting/vendor-management` | [ ] | [ ] | [ ] | [ ] | [ ] | [ ] | 🔄 |
| 2 | 매출관리 | `/accounting/sales-management` | [ ] | [ ] | [ ] | [ ] | [ ] | [ ] | 🔄 |
| 3 | 매입관리 | `/accounting/purchase-management` | [ ] | [ ] | [ ] | [ ] | [ ] | [ ] | 🔄 |
| 4 | 입금관리 | `/accounting/deposit-management` | [ ] | [ ] | [ ] | [ ] | [ ] | [ ] | 🔄 |
| 5 | 출금관리 | `/accounting/withdrawal-management` | [ ] | [ ] | [ ] | [ ] | [ ] | [ ] | 🔄 |
| 6 | 어음관리 | `/accounting/bill-management` | [ ] | [ ] | [ ] | [ ] | [ ] | [ ] | 🔄 |
| 7 | 부실채권 | `/accounting/bad-debt-collection` | [ ] | [ ] | [ ] | [ ] | [ ] | [ ] | 🔄 |
| 8 | 입출금조회 | `/accounting/bank-transactions` | [ ] | [ ] | [ ] | [ ] | [ ] | N/A | 🔄 |
| 9 | 카드조회 | `/accounting/card-transactions` | [ ] | [ ] | [ ] | [ ] | [ ] | N/A | 🔄 |
| 10 | 거래처원장 | `/accounting/vendor-ledger` | [ ] | [ ] | [ ] | [ ] | [ ] | N/A | 🔄 |
| 11 | 예상지출 | `/accounting/expected-expenses` | [ ] | [ ] | [ ] | [ ] | [ ] | [ ] | 🔄 |

### 기타 도메인 (15개)
| # | 페이지 | URL | 🔍 검색 | 📑 탭 | 🎛️ 필터 | ☑️ 체크 | 👁️ 상세 | ➕ 등록 | 상태 |
|---|--------|-----|---------|-------|---------|---------|---------|---------|------|
| 1 | 작업지시 | `/production/work-orders` | [ ] | [ ] | [ ] | [ ] | [ ] | [ ] | 🔄 |
| 2 | 작업실적 | `/production/work-results` | [ ] | [ ] | [ ] | [ ] | [ ] | [ ] | 🔄 |
| 3 | 출하관리 | `/outbound/shipment-management` | [ ] | [ ] | [ ] | [ ] | [ ] | [ ] | 🔄 |
| 4 | 재고현황 | `/material/stock-status` | [ ] | [ ] | [ ] | [ ] | [ ] | N/A | 🔄 |
| 5 | 입고관리 | `/material/receiving` | [ ] | [ ] | [ ] | [ ] | [ ] | [ ] | 🔄 |
| 6 | 검사관리 | `/quality/inspection` | [ ] | [ ] | [ ] | [ ] | [ ] | [ ] | 🔄 |
| 7 | 품목관리 | `/items` | [ ] | [ ] | [ ] | [ ] | [ ] | [ ] | 🔄 |
| 8 | 결제이력 | `/settings/payment-history` | [ ] | [ ] | [ ] | [ ] | [ ] | N/A | 🔄 |
| 9 | 팝업관리 | `/settings/popup-management` | [ ] | [ ] | [ ] | [ ] | [ ] | [ ] | 🔄 |
| 10 | 이벤트관리 | `/customer-center/events` | [ ] | [ ] | [ ] | [ ] | [ ] | [ ] | 🔄 |
| 11 | 문의관리 | `/customer-center/inquiries` | [ ] | [ ] | [ ] | [ ] | [ ] | N/A | 🔄 |
| 12 | 공지관리 | `/customer-center/notices` | [ ] | [ ] | [ ] | [ ] | [ ] | [ ] | 🔄 |
| 13 | 견적관리 | `/quotes` | [ ] | [ ] | [ ] | [ ] | [ ] | [ ] | 🔄 |
| 14 | 공정관리 | `/process-management` | [ ] | [ ] | [ ] | [ ] | [ ] | [ ] | 🔄 |
| 15 | 계정관리 | `/settings/account-management` | [ ] | [ ] | [ ] | [ ] | [ ] | [ ] | 🔄 |

### 영업 도메인 (추가)
| # | 페이지 | URL | 🔍 검색 | 📑 탭 | 🎛️ 필터 | ☑️ 체크 | 👁️ 상세 | ➕ 등록 | 상태 |
|---|--------|-----|---------|-------|---------|---------|---------|---------|------|
| 1 | 거래처관리 | `/sales/client-management-sales-admin` | [ ] | [ ] | [ ] | [ ] | [ ] | [ ] | 🔄 |

---

### 🐛 발견된 오류 목록

| # | 페이지 | 오류 내용 | 원인 | 해결 상태 |
|---|--------|----------|------|----------|
| 1 | 급여관리 | 달력 아이콘 짤림 (375px) | Input width 너무 좁음 | ✅ 수정 |
| 2 | 급여관리 | DateRangeSelector 미사용 | 직접 Input 사용 | ✅ 수정 |
| 3 | 거래처관리(영업) | `headerActions.call is not a function` | headerActions 함수 아님 | ✅ 수정 |
| 4 | 거래처관리(영업) | NaN globalIndex | externalPagination 형태 불일치 | ✅ 수정 |
| 5 | 휴가관리 | `externalSelection.onToggleSelection is not a function` | externalSelection 형태 불일치 | ✅ 수정 |
| 6 | 휴가관리 | 탭 변경 시 `Invalid time value` | 날짜 필드 null 체크 없음 + 오타 | ✅ 수정 |
| 7 | 근태관리 | 프리셋 버튼 미표시 | showPresets: false | ✅ 수정 |
| 8 | 휴가관리 | 탭 카운트 모두 동일하게 표시 | tabFilter 제거 후 count 동기화 안됨 | ✅ 수정 |
| 9 | UniversalListPage | config.tabs 변경 시 내부 상태 미동기화 | useEffect 누락 | ✅ 수정 |
| 10 | 사원관리 | 프리셋 버튼 미표시 | showPresets: false | ✅ 수정 |
| 11 | 휴가관리 | 승인/거절 팝업 미표시 | selectedItems 상태 불일치 | ✅ 수정 |
| 12 | 휴가관리 | 승인/거절 팝업에 선택 건수 0으로 표시 | headerActions의 selected가 내부 state로 복사 안됨 | ✅ 수정 |
| 13 | 단가관리(판매) | `headerActions.call is not a function` | headerActions가 함수 아닌 ReactNode | ✅ 수정 |
