---
source: Phase A + Phase B 통합 분석
section: Gap 검증 보고서
created: 2025-11-12
bp_mes_phase: Phase B - 코드 분석 완료
related:
  - document_cross_reference_map.md
  - api_code_analysis_summary.md
  - react_code_analysis_summary.md
tags: [gap-validation, integration, roadmap]
---

# BP-MES Gap 검증 보고서

**작성일:** 2025-11-12
**Phase:** B 완료 (Laravel API + React 코드 분석)
**검증 범위:** Phase A에서 발견한 17개 Gap

---

## Executive Summary

### 📊 Gap 검증 결과 (17개 Gap)

| 상태 | 개수 | Gap 번호 | 설명 |
|------|------|----------|------|
| ✅ **해결됨** | 2개 | #1, #7 | 통합 품목 조회 API, 가격 통합 조회 |
| ⚠️ **부분 해결** | 3개 | #3, #6, #16 | BOM 계산 API (설계만), attributes/options (Material만), Material search |
| ❌ **미해결** | 9개 | #2, #4, #5, #8, #9, #11, #12, #14, #15 | 치수 연결, BOM 계산식, 조건부 BOM, 컴포넌트 |
| 🟢 **프론트 구현됨** | 3개 | #10, #13, #17 | 견적 화면, BOM 에디터 (단, 백엔드 연동 필요) |

**핵심 발견:**
- ✅ **예상보다 많이 구현됨:** 통합 품목 조회 API, 가격 시스템, BOM 계산 API (설계)
- ❌ **비즈니스 핵심 기능 누락:** 치수 연결 매핑, 제품 BOM 계산식/조건식
- 🔄 **프론트-백 연동 필요:** 견적 계산 (프론트에서 중복 구현), BOM 에디터

---

## 🔴 Critical Gaps (7개)

### Gap #1: 통합 품목 조회 API 부재 ✅ **해결됨!**

**Phase A 분석 (문서):**
- ❌ 부재 예상
- 필요: `GET /api/v1/items?type=FG,PT,RM`

**Phase B.1 검증 (Laravel API):**
- ✅ **이미 구현됨!** `ItemsController` 발견
- `GET /api/v1/items?type=PRODUCT,MATERIAL&search=...`
- ItemService 기반 통합 조회

**Phase B.2 검증 (React):**
- ⚠️ **미사용 확인 필요**
- ItemManagement.tsx에서 API 연동 확인 필요

**최종 상태:** ✅ **해결 (백엔드 구현 완료, 프론트 연동 필요)**

**Action:** 프론트엔드에서 ItemsController 활용하도록 수정

---

### Gap #2: 치수 연결 매핑 시스템 부재 ❌ **미해결**

**Phase A 분석 (문서):**
- ❌ dimension_mappings 테이블 부재 예상
- 비즈니스 핵심 기능: 세트.W=3500 → 가이드레일.G=3500 자동 전달

**Phase B.1 검증 (Laravel API):**
- ❌ dimension_mappings 테이블 없음
- ❌ 치수 자동 전달 로직 없음

**Phase B.2 검증 (React):**
- ❌ QuoteManagement3Write.tsx에서 수동 입력만 가능
- ❌ 치수 매핑 UI 없음

**최종 상태:** ❌ **미해결 (백엔드 + 프론트 모두 미구현)**

**Action:**
1. 백엔드: dimension_mappings 테이블 설계 및 생성
2. API: `POST /api/v1/boms/{id}/dimension-mappings`
3. 프론트: DimensionMappingEditor organism 개발

**예상 작업량:** 1-2주

---

### Gap #3: 실시간 견적 계산 API 부재 ⚠️ **부분 해결**

**Phase A 분석 (문서):**
- ❌ `POST /api/v1/quotes/calculate` 부재 예상
- 필요: 치수 입력 → BOM 전개 → 원가 계산 → 견적 산출

**Phase B.1 검증 (Laravel API):**
- ⚠️ **부분 구현:** `BomCalculationController` 존재
- ✅ `POST /api/v1/design/bom-templates/{id}/calculate` 존재
- ❌ **하지만 설계 BOM만 지원** (주문 기반 견적 계산 불가)

**Phase B.2 검증 (React):**
- ❌ **프론트엔드에서 BOM 계산 직접 수행!** (QuoteManagement3Write.tsx)
- ✅ 수식 계산 엔진 구현 (calculateQuantity 함수, Lines 369-383)
- ❌ 백엔드 API 미사용 → 로직 중복

