Files
sam-docs/plans/quote-system-development-plan.md
hskwon 7b0de7ba6a 견적 시스템 개발 계획 문서 추가
- quote-system-development-plan.md: mng 견적 시스템 확장 + API 개발 계획
- index_plans.md: 계획 인덱스 업데이트
- react-mock-to-api-migration-plan.md: 마이그레이션 계획 업데이트
2025-12-24 18:00:36 +09:00

319 lines
9.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 견적 시스템 개발 계획
> **작성일**: 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 개발 계획을 정의합니다.*