# 견적 기능 개발 진행 현황

> **마스터 플랜:** [MASTER_PLAN.md](./MASTER_PLAN.md)
> **공통 정책:** [PROJECT_DEVELOPMENT_POLICY.md](../../guides/PROJECT_DEVELOPMENT_POLICY.md)
> **최종 업데이트:** 2025-12-19 (Phase 4 DB 기반 재작성 완료)

---

## 전체 진행률

| Phase | 상태 | 진행률 | 시작일 | 완료일 |
|-------|------|--------|--------|--------|
| Phase 1: 5130 분석 | ✅ 완료 | 100% | 2025-12-19 | 2025-12-19 |
| Phase 2: mng 분석 | ✅ 완료 | 100% | 2025-12-19 | 2025-12-19 |
| Phase 3: 구현 | ✅ 완료 | 100% | 2025-12-19 | 2025-12-19 |
| Phase 4: API 개발 | 🔄 진행 | 60% | 2025-12-19 | - |

---

## 🔄 현재 작업

**현재 Phase:** Phase 4 진행 중
**완료된 작업:** mng 패턴 적용 - DB 기반 견적 산출 서비스 재작성
**다음 작업:** 견적 API 통합 테스트 및 Swagger 문서화

---

## ✅ Phase 1: 5130 견적 기능 분석 (완료)

### 체크리스트
- [x] UI/화면 분석 (list.php, write_form.php 등)
- [x] JS 수식 분석 (calculation.js, fetch_unitprice.php)
- [x] PHP 계산 로직 분석 (get_screen_amount.php, get_slat_amount.php)
- [x] DB 구조 분석 (estimate, BDmodels, price_* 테이블)
- [x] 비즈니스 로직 문서화
- [x] README.md 작성

### 산출물
- [x] [README.md](./phase-1-5130-analysis/README.md) - 분석 체크리스트 및 요약
- [x] [js-formulas.md](./phase-1-5130-analysis/js-formulas.md) - **핵심** 수식 분석 (19개 항목)
- [x] [ui-analysis.md](./phase-1-5130-analysis/ui-analysis.md) - 화면별 기능 분석
- [x] [db-structure.md](./phase-1-5130-analysis/db-structure.md) - 테이블/컬럼 구조
- [x] [business-logic.md](./phase-1-5130-analysis/business-logic.md) - 비즈니스 로직 정리

### 핵심 발견 사항

#### 견적 유형 (2가지)
| 유형 | 주요 특징 |
|------|----------|
| 스크린 | 면적 기반 (높이+550), 실리카/와이어 소재 |
| 슬랫(철재) | 면적 기반 (높이+50), 방화슬랫 소재 |

#### 계산 항목 (18개)
검사비, 주자재, 조인트바, 모터, 제어기, 케이스, 케이스연기차단재, 마구리, 앵글, 가이드레일, 레일연기차단재, 하장바, L바, 보강평철, 샤프트, 무게평철, 환봉, 각파이프

#### 옵션 체크박스 (5개)
| 옵션 | 영향 항목 |
|------|----------|
| 절곡 | 케이스, 레일, 연기차단재, 하장바, L바, 보강평철 |
| 모터 | 모터 가격 |
| 보증 | 보증기간 |
| 슬랫 | 주자재(슬랫), 조인트바 |
| 부자재 | 샤프트, 각파이프, 앵글 |

---

## ✅ Phase 2: mng 견적 수식 관리 분석 (완료)

### 체크리스트
- [x] 현재 구현 상태 분석 (quote-formulas)
- [x] 오류/문제점 목록화
- [x] 5130과의 차이점 분석
- [x] 개선 방향 도출
- [x] README.md 작성

### 산출물
- [x] [README.md](./phase-2-mng-analysis/README.md) - 분석 요약
- [x] [current-state.md](./phase-2-mng-analysis/current-state.md) - 현재 구현 상태
- [x] [issues.md](./phase-2-mng-analysis/issues.md) - 문제점 및 개선사항

### 핵심 발견 사항

#### 구현 상태 요약
| 구성요소 | 개수 | 상태 |
|----------|------|------|
| DB 테이블 | 5개 | ✅ 완료 |
| Models | 5개 | ✅ 완료 |
| Services | 2개 | ✅ 완료 |
| Controllers | 3개 | ✅ 완료 |
| Views | 9개 | ✅ 완료 |

#### 핵심 이슈 (Phase 3에서 해결)
| 우선순위 | 이슈 | 설명 |
|---------|------|------|
| 🔴 Critical | 품목 단가 조회 | getItemPrice() TODO 상태 |
| 🔴 Critical | 수식 데이터 미입력 | 테이블 비어있음 |
| 🟡 Important | eval() 사용 | 보안 취약점 |

#### 5130 vs mng 비교
| 항목 | 5130 | mng | 평가 |
|------|------|-----|------|
| 수식 저장 | JS 하드코딩 | DB 동적관리 | ✅ mng 우수 |
| 카테고리 분류 | 없음 | 13개 지원 | ✅ mng 우수 |
| 품목 단가 연동 | 직접 조회 | TODO 상태 | 🔴 미완성 |

---

## ✅ Phase 3: mng 견적 기능 구현 (완료)

### 체크리스트
- [x] 테이블 매핑 (5130 → SAM)
- [x] getItemPrice() 연동 구현
- [x] Price 모델 생성 (mng)
- [x] Seeder 확인 및 실행 방법 문서화
- [x] README.md 작성

