- Deleted the following files as they are no longer relevant to the current project structure: - 결재 시스템 구현 현황 - 결재 시스템 v2 사용 가이드 - WACE 시스템 문제점 분석 및 개선 계획 - Agent Pipeline 한계점 분석 - AI 기반 화면 자동 생성 시스템 설계서 - WACE ERP Backend - 분석 문서 인덱스 These deletions help streamline the documentation and remove obsolete information, ensuring that only current and relevant resources are maintained.
3.7 KiB
3.7 KiB
BOM 엑셀 업로드 기능 개발 계획
개요
탑씰(COMPANY_7) BOM관리 화면(screen_id=4168)에 엑셀 업로드 기능을 추가한다. BOM은 트리 구조(parent_detail_id 자기참조)이므로 범용 엑셀 업로드를 사용할 수 없고, BOM 전용 엑셀 업로드 컴포넌트를 개발한다.
핵심 구조
DB 테이블
bom(마스터): id(UUID), item_id(→item_info), version, current_version_idbom_detail(디테일-트리): id(UUID), bom_id(FK), parent_detail_id(자기참조), child_item_id(→item_info), level, seq_no, quantity, unit, loss_rate, process_type, version_iditem_info: id, item_number(품번), item_name(품명), division(구분), unit, size, material
엑셀 포맷 설계 (화면과 동일한 레벨 체계)
엑셀 파일은 다음 컬럼으로 구성:
| 레벨 | 품번 | 품명 | 소요량 | 단위 | 로스율(%) | 공정구분 | 비고 |
|---|---|---|---|---|---|---|---|
| 0 | PROD-001 | 완제품A | 1 | EA | 0 | ← BOM 헤더 (건너뜀) | |
| 1 | P-001 | 부품A | 2 | EA | 0 | ← 직접 자품목 | |
| 2 | P-002 | 부품B | 3 | EA | 5 | 가공 | ← P-001의 하위 |
| 1 | P-003 | 부품C | 1 | KG | 0 | ← 직접 자품목 | |
| 2 | P-004 | 부품D | 4 | EA | 0 | 조립 | ← P-003의 하위 |
| 1 | P-005 | 부품E | 1 | EA | 0 | ← 직접 자품목 |
- 레벨 0: BOM 헤더 (최상위 품목) → 업로드 시 건너뜀 (이미 존재)
- 레벨 1: 직접 자품목 → bom_detail (parent_detail_id=null, DB level=0)
- 레벨 2: 자품목의 하위 → bom_detail (parent_detail_id=부모ID, DB level=1)
- 레벨 N: → bom_detail (DB level=N-1)
- 품번으로 item_info를 조회하여 child_item_id 자동 매핑
트리 변환 로직 (레벨 1 이상만 처리)
엑셀 행을 순서대로 순회하면서 (레벨 0 건너뜀):
- 각 행의 엑셀 레벨에서 -1하여 DB 레벨 계산
- 스택으로 부모-자식 관계 추적
행1(레벨0) → BOM 헤더, 건너뜀
행2(레벨1) → DB level=0, 스택: [행2] → parent_detail_id = null
행3(레벨2) → DB level=1, 스택: [행2, 행3] → parent_detail_id = 행2.id
행4(레벨1) → DB level=0, 스택: [행4] → parent_detail_id = null
행5(레벨2) → DB level=1, 스택: [행4, 행5] → parent_detail_id = 행4.id
행6(레벨1) → DB level=0, 스택: [행6] → parent_detail_id = null
테스트 계획
1단계: 백엔드 API
- 테스트 1: 품번으로 item_info 일괄 조회 (존재하는 품번)
- 테스트 2: 존재하지 않는 품번 에러 처리
- 테스트 3: 플랫 데이터 → 트리 구조 변환 (parent_detail_id 계산)
- 테스트 4: bom_detail INSERT (version_id 포함)
- 테스트 5: 기존 디테일 처리 (추가 모드 vs 전체교체 모드)
2단계: 프론트엔드 모달
- 테스트 6: 엑셀 파일 파싱 및 미리보기
- 테스트 7: 품번 매핑 결과 표시 (성공/실패)
- 테스트 8: 업로드 실행 및 결과 표시
3단계: 통합
- 테스트 9: BomTreeComponent에 엑셀 업로드 버튼 추가
- 테스트 10: 업로드 후 트리 자동 새로고침
구현 파일 목록
백엔드
backend-node/src/services/bomService.ts-uploadBomExcel()함수 추가backend-node/src/controllers/bomController.ts-uploadBomExcel핸들러 추가backend-node/src/routes/bomRoutes.ts-POST /:bomId/excel-upload라우트 추가
프론트엔드
frontend/lib/registry/components/v2-bom-tree/BomExcelUploadModal.tsx- 전용 모달 신규frontend/lib/registry/components/v2-bom-tree/BomTreeComponent.tsx- 업로드 버튼 추가
진행 상태
- 완료된 테스트는 [x]로 표시
- 현재 진행 중인 테스트는 [진행중]으로 표시