**최종 상태:** ⚠️ **부분 해결 (설계 BOM만, 주문 기반 계산 없음)**

**Action:**
1. 백엔드: `POST /api/v1/quotes/calculate` 신규 개발
   - BomCalculationService 재사용
   - 주문 기반 계산 지원
2. 프론트: 백엔드 API 연동으로 변경 (중복 로직 제거)

**예상 작업량:** 1-2주

---

### Gap #4: BOM 소요량 계산식 필드 부재 ❌ **미해결**

**Phase A 분석 (문서):**
- ❓ formula 필드 확인 필요
- 계산식 예시: `G/1000*1.02` (연실율 반영)

**Phase B.1 검증 (Laravel API):**
- ❌ `product_components` 테이블에 formula 필드 없음
- ✅ `bom_templates.calculation_schema` (JSON) 존재 (설계 BOM만)
- ❌ **실제 제품 BOM에는 계산식 지원 안됨**

**Phase B.2 검증 (React):**
- ✅ **QuoteManagement3Write.tsx에서 수식 편집 UI 구현!** (Lines 594-610)
  ```typescript
  <Input
    value={calc.formula || ''}
    onChange={e => updateFormula(calc.id, e.target.value)}
    placeholder="예: W*H/1000000"
  />
  ```
- ⚠️ 하지만 로컬 상태로만 관리 (백엔드 저장 안됨)

**최종 상태:** ❌ **미해결 (백엔드 미구현, 프론트 로컬만)**

**Action:**
1. 백엔드: product_components 테이블에 formula 필드 추가
2. API: formula 저장/조회 지원
3. 프론트: 백엔드 연동

**예상 작업량:** 1주

---

### Gap #5: 조건부 BOM 필드 부재 ❌ **미해결**

**Phase A 분석 (문서):**
- ❓ condition 필드 확인 필요
- 조건식 예시: `MOTOR='Y'` (조건부 BOM)

**Phase B.1 검증 (Laravel API):**
- ❌ `product_components` 테이블에 condition 필드 없음
- ❌ 조건부 BOM 로직 없음

**Phase B.2 검증 (React):**
- ❌ 조건부 BOM UI 없음

**최종 상태:** ❌ **미해결 (백엔드 + 프론트 모두 미구현)**

**Action:**
1. 백엔드: product_components 테이블에 condition 필드 추가
2. API: 조건부 BOM 처리 로직 개발
3. 프론트: 조건 선택 UI 개발

**예상 작업량:** 1-2주

---

### Gap #6: 가변 크기/치수/옵션 필드 부재 ⚠️ **부분 해결**

**Phase A 분석 (문서):**
- ❓ dimensions, options JSON 필드 확인 필요

**Phase B.1 검증 (Laravel API):**
- ⚠️ **부분 구현:**
  - Material 모델: ✅ `attributes`, ✅ `options` (array)
  - Product 모델: ✅ `attributes`, ❌ `options` 없음
- ❌ `dimensions` 필드 없음 (양쪽 모두)

**Phase B.2 검증 (React):**
- ⚠️ ItemManagement.tsx에서 치수/옵션 폼 존재 (Lines 4220-6000)
- ⚠️ 하지만 백엔드 연동 확인 필요

**최종 상태:** ⚠️ **부분 해결 (Material만, dimensions 없음)**

**Action:**
1. 백엔드: Product 모델에 options 필드 추가
2. 백엔드: dimensions 필드 추가 (products, materials 양쪽)
3. 프론트: 백엔드 연동 확인

**예상 작업량:** 1주

---

### Gap #7: 프론트-백 가격 매핑 불일치 ✅ **해결됨!**

**Phase A 분석 (문서):**
- ❌ 프론트: 단일값 (purchasePrice, salesPrice)
- ❌ 백엔드: 시계열 + 고객별 다중 레코드
- 통합 조회 API 필요

**Phase B.1 검증 (Laravel API):**
- ✅ **이미 구현됨!**
- `ItemsController.show()`: `include_price=true&client_id=1&price_date=2025-01-10`
- PricingService와 완전 통합

**Phase B.2 검증 (React):**
- ⚠️ ItemManagement.tsx에서 가격 이력 관리 UI 확인 필요

**최종 상태:** ✅ **해결 (백엔드 구현 완료, 프론트 연동 필요)**

**Action:** 프론트엔드에서 가격 통합 조회 API 활용

---

## 🟡 Important Gaps (7개)