### 산출물
- [x] [README.md](./phase-3-implementation/README.md) - 구현 요약
- [x] [table-mapping.md](./phase-3-implementation/table-mapping.md) - 테이블 매핑
- [x] [implementation.md](./phase-3-implementation/implementation.md) - 구현 상세

### 핵심 구현 내용

#### getItemPrice() 연동
**파일:** `mng/app/Services/Quote/FormulaEvaluatorService.php:324-335`
- prices 테이블 연동 완료
- 품목 코드 → 판매단가 조회 구현

#### Price 모델
**파일:** `mng/app/Models/Price.php`
- getCurrentPrice(): 현재 유효 단가 조회
- getSalesPriceByItemCode(): 품목 코드로 단가 조회

#### Seeder 실행 방법
```bash
cd /Users/hskwon/Works/@KD_SAM/SAM/api
php artisan db:seed --class=QuoteFormulaCategorySeeder
php artisan db:seed --class=QuoteFormulaSeeder
```

---

## 🔄 Phase 4: 견적 API 개발 (진행 중)

### 체크리스트
- [x] api 프로젝트 prices 테이블 연동
- [x] Price 모델에 getCurrentPrice(), getSalesPriceByItemCode() 추가
- [x] QuoteCalculationService prices 조회로 변경
- [x] mng 패턴 적용 - Quote 수식 모델 생성
- [x] FormulaEvaluatorService DB 기반 확장
- [x] QuoteCalculationService DB 기반 재작성
- [ ] 견적 API 통합 테스트
- [ ] Swagger 문서화
- [ ] React 연동 스펙
- [ ] README.md 작성

### 산출물
- [ ] phase-4-api/README.md
- [ ] phase-4-api/api-spec.md

### 완료된 작업 (2025-12-19)

#### 1. api 프로젝트 prices 테이블 연동

**수정된 파일:**
- `api/app/Models/Products/Price.php`
  - 상수 추가: STATUS_*, ITEM_TYPE_*
  - getCurrentPrice(): 현재 유효 단가 조회
  - getSalesPriceByItemCode(): 품목 코드로 단가 조회

**Git 커밋:**
- `4d3085e` feat: 견적 산출 서비스 prices 테이블 연동

#### 2. mng 패턴 적용 - DB 기반 견적 산출 재작성

**추가된 파일:**
- `api/app/Models/Quote/QuoteFormula.php` - 수식 정의 모델
- `api/app/Models/Quote/QuoteFormulaCategory.php` - 카테고리 모델
- `api/app/Models/Quote/QuoteFormulaItem.php` - 품목 출력 모델
- `api/app/Models/Quote/QuoteFormulaRange.php` - 범위별 값 모델
- `api/app/Models/Quote/QuoteFormulaMapping.php` - 매핑 값 모델

**수정된 파일:**
- `api/app/Models/Products/Price.php`
  - items 테이블 연동 (products/materials 대체)
  - ITEM_TYPE 상수 업데이트 (FG/PT/RM/SM/CS)

- `api/app/Services/Quote/FormulaEvaluatorService.php`
  - executeAll(): 카테고리별 수식 실행 (mng 패턴)
  - evaluateRangeFormula(): QuoteFormula 기반 범위 평가
  - evaluateMappingFormula(): QuoteFormula 기반 매핑 평가
  - getItemPrice(): prices 테이블 연동

- `api/app/Services/Quote/QuoteCalculationService.php`
  - 하드코딩된 품목 코드/로직 제거
  - quote_formulas 테이블 기반 동적 계산
  - getFormulasByCategory(): DB에서 수식 조회
  - getInputSchema(): DB 기반 입력 스키마 생성

**핵심 변경:**
- 기존: 하드코딩된 품목 코드 (SCR-FABRIC-001 등)
- 변경: quote_formula_items 테이블에서 동적 조회

**Git 커밋:**
- `0d49e4c` refactor: 견적 산출 서비스 DB 기반으로 재작성

---

## 🏷️ Git 태그

| 태그 | 설명 | 생성일 |
|------|------|--------|
| - | - | - |

---

## 📝 정책 결정 기록

| 날짜 | 항목 | 결정 내용 | 근거 |
|------|------|----------|------|
| 2025-12-19 | DB 작업 위치 | api 프로젝트에서만 | mng 마이그레이션 방지 |
| 2025-12-19 | 신규 테이블 정책 | options JSON 적용 | Hybrid EAV 전략 |
| 2025-12-19 | 견적 유형 | 스크린/슬랫 2가지 | 5130 기존 구조 유지 |
| 2025-12-19 | 체크박스 옵션 | JSON으로 통합 저장 | 확장성 고려 |
| 2025-12-19 | 품목 테이블 | items 테이블 사용 | products/materials 통합 완료 |
| 2025-12-19 | 견적 산출 방식 | mng 패턴 (DB 기반) | 하드코딩 제거, 동적 수식 관리 |
| 2025-12-19 | tenant_id 없을 때 | 예외 발생 (fallback 금지) | 데이터 무결성 보장 |

---

## ⚠️ 이슈/블로커

_현재 이슈 없음_

---

## 📚 참조 문서

- [MASTER_PLAN.md](./MASTER_PLAN.md) - 마스터 플랜
- [phase-1-5130-analysis/](./phase-1-5130-analysis/) - Phase 1 분석 결과
- [docs/projects/mes/v1-analysis/quotation-analysis.md](../mes/v1-analysis/quotation-analysis.md) - MES 견적 분석
- [docs/projects/legacy-5130/03_ESTIMATE.md](../legacy-5130/03_ESTIMATE.md) - 5130 레거시 분석
