- quote-system-development-plan.md: mng 견적 시스템 확장 + API 개발 계획 - index_plans.md: 계획 인덱스 업데이트 - react-mock-to-api-migration-plan.md: 마이그레이션 계획 업데이트
319 lines
9.1 KiB
Markdown
319 lines
9.1 KiB
Markdown
# 견적 시스템 개발 계획
|
||
|
||
> **작성일**: 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 개발 계획을 정의합니다.* |