# 변경 내용 요약 **날짜:** 2025-12-30 23:39 **작업자:** Claude Code **Phase:** 1.1 - QuoteCalculationService에 MNG FormulaEvaluatorService 로직 재구현 ## 📋 변경 개요 MNG 시뮬레이터의 BOM 계산 로직을 API FormulaEvaluatorService에 동기화하여 React 프론트엔드에서 동일한 견적 계산 기능을 사용할 수 있도록 구현. ## 📁 수정된 파일 ### 1. `app/Models/CategoryGroup.php` (신규) - MNG CategoryGroup 모델을 API로 이식 - 카테고리별 단가 계산 방식 관리 (면적/중량/수량 기반) ### 2. `app/Services/Quote/FormulaEvaluatorService.php` (수정) - 기존: 537줄 (기본 수식 평가만) - 수정 후: 1176줄 (MNG 10단계 BOM 계산 로직 추가) ## 🔧 상세 변경 사항 ### 1. CategoryGroup 모델 추가 **새 파일:** `app/Models/CategoryGroup.php` 주요 기능: - `CODE_AREA_BASED` ('area_based'): 면적 기반 단가 (M 곱셈) - `CODE_WEIGHT_BASED` ('weight_based'): 중량 기반 단가 (K 곱셈) - `CODE_QUANTITY_BASED` ('quantity_based'): 수량 기반 단가 - `findByItemCategory()`: 품목분류로 그룹 조회 - `calculatePrice()`: 카테고리 기반 최종 가격 계산 ### 2. FormulaEvaluatorService 로직 추가 **추가된 메서드:** | 메서드 | 설명 | |--------|------| | `calculateBomWithDebug()` | 10단계 BOM 계산 (디버그 모드 지원) | | `calculateCategoryPrice()` | 카테고리 기반 단가 계산 | | `groupItemsByProcess()` | 공정별 품목 그룹화 | | `getItemDetails()` | 품목 상세 정보 조회 | | `getBomTree()` | BOM 트리 구조 생성 (재귀) | | `expandBomWithFormulas()` | 수식 기반 BOM 확장 | | `evaluateQuantityFormula()` | 수량 수식 계산 | | `getItemCategory()` | 품목 카테고리 조회 | **10단계 BOM 계산 프로세스:** 1. 입력 변수 수집 (W0, H0, 설치타입, 전원 등) 2. 완제품 선택 및 제품 카테고리 확인 3. 변수 계산 (W1, H1, M, K 등) 4. BOM 확장 (수식 기반) 5. 가격 소스 결정 (표준가/특가) 6. 수량 수식 평가 7. 가격 계산 (카테고리별 곱셈 적용) 8. 공정별 그룹화 9. 소계 계산 10. 총계 산출 **변수 계산 규칙:** - `W1 = W0 + product_category.margin_width` - `H1 = H0 + product_category.margin_height` - `M = (W1 × H1) / 1,000,000` (면적 ㎡) - `K` = 제품 카테고리별 중량 계산 ## ✅ 테스트 체크리스트 - [ ] API 엔드포인트 `/api/v1/quotes/calculate` 테스트 - [ ] MNG 시뮬레이터 결과와 비교 검증 - [ ] 다양한 제품 카테고리별 계산 테스트 - [ ] 디버그 모드 출력 검증 ## ⚠️ 배포 시 주의사항 - `category_groups` 테이블 마이그레이션 필요 - 테넌트별 초기 데이터 설정 필요 ## 🔗 관련 문서 - `docs/dev/dev_plans/quote-calculation-api-plan.md` - `mng/app/Services/Quote/FormulaEvaluatorService.php` (원본)