### Gap #8: 품목 타입 구분 불명확 ❌ **미해결**

**Phase A 분석 (문서):**
- ⚠️ category_id로만 구분
- material_type 컬럼 필요 (RM/SM/CS)

**Phase B.1 검증 (Laravel API):**
- ❌ Material 모델에 material_type 필드 없음
- category_id로만 구분

**Phase B.2 검증 (React):**
- ✅ ItemManagement.tsx에서 itemType 구분 (FG, PT, RM, SM, CS)
- ⚠️ 하지만 백엔드 매핑 불일치

**최종 상태:** ❌ **미해결 (백엔드 컬럼 없음)**

**Action:** material_type 컬럼 추가 (enum: 'RM', 'SM', 'CS')

**예상 작업량:** 1일

---

### Gap #9: BOM 관리 화면 명세 부재 🟢 **프론트 구현됨**

**Phase A 분석 (문서):**
- ❌ react_screen_spec_summary.md에 BOM 화면 명세 없음

**Phase B.1 검증 (Laravel API):**
- N/A (프론트 이슈)

**Phase B.2 검증 (React):**
- ✅ **ItemManagement.tsx에 BOM 에디터 구현 발견!** (Lines 5979-6378)
  - Popover 기반 품목 검색
  - Nested BOM display (2-level)
  - 재질별 폭 합계

**최종 상태:** 🟢 **프론트 구현 완료 (백엔드 연동 필요)**

**Action:**
1. BOM 에디터를 organism으로 분리 (재사용 가능하게)
2. 백엔드 API 연동 확인

**예상 작업량:** 리팩토링 1주

---

### Gap #10: Molecules 컴포넌트 부재 ✅ **구현 확인**

**Phase A 분석 (문서):**
- ❌ 없음 예상

**Phase B.2 검증 (React):**
- ✅ **6개 발견:**
  - TableActions, StatusBadge, IconWithBadge
  - FormField, StatCard, SearchBar

**최종 상태:** ✅ **구현 완료 (6개 존재)**

**Action:** 추가 molecules 개발 권장 (10-15개 목표)

---

### Gap #11: Organisms 컴포넌트 부재 ✅ **구현 확인**

**Phase A 분석 (문서):**
- ❌ 없음 예상

**Phase B.2 검증 (React):**
- ✅ **8개 발견:**
  - PageLayout, PageHeader, StatCards, SearchFilter
  - DataTable, EmptyState, MobileCard, FormSection

**최종 상태:** ✅ **구현 완료 (8개 존재)**

**Action:**
1. 추가 organisms 개발 권장 (BOMEditor, BendingDiagramEditor 등)
2. ItemManagement.tsx에서 분리

---

### Gap #12: Templates 컴포넌트 부재 ❌ **미해결**

**Phase A 분석 (문서):**
- ❌ 없음 예상

**Phase B.2 검증 (React):**
- ❌ Templates 레이어 없음

**최종 상태:** ❌ **미해결**

**Action:** Templates 개발 (ListPageTemplate, FormPageTemplate 등)

**예상 작업량:** 1-2주

---

### Gap #13: 화면 업데이트 미완료 🟢 **일부 완료**

**Phase A 분석 (문서):**
- ⚠️ 6/46 (13%) 완료

**Phase B.2 검증 (React):**
- ✅ 주요 화면 구현 확인:
  - ItemManagement.tsx ✅ (6,521 lines - 리팩토링 필요)
  - QuoteManagement3List.tsx ✅ (788 lines)
  - QuoteManagement3Write.tsx ✅ (1,644 lines)

**최종 상태:** 🟢 **주요 화면 완료 (40+개 화면 대기)**

**Action:** 나머지 화면 업데이트 (40+개)

**예상 작업량:** 4-6주

---

### Gap #14: 컴포넌트 통합 미시작 ❌ **미해결**

**Phase A 분석 (문서):**
- ❌ BOM/Quote/Item 통합 미시작

**Phase B.2 검증 (React):**
- ❌ ItemManagement.tsx: 6,521 lines God Component
- ⚠️ QuoteManagement3Write.tsx: 1,644 lines (통합 필요)

**최종 상태:** ❌ **미해결 (긴급 리팩토링 필요)**

**Action:**
1. ItemManagement.tsx → 15+ 파일로 분해
2. QuoteManagement3Write.tsx → 10+ 파일로 분해
3. 재사용 가능한 organisms 추출

**예상 작업량:** 4-7주

