` wrapper로 sibling 분리 | ✅ PASS | heading에 로딩 텍스트 미포함 확인 |
+
+### 수정 파일 목록
+
+| 파일 | 수정 내용 |
+|------|----------|
+| `src/components/approval/DocumentCreate/index.tsx` | BUG #11, #1, #13, #14 |
+| `src/components/approval/DocumentCreate/PowerOfAttorneyForm.tsx` | BUG #12 |
+| `src/components/approval/DocumentCreate/SealUsageForm.tsx` | BUG #12 |
+
+---
+
+## 전체 QA 진행 상태
+
+| Phase | 상태 | 비고 |
+|-------|------|------|
+| Phase 0: 문서 분류/양식 선택 | ✅ 완료 | 7카테고리 17양식 전체 확인 |
+| Phase 1-A: 일반 카테고리 CRUD | ✅ 완료 | 품의서 전체 CRUD, 근태신청/사유서 렌더링+미리보기 |
+| Phase 1-B: 경비 카테고리 CRUD | ✅ 완료 | 지출결의서, 비용견적서 전체 CRUD |
+| Phase 1-C: 나머지 카테고리 | ✅ 완료 | 11개 양식 렌더링+미리보기 전체 통과 |
+| Phase 2: 벨리데이션/파일업로드 | ✅ 완료 | 7개 벨리데이션 시나리오, 파일 업로드/삭제 테스트 |
+| Phase 2-B: 대시보드 연동 | ⏳ 미완료 | |
+| Phase 3: 버그 정리/수정 계획 | ✅ 완료 | 본 문서 |
+| **버그 수정 + 재검수** | **✅ 완료** | **5건 수정, 5건 화면 재검수 통과** |
+
+### QA 중 생성된 테스트 데이터
+- AP-20260316-0012 (근태신청, 결재대기) — BUG #11 재검수용
diff --git a/claudedocs/production/[PLAN-2026-03-13] bending-module-implementation.md b/claudedocs/production/[PLAN-2026-03-13] bending-module-implementation.md
new file mode 100644
index 00000000..6057333d
--- /dev/null
+++ b/claudedocs/production/[PLAN-2026-03-13] bending-module-implementation.md
@@ -0,0 +1,532 @@
+# 절곡품 모듈 구현 계획서
+
+> 버디(경동기업 ERP) 절곡품 메뉴 분석 기반 SAM ERP 프론트엔드 구현 계획
+> 작성일: 2026-03-13 | 백엔드 API 작업 진행 중
+
+---
+
+## 1. 전체 개요
+
+### 버디 절곡품 메뉴 구조 (6개 하위 페이지)
+
+| # | 메뉴명 | 버디 URL | 데이터 건수 | 핵심 기능 |
+|---|--------|---------|-----------|---------|
+| 1 | 절곡 바라시 기초자료 | `/bending/list.php` | 265건 | 절곡 형상 마스터 + 그리기 도구 |
+| 2 | 재고생산/작업일지/중간검사성적서 | `/lot/list.php` | 201건 | LOT 관리 + 중간검사 PDF |
+| 3 | 가이드레일 | `/guiderail/list.php` | 20건 | 제품 설계 + 전개도 + 작업지시서 |
+| 4 | 케이스 (셔터박스) | `/shutterbox/list.php` | 30건 | 셔터박스 설계 + 전개도 + 작업지시서 |
+| 5 | 하단마감재 | `/bottombar/list.php` | 11건 | 마감재 설계 + 작업지시서 |
+| 6 | 절곡 재고현황 | `/lot/list_stock.php` | 집계 | 재고 요약 + 그룹별 현황 |
+
+### SAM 라우트 구조 (신규)
+```
+src/app/[locale]/(protected)/production/bending/
+├── page.tsx ← 절곡 바라시 기초자료
+├── lot/
+│ └── page.tsx ← 재고생산/작업일지/중간검사성적서
+├── guiderail/
+│ └── page.tsx ← 가이드레일
+├── shutterbox/
+│ └── page.tsx ← 케이스(셔터박스)
+├── bottombar/
+│ └── page.tsx ← 하단마감재
+└── stock/
+ └── page.tsx ← 절곡 재고현황
+```
+
+### 컴포넌트 구조
+```
+src/components/production/bending/
+├── BendingMasterList.tsx ← 바라시 기초자료 목록
+├── BendingMasterForm.tsx ← 바라시 기초자료 등록/수정 (모달)
+├── BendingLotList.tsx ← LOT 목록
+├── BendingLotForm.tsx ← LOT 등록/수정 (모달)
+├── GuiderailList.tsx ← 가이드레일 목록
+├── GuiderailForm.tsx ← 가이드레일 등록/수정 (모달)
+├── ShutterboxList.tsx ← 셔터박스 목록
+├── ShutterboxForm.tsx ← 셔터박스 등록/수정 (모달)
+├── BottombarList.tsx ← 하단마감재 목록
+├── BottombarForm.tsx ← 하단마감재 등록/수정 (모달)
+├── BendingStockSummary.tsx ← 재고 요약 카드
+├── BendingStockTable.tsx ← 재고 현황 테이블
+├── WorkOrderViewer.tsx ← 작업지시서 보기 (공통)
+├── BlueprintImageManager.tsx ← 결합형태 이미지 관리 (공통)
+├── actions.ts ← Server Actions
+└── types.ts ← 타입 정의
+```
+
+### 🔄 기존 재활용 컴포넌트 (신규 생성 불필요)
+
+| 기존 컴포넌트 | 경로 | 재활용 용도 |
+|--------------|------|-----------|
+| **DrawingCanvas** | `src/components/items/DrawingCanvas.tsx` | 절곡 형상 그리기 도구 (그대로 사용) |
+| **BendingDiagramSection** | `src/components/items/ItemForm/BendingDiagramSection.tsx` | 전개도 파일 업로드/그리기/치수 테이블 UI 참조 |
+| **BendingPartForm** | `src/components/items/ItemForm/forms/parts/BendingPartForm.tsx` | 품목명/종류/재질/품목코드 로직 참조 |
+| **bending/types.ts** | `src/components/production/WorkOrders/documents/bending/types.ts` | 절곡 작업일지 타입 (GuideRailTypeData, ShutterBoxData 등) |
+
+**DrawingCanvas 기능 현황** (품목관리에서 이미 사용 중):
+- Canvas 600×400 (반응형 스케일)
+- 도구: 펜, 직선, 사각형, 원, 텍스트, 지우개
+- 색상 팔레트 10색 + 선 두께 조절 (1~20px)
+- Undo, 전체 지우기, 히스토리 관리
+- 초기 이미지 로드 (기존 이미지 편집 가능)
+- PNG data URL로 저장 → onSave 콜백
+- Dialog 모달로 래핑됨 (open/onOpenChange props)
+
+**BendingDiagramSection 기능 현황** (품목 등록 폼에서 사용 중):
+- 입력방식 선택: 파일 업로드 / 드로잉 (DrawingCanvas 연동)
+- FileDropzone으로 이미지/PDF 업로드 + 미리보기
+- 기존 파일 표시/다운로드/삭제 (수정 모드)
+- 전개도 상세 입력 테이블: 번호, 입력값, 연신율, 계산값, 음영, A각
+- 폭 합계 자동 계산 → setValue로 폼 필드 연동
+
+---
+
+## 2. 페이지별 상세 분석 및 구현 계획
+
+### 2-1. 절곡 바라시 기초자료 (Bending Master)
+
+#### 목록 페이지
+**필터 영역:**
+| 필터명 | 타입 | 옵션 | 기본값 |
+|--------|------|------|--------|
+| 대분류 | 라디오 버튼 (토글) | 전체 / 스크린 / 철재 | 전체 |
+| 인정/비인정 | 라디오 버튼 (토글) | 전체 / 인정 / 비인정 | 전체 |
+| 중분류 (절곡물 분류) | Select | 가이드레일, 케이스, 하단마감재, 마구리, L-BAR, 보강평철, 케이스용 연기차단재, 가이드레일용 연기차단재 | (중분류) |
+| 품명 | Select (동적) | 중분류 선택에 따라 변경 (~78개 옵션) | (품명) |
+| 키워드 검색 | 텍스트 입력 | - | - |
+
+**테이블 컬럼:**
+| 순서 | 컬럼명 | 설명 | 정렬 |
+|------|--------|------|------|
+| 1 | NO | 순번 | ✅ |
+| 2 | 등록일 | yyyy-MM-dd | ✅ |
+| 3 | 대분류 | 스크린/철재 | ✅ |
+| 4 | 인정/비인정 | 인정/비인정 | ✅ |
+| 5 | 절곡물 분류 | 중분류 카테고리 | ✅ |
+| 6 | 품명 | 링크 (상세 팝업) | ✅ |
+| 7 | 규격(가로*세로) | 치수 | ✅ |
+| 8 | 이미지(형상) | 썸네일 이미지 | - |
+| 9 | 재질 | EGI 1.55T, SUS 1.2T 등 | ✅ |
+| 10 | 폭 합계 | 숫자 | ✅ |
+| 11 | 절곡회수 | 숫자 (색상 강조) | ✅ |
+| 12 | 역방향(음영) | 숫자 | ✅ |
+| 13 | A각 수 | 숫자 | ✅ |
+| 14 | 폭합 | 숫자 | ✅ |
+| 15 | 작성 | 작성자 | ✅ |
+| 16 | 검색어 | 품목 검색 키워드 | ✅ |
+| 17 | 비고 | 메모 | ✅ |
+
+**액션 버튼:**
+- `신규` → 등록 폼 팝업
+- `절곡 모델설정 이동` → 별도 설정 페이지
+- `절곡 BOM 이동` → BOM 관리 페이지
+
+**페이지네이션:** 50/100/200/500/1,000/2,000 entries
+
+#### 등록/수정 폼 (모달/팝업)
+**폼 필드:**
+| 필드명 | 타입 | 필수 | 설명 |
+|--------|------|------|------|
+| 등록일 | DatePicker | ✅ | 기본값: 오늘 |
+| 형태 | 라디오 | ✅ | 스크린/철재 |
+| 인정/비인정 | 라디오 | ✅ | 인정/비인정 |
+| 절곡품 그룹 | Select | ✅ | 8개 옵션 |
+| 품명 | 텍스트 입력 | ✅ | |
+| 규격(가로*세로) | 텍스트 입력 | | |
+| 재질 | Select | | EGI 1.15T, EGI 1.55T, SUS 1.2T, SUS 1.5T |
+| 점검구 방향 | Select | | 양면/후면/밑면 점검구 (케이스 부품 전용) |
+| 케이스 너비 | 숫자 입력 | | 케이스 부품 전용 |
+| 케이스 높이 | 숫자 입력 | | 케이스 부품 전용 |
+| 전면부 밑 치수 | 숫자 입력 | | 케이스 부품 전용 |
+| 레일폭 | 숫자 입력 | | 케이스 부품 전용 |
+| 작성자 | 텍스트 (자동) | ✅ | 로그인 사용자 |
+| 품목 검색어 | 텍스트 입력 | | |
+| 비고 | 텍스트 입력 | | |
+
+**절곡 형상 입력 테이블 (동적 행):**
+| 행 필드 | 설명 |
+|---------|------|
+| 번호 | 행 순번 (+/- 버튼) |
+| 입력 | 폭 치수 입력 (노란 배경) |
+| 연신율 | 연신율 값 |
+| 연신율계산 후 | 자동 계산 (읽기전용, 회색) |
+| 합계 | 누적 합계 (주황 배경) |
+| 음영 | 체크박스 (역방향 표시) |
+| A각 표시 | 체크박스 |
+
+**하단 버튼:**
+- `모든칸 비우기` | `마지막 열추가` | `마지막 열삭제`
+
+**우측 패널:**
+- `그리기` 버튼 → Canvas 기반 절곡 형상 드로잉
+- 이미지 붙여넣기 (Ctrl+V) 영역
+- 조회 모드에서는 그리기 비활성화
+
+**상세 조회 모드 추가 버튼:**
+- `수정` | `복사` | `삭제` | `닫기`
+
+#### 구현 포인트
+- **그리기 도구**: ✅ 기존 `DrawingCanvas` 재활용 (신규 구현 불필요)
+- **전개도 섹션**: ✅ `BendingDiagramSection` 패턴 참조 (파일업로드/그리기 전환, 치수 테이블)
+- **동적 행 관리**: 열 추가/삭제 + 자동 합계 계산 (BendingDiagramSection 로직 참조)
+- **조건부 필드**: 절곡품 그룹이 "케이스"일 때만 케이스 관련 필드 표시
+- **이미지 붙여넣기**: Clipboard API 활용
+
+---
+
+### 2-2. 재고생산/작업일지/중간검사성적서 (Bending LOT)
+
+#### 목록 페이지
+**필터 영역:**
+| 필터명 | 타입 | 옵션 |
+|--------|------|------|
+| 품목명 | Select | 가이드레일(벽면형), 가이드레일(측면형), 연기차단재, 하단마감재(스크린), 하단마감재(철재), L-Bar, 케이스 |
+| 종류명 | Select | 화이바원단, SUS(마감), SUS(마감)2, EGI(마감), 스크린용, D형, C형, 본체, 본체(철재), 후면코너부, 린텔부, 점검구, 전면부 |
+| 모양&길이 | Select | W50×3000~4000, W80×3000~4000, 1219~4300 등 |
+| 키워드 검색 | 텍스트 입력 | |
+
+**테이블 컬럼:**
+| 순서 | 컬럼명 | 설명 |
+|------|--------|------|
+| 1 | 번호 | 순번 |
+| 2 | 등록일 | yyyy-MM-dd |
+| 3 | 원자재 LOT | LOT 번호 (링크, 파란색) |
+| 4 | 원단 LOT | LOT 번호 (링크, 파란색) |
+| 5 | 생산 LOT | LOT 번호 (링크, 파란색) - 자동생성 규칙 있음 |
+| 6 | 중간검사성적서 | PDF 아이콘 (클릭→PDF 보기/다운로드) |
+| 7 | 품목명 | C(케이스), R(가이드레일) 등 약어+전체명 |
+| 8 | 종류 | F(전면부), L(린텔부) 등 약어+전체명 |
+| 9 | 모양&길이 | 40(4000) 형식 |
+| 10 | 수량 | 숫자 |
+| 11 | 작성 | 작성자 |
+| 12 | 비고 | 메모 |
+
+**액션 버튼:**
+- `신규` → 등록 폼 팝업
+- `업로드` → 일괄 업로드 (엑셀 등)
+
+**LOT 번호 자동생성 규칙:**
+- 형식: `{품목코드}{종류코드}{생산코드}{날짜}-{길이코드}`
+- 예: `CF4A15-40` = C(케이스) + F(전면부) + 4(연도끝자리) + A(상반기) + 15(날짜) + 40(4000mm)
+
+#### 구현 포인트
+- **LOT 번호 자동생성**: 품목/종류/날짜 기반 규칙 엔진
+- **중간검사성적서 PDF**: PDF 뷰어 통합 (미리보기/다운로드)
+- **원자재/원단 LOT 연결**: LOT 선택 모달 (기존 수입검사 LOT 연계)
+- **업로드 기능**: 엑셀 일괄 등록
+
+---
+
+### 2-3. 가이드레일 (Guiderail)
+
+#### 목록 페이지
+**필터 영역:**
+| 필터명 | 타입 | 옵션 |
+|--------|------|------|
+| 대분류 | 토글 | 전체/스크린/철재 |
+| 인정/비인정 | 토글 | 전체/인정/비인정 |
+| 모델 선택 | Select | (모델 선택) - 동적 |
+| 키워드 검색 | 텍스트 입력 | |
+
+**테이블 컬럼:**
+| 순서 | 컬럼명 | 설명 |
+|------|--------|------|
+| 1 | 번호 | 순번 |
+| 2 | 등록일 | yyyy-MM-dd |
+| 3 | 대분류 | 스크린/철재 |
+| 4 | 인정/비인정 | |
+| 5 | 제품코드 | KSS02, KQTS01 등 |
+| 6 | 품목검색어 | |
+| 7 | 가로(너비) X 세로(폭) | 치수 (링크, 파란색) |
+| 8 | 형상 | 벽면형/측면형 (색상 구분) |
+| 9 | 마감 | SUS마감/EGI마감 등 |
+| 10 | 소요자재량 | SUS 1.2T(406) EGI 1.55T(398) 형식 |
+| 11 | 형태 | 조립도 이미지 (썸네일) |
+| 12 | 작업지시서 | `보기` 버튼 |
+| 13 | 작성 | 작성자 |
+| 14 | 비고 | 메모 |
+
+**특수 액션 버튼:**
+- `신규` → 등록 폼 팝업
+- `결합형태 이미지 등록` → 조립 이미지 관리
+- `형태별 기본 전개도` → 기본 전개도 조회/관리
+
+**모달/팝업:**
+1. **작업지시서 보기** → 인쇄 가능한 작업지시서 문서 (PDF 또는 프린트 뷰)
+2. **결합형태 이미지** → 이미지 업로드/관리
+3. **기본 전개도** → 형태별 전개도 이미지/설정
+
+#### 구현 포인트
+- **제품코드 체계**: 모델별 자동 코드 생성
+- **소요자재량 계산**: 치수 기반 자동 산출
+- **작업지시서**: 인쇄용 레이아웃 (기존 품질관리 문서 패턴 활용)
+- **전개도 관리**: 형태(벽면형/측면형)별 기본 템플릿
+
+---
+
+### 2-4. 케이스 / 셔터박스 (Shutterbox)
+
+#### 목록 페이지
+**필터 영역:**
+| 필터명 | 타입 | 옵션 |
+|--------|------|------|
+| 점검구 형태 | 토글 | 전체/양면 점검구/밑면 점검구/후면 점검구 |
+| 키워드 검색 | 텍스트 입력 | |
+
+**테이블 컬럼:**
+| 순서 | 컬럼명 | 설명 |
+|------|--------|------|
+| 1 | 번호 | 순번 |
+| 2 | 등록일 | yyyy-MM-dd |
+| 3 | 박스(가로X세로) | 치수 (링크, 파란색) |
+| 4 | 점검구 형태 | 양면/밑면/후면 점검구 (색상 구분) |
+| 5 | 전면부 밑면 치수 | 숫자 |
+| 6 | 레일(폭) | 숫자 |
+| 7 | 소요자재량 | EGI 1.55T(2,652) 형식 |
+| 8 | 품목 검색어 | |
+| 9 | 형태 | 조립도 이미지 (가로세로 표기 포함) |
+| 10 | 작업지시서 | `보기` 버튼 |
+| 11 | 작성 | 작성자 |
+| 12 | 비고 | 메모 |
+
+**특수 액션 버튼:**
+- `신규` → 등록 폼 팝업
+- `결합형태 이미지 등록` → 조립 이미지 관리
+- `점검구 형태별 기본 전개도` → 점검구 타입별 전개도 관리
+
+#### 구현 포인트
+- **박스 치수 기반 자동계산**: 가로×세로 입력 시 각 부품별 소요자재량 자동 산출
+- **점검구 형태에 따른 전개도 차이**: 양면/밑면/후면 각각 다른 전개도 로직
+- **조립도 이미지**: 치수 표기 포함된 SVG/Canvas 렌더링
+
+---
+
+### 2-5. 하단마감재 (Bottombar)
+
+#### 목록 페이지
+**필터 영역:**
+| 필터명 | 타입 | 옵션 |
+|--------|------|------|
+| 대분류 | 토글 | 전체/스크린/철재 |
+| 인정/비인정 | 토글 | 전체/인정/비인정 |
+| 모델 선택 | Select | (모델 선택) |
+| 키워드 검색 | 텍스트 입력 | |
+
+**테이블 컬럼:**
+| 순서 | 컬럼명 | 설명 |
+|------|--------|------|
+| 1 | 번호 | 순번 |
+| 2 | 등록일 | yyyy-MM-dd |
+| 3 | 대분류 | 스크린/철재 |
+| 4 | 인정/비인정 | |
+| 5 | 제품코드 | KSS01, KTE01 등 |
+| 6 | 가로(폭) X 세로(높이) | 치수 (링크, 파란색) |
+| 7 | 품목검색어 | |
+| 8 | 마감형태 | SUS마감/EGI마감 (색상 강조) |
+| 9 | 소요자재량 | 재질별 소요량 |
+| 10 | 형태 | 전개도 이미지 (상세 치수 표기) |
+| 11 | 작업지시서 | `보기` 버튼 |
+| 12 | 작성 | 작성자 |
+| 13 | 비고 | 메모 |
+
+**액션 버튼:**
+- `신규` → 등록 폼 팝업
+- `이미지 등록` → 형태 이미지 관리
+
+#### 구현 포인트
+- 가이드레일과 구조가 유사 → 공통 컴포넌트 추출 가능
+- 하단마감재 전용 전개도 로직
+
+---
+
+### 2-6. 절곡 재고현황 (Bending Stock)
+
+#### 대시보드 형태 페이지 (목록이 아닌 집계 화면)
+
+**필터 영역:**
+| 필터명 | 타입 | 설명 |
+|--------|------|------|
+| 기간 시작 | DatePicker | 기본값: 2024.01.01 |
+| 기간 종료 | DatePicker | 기본값: 오늘 |
+| 품목명 | Select | |
+| 종류명 | Select | |
+| 모양&길이 | Select | |
+| 키워드 검색 | 텍스트 입력 | |
+| 그룹 선택 | 체크박스 그룹 | 전체선택/전체해제 + 가이드레일/케이스/하단마감재/기타 |
+
+**전체 재고 요약 카드:**
+| 항목 | 색상 | 설명 |
+|------|------|------|
+| 총 생산량 | 파랑 | 전체 생산 수량 합계 |
+| 총 사용량 | 빨강 | 전체 사용(출고) 수량 합계 |
+| 총 재고량 | 초록 | 생산량 - 사용량 |
+
+**그룹별 재고 현황 테이블 (4개 섹션):**
+1. 가이드레일 재고 현황
+2. 케이스 재고 현황
+3. 하단마감재 재고 현황
+4. 기타 재고 현황
+
+각 테이블 컬럼:
+| 컬럼명 | 설명 |
+|--------|------|
+| 품목명 | 가이드레일(벽면형), 케이스 등 |
+| 종류 | C형, D형, 본체 등 |
+| 모양&길이 | 2438, 3000, 3500 등 |
+| 생산량 | 숫자 |
+| 품목코드 | RC24, RD30 등 |
+| 사용량 | 숫자 |
+| 재고량 | 숫자 (생산량-사용량) |
+| 상태 | "재고있음" / "재고없음" / "부족" |
+
+**액션 버튼:**
+- `신규` → LOT 신규 등록
+- `작업일지` → 작업일지 페이지 이동
+- `업로드` → 일괄 업로드
+
+#### 구현 포인트
+- **집계 데이터**: 서버 사이드 집계 API 필요
+- **그룹별 접기/펼치기**: Accordion 패턴
+- **상태 색상 코딩**: 재고있음(녹색), 부족(노란색), 재고없음(빨간색)
+- **체크박스 그룹 필터**: 실시간 테이블 섹션 토글
+
+---
+
+## 3. 공통 컴포넌트 / 패턴
+
+### 3-1. 공통으로 추출할 컴포넌트
+
+| 컴포넌트 | 사용처 | 설명 |
+|---------|--------|------|
+| `WorkOrderViewer` | 가이드레일, 케이스, 하단마감재 | 작업지시서 보기/인쇄 모달 |
+| `BlueprintImageManager` | 가이드레일, 케이스 | 결합형태 이미지 업로드/관리 |
+| `BendingFilterBar` | 바라시, 가이드레일, 하단마감재 | 대분류/인정 토글 + 모델 선택 필터 |
+| `MaterialCalculation` | 가이드레일, 케이스, 하단마감재 | 소요자재량 표시 컴포넌트 |
+| `LotNumberGenerator` | LOT 관리 | LOT 번호 자동생성 로직 |
+
+### 3-2. SAM 기존 패턴 적용
+
+| 요소 | SAM 패턴 | 적용 방법 |
+|------|---------|---------|
+| 목록 페이지 | IntegratedListTemplateV2 또는 UniversalListPage | 필터+테이블+페이지네이션 |
+| 등록/수정 | 모달 팝업 (버디가 팝업 사용) | Dialog 기반 폼 |
+| 필터 토글 | ToggleGroup (ui/) | 전체/스크린/철재 등 |
+| Select 필터 | Select (ui/) | 중분류, 품명, 모델 등 |
+| 테이블 | DataTable + 컬럼 설정 | useColumnSettings 적용 |
+| PDF 보기 | 기존 PDF 뷰어 또는 새 창 | 중간검사성적서 |
+| 날짜 | DatePicker (기존) | 등록일, 기간 필터 |
+
+---
+
+## 4. 백엔드 API 연동 예상
+
+### 4-1. 필요 API 엔드포인트 (예상)
+
+```
+# 절곡 바라시 기초자료
+GET /api/v1/bending ← 목록 조회 (필터/페이지네이션)
+GET /api/v1/bending/{id} ← 상세 조회
+POST /api/v1/bending ← 등록
+PUT /api/v1/bending/{id} ← 수정
+DELETE /api/v1/bending/{id} ← 삭제
+POST /api/v1/bending/{id}/copy ← 복사
+
+# 재고생산/LOT
+GET /api/v1/bending-lot ← LOT 목록
+GET /api/v1/bending-lot/{id} ← LOT 상세
+POST /api/v1/bending-lot ← LOT 등록
+PUT /api/v1/bending-lot/{id} ← LOT 수정
+POST /api/v1/bending-lot/upload ← 일괄 업로드
+GET /api/v1/bending-lot/{id}/inspection-report ← 중간검사성적서 PDF
+
+# 가이드레일
+GET /api/v1/guiderail ← 목록
+GET /api/v1/guiderail/{id} ← 상세
+POST /api/v1/guiderail ← 등록
+PUT /api/v1/guiderail/{id} ← 수정
+GET /api/v1/guiderail/{id}/work-order ← 작업지시서
+GET /api/v1/guiderail/blueprints ← 기본 전개도
+POST /api/v1/guiderail/blueprint-image ← 결합형태 이미지 등록
+
+# 케이스 (셔터박스)
+GET /api/v1/shutterbox ← 목록
+GET /api/v1/shutterbox/{id} ← 상세
+POST /api/v1/shutterbox ← 등록
+PUT /api/v1/shutterbox/{id} ← 수정
+GET /api/v1/shutterbox/{id}/work-order ← 작업지시서
+GET /api/v1/shutterbox/blueprints ← 기본 전개도
+POST /api/v1/shutterbox/blueprint-image ← 결합형태 이미지 등록
+
+# 하단마감재
+GET /api/v1/bottombar ← 목록
+GET /api/v1/bottombar/{id} ← 상세
+POST /api/v1/bottombar ← 등록
+PUT /api/v1/bottombar/{id} ← 수정
+GET /api/v1/bottombar/{id}/work-order ← 작업지시서
+POST /api/v1/bottombar/image ← 이미지 등록
+
+# 절곡 재고현황
+GET /api/v1/bending-stock/summary ← 전체 재고 요약
+GET /api/v1/bending-stock/by-group ← 그룹별 재고 현황
+```
+
+---
+
+## 5. 구현 우선순위 및 단계
+
+### Phase 1: 기초 인프라 + 단순 목록 (1주)
+- [ ] 라우트 구조 생성 (6개 page.tsx)
+- [ ] types.ts 정의 (전체 타입)
+- [ ] actions.ts 기본 구조 (API 연동 준비)
+- [ ] 하단마감재 목록/폼 (가장 단순, 11건)
+- [ ] 가이드레일 목록/폼
+
+### Phase 2: 핵심 기능 (1주)
+- [ ] 케이스(셔터박스) 목록/폼
+- [ ] 작업지시서 보기 공통 컴포넌트
+- [ ] 결합형태 이미지 관리 공통 컴포넌트
+- [ ] 기본 전개도 뷰어
+
+### Phase 3: 바라시 기초자료 (3~5일) ← 기존 그리기 도구 재활용으로 단축
+- [ ] 절곡 바라시 기초자료 목록
+- [ ] 절곡 바라시 등록 폼 (동적 행 + 자동계산)
+- [ ] 기존 DrawingCanvas 연동 (items/DrawingCanvas.tsx 그대로 import)
+- [ ] 이미지 붙여넣기 기능 (Clipboard API)
+
+### Phase 4: LOT + 재고 (1주)
+- [ ] 재고생산/작업일지/중간검사성적서 목록/폼
+- [ ] LOT 번호 자동생성 로직
+- [ ] 중간검사성적서 PDF 연동
+- [ ] 절곡 재고현황 대시보드
+- [ ] 재고 요약 카드 + 그룹별 테이블
+
+### Phase 5: 고도화 (선택)
+- [ ] 절곡 모델설정 페이지
+- [ ] 절곡 BOM 관리 페이지
+- [ ] 엑셀 업로드/다운로드
+- [ ] 인쇄 최적화
+
+---
+
+## 6. 리스크 및 주의사항
+
+| 리스크 | 영향도 | 대응 |
+|--------|--------|------|
+| ~~그리기 도구 구현 복잡도~~ | ~~높음~~ | ✅ **해결**: 기존 DrawingCanvas 재활용 (품목관리에서 사용 중) |
+| API 엔드포인트 미확정 | 중간 | Mock 데이터로 UI 선구현 후 API 연동 |
+| LOT 번호 생성 규칙 확인 필요 | 중간 | 백엔드 팀과 규칙 확정 필요 |
+| 전개도/조립도 이미지 관리 | 낮음 | R2 스토리지 + 기존 BendingDiagramSection 패턴 재활용 |
+| 소요자재량 계산 로직 | 중간 | 백엔드 API에서 계산 후 반환 vs 프론트 계산 확정 필요 |
+
+---
+
+## 7. 확인 필요 사항 (백엔드 팀)
+
+1. **API 엔드포인트 명명 규칙** 확정 (위 예상과 맞는지)
+2. **LOT 번호 자동생성 규칙** 정확한 로직 (프론트 생성 vs 백엔드 생성)
+3. **소요자재량 계산** 위치 (프론트 vs 백엔드)
+4. **중간검사성적서 PDF** 생성/저장 방식
+5. **작업지시서** 데이터 구조 및 생성 방식
+6. **절곡 모델설정 / BOM** 별도 페이지 여부 및 구조
+7. **이미지 저장** 경로 (R2 스토리지 활용?)
diff --git a/src/app/[locale]/(protected)/approval/completed/page.tsx b/src/app/[locale]/(protected)/approval/completed/page.tsx
new file mode 100644
index 00000000..32c82f18
--- /dev/null
+++ b/src/app/[locale]/(protected)/approval/completed/page.tsx
@@ -0,0 +1,5 @@
+import { CompletedBox } from '@/components/approval/CompletedBox';
+
+export default function ApprovalCompletedPage() {
+ return
;
+}
diff --git a/src/components/accounting/BadDebtCollection/index.tsx b/src/components/accounting/BadDebtCollection/index.tsx
index 643c5aec..351411f7 100644
--- a/src/components/accounting/BadDebtCollection/index.tsx
+++ b/src/components/accounting/BadDebtCollection/index.tsx
@@ -202,7 +202,7 @@ export function BadDebtCollection({ initialData, initialSummary }: BadDebtCollec
);
},
- // 필터 설정 (모바일용)
+ // 필터 설정
filterConfig: [
{
key: 'vendor',
@@ -230,9 +230,9 @@ export function BadDebtCollection({ initialData, initialSummary }: BadDebtCollec
},
],
initialFilters: {
- vendor: 'all',
- status: 'all',
- sortBy: 'latest',
+ vendor: vendorFilter,
+ status: statusFilter,
+ sortBy: sortOption,
},
filterTitle: '악성채권 필터',
@@ -265,56 +265,6 @@ export function BadDebtCollection({ initialData, initialSummary }: BadDebtCollec
return sorted;
},
- // 테이블 헤더 액션 (3개 필터)
- tableHeaderActions: () => (
-
- {/* 거래처 필터 */}
-
-
- {/* 상태 필터 */}
-
-
- {/* 정렬 */}
-
-
- ),
// Stats 카드
computeStats: (): StatCard[] => [
@@ -455,5 +405,15 @@ export function BadDebtCollection({ initialData, initialSummary }: BadDebtCollec
]
);
- return
;
+ return (
+
{
+ if (filters.vendor !== undefined) setVendorFilter(filters.vendor as string);
+ if (filters.status !== undefined) setStatusFilter(filters.status as string);
+ if (filters.sortBy !== undefined) setSortOption(filters.sortBy as SortOption);
+ }}
+ />
+ );
}
\ No newline at end of file
diff --git a/src/components/accounting/BillManagement/index.tsx b/src/components/accounting/BillManagement/index.tsx
index 34e89ca6..f870ed41 100644
--- a/src/components/accounting/BillManagement/index.tsx
+++ b/src/components/accounting/BillManagement/index.tsx
@@ -267,8 +267,14 @@ export function BillManagement({ initialVendorId, initialBillType }: BillManagem
// 검색 필터
searchPlaceholder: '어음번호, 거래처, 메모 검색...',
- // 필터 설정 (모바일 필터 시트용)
+ // 필터 설정
filterConfig: [
+ {
+ key: 'vendor',
+ label: '거래처',
+ type: 'single',
+ options: vendorOptions.filter(o => o.value !== 'all'),
+ },
{
key: 'billType',
label: '구분',
@@ -289,8 +295,9 @@ export function BillManagement({ initialVendorId, initialBillType }: BillManagem
},
],
initialFilters: {
+ vendor: vendorFilter,
billType: initialBillType || 'received',
- status: 'all',
+ status: statusFilter,
},
filterTitle: '어음 필터',
@@ -345,33 +352,16 @@ export function BillManagement({ initialVendorId, initialBillType }: BillManagem
),
- // tableHeaderActions: 저장 버튼 + 거래처 필터
+ // tableHeaderActions: 저장 버튼
tableHeaderActions: ({ selectedItems }) => (
-