# 변경 내용 요약 **날짜:** 2026-01-02 **작업자:** Claude Code **작업명:** 견적 산출 API 개발 - Phase 1.1 API 계산 로직 구현 ## 📋 변경 개요 MNG FormulaEvaluatorService의 BOM 기반 견적 계산 로직을 API에서 호출할 수 있는 엔드포인트를 구현했습니다. 완제품 코드와 입력 변수를 받아 품목/단가/금액을 자동 계산하며, 10단계 디버깅 정보를 제공합니다. ## 📁 수정된 파일 ### 신규 파일 - `api/app/Http/Requests/Quote/QuoteBomCalculateRequest.php` - BOM 계산용 FormRequest ### 수정된 파일 - `api/app/Services/Quote/QuoteCalculationService.php` - calculateBom 메서드 추가 - `api/app/Http/Controllers/Api/V1/QuoteController.php` - calculateBom 액션 추가 - `api/routes/api.php` - /calculate/bom 라우트 추가 - `api/app/Swagger/v1/QuoteApi.php` - 스키마 및 엔드포인트 문서 추가 ## 🔧 상세 변경 사항 ### 1. QuoteBomCalculateRequest.php (신규) **목적:** BOM 기반 견적 계산 요청 검증 **주요 기능:** - 필수 입력: `finished_goods_code`, `W0`, `H0` - 선택 입력: `QTY`, `PC`, `GT`, `MP`, `CT`, `WS`, `INSP`, `debug` - `getInputVariables()`: 서비스용 입력 변수 배열 반환 ### 2. QuoteCalculationService.php **변경 전:** BOM 계산 메서드 없음 **변경 후:** ```php public function calculateBom(string $finishedGoodsCode, array $inputs, bool $debug = false): array { $tenantId = $this->tenantId(); $result = $this->formulaEvaluator->calculateBomWithDebug( $finishedGoodsCode, $inputs, $tenantId ); if (! $debug && isset($result['debug_steps'])) { unset($result['debug_steps']); } return $result; } ``` **이유:** API에서 MNG FormulaEvaluatorService의 calculateBomWithDebug를 호출할 수 있도록 브릿지 메서드 추가 ### 3. QuoteController.php **변경 후:** ```php public function calculateBom(QuoteBomCalculateRequest $request) { return ApiResponse::handle(function () use ($request) { return $this->calculationService->calculateBom( $request->finished_goods_code, $request->getInputVariables(), $request->boolean('debug', false) ); }, __('message.quote.calculated')); } ``` **이유:** REST API 엔드포인트 제공 ### 4. routes/api.php **추가된 라우트:** ```php Route::post('/calculate/bom', [QuoteController::class, 'calculateBom'])->name('v1.quotes.calculate-bom'); ``` ### 5. QuoteApi.php (Swagger) **추가된 스키마:** - `QuoteBomCalculateRequest` - 요청 스키마 - `QuoteBomCalculationResult` - 응답 스키마 **추가된 엔드포인트:** - `POST /api/v1/quotes/calculate/bom` - BOM 기반 자동산출 (10단계 디버깅) ## ✅ 테스트 체크리스트 - [x] PHP 문법 검사 통과 - [x] Pint 코드 스타일 검사 통과 - [x] 라우트 등록 확인 - [x] 서비스 로직 검증 (tinker) - [x] Swagger 문서 생성 확인 - [ ] 실제 API 호출 테스트 (Docker 환경 필요) ## ⚠️ 배포 시 주의사항 - 특이사항 없음 - 기존 API에 영향 없음 (신규 엔드포인트 추가) ## 🔗 관련 문서 - 계획 문서: `docs/dev_plans/quote-calculation-api-plan.md` - FormulaEvaluatorService: `api/app/Services/Quote/FormulaEvaluatorService.php` ## 📊 API 사용 예시 ### 요청 ```bash curl -X POST "http://api.sam.kr/api/v1/quotes/calculate/bom" \ -H "Authorization: Bearer {token}" \ -H "Content-Type: application/json" \ -d '{ "finished_goods_code": "SC-1000", "W0": 3000, "H0": 2500, "QTY": 1, "PC": "SCREEN", "GT": "wall", "MP": "single", "CT": "basic", "debug": true }' ``` ### 응답 ```json { "success": true, "message": "견적이 산출되었습니다.", "data": { "success": true, "finished_goods": {"code": "SC-1000", "name": "전동스크린 1000형"}, "variables": {"W0": 3000, "H0": 2500, "W1": 3100, "H1": 2650, "M": 8.215, "K": 12.5}, "items": [...], "grouped_items": {...}, "subtotals": {"material": 500000, "labor": 100000, "install": 50000}, "grand_total": 650000, "debug_steps": [...] } } ```