---

## 🟢 Nice to Have Gaps (3개)

### Gap #15: 가격 이력 UI 부재 ❌ **미해결**

**Phase A 분석 (문서):**
- ❌ 없음 예상

**Phase B.2 검증 (React):**
- ❌ PriceHistoryTable 컴포넌트 없음

**최종 상태:** ❌ **미해결 (저우선순위)**

**Action:** PriceHistoryManager organism 개발

**예상 작업량:** 1주

---

### Gap #16: Materials search API 부재 ⚠️ **부분 해결**

**Phase A 분석 (문서):**
- ❌ `/api/v1/materials/search` 없음 예상

**Phase B.1 검증 (Laravel API):**
- ❌ MaterialController에 search 엔드포인트 없음
- ✅ **하지만 ItemsController에 통합 검색 있음!**

**최종 상태:** ⚠️ **부분 해결 (통합 검색으로 대체 가능)**

**Action:** ItemsController 활용 권장

---

### Gap #17: PDF 출력 ❓ **확인 필요**

**Phase A 분석 (문서):**
- ❓ 견적서 PDF 출력 확인 필요

**Phase B.1 검증 (Laravel API):**
- ❓ QuoteController 확인 필요

**Phase B.2 검증 (React):**
- ❓ PDF 출력 버튼 확인 필요

**최종 상태:** ❓ **확인 필요**

**Action:** Quote 관련 코드 추가 분석

---

## 📊 통합 Gap 매트릭스

### 백엔드 (Laravel API) Gap

| Gap # | 항목 | 상태 | 작업량 | 우선순위 |
|-------|------|------|--------|----------|
| #1 | 통합 품목 조회 API | ✅ 완료 | 0 | - |
| #2 | 치수 연결 매핑 | ❌ 미구현 | 1-2주 | P0 |
| #3 | 주문 기반 견적 계산 API | ⚠️ 설계만 | 1-2주 | P0 |
| #4 | BOM formula 필드 | ❌ 미구현 | 1주 | P0 |
| #5 | BOM condition 필드 | ❌ 미구현 | 1-2주 | P0 |
| #6 | dimensions/options | ⚠️ 부분 | 1주 | P1 |
| #7 | 가격 통합 조회 | ✅ 완료 | 0 | - |
| #8 | material_type | ❌ 미구현 | 1일 | P1 |
| #16 | Material search | ⚠️ 통합됨 | 0 | - |

**총 작업량:** 5-8주

---

### 프론트엔드 (React) Gap

| Gap # | 항목 | 상태 | 작업량 | 우선순위 |
|-------|------|------|--------|----------|
| #9 | BOM 화면 | ✅ 구현 | 리팩 1주 | P1 |
| #10 | Molecules | ✅ 6개 | 확장 1주 | P2 |
| #11 | Organisms | ✅ 8개 | 확장 2주 | P1 |
| #12 | Templates | ❌ 미구현 | 1-2주 | P2 |
| #13 | 화면 업데이트 | 🟢 주요 완료 | 4-6주 | P2 |
| #14 | 컴포넌트 통합 | ❌ 미구현 | 4-7주 | P0 |
| #15 | 가격 이력 UI | ❌ 미구현 | 1주 | P3 |
| #17 | PDF 출력 | ❓ 확인 | TBD | P3 |

**총 작업량:** 12-20주

---

## 🚨 Critical Path (긴급 해결 필요)

### Phase 1: 백엔드 핵심 기능 (3-4주)

**Week 1-2:**
1. Gap #2: 치수 연결 매핑 시스템
2. Gap #4: product_components.formula 필드
3. Gap #5: product_components.condition 필드

**Week 3-4:**
4. Gap #3: 주문 기반 견적 계산 API
5. Gap #6: Product.options, dimensions 필드

---

### Phase 2: 프론트엔드 리팩토링 (4-7주)

**Week 1-2:**
1. Gap #14: ItemManagement.tsx 분해 (6,521 → 15+ 파일)

**Week 3-4:**
2. Gap #11: Organisms 추가 (BOMEditor, BendingDiagramEditor)
3. Gap #9: BOM 에디터 분리 및 백엔드 연동

