# 견적 시스템 개발 계획

> **작성일**: 2025-12-24
> **목표**: mng 수식 시뮬레이터를 완전한 견적 시스템으로 확장 후 React API 개발

---

## 1. 개발 단계

### Stage 1: mng 견적 시스템 완성 (현재)
**목표**: 스크린샷과 동일한 견적 시스템을 mng Plain Blade로 구현

### Stage 2: API 개발
**목표**: React 프론트엔드에서 호출할 견적 산출 REST API 개발

---

## 2. 현재 상태 vs 목표 상태

### 2.1 입력 폼 비교

| 필드 | 현재 시뮬레이터 | 목표 (스크린샷) | 상태 |
|------|----------------|----------------|------|
| 층수 | ❌ | 예: 1층, B1, 지하1층 | 추가 필요 |
| 부호 | ❌ | 예: A, B, C | 추가 필요 |
| 제품 카테고리 (PC) | ✅ | 스크린, 철재 등 | 완료 |
| 제품명 | ✅ | 방화 스크린 셔터 등 | 완료 |
| 오픈사이즈 W0 | ✅ | 가로 | 완료 |
| 오픈사이즈 H0 | ✅ | 세로 | 완료 |
| 가이드레일 설치유형 (GT) | ✅ | 벽면형, 측면형 | 완료 |
| 모터 전원 (MP) | ✅ | 220V, 380V | 완료 |
| 연동제어기 (CT) | ✅ | 단독, 연동 | 완료 |
| 수량 (QTY) | ✅ | 1, 2, 3... | 완료 |
| 마구리 날개치수 (WS) | ❌ | 50 등 | 추가 필요 |
| 검사비 (INSP) | ❌ | 50000 등 | 추가 필요 |

### 2.2 출력 결과 비교

| 섹션 | 현재 시뮬레이터 | 목표 (스크린샷) | 상태 |
|------|----------------|----------------|------|
| 입력 정보 요약 | ❌ | 제품명, 카테고리, 오픈사이즈, 설치유형 등 요약 | 추가 필요 |
| 기본 산출 공식 | ❌ | 제작폭(W1), 제작높이(H1), 면적(M), 중량(K) 표시 | 추가 필요 |
| BOM 목록 테이블 | ⚠️ 공정별 그룹화 | 순번, 품목코드, 품목명, 품목유형, 규격, 기준수량, 산출수량, 단위, 단가, 금액, 작업 | 구조 변경 필요 |
| 품목 추가/삭제 | ❌ | + 품목 추가 버튼, 휴지통 삭제 버튼 | 추가 필요 |
| 할인율 | ❌ | 할인율(%) 입력 | 추가 필요 |
| 금액 요약 | ⚠️ 합계만 | 합계, 공급가, 최종 금액 | 확장 필요 |

---

## 3. Stage 1: mng 견적 시스템 상세 계획

### Phase 1: UI 확장 (1일)
**파일**: `resources/views/quote-formulas/simulator.blade.php`

#### 1.1 입력 폼 확장
```
추가 필드:
- 층수 (floor): text input, placeholder "예: 1층, B1, 지하1층"
- 부호 (code): text input, placeholder "예: A, B, C"
- 마구리 날개치수 (WS): number input, default 50
- 검사비 (INSP): number input, default 50000
```

#### 1.2 견적 항목 다중 입력
```
- 견적 1, 견적 2, ... 탭 형태
- "+ 견적 추가" 버튼
- 복사, 삭제 버튼
```

#### 1.3 결과 출력 섹션
```
1. 입력 정보 요약 카드
   - 제품명, 제품 카테고리, 오픈사이즈, 가이드레일 설치, 모터 전원, 연동제어기, 수량

2. 기본 산출 공식 카드
   - 제작폭 (W1): 값 + 계산식
   - 제작높이 (H1): 값 + 계산식
   - 면적 (M): 값 + 단위
   - 중량 (K): 값 + 단위

3. 부품구성표(BOM) 목록 테이블
   - 컬럼: 순번, 품목코드, 품목명, 품목유형, 규격, 기준수량, 산출수량, 단위, 단가, 금액, 작업
   - "+ 품목 추가" 버튼
   - 행별 삭제 버튼

4. 금액 요약
   - 할인율(%) 입력
   - 합계, 공급가, 최종 금액
```

### Phase 2: 백엔드 로직 확장 (1일)
**파일**: `app/Services/Quote/FormulaEvaluatorService.php`

#### 2.1 executeAll() 반환 구조 확장
```php
return [
    'input_summary' => [
        'product_name' => '방화 스크린 셔터 (소형)',
        'product_category' => '스크린',
        'open_size' => 'W2000 × H2500',
        'guide_rail_type' => '벽면형',
        'motor_power' => '220V',
        'controller' => '단독',
        'quantity' => 1,
    ],
    'calculation_formula' => [
        'W1' => ['value' => 2140, 'formula' => 'W0 + 140'],
        'H1' => ['value' => 2850, 'formula' => 'H0 + 350'],
        'M' => ['value' => 6.10, 'unit' => '㎡'],
        'K' => ['value' => 0.00, 'unit' => 'kg'],
    ],
    'bom_items' => [
        [
            'seq' => 1,
            'item_code' => 'SF-SCR-F01',
            'item_name' => '스크린 원단',
            'item_type' => 'SF',
            'spec' => '-',
            'base_quantity' => 1.10,
            'calculated_quantity' => 6.099,
            'unit' => 'M2',
            'unit_price' => 213465,
            'total_price' => 1301923.035,
            'editable' => true,
        ],
        // ... more items
    ],
    'summary' => [
        'subtotal' => 2806523.035,
        'discount_rate' => 0,
        'discount_amount' => 0,
        'supply_price' => 2806523.035,
        'total_amount' => 2806523.035,
    ],
];
```

