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

9.1 KiB
Raw Blame History

견적 시스템 개발 계획

작성일: 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() 반환 구조 확장

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

// 서비스 품목 추가
$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 개발 계획을 정의합니다.