**Week 5-7:**
4. Gap #13: 주요 화면 리팩토링 완료
5. 백엔드 API 연동 (Gap #1, #3, #7)

---

## 💡 핵심 발견 및 권장 사항

### 긍정적 발견

1. ✅ **통합 품목 조회 API 이미 구현됨**
   - ItemsController 활용 권장
   - 프론트엔드 연동 필요

2. ✅ **가격 시스템 완전 구현됨**
   - 시계열 + 고객별 가격 지원
   - 문서 분석과 100% 일치

3. ✅ **BOM 계산 API 설계 단계 구현됨**
   - BomCalculationController 재사용 가능
   - 주문 기반 계산 확장 필요

4. ✅ **주요 화면 구현 완료**
   - ItemManagement, QuoteManagement3List/Write
   - 리팩토링으로 품질 개선 필요

---

### 심각한 Gap

1. 🔴 **치수 연결 매핑 시스템 부재 (비즈니스 핵심)**
   - dimension_mappings 테이블 신설 필수
   - 자동 견적 계산의 전제 조건

2. 🔴 **ItemManagement.tsx 6,521 lines God Component**
   - 유지보수 불가능
   - 긴급 리팩토링 필요 (4-7주)

3. 🔴 **BOM formula/condition 필드 부재**
   - 계산식 지원 불가
   - 조건부 BOM 불가
   - 비즈니스 로직 구현 불가

---

### 권장 사항

#### 1. 백엔드 우선 개발 (P0)
- 치수 연결 매핑 시스템
- BOM formula/condition 필드
- 주문 기반 견적 계산 API

#### 2. 프론트엔드 리팩토링 (P0)
- ItemManagement.tsx 분해 (15+ 파일)
- useState 40개 → useReducer + Custom Hooks
- DataTable organism 활용 (1,911줄 → 200줄)

#### 3. 백엔드-프론트 연동 (P1)
- 통합 품목 조회 API 활용
- 가격 통합 조회 API 활용
- BOM 계산 API 연동 (중복 로직 제거)

#### 4. 컴포넌트 확장 (P2)
- Templates 레이어 구축
- Organisms 추가 (BOMEditor, BendingDiagramEditor)
- 나머지 화면 업데이트 (40+개)

---

## 📅 예상 일정

| Phase | 기간 | 작업량 | 우선순위 |
|-------|------|--------|----------|
| **Phase 1: 백엔드 핵심** | 3-4주 | Gap #2, #3, #4, #5, #6 | P0 |
| **Phase 2: 프론트 리팩토링** | 4-7주 | Gap #14 (ItemManagement) | P0 |
| **Phase 3: 백-프 연동** | 2-3주 | Gap #1, #7 연동 + BOM 연동 | P1 |
| **Phase 4: 컴포넌트 확장** | 4-6주 | Gap #11, #12, #13 | P2 |
| **Phase 5: 마무리** | 1-2주 | Gap #15, #17 | P3 |

**총 예상 기간:** 14-22주 (3.5-5.5개월)

---

## 🏁 결론

### Gap 검증 결과 요약

**✅ 해결됨 (2개):**
- Gap #1: 통합 품목 조회 API
- Gap #7: 가격 통합 조회 API

**⚠️ 부분 해결 (3개):**
- Gap #3: BOM 계산 API (설계만)
- Gap #6: attributes/options (Material만)
- Gap #16: Material search (통합 검색 있음)

**❌ 미해결 (9개):**
- Gap #2: 치수 연결 매핑 (🔴 Critical)
- Gap #4: BOM formula (🔴 Critical)
- Gap #5: BOM condition (🔴 Critical)
- Gap #8: material_type (🟡 Important)
- Gap #9: BOM 화면 (🟢 프론트 구현 완료)
- Gap #12: Templates (🟡 Important)
- Gap #14: 컴포넌트 통합 (🔴 Critical)
- Gap #15: 가격 이력 UI (🟢 Nice to Have)
- Gap #17: PDF 출력 (❓ 확인 필요)

**🟢 구현 확인 (3개):**
- Gap #10: Molecules (6개 존재)
- Gap #11: Organisms (8개 존재)
- Gap #13: 주요 화면 완료

---

### Next Steps

**즉시 시작 가능:**
1. Phase C: 통합 및 갭 분석 최종 보고서 작성
2. Phase 1 (백엔드 핵심) 개발 계획 수립
3. Phase 2 (ItemManagement 리팩토링) 설계

**문의 사항:**
"Phase C 시작해줘" 또는 "Phase 1 개발 계획 세워줘"

---

**문서 버전:** v1.0
**작성일:** 2025-11-12
**BP-MES Phase:** B 완료 ✅
**다음 Phase:** C (통합 및 갭 분석 최종 보고서)