### Phase 3: 검사비 품목 추가 (0.5일)
**파일**: `database/seeders/DesignItemSeeder.php`

```php
// 서비스 품목 추가
$serviceItems = [
    ['code' => 'SVC-INSP', 'name' => '검사비', 'unit' => '식', 'price' => 50000, 'type' => 'CS'],
    ['code' => 'SVC-INSTALL', 'name' => '설치비', 'unit' => '식', 'price' => 100000, 'type' => 'CS'],
    ['code' => 'SVC-DELIVERY', 'name' => '운송비', 'unit' => '식', 'price' => 80000, 'type' => 'CS'],
];
```

### Phase 4: 테스트 및 검증 (0.5일)
- Playwright로 전체 플로우 테스트
- Design 시스템 결과와 비교 검증

---

## 4. Stage 2: API 개발 상세 계획

### Phase 1: API 엔드포인트 설계 (0.5일)

#### 4.1 견적 산출 API
```
POST /api/v1/quotes/calculate

Request:
{
    "items": [
        {
            "floor": "1층",
            "code": "A",
            "product_category": "screen",
            "product_id": "screen_standard",
            "open_width": 2000,
            "open_height": 2500,
            "guide_rail_type": "wall",
            "motor_power": "220V",
            "controller": "single",
            "quantity": 1,
            "wing_size": 50,
            "inspection_fee": 50000
        }
    ],
    "discount_rate": 0
}

Response:
{
    "success": true,
    "data": {
        "quotes": [
            {
                "quote_id": "quote-1",
                "input_summary": { ... },
                "calculation_formula": { ... },
                "bom_items": [ ... ],
                "summary": { ... }
            }
        ],
        "total_summary": {
            "total_items": 1,
            "total_amount": 2806523.035
        }
    }
}
```

#### 4.2 제품 목록 API
```
GET /api/v1/quotes/products?category=screen

Response:
{
    "success": true,
    "data": [
        {
            "id": "screen_standard",
            "name": "스크린 셔터 (표준형)",
            "category": "screen"
        }
    ]
}
```

#### 4.3 옵션 목록 API
```
GET /api/v1/quotes/options

Response:
{
    "success": true,
    "data": {
        "product_categories": [...],
        "guide_rail_types": [...],
        "motor_powers": [...],
        "controllers": [...]
    }
}
```

### Phase 2: API 컨트롤러 구현 (1일)
**파일**: `api/app/Http/Controllers/Api/V1/QuoteCalculationController.php`

### Phase 3: API 테스트 (0.5일)
- Postman/Swagger 테스트
- React 연동 테스트

---

## 5. 일정 요약

| Stage | Phase | 작업 내용 | 예상 일정 |
|-------|-------|----------|----------|
| **Stage 1** | Phase 1 | mng UI 확장 | 1일 |
| | Phase 2 | 백엔드 로직 확장 | 1일 |
| | Phase 3 | 검사비 품목 추가 | 0.5일 |
| | Phase 4 | 테스트 및 검증 | 0.5일 |
| | **소계** | | **3일** |
| **Stage 2** | Phase 1 | API 설계 | 0.5일 |
| | Phase 2 | API 구현 | 1일 |
| | Phase 3 | API 테스트 | 0.5일 |
| | **소계** | | **2일** |
| **합계** | | | **5일** |

---

## 6. 파일 구조

### Stage 1 (mng)
```
/SAM/mng/
├── app/Services/Quote/
│   └── FormulaEvaluatorService.php    # 로직 확장
├── database/seeders/
│   └── DesignItemSeeder.php           # 서비스 품목 추가
└── resources/views/quote-formulas/
    └── simulator.blade.php            # UI 확장
```

### Stage 2 (api)
```
/SAM/api/
├── app/Http/Controllers/Api/V1/
│   └── QuoteCalculationController.php  # 신규
├── app/Services/Quote/
│   └── QuoteCalculationService.php     # 신규 (또는 mng 서비스 공유)
└── routes/
    └── api.php                         # 라우트 추가
```

---

## 7. 성공 기준

### Stage 1
1. ✅ 스크린샷과 동일한 입력 폼 (층수, 부호, WS, INSP 포함)
2. ✅ 입력 정보 요약 섹션 표시
3. ✅ 기본 산출 공식 섹션 표시
4. ✅ BOM 테이블 (순번~금액 컬럼)
5. ✅ 품목 추가/삭제 기능
6. ✅ 할인율 + 최종 금액 계산

### Stage 2
1. ✅ POST /api/v1/quotes/calculate 정상 작동
2. ✅ GET /api/v1/quotes/products 정상 작동
3. ✅ GET /api/v1/quotes/options 정상 작동
4. ✅ Swagger 문서화 완료
5. ✅ React에서 API 호출 테스트 완료

---

## 8. 참고 문서

- `docs/plans/simulator-calculation-logic-mapping.md` - 계산 로직 상세
- `react/src/components/quotes/QuoteRegistration.tsx` - React UI 참조
- `design/src/components/AutoCalculationSimulator.tsx` - Design 시뮬레이터 참조

---

*이 문서는 mng 견적 시스템 완성 및 API 개발 계획을 정의합니다.*